[xiph-commits] r16781 - in trunk/vorbis/doc: . xml
xiphmont at svn.xiph.org
xiphmont at svn.xiph.org
Wed Jan 13 18:34:05 PST 2010
Author: xiphmont
Date: 2010-01-13 18:34:05 -0800 (Wed, 13 Jan 2010)
New Revision: 16781
Modified:
trunk/vorbis/doc/04-codec.tex
trunk/vorbis/doc/Vorbis_I_spec.css
trunk/vorbis/doc/Vorbis_I_spec.html
trunk/vorbis/doc/Vorbis_I_spec.pdf
trunk/vorbis/doc/xml/04-codec.xml
Log:
Add official channel ordering/location for 6.1/7.1 surround.
Modified: trunk/vorbis/doc/04-codec.tex
===================================================================
--- trunk/vorbis/doc/04-codec.tex 2010-01-13 22:01:16 UTC (rev 16780)
+++ trunk/vorbis/doc/04-codec.tex 2010-01-14 02:34:05 UTC (rev 16781)
@@ -606,10 +606,12 @@
Vorbis I specifies only a channel mapping type 0. In mapping type 0,
channel mapping is implicitly defined as follows for standard audio
-applications:
+applications. As of revision 16781 (20100113), the specification adds
+defined channel locations for 6.1 and 7.1 surround. Ordering/location
+for greater-than-eight channels remains 'left to the implementation'.
\begin{description} %[style=nextline]
- \item[three channels]
+ \item[one channel]
the stream is monophonic
\item[two channels]
@@ -625,13 +627,22 @@
\item[five channels]
the stream is five-channel surround. channel order: front left,
-front center, front right, rear left, rear right
+center, front right, surround rear left, surround rear right
\item[six channels]
- the stream is 5.1 surround. channel order: front left, front
-center, front right, rear left, rear right, LFE
+ the stream is 5.1 surround. channel order: front left, center,
+front right, surround rear left, surround rear right, LFE
-\item[greater than six channels]
+\item[seven channels]
+ the stream is 6.1 surround. channel order: front left, center,
+front right, surround left, surround right, surround (center) rear, LFE
+
+\item[eight channels]
+ the stream is 7.1 surround. channel order: front left, center,
+front right, surround left, surround right, surround rear left, surround rear right,
+LFE
+
+\item[greater than eight channels]
channel use and order is defined by the application
\end{description}
Modified: trunk/vorbis/doc/Vorbis_I_spec.css
===================================================================
--- trunk/vorbis/doc/Vorbis_I_spec.css 2010-01-13 22:01:16 UTC (rev 16780)
+++ trunk/vorbis/doc/Vorbis_I_spec.css 2010-01-14 02:34:05 UTC (rev 16781)
@@ -34,6 +34,9 @@
.Canvas { position:relative; }
img.math{vertical-align:middle;}
li p.indent { text-indent: 0em }
+li p:first-child{ margin-top:0em; }
+li p:last-child, li div:last-child { margin-bottom:0.5em; }
+li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
.enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;}
@@ -67,6 +70,8 @@
div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
table.tabular td p{margin-top:0em;}
table.tabular {margin-left: auto; margin-right: auto;}
+td p:first-child{ margin-top:0em; }
+td p:last-child{ margin-bottom:0em; }
div.td00{ margin-left:0pt; margin-right:0pt; }
div.td01{ margin-left:0pt; margin-right:5pt; }
div.td10{ margin-left:5pt; margin-right:0pt; }
@@ -84,8 +89,9 @@
a span.TEX span.E {text-decoration: none; }
span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
span.LATEX span.TEX{ position:relative; left: -0.4em; }
-div.float img, div.float .caption {text-align:center;}
-div.figure img, div.figure .caption {text-align:center;}
+div.float, div.figure {margin-left: auto; margin-right: auto;}
+div.float img {text-align:center;}
+div.figure img {text-align:center;}
.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
table.equation {width:100%;}
@@ -102,12 +108,13 @@
span.pmatrix img{vertical-align:middle;}
div.pmatrix {text-align:center;}
table.pmatrix {width:100%;}
+span.bar-css {text-decoration:overline;}
img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
.chapterToc a, .chapterToc, .likechapterToc a, .likechapterToc, .appendixToc a, .appendixToc {line-height: 200%; font-weight:bold;}
.index-item, .index-subitem, .index-subsubitem {display:block}
-.caption td.id{font-weight: bold; white-space: nowrap; }
-table.caption {text-align:center;}
+div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
+div.caption span.id{font-weight: bold; white-space: nowrap; }
h1.partHead{text-align: center}
p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
Modified: trunk/vorbis/doc/Vorbis_I_spec.html
===================================================================
--- trunk/vorbis/doc/Vorbis_I_spec.html 2010-01-13 22:01:16 UTC (rev 16780)
+++ trunk/vorbis/doc/Vorbis_I_spec.html 2010-01-14 02:34:05 UTC (rev 16781)
@@ -7,7 +7,7 @@
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
<!-- html -->
<meta name="src" content="Vorbis_I_spec.tex">
-<meta name="date" content="2009-06-02 19:28:00">
+<meta name="date" content="2010-01-13 21:33:00">
<link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css">
</head><body
>
@@ -24,7 +24,7 @@
class="cmr-17">Xiph.org Foundation</span></div>
<br />
<div class="date" ><span
-class="cmr-17">June 2, 2009</span></div>
+class="cmr-17">January 13, 2010</span></div>
</div>
<h3 class="likesectionHead"><a
id="x1-1000"></a>Contents</h3>
@@ -250,7 +250,7 @@
id="x1-30001.1"></a>Overview</h4>
<!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec’s construction. A bit-by-bit
specification appears beginning in <a
-href="#x1-580004">Section 4<!--tex4ht:ref: vorbis:spec:codec --></a>, “<a
+href="#x1-580004">Section 4</a>, “<a
href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>”. The later
sections assume a high-level understanding of the Vorbis decode process, which is provided
here.
@@ -303,7 +303,7 @@
although this is by no means a requirement or fundamental assumption in the Vorbis
design.
<!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a
-href="#x1-126000A">Section A<!--tex4ht:ref: vorbis:over:ogg --></a>,
+href="#x1-126000A">Section A</a>,
“<a
href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>”.
<!--l. 77--><p class="noindent" >
@@ -369,9 +369,9 @@
<!--l. 142--><p class="noindent" ><img
src="components.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 1: </td><td
-class="content">decoder pipeline configuration</td></tr></table><!--tex4ht:label?: x1-110011 -->
+<br /> <div class="caption"
+><span class="id">Figure 1: </span><span
+class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 -->
</div>
<!--l. 146--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">1.2.1 </span> <a
@@ -493,7 +493,7 @@
The comment header includes user text comments (“tags”) and a vendor string for the
application/library that produced the bitstream. The encoding and proper use of the comment
header is described in <a
-href="#x1-810005">Section 5<!--tex4ht:ref: vorbis:spec:comment --></a>, “<a
+href="#x1-810005">Section 5</a>, “<a
href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>”.
<!--l. 284--><p class="noindent" ><span class="paragraphHead"><a
id="x1-220001.3.1"></a><span
@@ -592,9 +592,9 @@
<!--l. 357--><p class="noindent" ><img
src="window1.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 2: </td><td
-class="content">overlap of two equal-sized windows</td></tr></table><!--tex4ht:label?: x1-260012 -->
+<br /> <div class="caption"
+><span class="id">Figure 2: </span><span
+class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 -->
</div>
<!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
<div class="center"
@@ -604,9 +604,9 @@
<!--l. 365--><p class="noindent" ><img
src="window2.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 3: </td><td
-class="content">overlap of a long and a short window</td></tr></table><!--tex4ht:label?: x1-260023 -->
+<br /> <div class="caption"
+><span class="id">Figure 3: </span><span
+class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 -->
</div>
<!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
seamless lapping as above. It is possible to correctly infer window shape to be applied to the
@@ -622,7 +622,7 @@
Vorbis windows all use the slope function
<center class="math-display" >
<img
-src="Vorbis_I_spec0x.png" alt="y = sin (.5 * π sin2((x + .5)∕n * π)).
+src="Vorbis_I_spec0x.png" alt="y = sin (.5 ∗ π sin2((x + .5)∕n ∗ π)).
@@ -685,17 +685,17 @@
in all cases because it happens to mostly work with the current Xiph.Org reference
encoder.
<!--l. 462--><p class="noindent" >However, floor vector values can span <span
-class="cmsy-10x-x-120">~</span>140dB (<span
-class="cmsy-10x-x-120">~</span>24 bits unsigned), and the audio spectrum
+class="cmsy-10x-x-120">∼</span>140dB (<span
+class="cmsy-10x-x-120">∼</span>24 bits unsigned), and the audio spectrum
vector should represent a minimum of 120dB (<span
-class="cmsy-10x-x-120">~</span>21 bits with sign), even when output is to a 16
+class="cmsy-10x-x-120">∼</span>21 bits with sign), even when output is to a 16
bit PCM device. For the residue vector to represent full scale if the floor is nailed
to <span
-class="cmsy-10x-x-120">-</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
+class="cmsy-10x-x-120">−</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
full scale if the floor is nailed at 0dB, it must be able to represent <span
-class="cmsy-10x-x-120">-</span>140dB to +0dB.
+class="cmsy-10x-x-120">−</span>140dB to +0dB.
Thus, in order to handle full range dynamics, a residue vector may span <span
-class="cmsy-10x-x-120">-</span>140dB to
+class="cmsy-10x-x-120">−</span>140dB to
+140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
residue vector must be able to represent a 48 bit range and the dot product must
be able to handle an effective 48 bit times 24 bit multiplication. This range may be
@@ -1839,14 +1839,14 @@
<!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
read from the stream according to <a
-href="#x1-360002">Section 2<!--tex4ht:ref: vorbis:spec:bitpacking --></a>, “<a
+href="#x1-360002">Section 2</a>, “<a
href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>”.
<!--l. 27--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">3.2 </span> <a
id="x1-500003.2"></a>Packed codebook format</h4>
<!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system’s native byte width is
eight bits. This is not universally true; see <a
-href="#x1-360002">Section 2<!--tex4ht:ref: vorbis:spec:bitpacking --></a>, “<a
+href="#x1-360002">Section 2</a>, “<a
href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>” for discussion
relating to non-eight-bit bytes.
@@ -3018,9 +3018,9 @@
<!--l. 248--><p class="noindent" ><img
src="hufftree.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 4: </td><td
-class="content">huffman tree illustration</td></tr></table><!--tex4ht:label?: x1-530014 -->
+<br /> <div class="caption"
+><span class="id">Figure 4: </span><span
+class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
</div>
<!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
possible position.
@@ -3034,9 +3034,9 @@
<!--l. 261--><p class="noindent" ><img
src="hufftree-under.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 5: </td><td
-class="content">underspecified huffman tree illustration</td></tr></table><!--tex4ht:label?: x1-530025 -->
+<br /> <div class="caption"
+><span class="id">Figure 5: </span><span
+class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
</div>
<!--l. 266--><p class="noindent" >Similarly, in the original codebook, it’s clear that the tree is fully populated and a ninth
codeword is impossible. Both underspecified and overspecified trees are an error condition
@@ -3618,9 +3618,9 @@
<!--l. 8--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
process, which is provided in <a
-href="#x1-20001">Section 1<!--tex4ht:ref: vorbis:spec:intro --></a>, “<a
+href="#x1-20001">Section 1</a>, “<a
href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>”. <a
-href="#x1-360002">Section 2<!--tex4ht:ref: vorbis:spec:bitpacking --></a>,
+href="#x1-360002">Section 2</a>,
“<a
href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>” covers reading and writing bit fields from and to bitstream
packets.
@@ -3842,7 +3842,7 @@
<h5 class="subsubsectionHead"><span class="titlemark">4.2.3 </span> <a
id="x1-630004.2.3"></a>Comment header</h5>
<!--l. 85--><p class="noindent" >Comment header decode and data specification is covered in <a
-href="#x1-810005">Section 5<!--tex4ht:ref: vorbis:spec:comment --></a>, “<a
+href="#x1-810005">Section 5</a>, “<a
href="#x1-810005">comment field and
header specification<!--tex4ht:ref: vorbis:spec:comment --></a>”.
<!--l. 89--><p class="noindent" >
@@ -3856,9 +3856,9 @@
<!--l. 94--><p class="noindent" ><img
src="components.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 6: </td><td
-class="content">decoder pipeline configuration</td></tr></table><!--tex4ht:label?: x1-640016 -->
+<br /> <div class="caption"
+><span class="id">Figure 6: </span><span
+class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 -->
</div>
<!--l. 99--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
header contains, in order, the lists of codebook configurations, time-domain transform
@@ -3879,7 +3879,7 @@
<li
class="enumerate" id="x1-65004x2">Decode <span
class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a
-href="#x1-470003">Section 3<!--tex4ht:ref: vorbis:spec:codebook --></a>,
+href="#x1-470003">Section 3</a>,
“<a
href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>”. Save each configuration, in order, in an array
of codebook configurations <span
@@ -3923,7 +3923,7 @@
</li>
<li
class="enumerate" id="x1-67008x2">If the floor type is zero, decode the floor configuration as defined in <a
-href="#x1-890006">Section 6<!--tex4ht:ref: vorbis:spec:floor0 --></a>,
+href="#x1-890006">Section 6</a>,
“<a
href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>”; save this configuration in slot <span
class="cmtt-12">[i] </span>of the floor
@@ -3935,7 +3935,7 @@
</li>
<li
class="enumerate" id="x1-67010x3">If the floor type is one, decode the floor configuration as defined in <a
-href="#x1-950007">Section 7<!--tex4ht:ref: vorbis:spec:floor1 --></a>,
+href="#x1-950007">Section 7</a>,
“<a
href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>”; save this configuration in slot <span
class="cmtt-12">[i] </span>of the floor
@@ -3969,7 +3969,7 @@
<li
class="enumerate" id="x1-68008x2">If the residue type is zero, one or two, decode the residue configuration as defined
in <a
-href="#x1-1020008">Section 8<!--tex4ht:ref: vorbis:spec:residue --></a>, “<a
+href="#x1-1020008">Section 8</a>, “<a
href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>”; save this configuration in slot <span
class="cmtt-12">[i] </span>of
the residue configuration array <span
@@ -4235,7 +4235,8 @@
class="enumerate" id="x1-72016x3">if <span
class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
be a hybrid window for lapping with a short block. See <a
-href="#x1-260001.3.2">paragraph 1.3.2<!--tex4ht:ref: vorbis:spec:window --></a>,
+href="#paragraph.1" >paragraph <a
+href="#x1-260001.3.2">1.3.2</a></a>,
“<a
href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>” for an illustration of
overlapping dissimilar windows. Else, the left half window will have normal
@@ -4245,7 +4246,7 @@
class="enumerate" id="x1-72018x4">if <span
class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
a hybrid window for lapping with a short block. See <a
-href="#x1-260001.3.2">paragraph 1.3.2<!--tex4ht:ref: vorbis:spec:window --></a>,
+href="#x1-260001.3.2">paragraph 1.3.2</a>,
“<a
href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>” for an illustration of
overlapping dissimilar windows. Else, the left right window will have normal
@@ -4257,20 +4258,20 @@
</li></ol>
<!--l. 320--><p class="noindent" >Vorbis windows all use the slope function <span
class="cmmi-12">y </span>= sin(<img
-src="Vorbis_I_spec1x.png" alt="π2" class="frac" align="middle"> <span
-class="cmsy-10x-x-120">*</span> sin <sup><span
+src="Vorbis_I_spec1x.png" alt="π2" class="frac" align="middle"> <span
+class="cmsy-10x-x-120">∗</span> sin <sup><span
class="cmr-8">2</span></sup>((<span
class="cmmi-12">x </span>+ 0<span
class="cmmi-12">.</span>5)<span
class="cmmi-12">∕n </span><span
-class="cmsy-10x-x-120">* </span><span
-class="cmmi-12">π</span>)), where <span
+class="cmsy-10x-x-120">∗ </span><span
+class="cmmi-12">π</span>)), where <span
class="cmmi-12">n </span>is window
size and <span
class="cmmi-12">x </span>ranges 0<span
-class="cmmi-12">…</span><span
+class="cmmi-12">…</span><span
class="cmmi-12">n</span><span
-class="cmsy-10x-x-120">- </span>1, but dissimilar lapping requirements can affect overall shape. Window
+class="cmsy-10x-x-120">− </span>1, but dissimilar lapping requirements can affect overall shape. Window
generation proceeds as follows:
<!--l. 325--><p class="noindent" >
<ol class="enumerate1" >
@@ -4369,15 +4370,15 @@
class="cmtt-12">[left_window_end]</span>-1, window(<span
class="cmtt-12">[i]</span>) =
sin(<img
-src="Vorbis_I_spec2x.png" alt="π
+src="Vorbis_I_spec2x.png" alt="π
2" class="frac" align="middle"> <span
-class="cmsy-10x-x-120">*</span> sin <sup><span
+class="cmsy-10x-x-120">∗</span> sin <sup><span
class="cmr-8">2</span></sup>( (<span
class="cmtt-12">[i]</span>-<span
class="cmtt-12">[left_window_start]</span>+0.5) / <span
class="cmtt-12">[left_n] </span><span
-class="cmsy-10x-x-120">*</span><img
-src="Vorbis_I_spec3x.png" alt="π
+class="cmsy-10x-x-120">∗</span><img
+src="Vorbis_I_spec3x.png" alt="π
2" class="frac" align="middle">) )
</li>
<li
@@ -4393,17 +4394,17 @@
class="cmtt-12">[right_window_end]</span>-1, window(<span
class="cmtt-12">[i]</span>) =
sin(<img
-src="Vorbis_I_spec4x.png" alt="π
+src="Vorbis_I_spec4x.png" alt="π
2" class="frac" align="middle"> <span
-class="cmsy-10x-x-120">*</span> sin <sup><span
+class="cmsy-10x-x-120">∗</span> sin <sup><span
class="cmr-8">2</span></sup>( (<span
class="cmtt-12">[i]</span>-<span
class="cmtt-12">[right_window_start]</span>+0.5) / <span
class="cmtt-12">[right_n] </span><span
-class="cmsy-10x-x-120">*</span><img
-src="Vorbis_I_spec5x.png" alt="π
+class="cmsy-10x-x-120">∗</span><img
+src="Vorbis_I_spec5x.png" alt="π
2" class="frac" align="middle"> + <img
-src="Vorbis_I_spec6x.png" alt="π
+src="Vorbis_I_spec6x.png" alt="π
2" class="frac" align="middle">) )
</li>
<li
@@ -4449,14 +4450,14 @@
class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
channel <span
class="cmtt-12">[i] </span>according to the <a
-href="#x1-930006.2.2">subsubsection 6.2.2<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>, “<a
+href="#x1-930006.2.2">subsubsection 6.2.2</a>, “<a
href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>”
</li>
<li
class="enumerate" id="x1-73008x4">if the type of this floor is one then decode the floor for channel <span
class="cmtt-12">[i] </span>according to the
<a
-href="#x1-1000007.2.2">paragraph 7.2.2<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>, “<a
+href="#x1-1000007.2.2">paragraph 7.2.2</a>, “<a
href="#x1-1000007.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>”
</li>
<li
@@ -4725,17 +4726,17 @@
in all cases because it happens to mostly work with the current Xiph.Org reference
encoder.
<!--l. 549--><p class="noindent" >However, floor vector values can span <span
-class="cmsy-10x-x-120">~</span>140dB (<span
-class="cmsy-10x-x-120">~</span>24 bits unsigned), and the audio spectrum
+class="cmsy-10x-x-120">∼</span>140dB (<span
+class="cmsy-10x-x-120">∼</span>24 bits unsigned), and the audio spectrum
vector should represent a minimum of 120dB (<span
-class="cmsy-10x-x-120">~</span>21 bits with sign), even when output is to a 16
+class="cmsy-10x-x-120">∼</span>21 bits with sign), even when output is to a 16
bit PCM device. For the residue vector to represent full scale if the floor is nailed
to <span
-class="cmsy-10x-x-120">-</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
+class="cmsy-10x-x-120">−</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
full scale if the floor is nailed at 0dB, it must be able to represent <span
-class="cmsy-10x-x-120">-</span>140dB to +0dB.
+class="cmsy-10x-x-120">−</span>140dB to +0dB.
Thus, in order to handle full range dynamics, a residue vector may span <span
-class="cmsy-10x-x-120">-</span>140dB to
+class="cmsy-10x-x-120">−</span>140dB to
+140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
residue vector must be able to represent a 48 bit range and the dot product must
be able to handle an effective 48 bit times 24 bit multiplication. This range may be
@@ -4758,7 +4759,7 @@
<!--l. 577--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
current window (as illustrated in <a
-href="#x1-260001.3.2">paragraph 1.3.2<!--tex4ht:ref: vorbis:spec:window --></a>, “<a
+href="#x1-260001.3.2">paragraph 1.3.2</a>, “<a
href="#x1-260001.3.2">Window shape decode (long windows
only)<!--tex4ht:ref: vorbis:spec:window --></a>”). The overlapped portion produced from overlapping the previous and current frame data
is finished data to be returned by the decoder. This data spans from the center of
@@ -4785,14 +4786,16 @@
<h5 class="subsubsectionHead"><span class="titlemark">4.3.9 </span> <a
id="x1-800004.3.9"></a>output channel order</h5>
<!--l. 607--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
-implicitly defined as follows for standard audio applications:
-<!--l. 611--><p class="noindent" >
+implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
+specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
+greater-than-eight channels remains ’left to the implementation’.
+<!--l. 613--><p class="noindent" >
<dl class="description"><dt class="description">
<span
-class="cmssbx-10x-x-120">three channels</span> </dt><dd
+class="cmssbx-10x-x-120">one channel</span> </dt><dd
class="description">the stream is monophonic
</dd><dt class="description">
<span
@@ -4810,19 +4813,29 @@
</dd><dt class="description">
<span
class="cmssbx-10x-x-120">five channels</span> </dt><dd
-class="description">the stream is five-channel surround. channel order: front left, front center,
- front right, rear left, rear right
+class="description">the stream is five-channel surround. channel order: front left, center, front
+ right, surround rear left, surround rear right
</dd><dt class="description">
<span
class="cmssbx-10x-x-120">six channels</span> </dt><dd
-class="description">the stream is 5.1 surround. channel order: front left, front center, front right,
- rear left, rear right, LFE
+class="description">the stream is 5.1 surround. channel order: front left, center, front right,
+ surround rear left, surround rear right, LFE
</dd><dt class="description">
<span
-class="cmssbx-10x-x-120">greater than six channels</span> </dt><dd
+class="cmssbx-10x-x-120">seven channels</span> </dt><dd
+class="description">the stream is 6.1 surround. channel order: front left, center, front right,
+ surround left, surround right, surround (center) rear, LFE
+ </dd><dt class="description">
+<span
+class="cmssbx-10x-x-120">eight channels</span> </dt><dd
+class="description">the stream is 7.1 surround. channel order: front left, center, front right,
+ surround left, surround right, surround rear left, surround rear right, LFE
+ </dd><dt class="description">
+<span
+class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd
class="description">channel use and order is defined by the application
</dd></dl>
-<!--l. 639--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
+<!--l. 650--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
channel mappings (such as three and four channel <a
href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
mappings other than mapping 0.
@@ -4860,9 +4873,9 @@
<!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
bounded to 2<sup><span
class="cmr-8">32</span></sup> <span
-class="cmsy-10x-x-120">- </span>1 and the length of each vector is limited to 2<sup><span
+class="cmsy-10x-x-120">− </span>1 and the length of each vector is limited to 2<sup><span
class="cmr-8">32</span></sup> <span
-class="cmsy-10x-x-120">- </span>1 bytes. The vector length is
+class="cmsy-10x-x-120">− </span>1 bytes. The vector length is
@@ -5732,16 +5745,16 @@
<center class="par-math-display" >
<img
src="Vorbis_I_spec7x.png" alt=" {
- min (floor0xbarkxmapxsize - 1,f oobar) for i ∈ [0, n - 1]
-mapi = - 1 for i = n
+ min (floor0xbarkxmapxsize − 1,foobar ) for i ∈ [0,n − 1 ]
+mapi = − 1 for i = n
" class="par-math-display" ></center>
<!--l. 128--><p class="nopar" >
<!--l. 130--><p class="noindent" >where
<center class="par-math-display" >
<img
-src="Vorbis_I_spec8x.png" alt=" ⌊ ⌋
- (floor0xrate ⋅ i) floor0xbarkxmapxsize
-foobar = bark -------2n------- ⋅-bark(.5 ⋅-floor0xrate-)
+src="Vorbis_I_spec8x.png" alt=" ⌊ ⌋
+ (floor0xrate ⋅ i) floor0xbarkxmapxsize
+foobar = bark -------2n------- ⋅-bark(.5 ⋅ floor0xrate-)
" class="par-math-display" ></center>
@@ -5768,9 +5781,9 @@
<li
class="enumerate" id="x1-94004x2"><span
class="cmtt-12">[</span><span
-class="cmmi-12">ω</span><span
+class="cmmi-12">ω</span><span
class="cmtt-12">] </span>= <span
-class="cmmi-12">π </span>* map element <span
+class="cmmi-12">π </span>* map element <span
class="cmtt-12">[i] </span>/ <span
class="cmtt-12">[floor0_bark_map_size]</span>
</li>
@@ -5784,12 +5797,12 @@
class="cmtt-12">[q] </span>according to: <div class="eqnarray">
<center class="math-display" >
<img
-src="Vorbis_I_spec10x.png" alt=" floor0xorder-3
- 2 ∏2 2
-p = (1 - cos ω) 4(cos([coefficients ]2j+1) - cosω )
+src="Vorbis_I_spec10x.png" alt=" floor0xorder−3
+ 2 ∏2 2
+p = (1 − cos ω) 4(cos([coefficients ]2j+1) − cosω )
j=0
- floor0x∏or2der-1
-q = 1- 4(cos([coefficients ]2j) - cosω )2
+ floor0x∏or2der−1
+q = 1- 4(cos([coefficients ]2j) − cosω )2
4 j=0
@@ -5806,12 +5819,12 @@
class="cmtt-12">[q] </span>according to: <div class="eqnarray">
<center class="math-display" >
<img
-src="Vorbis_I_spec11x.png" alt=" floor0xorder-2
- (1 - cos2ω) ∏2 2
-p = -----2------ 4(cos([coefficients ]2j+1) - cosω )
+src="Vorbis_I_spec11x.png" alt=" floor0xorder−2
+ (1 − cos2ω) ∏2 2
+p = -----2------ 4(cos([coefficients ]2j+1) − cosω )
j=0
- 2 floor0xor2der-2
-q = (1 +-cos-ω)- ∏ 4(cos([coefficients ] ) - cosω )2
+ 2 floor0xor2der−2
+q = (1 +-cos-ω)- ∏ 4(cos([coefficients ] ) − cosω )2
2 j=0 2j
" class="math-display" ></center>
</div>
@@ -5823,8 +5836,8 @@
<center class="math-display" >
<img
src="Vorbis_I_spec12x.png" alt=" ( ( ))
- amplitude---⋅ floor0xamplitutexoffset---
-exp .11512925 (2floor0xamplitudexbits - 1)√ p + q - floor0xamplitudexoffset
+ amplitude---⋅ floor0xamplitutexoffset---
+exp .11512925 (2floor0xamplitudexbits − 1)√ p + q − floor0xamplitudexoffset
" class="math-display" ></center>
<!--l. 177--><p class="nopar" >
</li>
@@ -5918,9 +5931,9 @@
<!--l. 60--><p class="noindent" ><img
src="floor1-1.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 7: </td><td
-class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-980017 -->
+<br /> <div class="caption"
+><span class="id">Figure 7: </span><span
+class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 -->
</div>
<!--l. 64--><p class="noindent" >We now draw new logical lines to reflect the correction to new˙Y, and iterate for X positions 32
and 96:
@@ -5931,9 +5944,9 @@
<!--l. 68--><p class="noindent" ><img
src="floor1-2.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 8: </td><td
-class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-980028 -->
+<br /> <div class="caption"
+><span class="id">Figure 8: </span><span
+class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 -->
</div>
<!--l. 72--><p class="noindent" >Although the new Y value at X position 96 is unchanged, it is still used later as an endpoint for
further refinement. From here on, the pattern should be clear; we complete the floor computation
@@ -5948,9 +5961,9 @@
<!--l. 77--><p class="noindent" ><img
src="floor1-3.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 9: </td><td
-class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-980039 -->
+<br /> <div class="caption"
+><span class="id">Figure 9: </span><span
+class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 -->
</div>
<div class="center"
>
@@ -5959,9 +5972,9 @@
<!--l. 82--><p class="noindent" ><img
src="floor1-4.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 10: </td><td
-class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-9800410 -->
+<br /> <div class="caption"
+><span class="id">Figure 10: </span><span
+class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 -->
</div>
<!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
decode, as described later. The actual algorithm splits Y value computation and line plotting
@@ -6616,16 +6629,18 @@
class="cmtt-12">[floor1_class_masterbooks] </span>or
<span
class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
-configured in this stream is an error condition that renders the stream undecodable.
-<!--l. 165--><p class="noindent" ><span class="paragraphHead"><a
+configured in this stream is an error condition that renders the stream undecodable. All vector
+[floor1˙x˙list] element values must be unique within the vector; a non-unique value renders the
+stream undecodable.
+<!--l. 167--><p class="noindent" ><span class="paragraphHead"><a
id="x1-1000007.2.2"></a><span
class="cmbx-12">packet decode</span></span>
-Packet decode begins by checking the <span
-class="cmtt-12">[nonzero] </span>flag:
-<!--l. 169--><p class="noindent" >
+Packet decode begins by checking the <span
+class="cmtt-12">[nonzero] </span>flag:
+<!--l. 171--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb29">
<a
id="x1-100002r1"></a><span
@@ -6642,15 +6657,15 @@
class="cmtt-8"> as</span><span
class="cmtt-8"> boolean</span>
</div>
-<!--l. 173--><p class="noindent" >If <span
+<!--l. 175--><p class="noindent" >If <span
class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
this frame. (A return status of ’unused’ is different from decoding a floor that has all
points set to minimum representation amplitude, which happens to be approximately
-140dB).
-<!--l. 181--><p class="noindent" >Assuming <span
+<!--l. 183--><p class="noindent" >Assuming <span
class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
-<!--l. 183--><p class="noindent" >
+<!--l. 185--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb30">
<a
id="x1-100004r1"></a><span
@@ -7254,16 +7269,16 @@
class="cmtt-8"> 20)</span><span
class="cmtt-8"> done</span>
</div>
-<!--l. 224--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
+<!--l. 226--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
end-of-packet is reached during any read operation above, floor decode is to return ’unused’
status as if the <span
class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
-<!--l. 230--><p class="noindent" >Vector <span
+<!--l. 232--><p class="noindent" >Vector <span
class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
-<!--l. 235--><p class="noindent" ><span class="paragraphHead"><a
+<!--l. 237--><p class="noindent" ><span class="paragraphHead"><a
id="x1-1010007.2.2"></a><span
class="cmbx-12">curve computation</span></span>
Curve computation is split into two logical steps; the first step derives final Y amplitude values
@@ -7272,17 +7287,17 @@
prediction to find final Y values, these points are conditionally skipped during final
line computation in step two. Skipping zero-difference values allows a smoother line
fit.
-<!--l. 245--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
+<!--l. 247--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
implementors are warned to follow the details closely. Deviation from implementing a strictly
equivalent algorithm can result in serious decoding errors.
-<!--l. 250--><p class="noindent" >
+<!--l. 252--><p class="noindent" >
<dl class="description"><dt class="description">
<span
class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd
class="description">
- <!--l. 253--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
+ <!--l. 255--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
values, then apply to line prediction.
- <!--l. 256--><p class="noindent" >
+ <!--l. 258--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb31">
<a
id="x1-101002r1"></a><span
@@ -7669,14 +7684,14 @@
class="cmtt-8"> [highroom]</span><span
class="cmtt-8"> *</span><span
class="cmtt-8"> 2</span>
+
+
+
<br class="fancyvrb" /><a
id="x1-101046r23"></a><span
class="cmr-6">23</span><span
class="cmtt-8"> </span><span
class="cmtt-8"> </span>
-
-
-
<br class="fancyvrb" /><a
id="x1-101048r24"></a><span
class="cmr-6">24</span><span
@@ -8516,7 +8531,7 @@
<span
class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd
class="description">
- <!--l. 336--><p class="noindent" >Curve synthesis generates a return vector <span
+ <!--l. 338--><p class="noindent" >Curve synthesis generates a return vector <span
class="cmtt-12">[floor] </span>of length <span
class="cmtt-12">[n] </span>(where <span
class="cmtt-12">[n] </span>is provided by
@@ -8526,12 +8541,12 @@
class="cmtt-12">[floor1_final_Y] </span>and <span
class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
[floor1˙multiplier] and [floor1˙values] values.
- <!--l. 343--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
-class="cmtt-12">[floor1_X_list]</span>, <span
-class="cmtt-12">[floor1_final_Y] </span>and
+ <!--l. 345--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
+class="cmtt-12">[floor1_X_list]</span>, <span
+class="cmtt-12">[floor1_final_Y] </span>and
<span
class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span
class="cmtt-12">[floor1_X_list]’</span>, <span
@@ -8543,8 +8558,8 @@
class="cmtt-12">[floor1_X_list] </span>and then apply the same
permutation to elements of the other two vectors so that the X, Y and step2˙flag values still
match.
- <!--l. 353--><p class="noindent" >Then compute the final curve in one pass:
- <!--l. 355--><p class="noindent" >
+ <!--l. 355--><p class="noindent" >Then compute the final curve in one pass:
+ <!--l. 357--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb32">
<a
id="x1-101148r1"></a><span
@@ -8986,7 +9001,7 @@
<li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
specified. If we have a vector size of <span
class="cmti-12">n</span>, a partition size <span
-class="cmti-12">residue˙partition˙size</span>, and
+class="cmti-12">residue˙partition˙size</span>, and
a total of <span
class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded is
@@ -8994,10 +9009,10 @@
<span
class="cmti-12">n</span>/<span
-class="cmti-12">residue˙partition˙size</span>*<span
+class="cmti-12">residue˙partition˙size</span>*<span
class="cmti-12">ch</span>. It is important to note that the integer division truncates.
In the below example, we assume an example <span
-class="cmti-12">residue˙partition˙size </span>of 8.
+class="cmti-12">residue˙partition˙size </span>of 8.
</li>
<li class="itemize">Each partition in each vector has a classification number that specifies which of
multiple configured VQ codebook setups are used to decode that partition. The
@@ -9022,9 +9037,9 @@
<!--l. 71--><p class="noindent" ><img
src="residue-pack.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 11: </td><td
-class="content">illustration of residue vector format</td></tr></table><!--tex4ht:label?: x1-10400111 -->
+<br /> <div class="caption"
+><span class="id">Figure 11: </span><span
+class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 -->
</div>
<!--l. 77--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">8.3 </span> <a
@@ -9409,9 +9424,9 @@
<!--l. 148--><p class="noindent" ><img
src="residue2.png" alt="PIC"
>
-<br /> <table class="caption"
-><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure 12: </td><td
-class="content">illustration of residue type 2</td></tr></table><!--tex4ht:label?: x1-10700112 -->
+<br /> <div class="caption"
+><span class="id">Figure 12: </span><span
+class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 -->
</div>
<!--l. 153--><p class="noindent" >
<h4 class="subsectionHead"><span class="titlemark">8.6 </span> <a
@@ -9929,21 +9944,24 @@
class="cmtt-8"> 6)</span><span
class="cmtt-8"> done</span>
</div>
-<!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable. In
-addition, any codebook number greater than the maximum numbered codebook set up in this
-stream also renders the stream undecodable.
-<!--l. 238--><p class="noindent" >
+<!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
+In addition, any codebook number greater than the maximum numbered codebook
+set up in this stream also renders the stream undecodable. All codebooks in array
+[residue˙books] are required to have a value mapping. The presence of codebook in array
+[residue˙books] without a value mapping (maptype equals zero) renders the stream
+undecodable.
+<!--l. 241--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">8.6.2 </span> <a
id="x1-1100008.6.2"></a>packet decode</h5>
-<!--l. 240--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
+<!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
decode can be built out of the format 1 decode process. Thus we describe first the decode
infrastructure identical to all three formats.
-<!--l. 245--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
+<!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
decoded. If the passed in number of vectors is 3 and vector number 1 is marked ’do not decode’,
decode skips vector 1 during the decode loop. However, even ’do not decode’ vectors are
allocated and zeroed.
-<!--l. 252--><p class="noindent" >Depending on the values of <span
+<!--l. 255--><p class="noindent" >Depending on the values of <span
class="cmtt-12">[residue_begin] </span>and <span
class="cmtt-12">[residue_end]</span>, it is obvious that the
encoded portion of a residue vector may be the entire possible residue vector or some other strict
@@ -9958,7 +9976,7 @@
the number of vectors being encoded, <span
class="cmtt-12">[ch] </span>is provided by the higher level decoding
process.
-<!--l. 266--><p class="noindent" >
+<!--l. 269--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb38">
<a
id="x1-110002r1"></a><span
@@ -10001,6 +10019,9 @@
class="cmtt-8"> [actual_size]</span><span
class="cmtt-8"> *</span><span
class="cmtt-8"> [ch];</span>
+
+
+
<br class="fancyvrb" /><a
id="x1-110008r4"></a><span
class="cmr-6">4</span><span
@@ -10026,11 +10047,8 @@
class="cmtt-8"> of</span><span
class="cmtt-8"> ([residue_end],[actual_size]);</span>
</div>
-
-
-
-<!--l. 274--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
-<!--l. 277--><p class="noindent" >
+<!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
+<!--l. 280--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb39">
<a
id="x1-110012r1"></a><span
@@ -10071,7 +10089,7 @@
class="cmtt-8"> /</span><span
class="cmtt-8"> [residue_partition_size]</span>
</div>
-<!--l. 283--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
+<!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
<div class="fancyvrb" id="fancyvrb40">
<a
id="x1-110018r1"></a><span
@@ -11050,6 +11068,9 @@
class="cmtt-8"> </span><span
class="cmtt-8"> </span><span
class="cmtt-8"> }</span>
+
+
+
<br class="fancyvrb" /><a
id="x1-110106r45"></a><span
class="cmr-6">45</span><span
@@ -11132,9 +11153,6 @@
class="cmtt-8"> </span><span
class="cmtt-8"> </span><span
class="cmtt-8"> }</span>
-
-
-
<br class="fancyvrb" /><a
id="x1-110116r50"></a><span
class="cmr-6">50</span><span
@@ -11178,12 +11196,12 @@
class="cmtt-8"> </span><span
class="cmtt-8"> </span>
</div>
-<!--l. 341--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
+<!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
Decode returns the result of vector decode up to that point.
-<!--l. 347--><p class="noindent" >
+<!--l. 350--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">8.6.3 </span> <a
id="x1-1110008.6.3"></a>format 0 specifics</h5>
-<!--l. 349--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the ’Residue Format: residue 0’
+<!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the ’Residue Format: residue 0’
section. The following pseudocode presents the same algorithm. Assume:
<ul class="itemize1">
<li class="itemize"><span
@@ -11195,7 +11213,7 @@
</li>
<li class="itemize"><span
class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
-<!--l. 360--><p class="noindent" >
+<!--l. 363--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb41">
<a
id="x1-111002r1"></a><span
@@ -11390,14 +11408,14 @@
class="cmr-6">16</span><span
class="cmtt-8"> </span><span
class="cmtt-8"> </span>
-</div>
-<!--l. 381--><p class="noindent" >
+</div>
+<!--l. 384--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">8.6.4 </span> <a
id="x1-1120008.6.4"></a>format 1 specifics</h5>
-<!--l. 383--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the ’Residue Format: residue 1’
+<!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the ’Residue Format: residue 1’
section. The following pseudocode presents the same algorithm. Assume:
<ul class="itemize1">
<li class="itemize"><span
@@ -11409,7 +11427,7 @@
</li>
<li class="itemize"><span
class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
-<!--l. 395--><p class="noindent" >
+<!--l. 398--><p class="noindent" >
<div class="fancyvrb" id="fancyvrb42">
<a
id="x1-112002r1"></a><span
@@ -11564,21 +11582,21 @@
class="cmtt-8"> 7)</span><span
class="cmtt-8"> done</span>
</div>
-<!--l. 413--><p class="noindent" >
+<!--l. 416--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark">8.6.5 </span> <a
id="x1-1130008.6.5"></a>format 2 specifics</h5>
-<!--l. 415--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
+<!--l. 418--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
additional post-decode step after a normal format 1 decode.
-<!--l. 418--><p class="noindent" >Format 2 handles ’do not decode’ vectors differently than residue 0 or 1; if all vectors are marked
+
+
+
+<!--l. 421--><p class="noindent" >Format 2 handles ’do not decode’ vectors differently than residue 0 or 1; if all vectors are marked
’do not decode’, no decode occurrs. However, if at least one vector is to be decoded, all
the vectors are decoded. We then request normal format 1 to decode a single vector
representing all output channels, rather than a vector for each channel. After decode,
deinterleave the vector into independent vectors, one for each output channel. That
-
-
-
is:
-<!--l. 425--><p class="noindent" >
+<!--l. 428--><p class="noindent" >
<ol class="enumerate1" >
<li
class="enumerate" id="x1-113002x1">If all vectors 0 through <span
@@ -13511,7 +13529,7 @@
<!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
compressed audio packet data into file form.
<!--l. 12--><p class="noindent" >The <a
-href="#x1-20001">Section 1<!--tex4ht:ref: vorbis:spec:intro --></a>, “<a
+href="#x1-20001">Section 1</a>, “<a
href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>” provides an overview of the construction of
Vorbis audio packets.
<!--l. 15--><p class="noindent" >The <a
Modified: trunk/vorbis/doc/Vorbis_I_spec.pdf
===================================================================
(Binary files differ)
Modified: trunk/vorbis/doc/xml/04-codec.xml
===================================================================
--- trunk/vorbis/doc/xml/04-codec.xml 2010-01-13 22:01:16 UTC (rev 16780)
+++ trunk/vorbis/doc/xml/04-codec.xml 2010-01-14 02:34:05 UTC (rev 16781)
@@ -659,7 +659,9 @@
<para>
Vorbis I specifies only a channel mapping type 0. In mapping type 0,
channel mapping is implicitly defined as follows for standard audio
-applications:</para>
+applications. As of revision 16781 (20100113), the specification adds
+defined channel locations for 6.1 and 7.1 surround, rather than
+declaring the channel ordering 'left to the implementation'.</para>
<variablelist>
<varlistentry>
@@ -684,15 +686,26 @@
</varlistentry><varlistentry>
<term>five channels</term><listitem>
<simpara>the stream is five-channel surround. channel order: front left,
-front center, front right, rear left, rear right</simpara>
+center, front right, surround rear left, surround rear right</simpara>
</listitem>
</varlistentry><varlistentry>
<term>six channels</term><listitem>
- <simpara>the stream is 5.1 surround. channel order: front left, front
-center, front right, rear left, rear right, LFE</simpara>
+ <simpara>the stream is 5.1 surround. channel order: front left, center,
+front right, surround rear left, surround rear right, LFE</simpara>
</listitem>
</varlistentry><varlistentry>
- <term>greater than six channels</term><listitem>
+ <term>seven channels</term><listitem>
+ <simpara>the stream is 6.1 surround. channel order: front left, center,
+front right, surround left, surround right, surround (center) rear, LFE</simpara>
+ </listitem>
+ </varlistentry><varlistentry>
+ <term>eight channels</term><listitem>
+ <simpara>the stream is 7.1 surround. channel order: front left, center,
+front right, surround left, surround right, surround rear left, surround rear right,
+LFE</simpara>
+ </listitem>
+ </varlistentry><varlistentry>
+ <term>greater than eight channels</term><listitem>
<simpara>channel use and order is defined by the application</simpara>
</listitem>
</varlistentry>
More information about the commits
mailing list