[www] r1027 - trunk/www.matroska.org/data/technical/specs

[email protected] Thu, 6 Oct 2005 23:37:18 +0400 (MSD)
Newsgroups gmane.comp.multimedia.matroska.cvs
Message-ID <[email protected]>
Author: robux4
Date: 2005-10-06 23:37:07 +0400 (Thu, 06 Oct 2005)
New Revision: 1027

Modified:
   trunk/www.matroska.org/data/technical/specs/index.html
Log:
specs: add SimpleBlock, make BlockGroup no more mandatory

Modified: trunk/www.matroska.org/data/technical/specs/index.html
===================================================================
--- trunk/www.matroska.org/data/technical/specs/index.html	2005-10-02 11:45:06 UTC (rev 1026)
+++ trunk/www.matroska.org/data/technical/specs/index.html	2005-10-06 19:37:07 UTC (rev 1027)
@@ -700,8 +700,8 @@
   <td>BlockGroup</td>
   <td>2</td>
   <td>[A0]</td>
+  <td>-</td>
   <td>*</td>
-  <td>*</td>
   <td>-</td>
   <td>-</td>
   <td>sub-elements</td>
@@ -817,6 +817,17 @@
 <tr id="SDuration">
   <td>Duration</td><td>5</td><td>[CF]</td><td>-</td><td>-</td><td>-</td><td>0</td><td>u-integer</td><td>The (scaled) duration to apply to the element.</td>
 </tr>
+<tr id="SimpleBlock">
+  <td>SimpleBlock</td>
+  <td>2</td>
+  <td>[A3]</td>
+  <td>-</td>
+  <td>*</td>
+  <td>-</td>
+  <td>-</td>
+  <td>binary (see <a href="#simpleblock_structure">SimpleBlock Structure</a>)</td>
+  <td>Similar to <a href="#Block">Block</a> but without all the extra information, mostly used to reduced overhead when no extra feature is needed.</td>
+</tr>
 <tr id="Track">
   <th colspan="9">Track</th>
 </tr>
@@ -2526,6 +2537,46 @@
 </ul>
 </div>
 
+<div>
+<h4 id="simpleblock_structure">SimpleBlock Structure</h4>
+<p>The SimpleBlock is very inspired by the <a href="simpleblock_structure">Block structure</a>. The main difference is the Keyframe flag that is used. Otherwise everything is the same.</p>
+<p>Size = 1 + (1-8) + 4 + (4 + (4)) octets. So from 6 to 21 octets.</p>
+<p>Bit 0 is the most significant bit.</p>
+<p>Frames using references should be stored in &quot;coding order&quot;. That means the references first and then the frames referencing them. A consequence is that timecodes may not be consecutive. But a frame with a past timecode must reference a frame already known, otherwise it's considered bad/void.</p>
+<p>There can be many Blocks in a BlockGroup provided they all have the same timecode. It is used with different parts of a frame with different priorities.</p>
+<div class="techdef">
+<table>
+<tbody><tr><th colspan="3">Block Header</th></tr>
+<tr><th>Offset</th><th>Player</th><th>Description</th></tr>
+<tr><td>0x00+</td><td>must</td><td id="Block_Track">Track Number (Track Entry). It is coded in EBML like form (1 octet if the value is &lt; 0x80, 2 if &lt; 0x4000, etc) (most significant bits set to increase the range).</td></tr>
+<tr><td>0x01+</td><td>must</td><td id="Block_Timecode">Timecode (relative to Cluster timecode, signed int16)</td></tr>
+<tr><td>0x03+</td><td>-</td><td>
+ <table border="1">
+ <tbody><tr><th colspan="3">Flags</th></tr>
+ <tr><th>Bit</th><th>Player</th><th>Description</th></tr>
+ <tr><td>7</td><td>-</td><td>Keyframe, set when the Block contains only keyframes</td></tr>
+ <tr><td>5-6</td><td>must</td><td>Lacing<ul>
+
+ <li>00 : no lacing</li>
+
+ <li>01 : Xiph lacing</li>
+
+ <li>11 : EBML lacing</li>
+
+ <li>10 : fixed-size lacing</li>
+
+ </ul></td></tr>
+ <tr><td>4</td><td>-</td><td>Invisible, the codec should decode this frame but not display it</td></tr>
+ <tr><td>3-0</td><td>-</td><td>Reserved, set to 0</td></tr>
+ </tbody></table>
+</td></tr>
+<tr><th colspan="3">Lace (when lacing bit is set)</th></tr>
+<tr><td>0x00</td><td>must</td><td>Number of frames in the lace-1 (uint8)</td></tr>
+<tr><td>0x01 / 0xXX</td><td>must*</td><td>Lace-coded size of each frame of the lace, except for the last one (multiple uint8). *This is not used with Fixed-size lacing as it is calculated automatically from (total size of lace) / (number of frames in lace).</td></tr>
+<tr><td>-</td><td>must</td><td>Consecutive laced frames</td></tr>
+</tbody></table></div>
+</div>
+
 <div class="version2">
 <h4 id="block_virtual">Virtual Block</h4>
 <p>The data in matroska is stored in coding order. But that means if you seek to a particular point and a frame has been referenced far away, you won't know while playing and you might miss this frame (true for independent frames and overlapping of dependent frames). So the idea is to have a placeholder for the original frame in the timecode (display) order.</p>