Correct PPTP server firewall rules chain.
[tomato/davidwu.git] / release / src / router / libvorbis / doc / Vorbis_I_spec.html
blobe261d649a782d66d75e8494dea6be161cd909bf6
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2 "http://www.w3.org/TR/html4/loose.dtd">
3 <html >
4 <head><title>Vorbis I specification</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6 <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
7 <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
8 <!-- html -->
9 <meta name="src" content="Vorbis_I_spec.tex">
10 <meta name="date" content="2009-06-02 19:28:00">
11 <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css">
12 </head><body
14 <div class="maketitle">
22 <h2 class="titleHead">Vorbis I specification</h2>
23 <div class="author" ><span
24 class="cmr-17">Xiph.org Foundation</span></div>
25 <br />
26 <div class="date" ><span
27 class="cmr-17">June 2, 2009</span></div>
28 </div>
29 <h3 class="likesectionHead"><a
30 id="x1-1000"></a>Contents</h3>
31 <div class="tableofcontents">
32 &#x00A0;<span class="sectionToc" >1 <a
33 href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span>
34 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.1 <a
35 href="#x1-30001.1" id="QQ2-1-3">Overview</a></span>
36 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.1 <a
37 href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span>
38 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.2 <a
39 href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span>
40 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.3 <a
41 href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span>
42 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.4 <a
43 href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span>
44 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.5 <a
45 href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span>
46 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.6 <a
47 href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span>
48 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.2 <a
49 href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span>
50 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.1 <a
51 href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span>
52 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.2 <a
53 href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span>
57 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.3 <a
58 href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span>
59 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.4 <a
60 href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span>
61 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.5 <a
62 href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span>
63 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.6 <a
64 href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span>
65 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.3 <a
66 href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span>
67 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.1 <a
68 href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span>
69 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.2 <a
70 href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span>
71 <br />&#x00A0;<span class="sectionToc" >2 <a
72 href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span>
73 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >2.1 <a
74 href="#x1-370002.1" id="QQ2-1-40">Overview</a></span>
75 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.1 <a
76 href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span>
77 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.2 <a
78 href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span>
79 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.3 <a
80 href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span>
81 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.4 <a
82 href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span>
83 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.5 <a
84 href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span>
85 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.6 <a
86 href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span>
87 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.7 <a
88 href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span>
89 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.8 <a
90 href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span>
91 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.9 <a
92 href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span>
93 <br />&#x00A0;<span class="sectionToc" >3 <a
94 href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span>
95 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.1 <a
96 href="#x1-480003.1" id="QQ2-1-51">Overview</a></span>
97 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.1 <a
98 href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span>
99 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.2 <a
100 href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span>
101 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.2.1 <a
102 href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span>
103 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.3 <a
104 href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span>
105 <br />&#x00A0;<span class="sectionToc" >4 <a
106 href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span>
107 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.1 <a
108 href="#x1-590004.1" id="QQ2-1-64">Overview</a></span>
109 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.2 <a
110 href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span>
111 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.1 <a
112 href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span>
113 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.2 <a
114 href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span>
118 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.3 <a
119 href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span>
120 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.4 <a
121 href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span>
122 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.3 <a
123 href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span>
124 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.1 <a
125 href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span>
126 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.2 <a
127 href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span>
128 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.3 <a
129 href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span>
130 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.4 <a
131 href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span>
132 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.5 <a
133 href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span>
134 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.6 <a
135 href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span>
136 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.7 <a
137 href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span>
138 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.8 <a
139 href="#x1-790004.3.8" id="QQ2-1-85">overlap&#x02D9;add</a></span>
140 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.9 <a
141 href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span>
142 <br />&#x00A0;<span class="sectionToc" >5 <a
143 href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span>
144 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.1 <a
145 href="#x1-820005.1" id="QQ2-1-88">Overview</a></span>
146 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.2 <a
147 href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span>
148 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.1 <a
149 href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span>
150 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.2 <a
151 href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span>
152 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.3 <a
153 href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span>
154 <br />&#x00A0;<span class="sectionToc" >6 <a
155 href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span>
156 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.1 <a
157 href="#x1-900006.1" id="QQ2-1-96">Overview</a></span>
158 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.2 <a
159 href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span>
160 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.1 <a
161 href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span>
162 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.2 <a
163 href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span>
164 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.3 <a
165 href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span>
166 <br />&#x00A0;<span class="sectionToc" >7 <a
167 href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span>
168 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.1 <a
169 href="#x1-960007.1" id="QQ2-1-102">Overview</a></span>
170 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.2 <a
171 href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span>
172 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.1 <a
173 href="#x1-980007.2.1" id="QQ2-1-104">model</a></span>
174 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.2 <a
175 href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span>
179 <br />&#x00A0;<span class="sectionToc" >8 <a
180 href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span>
181 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.1 <a
182 href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span>
183 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.2 <a
184 href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span>
185 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.3 <a
186 href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span>
187 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.4 <a
188 href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span>
189 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.5 <a
190 href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span>
191 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.6 <a
192 href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span>
193 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.1 <a
194 href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span>
195 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.2 <a
196 href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span>
197 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.3 <a
198 href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span>
199 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.4 <a
200 href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span>
201 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.5 <a
202 href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span>
203 <br />&#x00A0;<span class="sectionToc" >9 <a
204 href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span>
205 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.1 <a
206 href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span>
207 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.2 <a
208 href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span>
209 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.1 <a
210 href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span>
211 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.2 <a
212 href="#x1-1180009.2.2" id="QQ2-1-130">float32&#x02D9;unpack</a></span>
213 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.3 <a
214 href="#x1-1190009.2.3" id="QQ2-1-131">lookup1&#x02D9;values</a></span>
215 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.4 <a
216 href="#x1-1200009.2.4" id="QQ2-1-132">low&#x02D9;neighbor</a></span>
217 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.5 <a
218 href="#x1-1210009.2.5" id="QQ2-1-133">high&#x02D9;neighbor</a></span>
219 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.6 <a
220 href="#x1-1220009.2.6" id="QQ2-1-134">render&#x02D9;point</a></span>
221 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.7 <a
222 href="#x1-1230009.2.7" id="QQ2-1-135">render&#x02D9;line</a></span>
223 <br />&#x00A0;<span class="sectionToc" >10 <a
224 href="#x1-12400010" id="QQ2-1-136">Tables</a></span>
225 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >10.1 <a
226 href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span>
227 <br />&#x00A0;<span class="sectionToc" >A <a
228 href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span>
229 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.1 <a
230 href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span>
231 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.1 <a
232 href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span>
233 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.2 <a
234 href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span>
235 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.2 <a
236 href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span>
240 <br />&#x00A0;<span class="sectionToc" >B <a
241 href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span>
242 </div>
246 <h3 class="sectionHead"><span class="titlemark">1 </span> <a
247 id="x1-20001"></a>Introduction and Description</h3>
248 <!--l. 6--><p class="noindent" >
249 <h4 class="subsectionHead"><span class="titlemark">1.1 </span> <a
250 id="x1-30001.1"></a>Overview</h4>
251 <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec&#8217;s construction. A bit-by-bit
252 specification appears beginning in <a
253 href="#x1-580004">Section&#x00A0;4<!--tex4ht:ref: vorbis:spec:codec --></a>, &#8220;<a
254 href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>&#8221;. The later
255 sections assume a high-level understanding of the Vorbis decode process, which is provided
256 here.
257 <!--l. 15--><p class="noindent" >
258 <h5 class="subsubsectionHead"><span class="titlemark">1.1.1 </span> <a
259 id="x1-40001.1.1"></a>Application</h5>
260 <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder
261 flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At
262 the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same
263 league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT
264 rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower
265 and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel
266 representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
267 discrete channels).
268 <!--l. 29--><p class="noindent" >
269 <h5 class="subsubsectionHead"><span class="titlemark">1.1.2 </span> <a
270 id="x1-50001.1.2"></a>Classification</h5>
271 <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete
272 Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in
273 Vorbis II to offer better transient response and reproduction using a transform better suited to
274 localized time events.
278 <!--l. 37--><p class="noindent" >
279 <h5 class="subsubsectionHead"><span class="titlemark">1.1.3 </span> <a
280 id="x1-60001.1.3"></a>Assumptions</h5>
281 <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple,
282 low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does
283 require more working memory as Vorbis has no static probability model; the vector codebooks
284 used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis
285 bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to
286 which they are pre-decoded into a cache is the dominant factor in decoder memory
287 usage.
288 <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it
289 is solely a method of accepting input audio, dividing it into individual frames and
290 compressing these frames into raw, unformatted &#8217;packets&#8217;. The decoder then accepts
291 these raw packets in sequence, decodes them, synthesizes audio frames from them, and
292 reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form
293 variable bit rate (VBR) codec and packets have no minimum size, maximum size, or
294 fixed/expected size. Packets are designed that they may be truncated (or padded)
295 and remain decodable; this is not to be considered an error condition and is used
296 extensively in bitrate management in peeling. Both the transport mechanism and
297 decoder must allow that a packet may be any size, or end before or after packet decode
298 expects.
299 <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form
300 framing, sync, positioning and error correction in accordance with these design assumptions, such
301 as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this
302 document, we will assume that Vorbis is to be embedded in an Ogg stream specifically,
303 although this is by no means a requirement or fundamental assumption in the Vorbis
304 design.
305 <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a
306 href="#x1-126000A">Section&#x00A0;A<!--tex4ht:ref: vorbis:over:ogg --></a>,
307 &#8220;<a
308 href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>&#8221;.
309 <!--l. 77--><p class="noindent" >
310 <h5 class="subsubsectionHead"><span class="titlemark">1.1.4 </span> <a
311 id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5>
312 <!--l. 79--><p class="noindent" >Vorbis&#8217; heritage is as a research CODEC and its current design reflects a desire to allow multiple
313 decades of continuous encoder improvement before running out of room within the codec
314 specification. For these reasons, configurable aspects of codec setup intentionally lean toward the
315 extreme of forward adaptive.
319 <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis
320 developer to keep in mind) is that the entire probability model of the codec, the Huffman and
321 VQ codebooks, is packed into the bitstream header along with extensive CODEC setup
322 parameters (often several hundred fields). This makes it impossible, as it would be with
323 MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin
324 decode at any frame in the stream without having previously fetched the codec setup
325 header.
326 <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a
327 id="x1-80001.1.4"></a><span
328 class="cmbx-12">Note:</span></span> Vorbis <span
329 class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec
330 has been initialized/setup with the setup headers.
331 <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream
332 headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less
333 is recommended (and Xiph.Org&#8217;s Vorbis encoder follows this suggestion).
334 <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is
335 an unusual design and thus causes some amount of complaint among engineers as this runs
336 against current design trends (and also points out limitations in some existing software/interface
337 designs, such as Windows&#8217; ACM codec framework). However, we find that it does not
338 fundamentally limit Vorbis&#8217; suitable application space.
339 <!--l. 115--><p class="noindent" >
340 <h5 class="subsubsectionHead"><span class="titlemark">1.1.5 </span> <a
341 id="x1-90001.1.5"></a>Format Specification</h5>
342 <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets
343 that are correctly decoded by the reference Vorbis decoder described below may be considered
344 a proper Vorbis encoder. A decoder must faithfully and completely implement the
345 specification defined below (except where noted) to be considered a proper Vorbis
346 decoder.
347 <!--l. 123--><p class="noindent" >
348 <h5 class="subsubsectionHead"><span class="titlemark">1.1.6 </span> <a
349 id="x1-100001.1.6"></a>Hardware Profile</h5>
353 <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an
354 embedded design. For this reason, embedded designs are allowed to deviate in limited ways from
355 the &#8216;full&#8217; decode specification yet still be certified compliant. These optional omissions are
356 labelled in the spec where relevant.
357 <!--l. 131--><p class="noindent" >
358 <h4 class="subsectionHead"><span class="titlemark">1.2 </span> <a
359 id="x1-110001.2"></a>Decoder Configuration</h4>
360 <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that
361 perform specific functions in the decode pipeline. Each different component instance of a specific
362 type is semantically interchangeable; decoder configuration consists both of internal component
363 configuration, as well as arrangement of specific instances into a decode pipeline. Componentry
364 arrangement is roughly as follows:
365 <div class="center"
367 <!--l. 141--><p class="noindent" >
369 <!--l. 142--><p class="noindent" ><img
370 src="components.png" alt="PIC"
372 <br /> <table class="caption"
373 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;1: </td><td
374 class="content">decoder pipeline configuration</td></tr></table><!--tex4ht:label?: x1-110011 -->
375 </div>
376 <!--l. 146--><p class="noindent" >
377 <h5 class="subsubsectionHead"><span class="titlemark">1.2.1 </span> <a
378 id="x1-120001.2.1"></a>Global Config</h5>
379 <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis
380 version (always &#8217;0&#8217; in Vorbis I), bitrate hints, and the lists of component instances. All other
381 configuration is in the context of specific components.
382 <!--l. 152--><p class="noindent" >
383 <h5 class="subsubsectionHead"><span class="titlemark">1.2.2 </span> <a
384 id="x1-130001.2.2"></a>Mode</h5>
388 <!--l. 154--><p class="noindent" >Each Vorbis frame is coded according to a master &#8217;mode&#8217;. A bitstream may use one or many
389 modes.
390 <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible
391 methods with the intention of choosing a method best suited to that frame. Different
392 modes are, e.g. how frame size is changed from frame to frame. The mode number of a
393 frame serves as a top level configuration switch for all other specific aspects of frame
394 decode.
395 <!--l. 164--><p class="noindent" >A &#8217;mode&#8217; configuration consists of a frame size setting, window type (always 0, the Vorbis
396 window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping
397 number. The mapping number specifies which mapping configuration instance to use for low-level
398 packet decode and synthesis.
399 <!--l. 171--><p class="noindent" >
400 <h5 class="subsubsectionHead"><span class="titlemark">1.2.3 </span> <a
401 id="x1-140001.2.3"></a>Mapping</h5>
402 <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of &#8217;submaps&#8217; that bundle sets
403 of channel vectors together for grouped encoding and decoding. These submaps are
404 not references to external components; the submap list is internal and specific to a
405 mapping.
406 <!--l. 178--><p class="noindent" >A &#8217;submap&#8217; is a configuration/grouping that applies to a subset of floor and residue vectors
407 within a mapping. The submap functions as a last layer of indirection such that specific special
408 floor or residue settings can be applied not only to all the vectors in a given mode, but also
409 specific vectors in a specific mode. Each submap specifies the proper floor and residue
410 instance number to use for decoding that submap&#8217;s spectral floor and spectral residue
411 vectors.
412 <!--l. 186--><p class="noindent" >As an example:
413 <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth
414 channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a
415 full-spectrum version of it as with the other channels. The submapping mechanism can be used
416 to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only
417 representation to the bass channel, thus saving space. In this example, channels 0-4 belong to
418 submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which
419 uses a bass-only representation.
423 <!--l. 199--><p class="noindent" >
424 <h5 class="subsubsectionHead"><span class="titlemark">1.2.4 </span> <a
425 id="x1-150001.2.4"></a>Floor</h5>
426 <!--l. 201--><p class="noindent" >Vorbis encodes a spectral &#8217;floor&#8217; vector for each PCM channel. This vector is a low-resolution
427 representation of the audio spectrum for the given channel in the current frame, generally used
428 akin to a whitening filter. It is named a &#8217;floor&#8217; because the Xiph.Org reference encoder has
429 historically used it as a unit-baseline for spectral resolution.
430 <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB
431 amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear
432 interpolated representation on a dB amplitude scale and linear frequency scale. The two floors
433 are semantically interchangeable in encoding/decoding. However, floor type 1 provides more
434 stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and
435 high bitrate modes. Floor 1 is also considerably less expensive to decode than floor
437 <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis
438 encoder past Xiph.org&#8217;s own beta 4 makes use of floor 0.
439 <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy
440 coding to save space. For this reason, a floor configuration generally refers to multiple
441 codebooks in the codebook component list. Entropy coding is thus provided as an
442 abstraction, and each floor instance may choose from any and all available codebooks when
443 coding/decoding.
444 <!--l. 230--><p class="noindent" >
445 <h5 class="subsubsectionHead"><span class="titlemark">1.2.5 </span> <a
446 id="x1-160001.2.5"></a>Residue</h5>
447 <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been
448 subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector
449 quantization according to one of three specific packing/coding algorithms numbered
450 0 through 2. The packing algorithm details are configured by residue instance. As
451 with the floor components, the final VQ/entropy encoding is provided by external
452 codebook instances and each residue instance may choose from any and all available
453 codebooks.
454 <!--l. 241--><p class="noindent" >
458 <h5 class="subsubsectionHead"><span class="titlemark">1.2.6 </span> <a
459 id="x1-170001.2.6"></a>Codebooks</h5>
460 <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use
461 the entropy-decoded integer value as an offset into an index of output value vectors, returning
462 the indicated vector of values.
463 <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree
464 representation. This tree is tightly packed using one of several methods, depending on whether
465 codeword lengths are ordered or unordered, or the tree is sparse.
466 <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly,
467 the vector index is encoded as a single list of values of possible values that are then permuted
468 into a list of n-dimensional rows (lattice VQ).
469 <!--l. 260--><p class="noindent" >
470 <h4 class="subsectionHead"><span class="titlemark">1.3 </span> <a
471 id="x1-180001.3"></a>High-level Decode Process</h4>
472 <!--l. 262--><p class="noindent" >
473 <h5 class="subsubsectionHead"><span class="titlemark">1.3.1 </span> <a
474 id="x1-190001.3.1"></a>Decode Setup</h5>
475 <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the
476 stream to be decoded. Vorbis uses three header packets; all are required, in-order, by
477 this specification. Once set up, decode may begin at any audio packet belonging to
478 the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio
479 packets.
480 <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup
481 header.
482 <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a
483 id="x1-200001.3.1"></a><span
484 class="cmbx-12">Identification Header</span></span>
485 The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio
486 characteristics of the stream such as sample rate and number of channels.
490 <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a
491 id="x1-210001.3.1"></a><span
492 class="cmbx-12">Comment Header</span></span>
493 The comment header includes user text comments (&#8220;tags&#8221;) and a vendor string for the
494 application/library that produced the bitstream. The encoding and proper use of the comment
495 header is described in <a
496 href="#x1-810005">Section&#x00A0;5<!--tex4ht:ref: vorbis:spec:comment --></a>, &#8220;<a
497 href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
498 <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a
499 id="x1-220001.3.1"></a><span
500 class="cmbx-12">Setup Header</span></span>
501 The setup header includes extensive CODEC setup information as well as the complete VQ and
502 Huffman codebooks needed for decode.
503 <!--l. 289--><p class="noindent" >
504 <h5 class="subsubsectionHead"><span class="titlemark">1.3.2 </span> <a
505 id="x1-230001.3.2"></a>Decode Procedure</h5>
506 <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same.
507 <ol class="enumerate1" >
508 <li
509 class="enumerate" id="x1-23002x1">decode packet type flag
510 </li>
511 <li
512 class="enumerate" id="x1-23004x2">decode mode number
513 </li>
514 <li
515 class="enumerate" id="x1-23006x3">decode window shape (long windows only)
516 </li>
517 <li
518 class="enumerate" id="x1-23008x4">decode floor
519 </li>
520 <li
521 class="enumerate" id="x1-23010x5">decode residue into residue vectors
522 </li>
523 <li
524 class="enumerate" id="x1-23012x6">inverse channel coupling of residue vectors
525 </li>
526 <li
527 class="enumerate" id="x1-23014x7">generate floor curve from decoded floor data
528 </li>
529 <li
530 class="enumerate" id="x1-23016x8">compute dot product of floor and residue, producing audio spectrum vector
531 </li>
532 <li
533 class="enumerate" id="x1-23018x9">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis
538 </li>
539 <li
540 class="enumerate" id="x1-23020x10">overlap/add left-hand output of transform with right-hand output of previous frame
541 </li>
542 <li
543 class="enumerate" id="x1-23022x11">store right hand-data from transform of current frame for future lapping
544 </li>
545 <li
546 class="enumerate" id="x1-23024x12">if not first frame, return results of overlap/add as audio result of current frame</li></ol>
547 <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can
548 take advantage of symmetries in the MDCT to store the right-hand transform data of a partial
549 MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before
550 overlap/add with the next frame. This optimization produces entirely equivalent output and is
551 naturally perfectly legal. The decoder must be <span
552 class="cmti-12">entirely mathematically equivalent </span>to the
553 specification, it need not be a literal semantic implementation.
554 <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a
555 id="x1-240001.3.2"></a><span
556 class="cmbx-12">Packet type decode</span></span>
557 Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis
558 headers described above. The fourth packet type marks an audio packet. All other packet types
559 are reserved; packets marked with a reserved type should be ignored.
560 <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
561 audio packet decode is to read and verify the packet type; <span
562 class="cmti-12">a non-audio packet when audio is</span>
563 <span
564 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
565 <span
566 class="cmti-12">packet and not attempt decoding it to audio</span>.
567 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
568 id="x1-250001.3.2"></a><span
569 class="cmbx-12">Mode decode</span></span>
570 Vorbis allows an encoder to set up multiple, numbered packet &#8217;modes&#8217;, as described earlier, all of
571 which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct
572 offset into the mode instance index.
573 <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a
574 id="x1-260001.3.2"></a><span
575 class="cmbx-12">Window shape decode (long windows only)</span></span>
576 Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I,
577 legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis
578 handles channels as independent vectors and these frame sizes are in samples per
579 channel.
583 <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next,
584 avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed
585 according to MDCT requirements, overlapped 50% with the output of the previous frame and
586 added. The window shape assures seamless reconstruction.
587 <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows:
588 <div class="center"
590 <!--l. 356--><p class="noindent" >
592 <!--l. 357--><p class="noindent" ><img
593 src="window1.png" alt="PIC"
595 <br /> <table class="caption"
596 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;2: </td><td
597 class="content">overlap of two equal-sized windows</td></tr></table><!--tex4ht:label?: x1-260012 -->
598 </div>
599 <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
600 <div class="center"
602 <!--l. 364--><p class="noindent" >
604 <!--l. 365--><p class="noindent" ><img
605 src="window2.png" alt="PIC"
607 <br /> <table class="caption"
608 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;3: </td><td
609 class="content">overlap of a long and a short window</td></tr></table><!--tex4ht:label?: x1-260023 -->
610 </div>
611 <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
612 seamless lapping as above. It is possible to correctly infer window shape to be applied to the
613 current window from knowing the sizes of the current, previous and next window. It is legal for a
614 decoder to use this method. However, in the case of a long window (short windows require no
615 modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although
616 not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to
617 the point of lapping entirely independently of any other packet, allowing easier abstraction of
618 decode layers as well as allowing a greater level of easy parallelism in encode and
619 decode.
620 <!--l. 382--><p class="noindent" >A description of valid window functions for use with an inverse MDCT can be found in <span class="cite">[<a
621 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
622 Vorbis windows all use the slope function
623 <center class="math-display" >
624 <img
625 src="Vorbis_I_spec0x.png" alt="y = sin (.5 * &#x03C0; sin2((x + .5)&#x2215;n * &#x03C0;)).
629 " class="math-display" ></center>
630 <!--l. 385--><p class="nopar" >
631 <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a
632 id="x1-270001.3.2"></a><span
633 class="cmbx-12">floor decode</span></span>
634 Each floor is encoded/decoded in channel order, however each floor belongs to a &#8217;submap&#8217; that
635 specifies which floor configuration to use. All floors are decoded before residue decode
636 begins.
637 <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a
638 id="x1-280001.3.2"></a><span
639 class="cmbx-12">residue decode</span></span>
640 Although the number of residue vectors equals the number of channels, channel coupling may
641 mean that the raw residue vectors extracted during decode do not map directly to specific
642 channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or
643 angle. The coupling relationships are described in the codec setup and may differ from frame to
644 frame, due to different mode numbers.
645 <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from
646 submap 0 through n-1. This differs from floors which are coded using a configuration provided by
647 submap number, but are coded individually in channel order.
648 <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a
649 id="x1-290001.3.2"></a><span
650 class="cmbx-12">inverse channel coupling</span></span>
651 A detailed discussion of stereo in the Vorbis codec can be found in the document
653 href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo
654 coupling, but the stereo document also gives a good overview of the generic coupling
655 mechanism.
656 <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a
657 pair at a time in the order and using the vectors specified in the current mapping
658 configuration. The decoupling operation is the same for all pairs, converting square polar
659 representation (where one vector is magnitude and the second angle) back to Cartesian
660 representation.
661 <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors
662 represent the fine spectral detail of each output channel.
666 <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a
667 id="x1-300001.3.2"></a><span
668 class="cmbx-12">generate floor curve</span></span>
669 The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to
670 generate the output curve when the floor data is decoded from the raw packet, or it
671 can be generated after inverse coupling and applied to the spectral residue directly,
672 combining generation and the dot product into one step and eliminating some working
673 space.
674 <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied
675 (dot product) by the linear-range, linear-domain spectral residue.
676 <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a
677 id="x1-310001.3.2"></a><span
678 class="cmbx-12">compute floor/residue dot product</span></span>
679 This step is straightforward; for each output channel, the decoder multiplies the floor curve and
680 residue vectors element by element, producing the finished audio spectrum of each
681 channel.
682 <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
683 implementation might be to assume that a 32 bit fixed-point representation for floor and
684 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
685 in all cases because it happens to mostly work with the current Xiph.Org reference
686 encoder.
687 <!--l. 462--><p class="noindent" >However, floor vector values can span <span
688 class="cmsy-10x-x-120">~</span>140dB (<span
689 class="cmsy-10x-x-120">~</span>24 bits unsigned), and the audio spectrum
690 vector should represent a minimum of 120dB (<span
691 class="cmsy-10x-x-120">~</span>21 bits with sign), even when output is to a 16
692 bit PCM device. For the residue vector to represent full scale if the floor is nailed
693 to <span
694 class="cmsy-10x-x-120">-</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
695 full scale if the floor is nailed at 0dB, it must be able to represent <span
696 class="cmsy-10x-x-120">-</span>140dB to +0dB.
697 Thus, in order to handle full range dynamics, a residue vector may span <span
698 class="cmsy-10x-x-120">-</span>140dB to
699 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
700 residue vector must be able to represent a 48 bit range and the dot product must
701 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
702 achieved using large (64 bit or larger) integers, or implementing a movable binary point
703 representation.
704 <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a
705 id="x1-320001.3.2"></a><span
706 class="cmbx-12">inverse monolithic transform (MDCT)</span></span>
707 The audio spectrum is converted back into time domain PCM audio via an inverse Modified
708 Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in
709 <span class="cite">[<a
710 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
711 <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be
715 lapped with surrounding frames using an appropriate window (such as the Vorbis window) before
716 the MDCT can be considered orthogonal.
717 <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a
718 id="x1-330001.3.2"></a><span
719 class="cmbx-12">overlap/add data</span></span>
720 Windowed MDCT output is overlapped and added with the right hand data of the previous
721 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
722 current window (as illustrated in the window overlap diagram). At this point, the audio data
723 between the center of the previous frame and the center of the current frame is now finished and
724 ready to be returned.
725 <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a
726 id="x1-340001.3.2"></a><span
727 class="cmbx-12">cache right hand data</span></span>
728 The decoder must cache the right hand portion of the current frame to be lapped with the left
729 hand portion of the next frame.
730 <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a
731 id="x1-350001.3.2"></a><span
732 class="cmbx-12">return finished audio data</span></span>
733 The overlapped portion produced from overlapping the previous and current frame data
734 is finished data to be returned by the decoder. This data spans from the center of
735 the previous window to the center of the current window. In the case of same-sized
736 windows, the amount of data to return is one-half block consisting of and only of the
737 overlapped portions. When overlapping a short and long window, much of the returned
738 range is not actually overlap. This does not damage transform orthogonality. Pay
739 attention however to returning the correct data range; the amount of data to be returned
741 <!--l. 519--><p class="noindent" >
742 <div class="fancyvrb" id="fancyvrb1">
744 id="x1-35002r1"></a><span
745 class="cmr-6">1</span><span
746 class="cmtt-8">&#x00A0;</span><span
747 class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
748 </div>
749 <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
750 <!--l. 526--><p class="noindent" >Data is not returned from the first frame; it must be used to &#8217;prime&#8217; the decode engine. The
751 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
752 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
759 <h3 class="sectionHead"><span class="titlemark">2 </span> <a
760 id="x1-360002"></a>Bitpacking Convention</h3>
761 <!--l. 6--><p class="noindent" >
762 <h4 class="subsectionHead"><span class="titlemark">2.1 </span> <a
763 id="x1-370002.1"></a>Overview</h4>
764 <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
765 integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
766 encoder and then read one-by-one in the same monotonically increasing order by the decoder.
767 Most current binary storage arrangements group bits into a native word size of eight bits
768 (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
769 bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
770 representation in fixed-width words.
771 <!--l. 19--><p class="noindent" >
772 <h5 class="subsubsectionHead"><span class="titlemark">2.1.1 </span> <a
773 id="x1-380002.1.1"></a>octets, bytes and words</h5>
774 <!--l. 21--><p class="noindent" >In most contemporary architectures, a &#8217;byte&#8217; is synonymous with an &#8217;octet&#8217;, that is, eight bits.
775 This has not always been the case; seven, ten, eleven and sixteen bit &#8217;bytes&#8217; have been used.
776 For purposes of the bitpacking convention, a byte implies the native, smallest integer
777 storage representation offered by a platform. On modern platforms, this is generally
778 assumed to be eight bits (not necessarily because of the processor but because of the
779 filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
780 atom of storage). A &#8217;word&#8217; is an integer size that is a grouped multiple of this smallest
781 size.
782 <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a &#8217;byte&#8217; to be an octet (eight bits) and a word
783 to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
784 bitpacking convention is still well defined for any native byte size; Vorbis uses the native
785 bit-width of a given storage system. This document assumes that a byte is one octet for purposes
786 of example.
787 <!--l. 39--><p class="noindent" >
791 <h5 class="subsubsectionHead"><span class="titlemark">2.1.2 </span> <a
792 id="x1-390002.1.2"></a>bit order</h5>
793 <!--l. 41--><p class="noindent" >A byte has a well-defined &#8217;least significant&#8217; bit (LSb), which is the only bit set when the byte is
794 storing the two&#8217;s complement integer value +1. A byte&#8217;s &#8217;most significant&#8217; bit (MSb) is at the
795 opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span
796 class="cmmi-12">n </span>(<span
797 class="cmmi-12">n </span>= 7 in an
798 octet) for the MSb.
799 <!--l. 50--><p class="noindent" >
800 <h5 class="subsubsectionHead"><span class="titlemark">2.1.3 </span> <a
801 id="x1-400002.1.3"></a>byte order</h5>
802 <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
803 common ones are 3-2-1-0 (&#8217;big endian&#8217; or &#8217;most significant byte first&#8217; in which the
804 highest-valued byte comes first), 0-1-2-3 (&#8217;little endian&#8217; or &#8217;least significant byte first&#8217; in
805 which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (&#8217;mixed
806 endian&#8217;).
807 <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
808 word, level, thus host word ordering is of a concern only during optimization when writing high
809 performance code that operates on a word of storage at a time rather than by byte.
810 Logically, bytes are always coded and decoded in order from byte zero through byte
811 <span
812 class="cmmi-12">n</span>.
813 <!--l. 68--><p class="noindent" >
814 <h5 class="subsubsectionHead"><span class="titlemark">2.1.4 </span> <a
815 id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
816 <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
817 wide, into packets. These integer fields are not aligned to the boundaries of the byte
818 representation; the next field is written at the bit position at which the previous field
819 ends.
820 <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
821 bitstream first, followed by next least significant bit, etc, until the requested number of bits
822 have been coded. When packing the bits into bytes, the encoder begins by placing
823 the LSb of the integer to be written into the least significant unused bit position of
824 the destination byte, followed by the next-least significant bit of the source integer
825 and so on up to the requested number of bits. When all bits of the destination byte
826 have been filled, encoding continues by zeroing all bits of the next byte and writing
827 the next bit into the bit position 0 of that byte. Decoding follows the same process
831 as encoding, but by reading bits from the byte stream and reassembling them into
832 integers.
833 <!--l. 90--><p class="noindent" >
834 <h5 class="subsubsectionHead"><span class="titlemark">2.1.5 </span> <a
835 id="x1-420002.1.5"></a>signedness</h5>
836 <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
837 given decode context. That is, the three bit binary pattern &#8217;b111&#8217; can be taken to represent
838 either &#8217;seven&#8217; as an unsigned integer, or &#8217;-1&#8217; as a signed, two&#8217;s complement integer. The
839 encoder and decoder are responsible for knowing if fields are to be treated as signed or
840 unsigned.
841 <!--l. 101--><p class="noindent" >
842 <h5 class="subsubsectionHead"><span class="titlemark">2.1.6 </span> <a
843 id="x1-430002.1.6"></a>coding example</h5>
844 <!--l. 103--><p class="noindent" >Code the 4 bit integer value &#8217;12&#8217; [b1100] into an empty bytestream. Bytestream result:
845 <!--l. 106--><p class="noindent" >
846 <div class="fancyvrb" id="fancyvrb2">
848 id="x1-43002r1"></a><span
849 class="cmr-6">1</span><span
850 class="cmtt-8">&#x00A0;</span><span
851 class="cmtt-8">&#x00A0;</span><span
852 class="cmtt-8">&#x00A0;</span><span
853 class="cmtt-8">&#x00A0;</span><span
854 class="cmtt-8">&#x00A0;</span><span
855 class="cmtt-8">&#x00A0;</span><span
856 class="cmtt-8">&#x00A0;</span><span
857 class="cmtt-8">&#x00A0;</span><span
858 class="cmtt-8">&#x00A0;</span><span
859 class="cmtt-8">&#x00A0;</span><span
860 class="cmtt-8">&#x00A0;</span><span
861 class="cmtt-8">&#x00A0;</span><span
862 class="cmtt-8">&#x00A0;</span><span
863 class="cmtt-8">&#x00A0;</span><span
864 class="cmtt-8">&#x00A0;</span><span
865 class="cmtt-8">&#x00A0;|</span>
866 <br class="fancyvrb" /><a
867 id="x1-43004r2"></a><span
868 class="cmr-6">2</span><span
869 class="cmtt-8">&#x00A0;</span><span
870 class="cmtt-8">&#x00A0;</span><span
871 class="cmtt-8">&#x00A0;</span><span
872 class="cmtt-8">&#x00A0;</span><span
873 class="cmtt-8">&#x00A0;</span><span
874 class="cmtt-8">&#x00A0;</span><span
875 class="cmtt-8">&#x00A0;</span><span
876 class="cmtt-8">&#x00A0;</span><span
877 class="cmtt-8">&#x00A0;</span><span
878 class="cmtt-8">&#x00A0;</span><span
879 class="cmtt-8">&#x00A0;</span><span
880 class="cmtt-8">&#x00A0;</span><span
881 class="cmtt-8">&#x00A0;</span><span
882 class="cmtt-8">&#x00A0;</span><span
883 class="cmtt-8">&#x00A0;</span><span
884 class="cmtt-8">&#x00A0;V</span>
885 <br class="fancyvrb" /><a
886 id="x1-43006r3"></a><span
887 class="cmr-6">3</span><span
888 class="cmtt-8">&#x00A0;</span><span
889 class="cmtt-8">&#x00A0;</span>
890 <br class="fancyvrb" /><a
891 id="x1-43008r4"></a><span
892 class="cmr-6">4</span><span
893 class="cmtt-8">&#x00A0;</span><span
894 class="cmtt-8">&#x00A0;</span><span
895 class="cmtt-8">&#x00A0;</span><span
896 class="cmtt-8">&#x00A0;</span><span
897 class="cmtt-8">&#x00A0;</span><span
898 class="cmtt-8">&#x00A0;</span><span
899 class="cmtt-8">&#x00A0;</span><span
900 class="cmtt-8">&#x00A0;</span><span
901 class="cmtt-8">&#x00A0;</span><span
902 class="cmtt-8">&#x00A0;7</span><span
903 class="cmtt-8">&#x00A0;6</span><span
904 class="cmtt-8">&#x00A0;5</span><span
905 class="cmtt-8">&#x00A0;4</span><span
906 class="cmtt-8">&#x00A0;3</span><span
907 class="cmtt-8">&#x00A0;2</span><span
908 class="cmtt-8">&#x00A0;1</span><span
909 class="cmtt-8">&#x00A0;0</span>
910 <br class="fancyvrb" /><a
911 id="x1-43010r5"></a><span
912 class="cmr-6">5</span><span
913 class="cmtt-8">&#x00A0;</span><span
914 class="cmtt-8">&#x00A0;byte</span><span
915 class="cmtt-8">&#x00A0;0</span><span
916 class="cmtt-8">&#x00A0;[0</span><span
917 class="cmtt-8">&#x00A0;0</span><span
918 class="cmtt-8">&#x00A0;0</span><span
919 class="cmtt-8">&#x00A0;0</span><span
920 class="cmtt-8">&#x00A0;1</span><span
921 class="cmtt-8">&#x00A0;1</span><span
922 class="cmtt-8">&#x00A0;0</span><span
923 class="cmtt-8">&#x00A0;0]</span><span
924 class="cmtt-8">&#x00A0;</span><span
925 class="cmtt-8">&#x00A0;&#x003C;-</span>
926 <br class="fancyvrb" /><a
927 id="x1-43012r6"></a><span
928 class="cmr-6">6</span><span
929 class="cmtt-8">&#x00A0;</span><span
930 class="cmtt-8">&#x00A0;byte</span><span
931 class="cmtt-8">&#x00A0;1</span><span
932 class="cmtt-8">&#x00A0;[</span><span
933 class="cmtt-8">&#x00A0;</span><span
934 class="cmtt-8">&#x00A0;</span><span
935 class="cmtt-8">&#x00A0;</span><span
936 class="cmtt-8">&#x00A0;</span><span
937 class="cmtt-8">&#x00A0;</span><span
938 class="cmtt-8">&#x00A0;</span><span
939 class="cmtt-8">&#x00A0;</span><span
940 class="cmtt-8">&#x00A0;</span><span
941 class="cmtt-8">&#x00A0;</span><span
942 class="cmtt-8">&#x00A0;</span><span
943 class="cmtt-8">&#x00A0;</span><span
944 class="cmtt-8">&#x00A0;</span><span
945 class="cmtt-8">&#x00A0;</span><span
946 class="cmtt-8">&#x00A0;</span><span
947 class="cmtt-8">&#x00A0;]</span>
948 <br class="fancyvrb" /><a
949 id="x1-43014r7"></a><span
950 class="cmr-6">7</span><span
951 class="cmtt-8">&#x00A0;</span><span
952 class="cmtt-8">&#x00A0;byte</span><span
953 class="cmtt-8">&#x00A0;2</span><span
954 class="cmtt-8">&#x00A0;[</span><span
955 class="cmtt-8">&#x00A0;</span><span
956 class="cmtt-8">&#x00A0;</span><span
957 class="cmtt-8">&#x00A0;</span><span
958 class="cmtt-8">&#x00A0;</span><span
959 class="cmtt-8">&#x00A0;</span><span
960 class="cmtt-8">&#x00A0;</span><span
961 class="cmtt-8">&#x00A0;</span><span
962 class="cmtt-8">&#x00A0;</span><span
963 class="cmtt-8">&#x00A0;</span><span
964 class="cmtt-8">&#x00A0;</span><span
965 class="cmtt-8">&#x00A0;</span><span
966 class="cmtt-8">&#x00A0;</span><span
967 class="cmtt-8">&#x00A0;</span><span
968 class="cmtt-8">&#x00A0;</span><span
969 class="cmtt-8">&#x00A0;]</span>
970 <br class="fancyvrb" /><a
971 id="x1-43016r8"></a><span
972 class="cmr-6">8</span><span
973 class="cmtt-8">&#x00A0;</span><span
974 class="cmtt-8">&#x00A0;byte</span><span
975 class="cmtt-8">&#x00A0;3</span><span
976 class="cmtt-8">&#x00A0;[</span><span
977 class="cmtt-8">&#x00A0;</span><span
978 class="cmtt-8">&#x00A0;</span><span
979 class="cmtt-8">&#x00A0;</span><span
980 class="cmtt-8">&#x00A0;</span><span
981 class="cmtt-8">&#x00A0;</span><span
982 class="cmtt-8">&#x00A0;</span><span
983 class="cmtt-8">&#x00A0;</span><span
984 class="cmtt-8">&#x00A0;</span><span
985 class="cmtt-8">&#x00A0;</span><span
986 class="cmtt-8">&#x00A0;</span><span
987 class="cmtt-8">&#x00A0;</span><span
988 class="cmtt-8">&#x00A0;</span><span
989 class="cmtt-8">&#x00A0;</span><span
990 class="cmtt-8">&#x00A0;</span><span
991 class="cmtt-8">&#x00A0;]</span>
992 <br class="fancyvrb" /><a
993 id="x1-43018r9"></a><span
994 class="cmr-6">9</span><span
995 class="cmtt-8">&#x00A0;</span><span
996 class="cmtt-8">&#x00A0;</span><span
997 class="cmtt-8">&#x00A0;</span><span
998 class="cmtt-8">&#x00A0;</span><span
999 class="cmtt-8">&#x00A0;</span><span
1000 class="cmtt-8">&#x00A0;</span><span
1001 class="cmtt-8">&#x00A0;</span><span
1002 class="cmtt-8">&#x00A0;</span><span
1003 class="cmtt-8">&#x00A0;</span><span
1004 class="cmtt-8">&#x00A0;</span><span
1005 class="cmtt-8">&#x00A0;</span><span
1006 class="cmtt-8">&#x00A0;</span><span
1007 class="cmtt-8">&#x00A0;</span><span
1008 class="cmtt-8">&#x00A0;</span><span
1009 class="cmtt-8">&#x00A0;...</span>
1010 <br class="fancyvrb" /><a
1011 id="x1-43020r10"></a><span
1012 class="cmr-6">10</span><span
1013 class="cmtt-8">&#x00A0;</span><span
1014 class="cmtt-8">&#x00A0;byte</span><span
1015 class="cmtt-8">&#x00A0;n</span><span
1016 class="cmtt-8">&#x00A0;[</span><span
1017 class="cmtt-8">&#x00A0;</span><span
1018 class="cmtt-8">&#x00A0;</span><span
1019 class="cmtt-8">&#x00A0;</span><span
1020 class="cmtt-8">&#x00A0;</span><span
1021 class="cmtt-8">&#x00A0;</span><span
1022 class="cmtt-8">&#x00A0;</span><span
1023 class="cmtt-8">&#x00A0;</span><span
1024 class="cmtt-8">&#x00A0;</span><span
1025 class="cmtt-8">&#x00A0;</span><span
1026 class="cmtt-8">&#x00A0;</span><span
1027 class="cmtt-8">&#x00A0;</span><span
1028 class="cmtt-8">&#x00A0;</span><span
1029 class="cmtt-8">&#x00A0;</span><span
1030 class="cmtt-8">&#x00A0;</span><span
1031 class="cmtt-8">&#x00A0;]</span><span
1032 class="cmtt-8">&#x00A0;</span><span
1033 class="cmtt-8">&#x00A0;bytestream</span><span
1034 class="cmtt-8">&#x00A0;length</span><span
1035 class="cmtt-8">&#x00A0;==</span><span
1036 class="cmtt-8">&#x00A0;1</span><span
1037 class="cmtt-8">&#x00A0;byte</span>
1038 <br class="fancyvrb" /><a
1039 id="x1-43022r11"></a><span
1040 class="cmr-6">11</span><span
1041 class="cmtt-8">&#x00A0;</span><span
1042 class="cmtt-8">&#x00A0;</span>
1043 </div>
1044 <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value &#8217;-1&#8217; [b111]:
1045 <!--l. 123--><p class="noindent" >
1046 <div class="fancyvrb" id="fancyvrb3">
1048 id="x1-43024r1"></a><span
1049 class="cmr-6">1</span><span
1050 class="cmtt-8">&#x00A0;</span><span
1051 class="cmtt-8">&#x00A0;</span><span
1052 class="cmtt-8">&#x00A0;</span><span
1053 class="cmtt-8">&#x00A0;</span><span
1054 class="cmtt-8">&#x00A0;</span><span
1055 class="cmtt-8">&#x00A0;</span><span
1056 class="cmtt-8">&#x00A0;</span><span
1057 class="cmtt-8">&#x00A0;</span><span
1058 class="cmtt-8">&#x00A0;</span><span
1059 class="cmtt-8">&#x00A0;|</span>
1060 <br class="fancyvrb" /><a
1061 id="x1-43026r2"></a><span
1062 class="cmr-6">2</span><span
1063 class="cmtt-8">&#x00A0;</span><span
1064 class="cmtt-8">&#x00A0;</span><span
1065 class="cmtt-8">&#x00A0;</span><span
1066 class="cmtt-8">&#x00A0;</span><span
1067 class="cmtt-8">&#x00A0;</span><span
1068 class="cmtt-8">&#x00A0;</span><span
1069 class="cmtt-8">&#x00A0;</span><span
1070 class="cmtt-8">&#x00A0;</span><span
1071 class="cmtt-8">&#x00A0;</span><span
1072 class="cmtt-8">&#x00A0;V</span>
1073 <br class="fancyvrb" /><a
1074 id="x1-43028r3"></a><span
1075 class="cmr-6">3</span><span
1076 class="cmtt-8">&#x00A0;</span><span
1077 class="cmtt-8">&#x00A0;</span>
1078 <br class="fancyvrb" /><a
1079 id="x1-43030r4"></a><span
1080 class="cmr-6">4</span><span
1081 class="cmtt-8">&#x00A0;</span><span
1082 class="cmtt-8">&#x00A0;</span><span
1083 class="cmtt-8">&#x00A0;</span><span
1084 class="cmtt-8">&#x00A0;</span><span
1085 class="cmtt-8">&#x00A0;</span><span
1086 class="cmtt-8">&#x00A0;</span><span
1087 class="cmtt-8">&#x00A0;</span><span
1088 class="cmtt-8">&#x00A0;</span><span
1089 class="cmtt-8">&#x00A0;</span><span
1090 class="cmtt-8">&#x00A0;7</span><span
1091 class="cmtt-8">&#x00A0;6</span><span
1092 class="cmtt-8">&#x00A0;5</span><span
1093 class="cmtt-8">&#x00A0;4</span><span
1094 class="cmtt-8">&#x00A0;3</span><span
1095 class="cmtt-8">&#x00A0;2</span><span
1096 class="cmtt-8">&#x00A0;1</span><span
1097 class="cmtt-8">&#x00A0;0</span>
1098 <br class="fancyvrb" /><a
1099 id="x1-43032r5"></a><span
1100 class="cmr-6">5</span><span
1101 class="cmtt-8">&#x00A0;</span><span
1102 class="cmtt-8">&#x00A0;byte</span><span
1103 class="cmtt-8">&#x00A0;0</span><span
1104 class="cmtt-8">&#x00A0;[0</span><span
1105 class="cmtt-8">&#x00A0;1</span><span
1106 class="cmtt-8">&#x00A0;1</span><span
1107 class="cmtt-8">&#x00A0;1</span><span
1108 class="cmtt-8">&#x00A0;1</span><span
1109 class="cmtt-8">&#x00A0;1</span><span
1110 class="cmtt-8">&#x00A0;0</span><span
1111 class="cmtt-8">&#x00A0;0]</span><span
1112 class="cmtt-8">&#x00A0;</span><span
1113 class="cmtt-8">&#x00A0;&#x003C;-</span>
1114 <br class="fancyvrb" /><a
1115 id="x1-43034r6"></a><span
1116 class="cmr-6">6</span><span
1117 class="cmtt-8">&#x00A0;</span><span
1118 class="cmtt-8">&#x00A0;byte</span><span
1119 class="cmtt-8">&#x00A0;1</span><span
1120 class="cmtt-8">&#x00A0;[</span><span
1121 class="cmtt-8">&#x00A0;</span><span
1122 class="cmtt-8">&#x00A0;</span><span
1123 class="cmtt-8">&#x00A0;</span><span
1124 class="cmtt-8">&#x00A0;</span><span
1125 class="cmtt-8">&#x00A0;</span><span
1126 class="cmtt-8">&#x00A0;</span><span
1127 class="cmtt-8">&#x00A0;</span><span
1128 class="cmtt-8">&#x00A0;</span><span
1129 class="cmtt-8">&#x00A0;</span><span
1130 class="cmtt-8">&#x00A0;</span><span
1131 class="cmtt-8">&#x00A0;</span><span
1132 class="cmtt-8">&#x00A0;</span><span
1133 class="cmtt-8">&#x00A0;</span><span
1134 class="cmtt-8">&#x00A0;</span><span
1135 class="cmtt-8">&#x00A0;]</span>
1139 <br class="fancyvrb" /><a
1140 id="x1-43036r7"></a><span
1141 class="cmr-6">7</span><span
1142 class="cmtt-8">&#x00A0;</span><span
1143 class="cmtt-8">&#x00A0;byte</span><span
1144 class="cmtt-8">&#x00A0;2</span><span
1145 class="cmtt-8">&#x00A0;[</span><span
1146 class="cmtt-8">&#x00A0;</span><span
1147 class="cmtt-8">&#x00A0;</span><span
1148 class="cmtt-8">&#x00A0;</span><span
1149 class="cmtt-8">&#x00A0;</span><span
1150 class="cmtt-8">&#x00A0;</span><span
1151 class="cmtt-8">&#x00A0;</span><span
1152 class="cmtt-8">&#x00A0;</span><span
1153 class="cmtt-8">&#x00A0;</span><span
1154 class="cmtt-8">&#x00A0;</span><span
1155 class="cmtt-8">&#x00A0;</span><span
1156 class="cmtt-8">&#x00A0;</span><span
1157 class="cmtt-8">&#x00A0;</span><span
1158 class="cmtt-8">&#x00A0;</span><span
1159 class="cmtt-8">&#x00A0;</span><span
1160 class="cmtt-8">&#x00A0;]</span>
1161 <br class="fancyvrb" /><a
1162 id="x1-43038r8"></a><span
1163 class="cmr-6">8</span><span
1164 class="cmtt-8">&#x00A0;</span><span
1165 class="cmtt-8">&#x00A0;byte</span><span
1166 class="cmtt-8">&#x00A0;3</span><span
1167 class="cmtt-8">&#x00A0;[</span><span
1168 class="cmtt-8">&#x00A0;</span><span
1169 class="cmtt-8">&#x00A0;</span><span
1170 class="cmtt-8">&#x00A0;</span><span
1171 class="cmtt-8">&#x00A0;</span><span
1172 class="cmtt-8">&#x00A0;</span><span
1173 class="cmtt-8">&#x00A0;</span><span
1174 class="cmtt-8">&#x00A0;</span><span
1175 class="cmtt-8">&#x00A0;</span><span
1176 class="cmtt-8">&#x00A0;</span><span
1177 class="cmtt-8">&#x00A0;</span><span
1178 class="cmtt-8">&#x00A0;</span><span
1179 class="cmtt-8">&#x00A0;</span><span
1180 class="cmtt-8">&#x00A0;</span><span
1181 class="cmtt-8">&#x00A0;</span><span
1182 class="cmtt-8">&#x00A0;]</span>
1183 <br class="fancyvrb" /><a
1184 id="x1-43040r9"></a><span
1185 class="cmr-6">9</span><span
1186 class="cmtt-8">&#x00A0;</span><span
1187 class="cmtt-8">&#x00A0;</span><span
1188 class="cmtt-8">&#x00A0;</span><span
1189 class="cmtt-8">&#x00A0;</span><span
1190 class="cmtt-8">&#x00A0;</span><span
1191 class="cmtt-8">&#x00A0;</span><span
1192 class="cmtt-8">&#x00A0;</span><span
1193 class="cmtt-8">&#x00A0;</span><span
1194 class="cmtt-8">&#x00A0;</span><span
1195 class="cmtt-8">&#x00A0;</span><span
1196 class="cmtt-8">&#x00A0;</span><span
1197 class="cmtt-8">&#x00A0;</span><span
1198 class="cmtt-8">&#x00A0;</span><span
1199 class="cmtt-8">&#x00A0;</span><span
1200 class="cmtt-8">&#x00A0;...</span>
1201 <br class="fancyvrb" /><a
1202 id="x1-43042r10"></a><span
1203 class="cmr-6">10</span><span
1204 class="cmtt-8">&#x00A0;</span><span
1205 class="cmtt-8">&#x00A0;byte</span><span
1206 class="cmtt-8">&#x00A0;n</span><span
1207 class="cmtt-8">&#x00A0;[</span><span
1208 class="cmtt-8">&#x00A0;</span><span
1209 class="cmtt-8">&#x00A0;</span><span
1210 class="cmtt-8">&#x00A0;</span><span
1211 class="cmtt-8">&#x00A0;</span><span
1212 class="cmtt-8">&#x00A0;</span><span
1213 class="cmtt-8">&#x00A0;</span><span
1214 class="cmtt-8">&#x00A0;</span><span
1215 class="cmtt-8">&#x00A0;</span><span
1216 class="cmtt-8">&#x00A0;</span><span
1217 class="cmtt-8">&#x00A0;</span><span
1218 class="cmtt-8">&#x00A0;</span><span
1219 class="cmtt-8">&#x00A0;</span><span
1220 class="cmtt-8">&#x00A0;</span><span
1221 class="cmtt-8">&#x00A0;</span><span
1222 class="cmtt-8">&#x00A0;]</span><span
1223 class="cmtt-8">&#x00A0;</span><span
1224 class="cmtt-8">&#x00A0;bytestream</span><span
1225 class="cmtt-8">&#x00A0;length</span><span
1226 class="cmtt-8">&#x00A0;==</span><span
1227 class="cmtt-8">&#x00A0;1</span><span
1228 class="cmtt-8">&#x00A0;byte</span>
1229 </div>
1230 <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value &#8217;17&#8217; [b0010001]:
1231 <!--l. 139--><p class="noindent" >
1232 <div class="fancyvrb" id="fancyvrb4">
1234 id="x1-43044r1"></a><span
1235 class="cmr-6">1</span><span
1236 class="cmtt-8">&#x00A0;</span><span
1237 class="cmtt-8">&#x00A0;</span><span
1238 class="cmtt-8">&#x00A0;</span><span
1239 class="cmtt-8">&#x00A0;</span><span
1240 class="cmtt-8">&#x00A0;</span><span
1241 class="cmtt-8">&#x00A0;</span><span
1242 class="cmtt-8">&#x00A0;</span><span
1243 class="cmtt-8">&#x00A0;</span><span
1244 class="cmtt-8">&#x00A0;</span><span
1245 class="cmtt-8">&#x00A0;</span><span
1246 class="cmtt-8">&#x00A0;</span><span
1247 class="cmtt-8">&#x00A0;|</span>
1248 <br class="fancyvrb" /><a
1249 id="x1-43046r2"></a><span
1250 class="cmr-6">2</span><span
1251 class="cmtt-8">&#x00A0;</span><span
1252 class="cmtt-8">&#x00A0;</span><span
1253 class="cmtt-8">&#x00A0;</span><span
1254 class="cmtt-8">&#x00A0;</span><span
1255 class="cmtt-8">&#x00A0;</span><span
1256 class="cmtt-8">&#x00A0;</span><span
1257 class="cmtt-8">&#x00A0;</span><span
1258 class="cmtt-8">&#x00A0;</span><span
1259 class="cmtt-8">&#x00A0;</span><span
1260 class="cmtt-8">&#x00A0;</span><span
1261 class="cmtt-8">&#x00A0;</span><span
1262 class="cmtt-8">&#x00A0;V</span>
1263 <br class="fancyvrb" /><a
1264 id="x1-43048r3"></a><span
1265 class="cmr-6">3</span><span
1266 class="cmtt-8">&#x00A0;</span><span
1267 class="cmtt-8">&#x00A0;</span>
1268 <br class="fancyvrb" /><a
1269 id="x1-43050r4"></a><span
1270 class="cmr-6">4</span><span
1271 class="cmtt-8">&#x00A0;</span><span
1272 class="cmtt-8">&#x00A0;</span><span
1273 class="cmtt-8">&#x00A0;</span><span
1274 class="cmtt-8">&#x00A0;</span><span
1275 class="cmtt-8">&#x00A0;</span><span
1276 class="cmtt-8">&#x00A0;</span><span
1277 class="cmtt-8">&#x00A0;</span><span
1278 class="cmtt-8">&#x00A0;</span><span
1279 class="cmtt-8">&#x00A0;</span><span
1280 class="cmtt-8">&#x00A0;7</span><span
1281 class="cmtt-8">&#x00A0;6</span><span
1282 class="cmtt-8">&#x00A0;5</span><span
1283 class="cmtt-8">&#x00A0;4</span><span
1284 class="cmtt-8">&#x00A0;3</span><span
1285 class="cmtt-8">&#x00A0;2</span><span
1286 class="cmtt-8">&#x00A0;1</span><span
1287 class="cmtt-8">&#x00A0;0</span>
1288 <br class="fancyvrb" /><a
1289 id="x1-43052r5"></a><span
1290 class="cmr-6">5</span><span
1291 class="cmtt-8">&#x00A0;</span><span
1292 class="cmtt-8">&#x00A0;byte</span><span
1293 class="cmtt-8">&#x00A0;0</span><span
1294 class="cmtt-8">&#x00A0;[1</span><span
1295 class="cmtt-8">&#x00A0;1</span><span
1296 class="cmtt-8">&#x00A0;1</span><span
1297 class="cmtt-8">&#x00A0;1</span><span
1298 class="cmtt-8">&#x00A0;1</span><span
1299 class="cmtt-8">&#x00A0;1</span><span
1300 class="cmtt-8">&#x00A0;0</span><span
1301 class="cmtt-8">&#x00A0;0]</span>
1302 <br class="fancyvrb" /><a
1303 id="x1-43054r6"></a><span
1304 class="cmr-6">6</span><span
1305 class="cmtt-8">&#x00A0;</span><span
1306 class="cmtt-8">&#x00A0;byte</span><span
1307 class="cmtt-8">&#x00A0;1</span><span
1308 class="cmtt-8">&#x00A0;[0</span><span
1309 class="cmtt-8">&#x00A0;0</span><span
1310 class="cmtt-8">&#x00A0;0</span><span
1311 class="cmtt-8">&#x00A0;0</span><span
1312 class="cmtt-8">&#x00A0;1</span><span
1313 class="cmtt-8">&#x00A0;0</span><span
1314 class="cmtt-8">&#x00A0;0</span><span
1315 class="cmtt-8">&#x00A0;0]</span><span
1316 class="cmtt-8">&#x00A0;</span><span
1317 class="cmtt-8">&#x00A0;&#x003C;-</span>
1318 <br class="fancyvrb" /><a
1319 id="x1-43056r7"></a><span
1320 class="cmr-6">7</span><span
1321 class="cmtt-8">&#x00A0;</span><span
1322 class="cmtt-8">&#x00A0;byte</span><span
1323 class="cmtt-8">&#x00A0;2</span><span
1324 class="cmtt-8">&#x00A0;[</span><span
1325 class="cmtt-8">&#x00A0;</span><span
1326 class="cmtt-8">&#x00A0;</span><span
1327 class="cmtt-8">&#x00A0;</span><span
1328 class="cmtt-8">&#x00A0;</span><span
1329 class="cmtt-8">&#x00A0;</span><span
1330 class="cmtt-8">&#x00A0;</span><span
1331 class="cmtt-8">&#x00A0;</span><span
1332 class="cmtt-8">&#x00A0;</span><span
1333 class="cmtt-8">&#x00A0;</span><span
1334 class="cmtt-8">&#x00A0;</span><span
1335 class="cmtt-8">&#x00A0;</span><span
1336 class="cmtt-8">&#x00A0;</span><span
1337 class="cmtt-8">&#x00A0;</span><span
1338 class="cmtt-8">&#x00A0;</span><span
1339 class="cmtt-8">&#x00A0;]</span>
1340 <br class="fancyvrb" /><a
1341 id="x1-43058r8"></a><span
1342 class="cmr-6">8</span><span
1343 class="cmtt-8">&#x00A0;</span><span
1344 class="cmtt-8">&#x00A0;byte</span><span
1345 class="cmtt-8">&#x00A0;3</span><span
1346 class="cmtt-8">&#x00A0;[</span><span
1347 class="cmtt-8">&#x00A0;</span><span
1348 class="cmtt-8">&#x00A0;</span><span
1349 class="cmtt-8">&#x00A0;</span><span
1350 class="cmtt-8">&#x00A0;</span><span
1351 class="cmtt-8">&#x00A0;</span><span
1352 class="cmtt-8">&#x00A0;</span><span
1353 class="cmtt-8">&#x00A0;</span><span
1354 class="cmtt-8">&#x00A0;</span><span
1355 class="cmtt-8">&#x00A0;</span><span
1356 class="cmtt-8">&#x00A0;</span><span
1357 class="cmtt-8">&#x00A0;</span><span
1358 class="cmtt-8">&#x00A0;</span><span
1359 class="cmtt-8">&#x00A0;</span><span
1360 class="cmtt-8">&#x00A0;</span><span
1361 class="cmtt-8">&#x00A0;]</span>
1362 <br class="fancyvrb" /><a
1363 id="x1-43060r9"></a><span
1364 class="cmr-6">9</span><span
1365 class="cmtt-8">&#x00A0;</span><span
1366 class="cmtt-8">&#x00A0;</span><span
1367 class="cmtt-8">&#x00A0;</span><span
1368 class="cmtt-8">&#x00A0;</span><span
1369 class="cmtt-8">&#x00A0;</span><span
1370 class="cmtt-8">&#x00A0;</span><span
1371 class="cmtt-8">&#x00A0;</span><span
1372 class="cmtt-8">&#x00A0;</span><span
1373 class="cmtt-8">&#x00A0;</span><span
1374 class="cmtt-8">&#x00A0;</span><span
1375 class="cmtt-8">&#x00A0;</span><span
1376 class="cmtt-8">&#x00A0;</span><span
1377 class="cmtt-8">&#x00A0;</span><span
1378 class="cmtt-8">&#x00A0;</span><span
1379 class="cmtt-8">&#x00A0;...</span>
1380 <br class="fancyvrb" /><a
1381 id="x1-43062r10"></a><span
1382 class="cmr-6">10</span><span
1383 class="cmtt-8">&#x00A0;</span><span
1384 class="cmtt-8">&#x00A0;byte</span><span
1385 class="cmtt-8">&#x00A0;n</span><span
1386 class="cmtt-8">&#x00A0;[</span><span
1387 class="cmtt-8">&#x00A0;</span><span
1388 class="cmtt-8">&#x00A0;</span><span
1389 class="cmtt-8">&#x00A0;</span><span
1390 class="cmtt-8">&#x00A0;</span><span
1391 class="cmtt-8">&#x00A0;</span><span
1392 class="cmtt-8">&#x00A0;</span><span
1393 class="cmtt-8">&#x00A0;</span><span
1394 class="cmtt-8">&#x00A0;</span><span
1395 class="cmtt-8">&#x00A0;</span><span
1396 class="cmtt-8">&#x00A0;</span><span
1397 class="cmtt-8">&#x00A0;</span><span
1398 class="cmtt-8">&#x00A0;</span><span
1399 class="cmtt-8">&#x00A0;</span><span
1400 class="cmtt-8">&#x00A0;</span><span
1401 class="cmtt-8">&#x00A0;]</span><span
1402 class="cmtt-8">&#x00A0;</span><span
1403 class="cmtt-8">&#x00A0;bytestream</span><span
1404 class="cmtt-8">&#x00A0;length</span><span
1405 class="cmtt-8">&#x00A0;==</span><span
1406 class="cmtt-8">&#x00A0;2</span><span
1407 class="cmtt-8">&#x00A0;bytes</span>
1408 <br class="fancyvrb" /><a
1409 id="x1-43064r11"></a><span
1410 class="cmr-6">11</span><span
1411 class="cmtt-8">&#x00A0;</span><span
1412 class="cmtt-8">&#x00A0;</span><span
1413 class="cmtt-8">&#x00A0;</span><span
1414 class="cmtt-8">&#x00A0;</span><span
1415 class="cmtt-8">&#x00A0;</span><span
1416 class="cmtt-8">&#x00A0;</span><span
1417 class="cmtt-8">&#x00A0;</span><span
1418 class="cmtt-8">&#x00A0;</span><span
1419 class="cmtt-8">&#x00A0;</span><span
1420 class="cmtt-8">&#x00A0;</span><span
1421 class="cmtt-8">&#x00A0;</span><span
1422 class="cmtt-8">&#x00A0;</span><span
1423 class="cmtt-8">&#x00A0;</span><span
1424 class="cmtt-8">&#x00A0;</span><span
1425 class="cmtt-8">&#x00A0;</span><span
1426 class="cmtt-8">&#x00A0;</span><span
1427 class="cmtt-8">&#x00A0;</span><span
1428 class="cmtt-8">&#x00A0;</span><span
1429 class="cmtt-8">&#x00A0;</span><span
1430 class="cmtt-8">&#x00A0;</span><span
1431 class="cmtt-8">&#x00A0;</span><span
1432 class="cmtt-8">&#x00A0;</span><span
1433 class="cmtt-8">&#x00A0;</span><span
1434 class="cmtt-8">&#x00A0;</span><span
1435 class="cmtt-8">&#x00A0;</span><span
1436 class="cmtt-8">&#x00A0;</span><span
1437 class="cmtt-8">&#x00A0;</span><span
1438 class="cmtt-8">&#x00A0;bit</span><span
1439 class="cmtt-8">&#x00A0;cursor</span><span
1440 class="cmtt-8">&#x00A0;==</span><span
1441 class="cmtt-8">&#x00A0;6</span>
1442 </div>
1443 <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value &#8217;6969&#8217; [b110 11001110 01]:
1444 <!--l. 156--><p class="noindent" >
1445 <div class="fancyvrb" id="fancyvrb5">
1447 id="x1-43066r1"></a><span
1448 class="cmr-6">1</span><span
1449 class="cmtt-8">&#x00A0;</span><span
1450 class="cmtt-8">&#x00A0;</span><span
1451 class="cmtt-8">&#x00A0;</span><span
1452 class="cmtt-8">&#x00A0;</span><span
1453 class="cmtt-8">&#x00A0;</span><span
1454 class="cmtt-8">&#x00A0;</span><span
1455 class="cmtt-8">&#x00A0;</span><span
1456 class="cmtt-8">&#x00A0;</span><span
1457 class="cmtt-8">&#x00A0;</span><span
1458 class="cmtt-8">&#x00A0;</span><span
1459 class="cmtt-8">&#x00A0;</span><span
1460 class="cmtt-8">&#x00A0;</span><span
1461 class="cmtt-8">&#x00A0;</span><span
1462 class="cmtt-8">&#x00A0;</span><span
1463 class="cmtt-8">&#x00A0;</span><span
1464 class="cmtt-8">&#x00A0;</span><span
1465 class="cmtt-8">&#x00A0;</span><span
1466 class="cmtt-8">&#x00A0;|</span>
1467 <br class="fancyvrb" /><a
1468 id="x1-43068r2"></a><span
1469 class="cmr-6">2</span><span
1470 class="cmtt-8">&#x00A0;</span><span
1471 class="cmtt-8">&#x00A0;</span><span
1472 class="cmtt-8">&#x00A0;</span><span
1473 class="cmtt-8">&#x00A0;</span><span
1474 class="cmtt-8">&#x00A0;</span><span
1475 class="cmtt-8">&#x00A0;</span><span
1476 class="cmtt-8">&#x00A0;</span><span
1477 class="cmtt-8">&#x00A0;</span><span
1478 class="cmtt-8">&#x00A0;</span><span
1479 class="cmtt-8">&#x00A0;</span><span
1480 class="cmtt-8">&#x00A0;</span><span
1481 class="cmtt-8">&#x00A0;</span><span
1482 class="cmtt-8">&#x00A0;</span><span
1483 class="cmtt-8">&#x00A0;</span><span
1484 class="cmtt-8">&#x00A0;</span><span
1485 class="cmtt-8">&#x00A0;</span><span
1486 class="cmtt-8">&#x00A0;</span><span
1487 class="cmtt-8">&#x00A0;V</span>
1488 <br class="fancyvrb" /><a
1489 id="x1-43070r3"></a><span
1490 class="cmr-6">3</span><span
1491 class="cmtt-8">&#x00A0;</span><span
1492 class="cmtt-8">&#x00A0;</span>
1493 <br class="fancyvrb" /><a
1494 id="x1-43072r4"></a><span
1495 class="cmr-6">4</span><span
1496 class="cmtt-8">&#x00A0;</span><span
1497 class="cmtt-8">&#x00A0;</span><span
1498 class="cmtt-8">&#x00A0;</span><span
1499 class="cmtt-8">&#x00A0;</span><span
1500 class="cmtt-8">&#x00A0;</span><span
1501 class="cmtt-8">&#x00A0;</span><span
1502 class="cmtt-8">&#x00A0;</span><span
1503 class="cmtt-8">&#x00A0;</span><span
1504 class="cmtt-8">&#x00A0;</span><span
1505 class="cmtt-8">&#x00A0;7</span><span
1506 class="cmtt-8">&#x00A0;6</span><span
1507 class="cmtt-8">&#x00A0;5</span><span
1508 class="cmtt-8">&#x00A0;4</span><span
1509 class="cmtt-8">&#x00A0;3</span><span
1510 class="cmtt-8">&#x00A0;2</span><span
1511 class="cmtt-8">&#x00A0;1</span><span
1512 class="cmtt-8">&#x00A0;0</span>
1513 <br class="fancyvrb" /><a
1514 id="x1-43074r5"></a><span
1515 class="cmr-6">5</span><span
1516 class="cmtt-8">&#x00A0;</span><span
1517 class="cmtt-8">&#x00A0;byte</span><span
1518 class="cmtt-8">&#x00A0;0</span><span
1519 class="cmtt-8">&#x00A0;[1</span><span
1520 class="cmtt-8">&#x00A0;1</span><span
1521 class="cmtt-8">&#x00A0;1</span><span
1522 class="cmtt-8">&#x00A0;1</span><span
1523 class="cmtt-8">&#x00A0;1</span><span
1524 class="cmtt-8">&#x00A0;1</span><span
1525 class="cmtt-8">&#x00A0;0</span><span
1526 class="cmtt-8">&#x00A0;0]</span>
1527 <br class="fancyvrb" /><a
1528 id="x1-43076r6"></a><span
1529 class="cmr-6">6</span><span
1530 class="cmtt-8">&#x00A0;</span><span
1531 class="cmtt-8">&#x00A0;byte</span><span
1532 class="cmtt-8">&#x00A0;1</span><span
1533 class="cmtt-8">&#x00A0;[0</span><span
1534 class="cmtt-8">&#x00A0;1</span><span
1535 class="cmtt-8">&#x00A0;0</span><span
1536 class="cmtt-8">&#x00A0;0</span><span
1537 class="cmtt-8">&#x00A0;1</span><span
1538 class="cmtt-8">&#x00A0;0</span><span
1539 class="cmtt-8">&#x00A0;0</span><span
1540 class="cmtt-8">&#x00A0;0]</span>
1541 <br class="fancyvrb" /><a
1542 id="x1-43078r7"></a><span
1543 class="cmr-6">7</span><span
1544 class="cmtt-8">&#x00A0;</span><span
1545 class="cmtt-8">&#x00A0;byte</span><span
1546 class="cmtt-8">&#x00A0;2</span><span
1547 class="cmtt-8">&#x00A0;[1</span><span
1548 class="cmtt-8">&#x00A0;1</span><span
1549 class="cmtt-8">&#x00A0;0</span><span
1550 class="cmtt-8">&#x00A0;0</span><span
1551 class="cmtt-8">&#x00A0;1</span><span
1552 class="cmtt-8">&#x00A0;1</span><span
1553 class="cmtt-8">&#x00A0;1</span><span
1554 class="cmtt-8">&#x00A0;0]</span>
1555 <br class="fancyvrb" /><a
1556 id="x1-43080r8"></a><span
1557 class="cmr-6">8</span><span
1558 class="cmtt-8">&#x00A0;</span><span
1559 class="cmtt-8">&#x00A0;byte</span><span
1560 class="cmtt-8">&#x00A0;3</span><span
1561 class="cmtt-8">&#x00A0;[0</span><span
1562 class="cmtt-8">&#x00A0;0</span><span
1563 class="cmtt-8">&#x00A0;0</span><span
1564 class="cmtt-8">&#x00A0;0</span><span
1565 class="cmtt-8">&#x00A0;0</span><span
1566 class="cmtt-8">&#x00A0;1</span><span
1567 class="cmtt-8">&#x00A0;1</span><span
1568 class="cmtt-8">&#x00A0;0]</span><span
1569 class="cmtt-8">&#x00A0;</span><span
1570 class="cmtt-8">&#x00A0;&#x003C;-</span>
1571 <br class="fancyvrb" /><a
1572 id="x1-43082r9"></a><span
1573 class="cmr-6">9</span><span
1574 class="cmtt-8">&#x00A0;</span><span
1575 class="cmtt-8">&#x00A0;</span><span
1576 class="cmtt-8">&#x00A0;</span><span
1577 class="cmtt-8">&#x00A0;</span><span
1578 class="cmtt-8">&#x00A0;</span><span
1579 class="cmtt-8">&#x00A0;</span><span
1580 class="cmtt-8">&#x00A0;</span><span
1581 class="cmtt-8">&#x00A0;</span><span
1582 class="cmtt-8">&#x00A0;</span><span
1583 class="cmtt-8">&#x00A0;</span><span
1584 class="cmtt-8">&#x00A0;</span><span
1585 class="cmtt-8">&#x00A0;</span><span
1586 class="cmtt-8">&#x00A0;</span><span
1587 class="cmtt-8">&#x00A0;</span><span
1588 class="cmtt-8">&#x00A0;...</span>
1589 <br class="fancyvrb" /><a
1590 id="x1-43084r10"></a><span
1591 class="cmr-6">10</span><span
1592 class="cmtt-8">&#x00A0;</span><span
1593 class="cmtt-8">&#x00A0;byte</span><span
1594 class="cmtt-8">&#x00A0;n</span><span
1595 class="cmtt-8">&#x00A0;[</span><span
1596 class="cmtt-8">&#x00A0;</span><span
1597 class="cmtt-8">&#x00A0;</span><span
1598 class="cmtt-8">&#x00A0;</span><span
1599 class="cmtt-8">&#x00A0;</span><span
1600 class="cmtt-8">&#x00A0;</span><span
1601 class="cmtt-8">&#x00A0;</span><span
1602 class="cmtt-8">&#x00A0;</span><span
1603 class="cmtt-8">&#x00A0;</span><span
1604 class="cmtt-8">&#x00A0;</span><span
1605 class="cmtt-8">&#x00A0;</span><span
1606 class="cmtt-8">&#x00A0;</span><span
1607 class="cmtt-8">&#x00A0;</span><span
1608 class="cmtt-8">&#x00A0;</span><span
1609 class="cmtt-8">&#x00A0;</span><span
1610 class="cmtt-8">&#x00A0;]</span><span
1611 class="cmtt-8">&#x00A0;</span><span
1612 class="cmtt-8">&#x00A0;bytestream</span><span
1613 class="cmtt-8">&#x00A0;length</span><span
1614 class="cmtt-8">&#x00A0;==</span><span
1615 class="cmtt-8">&#x00A0;4</span><span
1616 class="cmtt-8">&#x00A0;bytes</span>
1617 <br class="fancyvrb" /><a
1618 id="x1-43086r11"></a><span
1619 class="cmr-6">11</span><span
1620 class="cmtt-8">&#x00A0;</span><span
1621 class="cmtt-8">&#x00A0;</span>
1622 </div>
1623 <!--l. 173--><p class="noindent" >
1624 <h5 class="subsubsectionHead"><span class="titlemark">2.1.7 </span> <a
1625 id="x1-440002.1.7"></a>decoding example</h5>
1626 <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
1627 <!--l. 177--><p class="noindent" >
1628 <div class="fancyvrb" id="fancyvrb6">
1633 id="x1-44002r1"></a><span
1634 class="cmr-6">1</span><span
1635 class="cmtt-8">&#x00A0;</span><span
1636 class="cmtt-8">&#x00A0;</span><span
1637 class="cmtt-8">&#x00A0;</span><span
1638 class="cmtt-8">&#x00A0;</span><span
1639 class="cmtt-8">&#x00A0;</span><span
1640 class="cmtt-8">&#x00A0;</span><span
1641 class="cmtt-8">&#x00A0;</span><span
1642 class="cmtt-8">&#x00A0;</span><span
1643 class="cmtt-8">&#x00A0;</span><span
1644 class="cmtt-8">&#x00A0;</span><span
1645 class="cmtt-8">&#x00A0;</span><span
1646 class="cmtt-8">&#x00A0;</span><span
1647 class="cmtt-8">&#x00A0;</span><span
1648 class="cmtt-8">&#x00A0;</span><span
1649 class="cmtt-8">&#x00A0;</span><span
1650 class="cmtt-8">&#x00A0;</span><span
1651 class="cmtt-8">&#x00A0;</span><span
1652 class="cmtt-8">&#x00A0;</span><span
1653 class="cmtt-8">&#x00A0;</span><span
1654 class="cmtt-8">&#x00A0;</span><span
1655 class="cmtt-8">&#x00A0;</span><span
1656 class="cmtt-8">&#x00A0;</span><span
1657 class="cmtt-8">&#x00A0;</span><span
1658 class="cmtt-8">&#x00A0;|</span>
1659 <br class="fancyvrb" /><a
1660 id="x1-44004r2"></a><span
1661 class="cmr-6">2</span><span
1662 class="cmtt-8">&#x00A0;</span><span
1663 class="cmtt-8">&#x00A0;</span><span
1664 class="cmtt-8">&#x00A0;</span><span
1665 class="cmtt-8">&#x00A0;</span><span
1666 class="cmtt-8">&#x00A0;</span><span
1667 class="cmtt-8">&#x00A0;</span><span
1668 class="cmtt-8">&#x00A0;</span><span
1669 class="cmtt-8">&#x00A0;</span><span
1670 class="cmtt-8">&#x00A0;</span><span
1671 class="cmtt-8">&#x00A0;</span><span
1672 class="cmtt-8">&#x00A0;</span><span
1673 class="cmtt-8">&#x00A0;</span><span
1674 class="cmtt-8">&#x00A0;</span><span
1675 class="cmtt-8">&#x00A0;</span><span
1676 class="cmtt-8">&#x00A0;</span><span
1677 class="cmtt-8">&#x00A0;</span><span
1678 class="cmtt-8">&#x00A0;</span><span
1679 class="cmtt-8">&#x00A0;</span><span
1680 class="cmtt-8">&#x00A0;</span><span
1681 class="cmtt-8">&#x00A0;</span><span
1682 class="cmtt-8">&#x00A0;</span><span
1683 class="cmtt-8">&#x00A0;</span><span
1684 class="cmtt-8">&#x00A0;</span><span
1685 class="cmtt-8">&#x00A0;V</span>
1686 <br class="fancyvrb" /><a
1687 id="x1-44006r3"></a><span
1688 class="cmr-6">3</span><span
1689 class="cmtt-8">&#x00A0;</span><span
1690 class="cmtt-8">&#x00A0;</span>
1691 <br class="fancyvrb" /><a
1692 id="x1-44008r4"></a><span
1693 class="cmr-6">4</span><span
1694 class="cmtt-8">&#x00A0;</span><span
1695 class="cmtt-8">&#x00A0;</span><span
1696 class="cmtt-8">&#x00A0;</span><span
1697 class="cmtt-8">&#x00A0;</span><span
1698 class="cmtt-8">&#x00A0;</span><span
1699 class="cmtt-8">&#x00A0;</span><span
1700 class="cmtt-8">&#x00A0;</span><span
1701 class="cmtt-8">&#x00A0;</span><span
1702 class="cmtt-8">&#x00A0;</span><span
1703 class="cmtt-8">&#x00A0;7</span><span
1704 class="cmtt-8">&#x00A0;6</span><span
1705 class="cmtt-8">&#x00A0;5</span><span
1706 class="cmtt-8">&#x00A0;4</span><span
1707 class="cmtt-8">&#x00A0;3</span><span
1708 class="cmtt-8">&#x00A0;2</span><span
1709 class="cmtt-8">&#x00A0;1</span><span
1710 class="cmtt-8">&#x00A0;0</span>
1711 <br class="fancyvrb" /><a
1712 id="x1-44010r5"></a><span
1713 class="cmr-6">5</span><span
1714 class="cmtt-8">&#x00A0;</span><span
1715 class="cmtt-8">&#x00A0;byte</span><span
1716 class="cmtt-8">&#x00A0;0</span><span
1717 class="cmtt-8">&#x00A0;[1</span><span
1718 class="cmtt-8">&#x00A0;1</span><span
1719 class="cmtt-8">&#x00A0;1</span><span
1720 class="cmtt-8">&#x00A0;1</span><span
1721 class="cmtt-8">&#x00A0;1</span><span
1722 class="cmtt-8">&#x00A0;1</span><span
1723 class="cmtt-8">&#x00A0;0</span><span
1724 class="cmtt-8">&#x00A0;0]</span><span
1725 class="cmtt-8">&#x00A0;</span><span
1726 class="cmtt-8">&#x00A0;&#x003C;-</span>
1727 <br class="fancyvrb" /><a
1728 id="x1-44012r6"></a><span
1729 class="cmr-6">6</span><span
1730 class="cmtt-8">&#x00A0;</span><span
1731 class="cmtt-8">&#x00A0;byte</span><span
1732 class="cmtt-8">&#x00A0;1</span><span
1733 class="cmtt-8">&#x00A0;[0</span><span
1734 class="cmtt-8">&#x00A0;1</span><span
1735 class="cmtt-8">&#x00A0;0</span><span
1736 class="cmtt-8">&#x00A0;0</span><span
1737 class="cmtt-8">&#x00A0;1</span><span
1738 class="cmtt-8">&#x00A0;0</span><span
1739 class="cmtt-8">&#x00A0;0</span><span
1740 class="cmtt-8">&#x00A0;0]</span>
1741 <br class="fancyvrb" /><a
1742 id="x1-44014r7"></a><span
1743 class="cmr-6">7</span><span
1744 class="cmtt-8">&#x00A0;</span><span
1745 class="cmtt-8">&#x00A0;byte</span><span
1746 class="cmtt-8">&#x00A0;2</span><span
1747 class="cmtt-8">&#x00A0;[1</span><span
1748 class="cmtt-8">&#x00A0;1</span><span
1749 class="cmtt-8">&#x00A0;0</span><span
1750 class="cmtt-8">&#x00A0;0</span><span
1751 class="cmtt-8">&#x00A0;1</span><span
1752 class="cmtt-8">&#x00A0;1</span><span
1753 class="cmtt-8">&#x00A0;1</span><span
1754 class="cmtt-8">&#x00A0;0]</span>
1755 <br class="fancyvrb" /><a
1756 id="x1-44016r8"></a><span
1757 class="cmr-6">8</span><span
1758 class="cmtt-8">&#x00A0;</span><span
1759 class="cmtt-8">&#x00A0;byte</span><span
1760 class="cmtt-8">&#x00A0;3</span><span
1761 class="cmtt-8">&#x00A0;[0</span><span
1762 class="cmtt-8">&#x00A0;0</span><span
1763 class="cmtt-8">&#x00A0;0</span><span
1764 class="cmtt-8">&#x00A0;0</span><span
1765 class="cmtt-8">&#x00A0;0</span><span
1766 class="cmtt-8">&#x00A0;1</span><span
1767 class="cmtt-8">&#x00A0;1</span><span
1768 class="cmtt-8">&#x00A0;0]</span><span
1769 class="cmtt-8">&#x00A0;</span><span
1770 class="cmtt-8">&#x00A0;bytestream</span><span
1771 class="cmtt-8">&#x00A0;length</span><span
1772 class="cmtt-8">&#x00A0;==</span><span
1773 class="cmtt-8">&#x00A0;4</span><span
1774 class="cmtt-8">&#x00A0;bytes</span>
1775 <br class="fancyvrb" /><a
1776 id="x1-44018r9"></a><span
1777 class="cmr-6">9</span><span
1778 class="cmtt-8">&#x00A0;</span><span
1779 class="cmtt-8">&#x00A0;</span>
1780 </div>
1781 <!--l. 190--><p class="noindent" >We read two, two-bit integer fields, resulting in the returned numbers &#8217;b00&#8217; and &#8217;b11&#8217;. Two things
1782 are worth noting here:
1783 <ul class="itemize1">
1784 <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
1785 some other combination of bit-widths from the bitstream is well defined. There are
1786 no artificial alignment boundaries maintained in the bitstream.
1787 </li>
1788 <li class="itemize">The second value is the two-bit-wide integer &#8217;b11&#8217;. This value may be interpreted
1789 either as the unsigned value &#8217;3&#8217;, or the signed value &#8217;-1&#8217;. Signedness is dependent on
1790 decode context.</li></ul>
1791 <!--l. 208--><p class="noindent" >
1792 <h5 class="subsubsectionHead"><span class="titlemark">2.1.8 </span> <a
1793 id="x1-450002.1.8"></a>end-of-packet alignment</h5>
1794 <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
1795 embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
1796 Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
1797 the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
1798 in the last byte of a packet.
1799 <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
1800 should this unused space be read, it will return binary zeroes.
1801 <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an &#8217;end-of-packet&#8217; condition.
1802 End-of-packet is not to be considered an error; it is merely a state indicating that there is
1803 insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
1804 normal mode of operation, and as such, decoders must handle reading past the end of a packet as
1805 a typical mode of operation. Any further read operations after an &#8217;end-of-packet&#8217; condition shall
1806 also return &#8217;end-of-packet&#8217;.
1810 <!--l. 233--><p class="noindent" >
1811 <h5 class="subsubsectionHead"><span class="titlemark">2.1.9 </span> <a
1812 id="x1-460002.1.9"></a>reading zero bits</h5>
1813 <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value &#8217;0&#8217; and does not increment the stream cursor.
1814 Reading to the end of the packet (but not past, such that an &#8217;end-of-packet&#8217; condition has not
1815 triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
1816 end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets &#8217;end-of-packet&#8217;
1817 shall also fail with &#8217;end-of-packet&#8217;.
1824 <h3 class="sectionHead"><span class="titlemark">3 </span> <a
1825 id="x1-470003"></a>Probability Model and Codebooks</h3>
1826 <!--l. 6--><p class="noindent" >
1827 <h4 class="subsectionHead"><span class="titlemark">3.1 </span> <a
1828 id="x1-480003.1"></a>Overview</h4>
1829 <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
1830 probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
1831 bitstream itself in the third header, the codec setup header. This packed configuration consists of
1832 multiple &#8217;codebooks&#8217;, each containing a specific Huffman-equivalent representation for decoding
1833 compressed codewords as well as an optional lookup table of output vector values to which a
1834 decoded Huffman value is applied as an offset, generating the final decoded output corresponding
1835 to a given compressed codeword.
1836 <!--l. 18--><p class="noindent" >
1837 <h5 class="subsubsectionHead"><span class="titlemark">3.1.1 </span> <a
1838 id="x1-490003.1.1"></a>Bitwise operation</h5>
1839 <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
1840 and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
1841 read from the stream according to <a
1842 href="#x1-360002">Section&#x00A0;2<!--tex4ht:ref: vorbis:spec:bitpacking --></a>, &#8220;<a
1843 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221;.
1844 <!--l. 27--><p class="noindent" >
1845 <h4 class="subsectionHead"><span class="titlemark">3.2 </span> <a
1846 id="x1-500003.2"></a>Packed codebook format</h4>
1847 <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system&#8217;s native byte width is
1848 eight bits. This is not universally true; see <a
1849 href="#x1-360002">Section&#x00A0;2<!--tex4ht:ref: vorbis:spec:bitpacking --></a>, &#8220;<a
1850 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; for discussion
1851 relating to non-eight-bit bytes.
1855 <!--l. 34--><p class="noindent" >
1856 <h5 class="subsubsectionHead"><span class="titlemark">3.2.1 </span> <a
1857 id="x1-510003.2.1"></a>codebook decode</h5>
1858 <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
1859 <!--l. 38--><p class="noindent" >
1860 <div class="fancyvrb" id="fancyvrb7">
1862 id="x1-51002r1"></a><span
1863 class="cmr-6">1</span><span
1864 class="cmtt-8">&#x00A0;</span><span
1865 class="cmtt-8">&#x00A0;byte</span><span
1866 class="cmtt-8">&#x00A0;0:</span><span
1867 class="cmtt-8">&#x00A0;[</span><span
1868 class="cmtt-8">&#x00A0;0</span><span
1869 class="cmtt-8">&#x00A0;1</span><span
1870 class="cmtt-8">&#x00A0;0</span><span
1871 class="cmtt-8">&#x00A0;0</span><span
1872 class="cmtt-8">&#x00A0;0</span><span
1873 class="cmtt-8">&#x00A0;0</span><span
1874 class="cmtt-8">&#x00A0;1</span><span
1875 class="cmtt-8">&#x00A0;0</span><span
1876 class="cmtt-8">&#x00A0;]</span><span
1877 class="cmtt-8">&#x00A0;(0x42)</span>
1878 <br class="fancyvrb" /><a
1879 id="x1-51004r2"></a><span
1880 class="cmr-6">2</span><span
1881 class="cmtt-8">&#x00A0;</span><span
1882 class="cmtt-8">&#x00A0;byte</span><span
1883 class="cmtt-8">&#x00A0;1:</span><span
1884 class="cmtt-8">&#x00A0;[</span><span
1885 class="cmtt-8">&#x00A0;0</span><span
1886 class="cmtt-8">&#x00A0;1</span><span
1887 class="cmtt-8">&#x00A0;0</span><span
1888 class="cmtt-8">&#x00A0;0</span><span
1889 class="cmtt-8">&#x00A0;0</span><span
1890 class="cmtt-8">&#x00A0;0</span><span
1891 class="cmtt-8">&#x00A0;1</span><span
1892 class="cmtt-8">&#x00A0;1</span><span
1893 class="cmtt-8">&#x00A0;]</span><span
1894 class="cmtt-8">&#x00A0;(0x43)</span>
1895 <br class="fancyvrb" /><a
1896 id="x1-51006r3"></a><span
1897 class="cmr-6">3</span><span
1898 class="cmtt-8">&#x00A0;</span><span
1899 class="cmtt-8">&#x00A0;byte</span><span
1900 class="cmtt-8">&#x00A0;2:</span><span
1901 class="cmtt-8">&#x00A0;[</span><span
1902 class="cmtt-8">&#x00A0;0</span><span
1903 class="cmtt-8">&#x00A0;1</span><span
1904 class="cmtt-8">&#x00A0;0</span><span
1905 class="cmtt-8">&#x00A0;1</span><span
1906 class="cmtt-8">&#x00A0;0</span><span
1907 class="cmtt-8">&#x00A0;1</span><span
1908 class="cmtt-8">&#x00A0;1</span><span
1909 class="cmtt-8">&#x00A0;0</span><span
1910 class="cmtt-8">&#x00A0;]</span><span
1911 class="cmtt-8">&#x00A0;(0x56)</span>
1912 </div>
1913 <!--l. 44--><p class="noindent" >16 bit <span
1914 class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span
1915 class="cmtt-12">[codebook_entries] </span>fields:
1916 <!--l. 46--><p class="noindent" >
1917 <div class="fancyvrb" id="fancyvrb8">
1919 id="x1-51008r1"></a><span
1920 class="cmr-6">1</span><span
1921 class="cmtt-8">&#x00A0;</span><span
1922 class="cmtt-8">&#x00A0;</span>
1923 <br class="fancyvrb" /><a
1924 id="x1-51010r2"></a><span
1925 class="cmr-6">2</span><span
1926 class="cmtt-8">&#x00A0;</span><span
1927 class="cmtt-8">&#x00A0;byte</span><span
1928 class="cmtt-8">&#x00A0;3:</span><span
1929 class="cmtt-8">&#x00A0;[</span><span
1930 class="cmtt-8">&#x00A0;X</span><span
1931 class="cmtt-8">&#x00A0;X</span><span
1932 class="cmtt-8">&#x00A0;X</span><span
1933 class="cmtt-8">&#x00A0;X</span><span
1934 class="cmtt-8">&#x00A0;X</span><span
1935 class="cmtt-8">&#x00A0;X</span><span
1936 class="cmtt-8">&#x00A0;X</span><span
1937 class="cmtt-8">&#x00A0;X</span><span
1938 class="cmtt-8">&#x00A0;]</span>
1939 <br class="fancyvrb" /><a
1940 id="x1-51012r3"></a><span
1941 class="cmr-6">3</span><span
1942 class="cmtt-8">&#x00A0;</span><span
1943 class="cmtt-8">&#x00A0;byte</span><span
1944 class="cmtt-8">&#x00A0;4:</span><span
1945 class="cmtt-8">&#x00A0;[</span><span
1946 class="cmtt-8">&#x00A0;X</span><span
1947 class="cmtt-8">&#x00A0;X</span><span
1948 class="cmtt-8">&#x00A0;X</span><span
1949 class="cmtt-8">&#x00A0;X</span><span
1950 class="cmtt-8">&#x00A0;X</span><span
1951 class="cmtt-8">&#x00A0;X</span><span
1952 class="cmtt-8">&#x00A0;X</span><span
1953 class="cmtt-8">&#x00A0;X</span><span
1954 class="cmtt-8">&#x00A0;]</span><span
1955 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
1956 class="cmtt-8">&#x00A0;(16</span><span
1957 class="cmtt-8">&#x00A0;bit</span><span
1958 class="cmtt-8">&#x00A0;unsigned)</span>
1959 <br class="fancyvrb" /><a
1960 id="x1-51014r4"></a><span
1961 class="cmr-6">4</span><span
1962 class="cmtt-8">&#x00A0;</span><span
1963 class="cmtt-8">&#x00A0;</span>
1964 <br class="fancyvrb" /><a
1965 id="x1-51016r5"></a><span
1966 class="cmr-6">5</span><span
1967 class="cmtt-8">&#x00A0;</span><span
1968 class="cmtt-8">&#x00A0;byte</span><span
1969 class="cmtt-8">&#x00A0;5:</span><span
1970 class="cmtt-8">&#x00A0;[</span><span
1971 class="cmtt-8">&#x00A0;X</span><span
1972 class="cmtt-8">&#x00A0;X</span><span
1973 class="cmtt-8">&#x00A0;X</span><span
1974 class="cmtt-8">&#x00A0;X</span><span
1975 class="cmtt-8">&#x00A0;X</span><span
1976 class="cmtt-8">&#x00A0;X</span><span
1977 class="cmtt-8">&#x00A0;X</span><span
1978 class="cmtt-8">&#x00A0;X</span><span
1979 class="cmtt-8">&#x00A0;]</span>
1980 <br class="fancyvrb" /><a
1981 id="x1-51018r6"></a><span
1982 class="cmr-6">6</span><span
1983 class="cmtt-8">&#x00A0;</span><span
1984 class="cmtt-8">&#x00A0;byte</span><span
1985 class="cmtt-8">&#x00A0;6:</span><span
1986 class="cmtt-8">&#x00A0;[</span><span
1987 class="cmtt-8">&#x00A0;X</span><span
1988 class="cmtt-8">&#x00A0;X</span><span
1989 class="cmtt-8">&#x00A0;X</span><span
1990 class="cmtt-8">&#x00A0;X</span><span
1991 class="cmtt-8">&#x00A0;X</span><span
1992 class="cmtt-8">&#x00A0;X</span><span
1993 class="cmtt-8">&#x00A0;X</span><span
1994 class="cmtt-8">&#x00A0;X</span><span
1995 class="cmtt-8">&#x00A0;]</span>
1996 <br class="fancyvrb" /><a
1997 id="x1-51020r7"></a><span
1998 class="cmr-6">7</span><span
1999 class="cmtt-8">&#x00A0;</span><span
2000 class="cmtt-8">&#x00A0;byte</span><span
2001 class="cmtt-8">&#x00A0;7:</span><span
2002 class="cmtt-8">&#x00A0;[</span><span
2003 class="cmtt-8">&#x00A0;X</span><span
2004 class="cmtt-8">&#x00A0;X</span><span
2005 class="cmtt-8">&#x00A0;X</span><span
2006 class="cmtt-8">&#x00A0;X</span><span
2007 class="cmtt-8">&#x00A0;X</span><span
2008 class="cmtt-8">&#x00A0;X</span><span
2009 class="cmtt-8">&#x00A0;X</span><span
2010 class="cmtt-8">&#x00A0;X</span><span
2011 class="cmtt-8">&#x00A0;]</span><span
2012 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
2013 class="cmtt-8">&#x00A0;(24</span><span
2014 class="cmtt-8">&#x00A0;bit</span><span
2015 class="cmtt-8">&#x00A0;unsigned)</span>
2016 <br class="fancyvrb" /><a
2017 id="x1-51022r8"></a><span
2018 class="cmr-6">8</span><span
2019 class="cmtt-8">&#x00A0;</span><span
2020 class="cmtt-8">&#x00A0;</span>
2021 </div>
2022 <!--l. 57--><p class="noindent" >Next is the <span
2023 class="cmtt-12">[ordered] </span>bit flag:
2024 <!--l. 59--><p class="noindent" >
2025 <div class="fancyvrb" id="fancyvrb9">
2027 id="x1-51024r1"></a><span
2028 class="cmr-6">1</span><span
2029 class="cmtt-8">&#x00A0;</span><span
2030 class="cmtt-8">&#x00A0;</span>
2031 <br class="fancyvrb" /><a
2032 id="x1-51026r2"></a><span
2033 class="cmr-6">2</span><span
2034 class="cmtt-8">&#x00A0;</span><span
2035 class="cmtt-8">&#x00A0;byte</span><span
2036 class="cmtt-8">&#x00A0;8:</span><span
2037 class="cmtt-8">&#x00A0;[</span><span
2038 class="cmtt-8">&#x00A0;</span><span
2039 class="cmtt-8">&#x00A0;</span><span
2040 class="cmtt-8">&#x00A0;</span><span
2041 class="cmtt-8">&#x00A0;</span><span
2042 class="cmtt-8">&#x00A0;</span><span
2043 class="cmtt-8">&#x00A0;</span><span
2044 class="cmtt-8">&#x00A0;</span><span
2045 class="cmtt-8">&#x00A0;</span><span
2046 class="cmtt-8">&#x00A0;</span><span
2047 class="cmtt-8">&#x00A0;</span><span
2048 class="cmtt-8">&#x00A0;</span><span
2049 class="cmtt-8">&#x00A0;</span><span
2050 class="cmtt-8">&#x00A0;</span><span
2051 class="cmtt-8">&#x00A0;</span><span
2052 class="cmtt-8">&#x00A0;X</span><span
2053 class="cmtt-8">&#x00A0;]</span><span
2054 class="cmtt-8">&#x00A0;[ordered]</span><span
2055 class="cmtt-8">&#x00A0;(1</span><span
2056 class="cmtt-8">&#x00A0;bit)</span>
2057 <br class="fancyvrb" /><a
2058 id="x1-51028r3"></a><span
2059 class="cmr-6">3</span><span
2060 class="cmtt-8">&#x00A0;</span><span
2061 class="cmtt-8">&#x00A0;</span>
2062 </div>
2063 <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span
2064 class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
2065 We now read the list of codeword lengths and store these lengths in the array
2066 <span
2067 class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span
2068 class="cmtt-12">[ordered] </span>flag
2069 is set or unset.
2070 <ul class="itemize1">
2071 <li class="itemize">If the <span
2072 class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
2073 needs to read each codeword length one-by-one.
2074 <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span
2075 class="cmtt-12">[sparse] </span>flag. This flag determines
2076 whether or not the codebook contains unused entries that are not to be included in
2080 the codeword decode tree:
2081 <!--l. 82--><p class="noindent" >
2082 <div class="fancyvrb" id="fancyvrb10">
2084 id="x1-51030r1"></a><span
2085 class="cmr-6">1</span><span
2086 class="cmtt-8">&#x00A0;</span><span
2087 class="cmtt-8">&#x00A0;byte</span><span
2088 class="cmtt-8">&#x00A0;8:</span><span
2089 class="cmtt-8">&#x00A0;[</span><span
2090 class="cmtt-8">&#x00A0;</span><span
2091 class="cmtt-8">&#x00A0;</span><span
2092 class="cmtt-8">&#x00A0;</span><span
2093 class="cmtt-8">&#x00A0;</span><span
2094 class="cmtt-8">&#x00A0;</span><span
2095 class="cmtt-8">&#x00A0;</span><span
2096 class="cmtt-8">&#x00A0;</span><span
2097 class="cmtt-8">&#x00A0;</span><span
2098 class="cmtt-8">&#x00A0;</span><span
2099 class="cmtt-8">&#x00A0;</span><span
2100 class="cmtt-8">&#x00A0;</span><span
2101 class="cmtt-8">&#x00A0;</span><span
2102 class="cmtt-8">&#x00A0;X</span><span
2103 class="cmtt-8">&#x00A0;1</span><span
2104 class="cmtt-8">&#x00A0;]</span><span
2105 class="cmtt-8">&#x00A0;[sparse]</span><span
2106 class="cmtt-8">&#x00A0;flag</span><span
2107 class="cmtt-8">&#x00A0;(1</span><span
2108 class="cmtt-8">&#x00A0;bit)</span>
2109 </div>
2110 <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span
2111 class="cmtt-12">[codebook_entries] </span>codebook entries:
2112 <!--l. 89--><p class="noindent" >
2113 <div class="fancyvrb" id="fancyvrb11">
2115 id="x1-51032r1"></a><span
2116 class="cmr-6">1</span><span
2117 class="cmtt-8">&#x00A0;</span><span
2118 class="cmtt-8">&#x00A0;</span>
2119 <br class="fancyvrb" /><a
2120 id="x1-51034r2"></a><span
2121 class="cmr-6">2</span><span
2122 class="cmtt-8">&#x00A0;</span><span
2123 class="cmtt-8">&#x00A0;</span><span
2124 class="cmtt-8">&#x00A0;</span><span
2125 class="cmtt-8">&#x00A0;1)</span><span
2126 class="cmtt-8">&#x00A0;if([sparse]</span><span
2127 class="cmtt-8">&#x00A0;is</span><span
2128 class="cmtt-8">&#x00A0;set)</span><span
2129 class="cmtt-8">&#x00A0;</span><span
2130 class="cmsy-8">{</span>
2131 <br class="fancyvrb" /><a
2132 id="x1-51036r3"></a><span
2133 class="cmr-6">3</span><span
2134 class="cmtt-8">&#x00A0;</span><span
2135 class="cmtt-8">&#x00A0;</span>
2136 <br class="fancyvrb" /><a
2137 id="x1-51038r4"></a><span
2138 class="cmr-6">4</span><span
2139 class="cmtt-8">&#x00A0;</span><span
2140 class="cmtt-8">&#x00A0;</span><span
2141 class="cmtt-8">&#x00A0;</span><span
2142 class="cmtt-8">&#x00A0;</span><span
2143 class="cmtt-8">&#x00A0;</span><span
2144 class="cmtt-8">&#x00A0;</span><span
2145 class="cmtt-8">&#x00A0;</span><span
2146 class="cmtt-8">&#x00A0;</span><span
2147 class="cmtt-8">&#x00A0;</span><span
2148 class="cmtt-8">&#x00A0;</span><span
2149 class="cmtt-8">&#x00A0;2)</span><span
2150 class="cmtt-8">&#x00A0;[flag]</span><span
2151 class="cmtt-8">&#x00A0;=</span><span
2152 class="cmtt-8">&#x00A0;read</span><span
2153 class="cmtt-8">&#x00A0;one</span><span
2154 class="cmtt-8">&#x00A0;bit;</span>
2155 <br class="fancyvrb" /><a
2156 id="x1-51040r5"></a><span
2157 class="cmr-6">5</span><span
2158 class="cmtt-8">&#x00A0;</span><span
2159 class="cmtt-8">&#x00A0;</span><span
2160 class="cmtt-8">&#x00A0;</span><span
2161 class="cmtt-8">&#x00A0;</span><span
2162 class="cmtt-8">&#x00A0;</span><span
2163 class="cmtt-8">&#x00A0;</span><span
2164 class="cmtt-8">&#x00A0;</span><span
2165 class="cmtt-8">&#x00A0;</span><span
2166 class="cmtt-8">&#x00A0;</span><span
2167 class="cmtt-8">&#x00A0;</span><span
2168 class="cmtt-8">&#x00A0;3)</span><span
2169 class="cmtt-8">&#x00A0;if([flag]</span><span
2170 class="cmtt-8">&#x00A0;is</span><span
2171 class="cmtt-8">&#x00A0;set)</span><span
2172 class="cmtt-8">&#x00A0;</span><span
2173 class="cmsy-8">{</span>
2174 <br class="fancyvrb" /><a
2175 id="x1-51042r6"></a><span
2176 class="cmr-6">6</span><span
2177 class="cmtt-8">&#x00A0;</span><span
2178 class="cmtt-8">&#x00A0;</span>
2179 <br class="fancyvrb" /><a
2180 id="x1-51044r7"></a><span
2181 class="cmr-6">7</span><span
2182 class="cmtt-8">&#x00A0;</span><span
2183 class="cmtt-8">&#x00A0;</span><span
2184 class="cmtt-8">&#x00A0;</span><span
2185 class="cmtt-8">&#x00A0;</span><span
2186 class="cmtt-8">&#x00A0;</span><span
2187 class="cmtt-8">&#x00A0;</span><span
2188 class="cmtt-8">&#x00A0;</span><span
2189 class="cmtt-8">&#x00A0;</span><span
2190 class="cmtt-8">&#x00A0;</span><span
2191 class="cmtt-8">&#x00A0;</span><span
2192 class="cmtt-8">&#x00A0;</span><span
2193 class="cmtt-8">&#x00A0;</span><span
2194 class="cmtt-8">&#x00A0;</span><span
2195 class="cmtt-8">&#x00A0;</span><span
2196 class="cmtt-8">&#x00A0;</span><span
2197 class="cmtt-8">&#x00A0;4)</span><span
2198 class="cmtt-8">&#x00A0;[length]</span><span
2199 class="cmtt-8">&#x00A0;=</span><span
2200 class="cmtt-8">&#x00A0;read</span><span
2201 class="cmtt-8">&#x00A0;a</span><span
2202 class="cmtt-8">&#x00A0;five</span><span
2203 class="cmtt-8">&#x00A0;bit</span><span
2204 class="cmtt-8">&#x00A0;unsigned</span><span
2205 class="cmtt-8">&#x00A0;integer;</span>
2206 <br class="fancyvrb" /><a
2207 id="x1-51046r8"></a><span
2208 class="cmr-6">8</span><span
2209 class="cmtt-8">&#x00A0;</span><span
2210 class="cmtt-8">&#x00A0;</span><span
2211 class="cmtt-8">&#x00A0;</span><span
2212 class="cmtt-8">&#x00A0;</span><span
2213 class="cmtt-8">&#x00A0;</span><span
2214 class="cmtt-8">&#x00A0;</span><span
2215 class="cmtt-8">&#x00A0;</span><span
2216 class="cmtt-8">&#x00A0;</span><span
2217 class="cmtt-8">&#x00A0;</span><span
2218 class="cmtt-8">&#x00A0;</span><span
2219 class="cmtt-8">&#x00A0;</span><span
2220 class="cmtt-8">&#x00A0;</span><span
2221 class="cmtt-8">&#x00A0;</span><span
2222 class="cmtt-8">&#x00A0;</span><span
2223 class="cmtt-8">&#x00A0;</span><span
2224 class="cmtt-8">&#x00A0;5)</span><span
2225 class="cmtt-8">&#x00A0;codeword</span><span
2226 class="cmtt-8">&#x00A0;length</span><span
2227 class="cmtt-8">&#x00A0;for</span><span
2228 class="cmtt-8">&#x00A0;this</span><span
2229 class="cmtt-8">&#x00A0;entry</span><span
2230 class="cmtt-8">&#x00A0;is</span><span
2231 class="cmtt-8">&#x00A0;[length]+1;</span>
2232 <br class="fancyvrb" /><a
2233 id="x1-51048r9"></a><span
2234 class="cmr-6">9</span><span
2235 class="cmtt-8">&#x00A0;</span><span
2236 class="cmtt-8">&#x00A0;</span>
2237 <br class="fancyvrb" /><a
2238 id="x1-51050r10"></a><span
2239 class="cmr-6">10</span><span
2240 class="cmtt-8">&#x00A0;</span><span
2241 class="cmtt-8">&#x00A0;</span><span
2242 class="cmtt-8">&#x00A0;</span><span
2243 class="cmtt-8">&#x00A0;</span><span
2244 class="cmtt-8">&#x00A0;</span><span
2245 class="cmtt-8">&#x00A0;</span><span
2246 class="cmtt-8">&#x00A0;</span><span
2247 class="cmtt-8">&#x00A0;</span><span
2248 class="cmtt-8">&#x00A0;</span><span
2249 class="cmtt-8">&#x00A0;</span><span
2250 class="cmtt-8">&#x00A0;</span><span
2251 class="cmtt-8">&#x00A0;</span><span
2252 class="cmtt-8">&#x00A0;</span><span
2253 class="cmtt-8">&#x00A0;</span><span
2254 class="cmsy-8">}</span><span
2255 class="cmtt-8">&#x00A0;else</span><span
2256 class="cmtt-8">&#x00A0;</span><span
2257 class="cmsy-8">{</span>
2258 <br class="fancyvrb" /><a
2259 id="x1-51052r11"></a><span
2260 class="cmr-6">11</span><span
2261 class="cmtt-8">&#x00A0;</span><span
2262 class="cmtt-8">&#x00A0;</span>
2263 <br class="fancyvrb" /><a
2264 id="x1-51054r12"></a><span
2265 class="cmr-6">12</span><span
2266 class="cmtt-8">&#x00A0;</span><span
2267 class="cmtt-8">&#x00A0;</span><span
2268 class="cmtt-8">&#x00A0;</span><span
2269 class="cmtt-8">&#x00A0;</span><span
2270 class="cmtt-8">&#x00A0;</span><span
2271 class="cmtt-8">&#x00A0;</span><span
2272 class="cmtt-8">&#x00A0;</span><span
2273 class="cmtt-8">&#x00A0;</span><span
2274 class="cmtt-8">&#x00A0;</span><span
2275 class="cmtt-8">&#x00A0;</span><span
2276 class="cmtt-8">&#x00A0;</span><span
2277 class="cmtt-8">&#x00A0;</span><span
2278 class="cmtt-8">&#x00A0;</span><span
2279 class="cmtt-8">&#x00A0;</span><span
2280 class="cmtt-8">&#x00A0;</span><span
2281 class="cmtt-8">&#x00A0;6)</span><span
2282 class="cmtt-8">&#x00A0;this</span><span
2283 class="cmtt-8">&#x00A0;entry</span><span
2284 class="cmtt-8">&#x00A0;is</span><span
2285 class="cmtt-8">&#x00A0;unused.</span><span
2286 class="cmtt-8">&#x00A0;</span><span
2287 class="cmtt-8">&#x00A0;mark</span><span
2288 class="cmtt-8">&#x00A0;it</span><span
2289 class="cmtt-8">&#x00A0;as</span><span
2290 class="cmtt-8">&#x00A0;such.</span>
2291 <br class="fancyvrb" /><a
2292 id="x1-51056r13"></a><span
2293 class="cmr-6">13</span><span
2294 class="cmtt-8">&#x00A0;</span><span
2295 class="cmtt-8">&#x00A0;</span>
2296 <br class="fancyvrb" /><a
2297 id="x1-51058r14"></a><span
2298 class="cmr-6">14</span><span
2299 class="cmtt-8">&#x00A0;</span><span
2300 class="cmtt-8">&#x00A0;</span><span
2301 class="cmtt-8">&#x00A0;</span><span
2302 class="cmtt-8">&#x00A0;</span><span
2303 class="cmtt-8">&#x00A0;</span><span
2304 class="cmtt-8">&#x00A0;</span><span
2305 class="cmtt-8">&#x00A0;</span><span
2306 class="cmtt-8">&#x00A0;</span><span
2307 class="cmtt-8">&#x00A0;</span><span
2308 class="cmtt-8">&#x00A0;</span><span
2309 class="cmtt-8">&#x00A0;</span><span
2310 class="cmtt-8">&#x00A0;</span><span
2311 class="cmtt-8">&#x00A0;</span><span
2312 class="cmtt-8">&#x00A0;</span><span
2313 class="cmsy-8">}</span>
2314 <br class="fancyvrb" /><a
2315 id="x1-51060r15"></a><span
2316 class="cmr-6">15</span><span
2317 class="cmtt-8">&#x00A0;</span><span
2318 class="cmtt-8">&#x00A0;</span>
2319 <br class="fancyvrb" /><a
2320 id="x1-51062r16"></a><span
2321 class="cmr-6">16</span><span
2322 class="cmtt-8">&#x00A0;</span><span
2323 class="cmtt-8">&#x00A0;</span><span
2324 class="cmtt-8">&#x00A0;</span><span
2325 class="cmtt-8">&#x00A0;</span><span
2326 class="cmtt-8">&#x00A0;</span><span
2327 class="cmtt-8">&#x00A0;</span><span
2328 class="cmtt-8">&#x00A0;</span><span
2329 class="cmsy-8">}</span><span
2330 class="cmtt-8">&#x00A0;else</span><span
2331 class="cmtt-8">&#x00A0;the</span><span
2332 class="cmtt-8">&#x00A0;sparse</span><span
2333 class="cmtt-8">&#x00A0;flag</span><span
2334 class="cmtt-8">&#x00A0;is</span><span
2335 class="cmtt-8">&#x00A0;not</span><span
2336 class="cmtt-8">&#x00A0;set</span><span
2337 class="cmtt-8">&#x00A0;</span><span
2338 class="cmsy-8">{</span>
2339 <br class="fancyvrb" /><a
2340 id="x1-51064r17"></a><span
2341 class="cmr-6">17</span><span
2342 class="cmtt-8">&#x00A0;</span><span
2343 class="cmtt-8">&#x00A0;</span>
2344 <br class="fancyvrb" /><a
2345 id="x1-51066r18"></a><span
2346 class="cmr-6">18</span><span
2347 class="cmtt-8">&#x00A0;</span><span
2348 class="cmtt-8">&#x00A0;</span><span
2349 class="cmtt-8">&#x00A0;</span><span
2350 class="cmtt-8">&#x00A0;</span><span
2351 class="cmtt-8">&#x00A0;</span><span
2352 class="cmtt-8">&#x00A0;</span><span
2353 class="cmtt-8">&#x00A0;</span><span
2354 class="cmtt-8">&#x00A0;</span><span
2355 class="cmtt-8">&#x00A0;</span><span
2356 class="cmtt-8">&#x00A0;7)</span><span
2357 class="cmtt-8">&#x00A0;[length]</span><span
2358 class="cmtt-8">&#x00A0;=</span><span
2359 class="cmtt-8">&#x00A0;read</span><span
2360 class="cmtt-8">&#x00A0;a</span><span
2361 class="cmtt-8">&#x00A0;five</span><span
2362 class="cmtt-8">&#x00A0;bit</span><span
2363 class="cmtt-8">&#x00A0;unsigned</span><span
2364 class="cmtt-8">&#x00A0;integer;</span>
2365 <br class="fancyvrb" /><a
2366 id="x1-51068r19"></a><span
2367 class="cmr-6">19</span><span
2368 class="cmtt-8">&#x00A0;</span><span
2369 class="cmtt-8">&#x00A0;</span><span
2370 class="cmtt-8">&#x00A0;</span><span
2371 class="cmtt-8">&#x00A0;</span><span
2372 class="cmtt-8">&#x00A0;</span><span
2373 class="cmtt-8">&#x00A0;</span><span
2374 class="cmtt-8">&#x00A0;</span><span
2375 class="cmtt-8">&#x00A0;</span><span
2376 class="cmtt-8">&#x00A0;</span><span
2377 class="cmtt-8">&#x00A0;8)</span><span
2378 class="cmtt-8">&#x00A0;the</span><span
2379 class="cmtt-8">&#x00A0;codeword</span><span
2380 class="cmtt-8">&#x00A0;length</span><span
2381 class="cmtt-8">&#x00A0;for</span><span
2382 class="cmtt-8">&#x00A0;this</span><span
2383 class="cmtt-8">&#x00A0;entry</span><span
2384 class="cmtt-8">&#x00A0;is</span><span
2385 class="cmtt-8">&#x00A0;[length]+1;</span>
2386 <br class="fancyvrb" /><a
2387 id="x1-51070r20"></a><span
2388 class="cmr-6">20</span><span
2389 class="cmtt-8">&#x00A0;</span><span
2390 class="cmtt-8">&#x00A0;</span>
2391 <br class="fancyvrb" /><a
2392 id="x1-51072r21"></a><span
2393 class="cmr-6">21</span><span
2394 class="cmtt-8">&#x00A0;</span><span
2395 class="cmtt-8">&#x00A0;</span><span
2396 class="cmtt-8">&#x00A0;</span><span
2397 class="cmtt-8">&#x00A0;</span><span
2398 class="cmtt-8">&#x00A0;</span><span
2399 class="cmtt-8">&#x00A0;</span><span
2400 class="cmtt-8">&#x00A0;</span><span
2401 class="cmsy-8">}</span>
2402 <br class="fancyvrb" /><a
2403 id="x1-51074r22"></a><span
2404 class="cmr-6">22</span><span
2405 class="cmtt-8">&#x00A0;</span><span
2406 class="cmtt-8">&#x00A0;</span>
2407 </div>
2408 </li>
2409 <li class="itemize">If the <span
2410 class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
2411 ascending length order. Rather than reading a length for every codeword, the
2412 encoder reads the number of codewords per length. That is, beginning at entry
2413 zero:
2414 <!--l. 120--><p class="noindent" >
2415 <div class="fancyvrb" id="fancyvrb12">
2417 id="x1-51076r1"></a><span
2418 class="cmr-6">1</span><span
2419 class="cmtt-8">&#x00A0;</span><span
2420 class="cmtt-8">&#x00A0;</span><span
2421 class="cmtt-8">&#x00A0;</span><span
2422 class="cmtt-8">&#x00A0;1)</span><span
2423 class="cmtt-8">&#x00A0;[current_entry]</span><span
2424 class="cmtt-8">&#x00A0;=</span><span
2425 class="cmtt-8">&#x00A0;0;</span>
2426 <br class="fancyvrb" /><a
2427 id="x1-51078r2"></a><span
2428 class="cmr-6">2</span><span
2429 class="cmtt-8">&#x00A0;</span><span
2430 class="cmtt-8">&#x00A0;</span><span
2431 class="cmtt-8">&#x00A0;</span><span
2432 class="cmtt-8">&#x00A0;2)</span><span
2433 class="cmtt-8">&#x00A0;[current_length]</span><span
2434 class="cmtt-8">&#x00A0;=</span><span
2435 class="cmtt-8">&#x00A0;read</span><span
2436 class="cmtt-8">&#x00A0;a</span><span
2437 class="cmtt-8">&#x00A0;five</span><span
2438 class="cmtt-8">&#x00A0;bit</span><span
2439 class="cmtt-8">&#x00A0;unsigned</span><span
2440 class="cmtt-8">&#x00A0;integer</span><span
2441 class="cmtt-8">&#x00A0;and</span><span
2442 class="cmtt-8">&#x00A0;add</span><span
2443 class="cmtt-8">&#x00A0;1;</span>
2444 <br class="fancyvrb" /><a
2445 id="x1-51080r3"></a><span
2446 class="cmr-6">3</span><span
2447 class="cmtt-8">&#x00A0;</span><span
2448 class="cmtt-8">&#x00A0;</span><span
2449 class="cmtt-8">&#x00A0;</span><span
2450 class="cmtt-8">&#x00A0;3)</span><span
2451 class="cmtt-8">&#x00A0;[number]</span><span
2452 class="cmtt-8">&#x00A0;=</span><span
2453 class="cmtt-8">&#x00A0;read</span><span
2454 class="cmtt-8">&#x00A0;</span><a
2455 href="#x1-1170009.2.1"><span
2456 class="cmtt-8">ilog</span></a><span
2457 class="cmtt-8">([codebook_entries]</span><span
2458 class="cmtt-8">&#x00A0;-</span><span
2459 class="cmtt-8">&#x00A0;[current_entry])</span><span
2460 class="cmtt-8">&#x00A0;bits</span><span
2461 class="cmtt-8">&#x00A0;as</span><span
2462 class="cmtt-8">&#x00A0;an</span><span
2463 class="cmtt-8">&#x00A0;unsigned</span><span
2464 class="cmtt-8">&#x00A0;integer</span>
2465 <br class="fancyvrb" /><a
2466 id="x1-51082r4"></a><span
2467 class="cmr-6">4</span><span
2468 class="cmtt-8">&#x00A0;</span><span
2469 class="cmtt-8">&#x00A0;</span><span
2470 class="cmtt-8">&#x00A0;</span><span
2471 class="cmtt-8">&#x00A0;4)</span><span
2472 class="cmtt-8">&#x00A0;set</span><span
2473 class="cmtt-8">&#x00A0;the</span><span
2474 class="cmtt-8">&#x00A0;entries</span><span
2475 class="cmtt-8">&#x00A0;[current_entry]</span><span
2476 class="cmtt-8">&#x00A0;through</span><span
2477 class="cmtt-8">&#x00A0;[current_entry]+[number]-1,</span><span
2478 class="cmtt-8">&#x00A0;inclusive,</span>
2479 <br class="fancyvrb" /><a
2480 id="x1-51084r5"></a><span
2481 class="cmr-6">5</span><span
2482 class="cmtt-8">&#x00A0;</span><span
2483 class="cmtt-8">&#x00A0;</span><span
2484 class="cmtt-8">&#x00A0;</span><span
2485 class="cmtt-8">&#x00A0;</span><span
2486 class="cmtt-8">&#x00A0;</span><span
2487 class="cmtt-8">&#x00A0;of</span><span
2488 class="cmtt-8">&#x00A0;the</span><span
2489 class="cmtt-8">&#x00A0;[codebook_codeword_lengths]</span><span
2490 class="cmtt-8">&#x00A0;array</span><span
2491 class="cmtt-8">&#x00A0;to</span><span
2492 class="cmtt-8">&#x00A0;[current_length]</span>
2493 <br class="fancyvrb" /><a
2494 id="x1-51086r6"></a><span
2495 class="cmr-6">6</span><span
2496 class="cmtt-8">&#x00A0;</span><span
2497 class="cmtt-8">&#x00A0;</span><span
2498 class="cmtt-8">&#x00A0;</span><span
2499 class="cmtt-8">&#x00A0;5)</span><span
2500 class="cmtt-8">&#x00A0;set</span><span
2501 class="cmtt-8">&#x00A0;[current_entry]</span><span
2502 class="cmtt-8">&#x00A0;to</span><span
2503 class="cmtt-8">&#x00A0;[number]</span><span
2504 class="cmtt-8">&#x00A0;+</span><span
2505 class="cmtt-8">&#x00A0;[current_entry]</span>
2506 <br class="fancyvrb" /><a
2507 id="x1-51088r7"></a><span
2508 class="cmr-6">7</span><span
2509 class="cmtt-8">&#x00A0;</span><span
2510 class="cmtt-8">&#x00A0;</span><span
2511 class="cmtt-8">&#x00A0;</span><span
2512 class="cmtt-8">&#x00A0;6)</span><span
2513 class="cmtt-8">&#x00A0;increment</span><span
2514 class="cmtt-8">&#x00A0;[current_length]</span><span
2515 class="cmtt-8">&#x00A0;by</span><span
2516 class="cmtt-8">&#x00A0;1</span>
2517 <br class="fancyvrb" /><a
2518 id="x1-51090r8"></a><span
2519 class="cmr-6">8</span><span
2520 class="cmtt-8">&#x00A0;</span><span
2521 class="cmtt-8">&#x00A0;</span><span
2522 class="cmtt-8">&#x00A0;</span><span
2523 class="cmtt-8">&#x00A0;7)</span><span
2524 class="cmtt-8">&#x00A0;if</span><span
2525 class="cmtt-8">&#x00A0;[current_entry]</span><span
2526 class="cmtt-8">&#x00A0;is</span><span
2527 class="cmtt-8">&#x00A0;greater</span><span
2528 class="cmtt-8">&#x00A0;than</span><span
2529 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
2530 class="cmtt-8">&#x00A0;ERROR</span><span
2531 class="cmtt-8">&#x00A0;CONDITION;</span>
2532 <br class="fancyvrb" /><a
2533 id="x1-51092r9"></a><span
2534 class="cmr-6">9</span><span
2535 class="cmtt-8">&#x00A0;</span><span
2536 class="cmtt-8">&#x00A0;</span><span
2537 class="cmtt-8">&#x00A0;</span><span
2538 class="cmtt-8">&#x00A0;</span><span
2539 class="cmtt-8">&#x00A0;</span><span
2540 class="cmtt-8">&#x00A0;the</span><span
2541 class="cmtt-8">&#x00A0;decoder</span><span
2542 class="cmtt-8">&#x00A0;will</span><span
2543 class="cmtt-8">&#x00A0;not</span><span
2544 class="cmtt-8">&#x00A0;be</span><span
2545 class="cmtt-8">&#x00A0;able</span><span
2546 class="cmtt-8">&#x00A0;to</span><span
2547 class="cmtt-8">&#x00A0;read</span><span
2548 class="cmtt-8">&#x00A0;this</span><span
2549 class="cmtt-8">&#x00A0;stream.</span>
2550 <br class="fancyvrb" /><a
2551 id="x1-51094r10"></a><span
2552 class="cmr-6">10</span><span
2553 class="cmtt-8">&#x00A0;</span><span
2554 class="cmtt-8">&#x00A0;</span><span
2555 class="cmtt-8">&#x00A0;</span><span
2556 class="cmtt-8">&#x00A0;8)</span><span
2557 class="cmtt-8">&#x00A0;if</span><span
2558 class="cmtt-8">&#x00A0;[current_entry]</span><span
2559 class="cmtt-8">&#x00A0;is</span><span
2560 class="cmtt-8">&#x00A0;less</span><span
2561 class="cmtt-8">&#x00A0;than</span><span
2562 class="cmtt-8">&#x00A0;[codebook_entries],</span><span
2563 class="cmtt-8">&#x00A0;repeat</span><span
2564 class="cmtt-8">&#x00A0;process</span><span
2565 class="cmtt-8">&#x00A0;starting</span><span
2566 class="cmtt-8">&#x00A0;at</span><span
2567 class="cmtt-8">&#x00A0;3)</span>
2568 <br class="fancyvrb" /><a
2569 id="x1-51096r11"></a><span
2570 class="cmr-6">11</span><span
2571 class="cmtt-8">&#x00A0;</span><span
2572 class="cmtt-8">&#x00A0;</span><span
2573 class="cmtt-8">&#x00A0;</span><span
2574 class="cmtt-8">&#x00A0;9)</span><span
2575 class="cmtt-8">&#x00A0;done.</span>
2579 </div>
2580 </li></ul>
2581 <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
2582 I supports three lookup types:
2583 <ol class="enumerate1" >
2584 <li
2585 class="enumerate" id="x1-51098x1">No lookup
2586 </li>
2587 <li
2588 class="enumerate" id="x1-51100x2">Implicitly populated value mapping (lattice VQ)
2589 </li>
2590 <li
2591 class="enumerate" id="x1-51102x3">Explicitly populated value mapping (tessellated or &#8217;foam&#8217; VQ)</li></ol>
2592 <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
2593 <div class="fancyvrb" id="fancyvrb13">
2595 id="x1-51104r1"></a><span
2596 class="cmr-6">1</span><span
2597 class="cmtt-8">&#x00A0;</span><span
2598 class="cmtt-8">&#x00A0;</span><span
2599 class="cmtt-8">&#x00A0;</span><span
2600 class="cmtt-8">&#x00A0;1)</span><span
2601 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
2602 class="cmtt-8">&#x00A0;=</span><span
2603 class="cmtt-8">&#x00A0;read</span><span
2604 class="cmtt-8">&#x00A0;four</span><span
2605 class="cmtt-8">&#x00A0;bits</span><span
2606 class="cmtt-8">&#x00A0;as</span><span
2607 class="cmtt-8">&#x00A0;an</span><span
2608 class="cmtt-8">&#x00A0;unsigned</span><span
2609 class="cmtt-8">&#x00A0;integer</span>
2610 </div>
2611 <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span
2612 class="cmtt-12">[codebook_lookup_type]</span>:
2613 <ul class="itemize1">
2614 <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
2615 </li>
2616 <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
2617 be read. Lookup type one reads a list of values that are permuted in a set pattern to
2618 build a list of vectors, each vector of order <span
2619 class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
2620 type two builds the same vector list, but reads each scalar for each vector explicitly,
2621 rather than building vectors from a smaller list of possible scalar values. Lookup
2622 decode proceeds as follows:
2623 <!--l. 168--><p class="noindent" >
2624 <div class="fancyvrb" id="fancyvrb14">
2626 id="x1-51106r1"></a><span
2627 class="cmr-6">1</span><span
2628 class="cmtt-8">&#x00A0;</span><span
2629 class="cmtt-8">&#x00A0;</span><span
2630 class="cmtt-8">&#x00A0;</span><span
2631 class="cmtt-8">&#x00A0;1)</span><span
2632 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
2633 class="cmtt-8">&#x00A0;=</span><span
2634 class="cmtt-8">&#x00A0;</span><a
2635 href="#x1-1180009.2.2"><span
2636 class="cmtt-8">float32_unpack</span></a><span
2637 class="cmtt-8">(</span><span
2638 class="cmtt-8">&#x00A0;read</span><span
2639 class="cmtt-8">&#x00A0;32</span><span
2640 class="cmtt-8">&#x00A0;bits</span><span
2641 class="cmtt-8">&#x00A0;as</span><span
2642 class="cmtt-8">&#x00A0;an</span><span
2643 class="cmtt-8">&#x00A0;unsigned</span><span
2644 class="cmtt-8">&#x00A0;integer)</span>
2645 <br class="fancyvrb" /><a
2646 id="x1-51108r2"></a><span
2647 class="cmr-6">2</span><span
2648 class="cmtt-8">&#x00A0;</span><span
2649 class="cmtt-8">&#x00A0;</span><span
2650 class="cmtt-8">&#x00A0;</span><span
2651 class="cmtt-8">&#x00A0;2)</span><span
2652 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
2653 class="cmtt-8">&#x00A0;=</span><span
2654 class="cmtt-8">&#x00A0;</span><a
2655 href="#x1-1180009.2.2"><span
2656 class="cmtt-8">float32_unpack</span></a><span
2657 class="cmtt-8">(</span><span
2658 class="cmtt-8">&#x00A0;read</span><span
2659 class="cmtt-8">&#x00A0;32</span><span
2660 class="cmtt-8">&#x00A0;bits</span><span
2661 class="cmtt-8">&#x00A0;as</span><span
2662 class="cmtt-8">&#x00A0;an</span><span
2663 class="cmtt-8">&#x00A0;unsigned</span><span
2664 class="cmtt-8">&#x00A0;integer)</span>
2665 <br class="fancyvrb" /><a
2666 id="x1-51110r3"></a><span
2667 class="cmr-6">3</span><span
2668 class="cmtt-8">&#x00A0;</span><span
2669 class="cmtt-8">&#x00A0;</span><span
2670 class="cmtt-8">&#x00A0;</span><span
2671 class="cmtt-8">&#x00A0;3)</span><span
2672 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
2673 class="cmtt-8">&#x00A0;=</span><span
2674 class="cmtt-8">&#x00A0;read</span><span
2675 class="cmtt-8">&#x00A0;4</span><span
2676 class="cmtt-8">&#x00A0;bits</span><span
2677 class="cmtt-8">&#x00A0;as</span><span
2678 class="cmtt-8">&#x00A0;an</span><span
2679 class="cmtt-8">&#x00A0;unsigned</span><span
2680 class="cmtt-8">&#x00A0;integer</span><span
2681 class="cmtt-8">&#x00A0;and</span><span
2682 class="cmtt-8">&#x00A0;add</span><span
2683 class="cmtt-8">&#x00A0;1</span>
2684 <br class="fancyvrb" /><a
2685 id="x1-51112r4"></a><span
2686 class="cmr-6">4</span><span
2687 class="cmtt-8">&#x00A0;</span><span
2688 class="cmtt-8">&#x00A0;</span><span
2689 class="cmtt-8">&#x00A0;</span><span
2690 class="cmtt-8">&#x00A0;4)</span><span
2691 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
2692 class="cmtt-8">&#x00A0;=</span><span
2693 class="cmtt-8">&#x00A0;read</span><span
2694 class="cmtt-8">&#x00A0;1</span><span
2695 class="cmtt-8">&#x00A0;bit</span><span
2696 class="cmtt-8">&#x00A0;as</span><span
2697 class="cmtt-8">&#x00A0;a</span><span
2698 class="cmtt-8">&#x00A0;boolean</span><span
2699 class="cmtt-8">&#x00A0;flag</span>
2700 <br class="fancyvrb" /><a
2701 id="x1-51114r5"></a><span
2702 class="cmr-6">5</span><span
2703 class="cmtt-8">&#x00A0;</span><span
2704 class="cmtt-8">&#x00A0;</span>
2705 <br class="fancyvrb" /><a
2706 id="x1-51116r6"></a><span
2707 class="cmr-6">6</span><span
2708 class="cmtt-8">&#x00A0;</span><span
2709 class="cmtt-8">&#x00A0;</span><span
2710 class="cmtt-8">&#x00A0;</span><span
2711 class="cmtt-8">&#x00A0;if</span><span
2712 class="cmtt-8">&#x00A0;(</span><span
2713 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
2714 class="cmtt-8">&#x00A0;is</span><span
2715 class="cmtt-8">&#x00A0;1</span><span
2716 class="cmtt-8">&#x00A0;)</span><span
2717 class="cmtt-8">&#x00A0;</span><span
2718 class="cmsy-8">{</span>
2719 <br class="fancyvrb" /><a
2720 id="x1-51118r7"></a><span
2721 class="cmr-6">7</span><span
2722 class="cmtt-8">&#x00A0;</span><span
2723 class="cmtt-8">&#x00A0;</span>
2724 <br class="fancyvrb" /><a
2725 id="x1-51120r8"></a><span
2726 class="cmr-6">8</span><span
2727 class="cmtt-8">&#x00A0;</span><span
2728 class="cmtt-8">&#x00A0;</span><span
2729 class="cmtt-8">&#x00A0;</span><span
2730 class="cmtt-8">&#x00A0;</span><span
2731 class="cmtt-8">&#x00A0;</span><span
2732 class="cmtt-8">&#x00A0;</span><span
2733 class="cmtt-8">&#x00A0;5)</span><span
2734 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
2735 class="cmtt-8">&#x00A0;=</span><span
2736 class="cmtt-8">&#x00A0;</span><a
2737 href="#x1-1190009.2.3"><span
2738 class="cmtt-8">lookup1_values</span></a><span
2739 class="cmtt-8">([codebook_entries],</span><span
2740 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
2741 class="cmtt-8">&#x00A0;)</span>
2742 <br class="fancyvrb" /><a
2743 id="x1-51122r9"></a><span
2744 class="cmr-6">9</span><span
2745 class="cmtt-8">&#x00A0;</span><span
2746 class="cmtt-8">&#x00A0;</span>
2747 <br class="fancyvrb" /><a
2748 id="x1-51124r10"></a><span
2749 class="cmr-6">10</span><span
2750 class="cmtt-8">&#x00A0;</span><span
2751 class="cmtt-8">&#x00A0;</span><span
2752 class="cmtt-8">&#x00A0;</span><span
2753 class="cmtt-8">&#x00A0;</span><span
2754 class="cmsy-8">}</span><span
2755 class="cmtt-8">&#x00A0;else</span><span
2756 class="cmtt-8">&#x00A0;</span><span
2757 class="cmsy-8">{</span>
2758 <br class="fancyvrb" /><a
2759 id="x1-51126r11"></a><span
2760 class="cmr-6">11</span><span
2761 class="cmtt-8">&#x00A0;</span><span
2762 class="cmtt-8">&#x00A0;</span>
2763 <br class="fancyvrb" /><a
2764 id="x1-51128r12"></a><span
2765 class="cmr-6">12</span><span
2766 class="cmtt-8">&#x00A0;</span><span
2767 class="cmtt-8">&#x00A0;</span><span
2768 class="cmtt-8">&#x00A0;</span><span
2769 class="cmtt-8">&#x00A0;</span><span
2770 class="cmtt-8">&#x00A0;</span><span
2771 class="cmtt-8">&#x00A0;</span><span
2772 class="cmtt-8">&#x00A0;6)</span><span
2773 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
2774 class="cmtt-8">&#x00A0;=</span><span
2775 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
2776 class="cmtt-8">&#x00A0;*</span><span
2777 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
2778 <br class="fancyvrb" /><a
2779 id="x1-51130r13"></a><span
2780 class="cmr-6">13</span><span
2781 class="cmtt-8">&#x00A0;</span><span
2782 class="cmtt-8">&#x00A0;</span>
2783 <br class="fancyvrb" /><a
2784 id="x1-51132r14"></a><span
2785 class="cmr-6">14</span><span
2786 class="cmtt-8">&#x00A0;</span><span
2787 class="cmtt-8">&#x00A0;</span><span
2788 class="cmtt-8">&#x00A0;</span><span
2789 class="cmtt-8">&#x00A0;</span><span
2790 class="cmsy-8">}</span>
2791 <br class="fancyvrb" /><a
2792 id="x1-51134r15"></a><span
2793 class="cmr-6">15</span><span
2794 class="cmtt-8">&#x00A0;</span><span
2795 class="cmtt-8">&#x00A0;</span>
2796 <br class="fancyvrb" /><a
2797 id="x1-51136r16"></a><span
2798 class="cmr-6">16</span><span
2799 class="cmtt-8">&#x00A0;</span><span
2800 class="cmtt-8">&#x00A0;</span><span
2801 class="cmtt-8">&#x00A0;</span><span
2802 class="cmtt-8">&#x00A0;7)</span><span
2803 class="cmtt-8">&#x00A0;read</span><span
2804 class="cmtt-8">&#x00A0;a</span><span
2805 class="cmtt-8">&#x00A0;total</span><span
2806 class="cmtt-8">&#x00A0;of</span><span
2807 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
2808 class="cmtt-8">&#x00A0;unsigned</span><span
2809 class="cmtt-8">&#x00A0;integers</span><span
2810 class="cmtt-8">&#x00A0;of</span><span
2811 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
2812 class="cmtt-8">&#x00A0;each;</span>
2816 <br class="fancyvrb" /><a
2817 id="x1-51138r17"></a><span
2818 class="cmr-6">17</span><span
2819 class="cmtt-8">&#x00A0;</span><span
2820 class="cmtt-8">&#x00A0;</span><span
2821 class="cmtt-8">&#x00A0;</span><span
2822 class="cmtt-8">&#x00A0;</span><span
2823 class="cmtt-8">&#x00A0;</span><span
2824 class="cmtt-8">&#x00A0;</span><span
2825 class="cmtt-8">&#x00A0;store</span><span
2826 class="cmtt-8">&#x00A0;these</span><span
2827 class="cmtt-8">&#x00A0;in</span><span
2828 class="cmtt-8">&#x00A0;order</span><span
2829 class="cmtt-8">&#x00A0;in</span><span
2830 class="cmtt-8">&#x00A0;the</span><span
2831 class="cmtt-8">&#x00A0;array</span><span
2832 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span>
2833 </div>
2834 </li>
2835 <li class="itemize">A <span
2836 class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
2837 not decodable by the specification in this document.
2838 </li></ul>
2839 <!--l. 195--><p class="noindent" >An &#8217;end of packet&#8217; during any read operation in the above steps is considered an error condition
2840 rendering the stream undecodable.
2841 <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a
2842 id="x1-520003.2.1"></a><span
2843 class="cmbx-12">Huffman decision tree representation</span></span>
2844 The <span
2845 class="cmtt-12">[codebook_codeword_lengths] </span>array and <span
2846 class="cmtt-12">[codebook_entries] </span>value uniquely define the
2847 Huffman decision tree used for entropy decoding.
2848 <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
2849 codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
2850 possible. Assume the following codeword length list:
2851 <!--l. 209--><p class="noindent" >
2852 <div class="fancyvrb" id="fancyvrb15">
2854 id="x1-52002r1"></a><span
2855 class="cmr-6">1</span><span
2856 class="cmtt-8">&#x00A0;</span><span
2857 class="cmtt-8">&#x00A0;entry</span><span
2858 class="cmtt-8">&#x00A0;0:</span><span
2859 class="cmtt-8">&#x00A0;length</span><span
2860 class="cmtt-8">&#x00A0;2</span>
2861 <br class="fancyvrb" /><a
2862 id="x1-52004r2"></a><span
2863 class="cmr-6">2</span><span
2864 class="cmtt-8">&#x00A0;</span><span
2865 class="cmtt-8">&#x00A0;entry</span><span
2866 class="cmtt-8">&#x00A0;1:</span><span
2867 class="cmtt-8">&#x00A0;length</span><span
2868 class="cmtt-8">&#x00A0;4</span>
2869 <br class="fancyvrb" /><a
2870 id="x1-52006r3"></a><span
2871 class="cmr-6">3</span><span
2872 class="cmtt-8">&#x00A0;</span><span
2873 class="cmtt-8">&#x00A0;entry</span><span
2874 class="cmtt-8">&#x00A0;2:</span><span
2875 class="cmtt-8">&#x00A0;length</span><span
2876 class="cmtt-8">&#x00A0;4</span>
2877 <br class="fancyvrb" /><a
2878 id="x1-52008r4"></a><span
2879 class="cmr-6">4</span><span
2880 class="cmtt-8">&#x00A0;</span><span
2881 class="cmtt-8">&#x00A0;entry</span><span
2882 class="cmtt-8">&#x00A0;3:</span><span
2883 class="cmtt-8">&#x00A0;length</span><span
2884 class="cmtt-8">&#x00A0;4</span>
2885 <br class="fancyvrb" /><a
2886 id="x1-52010r5"></a><span
2887 class="cmr-6">5</span><span
2888 class="cmtt-8">&#x00A0;</span><span
2889 class="cmtt-8">&#x00A0;entry</span><span
2890 class="cmtt-8">&#x00A0;4:</span><span
2891 class="cmtt-8">&#x00A0;length</span><span
2892 class="cmtt-8">&#x00A0;4</span>
2893 <br class="fancyvrb" /><a
2894 id="x1-52012r6"></a><span
2895 class="cmr-6">6</span><span
2896 class="cmtt-8">&#x00A0;</span><span
2897 class="cmtt-8">&#x00A0;entry</span><span
2898 class="cmtt-8">&#x00A0;5:</span><span
2899 class="cmtt-8">&#x00A0;length</span><span
2900 class="cmtt-8">&#x00A0;2</span>
2901 <br class="fancyvrb" /><a
2902 id="x1-52014r7"></a><span
2903 class="cmr-6">7</span><span
2904 class="cmtt-8">&#x00A0;</span><span
2905 class="cmtt-8">&#x00A0;entry</span><span
2906 class="cmtt-8">&#x00A0;6:</span><span
2907 class="cmtt-8">&#x00A0;length</span><span
2908 class="cmtt-8">&#x00A0;3</span>
2909 <br class="fancyvrb" /><a
2910 id="x1-52016r8"></a><span
2911 class="cmr-6">8</span><span
2912 class="cmtt-8">&#x00A0;</span><span
2913 class="cmtt-8">&#x00A0;entry</span><span
2914 class="cmtt-8">&#x00A0;7:</span><span
2915 class="cmtt-8">&#x00A0;length</span><span
2916 class="cmtt-8">&#x00A0;3</span>
2917 </div>
2918 <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
2919 in the following codeword list:
2920 <!--l. 223--><p class="noindent" >
2921 <div class="fancyvrb" id="fancyvrb16">
2923 id="x1-52018r1"></a><span
2924 class="cmr-6">1</span><span
2925 class="cmtt-8">&#x00A0;</span><span
2926 class="cmtt-8">&#x00A0;entry</span><span
2927 class="cmtt-8">&#x00A0;0:</span><span
2928 class="cmtt-8">&#x00A0;length</span><span
2929 class="cmtt-8">&#x00A0;2</span><span
2930 class="cmtt-8">&#x00A0;codeword</span><span
2931 class="cmtt-8">&#x00A0;00</span>
2932 <br class="fancyvrb" /><a
2933 id="x1-52020r2"></a><span
2934 class="cmr-6">2</span><span
2935 class="cmtt-8">&#x00A0;</span><span
2936 class="cmtt-8">&#x00A0;entry</span><span
2937 class="cmtt-8">&#x00A0;1:</span><span
2938 class="cmtt-8">&#x00A0;length</span><span
2939 class="cmtt-8">&#x00A0;4</span><span
2940 class="cmtt-8">&#x00A0;codeword</span><span
2941 class="cmtt-8">&#x00A0;0100</span>
2942 <br class="fancyvrb" /><a
2943 id="x1-52022r3"></a><span
2944 class="cmr-6">3</span><span
2945 class="cmtt-8">&#x00A0;</span><span
2946 class="cmtt-8">&#x00A0;entry</span><span
2947 class="cmtt-8">&#x00A0;2:</span><span
2948 class="cmtt-8">&#x00A0;length</span><span
2949 class="cmtt-8">&#x00A0;4</span><span
2950 class="cmtt-8">&#x00A0;codeword</span><span
2951 class="cmtt-8">&#x00A0;0101</span>
2952 <br class="fancyvrb" /><a
2953 id="x1-52024r4"></a><span
2954 class="cmr-6">4</span><span
2955 class="cmtt-8">&#x00A0;</span><span
2956 class="cmtt-8">&#x00A0;entry</span><span
2957 class="cmtt-8">&#x00A0;3:</span><span
2958 class="cmtt-8">&#x00A0;length</span><span
2959 class="cmtt-8">&#x00A0;4</span><span
2960 class="cmtt-8">&#x00A0;codeword</span><span
2961 class="cmtt-8">&#x00A0;0110</span>
2962 <br class="fancyvrb" /><a
2963 id="x1-52026r5"></a><span
2964 class="cmr-6">5</span><span
2965 class="cmtt-8">&#x00A0;</span><span
2966 class="cmtt-8">&#x00A0;entry</span><span
2967 class="cmtt-8">&#x00A0;4:</span><span
2968 class="cmtt-8">&#x00A0;length</span><span
2969 class="cmtt-8">&#x00A0;4</span><span
2970 class="cmtt-8">&#x00A0;codeword</span><span
2971 class="cmtt-8">&#x00A0;0111</span>
2972 <br class="fancyvrb" /><a
2973 id="x1-52028r6"></a><span
2974 class="cmr-6">6</span><span
2975 class="cmtt-8">&#x00A0;</span><span
2976 class="cmtt-8">&#x00A0;entry</span><span
2977 class="cmtt-8">&#x00A0;5:</span><span
2978 class="cmtt-8">&#x00A0;length</span><span
2979 class="cmtt-8">&#x00A0;2</span><span
2980 class="cmtt-8">&#x00A0;codeword</span><span
2981 class="cmtt-8">&#x00A0;10</span>
2982 <br class="fancyvrb" /><a
2983 id="x1-52030r7"></a><span
2984 class="cmr-6">7</span><span
2985 class="cmtt-8">&#x00A0;</span><span
2986 class="cmtt-8">&#x00A0;entry</span><span
2987 class="cmtt-8">&#x00A0;6:</span><span
2988 class="cmtt-8">&#x00A0;length</span><span
2989 class="cmtt-8">&#x00A0;3</span><span
2990 class="cmtt-8">&#x00A0;codeword</span><span
2991 class="cmtt-8">&#x00A0;110</span>
2992 <br class="fancyvrb" /><a
2993 id="x1-52032r8"></a><span
2994 class="cmr-6">8</span><span
2995 class="cmtt-8">&#x00A0;</span><span
2996 class="cmtt-8">&#x00A0;entry</span><span
2997 class="cmtt-8">&#x00A0;7:</span><span
2998 class="cmtt-8">&#x00A0;length</span><span
2999 class="cmtt-8">&#x00A0;3</span><span
3000 class="cmtt-8">&#x00A0;codeword</span><span
3001 class="cmtt-8">&#x00A0;111</span>
3002 </div>
3006 <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a
3007 id="x1-530003.2.1"></a><span
3008 class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
3009 be read and used bit by bit from left to right, thus the codeword &#8217;001&#8217; is the bit string &#8217;zero, zero,
3010 one&#8217;. When determining &#8217;lowest possible value&#8217; in the assignment definition above, the leftmost
3011 bit is the MSb.
3012 <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
3013 numbers equivalent to the leaves numbered left-to-right:
3014 <div class="center"
3016 <!--l. 247--><p class="noindent" >
3018 <!--l. 248--><p class="noindent" ><img
3019 src="hufftree.png" alt="PIC"
3021 <br /> <table class="caption"
3022 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;4: </td><td
3023 class="content">huffman tree illustration</td></tr></table><!--tex4ht:label?: x1-530014 -->
3024 </div>
3025 <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
3026 possible position.
3027 <!--l. 256--><p class="noindent" >Note that it&#8217;s possible to underspecify or overspecify a Huffman tree via the length list.
3028 In the above example, if codeword seven were eliminated, it&#8217;s clear that the tree is
3029 unfinished:
3030 <div class="center"
3032 <!--l. 260--><p class="noindent" >
3034 <!--l. 261--><p class="noindent" ><img
3035 src="hufftree-under.png" alt="PIC"
3037 <br /> <table class="caption"
3038 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;5: </td><td
3039 class="content">underspecified huffman tree illustration</td></tr></table><!--tex4ht:label?: x1-530025 -->
3040 </div>
3041 <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it&#8217;s clear that the tree is fully populated and a ninth
3042 codeword is impossible. Both underspecified and overspecified trees are an error condition
3043 rendering the stream undecodable. Take special care that a codebook with a single used
3044 entry is handled properly; it consists of a single codework of zero bits and &#8217;reading&#8217;
3045 a value out of such a codebook always returns the single used value and sinks zero
3046 bits.
3047 <!--l. 274--><p class="noindent" >Codebook entries marked &#8217;unused&#8217; are simply skipped in the assigning process. They have no
3048 codeword and do not appear in the decision tree, thus it&#8217;s impossible for any bit pattern read
3049 from the stream to decode to that entry number.
3053 <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a
3054 id="x1-540003.2.1"></a><span
3055 class="cmbx-12">VQ lookup table vector representation</span></span>
3056 Unpacking the VQ lookup table vectors relies on the following values:
3057 <div class="fancyvrb" id="fancyvrb17">
3059 id="x1-54002r1"></a><span
3060 class="cmr-6">1</span><span
3061 class="cmtt-8">&#x00A0;</span><span
3062 class="cmtt-8">&#x00A0;the</span><span
3063 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
3064 class="cmtt-8">&#x00A0;array</span>
3065 <br class="fancyvrb" /><a
3066 id="x1-54004r2"></a><span
3067 class="cmr-6">2</span><span
3068 class="cmtt-8">&#x00A0;</span><span
3069 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span>
3070 <br class="fancyvrb" /><a
3071 id="x1-54006r3"></a><span
3072 class="cmr-6">3</span><span
3073 class="cmtt-8">&#x00A0;</span><span
3074 class="cmtt-8">&#x00A0;[codebook_delta_value]</span>
3075 <br class="fancyvrb" /><a
3076 id="x1-54008r4"></a><span
3077 class="cmr-6">4</span><span
3078 class="cmtt-8">&#x00A0;</span><span
3079 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span>
3080 <br class="fancyvrb" /><a
3081 id="x1-54010r5"></a><span
3082 class="cmr-6">5</span><span
3083 class="cmtt-8">&#x00A0;</span><span
3084 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span>
3085 <br class="fancyvrb" /><a
3086 id="x1-54012r6"></a><span
3087 class="cmr-6">6</span><span
3088 class="cmtt-8">&#x00A0;</span><span
3089 class="cmtt-8">&#x00A0;[codebook_entries]</span>
3090 <br class="fancyvrb" /><a
3091 id="x1-54014r7"></a><span
3092 class="cmr-6">7</span><span
3093 class="cmtt-8">&#x00A0;</span><span
3094 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
3095 <br class="fancyvrb" /><a
3096 id="x1-54016r8"></a><span
3097 class="cmr-6">8</span><span
3098 class="cmtt-8">&#x00A0;</span><span
3099 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
3100 </div>
3101 <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
3102 <span
3103 class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
3104 during audio packet decode in a VQ context.
3105 <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a
3106 id="x1-550003.2.1"></a><span
3107 class="cmbx-12">Vector value decode: Lookup type 1</span></span>
3108 Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
3109 scalar values. Calculate (unpack) the final values of a codebook entry vector from
3110 the entries in <span
3111 class="cmtt-12">[codebook_multiplicands] </span>as follows (<span
3112 class="cmtt-12">[value_vector] </span>is the output
3113 vector representing the vector of values for entry number <span
3114 class="cmtt-12">[lookup_offset] </span>in this
3115 codebook):
3116 <!--l. 311--><p class="noindent" >
3117 <div class="fancyvrb" id="fancyvrb18">
3119 id="x1-55002r1"></a><span
3120 class="cmr-6">1</span><span
3121 class="cmtt-8">&#x00A0;</span><span
3122 class="cmtt-8">&#x00A0;</span><span
3123 class="cmtt-8">&#x00A0;</span><span
3124 class="cmtt-8">&#x00A0;1)</span><span
3125 class="cmtt-8">&#x00A0;[last]</span><span
3126 class="cmtt-8">&#x00A0;=</span><span
3127 class="cmtt-8">&#x00A0;0;</span>
3128 <br class="fancyvrb" /><a
3129 id="x1-55004r2"></a><span
3130 class="cmr-6">2</span><span
3131 class="cmtt-8">&#x00A0;</span><span
3132 class="cmtt-8">&#x00A0;</span><span
3133 class="cmtt-8">&#x00A0;</span><span
3134 class="cmtt-8">&#x00A0;2)</span><span
3135 class="cmtt-8">&#x00A0;[index_divisor]</span><span
3136 class="cmtt-8">&#x00A0;=</span><span
3137 class="cmtt-8">&#x00A0;1;</span>
3138 <br class="fancyvrb" /><a
3139 id="x1-55006r3"></a><span
3140 class="cmr-6">3</span><span
3141 class="cmtt-8">&#x00A0;</span><span
3142 class="cmtt-8">&#x00A0;</span><span
3143 class="cmtt-8">&#x00A0;</span><span
3144 class="cmtt-8">&#x00A0;3)</span><span
3145 class="cmtt-8">&#x00A0;iterate</span><span
3146 class="cmtt-8">&#x00A0;[i]</span><span
3147 class="cmtt-8">&#x00A0;over</span><span
3148 class="cmtt-8">&#x00A0;the</span><span
3149 class="cmtt-8">&#x00A0;range</span><span
3150 class="cmtt-8">&#x00A0;0</span><span
3151 class="cmtt-8">&#x00A0;...</span><span
3152 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
3153 class="cmtt-8">&#x00A0;(once</span><span
3154 class="cmtt-8">&#x00A0;for</span><span
3155 class="cmtt-8">&#x00A0;each</span><span
3156 class="cmtt-8">&#x00A0;scalar</span><span
3157 class="cmtt-8">&#x00A0;value</span><span
3158 class="cmtt-8">&#x00A0;in</span><span
3159 class="cmtt-8">&#x00A0;the</span><span
3160 class="cmtt-8">&#x00A0;value</span><span
3161 class="cmtt-8">&#x00A0;vector)</span><span
3162 class="cmtt-8">&#x00A0;</span><span
3163 class="cmsy-8">{</span>
3164 <br class="fancyvrb" /><a
3165 id="x1-55008r4"></a><span
3166 class="cmr-6">4</span><span
3167 class="cmtt-8">&#x00A0;</span><span
3168 class="cmtt-8">&#x00A0;</span>
3169 <br class="fancyvrb" /><a
3170 id="x1-55010r5"></a><span
3171 class="cmr-6">5</span><span
3172 class="cmtt-8">&#x00A0;</span><span
3173 class="cmtt-8">&#x00A0;</span><span
3174 class="cmtt-8">&#x00A0;</span><span
3175 class="cmtt-8">&#x00A0;</span><span
3176 class="cmtt-8">&#x00A0;</span><span
3177 class="cmtt-8">&#x00A0;</span><span
3178 class="cmtt-8">&#x00A0;</span><span
3179 class="cmtt-8">&#x00A0;</span><span
3180 class="cmtt-8">&#x00A0;4)</span><span
3181 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
3182 class="cmtt-8">&#x00A0;=</span><span
3183 class="cmtt-8">&#x00A0;(</span><span
3184 class="cmtt-8">&#x00A0;[lookup_offset]</span><span
3185 class="cmtt-8">&#x00A0;divided</span><span
3186 class="cmtt-8">&#x00A0;by</span><span
3187 class="cmtt-8">&#x00A0;[index_divisor]</span><span
3188 class="cmtt-8">&#x00A0;using</span><span
3189 class="cmtt-8">&#x00A0;integer</span>
3190 <br class="fancyvrb" /><a
3191 id="x1-55012r6"></a><span
3192 class="cmr-6">6</span><span
3193 class="cmtt-8">&#x00A0;</span><span
3194 class="cmtt-8">&#x00A0;</span><span
3195 class="cmtt-8">&#x00A0;</span><span
3196 class="cmtt-8">&#x00A0;</span><span
3197 class="cmtt-8">&#x00A0;</span><span
3198 class="cmtt-8">&#x00A0;</span><span
3199 class="cmtt-8">&#x00A0;</span><span
3200 class="cmtt-8">&#x00A0;</span><span
3201 class="cmtt-8">&#x00A0;</span><span
3202 class="cmtt-8">&#x00A0;</span><span
3203 class="cmtt-8">&#x00A0;</span><span
3204 class="cmtt-8">&#x00A0;division</span><span
3205 class="cmtt-8">&#x00A0;)</span><span
3206 class="cmtt-8">&#x00A0;integer</span><span
3207 class="cmtt-8">&#x00A0;modulo</span><span
3208 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
3209 <br class="fancyvrb" /><a
3210 id="x1-55014r7"></a><span
3211 class="cmr-6">7</span><span
3212 class="cmtt-8">&#x00A0;</span><span
3213 class="cmtt-8">&#x00A0;</span>
3214 <br class="fancyvrb" /><a
3215 id="x1-55016r8"></a><span
3216 class="cmr-6">8</span><span
3217 class="cmtt-8">&#x00A0;</span><span
3218 class="cmtt-8">&#x00A0;</span><span
3219 class="cmtt-8">&#x00A0;</span><span
3220 class="cmtt-8">&#x00A0;</span><span
3221 class="cmtt-8">&#x00A0;</span><span
3222 class="cmtt-8">&#x00A0;</span><span
3223 class="cmtt-8">&#x00A0;</span><span
3224 class="cmtt-8">&#x00A0;</span><span
3225 class="cmtt-8">&#x00A0;5)</span><span
3226 class="cmtt-8">&#x00A0;vector</span><span
3227 class="cmtt-8">&#x00A0;[value_vector]</span><span
3228 class="cmtt-8">&#x00A0;element</span><span
3229 class="cmtt-8">&#x00A0;[i]</span><span
3230 class="cmtt-8">&#x00A0;=</span>
3231 <br class="fancyvrb" /><a
3232 id="x1-55018r9"></a><span
3233 class="cmr-6">9</span><span
3234 class="cmtt-8">&#x00A0;</span><span
3235 class="cmtt-8">&#x00A0;</span><span
3236 class="cmtt-8">&#x00A0;</span><span
3237 class="cmtt-8">&#x00A0;</span><span
3238 class="cmtt-8">&#x00A0;</span><span
3239 class="cmtt-8">&#x00A0;</span><span
3240 class="cmtt-8">&#x00A0;</span><span
3241 class="cmtt-8">&#x00A0;</span><span
3242 class="cmtt-8">&#x00A0;</span><span
3243 class="cmtt-8">&#x00A0;</span><span
3244 class="cmtt-8">&#x00A0;</span><span
3245 class="cmtt-8">&#x00A0;</span><span
3246 class="cmtt-8">&#x00A0;</span><span
3247 class="cmtt-8">&#x00A0;(</span><span
3248 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
3249 class="cmtt-8">&#x00A0;array</span><span
3250 class="cmtt-8">&#x00A0;element</span><span
3251 class="cmtt-8">&#x00A0;number</span><span
3252 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
3253 class="cmtt-8">&#x00A0;)</span><span
3254 class="cmtt-8">&#x00A0;*</span>
3255 <br class="fancyvrb" /><a
3256 id="x1-55020r10"></a><span
3257 class="cmr-6">10</span><span
3258 class="cmtt-8">&#x00A0;</span><span
3259 class="cmtt-8">&#x00A0;</span><span
3260 class="cmtt-8">&#x00A0;</span><span
3261 class="cmtt-8">&#x00A0;</span><span
3262 class="cmtt-8">&#x00A0;</span><span
3263 class="cmtt-8">&#x00A0;</span><span
3264 class="cmtt-8">&#x00A0;</span><span
3265 class="cmtt-8">&#x00A0;</span><span
3266 class="cmtt-8">&#x00A0;</span><span
3267 class="cmtt-8">&#x00A0;</span><span
3268 class="cmtt-8">&#x00A0;</span><span
3269 class="cmtt-8">&#x00A0;</span><span
3270 class="cmtt-8">&#x00A0;</span><span
3271 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
3272 class="cmtt-8">&#x00A0;+</span><span
3273 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
3274 class="cmtt-8">&#x00A0;+</span><span
3275 class="cmtt-8">&#x00A0;[last];</span>
3276 <br class="fancyvrb" /><a
3277 id="x1-55022r11"></a><span
3278 class="cmr-6">11</span><span
3279 class="cmtt-8">&#x00A0;</span><span
3280 class="cmtt-8">&#x00A0;</span>
3281 <br class="fancyvrb" /><a
3282 id="x1-55024r12"></a><span
3283 class="cmr-6">12</span><span
3284 class="cmtt-8">&#x00A0;</span><span
3285 class="cmtt-8">&#x00A0;</span><span
3286 class="cmtt-8">&#x00A0;</span><span
3287 class="cmtt-8">&#x00A0;</span><span
3288 class="cmtt-8">&#x00A0;</span><span
3289 class="cmtt-8">&#x00A0;</span><span
3290 class="cmtt-8">&#x00A0;</span><span
3291 class="cmtt-8">&#x00A0;</span><span
3292 class="cmtt-8">&#x00A0;6)</span><span
3293 class="cmtt-8">&#x00A0;if</span><span
3294 class="cmtt-8">&#x00A0;(</span><span
3295 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
3296 class="cmtt-8">&#x00A0;is</span><span
3297 class="cmtt-8">&#x00A0;set</span><span
3298 class="cmtt-8">&#x00A0;)</span><span
3299 class="cmtt-8">&#x00A0;then</span><span
3300 class="cmtt-8">&#x00A0;set</span><span
3301 class="cmtt-8">&#x00A0;[last]</span><span
3302 class="cmtt-8">&#x00A0;=</span><span
3303 class="cmtt-8">&#x00A0;vector</span><span
3304 class="cmtt-8">&#x00A0;[value_vector]</span><span
3305 class="cmtt-8">&#x00A0;element</span><span
3306 class="cmtt-8">&#x00A0;[i]</span>
3307 <br class="fancyvrb" /><a
3308 id="x1-55026r13"></a><span
3309 class="cmr-6">13</span><span
3310 class="cmtt-8">&#x00A0;</span><span
3311 class="cmtt-8">&#x00A0;</span>
3312 <br class="fancyvrb" /><a
3313 id="x1-55028r14"></a><span
3314 class="cmr-6">14</span><span
3315 class="cmtt-8">&#x00A0;</span><span
3316 class="cmtt-8">&#x00A0;</span><span
3317 class="cmtt-8">&#x00A0;</span><span
3318 class="cmtt-8">&#x00A0;</span><span
3319 class="cmtt-8">&#x00A0;</span><span
3320 class="cmtt-8">&#x00A0;</span><span
3321 class="cmtt-8">&#x00A0;</span><span
3322 class="cmtt-8">&#x00A0;</span><span
3323 class="cmtt-8">&#x00A0;7)</span><span
3324 class="cmtt-8">&#x00A0;[index_divisor]</span><span
3325 class="cmtt-8">&#x00A0;=</span><span
3326 class="cmtt-8">&#x00A0;[index_divisor]</span><span
3327 class="cmtt-8">&#x00A0;*</span><span
3328 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
3329 <br class="fancyvrb" /><a
3330 id="x1-55030r15"></a><span
3331 class="cmr-6">15</span><span
3332 class="cmtt-8">&#x00A0;</span><span
3333 class="cmtt-8">&#x00A0;</span>
3334 <br class="fancyvrb" /><a
3335 id="x1-55032r16"></a><span
3336 class="cmr-6">16</span><span
3337 class="cmtt-8">&#x00A0;</span><span
3338 class="cmtt-8">&#x00A0;</span><span
3339 class="cmtt-8">&#x00A0;</span><span
3340 class="cmtt-8">&#x00A0;</span><span
3341 class="cmtt-8">&#x00A0;</span><span
3342 class="cmtt-8">&#x00A0;</span><span
3343 class="cmtt-8">&#x00A0;</span><span
3344 class="cmsy-8">}</span>
3345 <br class="fancyvrb" /><a
3346 id="x1-55034r17"></a><span
3347 class="cmr-6">17</span><span
3348 class="cmtt-8">&#x00A0;</span><span
3349 class="cmtt-8">&#x00A0;</span>
3350 <br class="fancyvrb" /><a
3351 id="x1-55036r18"></a><span
3352 class="cmr-6">18</span><span
3353 class="cmtt-8">&#x00A0;</span><span
3354 class="cmtt-8">&#x00A0;</span><span
3355 class="cmtt-8">&#x00A0;</span><span
3356 class="cmtt-8">&#x00A0;8)</span><span
3357 class="cmtt-8">&#x00A0;vector</span><span
3358 class="cmtt-8">&#x00A0;calculation</span><span
3359 class="cmtt-8">&#x00A0;completed.</span>
3360 </div>
3364 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
3365 id="x1-560003.2.1"></a><span
3366 class="cmbx-12">Vector value decode: Lookup type 2</span></span>
3367 Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
3368 by the <span
3369 class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
3370 values of a codebook entry vector from the entries in <span
3371 class="cmtt-12">[codebook_multiplicands] </span>as follows
3372 (<span
3373 class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
3374 <span
3375 class="cmtt-12">[lookup_offset] </span>in this codebook):
3376 <!--l. 344--><p class="noindent" >
3377 <div class="fancyvrb" id="fancyvrb19">
3379 id="x1-56002r1"></a><span
3380 class="cmr-6">1</span><span
3381 class="cmtt-8">&#x00A0;</span><span
3382 class="cmtt-8">&#x00A0;</span><span
3383 class="cmtt-8">&#x00A0;</span><span
3384 class="cmtt-8">&#x00A0;1)</span><span
3385 class="cmtt-8">&#x00A0;[last]</span><span
3386 class="cmtt-8">&#x00A0;=</span><span
3387 class="cmtt-8">&#x00A0;0;</span>
3388 <br class="fancyvrb" /><a
3389 id="x1-56004r2"></a><span
3390 class="cmr-6">2</span><span
3391 class="cmtt-8">&#x00A0;</span><span
3392 class="cmtt-8">&#x00A0;</span><span
3393 class="cmtt-8">&#x00A0;</span><span
3394 class="cmtt-8">&#x00A0;2)</span><span
3395 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
3396 class="cmtt-8">&#x00A0;=</span><span
3397 class="cmtt-8">&#x00A0;[lookup_offset]</span><span
3398 class="cmtt-8">&#x00A0;*</span><span
3399 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
3400 <br class="fancyvrb" /><a
3401 id="x1-56006r3"></a><span
3402 class="cmr-6">3</span><span
3403 class="cmtt-8">&#x00A0;</span><span
3404 class="cmtt-8">&#x00A0;</span><span
3405 class="cmtt-8">&#x00A0;</span><span
3406 class="cmtt-8">&#x00A0;3)</span><span
3407 class="cmtt-8">&#x00A0;iterate</span><span
3408 class="cmtt-8">&#x00A0;[i]</span><span
3409 class="cmtt-8">&#x00A0;over</span><span
3410 class="cmtt-8">&#x00A0;the</span><span
3411 class="cmtt-8">&#x00A0;range</span><span
3412 class="cmtt-8">&#x00A0;0</span><span
3413 class="cmtt-8">&#x00A0;...</span><span
3414 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
3415 class="cmtt-8">&#x00A0;(once</span><span
3416 class="cmtt-8">&#x00A0;for</span><span
3417 class="cmtt-8">&#x00A0;each</span><span
3418 class="cmtt-8">&#x00A0;scalar</span><span
3419 class="cmtt-8">&#x00A0;value</span><span
3420 class="cmtt-8">&#x00A0;in</span><span
3421 class="cmtt-8">&#x00A0;the</span><span
3422 class="cmtt-8">&#x00A0;value</span><span
3423 class="cmtt-8">&#x00A0;vector)</span><span
3424 class="cmtt-8">&#x00A0;</span><span
3425 class="cmsy-8">{</span>
3426 <br class="fancyvrb" /><a
3427 id="x1-56008r4"></a><span
3428 class="cmr-6">4</span><span
3429 class="cmtt-8">&#x00A0;</span><span
3430 class="cmtt-8">&#x00A0;</span>
3431 <br class="fancyvrb" /><a
3432 id="x1-56010r5"></a><span
3433 class="cmr-6">5</span><span
3434 class="cmtt-8">&#x00A0;</span><span
3435 class="cmtt-8">&#x00A0;</span><span
3436 class="cmtt-8">&#x00A0;</span><span
3437 class="cmtt-8">&#x00A0;</span><span
3438 class="cmtt-8">&#x00A0;</span><span
3439 class="cmtt-8">&#x00A0;</span><span
3440 class="cmtt-8">&#x00A0;</span><span
3441 class="cmtt-8">&#x00A0;</span><span
3442 class="cmtt-8">&#x00A0;4)</span><span
3443 class="cmtt-8">&#x00A0;vector</span><span
3444 class="cmtt-8">&#x00A0;[value_vector]</span><span
3445 class="cmtt-8">&#x00A0;element</span><span
3446 class="cmtt-8">&#x00A0;[i]</span><span
3447 class="cmtt-8">&#x00A0;=</span>
3448 <br class="fancyvrb" /><a
3449 id="x1-56012r6"></a><span
3450 class="cmr-6">6</span><span
3451 class="cmtt-8">&#x00A0;</span><span
3452 class="cmtt-8">&#x00A0;</span><span
3453 class="cmtt-8">&#x00A0;</span><span
3454 class="cmtt-8">&#x00A0;</span><span
3455 class="cmtt-8">&#x00A0;</span><span
3456 class="cmtt-8">&#x00A0;</span><span
3457 class="cmtt-8">&#x00A0;</span><span
3458 class="cmtt-8">&#x00A0;</span><span
3459 class="cmtt-8">&#x00A0;</span><span
3460 class="cmtt-8">&#x00A0;</span><span
3461 class="cmtt-8">&#x00A0;</span><span
3462 class="cmtt-8">&#x00A0;</span><span
3463 class="cmtt-8">&#x00A0;</span><span
3464 class="cmtt-8">&#x00A0;(</span><span
3465 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
3466 class="cmtt-8">&#x00A0;array</span><span
3467 class="cmtt-8">&#x00A0;element</span><span
3468 class="cmtt-8">&#x00A0;number</span><span
3469 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
3470 class="cmtt-8">&#x00A0;)</span><span
3471 class="cmtt-8">&#x00A0;*</span>
3472 <br class="fancyvrb" /><a
3473 id="x1-56014r7"></a><span
3474 class="cmr-6">7</span><span
3475 class="cmtt-8">&#x00A0;</span><span
3476 class="cmtt-8">&#x00A0;</span><span
3477 class="cmtt-8">&#x00A0;</span><span
3478 class="cmtt-8">&#x00A0;</span><span
3479 class="cmtt-8">&#x00A0;</span><span
3480 class="cmtt-8">&#x00A0;</span><span
3481 class="cmtt-8">&#x00A0;</span><span
3482 class="cmtt-8">&#x00A0;</span><span
3483 class="cmtt-8">&#x00A0;</span><span
3484 class="cmtt-8">&#x00A0;</span><span
3485 class="cmtt-8">&#x00A0;</span><span
3486 class="cmtt-8">&#x00A0;</span><span
3487 class="cmtt-8">&#x00A0;</span><span
3488 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
3489 class="cmtt-8">&#x00A0;+</span><span
3490 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
3491 class="cmtt-8">&#x00A0;+</span><span
3492 class="cmtt-8">&#x00A0;[last];</span>
3493 <br class="fancyvrb" /><a
3494 id="x1-56016r8"></a><span
3495 class="cmr-6">8</span><span
3496 class="cmtt-8">&#x00A0;</span><span
3497 class="cmtt-8">&#x00A0;</span>
3498 <br class="fancyvrb" /><a
3499 id="x1-56018r9"></a><span
3500 class="cmr-6">9</span><span
3501 class="cmtt-8">&#x00A0;</span><span
3502 class="cmtt-8">&#x00A0;</span><span
3503 class="cmtt-8">&#x00A0;</span><span
3504 class="cmtt-8">&#x00A0;</span><span
3505 class="cmtt-8">&#x00A0;</span><span
3506 class="cmtt-8">&#x00A0;</span><span
3507 class="cmtt-8">&#x00A0;</span><span
3508 class="cmtt-8">&#x00A0;</span><span
3509 class="cmtt-8">&#x00A0;5)</span><span
3510 class="cmtt-8">&#x00A0;if</span><span
3511 class="cmtt-8">&#x00A0;(</span><span
3512 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
3513 class="cmtt-8">&#x00A0;is</span><span
3514 class="cmtt-8">&#x00A0;set</span><span
3515 class="cmtt-8">&#x00A0;)</span><span
3516 class="cmtt-8">&#x00A0;then</span><span
3517 class="cmtt-8">&#x00A0;set</span><span
3518 class="cmtt-8">&#x00A0;[last]</span><span
3519 class="cmtt-8">&#x00A0;=</span><span
3520 class="cmtt-8">&#x00A0;vector</span><span
3521 class="cmtt-8">&#x00A0;[value_vector]</span><span
3522 class="cmtt-8">&#x00A0;element</span><span
3523 class="cmtt-8">&#x00A0;[i]</span>
3524 <br class="fancyvrb" /><a
3525 id="x1-56020r10"></a><span
3526 class="cmr-6">10</span><span
3527 class="cmtt-8">&#x00A0;</span><span
3528 class="cmtt-8">&#x00A0;</span>
3529 <br class="fancyvrb" /><a
3530 id="x1-56022r11"></a><span
3531 class="cmr-6">11</span><span
3532 class="cmtt-8">&#x00A0;</span><span
3533 class="cmtt-8">&#x00A0;</span><span
3534 class="cmtt-8">&#x00A0;</span><span
3535 class="cmtt-8">&#x00A0;</span><span
3536 class="cmtt-8">&#x00A0;</span><span
3537 class="cmtt-8">&#x00A0;</span><span
3538 class="cmtt-8">&#x00A0;</span><span
3539 class="cmtt-8">&#x00A0;</span><span
3540 class="cmtt-8">&#x00A0;6)</span><span
3541 class="cmtt-8">&#x00A0;increment</span><span
3542 class="cmtt-8">&#x00A0;[multiplicand_offset]</span>
3543 <br class="fancyvrb" /><a
3544 id="x1-56024r12"></a><span
3545 class="cmr-6">12</span><span
3546 class="cmtt-8">&#x00A0;</span><span
3547 class="cmtt-8">&#x00A0;</span>
3548 <br class="fancyvrb" /><a
3549 id="x1-56026r13"></a><span
3550 class="cmr-6">13</span><span
3551 class="cmtt-8">&#x00A0;</span><span
3552 class="cmtt-8">&#x00A0;</span><span
3553 class="cmtt-8">&#x00A0;</span><span
3554 class="cmtt-8">&#x00A0;</span><span
3555 class="cmtt-8">&#x00A0;</span><span
3556 class="cmtt-8">&#x00A0;</span><span
3557 class="cmtt-8">&#x00A0;</span><span
3558 class="cmsy-8">}</span>
3559 <br class="fancyvrb" /><a
3560 id="x1-56028r14"></a><span
3561 class="cmr-6">14</span><span
3562 class="cmtt-8">&#x00A0;</span><span
3563 class="cmtt-8">&#x00A0;</span>
3564 <br class="fancyvrb" /><a
3565 id="x1-56030r15"></a><span
3566 class="cmr-6">15</span><span
3567 class="cmtt-8">&#x00A0;</span><span
3568 class="cmtt-8">&#x00A0;</span><span
3569 class="cmtt-8">&#x00A0;</span><span
3570 class="cmtt-8">&#x00A0;7)</span><span
3571 class="cmtt-8">&#x00A0;vector</span><span
3572 class="cmtt-8">&#x00A0;calculation</span><span
3573 class="cmtt-8">&#x00A0;completed.</span>
3574 </div>
3575 <!--l. 370--><p class="noindent" >
3576 <h4 class="subsectionHead"><span class="titlemark">3.3 </span> <a
3577 id="x1-570003.3"></a>Use of the codebook abstraction</h4>
3578 <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
3579 specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
3580 then returns that entry number to the decoder (when used in a scalar entropy coding context), or
3581 uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
3582 used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
3583 call to the codebook mechanism requests either a scalar entry number or a lookup
3584 vector.
3585 <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
3586 decode using a codebook of lookup type 0 in any context expecting a vector return
3587 value (even in a case where a vector of dimension one) is forbidden. If decoder setup
3588 or decode requests such an action, that is an error condition rendering the packet
3592 undecodable.
3593 <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
3594 next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
3595 codeword in the codebook. This process can be though of as logically walking the
3596 Huffman decode tree by reading one bit at a time from the bitstream, and using the
3597 bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
3598 branch (right in the above examples). Walking the tree finishes when the decode process
3599 hits a leaf in the decision tree; the result is the entry number corresponding to that
3600 leaf. Reading past the end of a packet propagates the &#8217;end-of-stream&#8217; condition to the
3601 decoder.
3602 <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
3603 value.
3604 <!--l. 404--><p class="noindent" >When used in a VQ context, the codeword entry number is used as an offset into the VQ lookup
3605 table. The value returned to the decoder is the vector of scalars corresponding to this
3606 offset.
3613 <h3 class="sectionHead"><span class="titlemark">4 </span> <a
3614 id="x1-580004"></a>Codec Setup and Packet Decode</h3>
3615 <!--l. 6--><p class="noindent" >
3616 <h4 class="subsectionHead"><span class="titlemark">4.1 </span> <a
3617 id="x1-590004.1"></a>Overview</h4>
3618 <!--l. 8--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
3619 of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
3620 process, which is provided in <a
3621 href="#x1-20001">Section&#x00A0;1<!--tex4ht:ref: vorbis:spec:intro --></a>, &#8220;<a
3622 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221;. <a
3623 href="#x1-360002">Section&#x00A0;2<!--tex4ht:ref: vorbis:spec:bitpacking --></a>,
3624 &#8220;<a
3625 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; covers reading and writing bit fields from and to bitstream
3626 packets.
3627 <!--l. 16--><p class="noindent" >
3628 <h4 class="subsectionHead"><span class="titlemark">4.2 </span> <a
3629 id="x1-600004.2"></a>Header decode and decode setup</h4>
3630 <!--l. 18--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
3631 identification header, the comments header, and the setup header. All are required for decode
3632 compliance. An end-of-packet condition during decoding the first or third header packet renders
3633 the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
3634 condition.
3635 <!--l. 25--><p class="noindent" >
3636 <h5 class="subsubsectionHead"><span class="titlemark">4.2.1 </span> <a
3637 id="x1-610004.2.1"></a>Common header decode</h5>
3638 <!--l. 27--><p class="noindent" >Each header packet begins with the same header fields.
3639 <!--l. 30--><p class="noindent" >
3640 <div class="fancyvrb" id="fancyvrb20">
3642 id="x1-61002r1"></a><span
3643 class="cmr-6">1</span><span
3644 class="cmtt-8">&#x00A0;</span><span
3645 class="cmtt-8">&#x00A0;</span><span
3646 class="cmtt-8">&#x00A0;</span><span
3647 class="cmtt-8">&#x00A0;1)</span><span
3648 class="cmtt-8">&#x00A0;[packet_type]</span><span
3649 class="cmtt-8">&#x00A0;:</span><span
3650 class="cmtt-8">&#x00A0;8</span><span
3651 class="cmtt-8">&#x00A0;bit</span><span
3652 class="cmtt-8">&#x00A0;value</span>
3653 <br class="fancyvrb" /><a
3654 id="x1-61004r2"></a><span
3655 class="cmr-6">2</span><span
3656 class="cmtt-8">&#x00A0;</span><span
3657 class="cmtt-8">&#x00A0;</span><span
3658 class="cmtt-8">&#x00A0;</span><span
3659 class="cmtt-8">&#x00A0;2)</span><span
3660 class="cmtt-8">&#x00A0;0x76,</span><span
3661 class="cmtt-8">&#x00A0;0x6f,</span><span
3662 class="cmtt-8">&#x00A0;0x72,</span><span
3663 class="cmtt-8">&#x00A0;0x62,</span><span
3664 class="cmtt-8">&#x00A0;0x69,</span><span
3665 class="cmtt-8">&#x00A0;0x73:</span><span
3666 class="cmtt-8">&#x00A0;the</span><span
3667 class="cmtt-8">&#x00A0;characters</span><span
3668 class="cmtt-8">&#x00A0;&#8217;v&#8217;,&#8217;o&#8217;,&#8217;r&#8217;,&#8217;b&#8217;,&#8217;i&#8217;,&#8217;s&#8217;</span><span
3669 class="cmtt-8">&#x00A0;as</span><span
3670 class="cmtt-8">&#x00A0;six</span><span
3671 class="cmtt-8">&#x00A0;octets</span>
3672 </div>
3676 <!--l. 35--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
3677 header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
3678 single bit of &#8217;0&#8217; is an audio packet). The packets must occur in the order of identification,
3679 comment, setup.
3680 <!--l. 43--><p class="noindent" >
3681 <h5 class="subsubsectionHead"><span class="titlemark">4.2.2 </span> <a
3682 id="x1-620004.2.2"></a>Identification header</h5>
3683 <!--l. 45--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
3684 definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
3685 stream. The identification header is coded as follows:
3686 <!--l. 50--><p class="noindent" >
3687 <div class="fancyvrb" id="fancyvrb21">
3689 id="x1-62002r1"></a><span
3690 class="cmr-6">1</span><span
3691 class="cmtt-8">&#x00A0;</span><span
3692 class="cmtt-8">&#x00A0;</span><span
3693 class="cmtt-8">&#x00A0;1)</span><span
3694 class="cmtt-8">&#x00A0;[vorbis_version]</span><span
3695 class="cmtt-8">&#x00A0;=</span><span
3696 class="cmtt-8">&#x00A0;read</span><span
3697 class="cmtt-8">&#x00A0;32</span><span
3698 class="cmtt-8">&#x00A0;bits</span><span
3699 class="cmtt-8">&#x00A0;as</span><span
3700 class="cmtt-8">&#x00A0;unsigned</span><span
3701 class="cmtt-8">&#x00A0;integer</span>
3702 <br class="fancyvrb" /><a
3703 id="x1-62004r2"></a><span
3704 class="cmr-6">2</span><span
3705 class="cmtt-8">&#x00A0;</span><span
3706 class="cmtt-8">&#x00A0;</span><span
3707 class="cmtt-8">&#x00A0;2)</span><span
3708 class="cmtt-8">&#x00A0;[audio_channels]</span><span
3709 class="cmtt-8">&#x00A0;=</span><span
3710 class="cmtt-8">&#x00A0;read</span><span
3711 class="cmtt-8">&#x00A0;8</span><span
3712 class="cmtt-8">&#x00A0;bit</span><span
3713 class="cmtt-8">&#x00A0;integer</span><span
3714 class="cmtt-8">&#x00A0;as</span><span
3715 class="cmtt-8">&#x00A0;unsigned</span>
3716 <br class="fancyvrb" /><a
3717 id="x1-62006r3"></a><span
3718 class="cmr-6">3</span><span
3719 class="cmtt-8">&#x00A0;</span><span
3720 class="cmtt-8">&#x00A0;</span><span
3721 class="cmtt-8">&#x00A0;3)</span><span
3722 class="cmtt-8">&#x00A0;[audio_sample_rate]</span><span
3723 class="cmtt-8">&#x00A0;=</span><span
3724 class="cmtt-8">&#x00A0;read</span><span
3725 class="cmtt-8">&#x00A0;32</span><span
3726 class="cmtt-8">&#x00A0;bits</span><span
3727 class="cmtt-8">&#x00A0;as</span><span
3728 class="cmtt-8">&#x00A0;unsigned</span><span
3729 class="cmtt-8">&#x00A0;integer</span>
3730 <br class="fancyvrb" /><a
3731 id="x1-62008r4"></a><span
3732 class="cmr-6">4</span><span
3733 class="cmtt-8">&#x00A0;</span><span
3734 class="cmtt-8">&#x00A0;</span><span
3735 class="cmtt-8">&#x00A0;4)</span><span
3736 class="cmtt-8">&#x00A0;[bitrate_maximum]</span><span
3737 class="cmtt-8">&#x00A0;=</span><span
3738 class="cmtt-8">&#x00A0;read</span><span
3739 class="cmtt-8">&#x00A0;32</span><span
3740 class="cmtt-8">&#x00A0;bits</span><span
3741 class="cmtt-8">&#x00A0;as</span><span
3742 class="cmtt-8">&#x00A0;signed</span><span
3743 class="cmtt-8">&#x00A0;integer</span>
3744 <br class="fancyvrb" /><a
3745 id="x1-62010r5"></a><span
3746 class="cmr-6">5</span><span
3747 class="cmtt-8">&#x00A0;</span><span
3748 class="cmtt-8">&#x00A0;</span><span
3749 class="cmtt-8">&#x00A0;5)</span><span
3750 class="cmtt-8">&#x00A0;[bitrate_nominal]</span><span
3751 class="cmtt-8">&#x00A0;=</span><span
3752 class="cmtt-8">&#x00A0;read</span><span
3753 class="cmtt-8">&#x00A0;32</span><span
3754 class="cmtt-8">&#x00A0;bits</span><span
3755 class="cmtt-8">&#x00A0;as</span><span
3756 class="cmtt-8">&#x00A0;signed</span><span
3757 class="cmtt-8">&#x00A0;integer</span>
3758 <br class="fancyvrb" /><a
3759 id="x1-62012r6"></a><span
3760 class="cmr-6">6</span><span
3761 class="cmtt-8">&#x00A0;</span><span
3762 class="cmtt-8">&#x00A0;</span><span
3763 class="cmtt-8">&#x00A0;6)</span><span
3764 class="cmtt-8">&#x00A0;[bitrate_minimum]</span><span
3765 class="cmtt-8">&#x00A0;=</span><span
3766 class="cmtt-8">&#x00A0;read</span><span
3767 class="cmtt-8">&#x00A0;32</span><span
3768 class="cmtt-8">&#x00A0;bits</span><span
3769 class="cmtt-8">&#x00A0;as</span><span
3770 class="cmtt-8">&#x00A0;signed</span><span
3771 class="cmtt-8">&#x00A0;integer</span>
3772 <br class="fancyvrb" /><a
3773 id="x1-62014r7"></a><span
3774 class="cmr-6">7</span><span
3775 class="cmtt-8">&#x00A0;</span><span
3776 class="cmtt-8">&#x00A0;</span><span
3777 class="cmtt-8">&#x00A0;7)</span><span
3778 class="cmtt-8">&#x00A0;[blocksize_0]</span><span
3779 class="cmtt-8">&#x00A0;=</span><span
3780 class="cmtt-8">&#x00A0;2</span><span
3781 class="cmtt-8">&#x00A0;exponent</span><span
3782 class="cmtt-8">&#x00A0;(read</span><span
3783 class="cmtt-8">&#x00A0;4</span><span
3784 class="cmtt-8">&#x00A0;bits</span><span
3785 class="cmtt-8">&#x00A0;as</span><span
3786 class="cmtt-8">&#x00A0;unsigned</span><span
3787 class="cmtt-8">&#x00A0;integer)</span>
3788 <br class="fancyvrb" /><a
3789 id="x1-62016r8"></a><span
3790 class="cmr-6">8</span><span
3791 class="cmtt-8">&#x00A0;</span><span
3792 class="cmtt-8">&#x00A0;</span><span
3793 class="cmtt-8">&#x00A0;8)</span><span
3794 class="cmtt-8">&#x00A0;[blocksize_1]</span><span
3795 class="cmtt-8">&#x00A0;=</span><span
3796 class="cmtt-8">&#x00A0;2</span><span
3797 class="cmtt-8">&#x00A0;exponent</span><span
3798 class="cmtt-8">&#x00A0;(read</span><span
3799 class="cmtt-8">&#x00A0;4</span><span
3800 class="cmtt-8">&#x00A0;bits</span><span
3801 class="cmtt-8">&#x00A0;as</span><span
3802 class="cmtt-8">&#x00A0;unsigned</span><span
3803 class="cmtt-8">&#x00A0;integer)</span>
3804 <br class="fancyvrb" /><a
3805 id="x1-62018r9"></a><span
3806 class="cmr-6">9</span><span
3807 class="cmtt-8">&#x00A0;</span><span
3808 class="cmtt-8">&#x00A0;</span><span
3809 class="cmtt-8">&#x00A0;9)</span><span
3810 class="cmtt-8">&#x00A0;[framing_flag]</span><span
3811 class="cmtt-8">&#x00A0;=</span><span
3812 class="cmtt-8">&#x00A0;read</span><span
3813 class="cmtt-8">&#x00A0;one</span><span
3814 class="cmtt-8">&#x00A0;bit</span>
3815 </div>
3816 <!--l. 62--><p class="noindent" ><span
3817 class="cmtt-12">[vorbis_version] </span>is to read &#8217;0&#8217; in order to be compatible with this document. Both
3818 <span
3819 class="cmtt-12">[audio_channels] </span>and <span
3820 class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
3821 blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span
3822 class="cmtt-12">[blocksize_0]</span>
3823 must be less than or equal to <span
3824 class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
3825 any of these conditions renders a stream undecodable.
3826 <!--l. 70--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
3827 considerably off in purely VBR streams. The fields are meaningful only when greater than
3828 zero.
3829 <ul class="itemize1">
3830 <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
3831 fixed-rate bitstream
3832 </li>
3833 <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
3837 </li>
3838 <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
3839 </li>
3840 <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
3841 <!--l. 84--><p class="noindent" >
3842 <h5 class="subsubsectionHead"><span class="titlemark">4.2.3 </span> <a
3843 id="x1-630004.2.3"></a>Comment header</h5>
3844 <!--l. 85--><p class="noindent" >Comment header decode and data specification is covered in <a
3845 href="#x1-810005">Section&#x00A0;5<!--tex4ht:ref: vorbis:spec:comment --></a>, &#8220;<a
3846 href="#x1-810005">comment field and
3847 header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
3848 <!--l. 89--><p class="noindent" >
3849 <h5 class="subsubsectionHead"><span class="titlemark">4.2.4 </span> <a
3850 id="x1-640004.2.4"></a>Setup header</h5>
3851 <!--l. 91--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
3852 <div class="center"
3854 <!--l. 93--><p class="noindent" >
3856 <!--l. 94--><p class="noindent" ><img
3857 src="components.png" alt="PIC"
3859 <br /> <table class="caption"
3860 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;6: </td><td
3861 class="content">decoder pipeline configuration</td></tr></table><!--tex4ht:label?: x1-640016 -->
3862 </div>
3863 <!--l. 99--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
3864 header contains, in order, the lists of codebook configurations, time-domain transform
3865 configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
3866 mapping configurations and mode configurations. It finishes with a framing bit of &#8217;1&#8217;. Header
3867 decode proceeds in the following order:
3868 <!--l. 107--><p class="noindent" ><span class="paragraphHead"><a
3869 id="x1-650004.2.4"></a><span
3870 class="cmbx-12">Codebooks</span></span>
3874 <ol class="enumerate1" >
3875 <li
3876 class="enumerate" id="x1-65002x1"><span
3877 class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
3878 </li>
3879 <li
3880 class="enumerate" id="x1-65004x2">Decode <span
3881 class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a
3882 href="#x1-470003">Section&#x00A0;3<!--tex4ht:ref: vorbis:spec:codebook --></a>,
3883 &#8220;<a
3884 href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>&#8221;. Save each configuration, in order, in an array
3885 of codebook configurations <span
3886 class="cmtt-12">[vorbis_codebook_configurations]</span>.</li></ol>
3887 <!--l. 119--><p class="noindent" ><span class="paragraphHead"><a
3888 id="x1-660004.2.4"></a><span
3889 class="cmbx-12">Time domain transforms</span></span>
3890 These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
3891 be read to maintain bitstream sync.
3892 <!--l. 125--><p class="noindent" >
3893 <ol class="enumerate1" >
3894 <li
3895 class="enumerate" id="x1-66002x1"><span
3896 class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
3897 </li>
3898 <li
3899 class="enumerate" id="x1-66004x2">read <span
3900 class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
3901 nonzero, this is an error condition and the stream is undecodable.</li></ol>
3902 <!--l. 132--><p class="noindent" ><span class="paragraphHead"><a
3903 id="x1-670004.2.4"></a><span
3904 class="cmbx-12">Floors</span></span>
3905 Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
3906 type.
3907 <!--l. 137--><p class="noindent" >
3908 <ol class="enumerate1" >
3909 <li
3910 class="enumerate" id="x1-67002x1"><span
3911 class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
3912 </li>
3913 <li
3914 class="enumerate" id="x1-67004x2">For each <span
3915 class="cmtt-12">[i] </span>of <span
3916 class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
3917 <ol class="enumerate2" >
3918 <li
3919 class="enumerate" id="x1-67006x1">read the floor type: vector <span
3920 class="cmtt-12">[vorbis_floor_types] </span>element <span
3921 class="cmtt-12">[i] </span>= read 16 bits
3922 as unsigned integer
3923 </li>
3924 <li
3925 class="enumerate" id="x1-67008x2">If the floor type is zero, decode the floor configuration as defined in <a
3926 href="#x1-890006">Section&#x00A0;6<!--tex4ht:ref: vorbis:spec:floor0 --></a>,
3927 &#8220;<a
3928 href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>&#8221;; save this configuration in slot <span
3929 class="cmtt-12">[i] </span>of the floor
3930 configuration array <span
3931 class="cmtt-12">[vorbis_floor_configurations]</span>.
3935 </li>
3936 <li
3937 class="enumerate" id="x1-67010x3">If the floor type is one, decode the floor configuration as defined in <a
3938 href="#x1-950007">Section&#x00A0;7<!--tex4ht:ref: vorbis:spec:floor1 --></a>,
3939 &#8220;<a
3940 href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>&#8221;; save this configuration in slot <span
3941 class="cmtt-12">[i] </span>of the floor
3942 configuration array <span
3943 class="cmtt-12">[vorbis_floor_configurations]</span>.
3944 </li>
3945 <li
3946 class="enumerate" id="x1-67012x4">If the the floor type is greater than one, this stream is undecodable; ERROR
3947 CONDITION</li></ol>
3948 </li></ol>
3949 <!--l. 156--><p class="noindent" ><span class="paragraphHead"><a
3950 id="x1-680004.2.4"></a><span
3951 class="cmbx-12">Residues</span></span>
3952 Vorbis uses three residue types; header decode of each type is identical.
3953 <!--l. 161--><p class="noindent" >
3954 <ol class="enumerate1" >
3955 <li
3956 class="enumerate" id="x1-68002x1"><span
3957 class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
3958 </li>
3959 <li
3960 class="enumerate" id="x1-68004x2">For each of <span
3961 class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
3962 <ol class="enumerate2" >
3963 <li
3964 class="enumerate" id="x1-68006x1">read the residue type; vector <span
3965 class="cmtt-12">[vorbis_residue_types] </span>element <span
3966 class="cmtt-12">[i] </span>= read 16
3967 bits as unsigned integer
3968 </li>
3969 <li
3970 class="enumerate" id="x1-68008x2">If the residue type is zero, one or two, decode the residue configuration as defined
3971 in <a
3972 href="#x1-1020008">Section&#x00A0;8<!--tex4ht:ref: vorbis:spec:residue --></a>, &#8220;<a
3973 href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>&#8221;; save this configuration in slot <span
3974 class="cmtt-12">[i] </span>of
3975 the residue configuration array <span
3976 class="cmtt-12">[vorbis_residue_configurations]</span>.
3977 </li>
3978 <li
3979 class="enumerate" id="x1-68010x3">If the the residue type is greater than two, this stream is undecodable; ERROR
3980 CONDITION</li></ol>
3981 </li></ol>
3982 <!--l. 176--><p class="noindent" ><span class="paragraphHead"><a
3983 id="x1-690004.2.4"></a><span
3984 class="cmbx-12">Mappings</span></span>
3985 Mappings are used to set up specific pipelines for encoding multichannel audio with varying
3986 channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
3987 channel mappings.
3991 <!--l. 186--><p class="noindent" >
3992 <ol class="enumerate1" >
3993 <li
3994 class="enumerate" id="x1-69002x1"><span
3995 class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
3996 </li>
3997 <li
3998 class="enumerate" id="x1-69004x2">For each <span
3999 class="cmtt-12">[i] </span>of <span
4000 class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
4001 <ol class="enumerate2" >
4002 <li
4003 class="enumerate" id="x1-69006x1">read the mapping type: 16 bits as unsigned integer. There&#8217;s no reason to save
4004 the mapping type in Vorbis I.
4005 </li>
4006 <li
4007 class="enumerate" id="x1-69008x2">If the mapping type is nonzero, the stream is undecodable
4008 </li>
4009 <li
4010 class="enumerate" id="x1-69010x3">If the mapping type is zero:
4011 <ol class="enumerate3" >
4012 <li
4013 class="enumerate" id="x1-69012x1">read 1 bit as a boolean flag
4014 <ol class="enumerate4" >
4015 <li
4016 class="enumerate" id="x1-69014x1">if set, <span
4017 class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
4018 and add one
4019 </li>
4020 <li
4021 class="enumerate" id="x1-69016x2">if unset, <span
4022 class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</li></ol>
4023 </li>
4024 <li
4025 class="enumerate" id="x1-69018x2">read 1 bit as a boolean flag
4026 <ol class="enumerate4" >
4027 <li
4028 class="enumerate" id="x1-69020x1">if set, square polar channel mapping is in use:
4029 <ul class="itemize1">
4030 <li class="itemize"><span
4031 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= read 8 bits as unsigned
4032 integer and add one
4033 </li>
4034 <li class="itemize">for <span
4035 class="cmtt-12">[j] </span>each of <span
4036 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
4037 <ul class="itemize2">
4038 <li class="itemize">vector <span
4039 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
4040 class="cmtt-12">[j]</span>= read
4042 href="#x1-1170009.2.1">ilog</a>(<span
4043 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
4044 </li>
4045 <li class="itemize">vector <span
4046 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
4047 class="cmtt-12">[j]</span>= read
4049 href="#x1-1170009.2.1">ilog</a>(<span
4050 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
4051 </li>
4055 <li class="itemize">the numbers read in the above two steps are channel numbers
4056 representing the channel to treat as magnitude and the channel
4057 to treat as angle, respectively. If for any coupling step the
4058 angle channel number equals the magnitude channel number, the
4059 magnitude channel number is greater than <span
4060 class="cmtt-12">[audio_channels]</span>-1, or
4061 the angle channel is greater than <span
4062 class="cmtt-12">[audio_channels]</span>-1, the stream
4063 is undecodable.</li></ul>
4064 </li></ul>
4065 </li>
4066 <li
4067 class="enumerate" id="x1-69022x2">if unset, <span
4068 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</li></ol>
4069 </li>
4070 <li
4071 class="enumerate" id="x1-69024x3">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
4072 </li>
4073 <li
4074 class="enumerate" id="x1-69026x4">if <span
4075 class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
4076 settings. For each <span
4077 class="cmtt-12">[j] </span>of <span
4078 class="cmtt-12">[audio_channels] </span>channels:
4079 <ol class="enumerate4" >
4080 <li
4081 class="enumerate" id="x1-69028x1">vector <span
4082 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
4083 class="cmtt-12">[j] </span>= read 4 bits as unsigned
4084 integer
4085 </li>
4086 <li
4087 class="enumerate" id="x1-69030x2">if the value is greater than the highest numbered submap
4088 (<span
4089 class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
4090 the stream undecodable</li></ol>
4091 </li>
4092 <li
4093 class="enumerate" id="x1-69032x5">for each submap <span
4094 class="cmtt-12">[j] </span>of <span
4095 class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
4096 residue numbers for use in decoding that submap:
4097 <ol class="enumerate4" >
4098 <li
4099 class="enumerate" id="x1-69034x1">read and discard 8 bits (the unused time configuration placeholder)
4100 </li>
4101 <li
4102 class="enumerate" id="x1-69036x2">read 8 bits as unsigned integer for the floor number; save in vector
4103 <span
4104 class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span
4105 class="cmtt-12">[j]</span>
4106 </li>
4107 <li
4108 class="enumerate" id="x1-69038x3">verify the floor number is not greater than the highest number floor
4109 configured for the bitstream. If it is, the bitstream is undecodable
4110 </li>
4111 <li
4112 class="enumerate" id="x1-69040x4">read 8 bits as unsigned integer for the residue number; save in vector
4113 <span
4114 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
4115 class="cmtt-12">[j]</span>
4119 </li>
4120 <li
4121 class="enumerate" id="x1-69042x5">verify the residue number is not greater than the highest number residue
4122 configured for the bitstream. If it is, the bitstream is undecodable</li></ol>
4123 </li>
4124 <li
4125 class="enumerate" id="x1-69044x6">save this mapping configuration in slot <span
4126 class="cmtt-12">[i] </span>of the mapping configuration array
4127 <span
4128 class="cmtt-12">[vorbis_mapping_configurations]</span>.</li></ol>
4129 </li></ol>
4130 </li></ol>
4131 <!--l. 246--><p class="noindent" ><span class="paragraphHead"><a
4132 id="x1-700004.2.4"></a><span
4133 class="cmbx-12">Modes</span></span>
4134 <ol class="enumerate1" >
4135 <li
4136 class="enumerate" id="x1-70002x1"><span
4137 class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
4138 </li>
4139 <li
4140 class="enumerate" id="x1-70004x2">For each of <span
4141 class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
4142 <ol class="enumerate2" >
4143 <li
4144 class="enumerate" id="x1-70006x1"><span
4145 class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
4146 </li>
4147 <li
4148 class="enumerate" id="x1-70008x2"><span
4149 class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
4150 </li>
4151 <li
4152 class="enumerate" id="x1-70010x3"><span
4153 class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
4154 </li>
4155 <li
4156 class="enumerate" id="x1-70012x4"><span
4157 class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
4158 </li>
4159 <li
4160 class="enumerate" id="x1-70014x5">verify ranges; zero is the only legal value in
4161 Vorbis I for <span
4162 class="cmtt-12">[vorbis_mode_windowtype] </span>and <span
4163 class="cmtt-12">[vorbis_mode_transformtype]</span>.
4164 <span
4165 class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
4166 in use. Any illegal values render the stream undecodable.
4167 </li>
4168 <li
4169 class="enumerate" id="x1-70016x6">save this mode configuration in slot <span
4170 class="cmtt-12">[i] </span>of the mode configuration array
4171 <span
4172 class="cmtt-12">[vorbis_mode_configurations]</span>.</li></ol>
4173 </li>
4174 <li
4175 class="enumerate" id="x1-70018x3">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
4176 decodable.</li></ol>
4180 <!--l. 267--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
4181 <!--l. 276--><p class="noindent" >
4182 <h4 class="subsectionHead"><span class="titlemark">4.3 </span> <a
4183 id="x1-710004.3"></a>Audio packet decode and synthesis</h4>
4184 <!--l. 278--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
4185 audio packet decode is to read and verify the packet type. <span
4186 class="cmti-12">A non-audio packet when audio is</span>
4187 <span
4188 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
4189 <span
4190 class="cmti-12">packet and not attempt decoding it to audio</span>.
4191 <!--l. 285--><p class="noindent" >
4192 <h5 class="subsubsectionHead"><span class="titlemark">4.3.1 </span> <a
4193 id="x1-720004.3.1"></a>packet type, mode and window decode</h5>
4194 <!--l. 287--><p class="noindent" >
4195 <ol class="enumerate1" >
4196 <li
4197 class="enumerate" id="x1-72002x1">read 1 bit <span
4198 class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
4199 </li>
4200 <li
4201 class="enumerate" id="x1-72004x2">read <a
4202 href="#x1-1170009.2.1">ilog</a>([vorbis&#x02D9;mode&#x02D9;count]-1) bits <span
4203 class="cmtt-12">[mode_number]</span>
4204 </li>
4205 <li
4206 class="enumerate" id="x1-72006x3">decode blocksize <span
4207 class="cmtt-12">[n] </span>is equal to <span
4208 class="cmtt-12">[blocksize_0] </span>if <span
4209 class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
4210 else <span
4211 class="cmtt-12">[n] </span>is equal to <span
4212 class="cmtt-12">[blocksize_1]</span>.
4213 </li>
4214 <li
4215 class="enumerate" id="x1-72008x4">perform window selection and setup; this window is used later by the inverse
4216 MDCT:
4217 <ol class="enumerate2" >
4218 <li
4219 class="enumerate" id="x1-72010x1">if this is a long window (the <span
4220 class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
4221 set):
4222 <ol class="enumerate3" >
4223 <li
4224 class="enumerate" id="x1-72012x1">read 1 bit for <span
4225 class="cmtt-12">[previous_window_flag]</span>
4226 </li>
4227 <li
4228 class="enumerate" id="x1-72014x2">read 1 bit for <span
4229 class="cmtt-12">[next_window_flag]</span>
4233 </li>
4234 <li
4235 class="enumerate" id="x1-72016x3">if <span
4236 class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
4237 be a hybrid window for lapping with a short block. See <a
4238 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2<!--tex4ht:ref: vorbis:spec:window --></a>,
4239 &#8220;<a
4240 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
4241 overlapping dissimilar windows. Else, the left half window will have normal
4242 long shape.
4243 </li>
4244 <li
4245 class="enumerate" id="x1-72018x4">if <span
4246 class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
4247 a hybrid window for lapping with a short block. See <a
4248 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2<!--tex4ht:ref: vorbis:spec:window --></a>,
4249 &#8220;<a
4250 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
4251 overlapping dissimilar windows. Else, the left right window will have normal
4252 long shape.</li></ol>
4253 </li>
4254 <li
4255 class="enumerate" id="x1-72020x2">if this is a short window, the window is always the same short-window
4256 shape.</li></ol>
4257 </li></ol>
4258 <!--l. 320--><p class="noindent" >Vorbis windows all use the slope function <span
4259 class="cmmi-12">y </span>= sin(<img
4260 src="Vorbis_I_spec1x.png" alt="&#x03C0;2" class="frac" align="middle"> <span
4261 class="cmsy-10x-x-120">*</span> sin <sup><span
4262 class="cmr-8">2</span></sup>((<span
4263 class="cmmi-12">x </span>+ 0<span
4264 class="cmmi-12">.</span>5)<span
4265 class="cmmi-12">&#x2215;n </span><span
4266 class="cmsy-10x-x-120">* </span><span
4267 class="cmmi-12">&#x03C0;</span>)), where <span
4268 class="cmmi-12">n </span>is window
4269 size and <span
4270 class="cmmi-12">x </span>ranges 0<span
4271 class="cmmi-12">&#x2026;</span><span
4272 class="cmmi-12">n</span><span
4273 class="cmsy-10x-x-120">- </span>1, but dissimilar lapping requirements can affect overall shape. Window
4274 generation proceeds as follows:
4275 <!--l. 325--><p class="noindent" >
4276 <ol class="enumerate1" >
4277 <li
4278 class="enumerate" id="x1-72022x1"><span
4279 class="cmtt-12">[window_center] </span>= <span
4280 class="cmtt-12">[n] </span>/ 2
4281 </li>
4282 <li
4283 class="enumerate" id="x1-72024x2">if (<span
4284 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
4285 class="cmtt-12">[previous_window_flag] </span>is not set)
4286 then
4287 <ol class="enumerate2" >
4288 <li
4289 class="enumerate" id="x1-72026x1"><span
4290 class="cmtt-12">[left_window_start] </span>= <span
4291 class="cmtt-12">[n]</span>/4 - <span
4292 class="cmtt-12">[blocksize_0]</span>/4
4293 </li>
4294 <li
4295 class="enumerate" id="x1-72028x2"><span
4296 class="cmtt-12">[left_window_end] </span>= <span
4297 class="cmtt-12">[n]</span>/4 + <span
4298 class="cmtt-12">[blocksize_0]</span>/4
4299 </li>
4300 <li
4301 class="enumerate" id="x1-72030x3"><span
4302 class="cmtt-12">[left_n] </span>= <span
4303 class="cmtt-12">[blocksize_0]</span>/2</li></ol>
4304 <!--l. 335--><p class="noindent" >else
4305 <ol class="enumerate2" >
4306 <li
4307 class="enumerate" id="x1-72032x1"><span
4308 class="cmtt-12">[left_window_start] </span>= 0
4309 </li>
4310 <li
4311 class="enumerate" id="x1-72034x2"><span
4312 class="cmtt-12">[left_window_end] </span>= <span
4313 class="cmtt-12">[window_center]</span>
4317 </li>
4318 <li
4319 class="enumerate" id="x1-72036x3"><span
4320 class="cmtt-12">[left_n] </span>= <span
4321 class="cmtt-12">[n]</span>/2</li></ol>
4322 </li>
4323 <li
4324 class="enumerate" id="x1-72038x3">if (<span
4325 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
4326 class="cmtt-12">[next_window_flag] </span>is not set) then
4327 <ol class="enumerate2" >
4328 <li
4329 class="enumerate" id="x1-72040x1"><span
4330 class="cmtt-12">[right_window_start] </span>= <span
4331 class="cmtt-12">[n]*3</span>/4 - <span
4332 class="cmtt-12">[blocksize_0]</span>/4
4333 </li>
4334 <li
4335 class="enumerate" id="x1-72042x2"><span
4336 class="cmtt-12">[right_window_end] </span>= <span
4337 class="cmtt-12">[n]*3</span>/4 + <span
4338 class="cmtt-12">[blocksize_0]</span>/4
4339 </li>
4340 <li
4341 class="enumerate" id="x1-72044x3"><span
4342 class="cmtt-12">[right_n] </span>= <span
4343 class="cmtt-12">[blocksize_0]</span>/2</li></ol>
4344 <!--l. 351--><p class="noindent" >else
4345 <ol class="enumerate2" >
4346 <li
4347 class="enumerate" id="x1-72046x1"><span
4348 class="cmtt-12">[right_window_start] </span>= <span
4349 class="cmtt-12">[window_center]</span>
4350 </li>
4351 <li
4352 class="enumerate" id="x1-72048x2"><span
4353 class="cmtt-12">[right_window_end] </span>= <span
4354 class="cmtt-12">[n]</span>
4355 </li>
4356 <li
4357 class="enumerate" id="x1-72050x3"><span
4358 class="cmtt-12">[right_n] </span>= <span
4359 class="cmtt-12">[n]</span>/2</li></ol>
4360 </li>
4361 <li
4362 class="enumerate" id="x1-72052x4">window from range 0 ... <span
4363 class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
4364 </li>
4365 <li
4366 class="enumerate" id="x1-72054x5">for <span
4367 class="cmtt-12">[i] </span>in range <span
4368 class="cmtt-12">[left_window_start] </span>... <span
4369 class="cmtt-12">[left_window_end]</span>-1, window(<span
4370 class="cmtt-12">[i]</span>) =
4371 sin(<img
4372 src="Vorbis_I_spec2x.png" alt="&#x03C0;
4373 2" class="frac" align="middle"> <span
4374 class="cmsy-10x-x-120">*</span> sin <sup><span
4375 class="cmr-8">2</span></sup>( (<span
4376 class="cmtt-12">[i]</span>-<span
4377 class="cmtt-12">[left_window_start]</span>+0.5) / <span
4378 class="cmtt-12">[left_n] </span><span
4379 class="cmsy-10x-x-120">*</span><img
4380 src="Vorbis_I_spec3x.png" alt="&#x03C0;
4381 2" class="frac" align="middle">) )
4382 </li>
4383 <li
4384 class="enumerate" id="x1-72056x6">window from range <span
4385 class="cmtt-12">[left_window_end] </span>... <span
4386 class="cmtt-12">[right_window_start]</span>-1 inclusive is
4388 </li>
4389 <li
4390 class="enumerate" id="x1-72058x7">for <span
4391 class="cmtt-12">[i] </span>in range <span
4392 class="cmtt-12">[right_window_start] </span>... <span
4393 class="cmtt-12">[right_window_end]</span>-1, window(<span
4394 class="cmtt-12">[i]</span>) =
4395 sin(<img
4396 src="Vorbis_I_spec4x.png" alt="&#x03C0;
4397 2" class="frac" align="middle"> <span
4398 class="cmsy-10x-x-120">*</span> sin <sup><span
4399 class="cmr-8">2</span></sup>( (<span
4400 class="cmtt-12">[i]</span>-<span
4401 class="cmtt-12">[right_window_start]</span>+0.5) / <span
4402 class="cmtt-12">[right_n] </span><span
4403 class="cmsy-10x-x-120">*</span><img
4404 src="Vorbis_I_spec5x.png" alt="&#x03C0;
4405 2" class="frac" align="middle"> + <img
4406 src="Vorbis_I_spec6x.png" alt="&#x03C0;
4407 2" class="frac" align="middle">) )
4408 </li>
4409 <li
4410 class="enumerate" id="x1-72060x8">window from range <span
4411 class="cmtt-12">[right_window_start] </span>... <span
4412 class="cmtt-12">[n]</span>-1 is zero</li></ol>
4413 <!--l. 367--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
4414 packet from the stream. An end of packet condition past this point is to be considered a possible
4415 nominal occurrence.
4419 <!--l. 374--><p class="noindent" >
4420 <h5 class="subsubsectionHead"><span class="titlemark">4.3.2 </span> <a
4421 id="x1-730004.3.2"></a>floor curve decode</h5>
4422 <!--l. 376--><p class="noindent" >From this point on, we assume out decode context is using mode number <span
4423 class="cmtt-12">[mode_number]</span>
4424 from configuration array <span
4425 class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
4426 <span
4427 class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
4428 array <span
4429 class="cmtt-12">[vorbis_mapping_configurations]</span>.
4430 <!--l. 383--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
4431 <!--l. 385--><p class="noindent" >For each floor <span
4432 class="cmtt-12">[i] </span>of <span
4433 class="cmtt-12">[audio_channels]</span>
4434 <ol class="enumerate1" >
4435 <li
4436 class="enumerate" id="x1-73002x1"><span
4437 class="cmtt-12">[submap_number] </span>= element <span
4438 class="cmtt-12">[i] </span>of vector [vorbis&#x02D9;mapping&#x02D9;mux]
4439 </li>
4440 <li
4441 class="enumerate" id="x1-73004x2"><span
4442 class="cmtt-12">[floor_number] </span>= element <span
4443 class="cmtt-12">[submap_number] </span>of vector [vorbis&#x02D9;submap&#x02D9;floor]
4444 </li>
4445 <li
4446 class="enumerate" id="x1-73006x3">if the floor type of this floor (vector
4447 <span
4448 class="cmtt-12">[vorbis_floor_types] </span>element <span
4449 class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
4450 channel <span
4451 class="cmtt-12">[i] </span>according to the <a
4452 href="#x1-930006.2.2">subsubsection&#x00A0;6.2.2<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>, &#8220;<a
4453 href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>&#8221;
4454 </li>
4455 <li
4456 class="enumerate" id="x1-73008x4">if the type of this floor is one then decode the floor for channel <span
4457 class="cmtt-12">[i] </span>according to the
4459 href="#x1-1000007.2.2">paragraph&#x00A0;7.2.2<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>, &#8220;<a
4460 href="#x1-1000007.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>&#8221;
4461 </li>
4462 <li
4463 class="enumerate" id="x1-73010x5">save the needed decoded floor information for channel for later synthesis
4464 </li>
4465 <li
4466 class="enumerate" id="x1-73012x6">if the decoded floor returned &#8217;unused&#8217;, set vector <span
4467 class="cmtt-12">[no_residue] </span>element <span
4468 class="cmtt-12">[i] </span>to true,
4469 else set vector <span
4470 class="cmtt-12">[no_residue] </span>element <span
4471 class="cmtt-12">[i] </span>to false</li></ol>
4472 <!--l. 405--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
4473 output vectors and skipping to the add/overlap output stage.
4474 <!--l. 411--><p class="noindent" >
4475 <h5 class="subsubsectionHead"><span class="titlemark">4.3.3 </span> <a
4476 id="x1-740004.3.3"></a>nonzero vector propagate</h5>
4477 <!--l. 413--><p class="noindent" >A possible result of floor decode is that a specific vector is marked &#8217;unused&#8217; which indicates that
4478 that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
4479 coded in the stream, save for one complication. If some vectors are used and some are not,
4483 channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
4484 vectors.
4485 <!--l. 420--><p class="noindent" >for each <span
4486 class="cmtt-12">[i] </span>from 0 ... <span
4487 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
4488 <!--l. 422--><p class="noindent" >
4489 <ol class="enumerate1" >
4490 <li
4491 class="enumerate" id="x1-74002x1">if either <span
4492 class="cmtt-12">[no_residue] </span>entry for channel (<span
4493 class="cmtt-12">[vorbis_mapping_magnitude] </span>element
4494 <span
4495 class="cmtt-12">[i]</span>) or channel (<span
4496 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
4497 class="cmtt-12">[i]</span>) are set to false, then both
4498 must be set to false. Note that an &#8217;unused&#8217; floor has no decoded floor information; it
4499 is important that this is remembered at floor curve synthesis time.</li></ol>
4500 <!--l. 435--><p class="noindent" >
4501 <h5 class="subsubsectionHead"><span class="titlemark">4.3.4 </span> <a
4502 id="x1-750004.3.4"></a>residue decode</h5>
4503 <!--l. 437--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
4504 order.
4505 <!--l. 440--><p class="noindent" >for each submap <span
4506 class="cmtt-12">[i] </span>in order from 0 ... <span
4507 class="cmtt-12">[vorbis_mapping_submaps]</span>-1
4508 <!--l. 442--><p class="noindent" >
4509 <ol class="enumerate1" >
4510 <li
4511 class="enumerate" id="x1-75002x1"><span
4512 class="cmtt-12">[ch] </span>= 0
4513 </li>
4514 <li
4515 class="enumerate" id="x1-75004x2">for each channel <span
4516 class="cmtt-12">[j] </span>in order from 0 ... <span
4517 class="cmtt-12">[audio_channels] </span>- 1
4518 <ol class="enumerate2" >
4519 <li
4520 class="enumerate" id="x1-75006x1">if channel <span
4521 class="cmtt-12">[j] </span>in submap <span
4522 class="cmtt-12">[i] </span>(vector <span
4523 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
4524 class="cmtt-12">[j] </span>is equal to
4525 <span
4526 class="cmtt-12">[i]</span>)
4527 <ol class="enumerate3" >
4528 <li
4529 class="enumerate" id="x1-75008x1">if vector <span
4530 class="cmtt-12">[no_residue] </span>element <span
4531 class="cmtt-12">[j] </span>is true
4532 <ol class="enumerate4" >
4533 <li
4534 class="enumerate" id="x1-75010x1">vector <span
4535 class="cmtt-12">[do_not_decode_flag] </span>element <span
4536 class="cmtt-12">[ch] </span>is set</li></ol>
4537 <!--l. 452--><p class="noindent" >else
4538 <ol class="enumerate4" >
4539 <li
4540 class="enumerate" id="x1-75012x1">vector <span
4541 class="cmtt-12">[do_not_decode_flag] </span>element <span
4542 class="cmtt-12">[ch] </span>is unset</li></ol>
4543 </li>
4544 <li
4545 class="enumerate" id="x1-75014x2">increment <span
4546 class="cmtt-12">[ch]</span></li></ol>
4550 </li></ol>
4551 </li>
4552 <li
4553 class="enumerate" id="x1-75016x3"><span
4554 class="cmtt-12">[residue_number] </span>= vector <span
4555 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
4556 class="cmtt-12">[i]</span>
4557 </li>
4558 <li
4559 class="enumerate" id="x1-75018x4"><span
4560 class="cmtt-12">[residue_type] </span>= vector <span
4561 class="cmtt-12">[vorbis_residue_types] </span>element <span
4562 class="cmtt-12">[residue_number]</span>
4563 </li>
4564 <li
4565 class="enumerate" id="x1-75020x5">decode <span
4566 class="cmtt-12">[ch] </span>vectors using residue <span
4567 class="cmtt-12">[residue_number]</span>, according to type <span
4568 class="cmtt-12">[residue_type]</span>,
4569 also passing vector <span
4570 class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
4571 not be decoded. Correct per-vector decode length is <span
4572 class="cmtt-12">[n]</span>/2.
4573 </li>
4574 <li
4575 class="enumerate" id="x1-75022x6"><span
4576 class="cmtt-12">[ch] </span>= 0
4577 </li>
4578 <li
4579 class="enumerate" id="x1-75024x7">for each channel <span
4580 class="cmtt-12">[j] </span>in order from 0 ... <span
4581 class="cmtt-12">[audio_channels]</span>
4582 <ol class="enumerate2" >
4583 <li
4584 class="enumerate" id="x1-75026x1">if channel <span
4585 class="cmtt-12">[j] </span>is in submap <span
4586 class="cmtt-12">[i] </span>(vector <span
4587 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
4588 class="cmtt-12">[j] </span>is equal
4589 to <span
4590 class="cmtt-12">[i]</span>)
4591 <ol class="enumerate3" >
4592 <li
4593 class="enumerate" id="x1-75028x1">residue vector for channel <span
4594 class="cmtt-12">[j] </span>is set to decoded residue vector <span
4595 class="cmtt-12">[ch]</span>
4596 </li>
4597 <li
4598 class="enumerate" id="x1-75030x2">increment <span
4599 class="cmtt-12">[ch]</span></li></ol>
4600 </li></ol>
4601 </li></ol>
4602 <!--l. 479--><p class="noindent" >
4603 <h5 class="subsubsectionHead"><span class="titlemark">4.3.5 </span> <a
4604 id="x1-760004.3.5"></a>inverse coupling</h5>
4605 <!--l. 481--><p class="noindent" >for each <span
4606 class="cmtt-12">[i] </span>from <span
4607 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
4608 <!--l. 483--><p class="noindent" >
4609 <ol class="enumerate1" >
4610 <li
4611 class="enumerate" id="x1-76002x1"><span
4612 class="cmtt-12">[magnitude_vector] </span>= the residue vector for channel (vector
4613 <span
4614 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
4615 class="cmtt-12">[i]</span>)
4616 </li>
4617 <li
4618 class="enumerate" id="x1-76004x2"><span
4619 class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span
4620 class="cmtt-12">[vorbis_mapping_angle]</span>
4624 element <span
4625 class="cmtt-12">[i]</span>)
4626 </li>
4627 <li
4628 class="enumerate" id="x1-76006x3">for each scalar value <span
4629 class="cmtt-12">[M] </span>in vector <span
4630 class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
4631 <span
4632 class="cmtt-12">[A] </span>in vector <span
4633 class="cmtt-12">[angle_vector]</span>:
4634 <ol class="enumerate2" >
4635 <li
4636 class="enumerate" id="x1-76008x1">if (<span
4637 class="cmtt-12">[M] </span>is greater than zero)
4638 <ol class="enumerate3" >
4639 <li
4640 class="enumerate" id="x1-76010x1">if (<span
4641 class="cmtt-12">[A] </span>is greater than zero)
4642 <ol class="enumerate4" >
4643 <li
4644 class="enumerate" id="x1-76012x1"><span
4645 class="cmtt-12">[new_M] </span>= <span
4646 class="cmtt-12">[M]</span>
4647 </li>
4648 <li
4649 class="enumerate" id="x1-76014x2"><span
4650 class="cmtt-12">[new_A] </span>= <span
4651 class="cmtt-12">[M]</span>-<span
4652 class="cmtt-12">[A]</span></li></ol>
4653 <!--l. 497--><p class="noindent" >else
4654 <ol class="enumerate4" >
4655 <li
4656 class="enumerate" id="x1-76016x1"><span
4657 class="cmtt-12">[new_A] </span>= <span
4658 class="cmtt-12">[M]</span>
4659 </li>
4660 <li
4661 class="enumerate" id="x1-76018x2"><span
4662 class="cmtt-12">[new_M] </span>= <span
4663 class="cmtt-12">[M]</span>+<span
4664 class="cmtt-12">[A]</span></li></ol>
4665 </li></ol>
4666 <!--l. 504--><p class="noindent" >else
4667 <ol class="enumerate3" >
4668 <li
4669 class="enumerate" id="x1-76020x1">if (<span
4670 class="cmtt-12">[A] </span>is greater than zero)
4671 <ol class="enumerate4" >
4672 <li
4673 class="enumerate" id="x1-76022x1"><span
4674 class="cmtt-12">[new_M] </span>= <span
4675 class="cmtt-12">[M]</span>
4676 </li>
4677 <li
4678 class="enumerate" id="x1-76024x2"><span
4679 class="cmtt-12">[new_A] </span>= <span
4680 class="cmtt-12">[M]</span>+<span
4681 class="cmtt-12">[A]</span></li></ol>
4682 <!--l. 511--><p class="noindent" >else
4683 <ol class="enumerate4" >
4684 <li
4685 class="enumerate" id="x1-76026x1"><span
4686 class="cmtt-12">[new_A] </span>= <span
4687 class="cmtt-12">[M]</span>
4688 </li>
4689 <li
4690 class="enumerate" id="x1-76028x2"><span
4691 class="cmtt-12">[new_M] </span>= <span
4692 class="cmtt-12">[M]</span>-<span
4693 class="cmtt-12">[A]</span></li></ol>
4694 </li></ol>
4695 </li>
4696 <li
4697 class="enumerate" id="x1-76030x2">set scalar value <span
4698 class="cmtt-12">[M] </span>in vector <span
4699 class="cmtt-12">[magnitude_vector] </span>to <span
4700 class="cmtt-12">[new_M]</span>
4704 </li>
4705 <li
4706 class="enumerate" id="x1-76032x3">set scalar value <span
4707 class="cmtt-12">[A] </span>in vector <span
4708 class="cmtt-12">[angle_vector] </span>to <span
4709 class="cmtt-12">[new_A]</span></li></ol>
4710 </li></ol>
4711 <!--l. 528--><p class="noindent" >
4712 <h5 class="subsubsectionHead"><span class="titlemark">4.3.6 </span> <a
4713 id="x1-770004.3.6"></a>dot product</h5>
4714 <!--l. 530--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
4715 packet type. Note that the vector synthesis length for floor computation is <span
4716 class="cmtt-12">[n]</span>/2.
4717 <!--l. 534--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
4718 channel&#8217;s residue vector. The result is the dot product of the floor and residue vectors for
4719 each channel; the produced vectors are the length <span
4720 class="cmtt-12">[n]</span>/2 audio spectrum for each
4721 channel.
4722 <!--l. 542--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
4723 implementation might be to assume that a 32 bit fixed-point representation for floor and
4724 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
4725 in all cases because it happens to mostly work with the current Xiph.Org reference
4726 encoder.
4727 <!--l. 549--><p class="noindent" >However, floor vector values can span <span
4728 class="cmsy-10x-x-120">~</span>140dB (<span
4729 class="cmsy-10x-x-120">~</span>24 bits unsigned), and the audio spectrum
4730 vector should represent a minimum of 120dB (<span
4731 class="cmsy-10x-x-120">~</span>21 bits with sign), even when output is to a 16
4732 bit PCM device. For the residue vector to represent full scale if the floor is nailed
4733 to <span
4734 class="cmsy-10x-x-120">-</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
4735 full scale if the floor is nailed at 0dB, it must be able to represent <span
4736 class="cmsy-10x-x-120">-</span>140dB to +0dB.
4737 Thus, in order to handle full range dynamics, a residue vector may span <span
4738 class="cmsy-10x-x-120">-</span>140dB to
4739 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
4740 residue vector must be able to represent a 48 bit range and the dot product must
4741 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
4742 achieved using large (64 bit or larger) integers, or implementing a movable binary point
4743 representation.
4744 <!--l. 566--><p class="noindent" >
4745 <h5 class="subsubsectionHead"><span class="titlemark">4.3.7 </span> <a
4746 id="x1-780004.3.7"></a>inverse MDCT</h5>
4747 <!--l. 568--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
4751 inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
4752 available in <span class="cite">[<a
4753 href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
4754 earlier.
4755 <!--l. 575--><p class="noindent" >
4756 <h5 class="subsubsectionHead"><span class="titlemark">4.3.8 </span> <a
4757 id="x1-790004.3.8"></a>overlap&#x02D9;add</h5>
4758 <!--l. 577--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
4759 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
4760 current window (as illustrated in <a
4761 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2<!--tex4ht:ref: vorbis:spec:window --></a>, &#8220;<a
4762 href="#x1-260001.3.2">Window shape decode (long windows
4763 only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;). The overlapped portion produced from overlapping the previous and current frame data
4764 is finished data to be returned by the decoder. This data spans from the center of
4765 the previous window to the center of the current window. In the case of same-sized
4766 windows, the amount of data to return is one-half block consisting of and only of the
4767 overlapped portions. When overlapping a short and long window, much of the returned
4768 range does not actually overlap. This does not damage transform orthogonality. Pay
4769 attention however to returning the correct data range; the amount of data to be returned
4771 <!--l. 591--><p class="noindent" >
4772 <div class="fancyvrb" id="fancyvrb22">
4774 id="x1-79002r1"></a><span
4775 class="cmr-6">1</span><span
4776 class="cmtt-8">&#x00A0;</span><span
4777 class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
4778 </div>
4779 <!--l. 595--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
4780 windowsize/2-1, inclusive) of the current window.
4781 <!--l. 598--><p class="noindent" >Data is not returned from the first frame; it must be used to &#8217;prime&#8217; the decode engine. The
4782 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
4783 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
4784 <!--l. 605--><p class="noindent" >
4785 <h5 class="subsubsectionHead"><span class="titlemark">4.3.9 </span> <a
4786 id="x1-800004.3.9"></a>output channel order</h5>
4787 <!--l. 607--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
4788 implicitly defined as follows for standard audio applications:
4789 <!--l. 611--><p class="noindent" >
4793 <dl class="description"><dt class="description">
4794 <span
4795 class="cmssbx-10x-x-120">three channels</span> </dt><dd
4796 class="description">the stream is monophonic
4797 </dd><dt class="description">
4798 <span
4799 class="cmssbx-10x-x-120">two channels</span> </dt><dd
4800 class="description">the stream is stereo. channel order: left, right
4801 </dd><dt class="description">
4802 <span
4803 class="cmssbx-10x-x-120">three channels</span> </dt><dd
4804 class="description">the stream is a 1d-surround encoding. channel order: left, center, right
4805 </dd><dt class="description">
4806 <span
4807 class="cmssbx-10x-x-120">four channels</span> </dt><dd
4808 class="description">the stream is quadraphonic surround. channel order: front left, front right,
4809 rear left, rear right
4810 </dd><dt class="description">
4811 <span
4812 class="cmssbx-10x-x-120">five channels</span> </dt><dd
4813 class="description">the stream is five-channel surround. channel order: front left, front center,
4814 front right, rear left, rear right
4815 </dd><dt class="description">
4816 <span
4817 class="cmssbx-10x-x-120">six channels</span> </dt><dd
4818 class="description">the stream is 5.1 surround. channel order: front left, front center, front right,
4819 rear left, rear right, LFE
4820 </dd><dt class="description">
4821 <span
4822 class="cmssbx-10x-x-120">greater than six channels</span> </dt><dd
4823 class="description">channel use and order is defined by the application
4824 </dd></dl>
4825 <!--l. 639--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
4826 channel mappings (such as three and four channel <a
4827 href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
4828 mappings other than mapping 0.
4835 <h3 class="sectionHead"><span class="titlemark">5 </span> <a
4836 id="x1-810005"></a>comment field and header specification</h3>
4837 <!--l. 6--><p class="noindent" >
4838 <h4 class="subsectionHead"><span class="titlemark">5.1 </span> <a
4839 id="x1-820005.1"></a>Overview</h4>
4840 <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
4841 bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
4842 belongs in a separate logical bitstream (usually an XML stream type) that provides greater
4843 structure and machine parseability.
4844 <!--l. 14--><p class="noindent" >The comment field is meant to be used much like someone jotting a quick note on the bottom of
4845 a CDR. It should be a little information to remember the disc by and explain it to others; a
4846 short, to-the-point text note that need not only be a couple words, but isn&#8217;t going to be more
4847 than a short paragraph. The essentials, in other words, whatever they turn out to be,
4849 <!--l. 21--><p class="noindent" >
4850 <div class="quote">
4851 <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span
4852 class="cmti-12">&#8220;I&#8217;m Still Around&#8221;</span>, opening
4853 for Moxy Früvous, 1997.</div>
4854 <!--l. 29--><p class="noindent" >
4855 <h4 class="subsectionHead"><span class="titlemark">5.2 </span> <a
4856 id="x1-830005.2"></a>Comment encoding</h4>
4857 <!--l. 31--><p class="noindent" >
4858 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1 </span> <a
4859 id="x1-840005.2.1"></a>Structure</h5>
4860 <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
4861 bounded to 2<sup><span
4862 class="cmr-8">32</span></sup> <span
4863 class="cmsy-10x-x-120">- </span>1 and the length of each vector is limited to 2<sup><span
4864 class="cmr-8">32</span></sup> <span
4865 class="cmsy-10x-x-120">- </span>1 bytes. The vector length is
4869 encoded; the vector contents themselves are not null terminated. In addition to the vector list,
4870 there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
4871 example, the 1.0 release of libvorbis set the vendor string to &#8220;Xiph.Org libVorbis I
4872 20020717&#8221;.
4873 <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
4874 packing conventions of the vorbis codec. However, since data in the comment header
4875 is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
4876 integers.
4877 <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
4878 <!--l. 48--><p class="noindent" >
4879 <div class="fancyvrb" id="fancyvrb23">
4881 id="x1-84002r1"></a><span
4882 class="cmr-6">1</span><span
4883 class="cmtt-8">&#x00A0;</span><span
4884 class="cmtt-8">&#x00A0;</span><span
4885 class="cmtt-8">&#x00A0;</span><span
4886 class="cmtt-8">&#x00A0;1)</span><span
4887 class="cmtt-8">&#x00A0;[vendor_length]</span><span
4888 class="cmtt-8">&#x00A0;=</span><span
4889 class="cmtt-8">&#x00A0;read</span><span
4890 class="cmtt-8">&#x00A0;an</span><span
4891 class="cmtt-8">&#x00A0;unsigned</span><span
4892 class="cmtt-8">&#x00A0;integer</span><span
4893 class="cmtt-8">&#x00A0;of</span><span
4894 class="cmtt-8">&#x00A0;32</span><span
4895 class="cmtt-8">&#x00A0;bits</span>
4896 <br class="fancyvrb" /><a
4897 id="x1-84004r2"></a><span
4898 class="cmr-6">2</span><span
4899 class="cmtt-8">&#x00A0;</span><span
4900 class="cmtt-8">&#x00A0;</span><span
4901 class="cmtt-8">&#x00A0;</span><span
4902 class="cmtt-8">&#x00A0;2)</span><span
4903 class="cmtt-8">&#x00A0;[vendor_string]</span><span
4904 class="cmtt-8">&#x00A0;=</span><span
4905 class="cmtt-8">&#x00A0;read</span><span
4906 class="cmtt-8">&#x00A0;a</span><span
4907 class="cmtt-8">&#x00A0;UTF-8</span><span
4908 class="cmtt-8">&#x00A0;vector</span><span
4909 class="cmtt-8">&#x00A0;as</span><span
4910 class="cmtt-8">&#x00A0;[vendor_length]</span><span
4911 class="cmtt-8">&#x00A0;octets</span>
4912 <br class="fancyvrb" /><a
4913 id="x1-84006r3"></a><span
4914 class="cmr-6">3</span><span
4915 class="cmtt-8">&#x00A0;</span><span
4916 class="cmtt-8">&#x00A0;</span><span
4917 class="cmtt-8">&#x00A0;</span><span
4918 class="cmtt-8">&#x00A0;3)</span><span
4919 class="cmtt-8">&#x00A0;[user_comment_list_length]</span><span
4920 class="cmtt-8">&#x00A0;=</span><span
4921 class="cmtt-8">&#x00A0;read</span><span
4922 class="cmtt-8">&#x00A0;an</span><span
4923 class="cmtt-8">&#x00A0;unsigned</span><span
4924 class="cmtt-8">&#x00A0;integer</span><span
4925 class="cmtt-8">&#x00A0;of</span><span
4926 class="cmtt-8">&#x00A0;32</span><span
4927 class="cmtt-8">&#x00A0;bits</span>
4928 <br class="fancyvrb" /><a
4929 id="x1-84008r4"></a><span
4930 class="cmr-6">4</span><span
4931 class="cmtt-8">&#x00A0;</span><span
4932 class="cmtt-8">&#x00A0;</span><span
4933 class="cmtt-8">&#x00A0;</span><span
4934 class="cmtt-8">&#x00A0;4)</span><span
4935 class="cmtt-8">&#x00A0;iterate</span><span
4936 class="cmtt-8">&#x00A0;[user_comment_list_length]</span><span
4937 class="cmtt-8">&#x00A0;times</span><span
4938 class="cmtt-8">&#x00A0;{</span>
4939 <br class="fancyvrb" /><a
4940 id="x1-84010r5"></a><span
4941 class="cmr-6">5</span><span
4942 class="cmtt-8">&#x00A0;</span><span
4943 class="cmtt-8">&#x00A0;</span><span
4944 class="cmtt-8">&#x00A0;</span><span
4945 class="cmtt-8">&#x00A0;</span><span
4946 class="cmtt-8">&#x00A0;</span><span
4947 class="cmtt-8">&#x00A0;</span><span
4948 class="cmtt-8">&#x00A0;</span><span
4949 class="cmtt-8">&#x00A0;</span><span
4950 class="cmtt-8">&#x00A0;5)</span><span
4951 class="cmtt-8">&#x00A0;[length]</span><span
4952 class="cmtt-8">&#x00A0;=</span><span
4953 class="cmtt-8">&#x00A0;read</span><span
4954 class="cmtt-8">&#x00A0;an</span><span
4955 class="cmtt-8">&#x00A0;unsigned</span><span
4956 class="cmtt-8">&#x00A0;integer</span><span
4957 class="cmtt-8">&#x00A0;of</span><span
4958 class="cmtt-8">&#x00A0;32</span><span
4959 class="cmtt-8">&#x00A0;bits</span>
4960 <br class="fancyvrb" /><a
4961 id="x1-84012r6"></a><span
4962 class="cmr-6">6</span><span
4963 class="cmtt-8">&#x00A0;</span><span
4964 class="cmtt-8">&#x00A0;</span><span
4965 class="cmtt-8">&#x00A0;</span><span
4966 class="cmtt-8">&#x00A0;</span><span
4967 class="cmtt-8">&#x00A0;</span><span
4968 class="cmtt-8">&#x00A0;</span><span
4969 class="cmtt-8">&#x00A0;</span><span
4970 class="cmtt-8">&#x00A0;</span><span
4971 class="cmtt-8">&#x00A0;6)</span><span
4972 class="cmtt-8">&#x00A0;this</span><span
4973 class="cmtt-8">&#x00A0;iteration&#8217;s</span><span
4974 class="cmtt-8">&#x00A0;user</span><span
4975 class="cmtt-8">&#x00A0;comment</span><span
4976 class="cmtt-8">&#x00A0;=</span><span
4977 class="cmtt-8">&#x00A0;read</span><span
4978 class="cmtt-8">&#x00A0;a</span><span
4979 class="cmtt-8">&#x00A0;UTF-8</span><span
4980 class="cmtt-8">&#x00A0;vector</span><span
4981 class="cmtt-8">&#x00A0;as</span><span
4982 class="cmtt-8">&#x00A0;[length]</span><span
4983 class="cmtt-8">&#x00A0;octets</span>
4984 <br class="fancyvrb" /><a
4985 id="x1-84014r7"></a><span
4986 class="cmr-6">7</span><span
4987 class="cmtt-8">&#x00A0;</span><span
4988 class="cmtt-8">&#x00A0;</span><span
4989 class="cmtt-8">&#x00A0;</span><span
4990 class="cmtt-8">&#x00A0;</span><span
4991 class="cmtt-8">&#x00A0;</span><span
4992 class="cmtt-8">&#x00A0;</span><span
4993 class="cmtt-8">&#x00A0;}</span>
4994 <br class="fancyvrb" /><a
4995 id="x1-84016r8"></a><span
4996 class="cmr-6">8</span><span
4997 class="cmtt-8">&#x00A0;</span><span
4998 class="cmtt-8">&#x00A0;</span><span
4999 class="cmtt-8">&#x00A0;</span><span
5000 class="cmtt-8">&#x00A0;7)</span><span
5001 class="cmtt-8">&#x00A0;[framing_bit]</span><span
5002 class="cmtt-8">&#x00A0;=</span><span
5003 class="cmtt-8">&#x00A0;read</span><span
5004 class="cmtt-8">&#x00A0;a</span><span
5005 class="cmtt-8">&#x00A0;single</span><span
5006 class="cmtt-8">&#x00A0;bit</span><span
5007 class="cmtt-8">&#x00A0;as</span><span
5008 class="cmtt-8">&#x00A0;boolean</span>
5009 <br class="fancyvrb" /><a
5010 id="x1-84018r9"></a><span
5011 class="cmr-6">9</span><span
5012 class="cmtt-8">&#x00A0;</span><span
5013 class="cmtt-8">&#x00A0;</span><span
5014 class="cmtt-8">&#x00A0;</span><span
5015 class="cmtt-8">&#x00A0;8)</span><span
5016 class="cmtt-8">&#x00A0;if</span><span
5017 class="cmtt-8">&#x00A0;(</span><span
5018 class="cmtt-8">&#x00A0;[framing_bit]</span><span
5019 class="cmtt-8">&#x00A0;unset</span><span
5020 class="cmtt-8">&#x00A0;or</span><span
5021 class="cmtt-8">&#x00A0;end-of-packet</span><span
5022 class="cmtt-8">&#x00A0;)</span><span
5023 class="cmtt-8">&#x00A0;then</span><span
5024 class="cmtt-8">&#x00A0;ERROR</span>
5025 <br class="fancyvrb" /><a
5026 id="x1-84020r10"></a><span
5027 class="cmr-6">10</span><span
5028 class="cmtt-8">&#x00A0;</span><span
5029 class="cmtt-8">&#x00A0;</span><span
5030 class="cmtt-8">&#x00A0;</span><span
5031 class="cmtt-8">&#x00A0;9)</span><span
5032 class="cmtt-8">&#x00A0;done.</span>
5033 </div>
5034 <!--l. 64--><p class="noindent" >
5035 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2 </span> <a
5036 id="x1-850005.2.2"></a>Content vector format</h5>
5037 <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
5038 comment fields consist of a field name and a corresponding value and look like:
5039 <!--l. 70--><p class="noindent" >
5040 <div class="quote">
5041 <!--l. 71--><p class="noindent" >
5042 <div class="fancyvrb" id="fancyvrb24">
5044 id="x1-85002r1"></a><span
5045 class="cmr-6">1</span><span
5046 class="cmtt-8">&#x00A0;</span><span
5047 class="cmtt-8">&#x00A0;comment[0]="ARTIST=me";</span>
5048 <br class="fancyvrb" /><a
5049 id="x1-85004r2"></a><span
5050 class="cmr-6">2</span><span
5051 class="cmtt-8">&#x00A0;</span><span
5052 class="cmtt-8">&#x00A0;comment[1]="TITLE=the</span><span
5053 class="cmtt-8">&#x00A0;sound</span><span
5054 class="cmtt-8">&#x00A0;of</span><span
5055 class="cmtt-8">&#x00A0;Vorbis";</span>
5056 </div>
5057 </div>
5061 <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (&#8217;=&#8217;)
5062 excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
5063 ASCII 0x61 through 0x7A inclusive (characters a-z).
5064 <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (&#8217;=&#8217;); this equals sign is used to
5065 terminate the field name.
5066 <!--l. 87--><p class="noindent" >0x3D is followed by 8 bit clean UTF-8 encoded value of the field contents to the end of the
5067 field.
5068 <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a
5069 id="x1-860005.2.2"></a><span
5070 class="cmbx-12">Field names</span></span>
5071 Below is a proposed, minimal list of standard field names with a description of intended use. No
5072 single or group of field names is mandatory; a comment header may contain one, all or none of
5073 the names in this list.
5074 <!--l. 98--><p class="noindent" >
5075 <dl class="description"><dt class="description">
5076 <span
5077 class="cmssbx-10x-x-120">TITLE</span> </dt><dd
5078 class="description">Track/Work name
5079 </dd><dt class="description">
5080 <span
5081 class="cmssbx-10x-x-120">VERSION</span> </dt><dd
5082 class="description">The version field may be used to differentiate multiple versions of the same
5083 track title in a single collection. (e.g. remix info)
5084 </dd><dt class="description">
5085 <span
5086 class="cmssbx-10x-x-120">ALBUM</span> </dt><dd
5087 class="description">The collection name to which this track belongs
5088 </dd><dt class="description">
5089 <span
5090 class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd
5091 class="description">The track number of this piece if part of a specific larger collection or
5092 album
5093 </dd><dt class="description">
5094 <span
5095 class="cmssbx-10x-x-120">ARTIST</span> </dt><dd
5096 class="description">The artist generally considered responsible for the work. In popular music this is
5097 usually the performing band or singer. For classical music it would be the composer.
5098 For an audio book it would be the author of the original text.
5099 </dd><dt class="description">
5100 <span
5101 class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd
5102 class="description">The artist(s) who performed the work. In classical music this would be the
5103 conductor, orchestra, soloists. In an audio book it would be the actor who did the
5104 reading. In popular music this is typically the same as the ARTIST and is omitted.
5105 </dd><dt class="description">
5106 <span
5107 class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd
5108 class="description">Copyright attribution, e.g., &#8217;2001 Nobody&#8217;s Band&#8217; or &#8217;1999 Jack Moffitt&#8217;
5109 </dd><dt class="description">
5113 <span
5114 class="cmssbx-10x-x-120">LICENSE</span> </dt><dd
5115 class="description">License information, eg, &#8217;All Rights Reserved&#8217;, &#8217;Any Use Permitted&#8217;, a URL to
5116 a license such as a Creative
5117 Commons license (&#8221;www.creativecommons.org/blahblah/license.html&#8221;) or the EFF
5118 Open Audio License (&#8217;distributed under the terms of the Open Audio License. see
5119 http://www.eff.org/IP/Open&#x02D9;licenses/eff&#x02D9;oal.html for details&#8217;), etc.
5120 </dd><dt class="description">
5121 <span
5122 class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd
5123 class="description">Name of the organization producing the track (i.e. the &#8217;record label&#8217;)
5124 </dd><dt class="description">
5125 <span
5126 class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd
5127 class="description">A short text description of the contents
5128 </dd><dt class="description">
5129 <span
5130 class="cmssbx-10x-x-120">GENRE</span> </dt><dd
5131 class="description">A short text indication of music genre
5132 </dd><dt class="description">
5133 <span
5134 class="cmssbx-10x-x-120">DATE</span> </dt><dd
5135 class="description">Date the track was recorded
5136 </dd><dt class="description">
5137 <span
5138 class="cmssbx-10x-x-120">LOCATION</span> </dt><dd
5139 class="description">Location where track was recorded
5140 </dd><dt class="description">
5141 <span
5142 class="cmssbx-10x-x-120">CONTACT</span> </dt><dd
5143 class="description">Contact information for the creators or distributors of the track. This could
5144 be a URL, an email address, the physical address of the producing label.
5145 </dd><dt class="description">
5146 <span
5147 class="cmssbx-10x-x-120">ISRC</span> </dt><dd
5148 class="description">International Standard Recording Code for the track; see <a
5149 href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
5150 more information on ISRC numbers.
5151 </dd></dl>
5152 <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a
5153 id="x1-870005.2.2"></a><span
5154 class="cmbx-12">Implications</span></span>
5155 Field names should not be &#8217;internationalized&#8217;; this is a concession to simplicity not
5156 an attempt to exclude the majority of the world that doesn&#8217;t speak English. Field
5157 <span
5158 class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
5159 language.
5160 <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
5161 the field name is bounded in a known way. Thus we also have the length of the field
5162 contents.
5163 <!--l. 170--><p class="noindent" >Individual &#8217;vendors&#8217; may use non-standard field names within reason. The proper
5164 use of comment fields should be clear through context at this point. Abuse will be
5165 discouraged.
5169 <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to &#8217;nonstandard&#8217; field names. Vendors should make some effort
5170 to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
5171 tags here to help with standardization.
5172 <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
5173 example, assume a track was recorded by three well know artists; the following is permissible,
5174 and encouraged:
5175 <!--l. 183--><p class="noindent" >
5176 <div class="quote">
5177 <!--l. 184--><p class="noindent" >
5178 <div class="fancyvrb" id="fancyvrb25">
5180 id="x1-87002r1"></a><span
5181 class="cmr-6">1</span><span
5182 class="cmtt-8">&#x00A0;</span><span
5183 class="cmtt-8">&#x00A0;ARTIST=Dizzy</span><span
5184 class="cmtt-8">&#x00A0;Gillespie</span>
5185 <br class="fancyvrb" /><a
5186 id="x1-87004r2"></a><span
5187 class="cmr-6">2</span><span
5188 class="cmtt-8">&#x00A0;</span><span
5189 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
5190 class="cmtt-8">&#x00A0;Rollins</span>
5191 <br class="fancyvrb" /><a
5192 id="x1-87006r3"></a><span
5193 class="cmr-6">3</span><span
5194 class="cmtt-8">&#x00A0;</span><span
5195 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
5196 class="cmtt-8">&#x00A0;Stitt</span>
5197 </div>
5198 </div>
5199 <!--l. 197--><p class="noindent" >
5200 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3 </span> <a
5201 id="x1-880005.2.3"></a>Encoding</h5>
5202 <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
5203 first bitstream header packet, it is not generally the only packet on the second page and may not
5204 be restricted to within the second bitstream page. The length of the comment header packet is
5205 (practically) unbounded. The comment header packet is not optional; it must be present in the
5206 bitstream even if it is effectively empty.
5207 <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg&#8217;s standard bitstream mapping which
5208 renders least-significant-bit of the word to be coded into the least significant available bit of the
5209 current bitstream octet first):
5210 <!--l. 212--><p class="noindent" >
5211 <ol class="enumerate1" >
5212 <li
5213 class="enumerate" id="x1-88002x1">Vendor string length (32 bit unsigned quantity specifying number of octets)
5214 </li>
5215 <li
5216 class="enumerate" id="x1-88004x2">Vendor string ([vendor string length] octets coded from beginning of string to end of
5217 string, not null terminated)
5221 </li>
5222 <li
5223 class="enumerate" id="x1-88006x3">Number of comment fields (32 bit unsigned quantity specifying number of fields)
5224 </li>
5225 <li
5226 class="enumerate" id="x1-88008x4">Comment field 0 length (if [Number of comment fields] <span
5227 class="cmmi-12">&#x003E; </span>0; 32 bit unsigned quantity
5228 specifying number of octets)
5229 </li>
5230 <li
5231 class="enumerate" id="x1-88010x5">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
5232 end of string, not null terminated)
5233 </li>
5234 <li
5235 class="enumerate" id="x1-88012x6">Comment field 1 length (if [Number of comment fields] <span
5236 class="cmmi-12">&#x003E; </span>1...)...
5237 </li></ol>
5238 <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
5239 in <span
5240 class="cmtt-12">vorbis/lib/info.c</span>, <span
5241 class="cmtt-12">_vorbis_pack_comment() </span>and <span
5242 class="cmtt-12">_vorbis_unpack_comment()</span>.
5249 <h3 class="sectionHead"><span class="titlemark">6 </span> <a
5250 id="x1-890006"></a>Floor type 0 setup and decode</h3>
5251 <!--l. 6--><p class="noindent" >
5252 <h4 class="subsectionHead"><span class="titlemark">6.1 </span> <a
5253 id="x1-900006.1"></a>Overview</h4>
5254 <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
5255 Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
5256 response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
5257 impulse response filter as would be used in linear predictive coding; LSP representation may be
5258 converted to LPC representation and vice-versa.
5259 <!--l. 18--><p class="noindent" >
5260 <h4 class="subsectionHead"><span class="titlemark">6.2 </span> <a
5261 id="x1-910006.2"></a>Floor 0 format</h4>
5262 <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
5263 coding/decoding the LSP filter coefficient values used by each frame.
5264 <!--l. 24--><p class="noindent" >
5265 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1 </span> <a
5266 id="x1-920006.2.1"></a>header decode</h5>
5267 <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
5268 packet). configuration decode proceeds as follows:
5269 <!--l. 30--><p class="noindent" >
5270 <div class="fancyvrb" id="fancyvrb26">
5272 id="x1-92002r1"></a><span
5273 class="cmr-6">1</span><span
5274 class="cmtt-8">&#x00A0;</span><span
5275 class="cmtt-8">&#x00A0;</span><span
5276 class="cmtt-8">&#x00A0;</span><span
5277 class="cmtt-8">&#x00A0;1)</span><span
5278 class="cmtt-8">&#x00A0;[floor0_order]</span><span
5279 class="cmtt-8">&#x00A0;=</span><span
5280 class="cmtt-8">&#x00A0;read</span><span
5281 class="cmtt-8">&#x00A0;an</span><span
5282 class="cmtt-8">&#x00A0;unsigned</span><span
5283 class="cmtt-8">&#x00A0;integer</span><span
5284 class="cmtt-8">&#x00A0;of</span><span
5285 class="cmtt-8">&#x00A0;8</span><span
5286 class="cmtt-8">&#x00A0;bits</span>
5287 <br class="fancyvrb" /><a
5288 id="x1-92004r2"></a><span
5289 class="cmr-6">2</span><span
5290 class="cmtt-8">&#x00A0;</span><span
5291 class="cmtt-8">&#x00A0;</span><span
5292 class="cmtt-8">&#x00A0;</span><span
5293 class="cmtt-8">&#x00A0;2)</span><span
5294 class="cmtt-8">&#x00A0;[floor0_rate]</span><span
5295 class="cmtt-8">&#x00A0;=</span><span
5296 class="cmtt-8">&#x00A0;read</span><span
5297 class="cmtt-8">&#x00A0;an</span><span
5298 class="cmtt-8">&#x00A0;unsigned</span><span
5299 class="cmtt-8">&#x00A0;integer</span><span
5300 class="cmtt-8">&#x00A0;of</span><span
5301 class="cmtt-8">&#x00A0;16</span><span
5302 class="cmtt-8">&#x00A0;bits</span>
5303 <br class="fancyvrb" /><a
5304 id="x1-92006r3"></a><span
5305 class="cmr-6">3</span><span
5306 class="cmtt-8">&#x00A0;</span><span
5307 class="cmtt-8">&#x00A0;</span><span
5308 class="cmtt-8">&#x00A0;</span><span
5309 class="cmtt-8">&#x00A0;3)</span><span
5310 class="cmtt-8">&#x00A0;[floor0_bark_map_size]</span><span
5311 class="cmtt-8">&#x00A0;=</span><span
5312 class="cmtt-8">&#x00A0;read</span><span
5313 class="cmtt-8">&#x00A0;an</span><span
5314 class="cmtt-8">&#x00A0;unsigned</span><span
5315 class="cmtt-8">&#x00A0;integer</span><span
5316 class="cmtt-8">&#x00A0;of</span><span
5317 class="cmtt-8">&#x00A0;16</span><span
5318 class="cmtt-8">&#x00A0;bits</span>
5319 <br class="fancyvrb" /><a
5320 id="x1-92008r4"></a><span
5321 class="cmr-6">4</span><span
5322 class="cmtt-8">&#x00A0;</span><span
5323 class="cmtt-8">&#x00A0;</span><span
5324 class="cmtt-8">&#x00A0;</span><span
5325 class="cmtt-8">&#x00A0;4)</span><span
5326 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
5327 class="cmtt-8">&#x00A0;=</span><span
5328 class="cmtt-8">&#x00A0;read</span><span
5329 class="cmtt-8">&#x00A0;an</span><span
5330 class="cmtt-8">&#x00A0;unsigned</span><span
5331 class="cmtt-8">&#x00A0;integer</span><span
5332 class="cmtt-8">&#x00A0;of</span><span
5333 class="cmtt-8">&#x00A0;six</span><span
5334 class="cmtt-8">&#x00A0;bits</span>
5335 <br class="fancyvrb" /><a
5336 id="x1-92010r5"></a><span
5337 class="cmr-6">5</span><span
5338 class="cmtt-8">&#x00A0;</span><span
5339 class="cmtt-8">&#x00A0;</span><span
5340 class="cmtt-8">&#x00A0;</span><span
5341 class="cmtt-8">&#x00A0;5)</span><span
5342 class="cmtt-8">&#x00A0;[floor0_amplitude_offset]</span><span
5343 class="cmtt-8">&#x00A0;=</span><span
5344 class="cmtt-8">&#x00A0;read</span><span
5345 class="cmtt-8">&#x00A0;an</span><span
5346 class="cmtt-8">&#x00A0;unsigned</span><span
5347 class="cmtt-8">&#x00A0;integer</span><span
5348 class="cmtt-8">&#x00A0;of</span><span
5349 class="cmtt-8">&#x00A0;eight</span><span
5350 class="cmtt-8">&#x00A0;bits</span>
5351 <br class="fancyvrb" /><a
5352 id="x1-92012r6"></a><span
5353 class="cmr-6">6</span><span
5354 class="cmtt-8">&#x00A0;</span><span
5355 class="cmtt-8">&#x00A0;</span><span
5356 class="cmtt-8">&#x00A0;</span><span
5357 class="cmtt-8">&#x00A0;6)</span><span
5358 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
5359 class="cmtt-8">&#x00A0;=</span><span
5360 class="cmtt-8">&#x00A0;read</span><span
5361 class="cmtt-8">&#x00A0;an</span><span
5362 class="cmtt-8">&#x00A0;unsigned</span><span
5363 class="cmtt-8">&#x00A0;integer</span><span
5364 class="cmtt-8">&#x00A0;of</span><span
5365 class="cmtt-8">&#x00A0;four</span><span
5366 class="cmtt-8">&#x00A0;bits</span><span
5367 class="cmtt-8">&#x00A0;and</span><span
5368 class="cmtt-8">&#x00A0;add</span><span
5369 class="cmtt-8">&#x00A0;1</span>
5370 <br class="fancyvrb" /><a
5371 id="x1-92014r7"></a><span
5372 class="cmr-6">7</span><span
5373 class="cmtt-8">&#x00A0;</span><span
5374 class="cmtt-8">&#x00A0;</span><span
5375 class="cmtt-8">&#x00A0;</span><span
5376 class="cmtt-8">&#x00A0;7)</span><span
5377 class="cmtt-8">&#x00A0;array</span><span
5378 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
5379 class="cmtt-8">&#x00A0;=</span><span
5380 class="cmtt-8">&#x00A0;read</span><span
5381 class="cmtt-8">&#x00A0;a</span><span
5382 class="cmtt-8">&#x00A0;list</span><span
5383 class="cmtt-8">&#x00A0;of</span><span
5384 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
5385 class="cmtt-8">&#x00A0;unsigned</span><span
5386 class="cmtt-8">&#x00A0;integers</span><span
5387 class="cmtt-8">&#x00A0;of</span><span
5388 class="cmtt-8">&#x00A0;eight</span><span
5389 class="cmtt-8">&#x00A0;bits</span><span
5390 class="cmtt-8">&#x00A0;each;</span>
5391 </div>
5395 <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
5396 In addition, any element of the array <span
5397 class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
5398 codebook number for this bitstream is an error condition that also renders the stream
5399 undecodable.
5400 <!--l. 48--><p class="noindent" >
5401 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2 </span> <a
5402 id="x1-930006.2.2"></a>packet decode</h5>
5403 <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
5404 amplitude and <span
5405 class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
5406 computing the floor curve, which is defined as the frequency response of the decoded LSP
5407 filter.
5408 <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
5409 <div class="fancyvrb" id="fancyvrb27">
5411 id="x1-93002r1"></a><span
5412 class="cmr-6">1</span><span
5413 class="cmtt-8">&#x00A0;</span><span
5414 class="cmtt-8">&#x00A0;</span><span
5415 class="cmtt-8">&#x00A0;</span><span
5416 class="cmtt-8">&#x00A0;1)</span><span
5417 class="cmtt-8">&#x00A0;[amplitude]</span><span
5418 class="cmtt-8">&#x00A0;=</span><span
5419 class="cmtt-8">&#x00A0;read</span><span
5420 class="cmtt-8">&#x00A0;an</span><span
5421 class="cmtt-8">&#x00A0;unsigned</span><span
5422 class="cmtt-8">&#x00A0;integer</span><span
5423 class="cmtt-8">&#x00A0;of</span><span
5424 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
5425 class="cmtt-8">&#x00A0;bits</span>
5426 <br class="fancyvrb" /><a
5427 id="x1-93004r2"></a><span
5428 class="cmr-6">2</span><span
5429 class="cmtt-8">&#x00A0;</span><span
5430 class="cmtt-8">&#x00A0;</span><span
5431 class="cmtt-8">&#x00A0;</span><span
5432 class="cmtt-8">&#x00A0;2)</span><span
5433 class="cmtt-8">&#x00A0;if</span><span
5434 class="cmtt-8">&#x00A0;(</span><span
5435 class="cmtt-8">&#x00A0;[amplitude]</span><span
5436 class="cmtt-8">&#x00A0;is</span><span
5437 class="cmtt-8">&#x00A0;greater</span><span
5438 class="cmtt-8">&#x00A0;than</span><span
5439 class="cmtt-8">&#x00A0;zero</span><span
5440 class="cmtt-8">&#x00A0;)</span><span
5441 class="cmtt-8">&#x00A0;</span><span
5442 class="cmsy-8">{</span>
5443 <br class="fancyvrb" /><a
5444 id="x1-93006r3"></a><span
5445 class="cmr-6">3</span><span
5446 class="cmtt-8">&#x00A0;</span><span
5447 class="cmtt-8">&#x00A0;</span><span
5448 class="cmtt-8">&#x00A0;</span><span
5449 class="cmtt-8">&#x00A0;</span><span
5450 class="cmtt-8">&#x00A0;</span><span
5451 class="cmtt-8">&#x00A0;</span><span
5452 class="cmtt-8">&#x00A0;</span><span
5453 class="cmtt-8">&#x00A0;</span><span
5454 class="cmtt-8">&#x00A0;3)</span><span
5455 class="cmtt-8">&#x00A0;[coefficients]</span><span
5456 class="cmtt-8">&#x00A0;is</span><span
5457 class="cmtt-8">&#x00A0;an</span><span
5458 class="cmtt-8">&#x00A0;empty,</span><span
5459 class="cmtt-8">&#x00A0;zero</span><span
5460 class="cmtt-8">&#x00A0;length</span><span
5461 class="cmtt-8">&#x00A0;vector</span>
5462 <br class="fancyvrb" /><a
5463 id="x1-93008r4"></a><span
5464 class="cmr-6">4</span><span
5465 class="cmtt-8">&#x00A0;</span><span
5466 class="cmtt-8">&#x00A0;</span><span
5467 class="cmtt-8">&#x00A0;</span><span
5468 class="cmtt-8">&#x00A0;</span><span
5469 class="cmtt-8">&#x00A0;</span><span
5470 class="cmtt-8">&#x00A0;</span><span
5471 class="cmtt-8">&#x00A0;</span><span
5472 class="cmtt-8">&#x00A0;</span><span
5473 class="cmtt-8">&#x00A0;4)</span><span
5474 class="cmtt-8">&#x00A0;[booknumber]</span><span
5475 class="cmtt-8">&#x00A0;=</span><span
5476 class="cmtt-8">&#x00A0;read</span><span
5477 class="cmtt-8">&#x00A0;an</span><span
5478 class="cmtt-8">&#x00A0;unsigned</span><span
5479 class="cmtt-8">&#x00A0;integer</span><span
5480 class="cmtt-8">&#x00A0;of</span><span
5481 class="cmtt-8">&#x00A0;</span><a
5482 href="#x1-1170009.2.1"><span
5483 class="cmtt-8">ilog</span></a><span
5484 class="cmtt-8">(</span><span
5485 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
5486 class="cmtt-8">&#x00A0;)</span><span
5487 class="cmtt-8">&#x00A0;bits</span>
5488 <br class="fancyvrb" /><a
5489 id="x1-93010r5"></a><span
5490 class="cmr-6">5</span><span
5491 class="cmtt-8">&#x00A0;</span><span
5492 class="cmtt-8">&#x00A0;</span><span
5493 class="cmtt-8">&#x00A0;</span><span
5494 class="cmtt-8">&#x00A0;</span><span
5495 class="cmtt-8">&#x00A0;</span><span
5496 class="cmtt-8">&#x00A0;</span><span
5497 class="cmtt-8">&#x00A0;</span><span
5498 class="cmtt-8">&#x00A0;</span><span
5499 class="cmtt-8">&#x00A0;5)</span><span
5500 class="cmtt-8">&#x00A0;if</span><span
5501 class="cmtt-8">&#x00A0;(</span><span
5502 class="cmtt-8">&#x00A0;[booknumber]</span><span
5503 class="cmtt-8">&#x00A0;is</span><span
5504 class="cmtt-8">&#x00A0;greater</span><span
5505 class="cmtt-8">&#x00A0;than</span><span
5506 class="cmtt-8">&#x00A0;the</span><span
5507 class="cmtt-8">&#x00A0;highest</span><span
5508 class="cmtt-8">&#x00A0;number</span><span
5509 class="cmtt-8">&#x00A0;decode</span><span
5510 class="cmtt-8">&#x00A0;codebook</span><span
5511 class="cmtt-8">&#x00A0;)</span><span
5512 class="cmtt-8">&#x00A0;then</span><span
5513 class="cmtt-8">&#x00A0;packet</span><span
5514 class="cmtt-8">&#x00A0;is</span><span
5515 class="cmtt-8">&#x00A0;undecodable</span>
5516 <br class="fancyvrb" /><a
5517 id="x1-93012r6"></a><span
5518 class="cmr-6">6</span><span
5519 class="cmtt-8">&#x00A0;</span><span
5520 class="cmtt-8">&#x00A0;</span><span
5521 class="cmtt-8">&#x00A0;</span><span
5522 class="cmtt-8">&#x00A0;</span><span
5523 class="cmtt-8">&#x00A0;</span><span
5524 class="cmtt-8">&#x00A0;</span><span
5525 class="cmtt-8">&#x00A0;</span><span
5526 class="cmtt-8">&#x00A0;</span><span
5527 class="cmtt-8">&#x00A0;6)</span><span
5528 class="cmtt-8">&#x00A0;[last]</span><span
5529 class="cmtt-8">&#x00A0;=</span><span
5530 class="cmtt-8">&#x00A0;zero;</span>
5531 <br class="fancyvrb" /><a
5532 id="x1-93014r7"></a><span
5533 class="cmr-6">7</span><span
5534 class="cmtt-8">&#x00A0;</span><span
5535 class="cmtt-8">&#x00A0;</span><span
5536 class="cmtt-8">&#x00A0;</span><span
5537 class="cmtt-8">&#x00A0;</span><span
5538 class="cmtt-8">&#x00A0;</span><span
5539 class="cmtt-8">&#x00A0;</span><span
5540 class="cmtt-8">&#x00A0;</span><span
5541 class="cmtt-8">&#x00A0;</span><span
5542 class="cmtt-8">&#x00A0;7)</span><span
5543 class="cmtt-8">&#x00A0;vector</span><span
5544 class="cmtt-8">&#x00A0;[temp_vector]</span><span
5545 class="cmtt-8">&#x00A0;=</span><span
5546 class="cmtt-8">&#x00A0;read</span><span
5547 class="cmtt-8">&#x00A0;vector</span><span
5548 class="cmtt-8">&#x00A0;from</span><span
5549 class="cmtt-8">&#x00A0;bitstream</span><span
5550 class="cmtt-8">&#x00A0;using</span><span
5551 class="cmtt-8">&#x00A0;codebook</span><span
5552 class="cmtt-8">&#x00A0;number</span><span
5553 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
5554 class="cmtt-8">&#x00A0;element</span><span
5555 class="cmtt-8">&#x00A0;[booknumber]</span><span
5556 class="cmtt-8">&#x00A0;in</span><span
5557 class="cmtt-8">&#x00A0;VQ</span><span
5558 class="cmtt-8">&#x00A0;context.</span>
5559 <br class="fancyvrb" /><a
5560 id="x1-93016r8"></a><span
5561 class="cmr-6">8</span><span
5562 class="cmtt-8">&#x00A0;</span><span
5563 class="cmtt-8">&#x00A0;</span><span
5564 class="cmtt-8">&#x00A0;</span><span
5565 class="cmtt-8">&#x00A0;</span><span
5566 class="cmtt-8">&#x00A0;</span><span
5567 class="cmtt-8">&#x00A0;</span><span
5568 class="cmtt-8">&#x00A0;</span><span
5569 class="cmtt-8">&#x00A0;</span><span
5570 class="cmtt-8">&#x00A0;8)</span><span
5571 class="cmtt-8">&#x00A0;add</span><span
5572 class="cmtt-8">&#x00A0;the</span><span
5573 class="cmtt-8">&#x00A0;scalar</span><span
5574 class="cmtt-8">&#x00A0;value</span><span
5575 class="cmtt-8">&#x00A0;[last]</span><span
5576 class="cmtt-8">&#x00A0;to</span><span
5577 class="cmtt-8">&#x00A0;each</span><span
5578 class="cmtt-8">&#x00A0;scalar</span><span
5579 class="cmtt-8">&#x00A0;in</span><span
5580 class="cmtt-8">&#x00A0;vector</span><span
5581 class="cmtt-8">&#x00A0;[temp_vector]</span>
5582 <br class="fancyvrb" /><a
5583 id="x1-93018r9"></a><span
5584 class="cmr-6">9</span><span
5585 class="cmtt-8">&#x00A0;</span><span
5586 class="cmtt-8">&#x00A0;</span><span
5587 class="cmtt-8">&#x00A0;</span><span
5588 class="cmtt-8">&#x00A0;</span><span
5589 class="cmtt-8">&#x00A0;</span><span
5590 class="cmtt-8">&#x00A0;</span><span
5591 class="cmtt-8">&#x00A0;</span><span
5592 class="cmtt-8">&#x00A0;</span><span
5593 class="cmtt-8">&#x00A0;9)</span><span
5594 class="cmtt-8">&#x00A0;[last]</span><span
5595 class="cmtt-8">&#x00A0;=</span><span
5596 class="cmtt-8">&#x00A0;the</span><span
5597 class="cmtt-8">&#x00A0;value</span><span
5598 class="cmtt-8">&#x00A0;of</span><span
5599 class="cmtt-8">&#x00A0;the</span><span
5600 class="cmtt-8">&#x00A0;last</span><span
5601 class="cmtt-8">&#x00A0;scalar</span><span
5602 class="cmtt-8">&#x00A0;in</span><span
5603 class="cmtt-8">&#x00A0;vector</span><span
5604 class="cmtt-8">&#x00A0;[temp_vector]</span>
5605 <br class="fancyvrb" /><a
5606 id="x1-93020r10"></a><span
5607 class="cmr-6">10</span><span
5608 class="cmtt-8">&#x00A0;</span><span
5609 class="cmtt-8">&#x00A0;</span><span
5610 class="cmtt-8">&#x00A0;</span><span
5611 class="cmtt-8">&#x00A0;</span><span
5612 class="cmtt-8">&#x00A0;</span><span
5613 class="cmtt-8">&#x00A0;</span><span
5614 class="cmtt-8">&#x00A0;</span><span
5615 class="cmtt-8">&#x00A0;10)</span><span
5616 class="cmtt-8">&#x00A0;concatenate</span><span
5617 class="cmtt-8">&#x00A0;[temp_vector]</span><span
5618 class="cmtt-8">&#x00A0;onto</span><span
5619 class="cmtt-8">&#x00A0;the</span><span
5620 class="cmtt-8">&#x00A0;end</span><span
5621 class="cmtt-8">&#x00A0;of</span><span
5622 class="cmtt-8">&#x00A0;the</span><span
5623 class="cmtt-8">&#x00A0;[coefficients]</span><span
5624 class="cmtt-8">&#x00A0;vector</span>
5625 <br class="fancyvrb" /><a
5626 id="x1-93022r11"></a><span
5627 class="cmr-6">11</span><span
5628 class="cmtt-8">&#x00A0;</span><span
5629 class="cmtt-8">&#x00A0;</span><span
5630 class="cmtt-8">&#x00A0;</span><span
5631 class="cmtt-8">&#x00A0;</span><span
5632 class="cmtt-8">&#x00A0;</span><span
5633 class="cmtt-8">&#x00A0;</span><span
5634 class="cmtt-8">&#x00A0;</span><span
5635 class="cmtt-8">&#x00A0;11)</span><span
5636 class="cmtt-8">&#x00A0;if</span><span
5637 class="cmtt-8">&#x00A0;(length</span><span
5638 class="cmtt-8">&#x00A0;of</span><span
5639 class="cmtt-8">&#x00A0;vector</span><span
5640 class="cmtt-8">&#x00A0;[coefficients]</span><span
5641 class="cmtt-8">&#x00A0;is</span><span
5642 class="cmtt-8">&#x00A0;less</span><span
5643 class="cmtt-8">&#x00A0;than</span><span
5644 class="cmtt-8">&#x00A0;[floor0_order],</span><span
5645 class="cmtt-8">&#x00A0;continue</span><span
5646 class="cmtt-8">&#x00A0;at</span><span
5647 class="cmtt-8">&#x00A0;step</span><span
5648 class="cmtt-8">&#x00A0;6</span>
5649 <br class="fancyvrb" /><a
5650 id="x1-93024r12"></a><span
5651 class="cmr-6">12</span><span
5652 class="cmtt-8">&#x00A0;</span><span
5653 class="cmtt-8">&#x00A0;</span>
5654 <br class="fancyvrb" /><a
5655 id="x1-93026r13"></a><span
5656 class="cmr-6">13</span><span
5657 class="cmtt-8">&#x00A0;</span><span
5658 class="cmtt-8">&#x00A0;</span><span
5659 class="cmtt-8">&#x00A0;</span><span
5660 class="cmtt-8">&#x00A0;</span><span
5661 class="cmtt-8">&#x00A0;</span><span
5662 class="cmtt-8">&#x00A0;</span><span
5663 class="cmtt-8">&#x00A0;</span><span
5664 class="cmsy-8">}</span>
5665 <br class="fancyvrb" /><a
5666 id="x1-93028r14"></a><span
5667 class="cmr-6">14</span><span
5668 class="cmtt-8">&#x00A0;</span><span
5669 class="cmtt-8">&#x00A0;</span>
5670 <br class="fancyvrb" /><a
5671 id="x1-93030r15"></a><span
5672 class="cmr-6">15</span><span
5673 class="cmtt-8">&#x00A0;</span><span
5674 class="cmtt-8">&#x00A0;</span><span
5675 class="cmtt-8">&#x00A0;12)</span><span
5676 class="cmtt-8">&#x00A0;done.</span>
5677 <br class="fancyvrb" /><a
5678 id="x1-93032r16"></a><span
5679 class="cmr-6">16</span><span
5680 class="cmtt-8">&#x00A0;</span><span
5681 class="cmtt-8">&#x00A0;</span>
5682 </div>
5683 <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
5684 <ul class="itemize1">
5685 <li class="itemize">An <span
5686 class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
5687 is unused in this frame (the output of the channel will be all-zeroes in synthesis).
5688 Several later stages of decode don&#8217;t occur for an unused channel.
5689 </li>
5690 <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
5691 if end-of-packet is reached during any read operation above, floor decode is to return
5692 &#8217;unused&#8217; status as if the <span
5693 class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
5694 </li>
5695 <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a
5696 href="#x1-1170009.2.1">ilog</a>(
5700 <span
5701 class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
5702 and values greater than the maximum possible book value are reserved.
5703 </li>
5704 <li class="itemize">The number of scalars read into the vector <span
5705 class="cmtt-12">[coefficients] </span>may be greater
5706 than <span
5707 class="cmtt-12">[floor0_order]</span>, the number actually required for curve computation. For
5708 example, if the VQ codebook used for the floor currently being decoded has a
5709 <span
5710 class="cmtt-12">[codebook_dimensions] </span>value of three and <span
5711 class="cmtt-12">[floor0_order] </span>is ten, the only way to
5712 fill all the needed scalars in <span
5713 class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
5714 as four vectors of three scalars each. This is not an error condition, and care must
5715 be taken not to allow a buffer overflow in decode. The extra values are not used and
5716 may be ignored or discarded.</li></ul>
5717 <!--l. 104--><p class="noindent" >
5718 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3 </span> <a
5719 id="x1-940006.2.3"></a>curve computation</h5>
5720 <!--l. 106--><p class="noindent" >Given an <span
5721 class="cmtt-12">[amplitude] </span>integer and <span
5722 class="cmtt-12">[coefficients] </span>vector from packet decode as well
5723 as the [floor0&#x02D9;order], [floor0&#x02D9;rate], [floor0&#x02D9;bark&#x02D9;map&#x02D9;size], [floor0&#x02D9;amplitude&#x02D9;bits] and
5724 [floor0&#x02D9;amplitude&#x02D9;offset] values from floor setup, and an output vector size <span
5725 class="cmtt-12">[n] </span>specified by the
5726 decode process, we compute a floor output vector.
5727 <!--l. 113--><p class="noindent" >If the value <span
5728 class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span
5729 class="cmtt-12">[n] </span>vector with all-zero
5730 scalars. Otherwise, begin by assuming the following definitions for the given vector to be
5731 synthesized:
5732 <center class="par-math-display" >
5733 <img
5734 src="Vorbis_I_spec7x.png" alt=" {
5735 min (floor0xbarkxmapxsize - 1,f oobar) for i &#x2208; [0, n - 1]
5736 mapi = - 1 for i = n
5737 " class="par-math-display" ></center>
5738 <!--l. 128--><p class="nopar" >
5739 <!--l. 130--><p class="noindent" >where
5740 <center class="par-math-display" >
5741 <img
5742 src="Vorbis_I_spec8x.png" alt=" &#x230A; &#x230B;
5743 (floor0xrate &#x22C5; i) floor0xbarkxmapxsize
5744 foobar = bark -------2n------- &#x22C5;-bark(.5 &#x22C5;-floor0xrate-)
5745 " class="par-math-display" ></center>
5749 <!--l. 137--><p class="nopar" >
5750 <!--l. 139--><p class="noindent" >and
5751 <center class="par-math-display" >
5752 <img
5753 src="Vorbis_I_spec9x.png" alt=" 2
5754 bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x + .0001x )
5755 " class="par-math-display" ></center>
5756 <!--l. 143--><p class="nopar" >
5757 <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
5758 result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
5759 LSP curve <span
5760 class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
5761 step:
5762 <!--l. 150--><p class="noindent" >
5763 <ol class="enumerate1" >
5764 <li
5765 class="enumerate" id="x1-94002x1"><span
5766 class="cmtt-12">[i] </span>= 0
5767 </li>
5768 <li
5769 class="enumerate" id="x1-94004x2"><span
5770 class="cmtt-12">[</span><span
5771 class="cmmi-12">&#x03C9;</span><span
5772 class="cmtt-12">] </span>= <span
5773 class="cmmi-12">&#x03C0; </span>* map element <span
5774 class="cmtt-12">[i] </span>/ <span
5775 class="cmtt-12">[floor0_bark_map_size]</span>
5776 </li>
5777 <li
5778 class="enumerate" id="x1-94006x3">if ( <span
5779 class="cmtt-12">[floor0_order] </span>is odd )
5780 <ol class="enumerate2" >
5781 <li
5782 class="enumerate" id="x1-94008x1">calculate <span
5783 class="cmtt-12">[p] </span>and <span
5784 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
5785 <center class="math-display" >
5786 <img
5787 src="Vorbis_I_spec10x.png" alt=" floor0xorder-3
5788 2 &#x220F;2 2
5789 p = (1 - cos &#x03C9;) 4(cos([coefficients ]2j+1) - cos&#x03C9; )
5791 floor0x&#x220F;or2der-1
5792 q = 1- 4(cos([coefficients ]2j) - cos&#x03C9; )2
5793 4 j=0
5797 " class="math-display" ></center>
5798 </div>
5799 </li></ol>
5800 <!--l. 162--><p class="noindent" >else <span
5801 class="cmtt-12">[floor0_order] </span>is even
5802 <ol class="enumerate2" >
5803 <li
5804 class="enumerate" id="x1-94011x1">calculate <span
5805 class="cmtt-12">[p] </span>and <span
5806 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
5807 <center class="math-display" >
5808 <img
5809 src="Vorbis_I_spec11x.png" alt=" floor0xorder-2
5810 (1 - cos2&#x03C9;) &#x220F;2 2
5811 p = -----2------ 4(cos([coefficients ]2j+1) - cos&#x03C9; )
5813 2 floor0xor2der-2
5814 q = (1 +-cos-&#x03C9;)- &#x220F; 4(cos([coefficients ] ) - cos&#x03C9; )2
5815 2 j=0 2j
5816 " class="math-display" ></center>
5817 </div>
5818 </li></ol>
5819 </li>
5820 <li
5821 class="enumerate" id="x1-94014x4">calculate <span
5822 class="cmtt-12">[linear_floor_value] </span>according to:
5823 <center class="math-display" >
5824 <img
5825 src="Vorbis_I_spec12x.png" alt=" ( ( ))
5826 amplitude---&#x22C5; floor0xamplitutexoffset---
5827 exp .11512925 (2floor0xamplitudexbits - 1)&#x221A; p + q - floor0xamplitudexoffset
5828 " class="math-display" ></center>
5829 <!--l. 177--><p class="nopar" >
5830 </li>
5831 <li
5832 class="enumerate" id="x1-94016x5"><span
5833 class="cmtt-12">[iteration_condition] </span>= map element <span
5834 class="cmtt-12">[i]</span>
5838 </li>
5839 <li
5840 class="enumerate" id="x1-94018x6"><span
5841 class="cmtt-12">[output] </span>element <span
5842 class="cmtt-12">[i] </span>= <span
5843 class="cmtt-12">[linear_floor_value]</span>
5844 </li>
5845 <li
5846 class="enumerate" id="x1-94020x7">increment <span
5847 class="cmtt-12">[i]</span>
5848 </li>
5849 <li
5850 class="enumerate" id="x1-94022x8">if ( map element <span
5851 class="cmtt-12">[i] </span>is equal to <span
5852 class="cmtt-12">[iteration_condition] </span>) continue at step
5854 </li>
5855 <li
5856 class="enumerate" id="x1-94024x9">if ( <span
5857 class="cmtt-12">[i] </span>is less than <span
5858 class="cmtt-12">[n] </span>) continue at step 2
5859 </li>
5860 <li
5861 class="enumerate" id="x1-94026x10">done</li></ol>
5868 <h3 class="sectionHead"><span class="titlemark">7 </span> <a
5869 id="x1-950007"></a>Floor type 1 setup and decode</h3>
5870 <!--l. 6--><p class="noindent" >
5871 <h4 class="subsectionHead"><span class="titlemark">7.1 </span> <a
5872 id="x1-960007.1"></a>Overview</h4>
5873 <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
5874 curve. The representation plots this curve mechanically on a linear frequency axis and a
5875 logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham&#8217;s
5876 algorithm.
5877 <!--l. 16--><p class="noindent" >
5878 <h4 class="subsectionHead"><span class="titlemark">7.2 </span> <a
5879 id="x1-970007.2"></a>Floor 1 format</h4>
5880 <!--l. 18--><p class="noindent" >
5881 <h5 class="subsubsectionHead"><span class="titlemark">7.2.1 </span> <a
5882 id="x1-980007.2.1"></a>model</h5>
5883 <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
5884 floor curve using iterative prediction in a process roughly equivalent to the following simplified
5885 description:
5886 <ul class="itemize1">
5887 <li class="itemize">the first line segment (base case) is a logical line spanning from x&#x02D9;0,y&#x02D9;0 to x&#x02D9;1,y&#x02D9;1
5888 where in the base case x&#x02D9;0=0 and x&#x02D9;1=[n], the full range of the spectral floor to be
5889 computed.
5890 </li>
5891 <li class="itemize">the induction step chooses a point x&#x02D9;new within an existing logical line segment and
5892 produces a y&#x02D9;new value at that point computed from the existing line&#8217;s y value at
5893 x&#x02D9;new (as plotted by the line) and a difference value decoded from the bitstream
5894 packet.
5898 </li>
5899 <li class="itemize">floor computation produces two new line segments, one running from x&#x02D9;0,y&#x02D9;0 to
5900 x&#x02D9;new,y&#x02D9;new and from x&#x02D9;new,y&#x02D9;new to x&#x02D9;1,y&#x02D9;1. This step is performed logically even if
5901 y&#x02D9;new represents no change to the amplitude value at x&#x02D9;new so that later refinement
5902 is additionally bounded at x&#x02D9;new.
5903 </li>
5904 <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
5905 at floor 1 initialization time. Computation is completed at the end of the x value list.
5906 </li></ul>
5907 <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
5908 representing typical configuration:
5909 <!--l. 51--><p class="noindent" >For the below example, we assume a floor setup with an [n] of 128. The list of selected X values
5910 in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
5911 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
5912 example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
5913 way, beginning with the first line:
5914 <div class="center"
5916 <!--l. 59--><p class="noindent" >
5918 <!--l. 60--><p class="noindent" ><img
5919 src="floor1-1.png" alt="PIC"
5921 <br /> <table class="caption"
5922 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;7: </td><td
5923 class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-980017 -->
5924 </div>
5925 <!--l. 64--><p class="noindent" >We now draw new logical lines to reflect the correction to new&#x02D9;Y, and iterate for X positions 32
5926 and 96:
5927 <div class="center"
5929 <!--l. 67--><p class="noindent" >
5931 <!--l. 68--><p class="noindent" ><img
5932 src="floor1-2.png" alt="PIC"
5934 <br /> <table class="caption"
5935 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;8: </td><td
5936 class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-980028 -->
5937 </div>
5938 <!--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
5939 further refinement. From here on, the pattern should be clear; we complete the floor computation
5940 as follows:
5944 <div class="center"
5946 <!--l. 76--><p class="noindent" >
5948 <!--l. 77--><p class="noindent" ><img
5949 src="floor1-3.png" alt="PIC"
5951 <br /> <table class="caption"
5952 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;9: </td><td
5953 class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-980039 -->
5954 </div>
5955 <div class="center"
5957 <!--l. 81--><p class="noindent" >
5959 <!--l. 82--><p class="noindent" ><img
5960 src="floor1-4.png" alt="PIC"
5962 <br /> <table class="caption"
5963 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;10: </td><td
5964 class="content">graph of example floor</td></tr></table><!--tex4ht:label?: x1-9800410 -->
5965 </div>
5966 <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
5967 decode, as described later. The actual algorithm splits Y value computation and line plotting
5968 into two steps with modifications to the above algorithm to eliminate noise accumulation
5969 through integer roundoff/truncation.
5970 <!--l. 94--><p class="noindent" >
5971 <h5 class="subsubsectionHead"><span class="titlemark">7.2.2 </span> <a
5972 id="x1-990007.2.2"></a>header decode</h5>
5973 <!--l. 96--><p class="noindent" >A list of floor X values is stored in the packet header in interleaved format (used in list order
5974 during packet decode and synthesis). This list is split into partitions, and each partition is
5975 assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
5976 partition or partition class.
5977 <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
5978 the partition class encodes at once), a &#8217;subclass&#8217; value representing the number of
5979 alternate entropy books the partition class may use in representing Y values, the list of
5980 [subclass] books and a master book used to encode which alternate books were chosen
5981 for representation in a given packet. The master/subclass mechanism is meant to be
5982 used as a flexible representation cascade while still using codebooks only in a scalar
5983 context.
5987 <!--l. 112--><p class="noindent" >
5988 <div class="fancyvrb" id="fancyvrb28">
5990 id="x1-99002r1"></a><span
5991 class="cmr-6">1</span><span
5992 class="cmtt-8">&#x00A0;</span><span
5993 class="cmtt-8">&#x00A0;</span>
5994 <br class="fancyvrb" /><a
5995 id="x1-99004r2"></a><span
5996 class="cmr-6">2</span><span
5997 class="cmtt-8">&#x00A0;</span><span
5998 class="cmtt-8">&#x00A0;</span><span
5999 class="cmtt-8">&#x00A0;</span><span
6000 class="cmtt-8">&#x00A0;1)</span><span
6001 class="cmtt-8">&#x00A0;[floor1_partitions]</span><span
6002 class="cmtt-8">&#x00A0;=</span><span
6003 class="cmtt-8">&#x00A0;read</span><span
6004 class="cmtt-8">&#x00A0;5</span><span
6005 class="cmtt-8">&#x00A0;bits</span><span
6006 class="cmtt-8">&#x00A0;as</span><span
6007 class="cmtt-8">&#x00A0;unsigned</span><span
6008 class="cmtt-8">&#x00A0;integer</span>
6009 <br class="fancyvrb" /><a
6010 id="x1-99006r3"></a><span
6011 class="cmr-6">3</span><span
6012 class="cmtt-8">&#x00A0;</span><span
6013 class="cmtt-8">&#x00A0;</span><span
6014 class="cmtt-8">&#x00A0;</span><span
6015 class="cmtt-8">&#x00A0;2)</span><span
6016 class="cmtt-8">&#x00A0;[maximum_class]</span><span
6017 class="cmtt-8">&#x00A0;=</span><span
6018 class="cmtt-8">&#x00A0;-1</span>
6019 <br class="fancyvrb" /><a
6020 id="x1-99008r4"></a><span
6021 class="cmr-6">4</span><span
6022 class="cmtt-8">&#x00A0;</span><span
6023 class="cmtt-8">&#x00A0;</span><span
6024 class="cmtt-8">&#x00A0;</span><span
6025 class="cmtt-8">&#x00A0;3)</span><span
6026 class="cmtt-8">&#x00A0;iterate</span><span
6027 class="cmtt-8">&#x00A0;[i]</span><span
6028 class="cmtt-8">&#x00A0;over</span><span
6029 class="cmtt-8">&#x00A0;the</span><span
6030 class="cmtt-8">&#x00A0;range</span><span
6031 class="cmtt-8">&#x00A0;0</span><span
6032 class="cmtt-8">&#x00A0;...</span><span
6033 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
6034 class="cmtt-8">&#x00A0;</span><span
6035 class="cmsy-8">{</span>
6036 <br class="fancyvrb" /><a
6037 id="x1-99010r5"></a><span
6038 class="cmr-6">5</span><span
6039 class="cmtt-8">&#x00A0;</span><span
6040 class="cmtt-8">&#x00A0;</span>
6041 <br class="fancyvrb" /><a
6042 id="x1-99012r6"></a><span
6043 class="cmr-6">6</span><span
6044 class="cmtt-8">&#x00A0;</span><span
6045 class="cmtt-8">&#x00A0;</span><span
6046 class="cmtt-8">&#x00A0;</span><span
6047 class="cmtt-8">&#x00A0;</span><span
6048 class="cmtt-8">&#x00A0;</span><span
6049 class="cmtt-8">&#x00A0;</span><span
6050 class="cmtt-8">&#x00A0;</span><span
6051 class="cmtt-8">&#x00A0;</span><span
6052 class="cmtt-8">&#x00A0;</span><span
6053 class="cmtt-8">&#x00A0;4)</span><span
6054 class="cmtt-8">&#x00A0;vector</span><span
6055 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
6056 class="cmtt-8">&#x00A0;element</span><span
6057 class="cmtt-8">&#x00A0;[i]</span><span
6058 class="cmtt-8">&#x00A0;=</span><span
6059 class="cmtt-8">&#x00A0;read</span><span
6060 class="cmtt-8">&#x00A0;4</span><span
6061 class="cmtt-8">&#x00A0;bits</span><span
6062 class="cmtt-8">&#x00A0;as</span><span
6063 class="cmtt-8">&#x00A0;unsigned</span><span
6064 class="cmtt-8">&#x00A0;integer</span>
6065 <br class="fancyvrb" /><a
6066 id="x1-99014r7"></a><span
6067 class="cmr-6">7</span><span
6068 class="cmtt-8">&#x00A0;</span><span
6069 class="cmtt-8">&#x00A0;</span>
6070 <br class="fancyvrb" /><a
6071 id="x1-99016r8"></a><span
6072 class="cmr-6">8</span><span
6073 class="cmtt-8">&#x00A0;</span><span
6074 class="cmtt-8">&#x00A0;</span><span
6075 class="cmtt-8">&#x00A0;</span><span
6076 class="cmtt-8">&#x00A0;</span><span
6077 class="cmtt-8">&#x00A0;</span><span
6078 class="cmtt-8">&#x00A0;</span><span
6079 class="cmtt-8">&#x00A0;</span><span
6080 class="cmsy-8">}</span>
6081 <br class="fancyvrb" /><a
6082 id="x1-99018r9"></a><span
6083 class="cmr-6">9</span><span
6084 class="cmtt-8">&#x00A0;</span><span
6085 class="cmtt-8">&#x00A0;</span>
6086 <br class="fancyvrb" /><a
6087 id="x1-99020r10"></a><span
6088 class="cmr-6">10</span><span
6089 class="cmtt-8">&#x00A0;</span><span
6090 class="cmtt-8">&#x00A0;</span><span
6091 class="cmtt-8">&#x00A0;</span><span
6092 class="cmtt-8">&#x00A0;5)</span><span
6093 class="cmtt-8">&#x00A0;[maximum_class]</span><span
6094 class="cmtt-8">&#x00A0;=</span><span
6095 class="cmtt-8">&#x00A0;largest</span><span
6096 class="cmtt-8">&#x00A0;integer</span><span
6097 class="cmtt-8">&#x00A0;scalar</span><span
6098 class="cmtt-8">&#x00A0;value</span><span
6099 class="cmtt-8">&#x00A0;in</span><span
6100 class="cmtt-8">&#x00A0;vector</span><span
6101 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span>
6102 <br class="fancyvrb" /><a
6103 id="x1-99022r11"></a><span
6104 class="cmr-6">11</span><span
6105 class="cmtt-8">&#x00A0;</span><span
6106 class="cmtt-8">&#x00A0;</span><span
6107 class="cmtt-8">&#x00A0;</span><span
6108 class="cmtt-8">&#x00A0;6)</span><span
6109 class="cmtt-8">&#x00A0;iterate</span><span
6110 class="cmtt-8">&#x00A0;[i]</span><span
6111 class="cmtt-8">&#x00A0;over</span><span
6112 class="cmtt-8">&#x00A0;the</span><span
6113 class="cmtt-8">&#x00A0;range</span><span
6114 class="cmtt-8">&#x00A0;0</span><span
6115 class="cmtt-8">&#x00A0;...</span><span
6116 class="cmtt-8">&#x00A0;[maximum_class]</span><span
6117 class="cmtt-8">&#x00A0;</span><span
6118 class="cmsy-8">{</span>
6119 <br class="fancyvrb" /><a
6120 id="x1-99024r12"></a><span
6121 class="cmr-6">12</span><span
6122 class="cmtt-8">&#x00A0;</span><span
6123 class="cmtt-8">&#x00A0;</span>
6124 <br class="fancyvrb" /><a
6125 id="x1-99026r13"></a><span
6126 class="cmr-6">13</span><span
6127 class="cmtt-8">&#x00A0;</span><span
6128 class="cmtt-8">&#x00A0;</span><span
6129 class="cmtt-8">&#x00A0;</span><span
6130 class="cmtt-8">&#x00A0;</span><span
6131 class="cmtt-8">&#x00A0;</span><span
6132 class="cmtt-8">&#x00A0;</span><span
6133 class="cmtt-8">&#x00A0;</span><span
6134 class="cmtt-8">&#x00A0;</span><span
6135 class="cmtt-8">&#x00A0;</span><span
6136 class="cmtt-8">&#x00A0;7)</span><span
6137 class="cmtt-8">&#x00A0;vector</span><span
6138 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
6139 class="cmtt-8">&#x00A0;element</span><span
6140 class="cmtt-8">&#x00A0;[i]</span><span
6141 class="cmtt-8">&#x00A0;=</span><span
6142 class="cmtt-8">&#x00A0;read</span><span
6143 class="cmtt-8">&#x00A0;3</span><span
6144 class="cmtt-8">&#x00A0;bits</span><span
6145 class="cmtt-8">&#x00A0;as</span><span
6146 class="cmtt-8">&#x00A0;unsigned</span><span
6147 class="cmtt-8">&#x00A0;integer</span><span
6148 class="cmtt-8">&#x00A0;and</span><span
6149 class="cmtt-8">&#x00A0;add</span><span
6150 class="cmtt-8">&#x00A0;1</span>
6151 <br class="fancyvrb" /><a
6152 id="x1-99028r14"></a><span
6153 class="cmr-6">14</span><span
6154 class="cmtt-8">&#x00A0;</span><span
6155 class="cmtt-8">&#x00A0; 8)</span><span
6156 class="cmtt-8">&#x00A0;vector</span><span
6157 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
6158 class="cmtt-8">&#x00A0;element</span><span
6159 class="cmtt-8">&#x00A0;[i]</span><span
6160 class="cmtt-8">&#x00A0;=</span><span
6161 class="cmtt-8">&#x00A0;read</span><span
6162 class="cmtt-8">&#x00A0;2</span><span
6163 class="cmtt-8">&#x00A0;bits</span><span
6164 class="cmtt-8">&#x00A0;as</span><span
6165 class="cmtt-8">&#x00A0;unsigned</span><span
6166 class="cmtt-8">&#x00A0;integer</span>
6167 <br class="fancyvrb" /><a
6168 id="x1-99030r15"></a><span
6169 class="cmr-6">15</span><span
6170 class="cmtt-8">&#x00A0;</span><span
6171 class="cmtt-8">&#x00A0;</span><span
6172 class="cmtt-8">&#x00A0;</span><span
6173 class="cmtt-8">&#x00A0;</span><span
6174 class="cmtt-8">&#x00A0;</span><span
6175 class="cmtt-8">&#x00A0;</span><span
6176 class="cmtt-8">&#x00A0;</span><span
6177 class="cmtt-8">&#x00A0;</span><span
6178 class="cmtt-8">&#x00A0;</span><span
6179 class="cmtt-8">&#x00A0;9)</span><span
6180 class="cmtt-8">&#x00A0;if</span><span
6181 class="cmtt-8">&#x00A0;(</span><span
6182 class="cmtt-8">&#x00A0;vector</span><span
6183 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
6184 class="cmtt-8">&#x00A0;element</span><span
6185 class="cmtt-8">&#x00A0;[i]</span><span
6186 class="cmtt-8">&#x00A0;is</span><span
6187 class="cmtt-8">&#x00A0;nonzero</span><span
6188 class="cmtt-8">&#x00A0;)</span><span
6189 class="cmtt-8">&#x00A0;</span><span
6190 class="cmsy-8">{</span>
6191 <br class="fancyvrb" /><a
6192 id="x1-99032r16"></a><span
6193 class="cmr-6">16</span><span
6194 class="cmtt-8">&#x00A0;</span><span
6195 class="cmtt-8">&#x00A0;</span>
6196 <br class="fancyvrb" /><a
6197 id="x1-99034r17"></a><span
6198 class="cmr-6">17</span><span
6199 class="cmtt-8">&#x00A0;</span><span
6200 class="cmtt-8">&#x00A0;</span><span
6201 class="cmtt-8">&#x00A0;</span><span
6202 class="cmtt-8">&#x00A0;</span><span
6203 class="cmtt-8">&#x00A0;</span><span
6204 class="cmtt-8">&#x00A0;</span><span
6205 class="cmtt-8">&#x00A0;</span><span
6206 class="cmtt-8">&#x00A0;</span><span
6207 class="cmtt-8">&#x00A0;</span><span
6208 class="cmtt-8">&#x00A0;</span><span
6209 class="cmtt-8">&#x00A0;</span><span
6210 class="cmtt-8">&#x00A0;</span><span
6211 class="cmtt-8">&#x00A0;</span><span
6212 class="cmtt-8">&#x00A0;</span><span
6213 class="cmtt-8">&#x00A0;10)</span><span
6214 class="cmtt-8">&#x00A0;vector</span><span
6215 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
6216 class="cmtt-8">&#x00A0;element</span><span
6217 class="cmtt-8">&#x00A0;[i]</span><span
6218 class="cmtt-8">&#x00A0;=</span><span
6219 class="cmtt-8">&#x00A0;read</span><span
6220 class="cmtt-8">&#x00A0;8</span><span
6221 class="cmtt-8">&#x00A0;bits</span><span
6222 class="cmtt-8">&#x00A0;as</span><span
6223 class="cmtt-8">&#x00A0;unsigned</span><span
6224 class="cmtt-8">&#x00A0;integer</span>
6225 <br class="fancyvrb" /><a
6226 id="x1-99036r18"></a><span
6227 class="cmr-6">18</span><span
6228 class="cmtt-8">&#x00A0;</span><span
6229 class="cmtt-8">&#x00A0;</span>
6230 <br class="fancyvrb" /><a
6231 id="x1-99038r19"></a><span
6232 class="cmr-6">19</span><span
6233 class="cmtt-8">&#x00A0;</span><span
6234 class="cmtt-8">&#x00A0;</span><span
6235 class="cmtt-8">&#x00A0;</span><span
6236 class="cmtt-8">&#x00A0;</span><span
6237 class="cmtt-8">&#x00A0;</span><span
6238 class="cmtt-8">&#x00A0;</span><span
6239 class="cmtt-8">&#x00A0;</span><span
6240 class="cmtt-8">&#x00A0;</span><span
6241 class="cmtt-8">&#x00A0;</span><span
6242 class="cmtt-8">&#x00A0;</span><span
6243 class="cmtt-8">&#x00A0;</span><span
6244 class="cmtt-8">&#x00A0;</span><span
6245 class="cmtt-8">&#x00A0;</span><span
6246 class="cmsy-8">}</span>
6247 <br class="fancyvrb" /><a
6248 id="x1-99040r20"></a><span
6249 class="cmr-6">20</span><span
6250 class="cmtt-8">&#x00A0;</span><span
6251 class="cmtt-8">&#x00A0;</span>
6252 <br class="fancyvrb" /><a
6253 id="x1-99042r21"></a><span
6254 class="cmr-6">21</span><span
6255 class="cmtt-8">&#x00A0;</span><span
6256 class="cmtt-8">&#x00A0;</span><span
6257 class="cmtt-8">&#x00A0;</span><span
6258 class="cmtt-8">&#x00A0;</span><span
6259 class="cmtt-8">&#x00A0;</span><span
6260 class="cmtt-8">&#x00A0;</span><span
6261 class="cmtt-8">&#x00A0;</span><span
6262 class="cmtt-8">&#x00A0;</span><span
6263 class="cmtt-8">&#x00A0;11)</span><span
6264 class="cmtt-8">&#x00A0;iterate</span><span
6265 class="cmtt-8">&#x00A0;[j]</span><span
6266 class="cmtt-8">&#x00A0;over</span><span
6267 class="cmtt-8">&#x00A0;the</span><span
6268 class="cmtt-8">&#x00A0;range</span><span
6269 class="cmtt-8">&#x00A0;0</span><span
6270 class="cmtt-8">&#x00A0;...</span><span
6271 class="cmtt-8">&#x00A0;(2</span><span
6272 class="cmtt-8">&#x00A0;exponent</span><span
6273 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
6274 class="cmtt-8">&#x00A0;element</span><span
6275 class="cmtt-8">&#x00A0;[i])</span><span
6276 class="cmtt-8">&#x00A0;-</span><span
6277 class="cmtt-8">&#x00A0;1</span><span
6278 class="cmtt-8">&#x00A0;</span><span
6279 class="cmsy-8">{</span>
6280 <br class="fancyvrb" /><a
6281 id="x1-99044r22"></a><span
6282 class="cmr-6">22</span><span
6283 class="cmtt-8">&#x00A0;</span><span
6284 class="cmtt-8">&#x00A0;</span>
6285 <br class="fancyvrb" /><a
6286 id="x1-99046r23"></a><span
6287 class="cmr-6">23</span><span
6288 class="cmtt-8">&#x00A0;</span><span
6289 class="cmtt-8">&#x00A0;</span><span
6290 class="cmtt-8">&#x00A0;</span><span
6291 class="cmtt-8">&#x00A0;</span><span
6292 class="cmtt-8">&#x00A0;</span><span
6293 class="cmtt-8">&#x00A0;</span><span
6294 class="cmtt-8">&#x00A0;</span><span
6295 class="cmtt-8">&#x00A0;</span><span
6296 class="cmtt-8">&#x00A0;</span><span
6297 class="cmtt-8">&#x00A0;</span><span
6298 class="cmtt-8">&#x00A0;</span><span
6299 class="cmtt-8">&#x00A0;</span><span
6300 class="cmtt-8">&#x00A0;</span><span
6301 class="cmtt-8">&#x00A0;</span><span
6302 class="cmtt-8">&#x00A0;12)</span><span
6303 class="cmtt-8">&#x00A0;array</span><span
6304 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
6305 class="cmtt-8">&#x00A0;element</span><span
6306 class="cmtt-8">&#x00A0;[i],[j]</span><span
6307 class="cmtt-8">&#x00A0;=</span>
6308 <br class="fancyvrb" /><a
6309 id="x1-99048r24"></a><span
6310 class="cmr-6">24</span><span
6311 class="cmtt-8">&#x00A0;</span><span
6312 class="cmtt-8">&#x00A0;</span><span
6313 class="cmtt-8">&#x00A0;</span><span
6314 class="cmtt-8">&#x00A0;</span><span
6315 class="cmtt-8">&#x00A0;</span><span
6316 class="cmtt-8">&#x00A0;</span><span
6317 class="cmtt-8">&#x00A0;</span><span
6318 class="cmtt-8">&#x00A0;</span><span
6319 class="cmtt-8">&#x00A0;</span><span
6320 class="cmtt-8">&#x00A0;</span><span
6321 class="cmtt-8">&#x00A0;</span><span
6322 class="cmtt-8">&#x00A0;</span><span
6323 class="cmtt-8">&#x00A0;</span><span
6324 class="cmtt-8">&#x00A0;</span><span
6325 class="cmtt-8">&#x00A0;</span><span
6326 class="cmtt-8">&#x00A0;</span><span
6327 class="cmtt-8">&#x00A0;</span><span
6328 class="cmtt-8">&#x00A0;</span><span
6329 class="cmtt-8">&#x00A0;read</span><span
6330 class="cmtt-8">&#x00A0;8</span><span
6331 class="cmtt-8">&#x00A0;bits</span><span
6332 class="cmtt-8">&#x00A0;as</span><span
6333 class="cmtt-8">&#x00A0;unsigned</span><span
6334 class="cmtt-8">&#x00A0;integer</span><span
6335 class="cmtt-8">&#x00A0;and</span><span
6336 class="cmtt-8">&#x00A0;subtract</span><span
6337 class="cmtt-8">&#x00A0;one</span>
6338 <br class="fancyvrb" /><a
6339 id="x1-99050r25"></a><span
6340 class="cmr-6">25</span><span
6341 class="cmtt-8">&#x00A0;</span><span
6342 class="cmtt-8">&#x00A0;</span><span
6343 class="cmtt-8">&#x00A0;</span><span
6344 class="cmtt-8">&#x00A0;</span><span
6345 class="cmtt-8">&#x00A0;</span><span
6346 class="cmtt-8">&#x00A0;</span><span
6347 class="cmtt-8">&#x00A0;</span><span
6348 class="cmtt-8">&#x00A0;</span><span
6349 class="cmtt-8">&#x00A0;</span><span
6350 class="cmtt-8">&#x00A0;</span><span
6351 class="cmtt-8">&#x00A0;</span><span
6352 class="cmtt-8">&#x00A0;</span><span
6353 class="cmtt-8">&#x00A0;</span><span
6354 class="cmsy-8">}</span>
6355 <br class="fancyvrb" /><a
6356 id="x1-99052r26"></a><span
6357 class="cmr-6">26</span><span
6358 class="cmtt-8">&#x00A0;</span><span
6359 class="cmtt-8">&#x00A0;</span><span
6360 class="cmtt-8">&#x00A0;</span><span
6361 class="cmtt-8">&#x00A0;</span><span
6362 class="cmtt-8">&#x00A0;</span><span
6363 class="cmtt-8">&#x00A0;</span><span
6364 class="cmtt-8">&#x00A0;</span><span
6365 class="cmtt-8">&#x00A0;</span><span
6366 class="cmsy-8">}</span>
6367 <br class="fancyvrb" /><a
6368 id="x1-99054r27"></a><span
6369 class="cmr-6">27</span><span
6370 class="cmtt-8">&#x00A0;</span><span
6371 class="cmtt-8">&#x00A0;</span>
6372 <br class="fancyvrb" /><a
6373 id="x1-99056r28"></a><span
6374 class="cmr-6">28</span><span
6375 class="cmtt-8">&#x00A0;</span><span
6376 class="cmtt-8">&#x00A0;</span><span
6377 class="cmtt-8">&#x00A0;13)</span><span
6378 class="cmtt-8">&#x00A0;[floor1_multiplier]</span><span
6379 class="cmtt-8">&#x00A0;=</span><span
6380 class="cmtt-8">&#x00A0;read</span><span
6381 class="cmtt-8">&#x00A0;2</span><span
6382 class="cmtt-8">&#x00A0;bits</span><span
6383 class="cmtt-8">&#x00A0;as</span><span
6384 class="cmtt-8">&#x00A0;unsigned</span><span
6385 class="cmtt-8">&#x00A0;integer</span><span
6386 class="cmtt-8">&#x00A0;and</span><span
6387 class="cmtt-8">&#x00A0;add</span><span
6388 class="cmtt-8">&#x00A0;one</span>
6389 <br class="fancyvrb" /><a
6390 id="x1-99058r29"></a><span
6391 class="cmr-6">29</span><span
6392 class="cmtt-8">&#x00A0;</span><span
6393 class="cmtt-8">&#x00A0;</span><span
6394 class="cmtt-8">&#x00A0;14)</span><span
6395 class="cmtt-8">&#x00A0;[rangebits]</span><span
6396 class="cmtt-8">&#x00A0;=</span><span
6397 class="cmtt-8">&#x00A0;read</span><span
6398 class="cmtt-8">&#x00A0;4</span><span
6399 class="cmtt-8">&#x00A0;bits</span><span
6400 class="cmtt-8">&#x00A0;as</span><span
6401 class="cmtt-8">&#x00A0;unsigned</span><span
6402 class="cmtt-8">&#x00A0;integer</span>
6403 <br class="fancyvrb" /><a
6404 id="x1-99060r30"></a><span
6405 class="cmr-6">30</span><span
6406 class="cmtt-8">&#x00A0;</span><span
6407 class="cmtt-8">&#x00A0;</span><span
6408 class="cmtt-8">&#x00A0;15)</span><span
6409 class="cmtt-8">&#x00A0;vector</span><span
6410 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
6411 class="cmtt-8">&#x00A0;element</span><span
6412 class="cmtt-8">&#x00A0;[0]</span><span
6413 class="cmtt-8">&#x00A0;=</span><span
6414 class="cmtt-8">&#x00A0;0</span>
6415 <br class="fancyvrb" /><a
6416 id="x1-99062r31"></a><span
6417 class="cmr-6">31</span><span
6418 class="cmtt-8">&#x00A0;</span><span
6419 class="cmtt-8">&#x00A0;</span><span
6420 class="cmtt-8">&#x00A0;16)</span><span
6421 class="cmtt-8">&#x00A0;vector</span><span
6422 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
6423 class="cmtt-8">&#x00A0;element</span><span
6424 class="cmtt-8">&#x00A0;[1]</span><span
6425 class="cmtt-8">&#x00A0;=</span><span
6426 class="cmtt-8">&#x00A0;2</span><span
6427 class="cmtt-8">&#x00A0;exponent</span><span
6428 class="cmtt-8">&#x00A0;[rangebits];</span>
6429 <br class="fancyvrb" /><a
6430 id="x1-99064r32"></a><span
6431 class="cmr-6">32</span><span
6432 class="cmtt-8">&#x00A0;</span><span
6433 class="cmtt-8">&#x00A0;</span><span
6434 class="cmtt-8">&#x00A0;17)</span><span
6435 class="cmtt-8">&#x00A0;[floor1_values]</span><span
6436 class="cmtt-8">&#x00A0;=</span><span
6437 class="cmtt-8">&#x00A0;2</span>
6438 <br class="fancyvrb" /><a
6439 id="x1-99066r33"></a><span
6440 class="cmr-6">33</span><span
6441 class="cmtt-8">&#x00A0;</span><span
6442 class="cmtt-8">&#x00A0;</span><span
6443 class="cmtt-8">&#x00A0;18)</span><span
6444 class="cmtt-8">&#x00A0;iterate</span><span
6445 class="cmtt-8">&#x00A0;[i]</span><span
6446 class="cmtt-8">&#x00A0;over</span><span
6447 class="cmtt-8">&#x00A0;the</span><span
6448 class="cmtt-8">&#x00A0;range</span><span
6449 class="cmtt-8">&#x00A0;0</span><span
6450 class="cmtt-8">&#x00A0;...</span><span
6451 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
6452 class="cmtt-8">&#x00A0;</span><span
6453 class="cmsy-8">{</span>
6454 <br class="fancyvrb" /><a
6455 id="x1-99068r34"></a><span
6456 class="cmr-6">34</span><span
6457 class="cmtt-8">&#x00A0;</span><span
6458 class="cmtt-8">&#x00A0;</span>
6459 <br class="fancyvrb" /><a
6460 id="x1-99070r35"></a><span
6461 class="cmr-6">35</span><span
6462 class="cmtt-8">&#x00A0;</span><span
6463 class="cmtt-8">&#x00A0;</span><span
6464 class="cmtt-8">&#x00A0;</span><span
6465 class="cmtt-8">&#x00A0;</span><span
6466 class="cmtt-8">&#x00A0;</span><span
6467 class="cmtt-8">&#x00A0;</span><span
6468 class="cmtt-8">&#x00A0;</span><span
6469 class="cmtt-8">&#x00A0;</span><span
6470 class="cmtt-8">&#x00A0;19)</span><span
6471 class="cmtt-8">&#x00A0;[current_class_number]</span><span
6472 class="cmtt-8">&#x00A0;=</span><span
6473 class="cmtt-8">&#x00A0;vector</span><span
6474 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
6475 class="cmtt-8">&#x00A0;element</span><span
6476 class="cmtt-8">&#x00A0;[i]</span>
6477 <br class="fancyvrb" /><a
6478 id="x1-99072r36"></a><span
6479 class="cmr-6">36</span><span
6480 class="cmtt-8">&#x00A0;</span><span
6481 class="cmtt-8">&#x00A0;</span><span
6482 class="cmtt-8">&#x00A0;</span><span
6483 class="cmtt-8">&#x00A0;</span><span
6484 class="cmtt-8">&#x00A0;</span><span
6485 class="cmtt-8">&#x00A0;</span><span
6486 class="cmtt-8">&#x00A0;</span><span
6487 class="cmtt-8">&#x00A0;</span><span
6488 class="cmtt-8">&#x00A0;20)</span><span
6489 class="cmtt-8">&#x00A0;iterate</span><span
6490 class="cmtt-8">&#x00A0;[j]</span><span
6491 class="cmtt-8">&#x00A0;over</span><span
6492 class="cmtt-8">&#x00A0;the</span><span
6493 class="cmtt-8">&#x00A0;range</span><span
6494 class="cmtt-8">&#x00A0;0</span><span
6495 class="cmtt-8">&#x00A0;...</span><span
6496 class="cmtt-8">&#x00A0;([floor1_class_dimensions]</span><span
6497 class="cmtt-8">&#x00A0;element</span><span
6498 class="cmtt-8">&#x00A0;[current_class_number])-1</span><span
6499 class="cmtt-8">&#x00A0;</span><span
6500 class="cmsy-8">{</span>
6501 <br class="fancyvrb" /><a
6502 id="x1-99074r37"></a><span
6503 class="cmr-6">37</span><span
6504 class="cmtt-8">&#x00A0;</span><span
6505 class="cmtt-8">&#x00A0;</span><span
6506 class="cmtt-8">&#x00A0;</span><span
6507 class="cmtt-8">&#x00A0;</span><span
6508 class="cmtt-8">&#x00A0;</span><span
6509 class="cmtt-8">&#x00A0;</span><span
6510 class="cmtt-8">&#x00A0;</span><span
6511 class="cmtt-8">&#x00A0;</span><span
6512 class="cmtt-8">&#x00A0;</span><span
6513 class="cmtt-8">&#x00A0;</span><span
6514 class="cmtt-8">&#x00A0;</span><span
6515 class="cmtt-8">&#x00A0;</span><span
6516 class="cmtt-8">&#x00A0;</span><span
6517 class="cmtt-8">&#x00A0;</span><span
6518 class="cmtt-8">&#x00A0;21)</span><span
6519 class="cmtt-8">&#x00A0;vector</span><span
6520 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
6521 class="cmtt-8">&#x00A0;element</span><span
6522 class="cmtt-8">&#x00A0;([floor1_values])</span><span
6523 class="cmtt-8">&#x00A0;=</span>
6524 <br class="fancyvrb" /><a
6525 id="x1-99076r38"></a><span
6526 class="cmr-6">38</span><span
6527 class="cmtt-8">&#x00A0;</span><span
6528 class="cmtt-8">&#x00A0;</span><span
6529 class="cmtt-8">&#x00A0;</span><span
6530 class="cmtt-8">&#x00A0;</span><span
6531 class="cmtt-8">&#x00A0;</span><span
6532 class="cmtt-8">&#x00A0;</span><span
6533 class="cmtt-8">&#x00A0;</span><span
6534 class="cmtt-8">&#x00A0;</span><span
6535 class="cmtt-8">&#x00A0;</span><span
6536 class="cmtt-8">&#x00A0;</span><span
6537 class="cmtt-8">&#x00A0;</span><span
6538 class="cmtt-8">&#x00A0;</span><span
6539 class="cmtt-8">&#x00A0;</span><span
6540 class="cmtt-8">&#x00A0;</span><span
6541 class="cmtt-8">&#x00A0;</span><span
6542 class="cmtt-8">&#x00A0;</span><span
6543 class="cmtt-8">&#x00A0;</span><span
6544 class="cmtt-8">&#x00A0;</span><span
6545 class="cmtt-8">&#x00A0;read</span><span
6546 class="cmtt-8">&#x00A0;[rangebits]</span><span
6547 class="cmtt-8">&#x00A0;bits</span><span
6548 class="cmtt-8">&#x00A0;as</span><span
6549 class="cmtt-8">&#x00A0;unsigned</span><span
6550 class="cmtt-8">&#x00A0;integer</span>
6551 <br class="fancyvrb" /><a
6552 id="x1-99078r39"></a><span
6553 class="cmr-6">39</span><span
6554 class="cmtt-8">&#x00A0;</span><span
6555 class="cmtt-8">&#x00A0;</span><span
6556 class="cmtt-8">&#x00A0;</span><span
6557 class="cmtt-8">&#x00A0;</span><span
6558 class="cmtt-8">&#x00A0;</span><span
6559 class="cmtt-8">&#x00A0;</span><span
6560 class="cmtt-8">&#x00A0;</span><span
6561 class="cmtt-8">&#x00A0;</span><span
6562 class="cmtt-8">&#x00A0;</span><span
6563 class="cmtt-8">&#x00A0;</span><span
6564 class="cmtt-8">&#x00A0;</span><span
6565 class="cmtt-8">&#x00A0;</span><span
6566 class="cmtt-8">&#x00A0;</span><span
6567 class="cmtt-8">&#x00A0;</span><span
6568 class="cmtt-8">&#x00A0;22)</span><span
6569 class="cmtt-8">&#x00A0;increment</span><span
6570 class="cmtt-8">&#x00A0;[floor1_values]</span><span
6571 class="cmtt-8">&#x00A0;by</span><span
6572 class="cmtt-8">&#x00A0;one</span>
6573 <br class="fancyvrb" /><a
6574 id="x1-99080r40"></a><span
6575 class="cmr-6">40</span><span
6576 class="cmtt-8">&#x00A0;</span><span
6577 class="cmtt-8">&#x00A0;</span><span
6578 class="cmtt-8">&#x00A0;</span><span
6579 class="cmtt-8">&#x00A0;</span><span
6580 class="cmtt-8">&#x00A0;</span><span
6581 class="cmtt-8">&#x00A0;</span><span
6582 class="cmtt-8">&#x00A0;</span><span
6583 class="cmtt-8">&#x00A0;</span><span
6584 class="cmtt-8">&#x00A0;</span><span
6585 class="cmtt-8">&#x00A0;</span><span
6586 class="cmtt-8">&#x00A0;</span><span
6587 class="cmtt-8">&#x00A0;</span><span
6588 class="cmtt-8">&#x00A0;</span><span
6589 class="cmsy-8">}</span>
6590 <br class="fancyvrb" /><a
6591 id="x1-99082r41"></a><span
6592 class="cmr-6">41</span><span
6593 class="cmtt-8">&#x00A0;</span><span
6594 class="cmtt-8">&#x00A0;</span><span
6595 class="cmtt-8">&#x00A0;</span><span
6596 class="cmtt-8">&#x00A0;</span><span
6597 class="cmtt-8">&#x00A0;</span><span
6598 class="cmtt-8">&#x00A0;</span><span
6599 class="cmtt-8">&#x00A0;</span><span
6600 class="cmsy-8">}</span>
6601 <br class="fancyvrb" /><a
6602 id="x1-99084r42"></a><span
6603 class="cmr-6">42</span><span
6604 class="cmtt-8">&#x00A0;</span><span
6605 class="cmtt-8">&#x00A0;</span>
6606 <br class="fancyvrb" /><a
6607 id="x1-99086r43"></a><span
6608 class="cmr-6">43</span><span
6609 class="cmtt-8">&#x00A0;</span><span
6610 class="cmtt-8">&#x00A0;</span><span
6611 class="cmtt-8">&#x00A0;23)</span><span
6612 class="cmtt-8">&#x00A0;done</span>
6613 </div>
6614 <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
6615 setup renders a stream undecodable. In addition, a <span
6616 class="cmtt-12">[floor1_class_masterbooks] </span>or
6617 <span
6618 class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
6619 configured in this stream is an error condition that renders the stream undecodable.
6620 <!--l. 165--><p class="noindent" ><span class="paragraphHead"><a
6621 id="x1-1000007.2.2"></a><span
6622 class="cmbx-12">packet decode</span></span>
6623 Packet decode begins by checking the <span
6624 class="cmtt-12">[nonzero] </span>flag:
6628 <!--l. 169--><p class="noindent" >
6629 <div class="fancyvrb" id="fancyvrb29">
6631 id="x1-100002r1"></a><span
6632 class="cmr-6">1</span><span
6633 class="cmtt-8">&#x00A0;</span><span
6634 class="cmtt-8">&#x00A0;</span><span
6635 class="cmtt-8">&#x00A0;</span><span
6636 class="cmtt-8">&#x00A0;1)</span><span
6637 class="cmtt-8">&#x00A0;[nonzero]</span><span
6638 class="cmtt-8">&#x00A0;=</span><span
6639 class="cmtt-8">&#x00A0;read</span><span
6640 class="cmtt-8">&#x00A0;1</span><span
6641 class="cmtt-8">&#x00A0;bit</span><span
6642 class="cmtt-8">&#x00A0;as</span><span
6643 class="cmtt-8">&#x00A0;boolean</span>
6644 </div>
6645 <!--l. 173--><p class="noindent" >If <span
6646 class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
6647 Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
6648 this frame. (A return status of &#8217;unused&#8217; is different from decoding a floor that has all
6649 points set to minimum representation amplitude, which happens to be approximately
6650 -140dB).
6651 <!--l. 181--><p class="noindent" >Assuming <span
6652 class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
6653 <!--l. 183--><p class="noindent" >
6654 <div class="fancyvrb" id="fancyvrb30">
6656 id="x1-100004r1"></a><span
6657 class="cmr-6">1</span><span
6658 class="cmtt-8">&#x00A0;</span><span
6659 class="cmtt-8">&#x00A0;</span><span
6660 class="cmtt-8">&#x00A0;</span><span
6661 class="cmtt-8">&#x00A0;1)</span><span
6662 class="cmtt-8">&#x00A0;[range]</span><span
6663 class="cmtt-8">&#x00A0;=</span><span
6664 class="cmtt-8">&#x00A0;vector</span><span
6665 class="cmtt-8">&#x00A0;</span><span
6666 class="cmsy-8">{</span><span
6667 class="cmtt-8">&#x00A0;256,</span><span
6668 class="cmtt-8">&#x00A0;128,</span><span
6669 class="cmtt-8">&#x00A0;86,</span><span
6670 class="cmtt-8">&#x00A0;64</span><span
6671 class="cmtt-8">&#x00A0;</span><span
6672 class="cmsy-8">}</span><span
6673 class="cmtt-8">&#x00A0;element</span><span
6674 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
6675 <br class="fancyvrb" /><a
6676 id="x1-100006r2"></a><span
6677 class="cmr-6">2</span><span
6678 class="cmtt-8">&#x00A0;</span><span
6679 class="cmtt-8">&#x00A0;</span><span
6680 class="cmtt-8">&#x00A0;</span><span
6681 class="cmtt-8">&#x00A0;2)</span><span
6682 class="cmtt-8">&#x00A0;vector</span><span
6683 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
6684 class="cmtt-8">&#x00A0;element</span><span
6685 class="cmtt-8">&#x00A0;[0]</span><span
6686 class="cmtt-8">&#x00A0;=</span><span
6687 class="cmtt-8">&#x00A0;read</span><span
6688 class="cmtt-8">&#x00A0;</span><a
6689 href="#x1-1170009.2.1"><span
6690 class="cmtt-8">ilog</span></a><span
6691 class="cmtt-8">([range]-1)</span><span
6692 class="cmtt-8">&#x00A0;bits</span><span
6693 class="cmtt-8">&#x00A0;as</span><span
6694 class="cmtt-8">&#x00A0;unsigned</span><span
6695 class="cmtt-8">&#x00A0;integer</span>
6696 <br class="fancyvrb" /><a
6697 id="x1-100008r3"></a><span
6698 class="cmr-6">3</span><span
6699 class="cmtt-8">&#x00A0;</span><span
6700 class="cmtt-8">&#x00A0;</span><span
6701 class="cmtt-8">&#x00A0;</span><span
6702 class="cmtt-8">&#x00A0;3)</span><span
6703 class="cmtt-8">&#x00A0;vector</span><span
6704 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
6705 class="cmtt-8">&#x00A0;element</span><span
6706 class="cmtt-8">&#x00A0;[1]</span><span
6707 class="cmtt-8">&#x00A0;=</span><span
6708 class="cmtt-8">&#x00A0;read</span><span
6709 class="cmtt-8">&#x00A0;</span><a
6710 href="#x1-1170009.2.1"><span
6711 class="cmtt-8">ilog</span></a><span
6712 class="cmtt-8">([range]-1)</span><span
6713 class="cmtt-8">&#x00A0;bits</span><span
6714 class="cmtt-8">&#x00A0;as</span><span
6715 class="cmtt-8">&#x00A0;unsigned</span><span
6716 class="cmtt-8">&#x00A0;integer</span>
6717 <br class="fancyvrb" /><a
6718 id="x1-100010r4"></a><span
6719 class="cmr-6">4</span><span
6720 class="cmtt-8">&#x00A0;</span><span
6721 class="cmtt-8">&#x00A0;</span><span
6722 class="cmtt-8">&#x00A0;</span><span
6723 class="cmtt-8">&#x00A0;4)</span><span
6724 class="cmtt-8">&#x00A0;[offset]</span><span
6725 class="cmtt-8">&#x00A0;=</span><span
6726 class="cmtt-8">&#x00A0;2;</span>
6727 <br class="fancyvrb" /><a
6728 id="x1-100012r5"></a><span
6729 class="cmr-6">5</span><span
6730 class="cmtt-8">&#x00A0;</span><span
6731 class="cmtt-8">&#x00A0;</span><span
6732 class="cmtt-8">&#x00A0;</span><span
6733 class="cmtt-8">&#x00A0;5)</span><span
6734 class="cmtt-8">&#x00A0;iterate</span><span
6735 class="cmtt-8">&#x00A0;[i]</span><span
6736 class="cmtt-8">&#x00A0;over</span><span
6737 class="cmtt-8">&#x00A0;the</span><span
6738 class="cmtt-8">&#x00A0;range</span><span
6739 class="cmtt-8">&#x00A0;0</span><span
6740 class="cmtt-8">&#x00A0;...</span><span
6741 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
6742 class="cmtt-8">&#x00A0;</span><span
6743 class="cmsy-8">{</span>
6744 <br class="fancyvrb" /><a
6745 id="x1-100014r6"></a><span
6746 class="cmr-6">6</span><span
6747 class="cmtt-8">&#x00A0;</span><span
6748 class="cmtt-8">&#x00A0;</span>
6749 <br class="fancyvrb" /><a
6750 id="x1-100016r7"></a><span
6751 class="cmr-6">7</span><span
6752 class="cmtt-8">&#x00A0;</span><span
6753 class="cmtt-8">&#x00A0;</span><span
6754 class="cmtt-8">&#x00A0;</span><span
6755 class="cmtt-8">&#x00A0;</span><span
6756 class="cmtt-8">&#x00A0;</span><span
6757 class="cmtt-8">&#x00A0;</span><span
6758 class="cmtt-8">&#x00A0;</span><span
6759 class="cmtt-8">&#x00A0;</span><span
6760 class="cmtt-8">&#x00A0;6)</span><span
6761 class="cmtt-8">&#x00A0;[class]</span><span
6762 class="cmtt-8">&#x00A0;=</span><span
6763 class="cmtt-8">&#x00A0;vector</span><span
6764 class="cmtt-8">&#x00A0;[floor1_partition_class]</span><span
6765 class="cmtt-8">&#x00A0;</span><span
6766 class="cmtt-8">&#x00A0;element</span><span
6767 class="cmtt-8">&#x00A0;[i]</span>
6768 <br class="fancyvrb" /><a
6769 id="x1-100018r8"></a><span
6770 class="cmr-6">8</span><span
6771 class="cmtt-8">&#x00A0;</span><span
6772 class="cmtt-8">&#x00A0;</span><span
6773 class="cmtt-8">&#x00A0;</span><span
6774 class="cmtt-8">&#x00A0;</span><span
6775 class="cmtt-8">&#x00A0;</span><span
6776 class="cmtt-8">&#x00A0;</span><span
6777 class="cmtt-8">&#x00A0;</span><span
6778 class="cmtt-8">&#x00A0;</span><span
6779 class="cmtt-8">&#x00A0;7)</span><span
6780 class="cmtt-8">&#x00A0;[cdim]</span><span
6781 class="cmtt-8">&#x00A0;</span><span
6782 class="cmtt-8">&#x00A0;=</span><span
6783 class="cmtt-8">&#x00A0;vector</span><span
6784 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
6785 class="cmtt-8">&#x00A0;element</span><span
6786 class="cmtt-8">&#x00A0;[class]</span>
6787 <br class="fancyvrb" /><a
6788 id="x1-100020r9"></a><span
6789 class="cmr-6">9</span><span
6790 class="cmtt-8">&#x00A0;</span><span
6791 class="cmtt-8">&#x00A0;</span><span
6792 class="cmtt-8">&#x00A0;</span><span
6793 class="cmtt-8">&#x00A0;</span><span
6794 class="cmtt-8">&#x00A0;</span><span
6795 class="cmtt-8">&#x00A0;</span><span
6796 class="cmtt-8">&#x00A0;</span><span
6797 class="cmtt-8">&#x00A0;</span><span
6798 class="cmtt-8">&#x00A0;8)</span><span
6799 class="cmtt-8">&#x00A0;[cbits]</span><span
6800 class="cmtt-8">&#x00A0;=</span><span
6801 class="cmtt-8">&#x00A0;vector</span><span
6802 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
6803 class="cmtt-8">&#x00A0;element</span><span
6804 class="cmtt-8">&#x00A0;[class]</span>
6805 <br class="fancyvrb" /><a
6806 id="x1-100022r10"></a><span
6807 class="cmr-6">10</span><span
6808 class="cmtt-8">&#x00A0;</span><span
6809 class="cmtt-8">&#x00A0;</span><span
6810 class="cmtt-8">&#x00A0;</span><span
6811 class="cmtt-8">&#x00A0;</span><span
6812 class="cmtt-8">&#x00A0;</span><span
6813 class="cmtt-8">&#x00A0;</span><span
6814 class="cmtt-8">&#x00A0;</span><span
6815 class="cmtt-8">&#x00A0;</span><span
6816 class="cmtt-8">&#x00A0;9)</span><span
6817 class="cmtt-8">&#x00A0;[csub]</span><span
6818 class="cmtt-8">&#x00A0;</span><span
6819 class="cmtt-8">&#x00A0;=</span><span
6820 class="cmtt-8">&#x00A0;(2</span><span
6821 class="cmtt-8">&#x00A0;exponent</span><span
6822 class="cmtt-8">&#x00A0;[cbits])-1</span>
6823 <br class="fancyvrb" /><a
6824 id="x1-100024r11"></a><span
6825 class="cmr-6">11</span><span
6826 class="cmtt-8">&#x00A0;</span><span
6827 class="cmtt-8">&#x00A0;</span><span
6828 class="cmtt-8">&#x00A0;</span><span
6829 class="cmtt-8">&#x00A0;</span><span
6830 class="cmtt-8">&#x00A0;</span><span
6831 class="cmtt-8">&#x00A0;</span><span
6832 class="cmtt-8">&#x00A0;</span><span
6833 class="cmtt-8">&#x00A0;10)</span><span
6834 class="cmtt-8">&#x00A0;[cval]</span><span
6835 class="cmtt-8">&#x00A0;</span><span
6836 class="cmtt-8">&#x00A0;=</span><span
6837 class="cmtt-8">&#x00A0;0</span>
6838 <br class="fancyvrb" /><a
6839 id="x1-100026r12"></a><span
6840 class="cmr-6">12</span><span
6841 class="cmtt-8">&#x00A0;</span><span
6842 class="cmtt-8">&#x00A0;</span><span
6843 class="cmtt-8">&#x00A0;</span><span
6844 class="cmtt-8">&#x00A0;</span><span
6845 class="cmtt-8">&#x00A0;</span><span
6846 class="cmtt-8">&#x00A0;</span><span
6847 class="cmtt-8">&#x00A0;</span><span
6848 class="cmtt-8">&#x00A0;11)</span><span
6849 class="cmtt-8">&#x00A0;if</span><span
6850 class="cmtt-8">&#x00A0;(</span><span
6851 class="cmtt-8">&#x00A0;[cbits]</span><span
6852 class="cmtt-8">&#x00A0;is</span><span
6853 class="cmtt-8">&#x00A0;greater</span><span
6854 class="cmtt-8">&#x00A0;than</span><span
6855 class="cmtt-8">&#x00A0;zero</span><span
6856 class="cmtt-8">&#x00A0;)</span><span
6857 class="cmtt-8">&#x00A0;</span><span
6858 class="cmsy-8">{</span>
6859 <br class="fancyvrb" /><a
6860 id="x1-100028r13"></a><span
6861 class="cmr-6">13</span><span
6862 class="cmtt-8">&#x00A0;</span><span
6863 class="cmtt-8">&#x00A0;</span>
6864 <br class="fancyvrb" /><a
6865 id="x1-100030r14"></a><span
6866 class="cmr-6">14</span><span
6867 class="cmtt-8">&#x00A0;</span><span
6868 class="cmtt-8">&#x00A0;</span><span
6869 class="cmtt-8">&#x00A0;</span><span
6870 class="cmtt-8">&#x00A0;</span><span
6871 class="cmtt-8">&#x00A0;</span><span
6872 class="cmtt-8">&#x00A0;</span><span
6873 class="cmtt-8">&#x00A0;</span><span
6874 class="cmtt-8">&#x00A0;</span><span
6875 class="cmtt-8">&#x00A0;</span><span
6876 class="cmtt-8">&#x00A0;</span><span
6877 class="cmtt-8">&#x00A0;</span><span
6878 class="cmtt-8">&#x00A0;</span><span
6879 class="cmtt-8">&#x00A0;</span><span
6880 class="cmtt-8">&#x00A0;</span><span
6881 class="cmtt-8">&#x00A0;12)</span><span
6882 class="cmtt-8">&#x00A0;[cval]</span><span
6883 class="cmtt-8">&#x00A0;=</span><span
6884 class="cmtt-8">&#x00A0;read</span><span
6885 class="cmtt-8">&#x00A0;from</span><span
6886 class="cmtt-8">&#x00A0;packet</span><span
6887 class="cmtt-8">&#x00A0;using</span><span
6888 class="cmtt-8">&#x00A0;codebook</span><span
6889 class="cmtt-8">&#x00A0;number</span>
6890 <br class="fancyvrb" /><a
6891 id="x1-100032r15"></a><span
6892 class="cmr-6">15</span><span
6893 class="cmtt-8">&#x00A0;</span><span
6894 class="cmtt-8">&#x00A0;</span><span
6895 class="cmtt-8">&#x00A0;</span><span
6896 class="cmtt-8">&#x00A0;</span><span
6897 class="cmtt-8">&#x00A0;</span><span
6898 class="cmtt-8">&#x00A0;</span><span
6899 class="cmtt-8">&#x00A0;</span><span
6900 class="cmtt-8">&#x00A0;</span><span
6901 class="cmtt-8">&#x00A0;</span><span
6902 class="cmtt-8">&#x00A0;</span><span
6903 class="cmtt-8">&#x00A0;</span><span
6904 class="cmtt-8">&#x00A0;</span><span
6905 class="cmtt-8">&#x00A0;</span><span
6906 class="cmtt-8">&#x00A0;</span><span
6907 class="cmtt-8">&#x00A0;</span><span
6908 class="cmtt-8">&#x00A0;</span><span
6909 class="cmtt-8">&#x00A0;</span><span
6910 class="cmtt-8">&#x00A0;</span><span
6911 class="cmtt-8">&#x00A0;(vector</span><span
6912 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
6913 class="cmtt-8">&#x00A0;element</span><span
6914 class="cmtt-8">&#x00A0;[class])</span><span
6915 class="cmtt-8">&#x00A0;in</span><span
6916 class="cmtt-8">&#x00A0;scalar</span><span
6917 class="cmtt-8">&#x00A0;context</span>
6918 <br class="fancyvrb" /><a
6919 id="x1-100034r16"></a><span
6920 class="cmr-6">16</span><span
6921 class="cmtt-8">&#x00A0;</span><span
6922 class="cmtt-8">&#x00A0;</span><span
6923 class="cmtt-8">&#x00A0;</span><span
6924 class="cmtt-8">&#x00A0;</span><span
6925 class="cmtt-8">&#x00A0;</span><span
6926 class="cmtt-8">&#x00A0;</span><span
6927 class="cmtt-8">&#x00A0;</span><span
6928 class="cmtt-8">&#x00A0;</span><span
6929 class="cmtt-8">&#x00A0;</span><span
6930 class="cmtt-8">&#x00A0;</span><span
6931 class="cmtt-8">&#x00A0;</span><span
6932 class="cmtt-8">&#x00A0;</span><span
6933 class="cmsy-8">}</span>
6934 <br class="fancyvrb" /><a
6935 id="x1-100036r17"></a><span
6936 class="cmr-6">17</span><span
6937 class="cmtt-8">&#x00A0;</span><span
6938 class="cmtt-8">&#x00A0;</span>
6939 <br class="fancyvrb" /><a
6940 id="x1-100038r18"></a><span
6941 class="cmr-6">18</span><span
6942 class="cmtt-8">&#x00A0;</span><span
6943 class="cmtt-8">&#x00A0;</span><span
6944 class="cmtt-8">&#x00A0;</span><span
6945 class="cmtt-8">&#x00A0;</span><span
6946 class="cmtt-8">&#x00A0;</span><span
6947 class="cmtt-8">&#x00A0;</span><span
6948 class="cmtt-8">&#x00A0;</span><span
6949 class="cmtt-8">&#x00A0;13)</span><span
6950 class="cmtt-8">&#x00A0;iterate</span><span
6951 class="cmtt-8">&#x00A0;[j]</span><span
6952 class="cmtt-8">&#x00A0;over</span><span
6953 class="cmtt-8">&#x00A0;the</span><span
6954 class="cmtt-8">&#x00A0;range</span><span
6955 class="cmtt-8">&#x00A0;0</span><span
6956 class="cmtt-8">&#x00A0;...</span><span
6957 class="cmtt-8">&#x00A0;[cdim]-1</span><span
6958 class="cmtt-8">&#x00A0;</span><span
6959 class="cmsy-8">{</span>
6960 <br class="fancyvrb" /><a
6961 id="x1-100040r19"></a><span
6962 class="cmr-6">19</span><span
6963 class="cmtt-8">&#x00A0;</span><span
6964 class="cmtt-8">&#x00A0;</span>
6965 <br class="fancyvrb" /><a
6966 id="x1-100042r20"></a><span
6967 class="cmr-6">20</span><span
6968 class="cmtt-8">&#x00A0;</span><span
6969 class="cmtt-8">&#x00A0;</span><span
6970 class="cmtt-8">&#x00A0;</span><span
6971 class="cmtt-8">&#x00A0;</span><span
6972 class="cmtt-8">&#x00A0;</span><span
6973 class="cmtt-8">&#x00A0;</span><span
6974 class="cmtt-8">&#x00A0;</span><span
6975 class="cmtt-8">&#x00A0;</span><span
6976 class="cmtt-8">&#x00A0;</span><span
6977 class="cmtt-8">&#x00A0;</span><span
6978 class="cmtt-8">&#x00A0;</span><span
6979 class="cmtt-8">&#x00A0;</span><span
6980 class="cmtt-8">&#x00A0;</span><span
6981 class="cmtt-8">&#x00A0;</span><span
6982 class="cmtt-8">&#x00A0;14)</span><span
6983 class="cmtt-8">&#x00A0;[book]</span><span
6984 class="cmtt-8">&#x00A0;=</span><span
6985 class="cmtt-8">&#x00A0;array</span><span
6986 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
6987 class="cmtt-8">&#x00A0;element</span><span
6988 class="cmtt-8">&#x00A0;[class],([cval]</span><span
6989 class="cmtt-8">&#x00A0;bitwise</span><span
6990 class="cmtt-8">&#x00A0;AND</span><span
6991 class="cmtt-8">&#x00A0;[csub])</span>
6992 <br class="fancyvrb" /><a
6993 id="x1-100044r21"></a><span
6994 class="cmr-6">21</span><span
6995 class="cmtt-8">&#x00A0;</span><span
6996 class="cmtt-8">&#x00A0;</span><span
6997 class="cmtt-8">&#x00A0;</span><span
6998 class="cmtt-8">&#x00A0;</span><span
6999 class="cmtt-8">&#x00A0;</span><span
7000 class="cmtt-8">&#x00A0;</span><span
7001 class="cmtt-8">&#x00A0;</span><span
7002 class="cmtt-8">&#x00A0;</span><span
7003 class="cmtt-8">&#x00A0;</span><span
7004 class="cmtt-8">&#x00A0;</span><span
7005 class="cmtt-8">&#x00A0;</span><span
7006 class="cmtt-8">&#x00A0;</span><span
7007 class="cmtt-8">&#x00A0;</span><span
7008 class="cmtt-8">&#x00A0;</span><span
7009 class="cmtt-8">&#x00A0;15)</span><span
7010 class="cmtt-8">&#x00A0;[cval]</span><span
7011 class="cmtt-8">&#x00A0;=</span><span
7012 class="cmtt-8">&#x00A0;[cval]</span><span
7013 class="cmtt-8">&#x00A0;right</span><span
7014 class="cmtt-8">&#x00A0;shifted</span><span
7015 class="cmtt-8">&#x00A0;[cbits]</span><span
7016 class="cmtt-8">&#x00A0;bits</span>
7017 <br class="fancyvrb" /><a
7018 id="x1-100046r22"></a><span
7019 class="cmr-6">22</span><span
7020 class="cmtt-8">&#x00A0;</span><span
7021 class="cmtt-8">&#x00A0; </span><span
7022 class="cmtt-8">&#x00A0;</span><span
7023 class="cmtt-8">&#x00A0;</span><span
7024 class="cmtt-8">&#x00A0;</span><span
7025 class="cmtt-8">&#x00A0;</span><span
7026 class="cmtt-8">&#x00A0;16)</span><span
7027 class="cmtt-8">&#x00A0;if</span><span
7028 class="cmtt-8">&#x00A0;(</span><span
7029 class="cmtt-8">&#x00A0;[book]</span><span
7030 class="cmtt-8">&#x00A0;is</span><span
7031 class="cmtt-8">&#x00A0;not</span><span
7032 class="cmtt-8">&#x00A0;less</span><span
7033 class="cmtt-8">&#x00A0;than</span><span
7034 class="cmtt-8">&#x00A0;zero</span><span
7035 class="cmtt-8">&#x00A0;)</span><span
7036 class="cmtt-8">&#x00A0;</span><span
7037 class="cmsy-8">{</span>
7038 <br class="fancyvrb" /><a
7039 id="x1-100048r23"></a><span
7040 class="cmr-6">23</span><span
7041 class="cmtt-8">&#x00A0;</span><span
7042 class="cmtt-8">&#x00A0;</span>
7043 <br class="fancyvrb" /><a
7044 id="x1-100050r24"></a><span
7045 class="cmr-6">24</span><span
7046 class="cmtt-8">&#x00A0;</span><span
7047 class="cmtt-8">&#x00A0; </span><span
7048 class="cmtt-8">&#x00A0;</span><span
7049 class="cmtt-8">&#x00A0;</span><span
7050 class="cmtt-8">&#x00A0;</span><span
7051 class="cmtt-8">&#x00A0;</span><span
7052 class="cmtt-8">&#x00A0;</span><span
7053 class="cmtt-8">&#x00A0;</span><span
7054 class="cmtt-8">&#x00A0;</span><span
7055 class="cmtt-8">&#x00A0;</span><span
7056 class="cmtt-8">&#x00A0;</span><span
7057 class="cmtt-8">&#x00A0;</span><span
7058 class="cmtt-8">&#x00A0;17)</span><span
7059 class="cmtt-8">&#x00A0;vector</span><span
7060 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
7061 class="cmtt-8">&#x00A0;element</span><span
7062 class="cmtt-8">&#x00A0;([j]+[offset])</span><span
7063 class="cmtt-8">&#x00A0;=</span><span
7064 class="cmtt-8">&#x00A0;read</span><span
7065 class="cmtt-8">&#x00A0;from</span><span
7066 class="cmtt-8">&#x00A0;packet</span><span
7067 class="cmtt-8">&#x00A0;using</span><span
7068 class="cmtt-8">&#x00A0;codebook</span>
7069 <br class="fancyvrb" /><a
7070 id="x1-100052r25"></a><span
7071 class="cmr-6">25</span><span
7072 class="cmtt-8">&#x00A0;</span><span
7073 class="cmtt-8">&#x00A0;</span><span
7074 class="cmtt-8">&#x00A0;</span><span
7075 class="cmtt-8">&#x00A0;</span><span
7076 class="cmtt-8">&#x00A0;</span><span
7077 class="cmtt-8">&#x00A0;</span><span
7078 class="cmtt-8">&#x00A0;</span><span
7079 class="cmtt-8">&#x00A0;</span><span
7080 class="cmtt-8">&#x00A0;</span><span
7081 class="cmtt-8">&#x00A0;</span><span
7082 class="cmtt-8">&#x00A0;</span><span
7083 class="cmtt-8">&#x00A0;</span><span
7084 class="cmtt-8">&#x00A0;</span><span
7085 class="cmtt-8">&#x00A0;</span><span
7086 class="cmtt-8">&#x00A0;</span><span
7087 class="cmtt-8">&#x00A0;</span><span
7088 class="cmtt-8">&#x00A0;</span><span
7089 class="cmtt-8">&#x00A0;</span><span
7090 class="cmtt-8">&#x00A0;</span><span
7091 class="cmtt-8">&#x00A0;</span><span
7092 class="cmtt-8">&#x00A0;</span><span
7093 class="cmtt-8">&#x00A0;</span><span
7094 class="cmtt-8">&#x00A0;</span><span
7095 class="cmtt-8">&#x00A0;</span><span
7096 class="cmtt-8">&#x00A0;[book]</span><span
7097 class="cmtt-8">&#x00A0;in</span><span
7098 class="cmtt-8">&#x00A0;scalar</span><span
7099 class="cmtt-8">&#x00A0;context</span>
7100 <br class="fancyvrb" /><a
7101 id="x1-100054r26"></a><span
7102 class="cmr-6">26</span><span
7103 class="cmtt-8">&#x00A0;</span><span
7104 class="cmtt-8">&#x00A0;</span>
7105 <br class="fancyvrb" /><a
7106 id="x1-100056r27"></a><span
7107 class="cmr-6">27</span><span
7108 class="cmtt-8">&#x00A0;</span><span
7109 class="cmtt-8">&#x00A0;</span><span
7110 class="cmtt-8">&#x00A0;</span><span
7111 class="cmtt-8">&#x00A0;</span><span
7112 class="cmtt-8">&#x00A0;</span><span
7113 class="cmtt-8">&#x00A0;</span><span
7114 class="cmtt-8">&#x00A0;</span><span
7115 class="cmtt-8">&#x00A0;</span><span
7116 class="cmtt-8">&#x00A0;</span><span
7117 class="cmtt-8">&#x00A0;</span><span
7118 class="cmtt-8">&#x00A0;</span><span
7119 class="cmtt-8">&#x00A0;</span><span
7120 class="cmtt-8">&#x00A0;</span><span
7121 class="cmtt-8">&#x00A0;</span><span
7122 class="cmtt-8">&#x00A0;</span><span
7123 class="cmtt-8">&#x00A0;</span><span
7124 class="cmtt-8">&#x00A0;</span><span
7125 class="cmtt-8">&#x00A0;</span><span
7126 class="cmtt-8">&#x00A0;</span><span
7127 class="cmsy-8">}</span><span
7128 class="cmtt-8">&#x00A0;else</span><span
7129 class="cmtt-8">&#x00A0;[book]</span><span
7130 class="cmtt-8">&#x00A0;is</span><span
7131 class="cmtt-8">&#x00A0;less</span><span
7132 class="cmtt-8">&#x00A0;than</span><span
7133 class="cmtt-8">&#x00A0;zero</span><span
7134 class="cmtt-8">&#x00A0;</span><span
7135 class="cmsy-8">{</span>
7136 <br class="fancyvrb" /><a
7137 id="x1-100058r28"></a><span
7138 class="cmr-6">28</span><span
7139 class="cmtt-8">&#x00A0;</span><span
7140 class="cmtt-8">&#x00A0;</span>
7141 <br class="fancyvrb" /><a
7142 id="x1-100060r29"></a><span
7143 class="cmr-6">29</span><span
7144 class="cmtt-8">&#x00A0;</span><span
7145 class="cmtt-8">&#x00A0; </span><span
7146 class="cmtt-8">&#x00A0;</span><span
7147 class="cmtt-8">&#x00A0;</span><span
7148 class="cmtt-8">&#x00A0;</span><span
7149 class="cmtt-8">&#x00A0;</span><span
7150 class="cmtt-8">&#x00A0;</span><span
7151 class="cmtt-8">&#x00A0;</span><span
7152 class="cmtt-8">&#x00A0;</span><span
7153 class="cmtt-8">&#x00A0;</span><span
7154 class="cmtt-8">&#x00A0;</span><span
7155 class="cmtt-8">&#x00A0;</span><span
7156 class="cmtt-8">&#x00A0;18)</span><span
7157 class="cmtt-8">&#x00A0;vector</span><span
7158 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
7159 class="cmtt-8">&#x00A0;element</span><span
7160 class="cmtt-8">&#x00A0;([j]+[offset])</span><span
7161 class="cmtt-8">&#x00A0;=</span><span
7162 class="cmtt-8">&#x00A0;0</span>
7163 <br class="fancyvrb" /><a
7164 id="x1-100062r30"></a><span
7165 class="cmr-6">30</span><span
7166 class="cmtt-8">&#x00A0;</span><span
7167 class="cmtt-8">&#x00A0;</span>
7168 <br class="fancyvrb" /><a
7169 id="x1-100064r31"></a><span
7170 class="cmr-6">31</span><span
7171 class="cmtt-8">&#x00A0;</span><span
7172 class="cmtt-8">&#x00A0;</span><span
7173 class="cmtt-8">&#x00A0;</span><span
7174 class="cmtt-8">&#x00A0;</span><span
7175 class="cmtt-8">&#x00A0;</span><span
7176 class="cmtt-8">&#x00A0;</span><span
7177 class="cmtt-8">&#x00A0;</span><span
7178 class="cmtt-8">&#x00A0;</span><span
7179 class="cmtt-8">&#x00A0;</span><span
7180 class="cmtt-8">&#x00A0;</span><span
7181 class="cmtt-8">&#x00A0;</span><span
7182 class="cmtt-8">&#x00A0;</span><span
7183 class="cmtt-8">&#x00A0;</span><span
7184 class="cmtt-8">&#x00A0;</span><span
7185 class="cmtt-8">&#x00A0;</span><span
7186 class="cmtt-8">&#x00A0;</span><span
7187 class="cmtt-8">&#x00A0;</span><span
7188 class="cmtt-8">&#x00A0;</span><span
7189 class="cmtt-8">&#x00A0;</span><span
7190 class="cmsy-8">}</span>
7191 <br class="fancyvrb" /><a
7192 id="x1-100066r32"></a><span
7193 class="cmr-6">32</span><span
7194 class="cmtt-8">&#x00A0;</span><span
7195 class="cmtt-8">&#x00A0;</span><span
7196 class="cmtt-8">&#x00A0;</span><span
7197 class="cmtt-8">&#x00A0;</span><span
7198 class="cmtt-8">&#x00A0;</span><span
7199 class="cmtt-8">&#x00A0;</span><span
7200 class="cmtt-8">&#x00A0;</span><span
7201 class="cmtt-8">&#x00A0;</span><span
7202 class="cmtt-8">&#x00A0;</span><span
7203 class="cmtt-8">&#x00A0;</span><span
7204 class="cmtt-8">&#x00A0;</span><span
7205 class="cmtt-8">&#x00A0;</span><span
7206 class="cmsy-8">}</span>
7207 <br class="fancyvrb" /><a
7208 id="x1-100068r33"></a><span
7209 class="cmr-6">33</span><span
7210 class="cmtt-8">&#x00A0;</span><span
7211 class="cmtt-8">&#x00A0;</span>
7212 <br class="fancyvrb" /><a
7213 id="x1-100070r34"></a><span
7214 class="cmr-6">34</span><span
7215 class="cmtt-8">&#x00A0;</span><span
7216 class="cmtt-8">&#x00A0;</span><span
7217 class="cmtt-8">&#x00A0;</span><span
7218 class="cmtt-8">&#x00A0;</span><span
7219 class="cmtt-8">&#x00A0;</span><span
7220 class="cmtt-8">&#x00A0;</span><span
7221 class="cmtt-8">&#x00A0;</span><span
7222 class="cmtt-8">&#x00A0;19)</span><span
7223 class="cmtt-8">&#x00A0;[offset]</span><span
7224 class="cmtt-8">&#x00A0;=</span><span
7225 class="cmtt-8">&#x00A0;[offset]</span><span
7226 class="cmtt-8">&#x00A0;+</span><span
7227 class="cmtt-8">&#x00A0;[cdim]</span>
7228 <br class="fancyvrb" /><a
7229 id="x1-100072r35"></a><span
7230 class="cmr-6">35</span><span
7231 class="cmtt-8">&#x00A0;</span><span
7232 class="cmtt-8">&#x00A0;</span>
7233 <br class="fancyvrb" /><a
7234 id="x1-100074r36"></a><span
7235 class="cmr-6">36</span><span
7236 class="cmtt-8">&#x00A0;</span><span
7237 class="cmtt-8">&#x00A0;</span><span
7238 class="cmtt-8">&#x00A0;</span><span
7239 class="cmtt-8">&#x00A0;</span><span
7240 class="cmtt-8">&#x00A0;</span><span
7241 class="cmtt-8">&#x00A0;</span><span
7242 class="cmtt-8">&#x00A0;</span><span
7243 class="cmsy-8">}</span>
7244 <br class="fancyvrb" /><a
7245 id="x1-100076r37"></a><span
7246 class="cmr-6">37</span><span
7247 class="cmtt-8">&#x00A0;</span><span
7248 class="cmtt-8">&#x00A0;</span>
7249 <br class="fancyvrb" /><a
7250 id="x1-100078r38"></a><span
7251 class="cmr-6">38</span><span
7252 class="cmtt-8">&#x00A0;</span><span
7253 class="cmtt-8">&#x00A0;</span><span
7254 class="cmtt-8">&#x00A0;20)</span><span
7255 class="cmtt-8">&#x00A0;done</span>
7256 </div>
7257 <!--l. 224--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
7261 end-of-packet is reached during any read operation above, floor decode is to return &#8217;unused&#8217;
7262 status as if the <span
7263 class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
7264 <!--l. 230--><p class="noindent" >Vector <span
7265 class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
7266 <!--l. 235--><p class="noindent" ><span class="paragraphHead"><a
7267 id="x1-1010007.2.2"></a><span
7268 class="cmbx-12">curve computation</span></span>
7269 Curve computation is split into two logical steps; the first step derives final Y amplitude values
7270 from the encoded, wrapped difference values taken from the bitstream. The second step
7271 plots the curve lines. Also, although zero-difference values are used in the iterative
7272 prediction to find final Y values, these points are conditionally skipped during final
7273 line computation in step two. Skipping zero-difference values allows a smoother line
7274 fit.
7275 <!--l. 245--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
7276 implementors are warned to follow the details closely. Deviation from implementing a strictly
7277 equivalent algorithm can result in serious decoding errors.
7278 <!--l. 250--><p class="noindent" >
7279 <dl class="description"><dt class="description">
7280 <span
7281 class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd
7282 class="description">
7283 <!--l. 253--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
7284 values, then apply to line prediction.
7285 <!--l. 256--><p class="noindent" >
7286 <div class="fancyvrb" id="fancyvrb31">
7288 id="x1-101002r1"></a><span
7289 class="cmr-6">1</span><span
7290 class="cmtt-8">&#x00A0;</span><span
7291 class="cmtt-8">&#x00A0;</span><span
7292 class="cmtt-8">&#x00A0;</span><span
7293 class="cmtt-8">&#x00A0;1)</span><span
7294 class="cmtt-8">&#x00A0;[range]</span><span
7295 class="cmtt-8">&#x00A0;=</span><span
7296 class="cmtt-8">&#x00A0;vector</span><span
7297 class="cmtt-8">&#x00A0;</span><span
7298 class="cmsy-8">{</span><span
7299 class="cmtt-8">&#x00A0;256,</span><span
7300 class="cmtt-8">&#x00A0;128,</span><span
7301 class="cmtt-8">&#x00A0;86,</span><span
7302 class="cmtt-8">&#x00A0;64</span><span
7303 class="cmtt-8">&#x00A0;</span><span
7304 class="cmsy-8">}</span><span
7305 class="cmtt-8">&#x00A0;element</span><span
7306 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
7307 <br class="fancyvrb" /><a
7308 id="x1-101004r2"></a><span
7309 class="cmr-6">2</span><span
7310 class="cmtt-8">&#x00A0;</span><span
7311 class="cmtt-8">&#x00A0;</span><span
7312 class="cmtt-8">&#x00A0;</span><span
7313 class="cmtt-8">&#x00A0;2)</span><span
7314 class="cmtt-8">&#x00A0;vector</span><span
7315 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
7316 class="cmtt-8">&#x00A0;element</span><span
7317 class="cmtt-8">&#x00A0;[0]</span><span
7318 class="cmtt-8">&#x00A0;=</span><span
7319 class="cmtt-8">&#x00A0;set</span>
7320 <br class="fancyvrb" /><a
7321 id="x1-101006r3"></a><span
7322 class="cmr-6">3</span><span
7323 class="cmtt-8">&#x00A0;</span><span
7324 class="cmtt-8">&#x00A0;</span><span
7325 class="cmtt-8">&#x00A0;</span><span
7326 class="cmtt-8">&#x00A0;3)</span><span
7327 class="cmtt-8">&#x00A0;vector</span><span
7328 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
7329 class="cmtt-8">&#x00A0;element</span><span
7330 class="cmtt-8">&#x00A0;[1]</span><span
7331 class="cmtt-8">&#x00A0;=</span><span
7332 class="cmtt-8">&#x00A0;set</span>
7333 <br class="fancyvrb" /><a
7334 id="x1-101008r4"></a><span
7335 class="cmr-6">4</span><span
7336 class="cmtt-8">&#x00A0;</span><span
7337 class="cmtt-8">&#x00A0;</span><span
7338 class="cmtt-8">&#x00A0;</span><span
7339 class="cmtt-8">&#x00A0;4)</span><span
7340 class="cmtt-8">&#x00A0;vector</span><span
7341 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
7342 class="cmtt-8">&#x00A0;element</span><span
7343 class="cmtt-8">&#x00A0;[0]</span><span
7344 class="cmtt-8">&#x00A0;=</span><span
7345 class="cmtt-8">&#x00A0;vector</span><span
7346 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
7347 class="cmtt-8">&#x00A0;element</span><span
7348 class="cmtt-8">&#x00A0;[0]</span>
7349 <br class="fancyvrb" /><a
7350 id="x1-101010r5"></a><span
7351 class="cmr-6">5</span><span
7352 class="cmtt-8">&#x00A0;</span><span
7353 class="cmtt-8">&#x00A0;</span><span
7354 class="cmtt-8">&#x00A0;</span><span
7355 class="cmtt-8">&#x00A0;5)</span><span
7356 class="cmtt-8">&#x00A0;vector</span><span
7357 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
7358 class="cmtt-8">&#x00A0;element</span><span
7359 class="cmtt-8">&#x00A0;[1]</span><span
7360 class="cmtt-8">&#x00A0;=</span><span
7361 class="cmtt-8">&#x00A0;vector</span><span
7362 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
7363 class="cmtt-8">&#x00A0;element</span><span
7364 class="cmtt-8">&#x00A0;[1]</span>
7365 <br class="fancyvrb" /><a
7366 id="x1-101012r6"></a><span
7367 class="cmr-6">6</span><span
7368 class="cmtt-8">&#x00A0;</span><span
7369 class="cmtt-8">&#x00A0;</span><span
7370 class="cmtt-8">&#x00A0;</span><span
7371 class="cmtt-8">&#x00A0;6)</span><span
7372 class="cmtt-8">&#x00A0;iterate</span><span
7373 class="cmtt-8">&#x00A0;[i]</span><span
7374 class="cmtt-8">&#x00A0;over</span><span
7375 class="cmtt-8">&#x00A0;the</span><span
7376 class="cmtt-8">&#x00A0;range</span><span
7377 class="cmtt-8">&#x00A0;2</span><span
7378 class="cmtt-8">&#x00A0;...</span><span
7379 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
7380 class="cmtt-8">&#x00A0;</span><span
7381 class="cmsy-8">{</span>
7382 <br class="fancyvrb" /><a
7383 id="x1-101014r7"></a><span
7384 class="cmr-6">7</span><span
7385 class="cmtt-8">&#x00A0;</span><span
7386 class="cmtt-8">&#x00A0;</span>
7387 <br class="fancyvrb" /><a
7388 id="x1-101016r8"></a><span
7389 class="cmr-6">8</span><span
7390 class="cmtt-8">&#x00A0;</span><span
7391 class="cmtt-8">&#x00A0;</span><span
7392 class="cmtt-8">&#x00A0;</span><span
7393 class="cmtt-8">&#x00A0;</span><span
7394 class="cmtt-8">&#x00A0;</span><span
7395 class="cmtt-8">&#x00A0;</span><span
7396 class="cmtt-8">&#x00A0;</span><span
7397 class="cmtt-8">&#x00A0;</span><span
7398 class="cmtt-8">&#x00A0;7)</span><span
7399 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
7400 class="cmtt-8">&#x00A0;=</span><span
7401 class="cmtt-8">&#x00A0;</span><a
7402 href="#x1-1200009.2.4"><span
7403 class="cmtt-8">low_neighbor</span></a><span
7404 class="cmtt-8">([floor1_X_list],[i])</span>
7405 <br class="fancyvrb" /><a
7406 id="x1-101018r9"></a><span
7407 class="cmr-6">9</span><span
7408 class="cmtt-8">&#x00A0;</span><span
7409 class="cmtt-8">&#x00A0;</span><span
7410 class="cmtt-8">&#x00A0;</span><span
7411 class="cmtt-8">&#x00A0;</span><span
7412 class="cmtt-8">&#x00A0;</span><span
7413 class="cmtt-8">&#x00A0;</span><span
7414 class="cmtt-8">&#x00A0;</span><span
7415 class="cmtt-8">&#x00A0;</span><span
7416 class="cmtt-8">&#x00A0;8)</span><span
7417 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
7418 class="cmtt-8">&#x00A0;=</span><span
7419 class="cmtt-8">&#x00A0;</span><a
7420 href="#x1-1210009.2.5"><span
7421 class="cmtt-8">high_neighbor</span></a><span
7422 class="cmtt-8">([floor1_X_list],[i])</span>
7423 <br class="fancyvrb" /><a
7424 id="x1-101020r10"></a><span
7425 class="cmr-6">10</span><span
7426 class="cmtt-8">&#x00A0;</span><span
7427 class="cmtt-8">&#x00A0;</span>
7428 <br class="fancyvrb" /><a
7429 id="x1-101022r11"></a><span
7430 class="cmr-6">11</span><span
7431 class="cmtt-8">&#x00A0;</span><span
7432 class="cmtt-8">&#x00A0;</span><span
7433 class="cmtt-8">&#x00A0;</span><span
7434 class="cmtt-8">&#x00A0;</span><span
7435 class="cmtt-8">&#x00A0;</span><span
7436 class="cmtt-8">&#x00A0;</span><span
7437 class="cmtt-8">&#x00A0;</span><span
7438 class="cmtt-8">&#x00A0;</span><span
7439 class="cmtt-8">&#x00A0;9)</span><span
7440 class="cmtt-8">&#x00A0;[predicted]</span><span
7441 class="cmtt-8">&#x00A0;=</span><span
7442 class="cmtt-8">&#x00A0;</span><a
7443 href="#x1-1220009.2.6"><span
7444 class="cmtt-8">render_point</span></a><span
7445 class="cmtt-8">(</span><span
7446 class="cmtt-8">&#x00A0;vector</span><span
7447 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
7448 class="cmtt-8">&#x00A0;element</span><span
7449 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
7450 <br class="fancyvrb" /><a
7451 id="x1-101024r12"></a><span
7452 class="cmr-6">12</span><span
7453 class="cmtt-8">&#x00A0;</span><span
7454 class="cmtt-8">&#x00A0; </span><span
7455 class="cmtt-8">&#x00A0;</span><span
7456 class="cmtt-8">&#x00A0;</span><span
7457 class="cmtt-8">&#x00A0;</span><span
7458 class="cmtt-8">&#x00A0;</span><span
7459 class="cmtt-8">&#x00A0;</span><span
7460 class="cmtt-8">&#x00A0;vector</span><span
7461 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
7462 class="cmtt-8">&#x00A0;element</span><span
7463 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
7464 <br class="fancyvrb" /><a
7465 id="x1-101026r13"></a><span
7466 class="cmr-6">13</span><span
7467 class="cmtt-8">&#x00A0;</span><span
7468 class="cmtt-8">&#x00A0;</span><span
7469 class="cmtt-8">&#x00A0;</span><span
7470 class="cmtt-8">&#x00A0;</span><span
7471 class="cmtt-8">&#x00A0;</span><span
7472 class="cmtt-8">&#x00A0;</span><span
7473 class="cmtt-8">&#x00A0;</span><span
7474 class="cmtt-8">&#x00A0;</span><span
7475 class="cmtt-8">&#x00A0;</span><span
7476 class="cmtt-8">&#x00A0;</span><span
7477 class="cmtt-8">&#x00A0;</span><span
7478 class="cmtt-8">&#x00A0;</span><span
7479 class="cmtt-8">&#x00A0;</span><span
7480 class="cmtt-8">&#x00A0;</span><span
7481 class="cmtt-8">&#x00A0;</span><span
7482 class="cmtt-8">&#x00A0;</span><span
7483 class="cmtt-8">&#x00A0;</span><span
7484 class="cmtt-8">&#x00A0;</span><span
7485 class="cmtt-8">&#x00A0;</span><span
7486 class="cmtt-8">&#x00A0;</span><span
7487 class="cmtt-8">&#x00A0;</span><span
7488 class="cmtt-8">&#x00A0;</span><span
7489 class="cmtt-8">&#x00A0;</span><span
7490 class="cmtt-8">&#x00A0;</span><span
7491 class="cmtt-8">&#x00A0;</span><span
7492 class="cmtt-8">&#x00A0;</span><span
7493 class="cmtt-8">&#x00A0;</span><span
7494 class="cmtt-8">&#x00A0;</span><span
7495 class="cmtt-8">&#x00A0;</span><span
7496 class="cmtt-8">&#x00A0;</span><span
7497 class="cmtt-8">&#x00A0;</span><span
7498 class="cmtt-8">&#x00A0;</span><span
7499 class="cmtt-8">&#x00A0;</span><span
7500 class="cmtt-8">&#x00A0;</span><span
7501 class="cmtt-8">&#x00A0;</span><span
7502 class="cmtt-8">&#x00A0;</span><span
7503 class="cmtt-8">&#x00A0;</span><span
7504 class="cmtt-8">&#x00A0;</span><span
7505 class="cmtt-8">&#x00A0;</span><span
7506 class="cmtt-8">&#x00A0;vector</span><span
7507 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
7508 class="cmtt-8">&#x00A0;element</span><span
7509 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
7510 <br class="fancyvrb" /><a
7511 id="x1-101028r14"></a><span
7512 class="cmr-6">14</span><span
7513 class="cmtt-8">&#x00A0;</span><span
7514 class="cmtt-8">&#x00A0; </span><span
7515 class="cmtt-8">&#x00A0;</span><span
7516 class="cmtt-8">&#x00A0;</span><span
7517 class="cmtt-8">&#x00A0;</span><span
7518 class="cmtt-8">&#x00A0;</span><span
7519 class="cmtt-8">&#x00A0;</span><span
7520 class="cmtt-8">&#x00A0;vector</span><span
7521 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
7522 class="cmtt-8">&#x00A0;element</span><span
7523 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
7524 <br class="fancyvrb" /><a
7525 id="x1-101030r15"></a><span
7526 class="cmr-6">15</span><span
7527 class="cmtt-8">&#x00A0;</span><span
7528 class="cmtt-8">&#x00A0;</span><span
7529 class="cmtt-8">&#x00A0;</span><span
7530 class="cmtt-8">&#x00A0;</span><span
7531 class="cmtt-8">&#x00A0;</span><span
7532 class="cmtt-8">&#x00A0;</span><span
7533 class="cmtt-8">&#x00A0;</span><span
7534 class="cmtt-8">&#x00A0;</span><span
7535 class="cmtt-8">&#x00A0;</span><span
7536 class="cmtt-8">&#x00A0;</span><span
7537 class="cmtt-8">&#x00A0;</span><span
7538 class="cmtt-8">&#x00A0;</span><span
7539 class="cmtt-8">&#x00A0;</span><span
7540 class="cmtt-8">&#x00A0;</span><span
7541 class="cmtt-8">&#x00A0;</span><span
7542 class="cmtt-8">&#x00A0;</span><span
7543 class="cmtt-8">&#x00A0;</span><span
7544 class="cmtt-8">&#x00A0;</span><span
7545 class="cmtt-8">&#x00A0;</span><span
7546 class="cmtt-8">&#x00A0;</span><span
7547 class="cmtt-8">&#x00A0;</span><span
7548 class="cmtt-8">&#x00A0;</span><span
7549 class="cmtt-8">&#x00A0;</span><span
7550 class="cmtt-8">&#x00A0;</span><span
7551 class="cmtt-8">&#x00A0;</span><span
7552 class="cmtt-8">&#x00A0;</span><span
7553 class="cmtt-8">&#x00A0;</span><span
7554 class="cmtt-8">&#x00A0;</span><span
7555 class="cmtt-8">&#x00A0;</span><span
7556 class="cmtt-8">&#x00A0;</span><span
7557 class="cmtt-8">&#x00A0;</span><span
7558 class="cmtt-8">&#x00A0;</span><span
7559 class="cmtt-8">&#x00A0;</span><span
7560 class="cmtt-8">&#x00A0;</span><span
7561 class="cmtt-8">&#x00A0;</span><span
7562 class="cmtt-8">&#x00A0;</span><span
7563 class="cmtt-8">&#x00A0;</span><span
7564 class="cmtt-8">&#x00A0;</span><span
7565 class="cmtt-8">&#x00A0;</span><span
7566 class="cmtt-8">&#x00A0;vector</span><span
7567 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
7568 class="cmtt-8">&#x00A0;element</span><span
7569 class="cmtt-8">&#x00A0;[i]</span><span
7570 class="cmtt-8">&#x00A0;)</span>
7571 <br class="fancyvrb" /><a
7572 id="x1-101032r16"></a><span
7573 class="cmr-6">16</span><span
7574 class="cmtt-8">&#x00A0;</span><span
7575 class="cmtt-8">&#x00A0;</span>
7576 <br class="fancyvrb" /><a
7577 id="x1-101034r17"></a><span
7578 class="cmr-6">17</span><span
7579 class="cmtt-8">&#x00A0;</span><span
7580 class="cmtt-8">&#x00A0;</span><span
7581 class="cmtt-8">&#x00A0;</span><span
7582 class="cmtt-8">&#x00A0;</span><span
7583 class="cmtt-8">&#x00A0;</span><span
7584 class="cmtt-8">&#x00A0;</span><span
7585 class="cmtt-8">&#x00A0;</span><span
7586 class="cmtt-8">&#x00A0;10)</span><span
7587 class="cmtt-8">&#x00A0;[val]</span><span
7588 class="cmtt-8">&#x00A0;=</span><span
7589 class="cmtt-8">&#x00A0;vector</span><span
7590 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
7591 class="cmtt-8">&#x00A0;element</span><span
7592 class="cmtt-8">&#x00A0;[i]</span>
7593 <br class="fancyvrb" /><a
7594 id="x1-101036r18"></a><span
7595 class="cmr-6">18</span><span
7596 class="cmtt-8">&#x00A0;</span><span
7597 class="cmtt-8">&#x00A0;</span><span
7598 class="cmtt-8">&#x00A0;</span><span
7599 class="cmtt-8">&#x00A0;</span><span
7600 class="cmtt-8">&#x00A0;</span><span
7601 class="cmtt-8">&#x00A0;</span><span
7602 class="cmtt-8">&#x00A0;</span><span
7603 class="cmtt-8">&#x00A0;11)</span><span
7604 class="cmtt-8">&#x00A0;[highroom]</span><span
7605 class="cmtt-8">&#x00A0;=</span><span
7606 class="cmtt-8">&#x00A0;[range]</span><span
7607 class="cmtt-8">&#x00A0;-</span><span
7608 class="cmtt-8">&#x00A0;[predicted]</span>
7609 <br class="fancyvrb" /><a
7610 id="x1-101038r19"></a><span
7611 class="cmr-6">19</span><span
7612 class="cmtt-8">&#x00A0;</span><span
7613 class="cmtt-8">&#x00A0;</span><span
7614 class="cmtt-8">&#x00A0;</span><span
7615 class="cmtt-8">&#x00A0;</span><span
7616 class="cmtt-8">&#x00A0;</span><span
7617 class="cmtt-8">&#x00A0;</span><span
7618 class="cmtt-8">&#x00A0;</span><span
7619 class="cmtt-8">&#x00A0;12)</span><span
7620 class="cmtt-8">&#x00A0;[lowroom]</span><span
7621 class="cmtt-8">&#x00A0;</span><span
7622 class="cmtt-8">&#x00A0;=</span><span
7623 class="cmtt-8">&#x00A0;[predicted]</span>
7624 <br class="fancyvrb" /><a
7625 id="x1-101040r20"></a><span
7626 class="cmr-6">20</span><span
7627 class="cmtt-8">&#x00A0;</span><span
7628 class="cmtt-8">&#x00A0;</span><span
7629 class="cmtt-8">&#x00A0;</span><span
7630 class="cmtt-8">&#x00A0;</span><span
7631 class="cmtt-8">&#x00A0;</span><span
7632 class="cmtt-8">&#x00A0;</span><span
7633 class="cmtt-8">&#x00A0;</span><span
7634 class="cmtt-8">&#x00A0;13)</span><span
7635 class="cmtt-8">&#x00A0;if</span><span
7636 class="cmtt-8">&#x00A0;(</span><span
7637 class="cmtt-8">&#x00A0;[highroom]</span><span
7638 class="cmtt-8">&#x00A0;is</span><span
7639 class="cmtt-8">&#x00A0;less</span><span
7640 class="cmtt-8">&#x00A0;than</span><span
7641 class="cmtt-8">&#x00A0;[lowroom]</span><span
7642 class="cmtt-8">&#x00A0;)</span><span
7643 class="cmtt-8">&#x00A0;</span><span
7644 class="cmsy-8">{</span>
7645 <br class="fancyvrb" /><a
7646 id="x1-101042r21"></a><span
7647 class="cmr-6">21</span><span
7648 class="cmtt-8">&#x00A0;</span><span
7649 class="cmtt-8">&#x00A0;</span>
7650 <br class="fancyvrb" /><a
7651 id="x1-101044r22"></a><span
7652 class="cmr-6">22</span><span
7653 class="cmtt-8">&#x00A0;</span><span
7654 class="cmtt-8">&#x00A0;</span><span
7655 class="cmtt-8">&#x00A0;</span><span
7656 class="cmtt-8">&#x00A0;</span><span
7657 class="cmtt-8">&#x00A0;</span><span
7658 class="cmtt-8">&#x00A0;</span><span
7659 class="cmtt-8">&#x00A0;</span><span
7660 class="cmtt-8">&#x00A0;</span><span
7661 class="cmtt-8">&#x00A0;</span><span
7662 class="cmtt-8">&#x00A0;</span><span
7663 class="cmtt-8">&#x00A0;</span><span
7664 class="cmtt-8">&#x00A0;</span><span
7665 class="cmtt-8">&#x00A0;</span><span
7666 class="cmtt-8">&#x00A0;14)</span><span
7667 class="cmtt-8">&#x00A0;[room]</span><span
7668 class="cmtt-8">&#x00A0;=</span><span
7669 class="cmtt-8">&#x00A0;[highroom]</span><span
7670 class="cmtt-8">&#x00A0;*</span><span
7671 class="cmtt-8">&#x00A0;2</span>
7672 <br class="fancyvrb" /><a
7673 id="x1-101046r23"></a><span
7674 class="cmr-6">23</span><span
7675 class="cmtt-8">&#x00A0;</span><span
7676 class="cmtt-8">&#x00A0;</span>
7680 <br class="fancyvrb" /><a
7681 id="x1-101048r24"></a><span
7682 class="cmr-6">24</span><span
7683 class="cmtt-8">&#x00A0;</span><span
7684 class="cmtt-8">&#x00A0;</span><span
7685 class="cmtt-8">&#x00A0;</span><span
7686 class="cmtt-8">&#x00A0;</span><span
7687 class="cmtt-8">&#x00A0;</span><span
7688 class="cmtt-8">&#x00A0;</span><span
7689 class="cmtt-8">&#x00A0;</span><span
7690 class="cmtt-8">&#x00A0;</span><span
7691 class="cmtt-8">&#x00A0;</span><span
7692 class="cmtt-8">&#x00A0;</span><span
7693 class="cmtt-8">&#x00A0;</span><span
7694 class="cmtt-8">&#x00A0;</span><span
7695 class="cmsy-8">}</span><span
7696 class="cmtt-8">&#x00A0;else</span><span
7697 class="cmtt-8">&#x00A0;[highroom]</span><span
7698 class="cmtt-8">&#x00A0;is</span><span
7699 class="cmtt-8">&#x00A0;not</span><span
7700 class="cmtt-8">&#x00A0;less</span><span
7701 class="cmtt-8">&#x00A0;than</span><span
7702 class="cmtt-8">&#x00A0;[lowroom]</span><span
7703 class="cmtt-8">&#x00A0;</span><span
7704 class="cmsy-8">{</span>
7705 <br class="fancyvrb" /><a
7706 id="x1-101050r25"></a><span
7707 class="cmr-6">25</span><span
7708 class="cmtt-8">&#x00A0;</span><span
7709 class="cmtt-8">&#x00A0;</span>
7710 <br class="fancyvrb" /><a
7711 id="x1-101052r26"></a><span
7712 class="cmr-6">26</span><span
7713 class="cmtt-8">&#x00A0;</span><span
7714 class="cmtt-8">&#x00A0;</span><span
7715 class="cmtt-8">&#x00A0;</span><span
7716 class="cmtt-8">&#x00A0;</span><span
7717 class="cmtt-8">&#x00A0;</span><span
7718 class="cmtt-8">&#x00A0;</span><span
7719 class="cmtt-8">&#x00A0;</span><span
7720 class="cmtt-8">&#x00A0;</span><span
7721 class="cmtt-8">&#x00A0;</span><span
7722 class="cmtt-8">&#x00A0;</span><span
7723 class="cmtt-8">&#x00A0;</span><span
7724 class="cmtt-8">&#x00A0;</span><span
7725 class="cmtt-8">&#x00A0;</span><span
7726 class="cmtt-8">&#x00A0;15)</span><span
7727 class="cmtt-8">&#x00A0;[room]</span><span
7728 class="cmtt-8">&#x00A0;=</span><span
7729 class="cmtt-8">&#x00A0;[lowroom]</span><span
7730 class="cmtt-8">&#x00A0;*</span><span
7731 class="cmtt-8">&#x00A0;2</span>
7732 <br class="fancyvrb" /><a
7733 id="x1-101054r27"></a><span
7734 class="cmr-6">27</span><span
7735 class="cmtt-8">&#x00A0;</span><span
7736 class="cmtt-8">&#x00A0;</span>
7737 <br class="fancyvrb" /><a
7738 id="x1-101056r28"></a><span
7739 class="cmr-6">28</span><span
7740 class="cmtt-8">&#x00A0;</span><span
7741 class="cmtt-8">&#x00A0;</span><span
7742 class="cmtt-8">&#x00A0;</span><span
7743 class="cmtt-8">&#x00A0;</span><span
7744 class="cmtt-8">&#x00A0;</span><span
7745 class="cmtt-8">&#x00A0;</span><span
7746 class="cmtt-8">&#x00A0;</span><span
7747 class="cmtt-8">&#x00A0;</span><span
7748 class="cmtt-8">&#x00A0;</span><span
7749 class="cmtt-8">&#x00A0;</span><span
7750 class="cmtt-8">&#x00A0;</span><span
7751 class="cmtt-8">&#x00A0;</span><span
7752 class="cmsy-8">}</span>
7753 <br class="fancyvrb" /><a
7754 id="x1-101058r29"></a><span
7755 class="cmr-6">29</span><span
7756 class="cmtt-8">&#x00A0;</span><span
7757 class="cmtt-8">&#x00A0;</span>
7758 <br class="fancyvrb" /><a
7759 id="x1-101060r30"></a><span
7760 class="cmr-6">30</span><span
7761 class="cmtt-8">&#x00A0;</span><span
7762 class="cmtt-8">&#x00A0;</span><span
7763 class="cmtt-8">&#x00A0;</span><span
7764 class="cmtt-8">&#x00A0;</span><span
7765 class="cmtt-8">&#x00A0;</span><span
7766 class="cmtt-8">&#x00A0;</span><span
7767 class="cmtt-8">&#x00A0;</span><span
7768 class="cmtt-8">&#x00A0;16)</span><span
7769 class="cmtt-8">&#x00A0;if</span><span
7770 class="cmtt-8">&#x00A0;(</span><span
7771 class="cmtt-8">&#x00A0;[val]</span><span
7772 class="cmtt-8">&#x00A0;is</span><span
7773 class="cmtt-8">&#x00A0;nonzero</span><span
7774 class="cmtt-8">&#x00A0;)</span><span
7775 class="cmtt-8">&#x00A0;</span><span
7776 class="cmsy-8">{</span>
7777 <br class="fancyvrb" /><a
7778 id="x1-101062r31"></a><span
7779 class="cmr-6">31</span><span
7780 class="cmtt-8">&#x00A0;</span><span
7781 class="cmtt-8">&#x00A0;</span>
7782 <br class="fancyvrb" /><a
7783 id="x1-101064r32"></a><span
7784 class="cmr-6">32</span><span
7785 class="cmtt-8">&#x00A0;</span><span
7786 class="cmtt-8">&#x00A0;</span><span
7787 class="cmtt-8">&#x00A0;</span><span
7788 class="cmtt-8">&#x00A0;</span><span
7789 class="cmtt-8">&#x00A0;</span><span
7790 class="cmtt-8">&#x00A0;</span><span
7791 class="cmtt-8">&#x00A0;</span><span
7792 class="cmtt-8">&#x00A0;</span><span
7793 class="cmtt-8">&#x00A0;</span><span
7794 class="cmtt-8">&#x00A0;</span><span
7795 class="cmtt-8">&#x00A0;</span><span
7796 class="cmtt-8">&#x00A0;</span><span
7797 class="cmtt-8">&#x00A0;</span><span
7798 class="cmtt-8">&#x00A0;17)</span><span
7799 class="cmtt-8">&#x00A0;vector</span><span
7800 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
7801 class="cmtt-8">&#x00A0;element</span><span
7802 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
7803 class="cmtt-8">&#x00A0;=</span><span
7804 class="cmtt-8">&#x00A0;set</span>
7805 <br class="fancyvrb" /><a
7806 id="x1-101066r33"></a><span
7807 class="cmr-6">33</span><span
7808 class="cmtt-8">&#x00A0;</span><span
7809 class="cmtt-8">&#x00A0;</span><span
7810 class="cmtt-8">&#x00A0;</span><span
7811 class="cmtt-8">&#x00A0;</span><span
7812 class="cmtt-8">&#x00A0;</span><span
7813 class="cmtt-8">&#x00A0;</span><span
7814 class="cmtt-8">&#x00A0;</span><span
7815 class="cmtt-8">&#x00A0;</span><span
7816 class="cmtt-8">&#x00A0;</span><span
7817 class="cmtt-8">&#x00A0;</span><span
7818 class="cmtt-8">&#x00A0;</span><span
7819 class="cmtt-8">&#x00A0;</span><span
7820 class="cmtt-8">&#x00A0;</span><span
7821 class="cmtt-8">&#x00A0;18)</span><span
7822 class="cmtt-8">&#x00A0;vector</span><span
7823 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
7824 class="cmtt-8">&#x00A0;element</span><span
7825 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
7826 class="cmtt-8">&#x00A0;=</span><span
7827 class="cmtt-8">&#x00A0;set</span>
7828 <br class="fancyvrb" /><a
7829 id="x1-101068r34"></a><span
7830 class="cmr-6">34</span><span
7831 class="cmtt-8">&#x00A0;</span><span
7832 class="cmtt-8">&#x00A0;</span><span
7833 class="cmtt-8">&#x00A0;</span><span
7834 class="cmtt-8">&#x00A0;</span><span
7835 class="cmtt-8">&#x00A0;</span><span
7836 class="cmtt-8">&#x00A0;</span><span
7837 class="cmtt-8">&#x00A0;</span><span
7838 class="cmtt-8">&#x00A0;</span><span
7839 class="cmtt-8">&#x00A0;</span><span
7840 class="cmtt-8">&#x00A0;</span><span
7841 class="cmtt-8">&#x00A0;</span><span
7842 class="cmtt-8">&#x00A0;</span><span
7843 class="cmtt-8">&#x00A0;</span><span
7844 class="cmtt-8">&#x00A0;19)</span><span
7845 class="cmtt-8">&#x00A0;vector</span><span
7846 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
7847 class="cmtt-8">&#x00A0;element</span><span
7848 class="cmtt-8">&#x00A0;[i]</span><span
7849 class="cmtt-8">&#x00A0;=</span><span
7850 class="cmtt-8">&#x00A0;set</span>
7851 <br class="fancyvrb" /><a
7852 id="x1-101070r35"></a><span
7853 class="cmr-6">35</span><span
7854 class="cmtt-8">&#x00A0;</span><span
7855 class="cmtt-8">&#x00A0;</span><span
7856 class="cmtt-8">&#x00A0;</span><span
7857 class="cmtt-8">&#x00A0;</span><span
7858 class="cmtt-8">&#x00A0;</span><span
7859 class="cmtt-8">&#x00A0;</span><span
7860 class="cmtt-8">&#x00A0;</span><span
7861 class="cmtt-8">&#x00A0;</span><span
7862 class="cmtt-8">&#x00A0;</span><span
7863 class="cmtt-8">&#x00A0;</span><span
7864 class="cmtt-8">&#x00A0;</span><span
7865 class="cmtt-8">&#x00A0;</span><span
7866 class="cmtt-8">&#x00A0;</span><span
7867 class="cmtt-8">&#x00A0;20)</span><span
7868 class="cmtt-8">&#x00A0;if</span><span
7869 class="cmtt-8">&#x00A0;(</span><span
7870 class="cmtt-8">&#x00A0;[val]</span><span
7871 class="cmtt-8">&#x00A0;is</span><span
7872 class="cmtt-8">&#x00A0;greater</span><span
7873 class="cmtt-8">&#x00A0;than</span><span
7874 class="cmtt-8">&#x00A0;or</span><span
7875 class="cmtt-8">&#x00A0;equal</span><span
7876 class="cmtt-8">&#x00A0;to</span><span
7877 class="cmtt-8">&#x00A0;[room]</span><span
7878 class="cmtt-8">&#x00A0;)</span><span
7879 class="cmtt-8">&#x00A0;</span><span
7880 class="cmsy-8">{</span>
7881 <br class="fancyvrb" /><a
7882 id="x1-101072r36"></a><span
7883 class="cmr-6">36</span><span
7884 class="cmtt-8">&#x00A0;</span><span
7885 class="cmtt-8">&#x00A0;</span>
7886 <br class="fancyvrb" /><a
7887 id="x1-101074r37"></a><span
7888 class="cmr-6">37</span><span
7889 class="cmtt-8">&#x00A0;</span><span
7890 class="cmtt-8">&#x00A0;</span><span
7891 class="cmtt-8">&#x00A0;</span><span
7892 class="cmtt-8">&#x00A0;</span><span
7893 class="cmtt-8">&#x00A0;</span><span
7894 class="cmtt-8">&#x00A0;</span><span
7895 class="cmtt-8">&#x00A0;</span><span
7896 class="cmtt-8">&#x00A0;</span><span
7897 class="cmtt-8">&#x00A0;</span><span
7898 class="cmtt-8">&#x00A0;</span><span
7899 class="cmtt-8">&#x00A0;</span><span
7900 class="cmtt-8">&#x00A0;</span><span
7901 class="cmtt-8">&#x00A0;</span><span
7902 class="cmtt-8">&#x00A0;</span><span
7903 class="cmtt-8">&#x00A0;</span><span
7904 class="cmtt-8">&#x00A0;</span><span
7905 class="cmtt-8">&#x00A0;</span><span
7906 class="cmtt-8">&#x00A0;</span><span
7907 class="cmtt-8">&#x00A0;</span><span
7908 class="cmtt-8">&#x00A0;21)</span><span
7909 class="cmtt-8">&#x00A0;if</span><span
7910 class="cmtt-8">&#x00A0;(</span><span
7911 class="cmtt-8">&#x00A0;[highroom]</span><span
7912 class="cmtt-8">&#x00A0;is</span><span
7913 class="cmtt-8">&#x00A0;greater</span><span
7914 class="cmtt-8">&#x00A0;than</span><span
7915 class="cmtt-8">&#x00A0;[lowroom]</span><span
7916 class="cmtt-8">&#x00A0;)</span><span
7917 class="cmtt-8">&#x00A0;</span><span
7918 class="cmsy-8">{</span>
7919 <br class="fancyvrb" /><a
7920 id="x1-101076r38"></a><span
7921 class="cmr-6">38</span><span
7922 class="cmtt-8">&#x00A0;</span><span
7923 class="cmtt-8">&#x00A0;</span>
7924 <br class="fancyvrb" /><a
7925 id="x1-101078r39"></a><span
7926 class="cmr-6">39</span><span
7927 class="cmtt-8">&#x00A0;</span><span
7928 class="cmtt-8">&#x00A0;</span><span
7929 class="cmtt-8">&#x00A0;</span><span
7930 class="cmtt-8">&#x00A0;</span><span
7931 class="cmtt-8">&#x00A0;</span><span
7932 class="cmtt-8">&#x00A0;</span><span
7933 class="cmtt-8">&#x00A0;</span><span
7934 class="cmtt-8">&#x00A0;</span><span
7935 class="cmtt-8">&#x00A0;</span><span
7936 class="cmtt-8">&#x00A0;</span><span
7937 class="cmtt-8">&#x00A0;</span><span
7938 class="cmtt-8">&#x00A0;</span><span
7939 class="cmtt-8">&#x00A0;</span><span
7940 class="cmtt-8">&#x00A0;</span><span
7941 class="cmtt-8">&#x00A0;</span><span
7942 class="cmtt-8">&#x00A0;</span><span
7943 class="cmtt-8">&#x00A0;</span><span
7944 class="cmtt-8">&#x00A0;</span><span
7945 class="cmtt-8">&#x00A0;</span><span
7946 class="cmtt-8">&#x00A0;</span><span
7947 class="cmtt-8">&#x00A0;</span><span
7948 class="cmtt-8">&#x00A0;</span><span
7949 class="cmtt-8">&#x00A0;</span><span
7950 class="cmtt-8">&#x00A0;</span><span
7951 class="cmtt-8">&#x00A0;</span><span
7952 class="cmtt-8">&#x00A0;22)</span><span
7953 class="cmtt-8">&#x00A0;vector</span><span
7954 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
7955 class="cmtt-8">&#x00A0;element</span><span
7956 class="cmtt-8">&#x00A0;[i]</span><span
7957 class="cmtt-8">&#x00A0;=</span><span
7958 class="cmtt-8">&#x00A0;[val]</span><span
7959 class="cmtt-8">&#x00A0;-</span><span
7960 class="cmtt-8">&#x00A0;[lowroom]</span><span
7961 class="cmtt-8">&#x00A0;+</span><span
7962 class="cmtt-8">&#x00A0;[predicted]</span>
7963 <br class="fancyvrb" /><a
7964 id="x1-101080r40"></a><span
7965 class="cmr-6">40</span><span
7966 class="cmtt-8">&#x00A0;</span><span
7967 class="cmtt-8">&#x00A0;</span>
7968 <br class="fancyvrb" /><a
7969 id="x1-101082r41"></a><span
7970 class="cmr-6">41</span><span
7971 class="cmtt-8">&#x00A0;</span><span
7972 class="cmtt-8">&#x00A0; </span><span
7973 class="cmtt-8">&#x00A0;</span><span
7974 class="cmtt-8">&#x00A0;</span><span
7975 class="cmtt-8">&#x00A0;</span><span
7976 class="cmtt-8">&#x00A0;</span><span
7977 class="cmtt-8">&#x00A0;</span><span
7978 class="cmtt-8">&#x00A0;</span><span
7979 class="cmsy-8">}</span><span
7980 class="cmtt-8">&#x00A0;else</span><span
7981 class="cmtt-8">&#x00A0;[highroom]</span><span
7982 class="cmtt-8">&#x00A0;is</span><span
7983 class="cmtt-8">&#x00A0;not</span><span
7984 class="cmtt-8">&#x00A0;greater</span><span
7985 class="cmtt-8">&#x00A0;than</span><span
7986 class="cmtt-8">&#x00A0;[lowroom]</span><span
7987 class="cmtt-8">&#x00A0;</span><span
7988 class="cmsy-8">{</span>
7989 <br class="fancyvrb" /><a
7990 id="x1-101084r42"></a><span
7991 class="cmr-6">42</span><span
7992 class="cmtt-8">&#x00A0;</span><span
7993 class="cmtt-8">&#x00A0;</span>
7994 <br class="fancyvrb" /><a
7995 id="x1-101086r43"></a><span
7996 class="cmr-6">43</span><span
7997 class="cmtt-8">&#x00A0;</span><span
7998 class="cmtt-8">&#x00A0;</span><span
7999 class="cmtt-8">&#x00A0;</span><span
8000 class="cmtt-8">&#x00A0;</span><span
8001 class="cmtt-8">&#x00A0;</span><span
8002 class="cmtt-8">&#x00A0;</span><span
8003 class="cmtt-8">&#x00A0;</span><span
8004 class="cmtt-8">&#x00A0;</span><span
8005 class="cmtt-8">&#x00A0;</span><span
8006 class="cmtt-8">&#x00A0;</span><span
8007 class="cmtt-8">&#x00A0;</span><span
8008 class="cmtt-8">&#x00A0;</span><span
8009 class="cmtt-8">&#x00A0;</span><span
8010 class="cmtt-8">&#x00A0;</span><span
8011 class="cmtt-8">&#x00A0;</span><span
8012 class="cmtt-8">&#x00A0;</span><span
8013 class="cmtt-8">&#x00A0;</span><span
8014 class="cmtt-8">&#x00A0;</span><span
8015 class="cmtt-8">&#x00A0;</span><span
8016 class="cmtt-8">&#x00A0;</span><span
8017 class="cmtt-8">&#x00A0;</span><span
8018 class="cmtt-8">&#x00A0;</span><span
8019 class="cmtt-8">&#x00A0;</span><span
8020 class="cmtt-8">&#x00A0;</span><span
8021 class="cmtt-8">&#x00A0;</span><span
8022 class="cmtt-8">&#x00A0;23)</span><span
8023 class="cmtt-8">&#x00A0;vector</span><span
8024 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
8025 class="cmtt-8">&#x00A0;element</span><span
8026 class="cmtt-8">&#x00A0;[i]</span><span
8027 class="cmtt-8">&#x00A0;=</span><span
8028 class="cmtt-8">&#x00A0;[predicted]</span><span
8029 class="cmtt-8">&#x00A0;-</span><span
8030 class="cmtt-8">&#x00A0;[val]</span><span
8031 class="cmtt-8">&#x00A0;+</span><span
8032 class="cmtt-8">&#x00A0;[highroom]</span><span
8033 class="cmtt-8">&#x00A0;-</span><span
8034 class="cmtt-8">&#x00A0;1</span>
8035 <br class="fancyvrb" /><a
8036 id="x1-101088r44"></a><span
8037 class="cmr-6">44</span><span
8038 class="cmtt-8">&#x00A0;</span><span
8039 class="cmtt-8">&#x00A0;</span>
8040 <br class="fancyvrb" /><a
8041 id="x1-101090r45"></a><span
8042 class="cmr-6">45</span><span
8043 class="cmtt-8">&#x00A0;</span><span
8044 class="cmtt-8">&#x00A0;</span><span
8045 class="cmtt-8">&#x00A0;</span><span
8046 class="cmtt-8">&#x00A0;</span><span
8047 class="cmtt-8">&#x00A0;</span><span
8048 class="cmtt-8">&#x00A0;</span><span
8049 class="cmtt-8">&#x00A0;</span><span
8050 class="cmtt-8">&#x00A0;</span><span
8051 class="cmtt-8">&#x00A0;</span><span
8052 class="cmtt-8">&#x00A0;</span><span
8053 class="cmtt-8">&#x00A0;</span><span
8054 class="cmtt-8">&#x00A0;</span><span
8055 class="cmtt-8">&#x00A0;</span><span
8056 class="cmtt-8">&#x00A0;</span><span
8057 class="cmtt-8">&#x00A0;</span><span
8058 class="cmtt-8">&#x00A0;</span><span
8059 class="cmtt-8">&#x00A0;</span><span
8060 class="cmtt-8">&#x00A0;</span><span
8061 class="cmtt-8">&#x00A0;</span><span
8062 class="cmtt-8">&#x00A0;</span><span
8063 class="cmtt-8">&#x00A0;</span><span
8064 class="cmtt-8">&#x00A0;</span><span
8065 class="cmtt-8">&#x00A0;</span><span
8066 class="cmtt-8">&#x00A0;</span><span
8067 class="cmsy-8">}</span>
8068 <br class="fancyvrb" /><a
8069 id="x1-101092r46"></a><span
8070 class="cmr-6">46</span><span
8071 class="cmtt-8">&#x00A0;</span><span
8072 class="cmtt-8">&#x00A0;</span>
8073 <br class="fancyvrb" /><a
8074 id="x1-101094r47"></a><span
8075 class="cmr-6">47</span><span
8076 class="cmtt-8">&#x00A0;</span><span
8077 class="cmtt-8">&#x00A0;</span><span
8078 class="cmtt-8">&#x00A0;</span><span
8079 class="cmtt-8">&#x00A0;</span><span
8080 class="cmtt-8">&#x00A0;</span><span
8081 class="cmtt-8">&#x00A0;</span><span
8082 class="cmtt-8">&#x00A0;</span><span
8083 class="cmtt-8">&#x00A0;</span><span
8084 class="cmtt-8">&#x00A0;</span><span
8085 class="cmtt-8">&#x00A0;</span><span
8086 class="cmtt-8">&#x00A0;</span><span
8087 class="cmtt-8">&#x00A0;</span><span
8088 class="cmtt-8">&#x00A0;</span><span
8089 class="cmtt-8">&#x00A0;</span><span
8090 class="cmtt-8">&#x00A0;</span><span
8091 class="cmtt-8">&#x00A0;</span><span
8092 class="cmtt-8">&#x00A0;</span><span
8093 class="cmtt-8">&#x00A0;</span><span
8094 class="cmsy-8">}</span><span
8095 class="cmtt-8">&#x00A0;else</span><span
8096 class="cmtt-8">&#x00A0;[val]</span><span
8097 class="cmtt-8">&#x00A0;is</span><span
8098 class="cmtt-8">&#x00A0;less</span><span
8099 class="cmtt-8">&#x00A0;than</span><span
8100 class="cmtt-8">&#x00A0;[room]</span><span
8101 class="cmtt-8">&#x00A0;</span><span
8102 class="cmsy-8">{</span>
8103 <br class="fancyvrb" /><a
8104 id="x1-101096r48"></a><span
8105 class="cmr-6">48</span><span
8106 class="cmtt-8">&#x00A0;</span><span
8107 class="cmtt-8">&#x00A0;</span>
8108 <br class="fancyvrb" /><a
8109 id="x1-101098r49"></a><span
8110 class="cmr-6">49</span><span
8111 class="cmtt-8">&#x00A0;</span><span
8112 class="cmtt-8">&#x00A0; </span><span
8113 class="cmtt-8">&#x00A0;</span><span
8114 class="cmtt-8">&#x00A0;24)</span><span
8115 class="cmtt-8">&#x00A0;if</span><span
8116 class="cmtt-8">&#x00A0;([val]</span><span
8117 class="cmtt-8">&#x00A0;is</span><span
8118 class="cmtt-8">&#x00A0;odd)</span><span
8119 class="cmtt-8">&#x00A0;</span><span
8120 class="cmsy-8">{</span>
8121 <br class="fancyvrb" /><a
8122 id="x1-101100r50"></a><span
8123 class="cmr-6">50</span><span
8124 class="cmtt-8">&#x00A0;</span><span
8125 class="cmtt-8">&#x00A0;</span>
8126 <br class="fancyvrb" /><a
8127 id="x1-101102r51"></a><span
8128 class="cmr-6">51</span><span
8129 class="cmtt-8">&#x00A0;</span><span
8130 class="cmtt-8">&#x00A0;</span><span
8131 class="cmtt-8">&#x00A0;</span><span
8132 class="cmtt-8">&#x00A0;</span><span
8133 class="cmtt-8">&#x00A0;</span><span
8134 class="cmtt-8">&#x00A0;</span><span
8135 class="cmtt-8">&#x00A0;</span><span
8136 class="cmtt-8">&#x00A0;</span><span
8137 class="cmtt-8">&#x00A0;</span><span
8138 class="cmtt-8">&#x00A0;</span><span
8139 class="cmtt-8">&#x00A0;</span><span
8140 class="cmtt-8">&#x00A0;</span><span
8141 class="cmtt-8">&#x00A0;</span><span
8142 class="cmtt-8">&#x00A0;</span><span
8143 class="cmtt-8">&#x00A0;</span><span
8144 class="cmtt-8">&#x00A0;</span><span
8145 class="cmtt-8">&#x00A0;</span><span
8146 class="cmtt-8">&#x00A0;</span><span
8147 class="cmtt-8">&#x00A0;</span><span
8148 class="cmtt-8">&#x00A0;</span><span
8149 class="cmtt-8">&#x00A0;</span><span
8150 class="cmtt-8">&#x00A0;</span><span
8151 class="cmtt-8">&#x00A0;</span><span
8152 class="cmtt-8">&#x00A0;</span><span
8153 class="cmtt-8">&#x00A0;</span><span
8154 class="cmtt-8">&#x00A0;25)</span><span
8155 class="cmtt-8">&#x00A0;vector</span><span
8156 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
8157 class="cmtt-8">&#x00A0;element</span><span
8158 class="cmtt-8">&#x00A0;[i]</span><span
8159 class="cmtt-8">&#x00A0;=</span>
8160 <br class="fancyvrb" /><a
8161 id="x1-101104r52"></a><span
8162 class="cmr-6">52</span><span
8163 class="cmtt-8">&#x00A0;</span><span
8164 class="cmtt-8">&#x00A0;</span><span
8165 class="cmtt-8">&#x00A0;</span><span
8166 class="cmtt-8">&#x00A0;</span><span
8167 class="cmtt-8">&#x00A0;</span><span
8168 class="cmtt-8">&#x00A0;</span><span
8169 class="cmtt-8">&#x00A0;</span><span
8170 class="cmtt-8">&#x00A0;</span><span
8171 class="cmtt-8">&#x00A0;</span><span
8172 class="cmtt-8">&#x00A0;</span><span
8173 class="cmtt-8">&#x00A0;</span><span
8174 class="cmtt-8">&#x00A0;</span><span
8175 class="cmtt-8">&#x00A0;</span><span
8176 class="cmtt-8">&#x00A0;</span><span
8177 class="cmtt-8">&#x00A0;</span><span
8178 class="cmtt-8">&#x00A0;</span><span
8179 class="cmtt-8">&#x00A0;</span><span
8180 class="cmtt-8">&#x00A0;</span><span
8181 class="cmtt-8">&#x00A0;</span><span
8182 class="cmtt-8">&#x00A0;</span><span
8183 class="cmtt-8">&#x00A0;</span><span
8184 class="cmtt-8">&#x00A0;</span><span
8185 class="cmtt-8">&#x00A0;</span><span
8186 class="cmtt-8">&#x00A0;</span><span
8187 class="cmtt-8">&#x00A0;</span><span
8188 class="cmtt-8">&#x00A0;</span><span
8189 class="cmtt-8">&#x00A0;</span><span
8190 class="cmtt-8">&#x00A0;</span><span
8191 class="cmtt-8">&#x00A0;</span><span
8192 class="cmtt-8">&#x00A0;[predicted]</span><span
8193 class="cmtt-8">&#x00A0;-</span><span
8194 class="cmtt-8">&#x00A0;(([val]</span><span
8195 class="cmtt-8">&#x00A0;+</span><span
8196 class="cmtt-8">&#x00A0;1)</span><span
8197 class="cmtt-8">&#x00A0;divided</span><span
8198 class="cmtt-8">&#x00A0;by</span><span
8199 class="cmtt-8">&#x00A0;</span><span
8200 class="cmtt-8">&#x00A0;2</span><span
8201 class="cmtt-8">&#x00A0;using</span><span
8202 class="cmtt-8">&#x00A0;integer</span><span
8203 class="cmtt-8">&#x00A0;division)</span>
8204 <br class="fancyvrb" /><a
8205 id="x1-101106r53"></a><span
8206 class="cmr-6">53</span><span
8207 class="cmtt-8">&#x00A0;</span><span
8208 class="cmtt-8">&#x00A0;</span>
8209 <br class="fancyvrb" /><a
8210 id="x1-101108r54"></a><span
8211 class="cmr-6">54</span><span
8212 class="cmtt-8">&#x00A0;</span><span
8213 class="cmtt-8">&#x00A0;</span><span
8214 class="cmtt-8">&#x00A0;</span><span
8215 class="cmtt-8">&#x00A0;</span><span
8216 class="cmtt-8">&#x00A0;</span><span
8217 class="cmtt-8">&#x00A0;</span><span
8218 class="cmtt-8">&#x00A0;</span><span
8219 class="cmtt-8">&#x00A0;</span><span
8220 class="cmtt-8">&#x00A0;</span><span
8221 class="cmtt-8">&#x00A0;</span><span
8222 class="cmtt-8">&#x00A0;</span><span
8223 class="cmtt-8">&#x00A0;</span><span
8224 class="cmtt-8">&#x00A0;</span><span
8225 class="cmtt-8">&#x00A0;</span><span
8226 class="cmtt-8">&#x00A0;</span><span
8227 class="cmtt-8">&#x00A0;</span><span
8228 class="cmtt-8">&#x00A0;</span><span
8229 class="cmtt-8">&#x00A0;</span><span
8230 class="cmtt-8">&#x00A0;</span><span
8231 class="cmtt-8">&#x00A0;</span><span
8232 class="cmtt-8">&#x00A0;</span><span
8233 class="cmtt-8">&#x00A0;</span><span
8234 class="cmtt-8">&#x00A0;</span><span
8235 class="cmtt-8">&#x00A0;</span><span
8236 class="cmsy-8">}</span><span
8237 class="cmtt-8">&#x00A0;else</span><span
8238 class="cmtt-8">&#x00A0;[val]</span><span
8239 class="cmtt-8">&#x00A0;is</span><span
8240 class="cmtt-8">&#x00A0;even</span><span
8241 class="cmtt-8">&#x00A0;</span><span
8242 class="cmsy-8">{</span>
8243 <br class="fancyvrb" /><a
8244 id="x1-101110r55"></a><span
8245 class="cmr-6">55</span><span
8246 class="cmtt-8">&#x00A0;</span><span
8247 class="cmtt-8">&#x00A0;</span>
8248 <br class="fancyvrb" /><a
8249 id="x1-101112r56"></a><span
8250 class="cmr-6">56</span><span
8251 class="cmtt-8">&#x00A0;</span><span
8252 class="cmtt-8">&#x00A0;</span><span
8253 class="cmtt-8">&#x00A0;</span><span
8254 class="cmtt-8">&#x00A0;</span><span
8255 class="cmtt-8">&#x00A0;</span><span
8256 class="cmtt-8">&#x00A0;</span><span
8257 class="cmtt-8">&#x00A0;</span><span
8258 class="cmtt-8">&#x00A0;</span><span
8259 class="cmtt-8">&#x00A0;</span><span
8260 class="cmtt-8">&#x00A0;</span><span
8261 class="cmtt-8">&#x00A0;</span><span
8262 class="cmtt-8">&#x00A0;</span><span
8263 class="cmtt-8">&#x00A0;</span><span
8264 class="cmtt-8">&#x00A0;</span><span
8265 class="cmtt-8">&#x00A0;</span><span
8266 class="cmtt-8">&#x00A0;</span><span
8267 class="cmtt-8">&#x00A0;</span><span
8268 class="cmtt-8">&#x00A0;</span><span
8269 class="cmtt-8">&#x00A0;</span><span
8270 class="cmtt-8">&#x00A0;</span><span
8271 class="cmtt-8">&#x00A0;</span><span
8272 class="cmtt-8">&#x00A0;</span><span
8273 class="cmtt-8">&#x00A0;</span><span
8274 class="cmtt-8">&#x00A0;</span><span
8275 class="cmtt-8">&#x00A0;</span><span
8276 class="cmtt-8">&#x00A0;26)</span><span
8277 class="cmtt-8">&#x00A0;vector</span><span
8278 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
8279 class="cmtt-8">&#x00A0;element</span><span
8280 class="cmtt-8">&#x00A0;[i]</span><span
8281 class="cmtt-8">&#x00A0;=</span>
8282 <br class="fancyvrb" /><a
8283 id="x1-101114r57"></a><span
8284 class="cmr-6">57</span><span
8285 class="cmtt-8">&#x00A0;</span><span
8286 class="cmtt-8">&#x00A0;</span><span
8287 class="cmtt-8">&#x00A0;</span><span
8288 class="cmtt-8">&#x00A0;</span><span
8289 class="cmtt-8">&#x00A0;</span><span
8290 class="cmtt-8">&#x00A0;</span><span
8291 class="cmtt-8">&#x00A0;</span><span
8292 class="cmtt-8">&#x00A0;</span><span
8293 class="cmtt-8">&#x00A0;</span><span
8294 class="cmtt-8">&#x00A0;</span><span
8295 class="cmtt-8">&#x00A0;</span><span
8296 class="cmtt-8">&#x00A0;</span><span
8297 class="cmtt-8">&#x00A0;</span><span
8298 class="cmtt-8">&#x00A0;</span><span
8299 class="cmtt-8">&#x00A0;</span><span
8300 class="cmtt-8">&#x00A0;</span><span
8301 class="cmtt-8">&#x00A0;</span><span
8302 class="cmtt-8">&#x00A0;</span><span
8303 class="cmtt-8">&#x00A0;</span><span
8304 class="cmtt-8">&#x00A0;</span><span
8305 class="cmtt-8">&#x00A0;</span><span
8306 class="cmtt-8">&#x00A0;</span><span
8307 class="cmtt-8">&#x00A0;</span><span
8308 class="cmtt-8">&#x00A0;</span><span
8309 class="cmtt-8">&#x00A0;</span><span
8310 class="cmtt-8">&#x00A0;</span><span
8311 class="cmtt-8">&#x00A0;</span><span
8312 class="cmtt-8">&#x00A0;</span><span
8313 class="cmtt-8">&#x00A0;</span><span
8314 class="cmtt-8">&#x00A0;[predicted]</span><span
8315 class="cmtt-8">&#x00A0;+</span><span
8316 class="cmtt-8">&#x00A0;([val]</span><span
8317 class="cmtt-8">&#x00A0;/</span><span
8318 class="cmtt-8">&#x00A0;2</span><span
8319 class="cmtt-8">&#x00A0;using</span><span
8320 class="cmtt-8">&#x00A0;integer</span><span
8321 class="cmtt-8">&#x00A0;division)</span>
8322 <br class="fancyvrb" /><a
8323 id="x1-101116r58"></a><span
8324 class="cmr-6">58</span><span
8325 class="cmtt-8">&#x00A0;</span><span
8326 class="cmtt-8">&#x00A0;</span>
8327 <br class="fancyvrb" /><a
8328 id="x1-101118r59"></a><span
8329 class="cmr-6">59</span><span
8330 class="cmtt-8">&#x00A0;</span><span
8331 class="cmtt-8">&#x00A0;</span><span
8332 class="cmtt-8">&#x00A0;</span><span
8333 class="cmtt-8">&#x00A0;</span><span
8334 class="cmtt-8">&#x00A0;</span><span
8335 class="cmtt-8">&#x00A0;</span><span
8336 class="cmtt-8">&#x00A0;</span><span
8337 class="cmtt-8">&#x00A0;</span><span
8338 class="cmtt-8">&#x00A0;</span><span
8339 class="cmtt-8">&#x00A0;</span><span
8340 class="cmtt-8">&#x00A0;</span><span
8341 class="cmtt-8">&#x00A0;</span><span
8342 class="cmtt-8">&#x00A0;</span><span
8343 class="cmtt-8">&#x00A0;</span><span
8344 class="cmtt-8">&#x00A0;</span><span
8345 class="cmtt-8">&#x00A0;</span><span
8346 class="cmtt-8">&#x00A0;</span><span
8347 class="cmtt-8">&#x00A0;</span><span
8348 class="cmtt-8">&#x00A0;</span><span
8349 class="cmtt-8">&#x00A0;</span><span
8350 class="cmtt-8">&#x00A0;</span><span
8351 class="cmtt-8">&#x00A0;</span><span
8352 class="cmtt-8">&#x00A0;</span><span
8353 class="cmtt-8">&#x00A0;</span><span
8354 class="cmsy-8">}</span>
8355 <br class="fancyvrb" /><a
8356 id="x1-101120r60"></a><span
8357 class="cmr-6">60</span><span
8358 class="cmtt-8">&#x00A0;</span><span
8359 class="cmtt-8">&#x00A0;</span>
8360 <br class="fancyvrb" /><a
8361 id="x1-101122r61"></a><span
8362 class="cmr-6">61</span><span
8363 class="cmtt-8">&#x00A0;</span><span
8364 class="cmtt-8">&#x00A0;</span><span
8365 class="cmtt-8">&#x00A0;</span><span
8366 class="cmtt-8">&#x00A0;</span><span
8367 class="cmtt-8">&#x00A0;</span><span
8368 class="cmtt-8">&#x00A0;</span><span
8369 class="cmtt-8">&#x00A0;</span><span
8370 class="cmtt-8">&#x00A0;</span><span
8371 class="cmtt-8">&#x00A0;</span><span
8372 class="cmtt-8">&#x00A0;</span><span
8373 class="cmtt-8">&#x00A0;</span><span
8374 class="cmtt-8">&#x00A0;</span><span
8375 class="cmtt-8">&#x00A0;</span><span
8376 class="cmtt-8">&#x00A0;</span><span
8377 class="cmtt-8">&#x00A0;</span><span
8378 class="cmtt-8">&#x00A0;</span><span
8379 class="cmtt-8">&#x00A0;</span><span
8380 class="cmtt-8">&#x00A0;</span><span
8381 class="cmsy-8">}</span>
8382 <br class="fancyvrb" /><a
8383 id="x1-101124r62"></a><span
8384 class="cmr-6">62</span><span
8385 class="cmtt-8">&#x00A0;</span><span
8386 class="cmtt-8">&#x00A0;</span>
8387 <br class="fancyvrb" /><a
8388 id="x1-101126r63"></a><span
8389 class="cmr-6">63</span><span
8390 class="cmtt-8">&#x00A0;</span><span
8391 class="cmtt-8">&#x00A0;</span><span
8392 class="cmtt-8">&#x00A0;</span><span
8393 class="cmtt-8">&#x00A0;</span><span
8394 class="cmtt-8">&#x00A0;</span><span
8395 class="cmtt-8">&#x00A0;</span><span
8396 class="cmtt-8">&#x00A0;</span><span
8397 class="cmtt-8">&#x00A0;</span><span
8398 class="cmtt-8">&#x00A0;</span><span
8399 class="cmtt-8">&#x00A0;</span><span
8400 class="cmtt-8">&#x00A0;</span><span
8401 class="cmtt-8">&#x00A0;</span><span
8402 class="cmsy-8">}</span><span
8403 class="cmtt-8">&#x00A0;else</span><span
8404 class="cmtt-8">&#x00A0;[val]</span><span
8405 class="cmtt-8">&#x00A0;is</span><span
8406 class="cmtt-8">&#x00A0;zero</span><span
8407 class="cmtt-8">&#x00A0;</span><span
8408 class="cmsy-8">{</span>
8409 <br class="fancyvrb" /><a
8410 id="x1-101128r64"></a><span
8411 class="cmr-6">64</span><span
8412 class="cmtt-8">&#x00A0;</span><span
8413 class="cmtt-8">&#x00A0;</span>
8414 <br class="fancyvrb" /><a
8415 id="x1-101130r65"></a><span
8416 class="cmr-6">65</span><span
8417 class="cmtt-8">&#x00A0;</span><span
8418 class="cmtt-8">&#x00A0;</span><span
8419 class="cmtt-8">&#x00A0;</span><span
8420 class="cmtt-8">&#x00A0;</span><span
8421 class="cmtt-8">&#x00A0;</span><span
8422 class="cmtt-8">&#x00A0;</span><span
8423 class="cmtt-8">&#x00A0;</span><span
8424 class="cmtt-8">&#x00A0;</span><span
8425 class="cmtt-8">&#x00A0;</span><span
8426 class="cmtt-8">&#x00A0;</span><span
8427 class="cmtt-8">&#x00A0;</span><span
8428 class="cmtt-8">&#x00A0;</span><span
8429 class="cmtt-8">&#x00A0;</span><span
8430 class="cmtt-8">&#x00A0;27)</span><span
8431 class="cmtt-8">&#x00A0;vector</span><span
8432 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
8433 class="cmtt-8">&#x00A0;element</span><span
8434 class="cmtt-8">&#x00A0;[i]</span><span
8435 class="cmtt-8">&#x00A0;=</span><span
8436 class="cmtt-8">&#x00A0;unset</span>
8437 <br class="fancyvrb" /><a
8438 id="x1-101132r66"></a><span
8439 class="cmr-6">66</span><span
8440 class="cmtt-8">&#x00A0;</span><span
8441 class="cmtt-8">&#x00A0;</span><span
8442 class="cmtt-8">&#x00A0;</span><span
8443 class="cmtt-8">&#x00A0;</span><span
8444 class="cmtt-8">&#x00A0;</span><span
8445 class="cmtt-8">&#x00A0;</span><span
8446 class="cmtt-8">&#x00A0;</span><span
8447 class="cmtt-8">&#x00A0;</span><span
8448 class="cmtt-8">&#x00A0;</span><span
8449 class="cmtt-8">&#x00A0;</span><span
8450 class="cmtt-8">&#x00A0;</span><span
8451 class="cmtt-8">&#x00A0;</span><span
8452 class="cmtt-8">&#x00A0;</span><span
8453 class="cmtt-8">&#x00A0;28)</span><span
8454 class="cmtt-8">&#x00A0;vector</span><span
8455 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
8456 class="cmtt-8">&#x00A0;element</span><span
8457 class="cmtt-8">&#x00A0;[i]</span><span
8458 class="cmtt-8">&#x00A0;=</span><span
8459 class="cmtt-8">&#x00A0;[predicted]</span>
8460 <br class="fancyvrb" /><a
8461 id="x1-101134r67"></a><span
8462 class="cmr-6">67</span><span
8463 class="cmtt-8">&#x00A0;</span><span
8464 class="cmtt-8">&#x00A0;</span>
8465 <br class="fancyvrb" /><a
8466 id="x1-101136r68"></a><span
8467 class="cmr-6">68</span><span
8468 class="cmtt-8">&#x00A0;</span><span
8469 class="cmtt-8">&#x00A0;</span><span
8470 class="cmtt-8">&#x00A0;</span><span
8471 class="cmtt-8">&#x00A0;</span><span
8472 class="cmtt-8">&#x00A0;</span><span
8473 class="cmtt-8">&#x00A0;</span><span
8474 class="cmtt-8">&#x00A0;</span><span
8475 class="cmtt-8">&#x00A0;</span><span
8476 class="cmtt-8">&#x00A0;</span><span
8477 class="cmtt-8">&#x00A0;</span><span
8478 class="cmtt-8">&#x00A0;</span><span
8479 class="cmtt-8">&#x00A0;</span><span
8480 class="cmsy-8">}</span>
8481 <br class="fancyvrb" /><a
8482 id="x1-101138r69"></a><span
8483 class="cmr-6">69</span><span
8484 class="cmtt-8">&#x00A0;</span><span
8485 class="cmtt-8">&#x00A0;</span>
8486 <br class="fancyvrb" /><a
8487 id="x1-101140r70"></a><span
8488 class="cmr-6">70</span><span
8489 class="cmtt-8">&#x00A0;</span><span
8490 class="cmtt-8">&#x00A0;</span><span
8491 class="cmtt-8">&#x00A0;</span><span
8492 class="cmtt-8">&#x00A0;</span><span
8493 class="cmtt-8">&#x00A0;</span><span
8494 class="cmtt-8">&#x00A0;</span><span
8495 class="cmtt-8">&#x00A0;</span><span
8496 class="cmsy-8">}</span>
8497 <br class="fancyvrb" /><a
8498 id="x1-101142r71"></a><span
8499 class="cmr-6">71</span><span
8500 class="cmtt-8">&#x00A0;</span><span
8501 class="cmtt-8">&#x00A0;</span>
8502 <br class="fancyvrb" /><a
8503 id="x1-101144r72"></a><span
8504 class="cmr-6">72</span><span
8505 class="cmtt-8">&#x00A0;</span><span
8506 class="cmtt-8">&#x00A0;</span><span
8507 class="cmtt-8">&#x00A0;29)</span><span
8508 class="cmtt-8">&#x00A0;done</span>
8509 <br class="fancyvrb" /><a
8510 id="x1-101146r73"></a><span
8511 class="cmr-6">73</span><span
8512 class="cmtt-8">&#x00A0;</span><span
8513 class="cmtt-8">&#x00A0;</span>
8514 </div>
8515 </dd><dt class="description">
8516 <span
8517 class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd
8518 class="description">
8519 <!--l. 336--><p class="noindent" >Curve synthesis generates a return vector <span
8520 class="cmtt-12">[floor] </span>of length <span
8521 class="cmtt-12">[n] </span>(where <span
8522 class="cmtt-12">[n] </span>is provided by
8523 the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
8524 <span
8525 class="cmtt-12">[floor1_X_list]</span>, <span
8526 class="cmtt-12">[floor1_final_Y] </span>and <span
8527 class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
8528 [floor1&#x02D9;multiplier] and [floor1&#x02D9;values] values.
8529 <!--l. 343--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
8530 class="cmtt-12">[floor1_X_list]</span>, <span
8531 class="cmtt-12">[floor1_final_Y] </span>and
8535 <span
8536 class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span
8537 class="cmtt-12">[floor1_X_list]&#8217;</span>, <span
8538 class="cmtt-12">[floor1_final_Y]&#8217;</span>
8539 and <span
8540 class="cmtt-12">[floor1_step2_flag]&#8217; </span>according to ascending sort order of the values in
8541 <span
8542 class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span
8543 class="cmtt-12">[floor1_X_list] </span>and then apply the same
8544 permutation to elements of the other two vectors so that the X, Y and step2&#x02D9;flag values still
8545 match.
8546 <!--l. 353--><p class="noindent" >Then compute the final curve in one pass:
8547 <!--l. 355--><p class="noindent" >
8548 <div class="fancyvrb" id="fancyvrb32">
8550 id="x1-101148r1"></a><span
8551 class="cmr-6">1</span><span
8552 class="cmtt-8">&#x00A0;</span><span
8553 class="cmtt-8">&#x00A0;</span><span
8554 class="cmtt-8">&#x00A0;</span><span
8555 class="cmtt-8">&#x00A0;1)</span><span
8556 class="cmtt-8">&#x00A0;[hx]</span><span
8557 class="cmtt-8">&#x00A0;=</span><span
8558 class="cmtt-8">&#x00A0;0</span>
8559 <br class="fancyvrb" /><a
8560 id="x1-101150r2"></a><span
8561 class="cmr-6">2</span><span
8562 class="cmtt-8">&#x00A0;</span><span
8563 class="cmtt-8">&#x00A0;</span><span
8564 class="cmtt-8">&#x00A0;</span><span
8565 class="cmtt-8">&#x00A0;2)</span><span
8566 class="cmtt-8">&#x00A0;[lx]</span><span
8567 class="cmtt-8">&#x00A0;=</span><span
8568 class="cmtt-8">&#x00A0;0</span>
8569 <br class="fancyvrb" /><a
8570 id="x1-101152r3"></a><span
8571 class="cmr-6">3</span><span
8572 class="cmtt-8">&#x00A0;</span><span
8573 class="cmtt-8">&#x00A0;</span><span
8574 class="cmtt-8">&#x00A0;</span><span
8575 class="cmtt-8">&#x00A0;3)</span><span
8576 class="cmtt-8">&#x00A0;[ly]</span><span
8577 class="cmtt-8">&#x00A0;=</span><span
8578 class="cmtt-8">&#x00A0;vector</span><span
8579 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
8580 class="cmtt-8">&#x00A0;element</span><span
8581 class="cmtt-8">&#x00A0;[0]</span><span
8582 class="cmtt-8">&#x00A0;*</span><span
8583 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
8584 <br class="fancyvrb" /><a
8585 id="x1-101154r4"></a><span
8586 class="cmr-6">4</span><span
8587 class="cmtt-8">&#x00A0;</span><span
8588 class="cmtt-8">&#x00A0;</span><span
8589 class="cmtt-8">&#x00A0;</span><span
8590 class="cmtt-8">&#x00A0;4)</span><span
8591 class="cmtt-8">&#x00A0;iterate</span><span
8592 class="cmtt-8">&#x00A0;[i]</span><span
8593 class="cmtt-8">&#x00A0;over</span><span
8594 class="cmtt-8">&#x00A0;the</span><span
8595 class="cmtt-8">&#x00A0;range</span><span
8596 class="cmtt-8">&#x00A0;1</span><span
8597 class="cmtt-8">&#x00A0;...</span><span
8598 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
8599 class="cmtt-8">&#x00A0;</span><span
8600 class="cmsy-8">{</span>
8601 <br class="fancyvrb" /><a
8602 id="x1-101156r5"></a><span
8603 class="cmr-6">5</span><span
8604 class="cmtt-8">&#x00A0;</span><span
8605 class="cmtt-8">&#x00A0;</span>
8606 <br class="fancyvrb" /><a
8607 id="x1-101158r6"></a><span
8608 class="cmr-6">6</span><span
8609 class="cmtt-8">&#x00A0;</span><span
8610 class="cmtt-8">&#x00A0;</span><span
8611 class="cmtt-8">&#x00A0;</span><span
8612 class="cmtt-8">&#x00A0;</span><span
8613 class="cmtt-8">&#x00A0;</span><span
8614 class="cmtt-8">&#x00A0;</span><span
8615 class="cmtt-8">&#x00A0;</span><span
8616 class="cmtt-8">&#x00A0;</span><span
8617 class="cmtt-8">&#x00A0;5)</span><span
8618 class="cmtt-8">&#x00A0;if</span><span
8619 class="cmtt-8">&#x00A0;(</span><span
8620 class="cmtt-8">&#x00A0;[floor1_step2_flag]&#8217;</span><span
8621 class="cmtt-8">&#x00A0;element</span><span
8622 class="cmtt-8">&#x00A0;[i]</span><span
8623 class="cmtt-8">&#x00A0;is</span><span
8624 class="cmtt-8">&#x00A0;set</span><span
8625 class="cmtt-8">&#x00A0;)</span><span
8626 class="cmtt-8">&#x00A0;</span><span
8627 class="cmsy-8">{</span>
8628 <br class="fancyvrb" /><a
8629 id="x1-101160r7"></a><span
8630 class="cmr-6">7</span><span
8631 class="cmtt-8">&#x00A0;</span><span
8632 class="cmtt-8">&#x00A0;</span>
8633 <br class="fancyvrb" /><a
8634 id="x1-101162r8"></a><span
8635 class="cmr-6">8</span><span
8636 class="cmtt-8">&#x00A0;</span><span
8637 class="cmtt-8">&#x00A0;</span><span
8638 class="cmtt-8">&#x00A0;</span><span
8639 class="cmtt-8">&#x00A0;</span><span
8640 class="cmtt-8">&#x00A0;</span><span
8641 class="cmtt-8">&#x00A0;</span><span
8642 class="cmtt-8">&#x00A0;</span><span
8643 class="cmtt-8">&#x00A0;</span><span
8644 class="cmtt-8">&#x00A0;</span><span
8645 class="cmtt-8">&#x00A0;</span><span
8646 class="cmtt-8">&#x00A0;</span><span
8647 class="cmtt-8">&#x00A0;</span><span
8648 class="cmtt-8">&#x00A0;</span><span
8649 class="cmtt-8">&#x00A0;</span><span
8650 class="cmtt-8">&#x00A0;6)</span><span
8651 class="cmtt-8">&#x00A0;[hy]</span><span
8652 class="cmtt-8">&#x00A0;=</span><span
8653 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
8654 class="cmtt-8">&#x00A0;element</span><span
8655 class="cmtt-8">&#x00A0;[i]</span><span
8656 class="cmtt-8">&#x00A0;*</span><span
8657 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
8658 <br class="fancyvrb" /><a
8659 id="x1-101164r9"></a><span
8660 class="cmr-6">9</span><span
8661 class="cmtt-8">&#x00A0;</span><span
8662 class="cmtt-8">&#x00A0;</span><span
8663 class="cmtt-8">&#x00A0; </span><span
8664 class="cmtt-8">&#x00A0;</span><span
8665 class="cmtt-8">&#x00A0;</span><span
8666 class="cmtt-8">&#x00A0;</span><span
8667 class="cmtt-8">&#x00A0;</span><span
8668 class="cmtt-8">&#x00A0;7)</span><span
8669 class="cmtt-8">&#x00A0;[hx]</span><span
8670 class="cmtt-8">&#x00A0;=</span><span
8671 class="cmtt-8">&#x00A0;[floor1_X_list]&#8217;</span><span
8672 class="cmtt-8">&#x00A0;element</span><span
8673 class="cmtt-8">&#x00A0;[i]</span>
8674 <br class="fancyvrb" /><a
8675 id="x1-101166r10"></a><span
8676 class="cmr-6">10</span><span
8677 class="cmtt-8">&#x00A0;</span><span
8678 class="cmtt-8">&#x00A0;</span><span
8679 class="cmtt-8">&#x00A0;</span><span
8680 class="cmtt-8">&#x00A0;</span><span
8681 class="cmtt-8">&#x00A0;</span><span
8682 class="cmtt-8">&#x00A0;</span><span
8683 class="cmtt-8">&#x00A0;</span><span
8684 class="cmtt-8">&#x00A0;</span><span
8685 class="cmtt-8">&#x00A0;</span><span
8686 class="cmtt-8">&#x00A0;</span><span
8687 class="cmtt-8">&#x00A0;</span><span
8688 class="cmtt-8">&#x00A0;</span><span
8689 class="cmtt-8">&#x00A0;</span><span
8690 class="cmtt-8">&#x00A0;</span><span
8691 class="cmtt-8">&#x00A0;8)</span><span
8692 class="cmtt-8">&#x00A0;</span><a
8693 href="#x1-1230009.2.7"><span
8694 class="cmtt-8">render_line</span></a><span
8695 class="cmtt-8">(</span><span
8696 class="cmtt-8">&#x00A0;[lx],</span><span
8697 class="cmtt-8">&#x00A0;[ly],</span><span
8698 class="cmtt-8">&#x00A0;[hx],</span><span
8699 class="cmtt-8">&#x00A0;[hy],</span><span
8700 class="cmtt-8">&#x00A0;[floor]</span><span
8701 class="cmtt-8">&#x00A0;)</span>
8702 <br class="fancyvrb" /><a
8703 id="x1-101168r11"></a><span
8704 class="cmr-6">11</span><span
8705 class="cmtt-8">&#x00A0;</span><span
8706 class="cmtt-8">&#x00A0;</span><span
8707 class="cmtt-8">&#x00A0;</span><span
8708 class="cmtt-8">&#x00A0;</span><span
8709 class="cmtt-8">&#x00A0;</span><span
8710 class="cmtt-8">&#x00A0;</span><span
8711 class="cmtt-8">&#x00A0;</span><span
8712 class="cmtt-8">&#x00A0;</span><span
8713 class="cmtt-8">&#x00A0;</span><span
8714 class="cmtt-8">&#x00A0;</span><span
8715 class="cmtt-8">&#x00A0;</span><span
8716 class="cmtt-8">&#x00A0;</span><span
8717 class="cmtt-8">&#x00A0;</span><span
8718 class="cmtt-8">&#x00A0;</span><span
8719 class="cmtt-8">&#x00A0;9)</span><span
8720 class="cmtt-8">&#x00A0;[lx]</span><span
8721 class="cmtt-8">&#x00A0;=</span><span
8722 class="cmtt-8">&#x00A0;[hx]</span>
8723 <br class="fancyvrb" /><a
8724 id="x1-101170r12"></a><span
8725 class="cmr-6">12</span><span
8726 class="cmtt-8">&#x00A0;</span><span
8727 class="cmtt-8">&#x00A0; </span><span
8728 class="cmtt-8">&#x00A0;</span><span
8729 class="cmtt-8">&#x00A0;</span><span
8730 class="cmtt-8">&#x00A0;</span><span
8731 class="cmtt-8">&#x00A0;10)</span><span
8732 class="cmtt-8">&#x00A0;[ly]</span><span
8733 class="cmtt-8">&#x00A0;=</span><span
8734 class="cmtt-8">&#x00A0;[hy]</span>
8735 <br class="fancyvrb" /><a
8736 id="x1-101172r13"></a><span
8737 class="cmr-6">13</span><span
8738 class="cmtt-8">&#x00A0;</span><span
8739 class="cmtt-8">&#x00A0;</span><span
8740 class="cmtt-8">&#x00A0;</span><span
8741 class="cmtt-8">&#x00A0;</span><span
8742 class="cmtt-8">&#x00A0;</span><span
8743 class="cmtt-8">&#x00A0;</span><span
8744 class="cmtt-8">&#x00A0;</span><span
8745 class="cmtt-8">&#x00A0;</span><span
8746 class="cmtt-8">&#x00A0;</span><span
8747 class="cmtt-8">&#x00A0;</span><span
8748 class="cmtt-8">&#x00A0;</span><span
8749 class="cmtt-8">&#x00A0;</span><span
8750 class="cmsy-8">}</span>
8751 <br class="fancyvrb" /><a
8752 id="x1-101174r14"></a><span
8753 class="cmr-6">14</span><span
8754 class="cmtt-8">&#x00A0;</span><span
8755 class="cmtt-8">&#x00A0;</span><span
8756 class="cmtt-8">&#x00A0;</span><span
8757 class="cmtt-8">&#x00A0;</span><span
8758 class="cmtt-8">&#x00A0;</span><span
8759 class="cmtt-8">&#x00A0;</span><span
8760 class="cmtt-8">&#x00A0;</span><span
8761 class="cmsy-8">}</span>
8762 <br class="fancyvrb" /><a
8763 id="x1-101176r15"></a><span
8764 class="cmr-6">15</span><span
8765 class="cmtt-8">&#x00A0;</span><span
8766 class="cmtt-8">&#x00A0;</span>
8767 <br class="fancyvrb" /><a
8768 id="x1-101178r16"></a><span
8769 class="cmr-6">16</span><span
8770 class="cmtt-8">&#x00A0;</span><span
8771 class="cmtt-8">&#x00A0;</span><span
8772 class="cmtt-8">&#x00A0;11)</span><span
8773 class="cmtt-8">&#x00A0;if</span><span
8774 class="cmtt-8">&#x00A0;(</span><span
8775 class="cmtt-8">&#x00A0;[hx]</span><span
8776 class="cmtt-8">&#x00A0;is</span><span
8777 class="cmtt-8">&#x00A0;less</span><span
8778 class="cmtt-8">&#x00A0;than</span><span
8779 class="cmtt-8">&#x00A0;[n]</span><span
8780 class="cmtt-8">&#x00A0;)</span><span
8781 class="cmtt-8">&#x00A0;</span><span
8782 class="cmsy-8">{</span>
8783 <br class="fancyvrb" /><a
8784 id="x1-101180r17"></a><span
8785 class="cmr-6">17</span><span
8786 class="cmtt-8">&#x00A0;</span><span
8787 class="cmtt-8">&#x00A0;</span>
8788 <br class="fancyvrb" /><a
8789 id="x1-101182r18"></a><span
8790 class="cmr-6">18</span><span
8791 class="cmtt-8">&#x00A0;</span><span
8792 class="cmtt-8">&#x00A0;</span><span
8793 class="cmtt-8">&#x00A0;</span><span
8794 class="cmtt-8">&#x00A0;</span><span
8795 class="cmtt-8">&#x00A0;</span><span
8796 class="cmtt-8">&#x00A0;</span><span
8797 class="cmtt-8">&#x00A0;</span><span
8798 class="cmtt-8">&#x00A0;</span><span
8799 class="cmtt-8">&#x00A0;</span><span
8800 class="cmtt-8">&#x00A0;12)</span><span
8801 class="cmtt-8">&#x00A0;</span><a
8802 href="#x1-1230009.2.7"><span
8803 class="cmtt-8">render_line</span></a><span
8804 class="cmtt-8">(</span><span
8805 class="cmtt-8">&#x00A0;[hx],</span><span
8806 class="cmtt-8">&#x00A0;[hy],</span><span
8807 class="cmtt-8">&#x00A0;[n],</span><span
8808 class="cmtt-8">&#x00A0;[hy],</span><span
8809 class="cmtt-8">&#x00A0;[floor]</span><span
8810 class="cmtt-8">&#x00A0;)</span>
8811 <br class="fancyvrb" /><a
8812 id="x1-101184r19"></a><span
8813 class="cmr-6">19</span><span
8814 class="cmtt-8">&#x00A0;</span><span
8815 class="cmtt-8">&#x00A0;</span>
8816 <br class="fancyvrb" /><a
8817 id="x1-101186r20"></a><span
8818 class="cmr-6">20</span><span
8819 class="cmtt-8">&#x00A0;</span><span
8820 class="cmtt-8">&#x00A0;</span><span
8821 class="cmtt-8">&#x00A0;</span><span
8822 class="cmtt-8">&#x00A0;</span><span
8823 class="cmtt-8">&#x00A0;</span><span
8824 class="cmtt-8">&#x00A0;</span><span
8825 class="cmtt-8">&#x00A0;</span><span
8826 class="cmsy-8">}</span>
8827 <br class="fancyvrb" /><a
8828 id="x1-101188r21"></a><span
8829 class="cmr-6">21</span><span
8830 class="cmtt-8">&#x00A0;</span><span
8831 class="cmtt-8">&#x00A0;</span>
8832 <br class="fancyvrb" /><a
8833 id="x1-101190r22"></a><span
8834 class="cmr-6">22</span><span
8835 class="cmtt-8">&#x00A0;</span><span
8836 class="cmtt-8">&#x00A0;</span><span
8837 class="cmtt-8">&#x00A0;13)</span><span
8838 class="cmtt-8">&#x00A0;if</span><span
8839 class="cmtt-8">&#x00A0;(</span><span
8840 class="cmtt-8">&#x00A0;[hx]</span><span
8841 class="cmtt-8">&#x00A0;is</span><span
8842 class="cmtt-8">&#x00A0;greater</span><span
8843 class="cmtt-8">&#x00A0;than</span><span
8844 class="cmtt-8">&#x00A0;[n]</span><span
8845 class="cmtt-8">&#x00A0;)</span><span
8846 class="cmtt-8">&#x00A0;</span><span
8847 class="cmsy-8">{</span>
8848 <br class="fancyvrb" /><a
8849 id="x1-101192r23"></a><span
8850 class="cmr-6">23</span><span
8851 class="cmtt-8">&#x00A0;</span><span
8852 class="cmtt-8">&#x00A0;</span>
8853 <br class="fancyvrb" /><a
8854 id="x1-101194r24"></a><span
8855 class="cmr-6">24</span><span
8856 class="cmtt-8">&#x00A0;</span><span
8857 class="cmtt-8">&#x00A0;</span><span
8858 class="cmtt-8">&#x00A0;</span><span
8859 class="cmtt-8">&#x00A0;</span><span
8860 class="cmtt-8">&#x00A0;</span><span
8861 class="cmtt-8">&#x00A0;</span><span
8862 class="cmtt-8">&#x00A0;</span><span
8863 class="cmtt-8">&#x00A0;</span><span
8864 class="cmtt-8">&#x00A0;</span><span
8865 class="cmtt-8">&#x00A0;</span><span
8866 class="cmtt-8">&#x00A0;</span><span
8867 class="cmtt-8">&#x00A0;</span><span
8868 class="cmtt-8">&#x00A0;</span><span
8869 class="cmtt-8">&#x00A0;14)</span><span
8870 class="cmtt-8">&#x00A0;truncate</span><span
8871 class="cmtt-8">&#x00A0;vector</span><span
8872 class="cmtt-8">&#x00A0;[floor]</span><span
8873 class="cmtt-8">&#x00A0;to</span><span
8874 class="cmtt-8">&#x00A0;[n]</span><span
8875 class="cmtt-8">&#x00A0;elements</span>
8876 <br class="fancyvrb" /><a
8877 id="x1-101196r25"></a><span
8878 class="cmr-6">25</span><span
8879 class="cmtt-8">&#x00A0;</span><span
8880 class="cmtt-8">&#x00A0;</span>
8881 <br class="fancyvrb" /><a
8882 id="x1-101198r26"></a><span
8883 class="cmr-6">26</span><span
8884 class="cmtt-8">&#x00A0;</span><span
8885 class="cmtt-8">&#x00A0;</span><span
8886 class="cmtt-8">&#x00A0;</span><span
8887 class="cmtt-8">&#x00A0;</span><span
8888 class="cmtt-8">&#x00A0;</span><span
8889 class="cmtt-8">&#x00A0;</span><span
8890 class="cmtt-8">&#x00A0;</span><span
8891 class="cmsy-8">}</span>
8892 <br class="fancyvrb" /><a
8893 id="x1-101200r27"></a><span
8894 class="cmr-6">27</span><span
8895 class="cmtt-8">&#x00A0;</span><span
8896 class="cmtt-8">&#x00A0;</span>
8897 <br class="fancyvrb" /><a
8898 id="x1-101202r28"></a><span
8899 class="cmr-6">28</span><span
8900 class="cmtt-8">&#x00A0;</span><span
8901 class="cmtt-8">&#x00A0;</span><span
8902 class="cmtt-8">&#x00A0;15)</span><span
8903 class="cmtt-8">&#x00A0;for</span><span
8904 class="cmtt-8">&#x00A0;each</span><span
8905 class="cmtt-8">&#x00A0;scalar</span><span
8906 class="cmtt-8">&#x00A0;in</span><span
8907 class="cmtt-8">&#x00A0;vector</span><span
8908 class="cmtt-8">&#x00A0;[floor],</span><span
8909 class="cmtt-8">&#x00A0;perform</span><span
8910 class="cmtt-8">&#x00A0;a</span><span
8911 class="cmtt-8">&#x00A0;lookup</span><span
8912 class="cmtt-8">&#x00A0;substitution</span><span
8913 class="cmtt-8">&#x00A0;using</span>
8914 <br class="fancyvrb" /><a
8915 id="x1-101204r29"></a><span
8916 class="cmr-6">29</span><span
8917 class="cmtt-8">&#x00A0;</span><span
8918 class="cmtt-8">&#x00A0;</span><span
8919 class="cmtt-8">&#x00A0;</span><span
8920 class="cmtt-8">&#x00A0;</span><span
8921 class="cmtt-8">&#x00A0;</span><span
8922 class="cmtt-8">&#x00A0;</span><span
8923 class="cmtt-8">&#x00A0;the</span><span
8924 class="cmtt-8">&#x00A0;scalar</span><span
8925 class="cmtt-8">&#x00A0;value</span><span
8926 class="cmtt-8">&#x00A0;from</span><span
8927 class="cmtt-8">&#x00A0;[floor]</span><span
8928 class="cmtt-8">&#x00A0;as</span><span
8929 class="cmtt-8">&#x00A0;an</span><span
8930 class="cmtt-8">&#x00A0;offset</span><span
8931 class="cmtt-8">&#x00A0;into</span><span
8932 class="cmtt-8">&#x00A0;the</span><span
8933 class="cmtt-8">&#x00A0;vector</span><span
8934 class="cmtt-8">&#x00A0;</span><a
8935 href="#x1-12500010.1"><span
8936 class="cmtt-8">[floor1_inverse_dB_static_table]</span></a>
8937 <br class="fancyvrb" /><a
8938 id="x1-101206r30"></a><span
8939 class="cmr-6">30</span><span
8940 class="cmtt-8">&#x00A0;</span><span
8941 class="cmtt-8">&#x00A0;</span>
8942 <br class="fancyvrb" /><a
8943 id="x1-101208r31"></a><span
8944 class="cmr-6">31</span><span
8945 class="cmtt-8">&#x00A0;</span><span
8946 class="cmtt-8">&#x00A0;</span><span
8947 class="cmtt-8">&#x00A0;16)</span><span
8948 class="cmtt-8">&#x00A0;done</span>
8949 <br class="fancyvrb" /><a
8950 id="x1-101210r32"></a><span
8951 class="cmr-6">32</span><span
8952 class="cmtt-8">&#x00A0;</span><span
8953 class="cmtt-8">&#x00A0;</span>
8954 </div>
8955 </dd></dl>
8959 <h3 class="sectionHead"><span class="titlemark">8 </span> <a
8960 id="x1-1020008"></a>Residue setup and decode</h3>
8961 <!--l. 6--><p class="noindent" >
8962 <h4 class="subsectionHead"><span class="titlemark">8.1 </span> <a
8963 id="x1-1030008.1"></a>Overview</h4>
8964 <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
8965 after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
8966 may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
8967 coupling. The exact semantic content of the vector does not matter to the residue
8968 abstraction.
8969 <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
8970 bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
8971 different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
8972 abstraction.
8973 <!--l. 23--><p class="noindent" >
8974 <h4 class="subsectionHead"><span class="titlemark">8.2 </span> <a
8975 id="x1-1040008.2"></a>Residue format</h4>
8976 <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
8977 chunk, encodes the chunk classifications and finally encodes the chunks themselves
8978 using the the specific VQ arrangement defined for each selected classification. The
8979 exact interleaving and partitioning vary by residue encoding number, however the
8980 high-level process used to classify and encode the residue vector is the same in all three
8981 variants.
8982 <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
8983 the moment exactly how a partition is encoded and simply trusting that it is, is as
8984 follows:
8985 <ul class="itemize1">
8986 <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
8987 specified. If we have a vector size of <span
8988 class="cmti-12">n</span>, a partition size <span
8989 class="cmti-12">residue&#x02d9;partition&#x02d9;size</span>, and
8990 a total of <span
8991 class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded is
8995 <span
8996 class="cmti-12">n</span>/<span
8997 class="cmti-12">residue&#x02d9;partition&#x02d9;size</span>*<span
8998 class="cmti-12">ch</span>. It is important to note that the integer division truncates.
8999 In the below example, we assume an example <span
9000 class="cmti-12">residue&#x02d9;partition&#x02d9;size </span>of 8.
9001 </li>
9002 <li class="itemize">Each partition in each vector has a classification number that specifies which of
9003 multiple configured VQ codebook setups are used to decode that partition. The
9004 classification numbers of each partition can be thought of as forming a vector in
9005 their own right, as in the illustration below. Just as the residue vectors are coded
9006 in grouped partitions to increase encoding efficiency, the classification vector is also
9007 partitioned into chunks. The integer elements of each scalar in a classification chunk
9008 are built into a single scalar that represents the classification numbers in that chunk.
9009 In the below example, the classification codeword encodes two classification numbers.
9010 </li>
9011 <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
9012 the residue vector, but more often efficient codebook design dictates that each vector
9013 is encoded as the additive sum of several passes through the residue vector using
9014 more than one VQ codebook. Thus, each residue value potentially accumulates values
9015 from multiple decode passes. The classification value associated with a partition is
9016 the same in each pass, thus the classification codeword is coded only in the first pass.
9017 </li></ul>
9018 <div class="center"
9020 <!--l. 70--><p class="noindent" >
9022 <!--l. 71--><p class="noindent" ><img
9023 src="residue-pack.png" alt="PIC"
9025 <br /> <table class="caption"
9026 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;11: </td><td
9027 class="content">illustration of residue vector format</td></tr></table><!--tex4ht:label?: x1-10400111 -->
9028 </div>
9029 <!--l. 77--><p class="noindent" >
9030 <h4 class="subsectionHead"><span class="titlemark">8.3 </span> <a
9031 id="x1-1050008.3"></a>residue 0</h4>
9032 <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
9033 partition encoding (visually treated as a black box&#8211;or cyan box or brown box&#8211;in the above
9034 figure).
9035 <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
9039 encode a partition in a specific pass. The dimension of the codebook need not be the same in
9040 multiple passes, however the partition size must be an even multiple of the codebook
9041 dimension.
9042 <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
9043 codebook sizes of 8, 4, 2 and 1:
9044 <!--l. 92--><p class="noindent" >
9045 <div class="fancyvrb" id="fancyvrb33">
9047 id="x1-105002r1"></a><span
9048 class="cmr-6">1</span><span
9049 class="cmtt-8">&#x00A0;</span><span
9050 class="cmtt-8">&#x00A0;</span>
9051 <br class="fancyvrb" /><a
9052 id="x1-105004r2"></a><span
9053 class="cmr-6">2</span><span
9054 class="cmtt-8">&#x00A0;</span><span
9055 class="cmtt-8">&#x00A0;</span><span
9056 class="cmtt-8">&#x00A0;</span><span
9057 class="cmtt-8">&#x00A0;</span><span
9058 class="cmtt-8">&#x00A0;</span><span
9059 class="cmtt-8">&#x00A0;</span><span
9060 class="cmtt-8">&#x00A0;</span><span
9061 class="cmtt-8">&#x00A0;</span><span
9062 class="cmtt-8">&#x00A0;</span><span
9063 class="cmtt-8">&#x00A0;</span><span
9064 class="cmtt-8">&#x00A0;</span><span
9065 class="cmtt-8">&#x00A0;</span><span
9066 class="cmtt-8">&#x00A0;</span><span
9067 class="cmtt-8">&#x00A0;original</span><span
9068 class="cmtt-8">&#x00A0;residue</span><span
9069 class="cmtt-8">&#x00A0;vector:</span><span
9070 class="cmtt-8">&#x00A0;[</span><span
9071 class="cmtt-8">&#x00A0;0</span><span
9072 class="cmtt-8">&#x00A0;1</span><span
9073 class="cmtt-8">&#x00A0;2</span><span
9074 class="cmtt-8">&#x00A0;3</span><span
9075 class="cmtt-8">&#x00A0;4</span><span
9076 class="cmtt-8">&#x00A0;5</span><span
9077 class="cmtt-8">&#x00A0;6</span><span
9078 class="cmtt-8">&#x00A0;7</span><span
9079 class="cmtt-8">&#x00A0;]</span>
9080 <br class="fancyvrb" /><a
9081 id="x1-105006r3"></a><span
9082 class="cmr-6">3</span><span
9083 class="cmtt-8">&#x00A0;</span><span
9084 class="cmtt-8">&#x00A0;</span>
9085 <br class="fancyvrb" /><a
9086 id="x1-105008r4"></a><span
9087 class="cmr-6">4</span><span
9088 class="cmtt-8">&#x00A0;</span><span
9089 class="cmtt-8">&#x00A0;codebook</span><span
9090 class="cmtt-8">&#x00A0;dimensions</span><span
9091 class="cmtt-8">&#x00A0;=</span><span
9092 class="cmtt-8">&#x00A0;8</span><span
9093 class="cmtt-8">&#x00A0;</span><span
9094 class="cmtt-8">&#x00A0;encoded</span><span
9095 class="cmtt-8">&#x00A0;as:</span><span
9096 class="cmtt-8">&#x00A0;[</span><span
9097 class="cmtt-8">&#x00A0;0</span><span
9098 class="cmtt-8">&#x00A0;1</span><span
9099 class="cmtt-8">&#x00A0;2</span><span
9100 class="cmtt-8">&#x00A0;3</span><span
9101 class="cmtt-8">&#x00A0;4</span><span
9102 class="cmtt-8">&#x00A0;5</span><span
9103 class="cmtt-8">&#x00A0;6</span><span
9104 class="cmtt-8">&#x00A0;7</span><span
9105 class="cmtt-8">&#x00A0;]</span>
9106 <br class="fancyvrb" /><a
9107 id="x1-105010r5"></a><span
9108 class="cmr-6">5</span><span
9109 class="cmtt-8">&#x00A0;</span><span
9110 class="cmtt-8">&#x00A0;</span>
9111 <br class="fancyvrb" /><a
9112 id="x1-105012r6"></a><span
9113 class="cmr-6">6</span><span
9114 class="cmtt-8">&#x00A0;</span><span
9115 class="cmtt-8">&#x00A0;codebook</span><span
9116 class="cmtt-8">&#x00A0;dimensions</span><span
9117 class="cmtt-8">&#x00A0;=</span><span
9118 class="cmtt-8">&#x00A0;4</span><span
9119 class="cmtt-8">&#x00A0;</span><span
9120 class="cmtt-8">&#x00A0;encoded</span><span
9121 class="cmtt-8">&#x00A0;as:</span><span
9122 class="cmtt-8">&#x00A0;[</span><span
9123 class="cmtt-8">&#x00A0;0</span><span
9124 class="cmtt-8">&#x00A0;2</span><span
9125 class="cmtt-8">&#x00A0;4</span><span
9126 class="cmtt-8">&#x00A0;6</span><span
9127 class="cmtt-8">&#x00A0;],</span><span
9128 class="cmtt-8">&#x00A0;[</span><span
9129 class="cmtt-8">&#x00A0;1</span><span
9130 class="cmtt-8">&#x00A0;3</span><span
9131 class="cmtt-8">&#x00A0;5</span><span
9132 class="cmtt-8">&#x00A0;7</span><span
9133 class="cmtt-8">&#x00A0;]</span>
9134 <br class="fancyvrb" /><a
9135 id="x1-105014r7"></a><span
9136 class="cmr-6">7</span><span
9137 class="cmtt-8">&#x00A0;</span><span
9138 class="cmtt-8">&#x00A0;</span>
9139 <br class="fancyvrb" /><a
9140 id="x1-105016r8"></a><span
9141 class="cmr-6">8</span><span
9142 class="cmtt-8">&#x00A0;</span><span
9143 class="cmtt-8">&#x00A0;codebook</span><span
9144 class="cmtt-8">&#x00A0;dimensions</span><span
9145 class="cmtt-8">&#x00A0;=</span><span
9146 class="cmtt-8">&#x00A0;2</span><span
9147 class="cmtt-8">&#x00A0;</span><span
9148 class="cmtt-8">&#x00A0;encoded</span><span
9149 class="cmtt-8">&#x00A0;as:</span><span
9150 class="cmtt-8">&#x00A0;[</span><span
9151 class="cmtt-8">&#x00A0;0</span><span
9152 class="cmtt-8">&#x00A0;4</span><span
9153 class="cmtt-8">&#x00A0;],</span><span
9154 class="cmtt-8">&#x00A0;[</span><span
9155 class="cmtt-8">&#x00A0;1</span><span
9156 class="cmtt-8">&#x00A0;5</span><span
9157 class="cmtt-8">&#x00A0;],</span><span
9158 class="cmtt-8">&#x00A0;[</span><span
9159 class="cmtt-8">&#x00A0;2</span><span
9160 class="cmtt-8">&#x00A0;6</span><span
9161 class="cmtt-8">&#x00A0;],</span><span
9162 class="cmtt-8">&#x00A0;[</span><span
9163 class="cmtt-8">&#x00A0;3</span><span
9164 class="cmtt-8">&#x00A0;7</span><span
9165 class="cmtt-8">&#x00A0;]</span>
9166 <br class="fancyvrb" /><a
9167 id="x1-105018r9"></a><span
9168 class="cmr-6">9</span><span
9169 class="cmtt-8">&#x00A0;</span><span
9170 class="cmtt-8">&#x00A0;</span>
9171 <br class="fancyvrb" /><a
9172 id="x1-105020r10"></a><span
9173 class="cmr-6">10</span><span
9174 class="cmtt-8">&#x00A0;</span><span
9175 class="cmtt-8">&#x00A0;codebook</span><span
9176 class="cmtt-8">&#x00A0;dimensions</span><span
9177 class="cmtt-8">&#x00A0;=</span><span
9178 class="cmtt-8">&#x00A0;1</span><span
9179 class="cmtt-8">&#x00A0;</span><span
9180 class="cmtt-8">&#x00A0;encoded</span><span
9181 class="cmtt-8">&#x00A0;as:</span><span
9182 class="cmtt-8">&#x00A0;[</span><span
9183 class="cmtt-8">&#x00A0;0</span><span
9184 class="cmtt-8">&#x00A0;],</span><span
9185 class="cmtt-8">&#x00A0;[</span><span
9186 class="cmtt-8">&#x00A0;1</span><span
9187 class="cmtt-8">&#x00A0;],</span><span
9188 class="cmtt-8">&#x00A0;[</span><span
9189 class="cmtt-8">&#x00A0;2</span><span
9190 class="cmtt-8">&#x00A0;],</span><span
9191 class="cmtt-8">&#x00A0;[</span><span
9192 class="cmtt-8">&#x00A0;3</span><span
9193 class="cmtt-8">&#x00A0;],</span><span
9194 class="cmtt-8">&#x00A0;[</span><span
9195 class="cmtt-8">&#x00A0;4</span><span
9196 class="cmtt-8">&#x00A0;],</span><span
9197 class="cmtt-8">&#x00A0;[</span><span
9198 class="cmtt-8">&#x00A0;5</span><span
9199 class="cmtt-8">&#x00A0;],</span><span
9200 class="cmtt-8">&#x00A0;[</span><span
9201 class="cmtt-8">&#x00A0;6</span><span
9202 class="cmtt-8">&#x00A0;],</span><span
9203 class="cmtt-8">&#x00A0;[</span><span
9204 class="cmtt-8">&#x00A0;7</span><span
9205 class="cmtt-8">&#x00A0;]</span>
9206 <br class="fancyvrb" /><a
9207 id="x1-105022r11"></a><span
9208 class="cmr-6">11</span><span
9209 class="cmtt-8">&#x00A0;</span><span
9210 class="cmtt-8">&#x00A0;</span>
9211 </div>
9212 <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
9213 restricted to a power of two.
9214 <!--l. 111--><p class="noindent" >
9215 <h4 class="subsectionHead"><span class="titlemark">8.4 </span> <a
9216 id="x1-1060008.4"></a>residue 1</h4>
9217 <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
9218 with residue 0, however, partition length must be an integer multiple of the codebook dimension,
9219 although dimension may vary from pass to pass.
9220 <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
9221 codebook sizes of 8, 4, 2 and 1:
9222 <!--l. 121--><p class="noindent" >
9223 <div class="fancyvrb" id="fancyvrb34">
9225 id="x1-106002r1"></a><span
9226 class="cmr-6">1</span><span
9227 class="cmtt-8">&#x00A0;</span><span
9228 class="cmtt-8">&#x00A0;</span>
9229 <br class="fancyvrb" /><a
9230 id="x1-106004r2"></a><span
9231 class="cmr-6">2</span><span
9232 class="cmtt-8">&#x00A0;</span><span
9233 class="cmtt-8">&#x00A0;</span><span
9234 class="cmtt-8">&#x00A0;</span><span
9235 class="cmtt-8">&#x00A0;</span><span
9236 class="cmtt-8">&#x00A0;</span><span
9237 class="cmtt-8">&#x00A0;</span><span
9238 class="cmtt-8">&#x00A0;</span><span
9239 class="cmtt-8">&#x00A0;</span><span
9240 class="cmtt-8">&#x00A0;</span><span
9241 class="cmtt-8">&#x00A0;</span><span
9242 class="cmtt-8">&#x00A0;</span><span
9243 class="cmtt-8">&#x00A0;</span><span
9244 class="cmtt-8">&#x00A0;</span><span
9245 class="cmtt-8">&#x00A0;original</span><span
9246 class="cmtt-8">&#x00A0;residue</span><span
9247 class="cmtt-8">&#x00A0;vector:</span><span
9248 class="cmtt-8">&#x00A0;[</span><span
9249 class="cmtt-8">&#x00A0;0</span><span
9250 class="cmtt-8">&#x00A0;1</span><span
9251 class="cmtt-8">&#x00A0;2</span><span
9252 class="cmtt-8">&#x00A0;3</span><span
9253 class="cmtt-8">&#x00A0;4</span><span
9254 class="cmtt-8">&#x00A0;5</span><span
9255 class="cmtt-8">&#x00A0;6</span><span
9256 class="cmtt-8">&#x00A0;7</span><span
9257 class="cmtt-8">&#x00A0;]</span>
9258 <br class="fancyvrb" /><a
9259 id="x1-106006r3"></a><span
9260 class="cmr-6">3</span><span
9261 class="cmtt-8">&#x00A0;</span><span
9262 class="cmtt-8">&#x00A0;</span>
9263 <br class="fancyvrb" /><a
9264 id="x1-106008r4"></a><span
9265 class="cmr-6">4</span><span
9266 class="cmtt-8">&#x00A0;</span><span
9267 class="cmtt-8">&#x00A0;codebook</span><span
9268 class="cmtt-8">&#x00A0;dimensions</span><span
9269 class="cmtt-8">&#x00A0;=</span><span
9270 class="cmtt-8">&#x00A0;8</span><span
9271 class="cmtt-8">&#x00A0;</span><span
9272 class="cmtt-8">&#x00A0;encoded</span><span
9273 class="cmtt-8">&#x00A0;as:</span><span
9274 class="cmtt-8">&#x00A0;[</span><span
9275 class="cmtt-8">&#x00A0;0</span><span
9276 class="cmtt-8">&#x00A0;1</span><span
9277 class="cmtt-8">&#x00A0;2</span><span
9278 class="cmtt-8">&#x00A0;3</span><span
9279 class="cmtt-8">&#x00A0;4</span><span
9280 class="cmtt-8">&#x00A0;5</span><span
9281 class="cmtt-8">&#x00A0;6</span><span
9282 class="cmtt-8">&#x00A0;7</span><span
9283 class="cmtt-8">&#x00A0;]</span>
9284 <br class="fancyvrb" /><a
9285 id="x1-106010r5"></a><span
9286 class="cmr-6">5</span><span
9287 class="cmtt-8">&#x00A0;</span><span
9288 class="cmtt-8">&#x00A0;</span>
9289 <br class="fancyvrb" /><a
9290 id="x1-106012r6"></a><span
9291 class="cmr-6">6</span><span
9292 class="cmtt-8">&#x00A0;</span><span
9293 class="cmtt-8">&#x00A0;codebook</span><span
9294 class="cmtt-8">&#x00A0;dimensions</span><span
9295 class="cmtt-8">&#x00A0;=</span><span
9296 class="cmtt-8">&#x00A0;4</span><span
9297 class="cmtt-8">&#x00A0;</span><span
9298 class="cmtt-8">&#x00A0;encoded</span><span
9299 class="cmtt-8">&#x00A0;as:</span><span
9300 class="cmtt-8">&#x00A0;[</span><span
9301 class="cmtt-8">&#x00A0;0</span><span
9302 class="cmtt-8">&#x00A0;1</span><span
9303 class="cmtt-8">&#x00A0;2</span><span
9304 class="cmtt-8">&#x00A0;3</span><span
9305 class="cmtt-8">&#x00A0;],</span><span
9306 class="cmtt-8">&#x00A0;[</span><span
9307 class="cmtt-8">&#x00A0;4</span><span
9308 class="cmtt-8">&#x00A0;5</span><span
9309 class="cmtt-8">&#x00A0;6</span><span
9310 class="cmtt-8">&#x00A0;7</span><span
9311 class="cmtt-8">&#x00A0;]</span>
9312 <br class="fancyvrb" /><a
9313 id="x1-106014r7"></a><span
9314 class="cmr-6">7</span><span
9315 class="cmtt-8">&#x00A0;</span><span
9316 class="cmtt-8">&#x00A0;</span>
9317 <br class="fancyvrb" /><a
9318 id="x1-106016r8"></a><span
9319 class="cmr-6">8</span><span
9320 class="cmtt-8">&#x00A0;</span><span
9321 class="cmtt-8">&#x00A0;codebook</span><span
9322 class="cmtt-8">&#x00A0;dimensions</span><span
9323 class="cmtt-8">&#x00A0;=</span><span
9324 class="cmtt-8">&#x00A0;2</span><span
9325 class="cmtt-8">&#x00A0;</span><span
9326 class="cmtt-8">&#x00A0;encoded</span><span
9327 class="cmtt-8">&#x00A0;as:</span><span
9328 class="cmtt-8">&#x00A0;[</span><span
9329 class="cmtt-8">&#x00A0;0</span><span
9330 class="cmtt-8">&#x00A0;1</span><span
9331 class="cmtt-8">&#x00A0;],</span><span
9332 class="cmtt-8">&#x00A0;[</span><span
9333 class="cmtt-8">&#x00A0;2</span><span
9334 class="cmtt-8">&#x00A0;3</span><span
9335 class="cmtt-8">&#x00A0;],</span><span
9336 class="cmtt-8">&#x00A0;[</span><span
9337 class="cmtt-8">&#x00A0;4</span><span
9338 class="cmtt-8">&#x00A0;5</span><span
9339 class="cmtt-8">&#x00A0;],</span><span
9340 class="cmtt-8">&#x00A0;[</span><span
9341 class="cmtt-8">&#x00A0;6</span><span
9342 class="cmtt-8">&#x00A0;7</span><span
9343 class="cmtt-8">&#x00A0;]</span>
9344 <br class="fancyvrb" /><a
9345 id="x1-106018r9"></a><span
9346 class="cmr-6">9</span><span
9347 class="cmtt-8">&#x00A0;</span><span
9348 class="cmtt-8">&#x00A0;</span>
9349 <br class="fancyvrb" /><a
9350 id="x1-106020r10"></a><span
9351 class="cmr-6">10</span><span
9352 class="cmtt-8">&#x00A0;</span><span
9353 class="cmtt-8">&#x00A0;codebook</span><span
9354 class="cmtt-8">&#x00A0;dimensions</span><span
9355 class="cmtt-8">&#x00A0;=</span><span
9356 class="cmtt-8">&#x00A0;1</span><span
9357 class="cmtt-8">&#x00A0;</span><span
9358 class="cmtt-8">&#x00A0;encoded</span><span
9359 class="cmtt-8">&#x00A0;as:</span><span
9360 class="cmtt-8">&#x00A0;[</span><span
9361 class="cmtt-8">&#x00A0;0</span><span
9362 class="cmtt-8">&#x00A0;],</span><span
9363 class="cmtt-8">&#x00A0;[</span><span
9364 class="cmtt-8">&#x00A0;1</span><span
9365 class="cmtt-8">&#x00A0;],</span><span
9366 class="cmtt-8">&#x00A0;[</span><span
9367 class="cmtt-8">&#x00A0;2</span><span
9368 class="cmtt-8">&#x00A0;],</span><span
9369 class="cmtt-8">&#x00A0;[</span><span
9370 class="cmtt-8">&#x00A0;3</span><span
9371 class="cmtt-8">&#x00A0;],</span><span
9372 class="cmtt-8">&#x00A0;[</span><span
9373 class="cmtt-8">&#x00A0;4</span><span
9374 class="cmtt-8">&#x00A0;],</span><span
9375 class="cmtt-8">&#x00A0;[</span><span
9376 class="cmtt-8">&#x00A0;5</span><span
9377 class="cmtt-8">&#x00A0;],</span><span
9378 class="cmtt-8">&#x00A0;[</span><span
9379 class="cmtt-8">&#x00A0;6</span><span
9380 class="cmtt-8">&#x00A0;],</span><span
9381 class="cmtt-8">&#x00A0;[</span><span
9382 class="cmtt-8">&#x00A0;7</span><span
9383 class="cmtt-8">&#x00A0;]</span>
9384 <br class="fancyvrb" /><a
9385 id="x1-106022r11"></a><span
9386 class="cmr-6">11</span><span
9387 class="cmtt-8">&#x00A0;</span><span
9388 class="cmtt-8">&#x00A0;</span>
9392 </div>
9393 <!--l. 137--><p class="noindent" >
9394 <h4 class="subsectionHead"><span class="titlemark">8.5 </span> <a
9395 id="x1-1070008.5"></a>residue 2</h4>
9396 <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
9397 passed-in vectors as in residue type 1, the <span
9398 class="cmti-12">ch </span>passed in vectors of length <span
9399 class="cmti-12">n </span>are first interleaved
9400 and flattened into a single vector of length <span
9401 class="cmti-12">ch</span>*<span
9402 class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
9403 is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
9404 residue type 1 and type 2 are equivalent.
9405 <div class="center"
9407 <!--l. 147--><p class="noindent" >
9409 <!--l. 148--><p class="noindent" ><img
9410 src="residue2.png" alt="PIC"
9412 <br /> <table class="caption"
9413 ><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;12: </td><td
9414 class="content">illustration of residue type 2</td></tr></table><!--tex4ht:label?: x1-10700112 -->
9415 </div>
9416 <!--l. 153--><p class="noindent" >
9417 <h4 class="subsectionHead"><span class="titlemark">8.6 </span> <a
9418 id="x1-1080008.6"></a>Residue decode</h4>
9419 <!--l. 155--><p class="noindent" >
9420 <h5 class="subsubsectionHead"><span class="titlemark">8.6.1 </span> <a
9421 id="x1-1090008.6.1"></a>header decode</h5>
9422 <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
9423 <div class="fancyvrb" id="fancyvrb35">
9425 id="x1-109002r1"></a><span
9426 class="cmr-6">1</span><span
9427 class="cmtt-8">&#x00A0;</span><span
9428 class="cmtt-8">&#x00A0;</span><span
9429 class="cmtt-8">&#x00A0;</span><span
9430 class="cmtt-8">&#x00A0;1)</span><span
9431 class="cmtt-8">&#x00A0;[residue_begin]</span><span
9432 class="cmtt-8">&#x00A0;=</span><span
9433 class="cmtt-8">&#x00A0;read</span><span
9434 class="cmtt-8">&#x00A0;24</span><span
9435 class="cmtt-8">&#x00A0;bits</span><span
9436 class="cmtt-8">&#x00A0;as</span><span
9437 class="cmtt-8">&#x00A0;unsigned</span><span
9438 class="cmtt-8">&#x00A0;integer</span>
9439 <br class="fancyvrb" /><a
9440 id="x1-109004r2"></a><span
9441 class="cmr-6">2</span><span
9442 class="cmtt-8">&#x00A0;</span><span
9443 class="cmtt-8">&#x00A0;</span><span
9444 class="cmtt-8">&#x00A0;</span><span
9445 class="cmtt-8">&#x00A0;2)</span><span
9446 class="cmtt-8">&#x00A0;[residue_end]</span><span
9447 class="cmtt-8">&#x00A0;=</span><span
9448 class="cmtt-8">&#x00A0;read</span><span
9449 class="cmtt-8">&#x00A0;24</span><span
9450 class="cmtt-8">&#x00A0;bits</span><span
9451 class="cmtt-8">&#x00A0;as</span><span
9452 class="cmtt-8">&#x00A0;unsigned</span><span
9453 class="cmtt-8">&#x00A0;integer</span>
9454 <br class="fancyvrb" /><a
9455 id="x1-109006r3"></a><span
9456 class="cmr-6">3</span><span
9457 class="cmtt-8">&#x00A0;</span><span
9458 class="cmtt-8">&#x00A0;</span><span
9459 class="cmtt-8">&#x00A0;</span><span
9460 class="cmtt-8">&#x00A0;3)</span><span
9461 class="cmtt-8">&#x00A0;[residue_partition_size]</span><span
9462 class="cmtt-8">&#x00A0;=</span><span
9463 class="cmtt-8">&#x00A0;read</span><span
9464 class="cmtt-8">&#x00A0;24</span><span
9465 class="cmtt-8">&#x00A0;bits</span><span
9466 class="cmtt-8">&#x00A0;as</span><span
9467 class="cmtt-8">&#x00A0;unsigned</span><span
9468 class="cmtt-8">&#x00A0;integer</span><span
9469 class="cmtt-8">&#x00A0;and</span><span
9470 class="cmtt-8">&#x00A0;add</span><span
9471 class="cmtt-8">&#x00A0;one</span>
9472 <br class="fancyvrb" /><a
9473 id="x1-109008r4"></a><span
9474 class="cmr-6">4</span><span
9475 class="cmtt-8">&#x00A0;</span><span
9476 class="cmtt-8">&#x00A0;</span><span
9477 class="cmtt-8">&#x00A0;</span><span
9478 class="cmtt-8">&#x00A0;4)</span><span
9479 class="cmtt-8">&#x00A0;[residue_classifications]</span><span
9480 class="cmtt-8">&#x00A0;=</span><span
9481 class="cmtt-8">&#x00A0;read</span><span
9482 class="cmtt-8">&#x00A0;6</span><span
9483 class="cmtt-8">&#x00A0;bits</span><span
9484 class="cmtt-8">&#x00A0;as</span><span
9485 class="cmtt-8">&#x00A0;unsigned</span><span
9486 class="cmtt-8">&#x00A0;integer</span><span
9487 class="cmtt-8">&#x00A0;and</span><span
9488 class="cmtt-8">&#x00A0;add</span><span
9489 class="cmtt-8">&#x00A0;one</span>
9493 <br class="fancyvrb" /><a
9494 id="x1-109010r5"></a><span
9495 class="cmr-6">5</span><span
9496 class="cmtt-8">&#x00A0;</span><span
9497 class="cmtt-8">&#x00A0;</span><span
9498 class="cmtt-8">&#x00A0;</span><span
9499 class="cmtt-8">&#x00A0;5)</span><span
9500 class="cmtt-8">&#x00A0;[residue_classbook]</span><span
9501 class="cmtt-8">&#x00A0;=</span><span
9502 class="cmtt-8">&#x00A0;read</span><span
9503 class="cmtt-8">&#x00A0;8</span><span
9504 class="cmtt-8">&#x00A0;bits</span><span
9505 class="cmtt-8">&#x00A0;as</span><span
9506 class="cmtt-8">&#x00A0;unsigned</span><span
9507 class="cmtt-8">&#x00A0;integer</span>
9508 </div>
9509 <!--l. 166--><p class="noindent" ><span
9510 class="cmtt-12">[residue_begin] </span>and <span
9511 class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
9512 actually coded; it implements akin to a bandpass where, for coding purposes, the vector
9513 effectively begins at element <span
9514 class="cmtt-12">[residue_begin] </span>and ends at <span
9515 class="cmtt-12">[residue_end]</span>. Preceding and
9516 following values in the unpacked vectors are zeroed. Note that for residue type 2, these
9517 values as well as <span
9518 class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
9519 individual vectors before interleave. <span
9520 class="cmtt-12">[residue_partition_size] </span>is as explained above,
9521 <span
9522 class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
9523 belong and <span
9524 class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
9525 codewords. The number of dimensions in book <span
9526 class="cmtt-12">[residue_classbook] </span>determines how
9527 many classification values are grouped into a single classification codeword. Note that
9528 the number of entries and dimensions in book <span
9529 class="cmtt-12">[residue_classbook]</span>, along with
9530 <span
9531 class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
9532 codewords. If <span
9533 class="cmtt-12">[residue_classifications]</span>&#x02C6;<span
9534 class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
9535 <span
9536 class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
9537 <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
9538 passes.
9539 <!--l. 193--><p class="noindent" >
9540 <div class="fancyvrb" id="fancyvrb36">
9542 id="x1-109012r1"></a><span
9543 class="cmr-6">1</span><span
9544 class="cmtt-8">&#x00A0;</span><span
9545 class="cmtt-8">&#x00A0;</span><span
9546 class="cmtt-8">&#x00A0;</span><span
9547 class="cmtt-8">&#x00A0;1)</span><span
9548 class="cmtt-8">&#x00A0;iterate</span><span
9549 class="cmtt-8">&#x00A0;[i]</span><span
9550 class="cmtt-8">&#x00A0;over</span><span
9551 class="cmtt-8">&#x00A0;the</span><span
9552 class="cmtt-8">&#x00A0;range</span><span
9553 class="cmtt-8">&#x00A0;0</span><span
9554 class="cmtt-8">&#x00A0;...</span><span
9555 class="cmtt-8">&#x00A0;[residue_classifications]-1</span><span
9556 class="cmtt-8">&#x00A0;{</span>
9557 <br class="fancyvrb" /><a
9558 id="x1-109014r2"></a><span
9559 class="cmr-6">2</span><span
9560 class="cmtt-8">&#x00A0;</span><span
9561 class="cmtt-8">&#x00A0;</span>
9562 <br class="fancyvrb" /><a
9563 id="x1-109016r3"></a><span
9564 class="cmr-6">3</span><span
9565 class="cmtt-8">&#x00A0;</span><span
9566 class="cmtt-8">&#x00A0;</span><span
9567 class="cmtt-8">&#x00A0;</span><span
9568 class="cmtt-8">&#x00A0;</span><span
9569 class="cmtt-8">&#x00A0;</span><span
9570 class="cmtt-8">&#x00A0;</span><span
9571 class="cmtt-8">&#x00A0;</span><span
9572 class="cmtt-8">&#x00A0;</span><span
9573 class="cmtt-8">&#x00A0;2)</span><span
9574 class="cmtt-8">&#x00A0;[high_bits]</span><span
9575 class="cmtt-8">&#x00A0;=</span><span
9576 class="cmtt-8">&#x00A0;0</span>
9577 <br class="fancyvrb" /><a
9578 id="x1-109018r4"></a><span
9579 class="cmr-6">4</span><span
9580 class="cmtt-8">&#x00A0;</span><span
9581 class="cmtt-8">&#x00A0;</span><span
9582 class="cmtt-8">&#x00A0;</span><span
9583 class="cmtt-8">&#x00A0;</span><span
9584 class="cmtt-8">&#x00A0;</span><span
9585 class="cmtt-8">&#x00A0;</span><span
9586 class="cmtt-8">&#x00A0;</span><span
9587 class="cmtt-8">&#x00A0;</span><span
9588 class="cmtt-8">&#x00A0;3)</span><span
9589 class="cmtt-8">&#x00A0;[low_bits]</span><span
9590 class="cmtt-8">&#x00A0;=</span><span
9591 class="cmtt-8">&#x00A0;read</span><span
9592 class="cmtt-8">&#x00A0;3</span><span
9593 class="cmtt-8">&#x00A0;bits</span><span
9594 class="cmtt-8">&#x00A0;as</span><span
9595 class="cmtt-8">&#x00A0;unsigned</span><span
9596 class="cmtt-8">&#x00A0;integer</span>
9597 <br class="fancyvrb" /><a
9598 id="x1-109020r5"></a><span
9599 class="cmr-6">5</span><span
9600 class="cmtt-8">&#x00A0;</span><span
9601 class="cmtt-8">&#x00A0;</span><span
9602 class="cmtt-8">&#x00A0;</span><span
9603 class="cmtt-8">&#x00A0;</span><span
9604 class="cmtt-8">&#x00A0;</span><span
9605 class="cmtt-8">&#x00A0;</span><span
9606 class="cmtt-8">&#x00A0;</span><span
9607 class="cmtt-8">&#x00A0;</span><span
9608 class="cmtt-8">&#x00A0;4)</span><span
9609 class="cmtt-8">&#x00A0;[bitflag]</span><span
9610 class="cmtt-8">&#x00A0;=</span><span
9611 class="cmtt-8">&#x00A0;read</span><span
9612 class="cmtt-8">&#x00A0;one</span><span
9613 class="cmtt-8">&#x00A0;bit</span><span
9614 class="cmtt-8">&#x00A0;as</span><span
9615 class="cmtt-8">&#x00A0;boolean</span>
9616 <br class="fancyvrb" /><a
9617 id="x1-109022r6"></a><span
9618 class="cmr-6">6</span><span
9619 class="cmtt-8">&#x00A0;</span><span
9620 class="cmtt-8">&#x00A0;</span><span
9621 class="cmtt-8">&#x00A0;</span><span
9622 class="cmtt-8">&#x00A0;</span><span
9623 class="cmtt-8">&#x00A0;</span><span
9624 class="cmtt-8">&#x00A0;</span><span
9625 class="cmtt-8">&#x00A0;</span><span
9626 class="cmtt-8">&#x00A0;</span><span
9627 class="cmtt-8">&#x00A0;5)</span><span
9628 class="cmtt-8">&#x00A0;if</span><span
9629 class="cmtt-8">&#x00A0;(</span><span
9630 class="cmtt-8">&#x00A0;[bitflag]</span><span
9631 class="cmtt-8">&#x00A0;is</span><span
9632 class="cmtt-8">&#x00A0;set</span><span
9633 class="cmtt-8">&#x00A0;)</span><span
9634 class="cmtt-8">&#x00A0;then</span><span
9635 class="cmtt-8">&#x00A0;[high_bits]</span><span
9636 class="cmtt-8">&#x00A0;=</span><span
9637 class="cmtt-8">&#x00A0;read</span><span
9638 class="cmtt-8">&#x00A0;five</span><span
9639 class="cmtt-8">&#x00A0;bits</span><span
9640 class="cmtt-8">&#x00A0;as</span><span
9641 class="cmtt-8">&#x00A0;unsigned</span><span
9642 class="cmtt-8">&#x00A0;integer</span>
9643 <br class="fancyvrb" /><a
9644 id="x1-109024r7"></a><span
9645 class="cmr-6">7</span><span
9646 class="cmtt-8">&#x00A0;</span><span
9647 class="cmtt-8">&#x00A0;</span><span
9648 class="cmtt-8">&#x00A0;</span><span
9649 class="cmtt-8">&#x00A0;</span><span
9650 class="cmtt-8">&#x00A0;</span><span
9651 class="cmtt-8">&#x00A0;</span><span
9652 class="cmtt-8">&#x00A0;</span><span
9653 class="cmtt-8">&#x00A0;</span><span
9654 class="cmtt-8">&#x00A0;6)</span><span
9655 class="cmtt-8">&#x00A0;vector</span><span
9656 class="cmtt-8">&#x00A0;[residue_cascade]</span><span
9657 class="cmtt-8">&#x00A0;element</span><span
9658 class="cmtt-8">&#x00A0;[i]</span><span
9659 class="cmtt-8">&#x00A0;=</span><span
9660 class="cmtt-8">&#x00A0;[high_bits]</span><span
9661 class="cmtt-8">&#x00A0;*</span><span
9662 class="cmtt-8">&#x00A0;8</span><span
9663 class="cmtt-8">&#x00A0;+</span><span
9664 class="cmtt-8">&#x00A0;[low_bits]</span>
9665 <br class="fancyvrb" /><a
9666 id="x1-109026r8"></a><span
9667 class="cmr-6">8</span><span
9668 class="cmtt-8">&#x00A0;</span><span
9669 class="cmtt-8">&#x00A0;</span><span
9670 class="cmtt-8">&#x00A0;</span><span
9671 class="cmtt-8">&#x00A0;</span><span
9672 class="cmtt-8">&#x00A0;</span><span
9673 class="cmtt-8">&#x00A0;</span><span
9674 class="cmtt-8">&#x00A0;}</span>
9675 <br class="fancyvrb" /><a
9676 id="x1-109028r9"></a><span
9677 class="cmr-6">9</span><span
9678 class="cmtt-8">&#x00A0;</span><span
9679 class="cmtt-8">&#x00A0;</span><span
9680 class="cmtt-8">&#x00A0;</span><span
9681 class="cmtt-8">&#x00A0;7)</span><span
9682 class="cmtt-8">&#x00A0;done</span>
9683 </div>
9684 <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
9685 bitmap. We loop over the possible codebook classifications and the maximum possible number of
9686 encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
9687 bits):
9688 <!--l. 211--><p class="noindent" >
9689 <div class="fancyvrb" id="fancyvrb37">
9691 id="x1-109030r1"></a><span
9692 class="cmr-6">1</span><span
9693 class="cmtt-8">&#x00A0;</span><span
9694 class="cmtt-8">&#x00A0;</span><span
9695 class="cmtt-8">&#x00A0;</span><span
9696 class="cmtt-8">&#x00A0;1)</span><span
9697 class="cmtt-8">&#x00A0;iterate</span><span
9698 class="cmtt-8">&#x00A0;[i]</span><span
9699 class="cmtt-8">&#x00A0;over</span><span
9700 class="cmtt-8">&#x00A0;the</span><span
9701 class="cmtt-8">&#x00A0;range</span><span
9702 class="cmtt-8">&#x00A0;0</span><span
9703 class="cmtt-8">&#x00A0;...</span><span
9704 class="cmtt-8">&#x00A0;[residue_classifications]-1</span><span
9705 class="cmtt-8">&#x00A0;{</span>
9706 <br class="fancyvrb" /><a
9707 id="x1-109032r2"></a><span
9708 class="cmr-6">2</span><span
9709 class="cmtt-8">&#x00A0;</span><span
9710 class="cmtt-8">&#x00A0;</span>
9711 <br class="fancyvrb" /><a
9712 id="x1-109034r3"></a><span
9713 class="cmr-6">3</span><span
9714 class="cmtt-8">&#x00A0;</span><span
9715 class="cmtt-8">&#x00A0;</span><span
9716 class="cmtt-8">&#x00A0;</span><span
9717 class="cmtt-8">&#x00A0;</span><span
9718 class="cmtt-8">&#x00A0;</span><span
9719 class="cmtt-8">&#x00A0;</span><span
9720 class="cmtt-8">&#x00A0;</span><span
9721 class="cmtt-8">&#x00A0;</span><span
9722 class="cmtt-8">&#x00A0;2)</span><span
9723 class="cmtt-8">&#x00A0;iterate</span><span
9724 class="cmtt-8">&#x00A0;[j]</span><span
9725 class="cmtt-8">&#x00A0;over</span><span
9726 class="cmtt-8">&#x00A0;the</span><span
9727 class="cmtt-8">&#x00A0;range</span><span
9728 class="cmtt-8">&#x00A0;0</span><span
9729 class="cmtt-8">&#x00A0;...</span><span
9730 class="cmtt-8">&#x00A0;7</span><span
9731 class="cmtt-8">&#x00A0;{</span>
9732 <br class="fancyvrb" /><a
9733 id="x1-109036r4"></a><span
9734 class="cmr-6">4</span><span
9735 class="cmtt-8">&#x00A0;</span><span
9736 class="cmtt-8">&#x00A0;</span>
9737 <br class="fancyvrb" /><a
9738 id="x1-109038r5"></a><span
9739 class="cmr-6">5</span><span
9740 class="cmtt-8">&#x00A0;</span><span
9741 class="cmtt-8">&#x00A0;</span><span
9742 class="cmtt-8">&#x00A0;</span><span
9743 class="cmtt-8">&#x00A0;</span><span
9744 class="cmtt-8">&#x00A0;</span><span
9745 class="cmtt-8">&#x00A0;</span><span
9746 class="cmtt-8">&#x00A0;</span><span
9747 class="cmtt-8">&#x00A0;</span><span
9748 class="cmtt-8">&#x00A0;</span><span
9749 class="cmtt-8">&#x00A0;</span><span
9750 class="cmtt-8">&#x00A0;</span><span
9751 class="cmtt-8">&#x00A0;</span><span
9752 class="cmtt-8">&#x00A0;</span><span
9753 class="cmtt-8">&#x00A0;3)</span><span
9754 class="cmtt-8">&#x00A0;if</span><span
9755 class="cmtt-8">&#x00A0;(</span><span
9756 class="cmtt-8">&#x00A0;vector</span><span
9757 class="cmtt-8">&#x00A0;[residue_cascade]</span><span
9758 class="cmtt-8">&#x00A0;element</span><span
9759 class="cmtt-8">&#x00A0;[i]</span><span
9760 class="cmtt-8">&#x00A0;bit</span><span
9761 class="cmtt-8">&#x00A0;[j]</span><span
9762 class="cmtt-8">&#x00A0;is</span><span
9763 class="cmtt-8">&#x00A0;set</span><span
9764 class="cmtt-8">&#x00A0;)</span><span
9765 class="cmtt-8">&#x00A0;{</span>
9766 <br class="fancyvrb" /><a
9767 id="x1-109040r6"></a><span
9768 class="cmr-6">6</span><span
9769 class="cmtt-8">&#x00A0;</span><span
9770 class="cmtt-8">&#x00A0;</span>
9771 <br class="fancyvrb" /><a
9772 id="x1-109042r7"></a><span
9773 class="cmr-6">7</span><span
9774 class="cmtt-8">&#x00A0;</span><span
9775 class="cmtt-8">&#x00A0;</span><span
9776 class="cmtt-8">&#x00A0;</span><span
9777 class="cmtt-8">&#x00A0;</span><span
9778 class="cmtt-8">&#x00A0;</span><span
9779 class="cmtt-8">&#x00A0;</span><span
9780 class="cmtt-8">&#x00A0;</span><span
9781 class="cmtt-8">&#x00A0;</span><span
9782 class="cmtt-8">&#x00A0;</span><span
9783 class="cmtt-8">&#x00A0;</span><span
9784 class="cmtt-8">&#x00A0;</span><span
9785 class="cmtt-8">&#x00A0;</span><span
9786 class="cmtt-8">&#x00A0;</span><span
9787 class="cmtt-8">&#x00A0;</span><span
9788 class="cmtt-8">&#x00A0;</span><span
9789 class="cmtt-8">&#x00A0;</span><span
9790 class="cmtt-8">&#x00A0;</span><span
9791 class="cmtt-8">&#x00A0;</span><span
9792 class="cmtt-8">&#x00A0;4)</span><span
9793 class="cmtt-8">&#x00A0;array</span><span
9794 class="cmtt-8">&#x00A0;[residue_books]</span><span
9795 class="cmtt-8">&#x00A0;element</span><span
9796 class="cmtt-8">&#x00A0;[i][j]</span><span
9797 class="cmtt-8">&#x00A0;=</span><span
9798 class="cmtt-8">&#x00A0;read</span><span
9799 class="cmtt-8">&#x00A0;8</span><span
9800 class="cmtt-8">&#x00A0;bits</span><span
9801 class="cmtt-8">&#x00A0;as</span><span
9802 class="cmtt-8">&#x00A0;unsigned</span><span
9803 class="cmtt-8">&#x00A0;integer</span>
9804 <br class="fancyvrb" /><a
9805 id="x1-109044r8"></a><span
9806 class="cmr-6">8</span><span
9807 class="cmtt-8">&#x00A0;</span><span
9808 class="cmtt-8">&#x00A0;</span>
9809 <br class="fancyvrb" /><a
9810 id="x1-109046r9"></a><span
9811 class="cmr-6">9</span><span
9812 class="cmtt-8">&#x00A0;</span><span
9813 class="cmtt-8">&#x00A0;</span><span
9814 class="cmtt-8">&#x00A0;</span><span
9815 class="cmtt-8">&#x00A0;</span><span
9816 class="cmtt-8">&#x00A0;</span><span
9817 class="cmtt-8">&#x00A0;</span><span
9818 class="cmtt-8">&#x00A0;</span><span
9819 class="cmtt-8">&#x00A0;</span><span
9820 class="cmtt-8">&#x00A0;</span><span
9821 class="cmtt-8">&#x00A0;</span><span
9822 class="cmtt-8">&#x00A0;</span><span
9823 class="cmtt-8">&#x00A0;</span><span
9824 class="cmtt-8">&#x00A0;</span><span
9825 class="cmtt-8">&#x00A0;</span><span
9826 class="cmtt-8">&#x00A0;</span><span
9827 class="cmtt-8">&#x00A0;</span><span
9828 class="cmtt-8">&#x00A0;}</span><span
9829 class="cmtt-8">&#x00A0;else</span><span
9830 class="cmtt-8">&#x00A0;{</span>
9834 <br class="fancyvrb" /><a
9835 id="x1-109048r10"></a><span
9836 class="cmr-6">10</span><span
9837 class="cmtt-8">&#x00A0;</span><span
9838 class="cmtt-8">&#x00A0;</span>
9839 <br class="fancyvrb" /><a
9840 id="x1-109050r11"></a><span
9841 class="cmr-6">11</span><span
9842 class="cmtt-8">&#x00A0;</span><span
9843 class="cmtt-8">&#x00A0;</span><span
9844 class="cmtt-8">&#x00A0;</span><span
9845 class="cmtt-8">&#x00A0;</span><span
9846 class="cmtt-8">&#x00A0;</span><span
9847 class="cmtt-8">&#x00A0;</span><span
9848 class="cmtt-8">&#x00A0;</span><span
9849 class="cmtt-8">&#x00A0;</span><span
9850 class="cmtt-8">&#x00A0;</span><span
9851 class="cmtt-8">&#x00A0;</span><span
9852 class="cmtt-8">&#x00A0;</span><span
9853 class="cmtt-8">&#x00A0;</span><span
9854 class="cmtt-8">&#x00A0;</span><span
9855 class="cmtt-8">&#x00A0;</span><span
9856 class="cmtt-8">&#x00A0;</span><span
9857 class="cmtt-8">&#x00A0;</span><span
9858 class="cmtt-8">&#x00A0;</span><span
9859 class="cmtt-8">&#x00A0;</span><span
9860 class="cmtt-8">&#x00A0;5)</span><span
9861 class="cmtt-8">&#x00A0;array</span><span
9862 class="cmtt-8">&#x00A0;[residue_books]</span><span
9863 class="cmtt-8">&#x00A0;element</span><span
9864 class="cmtt-8">&#x00A0;[i][j]</span><span
9865 class="cmtt-8">&#x00A0;=</span><span
9866 class="cmtt-8">&#x00A0;unused</span>
9867 <br class="fancyvrb" /><a
9868 id="x1-109052r12"></a><span
9869 class="cmr-6">12</span><span
9870 class="cmtt-8">&#x00A0;</span><span
9871 class="cmtt-8">&#x00A0;</span>
9872 <br class="fancyvrb" /><a
9873 id="x1-109054r13"></a><span
9874 class="cmr-6">13</span><span
9875 class="cmtt-8">&#x00A0;</span><span
9876 class="cmtt-8">&#x00A0;</span><span
9877 class="cmtt-8">&#x00A0;</span><span
9878 class="cmtt-8">&#x00A0;</span><span
9879 class="cmtt-8">&#x00A0;</span><span
9880 class="cmtt-8">&#x00A0;</span><span
9881 class="cmtt-8">&#x00A0;</span><span
9882 class="cmtt-8">&#x00A0;</span><span
9883 class="cmtt-8">&#x00A0;</span><span
9884 class="cmtt-8">&#x00A0;</span><span
9885 class="cmtt-8">&#x00A0;</span><span
9886 class="cmtt-8">&#x00A0;</span><span
9887 class="cmtt-8">&#x00A0;</span><span
9888 class="cmtt-8">&#x00A0;</span><span
9889 class="cmtt-8">&#x00A0;</span><span
9890 class="cmtt-8">&#x00A0;</span><span
9891 class="cmtt-8">&#x00A0;}</span>
9892 <br class="fancyvrb" /><a
9893 id="x1-109056r14"></a><span
9894 class="cmr-6">14</span><span
9895 class="cmtt-8">&#x00A0;</span><span
9896 class="cmtt-8">&#x00A0;</span><span
9897 class="cmtt-8">&#x00A0;</span><span
9898 class="cmtt-8">&#x00A0;</span><span
9899 class="cmtt-8">&#x00A0;</span><span
9900 class="cmtt-8">&#x00A0;</span><span
9901 class="cmtt-8">&#x00A0;</span><span
9902 class="cmtt-8">&#x00A0;</span><span
9903 class="cmtt-8">&#x00A0;</span><span
9904 class="cmtt-8">&#x00A0;</span><span
9905 class="cmtt-8">&#x00A0;</span><span
9906 class="cmtt-8">&#x00A0;}</span>
9907 <br class="fancyvrb" /><a
9908 id="x1-109058r15"></a><span
9909 class="cmr-6">15</span><span
9910 class="cmtt-8">&#x00A0;</span><span
9911 class="cmtt-8">&#x00A0;</span><span
9912 class="cmtt-8">&#x00A0;</span><span
9913 class="cmtt-8">&#x00A0;</span><span
9914 class="cmtt-8">&#x00A0;</span><span
9915 class="cmtt-8">&#x00A0;</span><span
9916 class="cmtt-8">&#x00A0;</span><span
9917 class="cmtt-8">&#x00A0;}</span>
9918 <br class="fancyvrb" /><a
9919 id="x1-109060r16"></a><span
9920 class="cmr-6">16</span><span
9921 class="cmtt-8">&#x00A0;</span><span
9922 class="cmtt-8">&#x00A0;</span>
9923 <br class="fancyvrb" /><a
9924 id="x1-109062r17"></a><span
9925 class="cmr-6">17</span><span
9926 class="cmtt-8">&#x00A0;</span><span
9927 class="cmtt-8">&#x00A0;</span><span
9928 class="cmtt-8">&#x00A0;</span><span
9929 class="cmtt-8">&#x00A0;6)</span><span
9930 class="cmtt-8">&#x00A0;done</span>
9931 </div>
9932 <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable. In
9933 addition, any codebook number greater than the maximum numbered codebook set up in this
9934 stream also renders the stream undecodable.
9935 <!--l. 238--><p class="noindent" >
9936 <h5 class="subsubsectionHead"><span class="titlemark">8.6.2 </span> <a
9937 id="x1-1100008.6.2"></a>packet decode</h5>
9938 <!--l. 240--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
9939 decode can be built out of the format 1 decode process. Thus we describe first the decode
9940 infrastructure identical to all three formats.
9941 <!--l. 245--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
9942 vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
9943 decoded. If the passed in number of vectors is 3 and vector number 1 is marked &#8217;do not decode&#8217;,
9944 decode skips vector 1 during the decode loop. However, even &#8217;do not decode&#8217; vectors are
9945 allocated and zeroed.
9946 <!--l. 252--><p class="noindent" >Depending on the values of <span
9947 class="cmtt-12">[residue_begin] </span>and <span
9948 class="cmtt-12">[residue_end]</span>, it is obvious that the
9949 encoded portion of a residue vector may be the entire possible residue vector or some other strict
9950 subset of the actual residue vector size with zero padding at either uncoded end. However, it is
9951 also possible to set <span
9952 class="cmtt-12">[residue_begin] </span>and <span
9953 class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
9954 beyond the maximum vector size. Before beginning residue decode, limit <span
9955 class="cmtt-12">[residue_begin]</span>
9956 and <span
9957 class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
9958 the number of vectors being encoded, <span
9959 class="cmtt-12">[ch] </span>is provided by the higher level decoding
9960 process.
9961 <!--l. 266--><p class="noindent" >
9962 <div class="fancyvrb" id="fancyvrb38">
9964 id="x1-110002r1"></a><span
9965 class="cmr-6">1</span><span
9966 class="cmtt-8">&#x00A0;</span><span
9967 class="cmtt-8">&#x00A0;</span><span
9968 class="cmtt-8">&#x00A0;</span><span
9969 class="cmtt-8">&#x00A0;1)</span><span
9970 class="cmtt-8">&#x00A0;[actual_size]</span><span
9971 class="cmtt-8">&#x00A0;=</span><span
9972 class="cmtt-8">&#x00A0;current</span><span
9973 class="cmtt-8">&#x00A0;blocksize/2;</span>
9974 <br class="fancyvrb" /><a
9975 id="x1-110004r2"></a><span
9976 class="cmr-6">2</span><span
9977 class="cmtt-8">&#x00A0;</span><span
9978 class="cmtt-8">&#x00A0;</span><span
9979 class="cmtt-8">&#x00A0;</span><span
9980 class="cmtt-8">&#x00A0;2)</span><span
9981 class="cmtt-8">&#x00A0;if</span><span
9982 class="cmtt-8">&#x00A0;residue</span><span
9983 class="cmtt-8">&#x00A0;encoding</span><span
9984 class="cmtt-8">&#x00A0;is</span><span
9985 class="cmtt-8">&#x00A0;format</span><span
9986 class="cmtt-8">&#x00A0;2</span>
9987 <br class="fancyvrb" /><a
9988 id="x1-110006r3"></a><span
9989 class="cmr-6">3</span><span
9990 class="cmtt-8">&#x00A0;</span><span
9991 class="cmtt-8">&#x00A0;</span><span
9992 class="cmtt-8">&#x00A0;</span><span
9993 class="cmtt-8">&#x00A0;</span><span
9994 class="cmtt-8">&#x00A0;</span><span
9995 class="cmtt-8">&#x00A0;</span><span
9996 class="cmtt-8">&#x00A0;</span><span
9997 class="cmtt-8">&#x00A0;</span><span
9998 class="cmtt-8">&#x00A0;3)</span><span
9999 class="cmtt-8">&#x00A0;[actual_size]</span><span
10000 class="cmtt-8">&#x00A0;=</span><span
10001 class="cmtt-8">&#x00A0;[actual_size]</span><span
10002 class="cmtt-8">&#x00A0;*</span><span
10003 class="cmtt-8">&#x00A0;[ch];</span>
10004 <br class="fancyvrb" /><a
10005 id="x1-110008r4"></a><span
10006 class="cmr-6">4</span><span
10007 class="cmtt-8">&#x00A0;</span><span
10008 class="cmtt-8">&#x00A0;</span><span
10009 class="cmtt-8">&#x00A0;</span><span
10010 class="cmtt-8">&#x00A0;4)</span><span
10011 class="cmtt-8">&#x00A0;[limit_residue_begin]</span><span
10012 class="cmtt-8">&#x00A0;=</span><span
10013 class="cmtt-8">&#x00A0;maximum</span><span
10014 class="cmtt-8">&#x00A0;of</span><span
10015 class="cmtt-8">&#x00A0;([residue_begin],[actual_size]);</span>
10016 <br class="fancyvrb" /><a
10017 id="x1-110010r5"></a><span
10018 class="cmr-6">5</span><span
10019 class="cmtt-8">&#x00A0;</span><span
10020 class="cmtt-8">&#x00A0;</span><span
10021 class="cmtt-8">&#x00A0;</span><span
10022 class="cmtt-8">&#x00A0;5)</span><span
10023 class="cmtt-8">&#x00A0;[limit_residue_end]</span><span
10024 class="cmtt-8">&#x00A0;=</span><span
10025 class="cmtt-8">&#x00A0;maximum</span><span
10026 class="cmtt-8">&#x00A0;of</span><span
10027 class="cmtt-8">&#x00A0;([residue_end],[actual_size]);</span>
10028 </div>
10032 <!--l. 274--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
10033 <!--l. 277--><p class="noindent" >
10034 <div class="fancyvrb" id="fancyvrb39">
10036 id="x1-110012r1"></a><span
10037 class="cmr-6">1</span><span
10038 class="cmtt-8">&#x00A0;</span><span
10039 class="cmtt-8">&#x00A0;</span><span
10040 class="cmtt-8">&#x00A0;</span><span
10041 class="cmtt-8">&#x00A0;1)</span><span
10042 class="cmtt-8">&#x00A0;[classwords_per_codeword]</span><span
10043 class="cmtt-8">&#x00A0;=</span><span
10044 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
10045 class="cmtt-8">&#x00A0;value</span><span
10046 class="cmtt-8">&#x00A0;of</span><span
10047 class="cmtt-8">&#x00A0;codebook</span><span
10048 class="cmtt-8">&#x00A0;[residue_classbook]</span>
10049 <br class="fancyvrb" /><a
10050 id="x1-110014r2"></a><span
10051 class="cmr-6">2</span><span
10052 class="cmtt-8">&#x00A0;</span><span
10053 class="cmtt-8">&#x00A0;</span><span
10054 class="cmtt-8">&#x00A0;</span><span
10055 class="cmtt-8">&#x00A0;2)</span><span
10056 class="cmtt-8">&#x00A0;[n_to_read]</span><span
10057 class="cmtt-8">&#x00A0;=</span><span
10058 class="cmtt-8">&#x00A0;[limit_residue_end]</span><span
10059 class="cmtt-8">&#x00A0;-</span><span
10060 class="cmtt-8">&#x00A0;[limit_residue_begin]</span>
10061 <br class="fancyvrb" /><a
10062 id="x1-110016r3"></a><span
10063 class="cmr-6">3</span><span
10064 class="cmtt-8">&#x00A0;</span><span
10065 class="cmtt-8">&#x00A0;</span><span
10066 class="cmtt-8">&#x00A0;</span><span
10067 class="cmtt-8">&#x00A0;3)</span><span
10068 class="cmtt-8">&#x00A0;[partitions_to_read]</span><span
10069 class="cmtt-8">&#x00A0;=</span><span
10070 class="cmtt-8">&#x00A0;[n_to_read]</span><span
10071 class="cmtt-8">&#x00A0;/</span><span
10072 class="cmtt-8">&#x00A0;[residue_partition_size]</span>
10073 </div>
10074 <!--l. 283--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
10075 <div class="fancyvrb" id="fancyvrb40">
10077 id="x1-110018r1"></a><span
10078 class="cmr-6">1</span><span
10079 class="cmtt-8">&#x00A0;</span><span
10080 class="cmtt-8">&#x00A0;</span><span
10081 class="cmtt-8">&#x00A0;</span><span
10082 class="cmtt-8">&#x00A0;1)</span><span
10083 class="cmtt-8">&#x00A0;allocate</span><span
10084 class="cmtt-8">&#x00A0;and</span><span
10085 class="cmtt-8">&#x00A0;zero</span><span
10086 class="cmtt-8">&#x00A0;all</span><span
10087 class="cmtt-8">&#x00A0;vectors</span><span
10088 class="cmtt-8">&#x00A0;that</span><span
10089 class="cmtt-8">&#x00A0;will</span><span
10090 class="cmtt-8">&#x00A0;be</span><span
10091 class="cmtt-8">&#x00A0;returned.</span>
10092 <br class="fancyvrb" /><a
10093 id="x1-110020r2"></a><span
10094 class="cmr-6">2</span><span
10095 class="cmtt-8">&#x00A0;</span><span
10096 class="cmtt-8">&#x00A0;</span><span
10097 class="cmtt-8">&#x00A0;</span><span
10098 class="cmtt-8">&#x00A0;2)</span><span
10099 class="cmtt-8">&#x00A0;if</span><span
10100 class="cmtt-8">&#x00A0;([n_to_read]</span><span
10101 class="cmtt-8">&#x00A0;is</span><span
10102 class="cmtt-8">&#x00A0;zero),</span><span
10103 class="cmtt-8">&#x00A0;stop;</span><span
10104 class="cmtt-8">&#x00A0;there</span><span
10105 class="cmtt-8">&#x00A0;is</span><span
10106 class="cmtt-8">&#x00A0;no</span><span
10107 class="cmtt-8">&#x00A0;residue</span><span
10108 class="cmtt-8">&#x00A0;to</span><span
10109 class="cmtt-8">&#x00A0;decode.</span>
10110 <br class="fancyvrb" /><a
10111 id="x1-110022r3"></a><span
10112 class="cmr-6">3</span><span
10113 class="cmtt-8">&#x00A0;</span><span
10114 class="cmtt-8">&#x00A0;</span><span
10115 class="cmtt-8">&#x00A0;</span><span
10116 class="cmtt-8">&#x00A0;3)</span><span
10117 class="cmtt-8">&#x00A0;iterate</span><span
10118 class="cmtt-8">&#x00A0;[pass]</span><span
10119 class="cmtt-8">&#x00A0;over</span><span
10120 class="cmtt-8">&#x00A0;the</span><span
10121 class="cmtt-8">&#x00A0;range</span><span
10122 class="cmtt-8">&#x00A0;0</span><span
10123 class="cmtt-8">&#x00A0;...</span><span
10124 class="cmtt-8">&#x00A0;7</span><span
10125 class="cmtt-8">&#x00A0;{</span>
10126 <br class="fancyvrb" /><a
10127 id="x1-110024r4"></a><span
10128 class="cmr-6">4</span><span
10129 class="cmtt-8">&#x00A0;</span><span
10130 class="cmtt-8">&#x00A0;</span>
10131 <br class="fancyvrb" /><a
10132 id="x1-110026r5"></a><span
10133 class="cmr-6">5</span><span
10134 class="cmtt-8">&#x00A0;</span><span
10135 class="cmtt-8">&#x00A0;</span><span
10136 class="cmtt-8">&#x00A0;</span><span
10137 class="cmtt-8">&#x00A0;</span><span
10138 class="cmtt-8">&#x00A0;</span><span
10139 class="cmtt-8">&#x00A0;</span><span
10140 class="cmtt-8">&#x00A0;</span><span
10141 class="cmtt-8">&#x00A0;</span><span
10142 class="cmtt-8">&#x00A0;4)</span><span
10143 class="cmtt-8">&#x00A0;[partition_count]</span><span
10144 class="cmtt-8">&#x00A0;=</span><span
10145 class="cmtt-8">&#x00A0;0</span>
10146 <br class="fancyvrb" /><a
10147 id="x1-110028r6"></a><span
10148 class="cmr-6">6</span><span
10149 class="cmtt-8">&#x00A0;</span><span
10150 class="cmtt-8">&#x00A0;</span>
10151 <br class="fancyvrb" /><a
10152 id="x1-110030r7"></a><span
10153 class="cmr-6">7</span><span
10154 class="cmtt-8">&#x00A0;</span><span
10155 class="cmtt-8">&#x00A0;</span><span
10156 class="cmtt-8">&#x00A0;</span><span
10157 class="cmtt-8">&#x00A0;</span><span
10158 class="cmtt-8">&#x00A0;</span><span
10159 class="cmtt-8">&#x00A0;</span><span
10160 class="cmtt-8">&#x00A0;</span><span
10161 class="cmtt-8">&#x00A0;</span><span
10162 class="cmtt-8">&#x00A0;5)</span><span
10163 class="cmtt-8">&#x00A0;while</span><span
10164 class="cmtt-8">&#x00A0;[partition_count]</span><span
10165 class="cmtt-8">&#x00A0;is</span><span
10166 class="cmtt-8">&#x00A0;less</span><span
10167 class="cmtt-8">&#x00A0;than</span><span
10168 class="cmtt-8">&#x00A0;[partitions_to_read]</span>
10169 <br class="fancyvrb" /><a
10170 id="x1-110032r8"></a><span
10171 class="cmr-6">8</span><span
10172 class="cmtt-8">&#x00A0;</span><span
10173 class="cmtt-8">&#x00A0;</span>
10174 <br class="fancyvrb" /><a
10175 id="x1-110034r9"></a><span
10176 class="cmr-6">9</span><span
10177 class="cmtt-8">&#x00A0;</span><span
10178 class="cmtt-8">&#x00A0;</span><span
10179 class="cmtt-8">&#x00A0;</span><span
10180 class="cmtt-8">&#x00A0;</span><span
10181 class="cmtt-8">&#x00A0;</span><span
10182 class="cmtt-8">&#x00A0;</span><span
10183 class="cmtt-8">&#x00A0;</span><span
10184 class="cmtt-8">&#x00A0;</span><span
10185 class="cmtt-8">&#x00A0;</span><span
10186 class="cmtt-8">&#x00A0;</span><span
10187 class="cmtt-8">&#x00A0;</span><span
10188 class="cmtt-8">&#x00A0;</span><span
10189 class="cmtt-8">&#x00A0;</span><span
10190 class="cmtt-8">&#x00A0;6)</span><span
10191 class="cmtt-8">&#x00A0;if</span><span
10192 class="cmtt-8">&#x00A0;([pass]</span><span
10193 class="cmtt-8">&#x00A0;is</span><span
10194 class="cmtt-8">&#x00A0;zero)</span><span
10195 class="cmtt-8">&#x00A0;{</span>
10196 <br class="fancyvrb" /><a
10197 id="x1-110036r10"></a><span
10198 class="cmr-6">10</span><span
10199 class="cmtt-8">&#x00A0;</span><span
10200 class="cmtt-8">&#x00A0;</span>
10201 <br class="fancyvrb" /><a
10202 id="x1-110038r11"></a><span
10203 class="cmr-6">11</span><span
10204 class="cmtt-8">&#x00A0;</span><span
10205 class="cmtt-8">&#x00A0;</span><span
10206 class="cmtt-8">&#x00A0;</span><span
10207 class="cmtt-8">&#x00A0;</span><span
10208 class="cmtt-8">&#x00A0;</span><span
10209 class="cmtt-8">&#x00A0;</span><span
10210 class="cmtt-8">&#x00A0;</span><span
10211 class="cmtt-8">&#x00A0;</span><span
10212 class="cmtt-8">&#x00A0;</span><span
10213 class="cmtt-8">&#x00A0;</span><span
10214 class="cmtt-8">&#x00A0;</span><span
10215 class="cmtt-8">&#x00A0;</span><span
10216 class="cmtt-8">&#x00A0;</span><span
10217 class="cmtt-8">&#x00A0;</span><span
10218 class="cmtt-8">&#x00A0;</span><span
10219 class="cmtt-8">&#x00A0;</span><span
10220 class="cmtt-8">&#x00A0;</span><span
10221 class="cmtt-8">&#x00A0;</span><span
10222 class="cmtt-8">&#x00A0;7)</span><span
10223 class="cmtt-8">&#x00A0;iterate</span><span
10224 class="cmtt-8">&#x00A0;[j]</span><span
10225 class="cmtt-8">&#x00A0;over</span><span
10226 class="cmtt-8">&#x00A0;the</span><span
10227 class="cmtt-8">&#x00A0;range</span><span
10228 class="cmtt-8">&#x00A0;0</span><span
10229 class="cmtt-8">&#x00A0;..</span><span
10230 class="cmtt-8">&#x00A0;[ch]-1</span><span
10231 class="cmtt-8">&#x00A0;{</span>
10232 <br class="fancyvrb" /><a
10233 id="x1-110040r12"></a><span
10234 class="cmr-6">12</span><span
10235 class="cmtt-8">&#x00A0;</span><span
10236 class="cmtt-8">&#x00A0;</span>
10237 <br class="fancyvrb" /><a
10238 id="x1-110042r13"></a><span
10239 class="cmr-6">13</span><span
10240 class="cmtt-8">&#x00A0;</span><span
10241 class="cmtt-8">&#x00A0;</span><span
10242 class="cmtt-8">&#x00A0;</span><span
10243 class="cmtt-8">&#x00A0;</span><span
10244 class="cmtt-8">&#x00A0;</span><span
10245 class="cmtt-8">&#x00A0;</span><span
10246 class="cmtt-8">&#x00A0;</span><span
10247 class="cmtt-8">&#x00A0;</span><span
10248 class="cmtt-8">&#x00A0;</span><span
10249 class="cmtt-8">&#x00A0;</span><span
10250 class="cmtt-8">&#x00A0;</span><span
10251 class="cmtt-8">&#x00A0;</span><span
10252 class="cmtt-8">&#x00A0;</span><span
10253 class="cmtt-8">&#x00A0;</span><span
10254 class="cmtt-8">&#x00A0;</span><span
10255 class="cmtt-8">&#x00A0;</span><span
10256 class="cmtt-8">&#x00A0;</span><span
10257 class="cmtt-8">&#x00A0;</span><span
10258 class="cmtt-8">&#x00A0;</span><span
10259 class="cmtt-8">&#x00A0;</span><span
10260 class="cmtt-8">&#x00A0;</span><span
10261 class="cmtt-8">&#x00A0;</span><span
10262 class="cmtt-8">&#x00A0;</span><span
10263 class="cmtt-8">&#x00A0;8)</span><span
10264 class="cmtt-8">&#x00A0;if</span><span
10265 class="cmtt-8">&#x00A0;vector</span><span
10266 class="cmtt-8">&#x00A0;[j]</span><span
10267 class="cmtt-8">&#x00A0;is</span><span
10268 class="cmtt-8">&#x00A0;not</span><span
10269 class="cmtt-8">&#x00A0;marked</span><span
10270 class="cmtt-8">&#x00A0;&#8217;do</span><span
10271 class="cmtt-8">&#x00A0;not</span><span
10272 class="cmtt-8">&#x00A0;decode&#8217;</span><span
10273 class="cmtt-8">&#x00A0;{</span>
10274 <br class="fancyvrb" /><a
10275 id="x1-110044r14"></a><span
10276 class="cmr-6">14</span><span
10277 class="cmtt-8">&#x00A0;</span><span
10278 class="cmtt-8">&#x00A0;</span>
10279 <br class="fancyvrb" /><a
10280 id="x1-110046r15"></a><span
10281 class="cmr-6">15</span><span
10282 class="cmtt-8">&#x00A0;</span><span
10283 class="cmtt-8">&#x00A0;</span><span
10284 class="cmtt-8">&#x00A0;</span><span
10285 class="cmtt-8">&#x00A0;</span><span
10286 class="cmtt-8">&#x00A0;</span><span
10287 class="cmtt-8">&#x00A0;</span><span
10288 class="cmtt-8">&#x00A0;</span><span
10289 class="cmtt-8">&#x00A0;</span><span
10290 class="cmtt-8">&#x00A0;</span><span
10291 class="cmtt-8">&#x00A0;</span><span
10292 class="cmtt-8">&#x00A0;</span><span
10293 class="cmtt-8">&#x00A0;</span><span
10294 class="cmtt-8">&#x00A0;</span><span
10295 class="cmtt-8">&#x00A0;</span><span
10296 class="cmtt-8">&#x00A0;</span><span
10297 class="cmtt-8">&#x00A0;</span><span
10298 class="cmtt-8">&#x00A0;</span><span
10299 class="cmtt-8">&#x00A0;</span><span
10300 class="cmtt-8">&#x00A0;</span><span
10301 class="cmtt-8">&#x00A0;</span><span
10302 class="cmtt-8">&#x00A0;</span><span
10303 class="cmtt-8">&#x00A0;</span><span
10304 class="cmtt-8">&#x00A0;</span><span
10305 class="cmtt-8">&#x00A0;</span><span
10306 class="cmtt-8">&#x00A0;</span><span
10307 class="cmtt-8">&#x00A0;</span><span
10308 class="cmtt-8">&#x00A0;</span><span
10309 class="cmtt-8">&#x00A0;</span><span
10310 class="cmtt-8">&#x00A0;9)</span><span
10311 class="cmtt-8">&#x00A0;[temp]</span><span
10312 class="cmtt-8">&#x00A0;=</span><span
10313 class="cmtt-8">&#x00A0;read</span><span
10314 class="cmtt-8">&#x00A0;from</span><span
10315 class="cmtt-8">&#x00A0;packet</span><span
10316 class="cmtt-8">&#x00A0;using</span><span
10317 class="cmtt-8">&#x00A0;codebook</span><span
10318 class="cmtt-8">&#x00A0;[residue_classbook]</span><span
10319 class="cmtt-8">&#x00A0;in</span><span
10320 class="cmtt-8">&#x00A0;scalar</span><span
10321 class="cmtt-8">&#x00A0;context</span>
10322 <br class="fancyvrb" /><a
10323 id="x1-110048r16"></a><span
10324 class="cmr-6">16</span><span
10325 class="cmtt-8">&#x00A0;</span><span
10326 class="cmtt-8">&#x00A0;</span><span
10327 class="cmtt-8">&#x00A0;</span><span
10328 class="cmtt-8">&#x00A0;</span><span
10329 class="cmtt-8">&#x00A0;</span><span
10330 class="cmtt-8">&#x00A0;</span><span
10331 class="cmtt-8">&#x00A0;</span><span
10332 class="cmtt-8">&#x00A0;</span><span
10333 class="cmtt-8">&#x00A0;</span><span
10334 class="cmtt-8">&#x00A0;</span><span
10335 class="cmtt-8">&#x00A0;</span><span
10336 class="cmtt-8">&#x00A0;</span><span
10337 class="cmtt-8">&#x00A0;</span><span
10338 class="cmtt-8">&#x00A0;</span><span
10339 class="cmtt-8">&#x00A0;</span><span
10340 class="cmtt-8">&#x00A0;</span><span
10341 class="cmtt-8">&#x00A0;</span><span
10342 class="cmtt-8">&#x00A0;</span><span
10343 class="cmtt-8">&#x00A0;</span><span
10344 class="cmtt-8">&#x00A0;</span><span
10345 class="cmtt-8">&#x00A0;</span><span
10346 class="cmtt-8">&#x00A0;</span><span
10347 class="cmtt-8">&#x00A0;</span><span
10348 class="cmtt-8">&#x00A0;</span><span
10349 class="cmtt-8">&#x00A0;</span><span
10350 class="cmtt-8">&#x00A0;</span><span
10351 class="cmtt-8">&#x00A0;</span><span
10352 class="cmtt-8">&#x00A0;10)</span><span
10353 class="cmtt-8">&#x00A0;iterate</span><span
10354 class="cmtt-8">&#x00A0;[i]</span><span
10355 class="cmtt-8">&#x00A0;descending</span><span
10356 class="cmtt-8">&#x00A0;over</span><span
10357 class="cmtt-8">&#x00A0;the</span><span
10358 class="cmtt-8">&#x00A0;range</span><span
10359 class="cmtt-8">&#x00A0;[classwords_per_codeword]-1</span><span
10360 class="cmtt-8">&#x00A0;...</span><span
10361 class="cmtt-8">&#x00A0;0</span><span
10362 class="cmtt-8">&#x00A0;{</span>
10363 <br class="fancyvrb" /><a
10364 id="x1-110050r17"></a><span
10365 class="cmr-6">17</span><span
10366 class="cmtt-8">&#x00A0;</span><span
10367 class="cmtt-8">&#x00A0;</span>
10368 <br class="fancyvrb" /><a
10369 id="x1-110052r18"></a><span
10370 class="cmr-6">18</span><span
10371 class="cmtt-8">&#x00A0;</span><span
10372 class="cmtt-8">&#x00A0;</span><span
10373 class="cmtt-8">&#x00A0;</span><span
10374 class="cmtt-8">&#x00A0;</span><span
10375 class="cmtt-8">&#x00A0;</span><span
10376 class="cmtt-8">&#x00A0;</span><span
10377 class="cmtt-8">&#x00A0;</span><span
10378 class="cmtt-8">&#x00A0;</span><span
10379 class="cmtt-8">&#x00A0;</span><span
10380 class="cmtt-8">&#x00A0;</span><span
10381 class="cmtt-8">&#x00A0;</span><span
10382 class="cmtt-8">&#x00A0;</span><span
10383 class="cmtt-8">&#x00A0;</span><span
10384 class="cmtt-8">&#x00A0;</span><span
10385 class="cmtt-8">&#x00A0;</span><span
10386 class="cmtt-8">&#x00A0;</span><span
10387 class="cmtt-8">&#x00A0;</span><span
10388 class="cmtt-8">&#x00A0;</span><span
10389 class="cmtt-8">&#x00A0;</span><span
10390 class="cmtt-8">&#x00A0;</span><span
10391 class="cmtt-8">&#x00A0;</span><span
10392 class="cmtt-8">&#x00A0;</span><span
10393 class="cmtt-8">&#x00A0;</span><span
10394 class="cmtt-8">&#x00A0;</span><span
10395 class="cmtt-8">&#x00A0;</span><span
10396 class="cmtt-8">&#x00A0;</span><span
10397 class="cmtt-8">&#x00A0;</span><span
10398 class="cmtt-8">&#x00A0;</span><span
10399 class="cmtt-8">&#x00A0;</span><span
10400 class="cmtt-8">&#x00A0;</span><span
10401 class="cmtt-8">&#x00A0;</span><span
10402 class="cmtt-8">&#x00A0;</span><span
10403 class="cmtt-8">&#x00A0;11)</span><span
10404 class="cmtt-8">&#x00A0;array</span><span
10405 class="cmtt-8">&#x00A0;[classifications]</span><span
10406 class="cmtt-8">&#x00A0;element</span><span
10407 class="cmtt-8">&#x00A0;[j],([i]+[partition_count])</span><span
10408 class="cmtt-8">&#x00A0;=</span>
10409 <br class="fancyvrb" /><a
10410 id="x1-110054r19"></a><span
10411 class="cmr-6">19</span><span
10412 class="cmtt-8">&#x00A0;</span><span
10413 class="cmtt-8">&#x00A0;</span><span
10414 class="cmtt-8">&#x00A0;</span><span
10415 class="cmtt-8">&#x00A0;</span><span
10416 class="cmtt-8">&#x00A0;</span><span
10417 class="cmtt-8">&#x00A0;</span><span
10418 class="cmtt-8">&#x00A0;</span><span
10419 class="cmtt-8">&#x00A0;</span><span
10420 class="cmtt-8">&#x00A0;</span><span
10421 class="cmtt-8">&#x00A0;</span><span
10422 class="cmtt-8">&#x00A0;</span><span
10423 class="cmtt-8">&#x00A0;</span><span
10424 class="cmtt-8">&#x00A0;</span><span
10425 class="cmtt-8">&#x00A0;</span><span
10426 class="cmtt-8">&#x00A0;</span><span
10427 class="cmtt-8">&#x00A0;</span><span
10428 class="cmtt-8">&#x00A0;</span><span
10429 class="cmtt-8">&#x00A0;</span><span
10430 class="cmtt-8">&#x00A0;</span><span
10431 class="cmtt-8">&#x00A0;</span><span
10432 class="cmtt-8">&#x00A0;</span><span
10433 class="cmtt-8">&#x00A0;</span><span
10434 class="cmtt-8">&#x00A0;</span><span
10435 class="cmtt-8">&#x00A0;</span><span
10436 class="cmtt-8">&#x00A0;</span><span
10437 class="cmtt-8">&#x00A0;</span><span
10438 class="cmtt-8">&#x00A0;</span><span
10439 class="cmtt-8">&#x00A0;</span><span
10440 class="cmtt-8">&#x00A0;</span><span
10441 class="cmtt-8">&#x00A0;</span><span
10442 class="cmtt-8">&#x00A0;</span><span
10443 class="cmtt-8">&#x00A0;</span><span
10444 class="cmtt-8">&#x00A0;</span><span
10445 class="cmtt-8">&#x00A0;</span><span
10446 class="cmtt-8">&#x00A0;</span><span
10447 class="cmtt-8">&#x00A0;</span><span
10448 class="cmtt-8">&#x00A0;[temp]</span><span
10449 class="cmtt-8">&#x00A0;integer</span><span
10450 class="cmtt-8">&#x00A0;modulo</span><span
10451 class="cmtt-8">&#x00A0;[residue_classifications]</span>
10452 <br class="fancyvrb" /><a
10453 id="x1-110056r20"></a><span
10454 class="cmr-6">20</span><span
10455 class="cmtt-8">&#x00A0;</span><span
10456 class="cmtt-8">&#x00A0;</span><span
10457 class="cmtt-8">&#x00A0;</span><span
10458 class="cmtt-8">&#x00A0;</span><span
10459 class="cmtt-8">&#x00A0;</span><span
10460 class="cmtt-8">&#x00A0;</span><span
10461 class="cmtt-8">&#x00A0;</span><span
10462 class="cmtt-8">&#x00A0;</span><span
10463 class="cmtt-8">&#x00A0;</span><span
10464 class="cmtt-8">&#x00A0;</span><span
10465 class="cmtt-8">&#x00A0;</span><span
10466 class="cmtt-8">&#x00A0;</span><span
10467 class="cmtt-8">&#x00A0;</span><span
10468 class="cmtt-8">&#x00A0;</span><span
10469 class="cmtt-8">&#x00A0;</span><span
10470 class="cmtt-8">&#x00A0;</span><span
10471 class="cmtt-8">&#x00A0;</span><span
10472 class="cmtt-8">&#x00A0;</span><span
10473 class="cmtt-8">&#x00A0;</span><span
10474 class="cmtt-8">&#x00A0;</span><span
10475 class="cmtt-8">&#x00A0;</span><span
10476 class="cmtt-8">&#x00A0;</span><span
10477 class="cmtt-8">&#x00A0;</span><span
10478 class="cmtt-8">&#x00A0;</span><span
10479 class="cmtt-8">&#x00A0;</span><span
10480 class="cmtt-8">&#x00A0;</span><span
10481 class="cmtt-8">&#x00A0;</span><span
10482 class="cmtt-8">&#x00A0;</span><span
10483 class="cmtt-8">&#x00A0;</span><span
10484 class="cmtt-8">&#x00A0;</span><span
10485 class="cmtt-8">&#x00A0;</span><span
10486 class="cmtt-8">&#x00A0;</span><span
10487 class="cmtt-8">&#x00A0;12)</span><span
10488 class="cmtt-8">&#x00A0;[temp]</span><span
10489 class="cmtt-8">&#x00A0;=</span><span
10490 class="cmtt-8">&#x00A0;[temp]</span><span
10491 class="cmtt-8">&#x00A0;/</span><span
10492 class="cmtt-8">&#x00A0;[residue_classifications]</span><span
10493 class="cmtt-8">&#x00A0;using</span><span
10494 class="cmtt-8">&#x00A0;integer</span><span
10495 class="cmtt-8">&#x00A0;division</span>
10496 <br class="fancyvrb" /><a
10497 id="x1-110058r21"></a><span
10498 class="cmr-6">21</span><span
10499 class="cmtt-8">&#x00A0;</span><span
10500 class="cmtt-8">&#x00A0;</span>
10501 <br class="fancyvrb" /><a
10502 id="x1-110060r22"></a><span
10503 class="cmr-6">22</span><span
10504 class="cmtt-8">&#x00A0;</span><span
10505 class="cmtt-8">&#x00A0;</span><span
10506 class="cmtt-8">&#x00A0;</span><span
10507 class="cmtt-8">&#x00A0;</span><span
10508 class="cmtt-8">&#x00A0;</span><span
10509 class="cmtt-8">&#x00A0;</span><span
10510 class="cmtt-8">&#x00A0;</span><span
10511 class="cmtt-8">&#x00A0;</span><span
10512 class="cmtt-8">&#x00A0;</span><span
10513 class="cmtt-8">&#x00A0;</span><span
10514 class="cmtt-8">&#x00A0;</span><span
10515 class="cmtt-8">&#x00A0;</span><span
10516 class="cmtt-8">&#x00A0;</span><span
10517 class="cmtt-8">&#x00A0;</span><span
10518 class="cmtt-8">&#x00A0;</span><span
10519 class="cmtt-8">&#x00A0;</span><span
10520 class="cmtt-8">&#x00A0;</span><span
10521 class="cmtt-8">&#x00A0;</span><span
10522 class="cmtt-8">&#x00A0;</span><span
10523 class="cmtt-8">&#x00A0;</span><span
10524 class="cmtt-8">&#x00A0;</span><span
10525 class="cmtt-8">&#x00A0;</span><span
10526 class="cmtt-8">&#x00A0;</span><span
10527 class="cmtt-8">&#x00A0;</span><span
10528 class="cmtt-8">&#x00A0;</span><span
10529 class="cmtt-8">&#x00A0;</span><span
10530 class="cmtt-8">&#x00A0;</span><span
10531 class="cmtt-8">&#x00A0;</span><span
10532 class="cmtt-8">&#x00A0;</span><span
10533 class="cmtt-8">&#x00A0;</span><span
10534 class="cmtt-8">&#x00A0;</span><span
10535 class="cmtt-8">&#x00A0;}</span>
10536 <br class="fancyvrb" /><a
10537 id="x1-110062r23"></a><span
10538 class="cmr-6">23</span><span
10539 class="cmtt-8">&#x00A0;</span><span
10540 class="cmtt-8">&#x00A0;</span>
10541 <br class="fancyvrb" /><a
10542 id="x1-110064r24"></a><span
10543 class="cmr-6">24</span><span
10544 class="cmtt-8">&#x00A0;</span><span
10545 class="cmtt-8">&#x00A0;</span><span
10546 class="cmtt-8">&#x00A0;</span><span
10547 class="cmtt-8">&#x00A0;</span><span
10548 class="cmtt-8">&#x00A0;</span><span
10549 class="cmtt-8">&#x00A0;</span><span
10550 class="cmtt-8">&#x00A0;</span><span
10551 class="cmtt-8">&#x00A0;</span><span
10552 class="cmtt-8">&#x00A0;</span><span
10553 class="cmtt-8">&#x00A0;</span><span
10554 class="cmtt-8">&#x00A0;</span><span
10555 class="cmtt-8">&#x00A0;</span><span
10556 class="cmtt-8">&#x00A0;</span><span
10557 class="cmtt-8">&#x00A0;</span><span
10558 class="cmtt-8">&#x00A0;</span><span
10559 class="cmtt-8">&#x00A0;</span><span
10560 class="cmtt-8">&#x00A0;</span><span
10561 class="cmtt-8">&#x00A0;</span><span
10562 class="cmtt-8">&#x00A0;</span><span
10563 class="cmtt-8">&#x00A0;</span><span
10564 class="cmtt-8">&#x00A0;</span><span
10565 class="cmtt-8">&#x00A0;</span><span
10566 class="cmtt-8">&#x00A0;</span><span
10567 class="cmtt-8">&#x00A0;</span><span
10568 class="cmtt-8">&#x00A0;</span><span
10569 class="cmtt-8">&#x00A0;</span><span
10570 class="cmtt-8">&#x00A0;}</span>
10571 <br class="fancyvrb" /><a
10572 id="x1-110066r25"></a><span
10573 class="cmr-6">25</span><span
10574 class="cmtt-8">&#x00A0;</span><span
10575 class="cmtt-8">&#x00A0;</span>
10576 <br class="fancyvrb" /><a
10577 id="x1-110068r26"></a><span
10578 class="cmr-6">26</span><span
10579 class="cmtt-8">&#x00A0;</span><span
10580 class="cmtt-8">&#x00A0;</span><span
10581 class="cmtt-8">&#x00A0;</span><span
10582 class="cmtt-8">&#x00A0;</span><span
10583 class="cmtt-8">&#x00A0;</span><span
10584 class="cmtt-8">&#x00A0;</span><span
10585 class="cmtt-8">&#x00A0;</span><span
10586 class="cmtt-8">&#x00A0;</span><span
10587 class="cmtt-8">&#x00A0;</span><span
10588 class="cmtt-8">&#x00A0;</span><span
10589 class="cmtt-8">&#x00A0;</span><span
10590 class="cmtt-8">&#x00A0;</span><span
10591 class="cmtt-8">&#x00A0;</span><span
10592 class="cmtt-8">&#x00A0;</span><span
10593 class="cmtt-8">&#x00A0;</span><span
10594 class="cmtt-8">&#x00A0;</span><span
10595 class="cmtt-8">&#x00A0;</span><span
10596 class="cmtt-8">&#x00A0;</span><span
10597 class="cmtt-8">&#x00A0;</span><span
10598 class="cmtt-8">&#x00A0;</span><span
10599 class="cmtt-8">&#x00A0;</span><span
10600 class="cmtt-8">&#x00A0;}</span>
10601 <br class="fancyvrb" /><a
10602 id="x1-110070r27"></a><span
10603 class="cmr-6">27</span><span
10604 class="cmtt-8">&#x00A0;</span><span
10605 class="cmtt-8">&#x00A0;</span>
10606 <br class="fancyvrb" /><a
10607 id="x1-110072r28"></a><span
10608 class="cmr-6">28</span><span
10609 class="cmtt-8">&#x00A0;</span><span
10610 class="cmtt-8">&#x00A0;</span><span
10611 class="cmtt-8">&#x00A0;</span><span
10612 class="cmtt-8">&#x00A0;</span><span
10613 class="cmtt-8">&#x00A0;</span><span
10614 class="cmtt-8">&#x00A0;</span><span
10615 class="cmtt-8">&#x00A0;</span><span
10616 class="cmtt-8">&#x00A0;</span><span
10617 class="cmtt-8">&#x00A0;</span><span
10618 class="cmtt-8">&#x00A0;</span><span
10619 class="cmtt-8">&#x00A0;</span><span
10620 class="cmtt-8">&#x00A0;</span><span
10621 class="cmtt-8">&#x00A0;</span><span
10622 class="cmtt-8">&#x00A0;</span><span
10623 class="cmtt-8">&#x00A0;</span><span
10624 class="cmtt-8">&#x00A0;</span><span
10625 class="cmtt-8">&#x00A0;}</span>
10626 <br class="fancyvrb" /><a
10627 id="x1-110074r29"></a><span
10628 class="cmr-6">29</span><span
10629 class="cmtt-8">&#x00A0;</span><span
10630 class="cmtt-8">&#x00A0;</span>
10631 <br class="fancyvrb" /><a
10632 id="x1-110076r30"></a><span
10633 class="cmr-6">30</span><span
10634 class="cmtt-8">&#x00A0;</span><span
10635 class="cmtt-8">&#x00A0;</span><span
10636 class="cmtt-8">&#x00A0;</span><span
10637 class="cmtt-8">&#x00A0;</span><span
10638 class="cmtt-8">&#x00A0;</span><span
10639 class="cmtt-8">&#x00A0;</span><span
10640 class="cmtt-8">&#x00A0;</span><span
10641 class="cmtt-8">&#x00A0;</span><span
10642 class="cmtt-8">&#x00A0;</span><span
10643 class="cmtt-8">&#x00A0;</span><span
10644 class="cmtt-8">&#x00A0;</span><span
10645 class="cmtt-8">&#x00A0;</span><span
10646 class="cmtt-8">&#x00A0;13)</span><span
10647 class="cmtt-8">&#x00A0;iterate</span><span
10648 class="cmtt-8">&#x00A0;[i]</span><span
10649 class="cmtt-8">&#x00A0;over</span><span
10650 class="cmtt-8">&#x00A0;the</span><span
10651 class="cmtt-8">&#x00A0;range</span><span
10652 class="cmtt-8">&#x00A0;0</span><span
10653 class="cmtt-8">&#x00A0;..</span><span
10654 class="cmtt-8">&#x00A0;([classwords_per_codeword]</span><span
10655 class="cmtt-8">&#x00A0;-</span><span
10656 class="cmtt-8">&#x00A0;1)</span><span
10657 class="cmtt-8">&#x00A0;while</span><span
10658 class="cmtt-8">&#x00A0;[partition_count]</span>
10659 <br class="fancyvrb" /><a
10660 id="x1-110078r31"></a><span
10661 class="cmr-6">31</span><span
10662 class="cmtt-8">&#x00A0;</span><span
10663 class="cmtt-8">&#x00A0;</span><span
10664 class="cmtt-8">&#x00A0;</span><span
10665 class="cmtt-8">&#x00A0;</span><span
10666 class="cmtt-8">&#x00A0;</span><span
10667 class="cmtt-8">&#x00A0;</span><span
10668 class="cmtt-8">&#x00A0;</span><span
10669 class="cmtt-8">&#x00A0;</span><span
10670 class="cmtt-8">&#x00A0;</span><span
10671 class="cmtt-8">&#x00A0;</span><span
10672 class="cmtt-8">&#x00A0;</span><span
10673 class="cmtt-8">&#x00A0;</span><span
10674 class="cmtt-8">&#x00A0;</span><span
10675 class="cmtt-8">&#x00A0;</span><span
10676 class="cmtt-8">&#x00A0;</span><span
10677 class="cmtt-8">&#x00A0;</span><span
10678 class="cmtt-8">&#x00A0;is</span><span
10679 class="cmtt-8">&#x00A0;also</span><span
10680 class="cmtt-8">&#x00A0;less</span><span
10681 class="cmtt-8">&#x00A0;than</span><span
10682 class="cmtt-8">&#x00A0;[partitions_to_read]</span><span
10683 class="cmtt-8">&#x00A0;{</span>
10684 <br class="fancyvrb" /><a
10685 id="x1-110080r32"></a><span
10686 class="cmr-6">32</span><span
10687 class="cmtt-8">&#x00A0;</span><span
10688 class="cmtt-8">&#x00A0;</span>
10689 <br class="fancyvrb" /><a
10690 id="x1-110082r33"></a><span
10691 class="cmr-6">33</span><span
10692 class="cmtt-8">&#x00A0;</span><span
10693 class="cmtt-8">&#x00A0;</span><span
10694 class="cmtt-8">&#x00A0;</span><span
10695 class="cmtt-8">&#x00A0;</span><span
10696 class="cmtt-8">&#x00A0;</span><span
10697 class="cmtt-8">&#x00A0;</span><span
10698 class="cmtt-8">&#x00A0;</span><span
10699 class="cmtt-8">&#x00A0;</span><span
10700 class="cmtt-8">&#x00A0;</span><span
10701 class="cmtt-8">&#x00A0;</span><span
10702 class="cmtt-8">&#x00A0;</span><span
10703 class="cmtt-8">&#x00A0;</span><span
10704 class="cmtt-8">&#x00A0;</span><span
10705 class="cmtt-8">&#x00A0;</span><span
10706 class="cmtt-8">&#x00A0;</span><span
10707 class="cmtt-8">&#x00A0;</span><span
10708 class="cmtt-8">&#x00A0;</span><span
10709 class="cmtt-8">&#x00A0;</span><span
10710 class="cmtt-8">&#x00A0;14)</span><span
10711 class="cmtt-8">&#x00A0;iterate</span><span
10712 class="cmtt-8">&#x00A0;[j]</span><span
10713 class="cmtt-8">&#x00A0;over</span><span
10714 class="cmtt-8">&#x00A0;the</span><span
10715 class="cmtt-8">&#x00A0;range</span><span
10716 class="cmtt-8">&#x00A0;0</span><span
10717 class="cmtt-8">&#x00A0;..</span><span
10718 class="cmtt-8">&#x00A0;[ch]-1</span><span
10719 class="cmtt-8">&#x00A0;{</span>
10720 <br class="fancyvrb" /><a
10721 id="x1-110084r34"></a><span
10722 class="cmr-6">34</span><span
10723 class="cmtt-8">&#x00A0;</span><span
10724 class="cmtt-8">&#x00A0;</span>
10725 <br class="fancyvrb" /><a
10726 id="x1-110086r35"></a><span
10727 class="cmr-6">35</span><span
10728 class="cmtt-8">&#x00A0;</span><span
10729 class="cmtt-8">&#x00A0;</span><span
10730 class="cmtt-8">&#x00A0;</span><span
10731 class="cmtt-8">&#x00A0;</span><span
10732 class="cmtt-8">&#x00A0;</span><span
10733 class="cmtt-8">&#x00A0;</span><span
10734 class="cmtt-8">&#x00A0;</span><span
10735 class="cmtt-8">&#x00A0;</span><span
10736 class="cmtt-8">&#x00A0;</span><span
10737 class="cmtt-8">&#x00A0;</span><span
10738 class="cmtt-8">&#x00A0;</span><span
10739 class="cmtt-8">&#x00A0;</span><span
10740 class="cmtt-8">&#x00A0;</span><span
10741 class="cmtt-8">&#x00A0;</span><span
10742 class="cmtt-8">&#x00A0;</span><span
10743 class="cmtt-8">&#x00A0;</span><span
10744 class="cmtt-8">&#x00A0;</span><span
10745 class="cmtt-8">&#x00A0;</span><span
10746 class="cmtt-8">&#x00A0;</span><span
10747 class="cmtt-8">&#x00A0;</span><span
10748 class="cmtt-8">&#x00A0;</span><span
10749 class="cmtt-8">&#x00A0;</span><span
10750 class="cmtt-8">&#x00A0;</span><span
10751 class="cmtt-8">&#x00A0;15)</span><span
10752 class="cmtt-8">&#x00A0;if</span><span
10753 class="cmtt-8">&#x00A0;vector</span><span
10754 class="cmtt-8">&#x00A0;[j]</span><span
10755 class="cmtt-8">&#x00A0;is</span><span
10756 class="cmtt-8">&#x00A0;not</span><span
10757 class="cmtt-8">&#x00A0;marked</span><span
10758 class="cmtt-8">&#x00A0;&#8217;do</span><span
10759 class="cmtt-8">&#x00A0;not</span><span
10760 class="cmtt-8">&#x00A0;decode&#8217;</span><span
10761 class="cmtt-8">&#x00A0;{</span>
10762 <br class="fancyvrb" /><a
10763 id="x1-110088r36"></a><span
10764 class="cmr-6">36</span><span
10765 class="cmtt-8">&#x00A0;</span><span
10766 class="cmtt-8">&#x00A0;</span>
10767 <br class="fancyvrb" /><a
10768 id="x1-110090r37"></a><span
10769 class="cmr-6">37</span><span
10770 class="cmtt-8">&#x00A0;</span><span
10771 class="cmtt-8">&#x00A0;</span><span
10772 class="cmtt-8">&#x00A0;</span><span
10773 class="cmtt-8">&#x00A0;</span><span
10774 class="cmtt-8">&#x00A0;</span><span
10775 class="cmtt-8">&#x00A0;</span><span
10776 class="cmtt-8">&#x00A0;</span><span
10777 class="cmtt-8">&#x00A0;</span><span
10778 class="cmtt-8">&#x00A0;</span><span
10779 class="cmtt-8">&#x00A0;</span><span
10780 class="cmtt-8">&#x00A0;</span><span
10781 class="cmtt-8">&#x00A0;</span><span
10782 class="cmtt-8">&#x00A0;</span><span
10783 class="cmtt-8">&#x00A0;</span><span
10784 class="cmtt-8">&#x00A0;</span><span
10785 class="cmtt-8">&#x00A0;</span><span
10786 class="cmtt-8">&#x00A0;</span><span
10787 class="cmtt-8">&#x00A0;</span><span
10788 class="cmtt-8">&#x00A0;</span><span
10789 class="cmtt-8">&#x00A0;</span><span
10790 class="cmtt-8">&#x00A0;</span><span
10791 class="cmtt-8">&#x00A0;</span><span
10792 class="cmtt-8">&#x00A0;</span><span
10793 class="cmtt-8">&#x00A0;</span><span
10794 class="cmtt-8">&#x00A0;</span><span
10795 class="cmtt-8">&#x00A0;</span><span
10796 class="cmtt-8">&#x00A0;</span><span
10797 class="cmtt-8">&#x00A0;</span><span
10798 class="cmtt-8">&#x00A0;16)</span><span
10799 class="cmtt-8">&#x00A0;[vqclass]</span><span
10800 class="cmtt-8">&#x00A0;=</span><span
10801 class="cmtt-8">&#x00A0;array</span><span
10802 class="cmtt-8">&#x00A0;[classifications]</span><span
10803 class="cmtt-8">&#x00A0;element</span><span
10804 class="cmtt-8">&#x00A0;[j],[partition_count]</span>
10805 <br class="fancyvrb" /><a
10806 id="x1-110092r38"></a><span
10807 class="cmr-6">38</span><span
10808 class="cmtt-8">&#x00A0;</span><span
10809 class="cmtt-8">&#x00A0;</span><span
10810 class="cmtt-8">&#x00A0;</span><span
10811 class="cmtt-8">&#x00A0;</span><span
10812 class="cmtt-8">&#x00A0;</span><span
10813 class="cmtt-8">&#x00A0;</span><span
10814 class="cmtt-8">&#x00A0;</span><span
10815 class="cmtt-8">&#x00A0;</span><span
10816 class="cmtt-8">&#x00A0;</span><span
10817 class="cmtt-8">&#x00A0;</span><span
10818 class="cmtt-8">&#x00A0;</span><span
10819 class="cmtt-8">&#x00A0;</span><span
10820 class="cmtt-8">&#x00A0;</span><span
10821 class="cmtt-8">&#x00A0;</span><span
10822 class="cmtt-8">&#x00A0;</span><span
10823 class="cmtt-8">&#x00A0;</span><span
10824 class="cmtt-8">&#x00A0;</span><span
10825 class="cmtt-8">&#x00A0;</span><span
10826 class="cmtt-8">&#x00A0;</span><span
10827 class="cmtt-8">&#x00A0;</span><span
10828 class="cmtt-8">&#x00A0;</span><span
10829 class="cmtt-8">&#x00A0;</span><span
10830 class="cmtt-8">&#x00A0;</span><span
10831 class="cmtt-8">&#x00A0;</span><span
10832 class="cmtt-8">&#x00A0;</span><span
10833 class="cmtt-8">&#x00A0;</span><span
10834 class="cmtt-8">&#x00A0;</span><span
10835 class="cmtt-8">&#x00A0;</span><span
10836 class="cmtt-8">&#x00A0;17)</span><span
10837 class="cmtt-8">&#x00A0;[vqbook]</span><span
10838 class="cmtt-8">&#x00A0;=</span><span
10839 class="cmtt-8">&#x00A0;array</span><span
10840 class="cmtt-8">&#x00A0;[residue_books]</span><span
10841 class="cmtt-8">&#x00A0;element</span><span
10842 class="cmtt-8">&#x00A0;[vqclass],[pass]</span>
10843 <br class="fancyvrb" /><a
10844 id="x1-110094r39"></a><span
10845 class="cmr-6">39</span><span
10846 class="cmtt-8">&#x00A0;</span><span
10847 class="cmtt-8">&#x00A0;</span><span
10848 class="cmtt-8">&#x00A0;</span><span
10849 class="cmtt-8">&#x00A0;</span><span
10850 class="cmtt-8">&#x00A0;</span><span
10851 class="cmtt-8">&#x00A0;</span><span
10852 class="cmtt-8">&#x00A0;</span><span
10853 class="cmtt-8">&#x00A0;</span><span
10854 class="cmtt-8">&#x00A0;</span><span
10855 class="cmtt-8">&#x00A0;</span><span
10856 class="cmtt-8">&#x00A0;</span><span
10857 class="cmtt-8">&#x00A0;</span><span
10858 class="cmtt-8">&#x00A0;</span><span
10859 class="cmtt-8">&#x00A0;</span><span
10860 class="cmtt-8">&#x00A0;</span><span
10861 class="cmtt-8">&#x00A0;</span><span
10862 class="cmtt-8">&#x00A0;</span><span
10863 class="cmtt-8">&#x00A0;</span><span
10864 class="cmtt-8">&#x00A0;</span><span
10865 class="cmtt-8">&#x00A0;</span><span
10866 class="cmtt-8">&#x00A0;</span><span
10867 class="cmtt-8">&#x00A0;</span><span
10868 class="cmtt-8">&#x00A0;</span><span
10869 class="cmtt-8">&#x00A0;</span><span
10870 class="cmtt-8">&#x00A0;</span><span
10871 class="cmtt-8">&#x00A0;</span><span
10872 class="cmtt-8">&#x00A0;</span><span
10873 class="cmtt-8">&#x00A0;</span><span
10874 class="cmtt-8">&#x00A0;18)</span><span
10875 class="cmtt-8">&#x00A0;if</span><span
10876 class="cmtt-8">&#x00A0;([vqbook]</span><span
10877 class="cmtt-8">&#x00A0;is</span><span
10878 class="cmtt-8">&#x00A0;not</span><span
10879 class="cmtt-8">&#x00A0;&#8217;unused&#8217;)</span><span
10880 class="cmtt-8">&#x00A0;{</span>
10881 <br class="fancyvrb" /><a
10882 id="x1-110096r40"></a><span
10883 class="cmr-6">40</span><span
10884 class="cmtt-8">&#x00A0;</span><span
10885 class="cmtt-8">&#x00A0;</span>
10886 <br class="fancyvrb" /><a
10887 id="x1-110098r41"></a><span
10888 class="cmr-6">41</span><span
10889 class="cmtt-8">&#x00A0;</span><span
10890 class="cmtt-8">&#x00A0;</span><span
10891 class="cmtt-8">&#x00A0;</span><span
10892 class="cmtt-8">&#x00A0;</span><span
10893 class="cmtt-8">&#x00A0;</span><span
10894 class="cmtt-8">&#x00A0;</span><span
10895 class="cmtt-8">&#x00A0;</span><span
10896 class="cmtt-8">&#x00A0;</span><span
10897 class="cmtt-8">&#x00A0;</span><span
10898 class="cmtt-8">&#x00A0;</span><span
10899 class="cmtt-8">&#x00A0;</span><span
10900 class="cmtt-8">&#x00A0;</span><span
10901 class="cmtt-8">&#x00A0;</span><span
10902 class="cmtt-8">&#x00A0;</span><span
10903 class="cmtt-8">&#x00A0;</span><span
10904 class="cmtt-8">&#x00A0;</span><span
10905 class="cmtt-8">&#x00A0;</span><span
10906 class="cmtt-8">&#x00A0;</span><span
10907 class="cmtt-8">&#x00A0;</span><span
10908 class="cmtt-8">&#x00A0;</span><span
10909 class="cmtt-8">&#x00A0;</span><span
10910 class="cmtt-8">&#x00A0;</span><span
10911 class="cmtt-8">&#x00A0;</span><span
10912 class="cmtt-8">&#x00A0;</span><span
10913 class="cmtt-8">&#x00A0;</span><span
10914 class="cmtt-8">&#x00A0;</span><span
10915 class="cmtt-8">&#x00A0;</span><span
10916 class="cmtt-8">&#x00A0;</span><span
10917 class="cmtt-8">&#x00A0;</span><span
10918 class="cmtt-8">&#x00A0;</span><span
10919 class="cmtt-8">&#x00A0;</span><span
10920 class="cmtt-8">&#x00A0;</span><span
10921 class="cmtt-8">&#x00A0;</span><span
10922 class="cmtt-8">&#x00A0;19)</span><span
10923 class="cmtt-8">&#x00A0;decode</span><span
10924 class="cmtt-8">&#x00A0;partition</span><span
10925 class="cmtt-8">&#x00A0;into</span><span
10926 class="cmtt-8">&#x00A0;output</span><span
10927 class="cmtt-8">&#x00A0;vector</span><span
10928 class="cmtt-8">&#x00A0;number</span><span
10929 class="cmtt-8">&#x00A0;[j],</span><span
10930 class="cmtt-8">&#x00A0;starting</span><span
10931 class="cmtt-8">&#x00A0;at</span><span
10932 class="cmtt-8">&#x00A0;scalar</span>
10933 <br class="fancyvrb" /><a
10934 id="x1-110100r42"></a><span
10935 class="cmr-6">42</span><span
10936 class="cmtt-8">&#x00A0;</span><span
10937 class="cmtt-8">&#x00A0;</span><span
10938 class="cmtt-8">&#x00A0;</span><span
10939 class="cmtt-8">&#x00A0;</span><span
10940 class="cmtt-8">&#x00A0;</span><span
10941 class="cmtt-8">&#x00A0;</span><span
10942 class="cmtt-8">&#x00A0;</span><span
10943 class="cmtt-8">&#x00A0;</span><span
10944 class="cmtt-8">&#x00A0;</span><span
10945 class="cmtt-8">&#x00A0;</span><span
10946 class="cmtt-8">&#x00A0;</span><span
10947 class="cmtt-8">&#x00A0;</span><span
10948 class="cmtt-8">&#x00A0;</span><span
10949 class="cmtt-8">&#x00A0;</span><span
10950 class="cmtt-8">&#x00A0;</span><span
10951 class="cmtt-8">&#x00A0;</span><span
10952 class="cmtt-8">&#x00A0;</span><span
10953 class="cmtt-8">&#x00A0;</span><span
10954 class="cmtt-8">&#x00A0;</span><span
10955 class="cmtt-8">&#x00A0;</span><span
10956 class="cmtt-8">&#x00A0;</span><span
10957 class="cmtt-8">&#x00A0;</span><span
10958 class="cmtt-8">&#x00A0;</span><span
10959 class="cmtt-8">&#x00A0;</span><span
10960 class="cmtt-8">&#x00A0;</span><span
10961 class="cmtt-8">&#x00A0;</span><span
10962 class="cmtt-8">&#x00A0;</span><span
10963 class="cmtt-8">&#x00A0;</span><span
10964 class="cmtt-8">&#x00A0;</span><span
10965 class="cmtt-8">&#x00A0;</span><span
10966 class="cmtt-8">&#x00A0;</span><span
10967 class="cmtt-8">&#x00A0;</span><span
10968 class="cmtt-8">&#x00A0;</span><span
10969 class="cmtt-8">&#x00A0;</span><span
10970 class="cmtt-8">&#x00A0;</span><span
10971 class="cmtt-8">&#x00A0;</span><span
10972 class="cmtt-8">&#x00A0;</span><span
10973 class="cmtt-8">&#x00A0;offset</span><span
10974 class="cmtt-8">&#x00A0;[limit_residue_begin]+[partition_count]*[residue_partition_size]</span><span
10975 class="cmtt-8">&#x00A0;using</span>
10976 <br class="fancyvrb" /><a
10977 id="x1-110102r43"></a><span
10978 class="cmr-6">43</span><span
10979 class="cmtt-8">&#x00A0;</span><span
10980 class="cmtt-8">&#x00A0;</span><span
10981 class="cmtt-8">&#x00A0;</span><span
10982 class="cmtt-8">&#x00A0;</span><span
10983 class="cmtt-8">&#x00A0;</span><span
10984 class="cmtt-8">&#x00A0;</span><span
10985 class="cmtt-8">&#x00A0;</span><span
10986 class="cmtt-8">&#x00A0;</span><span
10987 class="cmtt-8">&#x00A0;</span><span
10988 class="cmtt-8">&#x00A0;</span><span
10989 class="cmtt-8">&#x00A0;</span><span
10990 class="cmtt-8">&#x00A0;</span><span
10991 class="cmtt-8">&#x00A0;</span><span
10992 class="cmtt-8">&#x00A0;</span><span
10993 class="cmtt-8">&#x00A0;</span><span
10994 class="cmtt-8">&#x00A0;</span><span
10995 class="cmtt-8">&#x00A0;</span><span
10996 class="cmtt-8">&#x00A0;</span><span
10997 class="cmtt-8">&#x00A0;</span><span
10998 class="cmtt-8">&#x00A0;</span><span
10999 class="cmtt-8">&#x00A0;</span><span
11000 class="cmtt-8">&#x00A0;</span><span
11001 class="cmtt-8">&#x00A0;</span><span
11002 class="cmtt-8">&#x00A0;</span><span
11003 class="cmtt-8">&#x00A0;</span><span
11004 class="cmtt-8">&#x00A0;</span><span
11005 class="cmtt-8">&#x00A0;</span><span
11006 class="cmtt-8">&#x00A0;</span><span
11007 class="cmtt-8">&#x00A0;</span><span
11008 class="cmtt-8">&#x00A0;</span><span
11009 class="cmtt-8">&#x00A0;</span><span
11010 class="cmtt-8">&#x00A0;</span><span
11011 class="cmtt-8">&#x00A0;</span><span
11012 class="cmtt-8">&#x00A0;</span><span
11013 class="cmtt-8">&#x00A0;</span><span
11014 class="cmtt-8">&#x00A0;</span><span
11015 class="cmtt-8">&#x00A0;</span><span
11016 class="cmtt-8">&#x00A0;codebook</span><span
11017 class="cmtt-8">&#x00A0;number</span><span
11018 class="cmtt-8">&#x00A0;[vqbook]</span><span
11019 class="cmtt-8">&#x00A0;in</span><span
11020 class="cmtt-8">&#x00A0;VQ</span><span
11021 class="cmtt-8">&#x00A0;context</span>
11022 <br class="fancyvrb" /><a
11023 id="x1-110104r44"></a><span
11024 class="cmr-6">44</span><span
11025 class="cmtt-8">&#x00A0;</span><span
11026 class="cmtt-8">&#x00A0;</span><span
11027 class="cmtt-8">&#x00A0;</span><span
11028 class="cmtt-8">&#x00A0;</span><span
11029 class="cmtt-8">&#x00A0;</span><span
11030 class="cmtt-8">&#x00A0;</span><span
11031 class="cmtt-8">&#x00A0;</span><span
11032 class="cmtt-8">&#x00A0;</span><span
11033 class="cmtt-8">&#x00A0;</span><span
11034 class="cmtt-8">&#x00A0;</span><span
11035 class="cmtt-8">&#x00A0;</span><span
11036 class="cmtt-8">&#x00A0;</span><span
11037 class="cmtt-8">&#x00A0;</span><span
11038 class="cmtt-8">&#x00A0;</span><span
11039 class="cmtt-8">&#x00A0;</span><span
11040 class="cmtt-8">&#x00A0;</span><span
11041 class="cmtt-8">&#x00A0;</span><span
11042 class="cmtt-8">&#x00A0;</span><span
11043 class="cmtt-8">&#x00A0;</span><span
11044 class="cmtt-8">&#x00A0;</span><span
11045 class="cmtt-8">&#x00A0;</span><span
11046 class="cmtt-8">&#x00A0;</span><span
11047 class="cmtt-8">&#x00A0;</span><span
11048 class="cmtt-8">&#x00A0;</span><span
11049 class="cmtt-8">&#x00A0;</span><span
11050 class="cmtt-8">&#x00A0;</span><span
11051 class="cmtt-8">&#x00A0;</span><span
11052 class="cmtt-8">&#x00A0;}</span>
11053 <br class="fancyvrb" /><a
11054 id="x1-110106r45"></a><span
11055 class="cmr-6">45</span><span
11056 class="cmtt-8">&#x00A0;</span><span
11057 class="cmtt-8">&#x00A0;</span><span
11058 class="cmtt-8">&#x00A0;</span><span
11059 class="cmtt-8">&#x00A0;</span><span
11060 class="cmtt-8">&#x00A0;</span><span
11061 class="cmtt-8">&#x00A0;</span><span
11062 class="cmtt-8">&#x00A0;</span><span
11063 class="cmtt-8">&#x00A0;</span><span
11064 class="cmtt-8">&#x00A0;</span><span
11065 class="cmtt-8">&#x00A0;</span><span
11066 class="cmtt-8">&#x00A0;</span><span
11067 class="cmtt-8">&#x00A0;</span><span
11068 class="cmtt-8">&#x00A0;</span><span
11069 class="cmtt-8">&#x00A0;</span><span
11070 class="cmtt-8">&#x00A0;</span><span
11071 class="cmtt-8">&#x00A0;</span><span
11072 class="cmtt-8">&#x00A0;</span><span
11073 class="cmtt-8">&#x00A0;</span><span
11074 class="cmtt-8">&#x00A0;</span><span
11075 class="cmtt-8">&#x00A0;</span><span
11076 class="cmtt-8">&#x00A0;</span><span
11077 class="cmtt-8">&#x00A0;</span><span
11078 class="cmtt-8">&#x00A0;}</span>
11079 <br class="fancyvrb" /><a
11080 id="x1-110108r46"></a><span
11081 class="cmr-6">46</span><span
11082 class="cmtt-8">&#x00A0;</span><span
11083 class="cmtt-8">&#x00A0;</span>
11084 <br class="fancyvrb" /><a
11085 id="x1-110110r47"></a><span
11086 class="cmr-6">47</span><span
11087 class="cmtt-8">&#x00A0;</span><span
11088 class="cmtt-8">&#x00A0;</span><span
11089 class="cmtt-8">&#x00A0;</span><span
11090 class="cmtt-8">&#x00A0;</span><span
11091 class="cmtt-8">&#x00A0;</span><span
11092 class="cmtt-8">&#x00A0;</span><span
11093 class="cmtt-8">&#x00A0;</span><span
11094 class="cmtt-8">&#x00A0;</span><span
11095 class="cmtt-8">&#x00A0;</span><span
11096 class="cmtt-8">&#x00A0;</span><span
11097 class="cmtt-8">&#x00A0;</span><span
11098 class="cmtt-8">&#x00A0;</span><span
11099 class="cmtt-8">&#x00A0;</span><span
11100 class="cmtt-8">&#x00A0;</span><span
11101 class="cmtt-8">&#x00A0;</span><span
11102 class="cmtt-8">&#x00A0;</span><span
11103 class="cmtt-8">&#x00A0;</span><span
11104 class="cmtt-8">&#x00A0;</span><span
11105 class="cmtt-8">&#x00A0;20)</span><span
11106 class="cmtt-8">&#x00A0;increment</span><span
11107 class="cmtt-8">&#x00A0;[partition_count]</span><span
11108 class="cmtt-8">&#x00A0;by</span><span
11109 class="cmtt-8">&#x00A0;one</span>
11110 <br class="fancyvrb" /><a
11111 id="x1-110112r48"></a><span
11112 class="cmr-6">48</span><span
11113 class="cmtt-8">&#x00A0;</span><span
11114 class="cmtt-8">&#x00A0;</span>
11115 <br class="fancyvrb" /><a
11116 id="x1-110114r49"></a><span
11117 class="cmr-6">49</span><span
11118 class="cmtt-8">&#x00A0;</span><span
11119 class="cmtt-8">&#x00A0;</span><span
11120 class="cmtt-8">&#x00A0;</span><span
11121 class="cmtt-8">&#x00A0;</span><span
11122 class="cmtt-8">&#x00A0;</span><span
11123 class="cmtt-8">&#x00A0;</span><span
11124 class="cmtt-8">&#x00A0;</span><span
11125 class="cmtt-8">&#x00A0;</span><span
11126 class="cmtt-8">&#x00A0;</span><span
11127 class="cmtt-8">&#x00A0;</span><span
11128 class="cmtt-8">&#x00A0;</span><span
11129 class="cmtt-8">&#x00A0;</span><span
11130 class="cmtt-8">&#x00A0;</span><span
11131 class="cmtt-8">&#x00A0;</span><span
11132 class="cmtt-8">&#x00A0;</span><span
11133 class="cmtt-8">&#x00A0;</span><span
11134 class="cmtt-8">&#x00A0;}</span>
11138 <br class="fancyvrb" /><a
11139 id="x1-110116r50"></a><span
11140 class="cmr-6">50</span><span
11141 class="cmtt-8">&#x00A0;</span><span
11142 class="cmtt-8">&#x00A0;</span><span
11143 class="cmtt-8">&#x00A0;</span><span
11144 class="cmtt-8">&#x00A0;</span><span
11145 class="cmtt-8">&#x00A0;</span><span
11146 class="cmtt-8">&#x00A0;</span><span
11147 class="cmtt-8">&#x00A0;</span><span
11148 class="cmtt-8">&#x00A0;</span><span
11149 class="cmtt-8">&#x00A0;</span><span
11150 class="cmtt-8">&#x00A0;</span><span
11151 class="cmtt-8">&#x00A0;</span><span
11152 class="cmtt-8">&#x00A0;}</span>
11153 <br class="fancyvrb" /><a
11154 id="x1-110118r51"></a><span
11155 class="cmr-6">51</span><span
11156 class="cmtt-8">&#x00A0;</span><span
11157 class="cmtt-8">&#x00A0;</span><span
11158 class="cmtt-8">&#x00A0;</span><span
11159 class="cmtt-8">&#x00A0;</span><span
11160 class="cmtt-8">&#x00A0;</span><span
11161 class="cmtt-8">&#x00A0;</span><span
11162 class="cmtt-8">&#x00A0;}</span>
11163 <br class="fancyvrb" /><a
11164 id="x1-110120r52"></a><span
11165 class="cmr-6">52</span><span
11166 class="cmtt-8">&#x00A0;</span><span
11167 class="cmtt-8">&#x00A0;</span>
11168 <br class="fancyvrb" /><a
11169 id="x1-110122r53"></a><span
11170 class="cmr-6">53</span><span
11171 class="cmtt-8">&#x00A0;</span><span
11172 class="cmtt-8">&#x00A0;</span><span
11173 class="cmtt-8">&#x00A0;21)</span><span
11174 class="cmtt-8">&#x00A0;done</span>
11175 <br class="fancyvrb" /><a
11176 id="x1-110124r54"></a><span
11177 class="cmr-6">54</span><span
11178 class="cmtt-8">&#x00A0;</span><span
11179 class="cmtt-8">&#x00A0;</span>
11180 </div>
11181 <!--l. 341--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
11182 Decode returns the result of vector decode up to that point.
11183 <!--l. 347--><p class="noindent" >
11184 <h5 class="subsubsectionHead"><span class="titlemark">8.6.3 </span> <a
11185 id="x1-1110008.6.3"></a>format 0 specifics</h5>
11186 <!--l. 349--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 0&#8217;
11187 section. The following pseudocode presents the same algorithm. Assume:
11188 <ul class="itemize1">
11189 <li class="itemize"><span
11190 class="cmtt-12">[n] </span>is the value in <span
11191 class="cmtt-12">[residue_partition_size]</span>
11192 </li>
11193 <li class="itemize"><span
11194 class="cmtt-12">[v] </span>is the residue vector
11195 </li>
11196 <li class="itemize"><span
11197 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
11198 <!--l. 360--><p class="noindent" >
11199 <div class="fancyvrb" id="fancyvrb41">
11201 id="x1-111002r1"></a><span
11202 class="cmr-6">1</span><span
11203 class="cmtt-8">&#x00A0;</span><span
11204 class="cmtt-8">&#x00A0;</span><span
11205 class="cmtt-8">&#x00A0;1)</span><span
11206 class="cmtt-8">&#x00A0;[step]</span><span
11207 class="cmtt-8">&#x00A0;=</span><span
11208 class="cmtt-8">&#x00A0;[n]</span><span
11209 class="cmtt-8">&#x00A0;/</span><span
11210 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
11211 <br class="fancyvrb" /><a
11212 id="x1-111004r2"></a><span
11213 class="cmr-6">2</span><span
11214 class="cmtt-8">&#x00A0;</span><span
11215 class="cmtt-8">&#x00A0;</span><span
11216 class="cmtt-8">&#x00A0;2)</span><span
11217 class="cmtt-8">&#x00A0;iterate</span><span
11218 class="cmtt-8">&#x00A0;[i]</span><span
11219 class="cmtt-8">&#x00A0;over</span><span
11220 class="cmtt-8">&#x00A0;the</span><span
11221 class="cmtt-8">&#x00A0;range</span><span
11222 class="cmtt-8">&#x00A0;0</span><span
11223 class="cmtt-8">&#x00A0;...</span><span
11224 class="cmtt-8">&#x00A0;[step]-1</span><span
11225 class="cmtt-8">&#x00A0;{</span>
11226 <br class="fancyvrb" /><a
11227 id="x1-111006r3"></a><span
11228 class="cmr-6">3</span><span
11229 class="cmtt-8">&#x00A0;</span><span
11230 class="cmtt-8">&#x00A0;</span>
11231 <br class="fancyvrb" /><a
11232 id="x1-111008r4"></a><span
11233 class="cmr-6">4</span><span
11234 class="cmtt-8">&#x00A0;</span><span
11235 class="cmtt-8">&#x00A0;</span><span
11236 class="cmtt-8">&#x00A0;</span><span
11237 class="cmtt-8">&#x00A0;</span><span
11238 class="cmtt-8">&#x00A0;</span><span
11239 class="cmtt-8">&#x00A0;</span><span
11240 class="cmtt-8">&#x00A0;</span><span
11241 class="cmtt-8">&#x00A0;3)</span><span
11242 class="cmtt-8">&#x00A0;vector</span><span
11243 class="cmtt-8">&#x00A0;[entry_temp]</span><span
11244 class="cmtt-8">&#x00A0;=</span><span
11245 class="cmtt-8">&#x00A0;read</span><span
11246 class="cmtt-8">&#x00A0;vector</span><span
11247 class="cmtt-8">&#x00A0;from</span><span
11248 class="cmtt-8">&#x00A0;packet</span><span
11249 class="cmtt-8">&#x00A0;using</span><span
11250 class="cmtt-8">&#x00A0;current</span><span
11251 class="cmtt-8">&#x00A0;codebook</span><span
11252 class="cmtt-8">&#x00A0;in</span><span
11253 class="cmtt-8">&#x00A0;VQ</span><span
11254 class="cmtt-8">&#x00A0;context</span>
11255 <br class="fancyvrb" /><a
11256 id="x1-111010r5"></a><span
11257 class="cmr-6">5</span><span
11258 class="cmtt-8">&#x00A0;</span><span
11259 class="cmtt-8">&#x00A0;</span><span
11260 class="cmtt-8">&#x00A0;</span><span
11261 class="cmtt-8">&#x00A0;</span><span
11262 class="cmtt-8">&#x00A0;</span><span
11263 class="cmtt-8">&#x00A0;</span><span
11264 class="cmtt-8">&#x00A0;</span><span
11265 class="cmtt-8">&#x00A0;4)</span><span
11266 class="cmtt-8">&#x00A0;iterate</span><span
11267 class="cmtt-8">&#x00A0;[j]</span><span
11268 class="cmtt-8">&#x00A0;over</span><span
11269 class="cmtt-8">&#x00A0;the</span><span
11270 class="cmtt-8">&#x00A0;range</span><span
11271 class="cmtt-8">&#x00A0;0</span><span
11272 class="cmtt-8">&#x00A0;...</span><span
11273 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
11274 class="cmtt-8">&#x00A0;{</span>
11275 <br class="fancyvrb" /><a
11276 id="x1-111012r6"></a><span
11277 class="cmr-6">6</span><span
11278 class="cmtt-8">&#x00A0;</span><span
11279 class="cmtt-8">&#x00A0;</span>
11280 <br class="fancyvrb" /><a
11281 id="x1-111014r7"></a><span
11282 class="cmr-6">7</span><span
11283 class="cmtt-8">&#x00A0;</span><span
11284 class="cmtt-8">&#x00A0;</span><span
11285 class="cmtt-8">&#x00A0;</span><span
11286 class="cmtt-8">&#x00A0;</span><span
11287 class="cmtt-8">&#x00A0;</span><span
11288 class="cmtt-8">&#x00A0;</span><span
11289 class="cmtt-8">&#x00A0;</span><span
11290 class="cmtt-8">&#x00A0;</span><span
11291 class="cmtt-8">&#x00A0;</span><span
11292 class="cmtt-8">&#x00A0;</span><span
11293 class="cmtt-8">&#x00A0;</span><span
11294 class="cmtt-8">&#x00A0;</span><span
11295 class="cmtt-8">&#x00A0;5)</span><span
11296 class="cmtt-8">&#x00A0;vector</span><span
11297 class="cmtt-8">&#x00A0;[v]</span><span
11298 class="cmtt-8">&#x00A0;element</span><span
11299 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
11300 class="cmtt-8">&#x00A0;=</span>
11301 <br class="fancyvrb" /><a
11302 id="x1-111016r8"></a><span
11303 class="cmr-6">8</span><span
11304 class="cmtt-8">&#x00A0;</span><span
11305 class="cmtt-8">&#x00A0; </span><span
11306 class="cmtt-8">&#x00A0;</span><span
11307 class="cmtt-8">&#x00A0;</span><span
11308 class="cmtt-8">&#x00A0;</span><span
11309 class="cmtt-8">&#x00A0;</span><span
11310 class="cmtt-8">&#x00A0;</span><span
11311 class="cmtt-8">&#x00A0;</span><span
11312 class="cmtt-8">&#x00A0;</span><span
11313 class="cmtt-8">&#x00A0;vector</span><span
11314 class="cmtt-8">&#x00A0;[v]</span><span
11315 class="cmtt-8">&#x00A0;element</span><span
11316 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
11317 class="cmtt-8">&#x00A0;+</span>
11318 <br class="fancyvrb" /><a
11319 id="x1-111018r9"></a><span
11320 class="cmr-6">9</span><span
11321 class="cmtt-8">&#x00A0;</span><span
11322 class="cmtt-8">&#x00A0;</span><span
11323 class="cmtt-8">&#x00A0;</span><span
11324 class="cmtt-8">&#x00A0;</span><span
11325 class="cmtt-8">&#x00A0;</span><span
11326 class="cmtt-8">&#x00A0;</span><span
11327 class="cmtt-8">&#x00A0;</span><span
11328 class="cmtt-8">&#x00A0;</span><span
11329 class="cmtt-8">&#x00A0;</span><span
11330 class="cmtt-8">&#x00A0;</span><span
11331 class="cmtt-8">&#x00A0;</span><span
11332 class="cmtt-8">&#x00A0;</span><span
11333 class="cmtt-8">&#x00A0;</span><span
11334 class="cmtt-8">&#x00A0;</span><span
11335 class="cmtt-8">&#x00A0;</span><span
11336 class="cmtt-8">&#x00A0;</span><span
11337 class="cmtt-8">&#x00A0;</span><span
11338 class="cmtt-8">&#x00A0;vector</span><span
11339 class="cmtt-8">&#x00A0;[entry_temp]</span><span
11340 class="cmtt-8">&#x00A0;element</span><span
11341 class="cmtt-8">&#x00A0;[j]</span>
11342 <br class="fancyvrb" /><a
11343 id="x1-111020r10"></a><span
11344 class="cmr-6">10</span><span
11345 class="cmtt-8">&#x00A0;</span><span
11346 class="cmtt-8">&#x00A0;</span>
11347 <br class="fancyvrb" /><a
11348 id="x1-111022r11"></a><span
11349 class="cmr-6">11</span><span
11350 class="cmtt-8">&#x00A0;</span><span
11351 class="cmtt-8">&#x00A0;</span><span
11352 class="cmtt-8">&#x00A0;</span><span
11353 class="cmtt-8">&#x00A0;</span><span
11354 class="cmtt-8">&#x00A0;</span><span
11355 class="cmtt-8">&#x00A0;</span><span
11356 class="cmtt-8">&#x00A0;</span><span
11357 class="cmtt-8">&#x00A0;</span><span
11358 class="cmtt-8">&#x00A0;</span><span
11359 class="cmtt-8">&#x00A0;</span><span
11360 class="cmtt-8">&#x00A0;}</span>
11361 <br class="fancyvrb" /><a
11362 id="x1-111024r12"></a><span
11363 class="cmr-6">12</span><span
11364 class="cmtt-8">&#x00A0;</span><span
11365 class="cmtt-8">&#x00A0;</span>
11366 <br class="fancyvrb" /><a
11367 id="x1-111026r13"></a><span
11368 class="cmr-6">13</span><span
11369 class="cmtt-8">&#x00A0;</span><span
11370 class="cmtt-8">&#x00A0;</span><span
11371 class="cmtt-8">&#x00A0;</span><span
11372 class="cmtt-8">&#x00A0;</span><span
11373 class="cmtt-8">&#x00A0;</span><span
11374 class="cmtt-8">&#x00A0;}</span>
11375 <br class="fancyvrb" /><a
11376 id="x1-111028r14"></a><span
11377 class="cmr-6">14</span><span
11378 class="cmtt-8">&#x00A0;</span><span
11379 class="cmtt-8">&#x00A0;</span>
11380 <br class="fancyvrb" /><a
11381 id="x1-111030r15"></a><span
11382 class="cmr-6">15</span><span
11383 class="cmtt-8">&#x00A0;</span><span
11384 class="cmtt-8">&#x00A0;</span><span
11385 class="cmtt-8">&#x00A0;</span><span
11386 class="cmtt-8">&#x00A0;6)</span><span
11387 class="cmtt-8">&#x00A0;done</span>
11388 <br class="fancyvrb" /><a
11389 id="x1-111032r16"></a><span
11390 class="cmr-6">16</span><span
11391 class="cmtt-8">&#x00A0;</span><span
11392 class="cmtt-8">&#x00A0;</span>
11393 </div>
11397 <!--l. 381--><p class="noindent" >
11398 <h5 class="subsubsectionHead"><span class="titlemark">8.6.4 </span> <a
11399 id="x1-1120008.6.4"></a>format 1 specifics</h5>
11400 <!--l. 383--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 1&#8217;
11401 section. The following pseudocode presents the same algorithm. Assume:
11402 <ul class="itemize1">
11403 <li class="itemize"><span
11404 class="cmtt-12">[n] </span>is the value in <span
11405 class="cmtt-12">[residue_partition_size]</span>
11406 </li>
11407 <li class="itemize"><span
11408 class="cmtt-12">[v] </span>is the residue vector
11409 </li>
11410 <li class="itemize"><span
11411 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
11412 <!--l. 395--><p class="noindent" >
11413 <div class="fancyvrb" id="fancyvrb42">
11415 id="x1-112002r1"></a><span
11416 class="cmr-6">1</span><span
11417 class="cmtt-8">&#x00A0;</span><span
11418 class="cmtt-8">&#x00A0;</span><span
11419 class="cmtt-8">&#x00A0;1)</span><span
11420 class="cmtt-8">&#x00A0;[i]</span><span
11421 class="cmtt-8">&#x00A0;=</span><span
11422 class="cmtt-8">&#x00A0;0</span>
11423 <br class="fancyvrb" /><a
11424 id="x1-112004r2"></a><span
11425 class="cmr-6">2</span><span
11426 class="cmtt-8">&#x00A0;</span><span
11427 class="cmtt-8">&#x00A0;</span><span
11428 class="cmtt-8">&#x00A0;2)</span><span
11429 class="cmtt-8">&#x00A0;vector</span><span
11430 class="cmtt-8">&#x00A0;[entry_temp]</span><span
11431 class="cmtt-8">&#x00A0;=</span><span
11432 class="cmtt-8">&#x00A0;read</span><span
11433 class="cmtt-8">&#x00A0;vector</span><span
11434 class="cmtt-8">&#x00A0;from</span><span
11435 class="cmtt-8">&#x00A0;packet</span><span
11436 class="cmtt-8">&#x00A0;using</span><span
11437 class="cmtt-8">&#x00A0;current</span><span
11438 class="cmtt-8">&#x00A0;codebook</span><span
11439 class="cmtt-8">&#x00A0;in</span><span
11440 class="cmtt-8">&#x00A0;VQ</span><span
11441 class="cmtt-8">&#x00A0;context</span>
11442 <br class="fancyvrb" /><a
11443 id="x1-112006r3"></a><span
11444 class="cmr-6">3</span><span
11445 class="cmtt-8">&#x00A0;</span><span
11446 class="cmtt-8">&#x00A0;</span><span
11447 class="cmtt-8">&#x00A0;3)</span><span
11448 class="cmtt-8">&#x00A0;iterate</span><span
11449 class="cmtt-8">&#x00A0;[j]</span><span
11450 class="cmtt-8">&#x00A0;over</span><span
11451 class="cmtt-8">&#x00A0;the</span><span
11452 class="cmtt-8">&#x00A0;range</span><span
11453 class="cmtt-8">&#x00A0;0</span><span
11454 class="cmtt-8">&#x00A0;...</span><span
11455 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
11456 class="cmtt-8">&#x00A0;{</span>
11457 <br class="fancyvrb" /><a
11458 id="x1-112008r4"></a><span
11459 class="cmr-6">4</span><span
11460 class="cmtt-8">&#x00A0;</span><span
11461 class="cmtt-8">&#x00A0;</span>
11462 <br class="fancyvrb" /><a
11463 id="x1-112010r5"></a><span
11464 class="cmr-6">5</span><span
11465 class="cmtt-8">&#x00A0;</span><span
11466 class="cmtt-8">&#x00A0;</span><span
11467 class="cmtt-8">&#x00A0;</span><span
11468 class="cmtt-8">&#x00A0;</span><span
11469 class="cmtt-8">&#x00A0;</span><span
11470 class="cmtt-8">&#x00A0;</span><span
11471 class="cmtt-8">&#x00A0;</span><span
11472 class="cmtt-8">&#x00A0;4)</span><span
11473 class="cmtt-8">&#x00A0;vector</span><span
11474 class="cmtt-8">&#x00A0;[v]</span><span
11475 class="cmtt-8">&#x00A0;element</span><span
11476 class="cmtt-8">&#x00A0;([offset]+[i])</span><span
11477 class="cmtt-8">&#x00A0;=</span>
11478 <br class="fancyvrb" /><a
11479 id="x1-112012r6"></a><span
11480 class="cmr-6">6</span><span
11481 class="cmtt-8">&#x00A0;</span><span
11482 class="cmtt-8">&#x00A0; </span><span
11483 class="cmtt-8">&#x00A0;</span><span
11484 class="cmtt-8">&#x00A0;vector</span><span
11485 class="cmtt-8">&#x00A0;[v]</span><span
11486 class="cmtt-8">&#x00A0;element</span><span
11487 class="cmtt-8">&#x00A0;([offset]+[i])</span><span
11488 class="cmtt-8">&#x00A0;+</span>
11489 <br class="fancyvrb" /><a
11490 id="x1-112014r7"></a><span
11491 class="cmr-6">7</span><span
11492 class="cmtt-8">&#x00A0;</span><span
11493 class="cmtt-8">&#x00A0;</span><span
11494 class="cmtt-8">&#x00A0;</span><span
11495 class="cmtt-8">&#x00A0;</span><span
11496 class="cmtt-8">&#x00A0;</span><span
11497 class="cmtt-8">&#x00A0;</span><span
11498 class="cmtt-8">&#x00A0;</span><span
11499 class="cmtt-8">&#x00A0;</span><span
11500 class="cmtt-8">&#x00A0;</span><span
11501 class="cmtt-8">&#x00A0;</span><span
11502 class="cmtt-8">&#x00A0;</span><span
11503 class="cmtt-8">&#x00A0;vector</span><span
11504 class="cmtt-8">&#x00A0;[entry_temp]</span><span
11505 class="cmtt-8">&#x00A0;element</span><span
11506 class="cmtt-8">&#x00A0;[j]</span>
11507 <br class="fancyvrb" /><a
11508 id="x1-112016r8"></a><span
11509 class="cmr-6">8</span><span
11510 class="cmtt-8">&#x00A0;</span><span
11511 class="cmtt-8">&#x00A0;</span><span
11512 class="cmtt-8">&#x00A0;</span><span
11513 class="cmtt-8">&#x00A0;</span><span
11514 class="cmtt-8">&#x00A0;</span><span
11515 class="cmtt-8">&#x00A0;</span><span
11516 class="cmtt-8">&#x00A0;</span><span
11517 class="cmtt-8">&#x00A0;5)</span><span
11518 class="cmtt-8">&#x00A0;increment</span><span
11519 class="cmtt-8">&#x00A0;[i]</span>
11520 <br class="fancyvrb" /><a
11521 id="x1-112018r9"></a><span
11522 class="cmr-6">9</span><span
11523 class="cmtt-8">&#x00A0;</span><span
11524 class="cmtt-8">&#x00A0;</span>
11525 <br class="fancyvrb" /><a
11526 id="x1-112020r10"></a><span
11527 class="cmr-6">10</span><span
11528 class="cmtt-8">&#x00A0;</span><span
11529 class="cmtt-8">&#x00A0;</span><span
11530 class="cmtt-8">&#x00A0;</span><span
11531 class="cmtt-8">&#x00A0;</span><span
11532 class="cmtt-8">&#x00A0;</span><span
11533 class="cmtt-8">&#x00A0;}</span>
11534 <br class="fancyvrb" /><a
11535 id="x1-112022r11"></a><span
11536 class="cmr-6">11</span><span
11537 class="cmtt-8">&#x00A0;</span><span
11538 class="cmtt-8">&#x00A0;</span>
11539 <br class="fancyvrb" /><a
11540 id="x1-112024r12"></a><span
11541 class="cmr-6">12</span><span
11542 class="cmtt-8">&#x00A0;</span><span
11543 class="cmtt-8">&#x00A0;</span><span
11544 class="cmtt-8">&#x00A0;</span><span
11545 class="cmtt-8">&#x00A0;6)</span><span
11546 class="cmtt-8">&#x00A0;if</span><span
11547 class="cmtt-8">&#x00A0;(</span><span
11548 class="cmtt-8">&#x00A0;[i]</span><span
11549 class="cmtt-8">&#x00A0;is</span><span
11550 class="cmtt-8">&#x00A0;less</span><span
11551 class="cmtt-8">&#x00A0;than</span><span
11552 class="cmtt-8">&#x00A0;[n]</span><span
11553 class="cmtt-8">&#x00A0;)</span><span
11554 class="cmtt-8">&#x00A0;continue</span><span
11555 class="cmtt-8">&#x00A0;at</span><span
11556 class="cmtt-8">&#x00A0;step</span><span
11557 class="cmtt-8">&#x00A0;2</span>
11558 <br class="fancyvrb" /><a
11559 id="x1-112026r13"></a><span
11560 class="cmr-6">13</span><span
11561 class="cmtt-8">&#x00A0;</span><span
11562 class="cmtt-8">&#x00A0;</span><span
11563 class="cmtt-8">&#x00A0;</span><span
11564 class="cmtt-8">&#x00A0;7)</span><span
11565 class="cmtt-8">&#x00A0;done</span>
11566 </div>
11567 <!--l. 413--><p class="noindent" >
11568 <h5 class="subsubsectionHead"><span class="titlemark">8.6.5 </span> <a
11569 id="x1-1130008.6.5"></a>format 2 specifics</h5>
11570 <!--l. 415--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
11571 additional post-decode step after a normal format 1 decode.
11572 <!--l. 418--><p class="noindent" >Format 2 handles &#8217;do not decode&#8217; vectors differently than residue 0 or 1; if all vectors are marked
11573 &#8217;do not decode&#8217;, no decode occurrs. However, if at least one vector is to be decoded, all
11574 the vectors are decoded. We then request normal format 1 to decode a single vector
11575 representing all output channels, rather than a vector for each channel. After decode,
11576 deinterleave the vector into independent vectors, one for each output channel. That
11581 <!--l. 425--><p class="noindent" >
11582 <ol class="enumerate1" >
11583 <li
11584 class="enumerate" id="x1-113002x1">If all vectors 0 through <span
11585 class="cmti-12">ch</span>-1 are marked &#8217;do not decode&#8217;, allocate and clear a single
11586 vector <span
11587 class="cmtt-12">[v]</span>of length <span
11588 class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
11589 step.
11590 </li>
11591 <li
11592 class="enumerate" id="x1-113004x2">Rather than performing format 1 decode to produce <span
11593 class="cmti-12">ch </span>vectors of length <span
11594 class="cmti-12">n </span>each, call
11595 format 1 decode to produce a single vector <span
11596 class="cmtt-12">[v] </span>of length <span
11597 class="cmti-12">ch*n</span>.
11598 </li>
11599 <li
11600 class="enumerate" id="x1-113006x3">Post decode: Deinterleave the single vector <span
11601 class="cmtt-12">[v] </span>returned by format 1 decode as
11602 described above into <span
11603 class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
11605 <div class="fancyvrb" id="fancyvrb43">
11607 id="x1-113008r1"></a><span
11608 class="cmr-6">1</span><span
11609 class="cmtt-8">&#x00A0;</span><span
11610 class="cmtt-8">&#x00A0;</span><span
11611 class="cmtt-8">&#x00A0;</span><span
11612 class="cmtt-8">&#x00A0;1)</span><span
11613 class="cmtt-8">&#x00A0;iterate</span><span
11614 class="cmtt-8">&#x00A0;[i]</span><span
11615 class="cmtt-8">&#x00A0;over</span><span
11616 class="cmtt-8">&#x00A0;the</span><span
11617 class="cmtt-8">&#x00A0;range</span><span
11618 class="cmtt-8">&#x00A0;0</span><span
11619 class="cmtt-8">&#x00A0;...</span><span
11620 class="cmtt-8">&#x00A0;[n]-1</span><span
11621 class="cmtt-8">&#x00A0;{</span>
11622 <br class="fancyvrb" /><a
11623 id="x1-113010r2"></a><span
11624 class="cmr-6">2</span><span
11625 class="cmtt-8">&#x00A0;</span><span
11626 class="cmtt-8">&#x00A0;</span>
11627 <br class="fancyvrb" /><a
11628 id="x1-113012r3"></a><span
11629 class="cmr-6">3</span><span
11630 class="cmtt-8">&#x00A0;</span><span
11631 class="cmtt-8">&#x00A0;</span><span
11632 class="cmtt-8">&#x00A0;</span><span
11633 class="cmtt-8">&#x00A0;</span><span
11634 class="cmtt-8">&#x00A0;</span><span
11635 class="cmtt-8">&#x00A0;</span><span
11636 class="cmtt-8">&#x00A0;</span><span
11637 class="cmtt-8">&#x00A0;</span><span
11638 class="cmtt-8">&#x00A0;2)</span><span
11639 class="cmtt-8">&#x00A0;iterate</span><span
11640 class="cmtt-8">&#x00A0;[j]</span><span
11641 class="cmtt-8">&#x00A0;over</span><span
11642 class="cmtt-8">&#x00A0;the</span><span
11643 class="cmtt-8">&#x00A0;range</span><span
11644 class="cmtt-8">&#x00A0;0</span><span
11645 class="cmtt-8">&#x00A0;...</span><span
11646 class="cmtt-8">&#x00A0;[ch]-1</span><span
11647 class="cmtt-8">&#x00A0;{</span>
11648 <br class="fancyvrb" /><a
11649 id="x1-113014r4"></a><span
11650 class="cmr-6">4</span><span
11651 class="cmtt-8">&#x00A0;</span><span
11652 class="cmtt-8">&#x00A0;</span>
11653 <br class="fancyvrb" /><a
11654 id="x1-113016r5"></a><span
11655 class="cmr-6">5</span><span
11656 class="cmtt-8">&#x00A0;</span><span
11657 class="cmtt-8">&#x00A0;</span><span
11658 class="cmtt-8">&#x00A0;</span><span
11659 class="cmtt-8">&#x00A0;</span><span
11660 class="cmtt-8">&#x00A0;</span><span
11661 class="cmtt-8">&#x00A0;</span><span
11662 class="cmtt-8">&#x00A0;</span><span
11663 class="cmtt-8">&#x00A0;</span><span
11664 class="cmtt-8">&#x00A0;</span><span
11665 class="cmtt-8">&#x00A0;</span><span
11666 class="cmtt-8">&#x00A0;</span><span
11667 class="cmtt-8">&#x00A0;</span><span
11668 class="cmtt-8">&#x00A0;</span><span
11669 class="cmtt-8">&#x00A0;3)</span><span
11670 class="cmtt-8">&#x00A0;output</span><span
11671 class="cmtt-8">&#x00A0;vector</span><span
11672 class="cmtt-8">&#x00A0;number</span><span
11673 class="cmtt-8">&#x00A0;[j]</span><span
11674 class="cmtt-8">&#x00A0;element</span><span
11675 class="cmtt-8">&#x00A0;[i]</span><span
11676 class="cmtt-8">&#x00A0;=</span><span
11677 class="cmtt-8">&#x00A0;vector</span><span
11678 class="cmtt-8">&#x00A0;[v]</span><span
11679 class="cmtt-8">&#x00A0;element</span><span
11680 class="cmtt-8">&#x00A0;([i]</span><span
11681 class="cmtt-8">&#x00A0;*</span><span
11682 class="cmtt-8">&#x00A0;[ch]</span><span
11683 class="cmtt-8">&#x00A0;+</span><span
11684 class="cmtt-8">&#x00A0;[j])</span>
11685 <br class="fancyvrb" /><a
11686 id="x1-113018r6"></a><span
11687 class="cmr-6">6</span><span
11688 class="cmtt-8">&#x00A0;</span><span
11689 class="cmtt-8">&#x00A0;</span>
11690 <br class="fancyvrb" /><a
11691 id="x1-113020r7"></a><span
11692 class="cmr-6">7</span><span
11693 class="cmtt-8">&#x00A0;</span><span
11694 class="cmtt-8">&#x00A0;</span><span
11695 class="cmtt-8">&#x00A0;</span><span
11696 class="cmtt-8">&#x00A0;</span><span
11697 class="cmtt-8">&#x00A0;</span><span
11698 class="cmtt-8">&#x00A0;</span><span
11699 class="cmtt-8">&#x00A0;</span><span
11700 class="cmtt-8">&#x00A0;</span><span
11701 class="cmtt-8">&#x00A0;</span><span
11702 class="cmtt-8">&#x00A0;</span><span
11703 class="cmtt-8">&#x00A0;</span><span
11704 class="cmtt-8">&#x00A0;}</span>
11705 <br class="fancyvrb" /><a
11706 id="x1-113022r8"></a><span
11707 class="cmr-6">8</span><span
11708 class="cmtt-8">&#x00A0;</span><span
11709 class="cmtt-8">&#x00A0;</span><span
11710 class="cmtt-8">&#x00A0;</span><span
11711 class="cmtt-8">&#x00A0;</span><span
11712 class="cmtt-8">&#x00A0;</span><span
11713 class="cmtt-8">&#x00A0;</span><span
11714 class="cmtt-8">&#x00A0;}</span>
11715 <br class="fancyvrb" /><a
11716 id="x1-113024r9"></a><span
11717 class="cmr-6">9</span><span
11718 class="cmtt-8">&#x00A0;</span><span
11719 class="cmtt-8">&#x00A0;</span>
11720 <br class="fancyvrb" /><a
11721 id="x1-113026r10"></a><span
11722 class="cmr-6">10</span><span
11723 class="cmtt-8">&#x00A0;</span><span
11724 class="cmtt-8">&#x00A0;</span><span
11725 class="cmtt-8">&#x00A0;</span><span
11726 class="cmtt-8">&#x00A0;4)</span><span
11727 class="cmtt-8">&#x00A0;done</span>
11728 </div>
11729 </li></ol>
11736 <h3 class="sectionHead"><span class="titlemark">9 </span> <a
11737 id="x1-1140009"></a>Helper equations</h3>
11738 <!--l. 6--><p class="noindent" >
11739 <h4 class="subsectionHead"><span class="titlemark">9.1 </span> <a
11740 id="x1-1150009.1"></a>Overview</h4>
11741 <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
11742 cluttering up the main specification documents, they are defined here and referenced where
11743 appropriate.
11744 <!--l. 13--><p class="noindent" >
11745 <h4 class="subsectionHead"><span class="titlemark">9.2 </span> <a
11746 id="x1-1160009.2"></a>Functions</h4>
11747 <!--l. 15--><p class="noindent" >
11748 <h5 class="subsubsectionHead"><span class="titlemark">9.2.1 </span> <a
11749 id="x1-1170009.2.1"></a>ilog</h5>
11750 <!--l. 17--><p class="noindent" >The &#8221;ilog(x)&#8221; function returns the position number (1 through n) of the highest set bit in the
11751 two&#8217;s complement integer value <span
11752 class="cmtt-12">[x]</span>. Values of <span
11753 class="cmtt-12">[x] </span>less than zero are defined to return
11754 zero.
11755 <!--l. 20--><p class="noindent" >
11756 <div class="fancyvrb" id="fancyvrb44">
11758 id="x1-117002r1"></a><span
11759 class="cmr-6">1</span><span
11760 class="cmtt-8">&#x00A0;</span><span
11761 class="cmtt-8">&#x00A0;</span><span
11762 class="cmtt-8">&#x00A0;</span><span
11763 class="cmtt-8">&#x00A0;1)</span><span
11764 class="cmtt-8">&#x00A0;[return_value]</span><span
11765 class="cmtt-8">&#x00A0;=</span><span
11766 class="cmtt-8">&#x00A0;0;</span>
11767 <br class="fancyvrb" /><a
11768 id="x1-117004r2"></a><span
11769 class="cmr-6">2</span><span
11770 class="cmtt-8">&#x00A0;</span><span
11771 class="cmtt-8">&#x00A0;</span><span
11772 class="cmtt-8">&#x00A0;</span><span
11773 class="cmtt-8">&#x00A0;2)</span><span
11774 class="cmtt-8">&#x00A0;if</span><span
11775 class="cmtt-8">&#x00A0;(</span><span
11776 class="cmtt-8">&#x00A0;[x]</span><span
11777 class="cmtt-8">&#x00A0;is</span><span
11778 class="cmtt-8">&#x00A0;greater</span><span
11779 class="cmtt-8">&#x00A0;than</span><span
11780 class="cmtt-8">&#x00A0;zero</span><span
11781 class="cmtt-8">&#x00A0;)</span><span
11782 class="cmtt-8">&#x00A0;{</span>
11783 <br class="fancyvrb" /><a
11784 id="x1-117006r3"></a><span
11785 class="cmr-6">3</span><span
11786 class="cmtt-8">&#x00A0;</span><span
11787 class="cmtt-8">&#x00A0;</span>
11788 <br class="fancyvrb" /><a
11789 id="x1-117008r4"></a><span
11790 class="cmr-6">4</span><span
11791 class="cmtt-8">&#x00A0;</span><span
11792 class="cmtt-8">&#x00A0;</span><span
11793 class="cmtt-8">&#x00A0;</span><span
11794 class="cmtt-8">&#x00A0;</span><span
11795 class="cmtt-8">&#x00A0;</span><span
11796 class="cmtt-8">&#x00A0;</span><span
11797 class="cmtt-8">&#x00A0;</span><span
11798 class="cmtt-8">&#x00A0;</span><span
11799 class="cmtt-8">&#x00A0;3)</span><span
11800 class="cmtt-8">&#x00A0;increment</span><span
11801 class="cmtt-8">&#x00A0;[return_value];</span>
11802 <br class="fancyvrb" /><a
11803 id="x1-117010r5"></a><span
11804 class="cmr-6">5</span><span
11805 class="cmtt-8">&#x00A0;</span><span
11806 class="cmtt-8">&#x00A0;</span><span
11807 class="cmtt-8">&#x00A0;</span><span
11808 class="cmtt-8">&#x00A0;</span><span
11809 class="cmtt-8">&#x00A0;</span><span
11810 class="cmtt-8">&#x00A0;</span><span
11811 class="cmtt-8">&#x00A0;</span><span
11812 class="cmtt-8">&#x00A0;</span><span
11813 class="cmtt-8">&#x00A0;4)</span><span
11814 class="cmtt-8">&#x00A0;logical</span><span
11815 class="cmtt-8">&#x00A0;shift</span><span
11816 class="cmtt-8">&#x00A0;[x]</span><span
11817 class="cmtt-8">&#x00A0;one</span><span
11818 class="cmtt-8">&#x00A0;bit</span><span
11819 class="cmtt-8">&#x00A0;to</span><span
11820 class="cmtt-8">&#x00A0;the</span><span
11821 class="cmtt-8">&#x00A0;right,</span><span
11822 class="cmtt-8">&#x00A0;padding</span><span
11823 class="cmtt-8">&#x00A0;the</span><span
11824 class="cmtt-8">&#x00A0;MSb</span><span
11825 class="cmtt-8">&#x00A0;with</span><span
11826 class="cmtt-8">&#x00A0;zero</span>
11827 <br class="fancyvrb" /><a
11828 id="x1-117012r6"></a><span
11829 class="cmr-6">6</span><span
11830 class="cmtt-8">&#x00A0;</span><span
11831 class="cmtt-8">&#x00A0;</span><span
11832 class="cmtt-8">&#x00A0;</span><span
11833 class="cmtt-8">&#x00A0;</span><span
11834 class="cmtt-8">&#x00A0;</span><span
11835 class="cmtt-8">&#x00A0;</span><span
11836 class="cmtt-8">&#x00A0;</span><span
11837 class="cmtt-8">&#x00A0;</span><span
11838 class="cmtt-8">&#x00A0;5)</span><span
11839 class="cmtt-8">&#x00A0;repeat</span><span
11840 class="cmtt-8">&#x00A0;at</span><span
11841 class="cmtt-8">&#x00A0;step</span><span
11842 class="cmtt-8">&#x00A0;2)</span>
11843 <br class="fancyvrb" /><a
11844 id="x1-117014r7"></a><span
11845 class="cmr-6">7</span><span
11846 class="cmtt-8">&#x00A0;</span><span
11847 class="cmtt-8">&#x00A0;</span>
11848 <br class="fancyvrb" /><a
11849 id="x1-117016r8"></a><span
11850 class="cmr-6">8</span><span
11851 class="cmtt-8">&#x00A0;</span><span
11852 class="cmtt-8">&#x00A0;</span><span
11853 class="cmtt-8">&#x00A0;</span><span
11854 class="cmtt-8">&#x00A0;</span><span
11855 class="cmtt-8">&#x00A0;</span><span
11856 class="cmtt-8">&#x00A0;</span><span
11857 class="cmtt-8">&#x00A0;}</span>
11858 <br class="fancyvrb" /><a
11859 id="x1-117018r9"></a><span
11860 class="cmr-6">9</span><span
11861 class="cmtt-8">&#x00A0;</span><span
11862 class="cmtt-8">&#x00A0;</span>
11863 <br class="fancyvrb" /><a
11864 id="x1-117020r10"></a><span
11865 class="cmr-6">10</span><span
11866 class="cmtt-8">&#x00A0;</span><span
11867 class="cmtt-8">&#x00A0;</span><span
11868 class="cmtt-8">&#x00A0;</span><span
11869 class="cmtt-8">&#x00A0;</span><span
11870 class="cmtt-8">&#x00A0;6)</span><span
11871 class="cmtt-8">&#x00A0;done</span>
11872 </div>
11876 <!--l. 33--><p class="noindent" >Examples:
11877 <ul class="itemize1">
11878 <li class="itemize">ilog(0) = 0;
11879 </li>
11880 <li class="itemize">ilog(1) = 1;
11881 </li>
11882 <li class="itemize">ilog(2) = 2;
11883 </li>
11884 <li class="itemize">ilog(3) = 2;
11885 </li>
11886 <li class="itemize">ilog(4) = 3;
11887 </li>
11888 <li class="itemize">ilog(7) = 3;
11889 </li>
11890 <li class="itemize">ilog(negative number) = 0;</li></ul>
11891 <!--l. 48--><p class="noindent" >
11892 <h5 class="subsubsectionHead"><span class="titlemark">9.2.2 </span> <a
11893 id="x1-1180009.2.2"></a>float32&#x02D9;unpack</h5>
11894 <!--l. 50--><p class="noindent" >&#8221;float32&#x02D9;unpack(x)&#8221; is intended to translate the packed binary representation of a Vorbis
11895 codebook float value into the representation used by the decoder for floating point numbers. For
11896 purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
11897 number.
11898 <!--l. 56--><p class="noindent" >
11899 <div class="fancyvrb" id="fancyvrb45">
11901 id="x1-118002r1"></a><span
11902 class="cmr-6">1</span><span
11903 class="cmtt-8">&#x00A0;</span><span
11904 class="cmtt-8">&#x00A0;</span><span
11905 class="cmtt-8">&#x00A0;</span><span
11906 class="cmtt-8">&#x00A0;1)</span><span
11907 class="cmtt-8">&#x00A0;[mantissa]</span><span
11908 class="cmtt-8">&#x00A0;=</span><span
11909 class="cmtt-8">&#x00A0;[x]</span><span
11910 class="cmtt-8">&#x00A0;bitwise</span><span
11911 class="cmtt-8">&#x00A0;AND</span><span
11912 class="cmtt-8">&#x00A0;0x1fffff</span><span
11913 class="cmtt-8">&#x00A0;(unsigned</span><span
11914 class="cmtt-8">&#x00A0;result)</span>
11915 <br class="fancyvrb" /><a
11916 id="x1-118004r2"></a><span
11917 class="cmr-6">2</span><span
11918 class="cmtt-8">&#x00A0;</span><span
11919 class="cmtt-8">&#x00A0;</span><span
11920 class="cmtt-8">&#x00A0;</span><span
11921 class="cmtt-8">&#x00A0;2)</span><span
11922 class="cmtt-8">&#x00A0;[sign]</span><span
11923 class="cmtt-8">&#x00A0;=</span><span
11924 class="cmtt-8">&#x00A0;[x]</span><span
11925 class="cmtt-8">&#x00A0;bitwise</span><span
11926 class="cmtt-8">&#x00A0;AND</span><span
11927 class="cmtt-8">&#x00A0;0x80000000</span><span
11928 class="cmtt-8">&#x00A0;(unsigned</span><span
11929 class="cmtt-8">&#x00A0;result)</span>
11930 <br class="fancyvrb" /><a
11931 id="x1-118006r3"></a><span
11932 class="cmr-6">3</span><span
11933 class="cmtt-8">&#x00A0;</span><span
11934 class="cmtt-8">&#x00A0;</span><span
11935 class="cmtt-8">&#x00A0;</span><span
11936 class="cmtt-8">&#x00A0;3)</span><span
11937 class="cmtt-8">&#x00A0;[exponent]</span><span
11938 class="cmtt-8">&#x00A0;=</span><span
11939 class="cmtt-8">&#x00A0;(</span><span
11940 class="cmtt-8">&#x00A0;[x]</span><span
11941 class="cmtt-8">&#x00A0;bitwise</span><span
11942 class="cmtt-8">&#x00A0;AND</span><span
11943 class="cmtt-8">&#x00A0;0x7fe00000)</span><span
11944 class="cmtt-8">&#x00A0;shifted</span><span
11945 class="cmtt-8">&#x00A0;right</span><span
11946 class="cmtt-8">&#x00A0;21</span><span
11947 class="cmtt-8">&#x00A0;bits</span><span
11948 class="cmtt-8">&#x00A0;(unsigned</span><span
11949 class="cmtt-8">&#x00A0;result)</span>
11950 <br class="fancyvrb" /><a
11951 id="x1-118008r4"></a><span
11952 class="cmr-6">4</span><span
11953 class="cmtt-8">&#x00A0;</span><span
11954 class="cmtt-8">&#x00A0;</span><span
11955 class="cmtt-8">&#x00A0;</span><span
11956 class="cmtt-8">&#x00A0;4)</span><span
11957 class="cmtt-8">&#x00A0;if</span><span
11958 class="cmtt-8">&#x00A0;(</span><span
11959 class="cmtt-8">&#x00A0;[sign]</span><span
11960 class="cmtt-8">&#x00A0;is</span><span
11961 class="cmtt-8">&#x00A0;nonzero</span><span
11962 class="cmtt-8">&#x00A0;)</span><span
11963 class="cmtt-8">&#x00A0;then</span><span
11964 class="cmtt-8">&#x00A0;negate</span><span
11965 class="cmtt-8">&#x00A0;[mantissa]</span>
11966 <br class="fancyvrb" /><a
11967 id="x1-118010r5"></a><span
11968 class="cmr-6">5</span><span
11969 class="cmtt-8">&#x00A0;</span><span
11970 class="cmtt-8">&#x00A0;</span><span
11971 class="cmtt-8">&#x00A0;</span><span
11972 class="cmtt-8">&#x00A0;5)</span><span
11973 class="cmtt-8">&#x00A0;return</span><span
11974 class="cmtt-8">&#x00A0;[mantissa]</span><span
11975 class="cmtt-8">&#x00A0;*</span><span
11976 class="cmtt-8">&#x00A0;(</span><span
11977 class="cmtt-8">&#x00A0;2</span><span
11978 class="cmtt-8">&#x00A0;^</span><span
11979 class="cmtt-8">&#x00A0;(</span><span
11980 class="cmtt-8">&#x00A0;[exponent]</span><span
11981 class="cmtt-8">&#x00A0;-</span><span
11982 class="cmtt-8">&#x00A0;788</span><span
11983 class="cmtt-8">&#x00A0;)</span><span
11984 class="cmtt-8">&#x00A0;)</span>
11985 </div>
11989 <!--l. 66--><p class="noindent" >
11990 <h5 class="subsubsectionHead"><span class="titlemark">9.2.3 </span> <a
11991 id="x1-1190009.2.3"></a>lookup1&#x02D9;values</h5>
11992 <!--l. 68--><p class="noindent" >&#8221;lookup1&#x02D9;values(codebook&#x02D9;entries,codebook&#x02D9;dimensions)&#8221; is used to compute the correct length of
11993 the value index for a codebook VQ lookup table of lookup type 1. The values on this list are
11994 permuted to construct the VQ vector lookup table of size <span
11995 class="cmtt-12">[codebook_entries]</span>.
11996 <!--l. 74--><p class="noindent" >The return value for this function is defined to be &#8217;the greatest integer value for which
11997 <span
11998 class="cmtt-12">[return_value] </span>to the power of <span
11999 class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
12000 <span
12001 class="cmtt-12">[codebook_entries]</span>&#8217;.
12002 <!--l. 81--><p class="noindent" >
12003 <h5 class="subsubsectionHead"><span class="titlemark">9.2.4 </span> <a
12004 id="x1-1200009.2.4"></a>low&#x02D9;neighbor</h5>
12005 <!--l. 83--><p class="noindent" >&#8221;low&#x02D9;neighbor(v,x)&#8221; finds the position <span
12006 class="cmtt-12">n </span>in vector <span
12007 class="cmtt-12">[v] </span>of the greatest value scalar element for
12008 which <span
12009 class="cmtt-12">n </span>is less than <span
12010 class="cmtt-12">[x] </span>and vector <span
12011 class="cmtt-12">[v] </span>element <span
12012 class="cmtt-12">n </span>is less than vector <span
12013 class="cmtt-12">[v] </span>element
12014 <span
12015 class="cmtt-12">[x]</span>.
12016 <!--l. 88--><p class="noindent" >
12017 <h5 class="subsubsectionHead"><span class="titlemark">9.2.5 </span> <a
12018 id="x1-1210009.2.5"></a>high&#x02D9;neighbor</h5>
12019 <!--l. 90--><p class="noindent" >&#8221;high&#x02D9;neighbor(v,x)&#8221; finds the position <span
12020 class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
12021 which <span
12022 class="cmtt-12">n </span>is less than <span
12023 class="cmtt-12">[x] </span>and vector <span
12024 class="cmtt-12">[v] </span>element <span
12025 class="cmtt-12">n </span>is greater than vector <span
12026 class="cmtt-12">[v] </span>element
12027 <span
12028 class="cmtt-12">[x]</span>.
12029 <!--l. 97--><p class="noindent" >
12030 <h5 class="subsubsectionHead"><span class="titlemark">9.2.6 </span> <a
12031 id="x1-1220009.2.6"></a>render&#x02D9;point</h5>
12032 <!--l. 99--><p class="noindent" >&#8221;render&#x02D9;point(x0,y0,x1,y1,X)&#8221; is used to find the Y value at point X along the line specified by
12033 x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
12034 calculating intervening values along the line.
12035 <!--l. 104--><p class="noindent" >
12039 <div class="fancyvrb" id="fancyvrb46">
12041 id="x1-122002r1"></a><span
12042 class="cmr-6">1</span><span
12043 class="cmtt-8">&#x00A0;</span><span
12044 class="cmtt-8">&#x00A0;</span><span
12045 class="cmtt-8">&#x00A0;</span><span
12046 class="cmtt-8">&#x00A0;1)</span><span
12047 class="cmtt-8">&#x00A0;</span><span
12048 class="cmtt-8">&#x00A0;[dy]</span><span
12049 class="cmtt-8">&#x00A0;=</span><span
12050 class="cmtt-8">&#x00A0;[y1]</span><span
12051 class="cmtt-8">&#x00A0;-</span><span
12052 class="cmtt-8">&#x00A0;[y0]</span>
12053 <br class="fancyvrb" /><a
12054 id="x1-122004r2"></a><span
12055 class="cmr-6">2</span><span
12056 class="cmtt-8">&#x00A0;</span><span
12057 class="cmtt-8">&#x00A0;</span><span
12058 class="cmtt-8">&#x00A0;</span><span
12059 class="cmtt-8">&#x00A0;2)</span><span
12060 class="cmtt-8">&#x00A0;[adx]</span><span
12061 class="cmtt-8">&#x00A0;=</span><span
12062 class="cmtt-8">&#x00A0;[x1]</span><span
12063 class="cmtt-8">&#x00A0;-</span><span
12064 class="cmtt-8">&#x00A0;[x0]</span>
12065 <br class="fancyvrb" /><a
12066 id="x1-122006r3"></a><span
12067 class="cmr-6">3</span><span
12068 class="cmtt-8">&#x00A0;</span><span
12069 class="cmtt-8">&#x00A0;</span><span
12070 class="cmtt-8">&#x00A0;</span><span
12071 class="cmtt-8">&#x00A0;3)</span><span
12072 class="cmtt-8">&#x00A0;[ady]</span><span
12073 class="cmtt-8">&#x00A0;=</span><span
12074 class="cmtt-8">&#x00A0;absolute</span><span
12075 class="cmtt-8">&#x00A0;value</span><span
12076 class="cmtt-8">&#x00A0;of</span><span
12077 class="cmtt-8">&#x00A0;[dy]</span>
12078 <br class="fancyvrb" /><a
12079 id="x1-122008r4"></a><span
12080 class="cmr-6">4</span><span
12081 class="cmtt-8">&#x00A0;</span><span
12082 class="cmtt-8">&#x00A0;</span><span
12083 class="cmtt-8">&#x00A0;</span><span
12084 class="cmtt-8">&#x00A0;4)</span><span
12085 class="cmtt-8">&#x00A0;[err]</span><span
12086 class="cmtt-8">&#x00A0;=</span><span
12087 class="cmtt-8">&#x00A0;[ady]</span><span
12088 class="cmtt-8">&#x00A0;*</span><span
12089 class="cmtt-8">&#x00A0;([X]</span><span
12090 class="cmtt-8">&#x00A0;-</span><span
12091 class="cmtt-8">&#x00A0;[x0])</span>
12092 <br class="fancyvrb" /><a
12093 id="x1-122010r5"></a><span
12094 class="cmr-6">5</span><span
12095 class="cmtt-8">&#x00A0;</span><span
12096 class="cmtt-8">&#x00A0;</span><span
12097 class="cmtt-8">&#x00A0;</span><span
12098 class="cmtt-8">&#x00A0;5)</span><span
12099 class="cmtt-8">&#x00A0;[off]</span><span
12100 class="cmtt-8">&#x00A0;=</span><span
12101 class="cmtt-8">&#x00A0;[err]</span><span
12102 class="cmtt-8">&#x00A0;/</span><span
12103 class="cmtt-8">&#x00A0;[adx]</span><span
12104 class="cmtt-8">&#x00A0;using</span><span
12105 class="cmtt-8">&#x00A0;integer</span><span
12106 class="cmtt-8">&#x00A0;division</span>
12107 <br class="fancyvrb" /><a
12108 id="x1-122012r6"></a><span
12109 class="cmr-6">6</span><span
12110 class="cmtt-8">&#x00A0;</span><span
12111 class="cmtt-8">&#x00A0;</span><span
12112 class="cmtt-8">&#x00A0;</span><span
12113 class="cmtt-8">&#x00A0;6)</span><span
12114 class="cmtt-8">&#x00A0;if</span><span
12115 class="cmtt-8">&#x00A0;(</span><span
12116 class="cmtt-8">&#x00A0;[dy]</span><span
12117 class="cmtt-8">&#x00A0;is</span><span
12118 class="cmtt-8">&#x00A0;less</span><span
12119 class="cmtt-8">&#x00A0;than</span><span
12120 class="cmtt-8">&#x00A0;zero</span><span
12121 class="cmtt-8">&#x00A0;)</span><span
12122 class="cmtt-8">&#x00A0;{</span>
12123 <br class="fancyvrb" /><a
12124 id="x1-122014r7"></a><span
12125 class="cmr-6">7</span><span
12126 class="cmtt-8">&#x00A0;</span><span
12127 class="cmtt-8">&#x00A0;</span>
12128 <br class="fancyvrb" /><a
12129 id="x1-122016r8"></a><span
12130 class="cmr-6">8</span><span
12131 class="cmtt-8">&#x00A0;</span><span
12132 class="cmtt-8">&#x00A0;</span><span
12133 class="cmtt-8">&#x00A0;</span><span
12134 class="cmtt-8">&#x00A0;</span><span
12135 class="cmtt-8">&#x00A0;</span><span
12136 class="cmtt-8">&#x00A0;</span><span
12137 class="cmtt-8">&#x00A0;</span><span
12138 class="cmtt-8">&#x00A0;</span><span
12139 class="cmtt-8">&#x00A0;7)</span><span
12140 class="cmtt-8">&#x00A0;[Y]</span><span
12141 class="cmtt-8">&#x00A0;=</span><span
12142 class="cmtt-8">&#x00A0;[y0]</span><span
12143 class="cmtt-8">&#x00A0;-</span><span
12144 class="cmtt-8">&#x00A0;[off]</span>
12145 <br class="fancyvrb" /><a
12146 id="x1-122018r9"></a><span
12147 class="cmr-6">9</span><span
12148 class="cmtt-8">&#x00A0;</span><span
12149 class="cmtt-8">&#x00A0;</span>
12150 <br class="fancyvrb" /><a
12151 id="x1-122020r10"></a><span
12152 class="cmr-6">10</span><span
12153 class="cmtt-8">&#x00A0;</span><span
12154 class="cmtt-8">&#x00A0;</span><span
12155 class="cmtt-8">&#x00A0;</span><span
12156 class="cmtt-8">&#x00A0;</span><span
12157 class="cmtt-8">&#x00A0;</span><span
12158 class="cmtt-8">&#x00A0;</span><span
12159 class="cmtt-8">&#x00A0;}</span><span
12160 class="cmtt-8">&#x00A0;else</span><span
12161 class="cmtt-8">&#x00A0;{</span>
12162 <br class="fancyvrb" /><a
12163 id="x1-122022r11"></a><span
12164 class="cmr-6">11</span><span
12165 class="cmtt-8">&#x00A0;</span><span
12166 class="cmtt-8">&#x00A0;</span>
12167 <br class="fancyvrb" /><a
12168 id="x1-122024r12"></a><span
12169 class="cmr-6">12</span><span
12170 class="cmtt-8">&#x00A0;</span><span
12171 class="cmtt-8">&#x00A0;</span><span
12172 class="cmtt-8">&#x00A0;</span><span
12173 class="cmtt-8">&#x00A0;</span><span
12174 class="cmtt-8">&#x00A0;</span><span
12175 class="cmtt-8">&#x00A0;</span><span
12176 class="cmtt-8">&#x00A0;</span><span
12177 class="cmtt-8">&#x00A0;</span><span
12178 class="cmtt-8">&#x00A0;8)</span><span
12179 class="cmtt-8">&#x00A0;[Y]</span><span
12180 class="cmtt-8">&#x00A0;=</span><span
12181 class="cmtt-8">&#x00A0;[y0]</span><span
12182 class="cmtt-8">&#x00A0;+</span><span
12183 class="cmtt-8">&#x00A0;[off]</span>
12184 <br class="fancyvrb" /><a
12185 id="x1-122026r13"></a><span
12186 class="cmr-6">13</span><span
12187 class="cmtt-8">&#x00A0;</span><span
12188 class="cmtt-8">&#x00A0;</span>
12189 <br class="fancyvrb" /><a
12190 id="x1-122028r14"></a><span
12191 class="cmr-6">14</span><span
12192 class="cmtt-8">&#x00A0;</span><span
12193 class="cmtt-8">&#x00A0;</span><span
12194 class="cmtt-8">&#x00A0;</span><span
12195 class="cmtt-8">&#x00A0;</span><span
12196 class="cmtt-8">&#x00A0;</span><span
12197 class="cmtt-8">&#x00A0;</span><span
12198 class="cmtt-8">&#x00A0;}</span>
12199 <br class="fancyvrb" /><a
12200 id="x1-122030r15"></a><span
12201 class="cmr-6">15</span><span
12202 class="cmtt-8">&#x00A0;</span><span
12203 class="cmtt-8">&#x00A0;</span>
12204 <br class="fancyvrb" /><a
12205 id="x1-122032r16"></a><span
12206 class="cmr-6">16</span><span
12207 class="cmtt-8">&#x00A0;</span><span
12208 class="cmtt-8">&#x00A0;</span><span
12209 class="cmtt-8">&#x00A0;</span><span
12210 class="cmtt-8">&#x00A0;9)</span><span
12211 class="cmtt-8">&#x00A0;done</span>
12212 </div>
12213 <!--l. 125--><p class="noindent" >
12214 <h5 class="subsubsectionHead"><span class="titlemark">9.2.7 </span> <a
12215 id="x1-1230009.2.7"></a>render&#x02D9;line</h5>
12216 <!--l. 127--><p class="noindent" >Floor decode type one uses the integer line drawing algorithm of &#8221;render&#x02D9;line(x0, y0, x1, y1, v)&#8221;
12217 to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
12218 been relevant elsewhere, but here we must define integer division as rounding division of both
12219 positive and negative numbers toward zero.
12220 <!--l. 134--><p class="noindent" >
12221 <div class="fancyvrb" id="fancyvrb47">
12223 id="x1-123002r1"></a><span
12224 class="cmr-6">1</span><span
12225 class="cmtt-8">&#x00A0;</span><span
12226 class="cmtt-8">&#x00A0;</span><span
12227 class="cmtt-8">&#x00A0;</span><span
12228 class="cmtt-8">&#x00A0;1)</span><span
12229 class="cmtt-8">&#x00A0;</span><span
12230 class="cmtt-8">&#x00A0;</span><span
12231 class="cmtt-8">&#x00A0;[dy]</span><span
12232 class="cmtt-8">&#x00A0;=</span><span
12233 class="cmtt-8">&#x00A0;[y1]</span><span
12234 class="cmtt-8">&#x00A0;-</span><span
12235 class="cmtt-8">&#x00A0;[y0]</span>
12236 <br class="fancyvrb" /><a
12237 id="x1-123004r2"></a><span
12238 class="cmr-6">2</span><span
12239 class="cmtt-8">&#x00A0;</span><span
12240 class="cmtt-8">&#x00A0;</span><span
12241 class="cmtt-8">&#x00A0;</span><span
12242 class="cmtt-8">&#x00A0;2)</span><span
12243 class="cmtt-8">&#x00A0;</span><span
12244 class="cmtt-8">&#x00A0;[adx]</span><span
12245 class="cmtt-8">&#x00A0;=</span><span
12246 class="cmtt-8">&#x00A0;[x1]</span><span
12247 class="cmtt-8">&#x00A0;-</span><span
12248 class="cmtt-8">&#x00A0;[x0]</span>
12249 <br class="fancyvrb" /><a
12250 id="x1-123006r3"></a><span
12251 class="cmr-6">3</span><span
12252 class="cmtt-8">&#x00A0;</span><span
12253 class="cmtt-8">&#x00A0;</span><span
12254 class="cmtt-8">&#x00A0;</span><span
12255 class="cmtt-8">&#x00A0;3)</span><span
12256 class="cmtt-8">&#x00A0;</span><span
12257 class="cmtt-8">&#x00A0;[ady]</span><span
12258 class="cmtt-8">&#x00A0;=</span><span
12259 class="cmtt-8">&#x00A0;absolute</span><span
12260 class="cmtt-8">&#x00A0;value</span><span
12261 class="cmtt-8">&#x00A0;of</span><span
12262 class="cmtt-8">&#x00A0;[dy]</span>
12263 <br class="fancyvrb" /><a
12264 id="x1-123008r4"></a><span
12265 class="cmr-6">4</span><span
12266 class="cmtt-8">&#x00A0;</span><span
12267 class="cmtt-8">&#x00A0;</span><span
12268 class="cmtt-8">&#x00A0;</span><span
12269 class="cmtt-8">&#x00A0;4)</span><span
12270 class="cmtt-8">&#x00A0;[base]</span><span
12271 class="cmtt-8">&#x00A0;=</span><span
12272 class="cmtt-8">&#x00A0;[dy]</span><span
12273 class="cmtt-8">&#x00A0;/</span><span
12274 class="cmtt-8">&#x00A0;[adx]</span><span
12275 class="cmtt-8">&#x00A0;using</span><span
12276 class="cmtt-8">&#x00A0;integer</span><span
12277 class="cmtt-8">&#x00A0;division</span>
12278 <br class="fancyvrb" /><a
12279 id="x1-123010r5"></a><span
12280 class="cmr-6">5</span><span
12281 class="cmtt-8">&#x00A0;</span><span
12282 class="cmtt-8">&#x00A0;</span><span
12283 class="cmtt-8">&#x00A0;</span><span
12284 class="cmtt-8">&#x00A0;5)</span><span
12285 class="cmtt-8">&#x00A0;</span><span
12286 class="cmtt-8">&#x00A0;</span><span
12287 class="cmtt-8">&#x00A0;</span><span
12288 class="cmtt-8">&#x00A0;[x]</span><span
12289 class="cmtt-8">&#x00A0;=</span><span
12290 class="cmtt-8">&#x00A0;[x0]</span>
12291 <br class="fancyvrb" /><a
12292 id="x1-123012r6"></a><span
12293 class="cmr-6">6</span><span
12294 class="cmtt-8">&#x00A0;</span><span
12295 class="cmtt-8">&#x00A0;</span><span
12296 class="cmtt-8">&#x00A0;</span><span
12297 class="cmtt-8">&#x00A0;6)</span><span
12298 class="cmtt-8">&#x00A0;</span><span
12299 class="cmtt-8">&#x00A0;</span><span
12300 class="cmtt-8">&#x00A0;</span><span
12301 class="cmtt-8">&#x00A0;[y]</span><span
12302 class="cmtt-8">&#x00A0;=</span><span
12303 class="cmtt-8">&#x00A0;[y0]</span>
12304 <br class="fancyvrb" /><a
12305 id="x1-123014r7"></a><span
12306 class="cmr-6">7</span><span
12307 class="cmtt-8">&#x00A0;</span><span
12308 class="cmtt-8">&#x00A0;</span><span
12309 class="cmtt-8">&#x00A0;</span><span
12310 class="cmtt-8">&#x00A0;7)</span><span
12311 class="cmtt-8">&#x00A0;</span><span
12312 class="cmtt-8">&#x00A0;[err]</span><span
12313 class="cmtt-8">&#x00A0;=</span><span
12314 class="cmtt-8">&#x00A0;0</span>
12315 <br class="fancyvrb" /><a
12316 id="x1-123016r8"></a><span
12317 class="cmr-6">8</span><span
12318 class="cmtt-8">&#x00A0;</span><span
12319 class="cmtt-8">&#x00A0;</span>
12320 <br class="fancyvrb" /><a
12321 id="x1-123018r9"></a><span
12322 class="cmr-6">9</span><span
12323 class="cmtt-8">&#x00A0;</span><span
12324 class="cmtt-8">&#x00A0;</span><span
12325 class="cmtt-8">&#x00A0;</span><span
12326 class="cmtt-8">&#x00A0;8)</span><span
12327 class="cmtt-8">&#x00A0;if</span><span
12328 class="cmtt-8">&#x00A0;(</span><span
12329 class="cmtt-8">&#x00A0;[dy]</span><span
12330 class="cmtt-8">&#x00A0;is</span><span
12331 class="cmtt-8">&#x00A0;less</span><span
12332 class="cmtt-8">&#x00A0;than</span><span
12333 class="cmtt-8">&#x00A0;0</span><span
12334 class="cmtt-8">&#x00A0;)</span><span
12335 class="cmtt-8">&#x00A0;{</span>
12336 <br class="fancyvrb" /><a
12337 id="x1-123020r10"></a><span
12338 class="cmr-6">10</span><span
12339 class="cmtt-8">&#x00A0;</span><span
12340 class="cmtt-8">&#x00A0;</span>
12341 <br class="fancyvrb" /><a
12342 id="x1-123022r11"></a><span
12343 class="cmr-6">11</span><span
12344 class="cmtt-8">&#x00A0;</span><span
12345 class="cmtt-8">&#x00A0;</span><span
12346 class="cmtt-8">&#x00A0;</span><span
12347 class="cmtt-8">&#x00A0;</span><span
12348 class="cmtt-8">&#x00A0;</span><span
12349 class="cmtt-8">&#x00A0;</span><span
12350 class="cmtt-8">&#x00A0;</span><span
12351 class="cmtt-8">&#x00A0;</span><span
12352 class="cmtt-8">&#x00A0;</span><span
12353 class="cmtt-8">&#x00A0;9)</span><span
12354 class="cmtt-8">&#x00A0;[sy]</span><span
12355 class="cmtt-8">&#x00A0;=</span><span
12356 class="cmtt-8">&#x00A0;[base]</span><span
12357 class="cmtt-8">&#x00A0;-</span><span
12358 class="cmtt-8">&#x00A0;1</span>
12359 <br class="fancyvrb" /><a
12360 id="x1-123024r12"></a><span
12361 class="cmr-6">12</span><span
12362 class="cmtt-8">&#x00A0;</span><span
12363 class="cmtt-8">&#x00A0;</span>
12364 <br class="fancyvrb" /><a
12365 id="x1-123026r13"></a><span
12366 class="cmr-6">13</span><span
12367 class="cmtt-8">&#x00A0;</span><span
12368 class="cmtt-8">&#x00A0;</span><span
12369 class="cmtt-8">&#x00A0;</span><span
12370 class="cmtt-8">&#x00A0;</span><span
12371 class="cmtt-8">&#x00A0;</span><span
12372 class="cmtt-8">&#x00A0;</span><span
12373 class="cmtt-8">&#x00A0;}</span><span
12374 class="cmtt-8">&#x00A0;else</span><span
12375 class="cmtt-8">&#x00A0;{</span>
12376 <br class="fancyvrb" /><a
12377 id="x1-123028r14"></a><span
12378 class="cmr-6">14</span><span
12379 class="cmtt-8">&#x00A0;</span><span
12380 class="cmtt-8">&#x00A0;</span>
12381 <br class="fancyvrb" /><a
12382 id="x1-123030r15"></a><span
12383 class="cmr-6">15</span><span
12384 class="cmtt-8">&#x00A0;</span><span
12385 class="cmtt-8">&#x00A0;</span><span
12386 class="cmtt-8">&#x00A0;</span><span
12387 class="cmtt-8">&#x00A0;</span><span
12388 class="cmtt-8">&#x00A0;</span><span
12389 class="cmtt-8">&#x00A0;</span><span
12390 class="cmtt-8">&#x00A0;</span><span
12391 class="cmtt-8">&#x00A0;</span><span
12392 class="cmtt-8">&#x00A0;10)</span><span
12393 class="cmtt-8">&#x00A0;[sy]</span><span
12394 class="cmtt-8">&#x00A0;=</span><span
12395 class="cmtt-8">&#x00A0;[base]</span><span
12396 class="cmtt-8">&#x00A0;+</span><span
12397 class="cmtt-8">&#x00A0;1</span>
12398 <br class="fancyvrb" /><a
12399 id="x1-123032r16"></a><span
12400 class="cmr-6">16</span><span
12401 class="cmtt-8">&#x00A0;</span><span
12402 class="cmtt-8">&#x00A0;</span>
12403 <br class="fancyvrb" /><a
12404 id="x1-123034r17"></a><span
12405 class="cmr-6">17</span><span
12406 class="cmtt-8">&#x00A0;</span><span
12407 class="cmtt-8">&#x00A0;</span><span
12408 class="cmtt-8">&#x00A0;</span><span
12409 class="cmtt-8">&#x00A0;</span><span
12410 class="cmtt-8">&#x00A0;</span><span
12411 class="cmtt-8">&#x00A0;</span><span
12412 class="cmtt-8">&#x00A0;}</span>
12413 <br class="fancyvrb" /><a
12414 id="x1-123036r18"></a><span
12415 class="cmr-6">18</span><span
12416 class="cmtt-8">&#x00A0;</span><span
12417 class="cmtt-8">&#x00A0;</span>
12418 <br class="fancyvrb" /><a
12419 id="x1-123038r19"></a><span
12420 class="cmr-6">19</span><span
12421 class="cmtt-8">&#x00A0;</span><span
12422 class="cmtt-8">&#x00A0;</span><span
12423 class="cmtt-8">&#x00A0;11)</span><span
12424 class="cmtt-8">&#x00A0;[ady]</span><span
12425 class="cmtt-8">&#x00A0;=</span><span
12426 class="cmtt-8">&#x00A0;[ady]</span><span
12427 class="cmtt-8">&#x00A0;-</span><span
12428 class="cmtt-8">&#x00A0;(absolute</span><span
12429 class="cmtt-8">&#x00A0;value</span><span
12430 class="cmtt-8">&#x00A0;of</span><span
12431 class="cmtt-8">&#x00A0;[base])</span><span
12432 class="cmtt-8">&#x00A0;*</span><span
12433 class="cmtt-8">&#x00A0;[adx]</span>
12434 <br class="fancyvrb" /><a
12435 id="x1-123040r20"></a><span
12436 class="cmr-6">20</span><span
12437 class="cmtt-8">&#x00A0;</span><span
12438 class="cmtt-8">&#x00A0;</span><span
12439 class="cmtt-8">&#x00A0;12)</span><span
12440 class="cmtt-8">&#x00A0;vector</span><span
12441 class="cmtt-8">&#x00A0;[v]</span><span
12442 class="cmtt-8">&#x00A0;element</span><span
12443 class="cmtt-8">&#x00A0;[x]</span><span
12444 class="cmtt-8">&#x00A0;=</span><span
12445 class="cmtt-8">&#x00A0;[y]</span>
12446 <br class="fancyvrb" /><a
12447 id="x1-123042r21"></a><span
12448 class="cmr-6">21</span><span
12449 class="cmtt-8">&#x00A0;</span><span
12450 class="cmtt-8">&#x00A0;</span>
12451 <br class="fancyvrb" /><a
12452 id="x1-123044r22"></a><span
12453 class="cmr-6">22</span><span
12454 class="cmtt-8">&#x00A0;</span><span
12455 class="cmtt-8">&#x00A0;</span><span
12456 class="cmtt-8">&#x00A0;13)</span><span
12457 class="cmtt-8">&#x00A0;iterate</span><span
12458 class="cmtt-8">&#x00A0;[x]</span><span
12459 class="cmtt-8">&#x00A0;over</span><span
12460 class="cmtt-8">&#x00A0;the</span><span
12461 class="cmtt-8">&#x00A0;range</span><span
12462 class="cmtt-8">&#x00A0;[x0]+1</span><span
12463 class="cmtt-8">&#x00A0;...</span><span
12464 class="cmtt-8">&#x00A0;[x1]-1</span><span
12465 class="cmtt-8">&#x00A0;{</span>
12466 <br class="fancyvrb" /><a
12467 id="x1-123046r23"></a><span
12468 class="cmr-6">23</span><span
12469 class="cmtt-8">&#x00A0;</span><span
12470 class="cmtt-8">&#x00A0;</span>
12471 <br class="fancyvrb" /><a
12472 id="x1-123048r24"></a><span
12473 class="cmr-6">24</span><span
12474 class="cmtt-8">&#x00A0;</span><span
12475 class="cmtt-8">&#x00A0;</span><span
12476 class="cmtt-8">&#x00A0;</span><span
12477 class="cmtt-8">&#x00A0;</span><span
12478 class="cmtt-8">&#x00A0;</span><span
12479 class="cmtt-8">&#x00A0;</span><span
12480 class="cmtt-8">&#x00A0;</span><span
12481 class="cmtt-8">&#x00A0;</span><span
12482 class="cmtt-8">&#x00A0;14)</span><span
12483 class="cmtt-8">&#x00A0;[err]</span><span
12484 class="cmtt-8">&#x00A0;=</span><span
12485 class="cmtt-8">&#x00A0;[err]</span><span
12486 class="cmtt-8">&#x00A0;+</span><span
12487 class="cmtt-8">&#x00A0;[ady];</span>
12491 <br class="fancyvrb" /><a
12492 id="x1-123050r25"></a><span
12493 class="cmr-6">25</span><span
12494 class="cmtt-8">&#x00A0;</span><span
12495 class="cmtt-8">&#x00A0;</span><span
12496 class="cmtt-8">&#x00A0;</span><span
12497 class="cmtt-8">&#x00A0;</span><span
12498 class="cmtt-8">&#x00A0;</span><span
12499 class="cmtt-8">&#x00A0;</span><span
12500 class="cmtt-8">&#x00A0;</span><span
12501 class="cmtt-8">&#x00A0;</span><span
12502 class="cmtt-8">&#x00A0;15)</span><span
12503 class="cmtt-8">&#x00A0;if</span><span
12504 class="cmtt-8">&#x00A0;(</span><span
12505 class="cmtt-8">&#x00A0;[err]</span><span
12506 class="cmtt-8">&#x00A0;&#x003E;=</span><span
12507 class="cmtt-8">&#x00A0;[adx]</span><span
12508 class="cmtt-8">&#x00A0;)</span><span
12509 class="cmtt-8">&#x00A0;{</span>
12510 <br class="fancyvrb" /><a
12511 id="x1-123052r26"></a><span
12512 class="cmr-6">26</span><span
12513 class="cmtt-8">&#x00A0;</span><span
12514 class="cmtt-8">&#x00A0;</span>
12515 <br class="fancyvrb" /><a
12516 id="x1-123054r27"></a><span
12517 class="cmr-6">27</span><span
12518 class="cmtt-8">&#x00A0;</span><span
12519 class="cmtt-8">&#x00A0;</span><span
12520 class="cmtt-8">&#x00A0;</span><span
12521 class="cmtt-8">&#x00A0;</span><span
12522 class="cmtt-8">&#x00A0;</span><span
12523 class="cmtt-8">&#x00A0;</span><span
12524 class="cmtt-8">&#x00A0;</span><span
12525 class="cmtt-8">&#x00A0;</span><span
12526 class="cmtt-8">&#x00A0;</span><span
12527 class="cmtt-8">&#x00A0;</span><span
12528 class="cmtt-8">&#x00A0;</span><span
12529 class="cmtt-8">&#x00A0;</span><span
12530 class="cmtt-8">&#x00A0;</span><span
12531 class="cmtt-8">&#x00A0;</span><span
12532 class="cmtt-8">&#x00A0;16)</span><span
12533 class="cmtt-8">&#x00A0;[err]</span><span
12534 class="cmtt-8">&#x00A0;=</span><span
12535 class="cmtt-8">&#x00A0;[err]</span><span
12536 class="cmtt-8">&#x00A0;-</span><span
12537 class="cmtt-8">&#x00A0;[adx]</span>
12538 <br class="fancyvrb" /><a
12539 id="x1-123056r28"></a><span
12540 class="cmr-6">28</span><span
12541 class="cmtt-8">&#x00A0;</span><span
12542 class="cmtt-8">&#x00A0;</span><span
12543 class="cmtt-8">&#x00A0;</span><span
12544 class="cmtt-8">&#x00A0;</span><span
12545 class="cmtt-8">&#x00A0;</span><span
12546 class="cmtt-8">&#x00A0;</span><span
12547 class="cmtt-8">&#x00A0;</span><span
12548 class="cmtt-8">&#x00A0;</span><span
12549 class="cmtt-8">&#x00A0;</span><span
12550 class="cmtt-8">&#x00A0;</span><span
12551 class="cmtt-8">&#x00A0;</span><span
12552 class="cmtt-8">&#x00A0;</span><span
12553 class="cmtt-8">&#x00A0;</span><span
12554 class="cmtt-8">&#x00A0;</span><span
12555 class="cmtt-8">&#x00A0;17)</span><span
12556 class="cmtt-8">&#x00A0;</span><span
12557 class="cmtt-8">&#x00A0;</span><span
12558 class="cmtt-8">&#x00A0;[y]</span><span
12559 class="cmtt-8">&#x00A0;=</span><span
12560 class="cmtt-8">&#x00A0;[y]</span><span
12561 class="cmtt-8">&#x00A0;+</span><span
12562 class="cmtt-8">&#x00A0;[sy]</span>
12563 <br class="fancyvrb" /><a
12564 id="x1-123058r29"></a><span
12565 class="cmr-6">29</span><span
12566 class="cmtt-8">&#x00A0;</span><span
12567 class="cmtt-8">&#x00A0;</span>
12568 <br class="fancyvrb" /><a
12569 id="x1-123060r30"></a><span
12570 class="cmr-6">30</span><span
12571 class="cmtt-8">&#x00A0;</span><span
12572 class="cmtt-8">&#x00A0;</span><span
12573 class="cmtt-8">&#x00A0;</span><span
12574 class="cmtt-8">&#x00A0;</span><span
12575 class="cmtt-8">&#x00A0;</span><span
12576 class="cmtt-8">&#x00A0;</span><span
12577 class="cmtt-8">&#x00A0;</span><span
12578 class="cmtt-8">&#x00A0;</span><span
12579 class="cmtt-8">&#x00A0;</span><span
12580 class="cmtt-8">&#x00A0;</span><span
12581 class="cmtt-8">&#x00A0;</span><span
12582 class="cmtt-8">&#x00A0;</span><span
12583 class="cmtt-8">&#x00A0;}</span><span
12584 class="cmtt-8">&#x00A0;else</span><span
12585 class="cmtt-8">&#x00A0;{</span>
12586 <br class="fancyvrb" /><a
12587 id="x1-123062r31"></a><span
12588 class="cmr-6">31</span><span
12589 class="cmtt-8">&#x00A0;</span><span
12590 class="cmtt-8">&#x00A0;</span>
12591 <br class="fancyvrb" /><a
12592 id="x1-123064r32"></a><span
12593 class="cmr-6">32</span><span
12594 class="cmtt-8">&#x00A0;</span><span
12595 class="cmtt-8">&#x00A0;</span><span
12596 class="cmtt-8">&#x00A0;</span><span
12597 class="cmtt-8">&#x00A0;</span><span
12598 class="cmtt-8">&#x00A0;</span><span
12599 class="cmtt-8">&#x00A0;</span><span
12600 class="cmtt-8">&#x00A0;</span><span
12601 class="cmtt-8">&#x00A0;</span><span
12602 class="cmtt-8">&#x00A0;</span><span
12603 class="cmtt-8">&#x00A0;</span><span
12604 class="cmtt-8">&#x00A0;</span><span
12605 class="cmtt-8">&#x00A0;</span><span
12606 class="cmtt-8">&#x00A0;</span><span
12607 class="cmtt-8">&#x00A0;</span><span
12608 class="cmtt-8">&#x00A0;18)</span><span
12609 class="cmtt-8">&#x00A0;[y]</span><span
12610 class="cmtt-8">&#x00A0;=</span><span
12611 class="cmtt-8">&#x00A0;[y]</span><span
12612 class="cmtt-8">&#x00A0;+</span><span
12613 class="cmtt-8">&#x00A0;[base]</span>
12614 <br class="fancyvrb" /><a
12615 id="x1-123066r33"></a><span
12616 class="cmr-6">33</span><span
12617 class="cmtt-8">&#x00A0;</span><span
12618 class="cmtt-8">&#x00A0;</span>
12619 <br class="fancyvrb" /><a
12620 id="x1-123068r34"></a><span
12621 class="cmr-6">34</span><span
12622 class="cmtt-8">&#x00A0;</span><span
12623 class="cmtt-8">&#x00A0;</span><span
12624 class="cmtt-8">&#x00A0;</span><span
12625 class="cmtt-8">&#x00A0;</span><span
12626 class="cmtt-8">&#x00A0;</span><span
12627 class="cmtt-8">&#x00A0;</span><span
12628 class="cmtt-8">&#x00A0;</span><span
12629 class="cmtt-8">&#x00A0;</span><span
12630 class="cmtt-8">&#x00A0;</span><span
12631 class="cmtt-8">&#x00A0;</span><span
12632 class="cmtt-8">&#x00A0;</span><span
12633 class="cmtt-8">&#x00A0;</span><span
12634 class="cmtt-8">&#x00A0;}</span>
12635 <br class="fancyvrb" /><a
12636 id="x1-123070r35"></a><span
12637 class="cmr-6">35</span><span
12638 class="cmtt-8">&#x00A0;</span><span
12639 class="cmtt-8">&#x00A0;</span>
12640 <br class="fancyvrb" /><a
12641 id="x1-123072r36"></a><span
12642 class="cmr-6">36</span><span
12643 class="cmtt-8">&#x00A0;</span><span
12644 class="cmtt-8">&#x00A0;</span><span
12645 class="cmtt-8">&#x00A0;</span><span
12646 class="cmtt-8">&#x00A0;</span><span
12647 class="cmtt-8">&#x00A0;</span><span
12648 class="cmtt-8">&#x00A0;</span><span
12649 class="cmtt-8">&#x00A0;</span><span
12650 class="cmtt-8">&#x00A0;</span><span
12651 class="cmtt-8">&#x00A0;19)</span><span
12652 class="cmtt-8">&#x00A0;vector</span><span
12653 class="cmtt-8">&#x00A0;[v]</span><span
12654 class="cmtt-8">&#x00A0;element</span><span
12655 class="cmtt-8">&#x00A0;[x]</span><span
12656 class="cmtt-8">&#x00A0;=</span><span
12657 class="cmtt-8">&#x00A0;[y]</span>
12658 <br class="fancyvrb" /><a
12659 id="x1-123074r37"></a><span
12660 class="cmr-6">37</span><span
12661 class="cmtt-8">&#x00A0;</span><span
12662 class="cmtt-8">&#x00A0;</span>
12663 <br class="fancyvrb" /><a
12664 id="x1-123076r38"></a><span
12665 class="cmr-6">38</span><span
12666 class="cmtt-8">&#x00A0;</span><span
12667 class="cmtt-8">&#x00A0;</span><span
12668 class="cmtt-8">&#x00A0;</span><span
12669 class="cmtt-8">&#x00A0;</span><span
12670 class="cmtt-8">&#x00A0;</span><span
12671 class="cmtt-8">&#x00A0;</span><span
12672 class="cmtt-8">&#x00A0;}</span>
12673 </div>
12680 <h3 class="sectionHead"><span class="titlemark">10 </span> <a
12681 id="x1-12400010"></a>Tables</h3>
12682 <!--l. 6--><p class="noindent" >
12683 <h4 class="subsectionHead"><span class="titlemark">10.1 </span> <a
12684 id="x1-12500010.1"></a>floor1_inverse_dB_table</h4>
12685 <!--l. 8--><p class="noindent" >The vector <span
12686 class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the
12687 following values (read left to right then top to bottom):
12688 <!--l. 12--><p class="noindent" >
12689 <div class="fancyvrb" id="fancyvrb48">
12691 id="x1-125002r1"></a><span
12692 class="cmr-6">1</span><span
12693 class="cmtt-8">&#x00A0;</span><span
12694 class="cmtt-8">&#x00A0;</span><span
12695 class="cmtt-8">&#x00A0;</span><span
12696 class="cmtt-8">&#x00A0;1.0649863e-07,</span><span
12697 class="cmtt-8">&#x00A0;1.1341951e-07,</span><span
12698 class="cmtt-8">&#x00A0;1.2079015e-07,</span><span
12699 class="cmtt-8">&#x00A0;1.2863978e-07,</span>
12700 <br class="fancyvrb" /><a
12701 id="x1-125004r2"></a><span
12702 class="cmr-6">2</span><span
12703 class="cmtt-8">&#x00A0;</span><span
12704 class="cmtt-8">&#x00A0;</span><span
12705 class="cmtt-8">&#x00A0;</span><span
12706 class="cmtt-8">&#x00A0;1.3699951e-07,</span><span
12707 class="cmtt-8">&#x00A0;1.4590251e-07,</span><span
12708 class="cmtt-8">&#x00A0;1.5538408e-07,</span><span
12709 class="cmtt-8">&#x00A0;1.6548181e-07,</span>
12710 <br class="fancyvrb" /><a
12711 id="x1-125006r3"></a><span
12712 class="cmr-6">3</span><span
12713 class="cmtt-8">&#x00A0;</span><span
12714 class="cmtt-8">&#x00A0;</span><span
12715 class="cmtt-8">&#x00A0;</span><span
12716 class="cmtt-8">&#x00A0;1.7623575e-07,</span><span
12717 class="cmtt-8">&#x00A0;1.8768855e-07,</span><span
12718 class="cmtt-8">&#x00A0;1.9988561e-07,</span><span
12719 class="cmtt-8">&#x00A0;2.1287530e-07,</span>
12720 <br class="fancyvrb" /><a
12721 id="x1-125008r4"></a><span
12722 class="cmr-6">4</span><span
12723 class="cmtt-8">&#x00A0;</span><span
12724 class="cmtt-8">&#x00A0;</span><span
12725 class="cmtt-8">&#x00A0;</span><span
12726 class="cmtt-8">&#x00A0;2.2670913e-07,</span><span
12727 class="cmtt-8">&#x00A0;2.4144197e-07,</span><span
12728 class="cmtt-8">&#x00A0;2.5713223e-07,</span><span
12729 class="cmtt-8">&#x00A0;2.7384213e-07,</span>
12730 <br class="fancyvrb" /><a
12731 id="x1-125010r5"></a><span
12732 class="cmr-6">5</span><span
12733 class="cmtt-8">&#x00A0;</span><span
12734 class="cmtt-8">&#x00A0;</span><span
12735 class="cmtt-8">&#x00A0;</span><span
12736 class="cmtt-8">&#x00A0;2.9163793e-07,</span><span
12737 class="cmtt-8">&#x00A0;3.1059021e-07,</span><span
12738 class="cmtt-8">&#x00A0;3.3077411e-07,</span><span
12739 class="cmtt-8">&#x00A0;3.5226968e-07,</span>
12740 <br class="fancyvrb" /><a
12741 id="x1-125012r6"></a><span
12742 class="cmr-6">6</span><span
12743 class="cmtt-8">&#x00A0;</span><span
12744 class="cmtt-8">&#x00A0;</span><span
12745 class="cmtt-8">&#x00A0;</span><span
12746 class="cmtt-8">&#x00A0;3.7516214e-07,</span><span
12747 class="cmtt-8">&#x00A0;3.9954229e-07,</span><span
12748 class="cmtt-8">&#x00A0;4.2550680e-07,</span><span
12749 class="cmtt-8">&#x00A0;4.5315863e-07,</span>
12750 <br class="fancyvrb" /><a
12751 id="x1-125014r7"></a><span
12752 class="cmr-6">7</span><span
12753 class="cmtt-8">&#x00A0;</span><span
12754 class="cmtt-8">&#x00A0;</span><span
12755 class="cmtt-8">&#x00A0;</span><span
12756 class="cmtt-8">&#x00A0;4.8260743e-07,</span><span
12757 class="cmtt-8">&#x00A0;5.1396998e-07,</span><span
12758 class="cmtt-8">&#x00A0;5.4737065e-07,</span><span
12759 class="cmtt-8">&#x00A0;5.8294187e-07,</span>
12760 <br class="fancyvrb" /><a
12761 id="x1-125016r8"></a><span
12762 class="cmr-6">8</span><span
12763 class="cmtt-8">&#x00A0;</span><span
12764 class="cmtt-8">&#x00A0;</span><span
12765 class="cmtt-8">&#x00A0;</span><span
12766 class="cmtt-8">&#x00A0;6.2082472e-07,</span><span
12767 class="cmtt-8">&#x00A0;6.6116941e-07,</span><span
12768 class="cmtt-8">&#x00A0;7.0413592e-07,</span><span
12769 class="cmtt-8">&#x00A0;7.4989464e-07,</span>
12770 <br class="fancyvrb" /><a
12771 id="x1-125018r9"></a><span
12772 class="cmr-6">9</span><span
12773 class="cmtt-8">&#x00A0;</span><span
12774 class="cmtt-8">&#x00A0;</span><span
12775 class="cmtt-8">&#x00A0;</span><span
12776 class="cmtt-8">&#x00A0;7.9862701e-07,</span><span
12777 class="cmtt-8">&#x00A0;8.5052630e-07,</span><span
12778 class="cmtt-8">&#x00A0;9.0579828e-07,</span><span
12779 class="cmtt-8">&#x00A0;9.6466216e-07,</span>
12780 <br class="fancyvrb" /><a
12781 id="x1-125020r10"></a><span
12782 class="cmr-6">10</span><span
12783 class="cmtt-8">&#x00A0;</span><span
12784 class="cmtt-8">&#x00A0;</span><span
12785 class="cmtt-8">&#x00A0;</span><span
12786 class="cmtt-8">&#x00A0;1.0273513e-06,</span><span
12787 class="cmtt-8">&#x00A0;1.0941144e-06,</span><span
12788 class="cmtt-8">&#x00A0;1.1652161e-06,</span><span
12789 class="cmtt-8">&#x00A0;1.2409384e-06,</span>
12790 <br class="fancyvrb" /><a
12791 id="x1-125022r11"></a><span
12792 class="cmr-6">11</span><span
12793 class="cmtt-8">&#x00A0;</span><span
12794 class="cmtt-8">&#x00A0;</span><span
12795 class="cmtt-8">&#x00A0;</span><span
12796 class="cmtt-8">&#x00A0;1.3215816e-06,</span><span
12797 class="cmtt-8">&#x00A0;1.4074654e-06,</span><span
12798 class="cmtt-8">&#x00A0;1.4989305e-06,</span><span
12799 class="cmtt-8">&#x00A0;1.5963394e-06,</span>
12800 <br class="fancyvrb" /><a
12801 id="x1-125024r12"></a><span
12802 class="cmr-6">12</span><span
12803 class="cmtt-8">&#x00A0;</span><span
12804 class="cmtt-8">&#x00A0;</span><span
12805 class="cmtt-8">&#x00A0;</span><span
12806 class="cmtt-8">&#x00A0;1.7000785e-06,</span><span
12807 class="cmtt-8">&#x00A0;1.8105592e-06,</span><span
12808 class="cmtt-8">&#x00A0;1.9282195e-06,</span><span
12809 class="cmtt-8">&#x00A0;2.0535261e-06,</span>
12810 <br class="fancyvrb" /><a
12811 id="x1-125026r13"></a><span
12812 class="cmr-6">13</span><span
12813 class="cmtt-8">&#x00A0;</span><span
12814 class="cmtt-8">&#x00A0;</span><span
12815 class="cmtt-8">&#x00A0;</span><span
12816 class="cmtt-8">&#x00A0;2.1869758e-06,</span><span
12817 class="cmtt-8">&#x00A0;2.3290978e-06,</span><span
12818 class="cmtt-8">&#x00A0;2.4804557e-06,</span><span
12819 class="cmtt-8">&#x00A0;2.6416497e-06,</span>
12820 <br class="fancyvrb" /><a
12821 id="x1-125028r14"></a><span
12822 class="cmr-6">14</span><span
12823 class="cmtt-8">&#x00A0;</span><span
12824 class="cmtt-8">&#x00A0;</span><span
12825 class="cmtt-8">&#x00A0;</span><span
12826 class="cmtt-8">&#x00A0;2.8133190e-06,</span><span
12827 class="cmtt-8">&#x00A0;2.9961443e-06,</span><span
12828 class="cmtt-8">&#x00A0;3.1908506e-06,</span><span
12829 class="cmtt-8">&#x00A0;3.3982101e-06,</span>
12830 <br class="fancyvrb" /><a
12831 id="x1-125030r15"></a><span
12832 class="cmr-6">15</span><span
12833 class="cmtt-8">&#x00A0;</span><span
12834 class="cmtt-8">&#x00A0;</span><span
12835 class="cmtt-8">&#x00A0;</span><span
12836 class="cmtt-8">&#x00A0;3.6190449e-06,</span><span
12837 class="cmtt-8">&#x00A0;3.8542308e-06,</span><span
12838 class="cmtt-8">&#x00A0;4.1047004e-06,</span><span
12839 class="cmtt-8">&#x00A0;4.3714470e-06,</span>
12840 <br class="fancyvrb" /><a
12841 id="x1-125032r16"></a><span
12842 class="cmr-6">16</span><span
12843 class="cmtt-8">&#x00A0;</span><span
12844 class="cmtt-8">&#x00A0;</span><span
12845 class="cmtt-8">&#x00A0;</span><span
12846 class="cmtt-8">&#x00A0;4.6555282e-06,</span><span
12847 class="cmtt-8">&#x00A0;4.9580707e-06,</span><span
12848 class="cmtt-8">&#x00A0;5.2802740e-06,</span><span
12849 class="cmtt-8">&#x00A0;5.6234160e-06,</span>
12850 <br class="fancyvrb" /><a
12851 id="x1-125034r17"></a><span
12852 class="cmr-6">17</span><span
12853 class="cmtt-8">&#x00A0;</span><span
12854 class="cmtt-8">&#x00A0;</span><span
12855 class="cmtt-8">&#x00A0;</span><span
12856 class="cmtt-8">&#x00A0;5.9888572e-06,</span><span
12857 class="cmtt-8">&#x00A0;6.3780469e-06,</span><span
12858 class="cmtt-8">&#x00A0;6.7925283e-06,</span><span
12859 class="cmtt-8">&#x00A0;7.2339451e-06,</span>
12860 <br class="fancyvrb" /><a
12861 id="x1-125036r18"></a><span
12862 class="cmr-6">18</span><span
12863 class="cmtt-8">&#x00A0;</span><span
12864 class="cmtt-8">&#x00A0;</span><span
12865 class="cmtt-8">&#x00A0;</span><span
12866 class="cmtt-8">&#x00A0;7.7040476e-06,</span><span
12867 class="cmtt-8">&#x00A0;8.2047000e-06,</span><span
12868 class="cmtt-8">&#x00A0;8.7378876e-06,</span><span
12869 class="cmtt-8">&#x00A0;9.3057248e-06,</span>
12870 <br class="fancyvrb" /><a
12871 id="x1-125038r19"></a><span
12872 class="cmr-6">19</span><span
12873 class="cmtt-8">&#x00A0;</span><span
12874 class="cmtt-8">&#x00A0;</span><span
12875 class="cmtt-8">&#x00A0;</span><span
12876 class="cmtt-8">&#x00A0;9.9104632e-06,</span><span
12877 class="cmtt-8">&#x00A0;1.0554501e-05,</span><span
12878 class="cmtt-8">&#x00A0;1.1240392e-05,</span><span
12879 class="cmtt-8">&#x00A0;1.1970856e-05,</span>
12880 <br class="fancyvrb" /><a
12881 id="x1-125040r20"></a><span
12882 class="cmr-6">20</span><span
12883 class="cmtt-8">&#x00A0;</span><span
12884 class="cmtt-8">&#x00A0;</span><span
12885 class="cmtt-8">&#x00A0;</span><span
12886 class="cmtt-8">&#x00A0;1.2748789e-05,</span><span
12887 class="cmtt-8">&#x00A0;1.3577278e-05,</span><span
12888 class="cmtt-8">&#x00A0;1.4459606e-05,</span><span
12889 class="cmtt-8">&#x00A0;1.5399272e-05,</span>
12890 <br class="fancyvrb" /><a
12891 id="x1-125042r21"></a><span
12892 class="cmr-6">21</span><span
12893 class="cmtt-8">&#x00A0;</span><span
12894 class="cmtt-8">&#x00A0;</span><span
12895 class="cmtt-8">&#x00A0;</span><span
12896 class="cmtt-8">&#x00A0;1.6400004e-05,</span><span
12897 class="cmtt-8">&#x00A0;1.7465768e-05,</span><span
12898 class="cmtt-8">&#x00A0;1.8600792e-05,</span><span
12899 class="cmtt-8">&#x00A0;1.9809576e-05,</span>
12900 <br class="fancyvrb" /><a
12901 id="x1-125044r22"></a><span
12902 class="cmr-6">22</span><span
12903 class="cmtt-8">&#x00A0;</span><span
12904 class="cmtt-8">&#x00A0;</span><span
12905 class="cmtt-8">&#x00A0;</span><span
12906 class="cmtt-8">&#x00A0;2.1096914e-05,</span><span
12907 class="cmtt-8">&#x00A0;2.2467911e-05,</span><span
12908 class="cmtt-8">&#x00A0;2.3928002e-05,</span><span
12909 class="cmtt-8">&#x00A0;2.5482978e-05,</span>
12910 <br class="fancyvrb" /><a
12911 id="x1-125046r23"></a><span
12912 class="cmr-6">23</span><span
12913 class="cmtt-8">&#x00A0;</span><span
12914 class="cmtt-8">&#x00A0;</span><span
12915 class="cmtt-8">&#x00A0;</span><span
12916 class="cmtt-8">&#x00A0;2.7139006e-05,</span><span
12917 class="cmtt-8">&#x00A0;2.8902651e-05,</span><span
12918 class="cmtt-8">&#x00A0;3.0780908e-05,</span><span
12919 class="cmtt-8">&#x00A0;3.2781225e-05,</span>
12920 <br class="fancyvrb" /><a
12921 id="x1-125048r24"></a><span
12922 class="cmr-6">24</span><span
12923 class="cmtt-8">&#x00A0;</span><span
12924 class="cmtt-8">&#x00A0;</span><span
12925 class="cmtt-8">&#x00A0;</span><span
12926 class="cmtt-8">&#x00A0;3.4911534e-05,</span><span
12927 class="cmtt-8">&#x00A0;3.7180282e-05,</span><span
12928 class="cmtt-8">&#x00A0;3.9596466e-05,</span><span
12929 class="cmtt-8">&#x00A0;4.2169667e-05,</span>
12930 <br class="fancyvrb" /><a
12931 id="x1-125050r25"></a><span
12932 class="cmr-6">25</span><span
12933 class="cmtt-8">&#x00A0;</span><span
12934 class="cmtt-8">&#x00A0;</span><span
12935 class="cmtt-8">&#x00A0;</span><span
12936 class="cmtt-8">&#x00A0;4.4910090e-05,</span><span
12937 class="cmtt-8">&#x00A0;4.7828601e-05,</span><span
12938 class="cmtt-8">&#x00A0;5.0936773e-05,</span><span
12939 class="cmtt-8">&#x00A0;5.4246931e-05,</span>
12940 <br class="fancyvrb" /><a
12941 id="x1-125052r26"></a><span
12942 class="cmr-6">26</span><span
12943 class="cmtt-8">&#x00A0;</span><span
12944 class="cmtt-8">&#x00A0;</span><span
12945 class="cmtt-8">&#x00A0;</span><span
12946 class="cmtt-8">&#x00A0;5.7772202e-05,</span><span
12947 class="cmtt-8">&#x00A0;6.1526565e-05,</span><span
12948 class="cmtt-8">&#x00A0;6.5524908e-05,</span><span
12949 class="cmtt-8">&#x00A0;6.9783085e-05,</span>
12950 <br class="fancyvrb" /><a
12951 id="x1-125054r27"></a><span
12952 class="cmr-6">27</span><span
12953 class="cmtt-8">&#x00A0;</span><span
12954 class="cmtt-8">&#x00A0;</span><span
12955 class="cmtt-8">&#x00A0;</span><span
12956 class="cmtt-8">&#x00A0;7.4317983e-05,</span><span
12957 class="cmtt-8">&#x00A0;7.9147585e-05,</span><span
12958 class="cmtt-8">&#x00A0;8.4291040e-05,</span><span
12959 class="cmtt-8">&#x00A0;8.9768747e-05,</span>
12960 <br class="fancyvrb" /><a
12961 id="x1-125056r28"></a><span
12962 class="cmr-6">28</span><span
12963 class="cmtt-8">&#x00A0;</span><span
12964 class="cmtt-8">&#x00A0;</span><span
12965 class="cmtt-8">&#x00A0;</span><span
12966 class="cmtt-8">&#x00A0;9.5602426e-05,</span><span
12967 class="cmtt-8">&#x00A0;0.00010181521,</span><span
12968 class="cmtt-8">&#x00A0;0.00010843174,</span><span
12969 class="cmtt-8">&#x00A0;0.00011547824,</span>
12970 <br class="fancyvrb" /><a
12971 id="x1-125058r29"></a><span
12972 class="cmr-6">29</span><span
12973 class="cmtt-8">&#x00A0;</span><span
12974 class="cmtt-8">&#x00A0;</span><span
12975 class="cmtt-8">&#x00A0;</span><span
12976 class="cmtt-8">&#x00A0;0.00012298267,</span><span
12977 class="cmtt-8">&#x00A0;0.00013097477,</span><span
12978 class="cmtt-8">&#x00A0;0.00013948625,</span><span
12979 class="cmtt-8">&#x00A0;0.00014855085,</span>
12980 <br class="fancyvrb" /><a
12981 id="x1-125060r30"></a><span
12982 class="cmr-6">30</span><span
12983 class="cmtt-8">&#x00A0;</span><span
12984 class="cmtt-8">&#x00A0;</span><span
12985 class="cmtt-8">&#x00A0;</span><span
12986 class="cmtt-8">&#x00A0;0.00015820453,</span><span
12987 class="cmtt-8">&#x00A0;0.00016848555,</span><span
12988 class="cmtt-8">&#x00A0;0.00017943469,</span><span
12989 class="cmtt-8">&#x00A0;0.00019109536,</span>
12990 <br class="fancyvrb" /><a
12991 id="x1-125062r31"></a><span
12992 class="cmr-6">31</span><span
12993 class="cmtt-8">&#x00A0;</span><span
12994 class="cmtt-8">&#x00A0;</span><span
12995 class="cmtt-8">&#x00A0;</span><span
12996 class="cmtt-8">&#x00A0;0.00020351382,</span><span
12997 class="cmtt-8">&#x00A0;0.00021673929,</span><span
12998 class="cmtt-8">&#x00A0;0.00023082423,</span><span
12999 class="cmtt-8">&#x00A0;0.00024582449,</span>
13000 <br class="fancyvrb" /><a
13001 id="x1-125064r32"></a><span
13002 class="cmr-6">32</span><span
13003 class="cmtt-8">&#x00A0;</span><span
13004 class="cmtt-8">&#x00A0;</span><span
13005 class="cmtt-8">&#x00A0;</span><span
13006 class="cmtt-8">&#x00A0;0.00026179955,</span><span
13007 class="cmtt-8">&#x00A0;0.00027881276,</span><span
13008 class="cmtt-8">&#x00A0;0.00029693158,</span><span
13009 class="cmtt-8">&#x00A0;0.00031622787,</span>
13010 <br class="fancyvrb" /><a
13011 id="x1-125066r33"></a><span
13012 class="cmr-6">33</span><span
13013 class="cmtt-8">&#x00A0;</span><span
13014 class="cmtt-8">&#x00A0;</span><span
13015 class="cmtt-8">&#x00A0;</span><span
13016 class="cmtt-8">&#x00A0;0.00033677814,</span><span
13017 class="cmtt-8">&#x00A0;0.00035866388,</span><span
13018 class="cmtt-8">&#x00A0;0.00038197188,</span><span
13019 class="cmtt-8">&#x00A0;0.00040679456,</span>
13020 <br class="fancyvrb" /><a
13021 id="x1-125068r34"></a><span
13022 class="cmr-6">34</span><span
13023 class="cmtt-8">&#x00A0;</span><span
13024 class="cmtt-8">&#x00A0;</span><span
13025 class="cmtt-8">&#x00A0;</span><span
13026 class="cmtt-8">&#x00A0;0.00043323036,</span><span
13027 class="cmtt-8">&#x00A0;0.00046138411,</span><span
13028 class="cmtt-8">&#x00A0;0.00049136745,</span><span
13029 class="cmtt-8">&#x00A0;0.00052329927,</span>
13030 <br class="fancyvrb" /><a
13031 id="x1-125070r35"></a><span
13032 class="cmr-6">35</span><span
13033 class="cmtt-8">&#x00A0;</span><span
13034 class="cmtt-8">&#x00A0;</span><span
13035 class="cmtt-8">&#x00A0;</span><span
13036 class="cmtt-8">&#x00A0;0.00055730621,</span><span
13037 class="cmtt-8">&#x00A0;0.00059352311,</span><span
13038 class="cmtt-8">&#x00A0;0.00063209358,</span><span
13039 class="cmtt-8">&#x00A0;0.00067317058,</span>
13040 <br class="fancyvrb" /><a
13041 id="x1-125072r36"></a><span
13042 class="cmr-6">36</span><span
13043 class="cmtt-8">&#x00A0;</span><span
13044 class="cmtt-8">&#x00A0;</span><span
13045 class="cmtt-8">&#x00A0;</span><span
13046 class="cmtt-8">&#x00A0;0.00071691700,</span><span
13047 class="cmtt-8">&#x00A0;0.00076350630,</span><span
13048 class="cmtt-8">&#x00A0;0.00081312324,</span><span
13049 class="cmtt-8">&#x00A0;0.00086596457,</span>
13050 <br class="fancyvrb" /><a
13051 id="x1-125074r37"></a><span
13052 class="cmr-6">37</span><span
13053 class="cmtt-8">&#x00A0;</span><span
13054 class="cmtt-8">&#x00A0;</span><span
13055 class="cmtt-8">&#x00A0;</span><span
13056 class="cmtt-8">&#x00A0;0.00092223983,</span><span
13057 class="cmtt-8">&#x00A0;0.00098217216,</span><span
13058 class="cmtt-8">&#x00A0;0.0010459992,</span><span
13059 class="cmtt-8">&#x00A0;</span><span
13060 class="cmtt-8">&#x00A0;0.0011139742,</span>
13061 <br class="fancyvrb" /><a
13062 id="x1-125076r38"></a><span
13063 class="cmr-6">38</span><span
13064 class="cmtt-8">&#x00A0;</span><span
13065 class="cmtt-8">&#x00A0;</span><span
13066 class="cmtt-8">&#x00A0;</span><span
13067 class="cmtt-8">&#x00A0;0.0011863665,</span><span
13068 class="cmtt-8">&#x00A0;</span><span
13069 class="cmtt-8">&#x00A0;0.0012634633,</span><span
13070 class="cmtt-8">&#x00A0;</span><span
13071 class="cmtt-8">&#x00A0;0.0013455702,</span><span
13072 class="cmtt-8">&#x00A0;</span><span
13073 class="cmtt-8">&#x00A0;0.0014330129,</span>
13074 <br class="fancyvrb" /><a
13075 id="x1-125078r39"></a><span
13076 class="cmr-6">39</span><span
13077 class="cmtt-8">&#x00A0;</span><span
13078 class="cmtt-8">&#x00A0;</span><span
13079 class="cmtt-8">&#x00A0;</span><span
13080 class="cmtt-8">&#x00A0;0.0015261382,</span><span
13081 class="cmtt-8">&#x00A0;</span><span
13082 class="cmtt-8">&#x00A0;0.0016253153,</span><span
13083 class="cmtt-8">&#x00A0;</span><span
13084 class="cmtt-8">&#x00A0;0.0017309374,</span><span
13085 class="cmtt-8">&#x00A0;</span><span
13086 class="cmtt-8">&#x00A0;0.0018434235,</span>
13087 <br class="fancyvrb" /><a
13088 id="x1-125080r40"></a><span
13089 class="cmr-6">40</span><span
13090 class="cmtt-8">&#x00A0;</span><span
13091 class="cmtt-8">&#x00A0;</span><span
13092 class="cmtt-8">&#x00A0;</span><span
13093 class="cmtt-8">&#x00A0;0.0019632195,</span><span
13094 class="cmtt-8">&#x00A0;</span><span
13095 class="cmtt-8">&#x00A0;0.0020908006,</span><span
13096 class="cmtt-8">&#x00A0;</span><span
13097 class="cmtt-8">&#x00A0;0.0022266726,</span><span
13098 class="cmtt-8">&#x00A0;</span><span
13099 class="cmtt-8">&#x00A0;0.0023713743,</span>
13100 <br class="fancyvrb" /><a
13101 id="x1-125082r41"></a><span
13102 class="cmr-6">41</span><span
13103 class="cmtt-8">&#x00A0;</span><span
13104 class="cmtt-8">&#x00A0;</span><span
13105 class="cmtt-8">&#x00A0;</span><span
13106 class="cmtt-8">&#x00A0;0.0025254795,</span><span
13107 class="cmtt-8">&#x00A0;</span><span
13108 class="cmtt-8">&#x00A0;0.0026895994,</span><span
13109 class="cmtt-8">&#x00A0;</span><span
13110 class="cmtt-8">&#x00A0;0.0028643847,</span><span
13111 class="cmtt-8">&#x00A0;</span><span
13112 class="cmtt-8">&#x00A0;0.0030505286,</span>
13113 <br class="fancyvrb" /><a
13114 id="x1-125084r42"></a><span
13115 class="cmr-6">42</span><span
13116 class="cmtt-8">&#x00A0;</span><span
13117 class="cmtt-8">&#x00A0;</span><span
13118 class="cmtt-8">&#x00A0;</span><span
13119 class="cmtt-8">&#x00A0;0.0032487691,</span><span
13120 class="cmtt-8">&#x00A0;</span><span
13121 class="cmtt-8">&#x00A0;0.0034598925,</span><span
13122 class="cmtt-8">&#x00A0;</span><span
13123 class="cmtt-8">&#x00A0;0.0036847358,</span><span
13124 class="cmtt-8">&#x00A0;</span><span
13125 class="cmtt-8">&#x00A0;0.0039241906,</span>
13129 <br class="fancyvrb" /><a
13130 id="x1-125086r43"></a><span
13131 class="cmr-6">43</span><span
13132 class="cmtt-8">&#x00A0;</span><span
13133 class="cmtt-8">&#x00A0;</span><span
13134 class="cmtt-8">&#x00A0;</span><span
13135 class="cmtt-8">&#x00A0;0.0041792066,</span><span
13136 class="cmtt-8">&#x00A0;</span><span
13137 class="cmtt-8">&#x00A0;0.0044507950,</span><span
13138 class="cmtt-8">&#x00A0;</span><span
13139 class="cmtt-8">&#x00A0;0.0047400328,</span><span
13140 class="cmtt-8">&#x00A0;</span><span
13141 class="cmtt-8">&#x00A0;0.0050480668,</span>
13142 <br class="fancyvrb" /><a
13143 id="x1-125088r44"></a><span
13144 class="cmr-6">44</span><span
13145 class="cmtt-8">&#x00A0;</span><span
13146 class="cmtt-8">&#x00A0;</span><span
13147 class="cmtt-8">&#x00A0;</span><span
13148 class="cmtt-8">&#x00A0;0.0053761186,</span><span
13149 class="cmtt-8">&#x00A0;</span><span
13150 class="cmtt-8">&#x00A0;0.0057254891,</span><span
13151 class="cmtt-8">&#x00A0;</span><span
13152 class="cmtt-8">&#x00A0;0.0060975636,</span><span
13153 class="cmtt-8">&#x00A0;</span><span
13154 class="cmtt-8">&#x00A0;0.0064938176,</span>
13155 <br class="fancyvrb" /><a
13156 id="x1-125090r45"></a><span
13157 class="cmr-6">45</span><span
13158 class="cmtt-8">&#x00A0;</span><span
13159 class="cmtt-8">&#x00A0;</span><span
13160 class="cmtt-8">&#x00A0;</span><span
13161 class="cmtt-8">&#x00A0;0.0069158225,</span><span
13162 class="cmtt-8">&#x00A0;</span><span
13163 class="cmtt-8">&#x00A0;0.0073652516,</span><span
13164 class="cmtt-8">&#x00A0;</span><span
13165 class="cmtt-8">&#x00A0;0.0078438871,</span><span
13166 class="cmtt-8">&#x00A0;</span><span
13167 class="cmtt-8">&#x00A0;0.0083536271,</span>
13168 <br class="fancyvrb" /><a
13169 id="x1-125092r46"></a><span
13170 class="cmr-6">46</span><span
13171 class="cmtt-8">&#x00A0;</span><span
13172 class="cmtt-8">&#x00A0;</span><span
13173 class="cmtt-8">&#x00A0;</span><span
13174 class="cmtt-8">&#x00A0;0.0088964928,</span><span
13175 class="cmtt-8">&#x00A0;</span><span
13176 class="cmtt-8">&#x00A0;0.009474637,</span><span
13177 class="cmtt-8">&#x00A0;</span><span
13178 class="cmtt-8">&#x00A0;</span><span
13179 class="cmtt-8">&#x00A0;0.010090352,</span><span
13180 class="cmtt-8">&#x00A0;</span><span
13181 class="cmtt-8">&#x00A0;</span><span
13182 class="cmtt-8">&#x00A0;0.010746080,</span>
13183 <br class="fancyvrb" /><a
13184 id="x1-125094r47"></a><span
13185 class="cmr-6">47</span><span
13186 class="cmtt-8">&#x00A0;</span><span
13187 class="cmtt-8">&#x00A0;</span><span
13188 class="cmtt-8">&#x00A0;</span><span
13189 class="cmtt-8">&#x00A0;0.011444421,</span><span
13190 class="cmtt-8">&#x00A0;</span><span
13191 class="cmtt-8">&#x00A0;</span><span
13192 class="cmtt-8">&#x00A0;0.012188144,</span><span
13193 class="cmtt-8">&#x00A0;</span><span
13194 class="cmtt-8">&#x00A0;</span><span
13195 class="cmtt-8">&#x00A0;0.012980198,</span><span
13196 class="cmtt-8">&#x00A0;</span><span
13197 class="cmtt-8">&#x00A0;</span><span
13198 class="cmtt-8">&#x00A0;0.013823725,</span>
13199 <br class="fancyvrb" /><a
13200 id="x1-125096r48"></a><span
13201 class="cmr-6">48</span><span
13202 class="cmtt-8">&#x00A0;</span><span
13203 class="cmtt-8">&#x00A0;</span><span
13204 class="cmtt-8">&#x00A0;</span><span
13205 class="cmtt-8">&#x00A0;0.014722068,</span><span
13206 class="cmtt-8">&#x00A0;</span><span
13207 class="cmtt-8">&#x00A0;</span><span
13208 class="cmtt-8">&#x00A0;0.015678791,</span><span
13209 class="cmtt-8">&#x00A0;</span><span
13210 class="cmtt-8">&#x00A0;</span><span
13211 class="cmtt-8">&#x00A0;0.016697687,</span><span
13212 class="cmtt-8">&#x00A0;</span><span
13213 class="cmtt-8">&#x00A0;</span><span
13214 class="cmtt-8">&#x00A0;0.017782797,</span>
13215 <br class="fancyvrb" /><a
13216 id="x1-125098r49"></a><span
13217 class="cmr-6">49</span><span
13218 class="cmtt-8">&#x00A0;</span><span
13219 class="cmtt-8">&#x00A0;</span><span
13220 class="cmtt-8">&#x00A0;</span><span
13221 class="cmtt-8">&#x00A0;0.018938423,</span><span
13222 class="cmtt-8">&#x00A0;</span><span
13223 class="cmtt-8">&#x00A0;</span><span
13224 class="cmtt-8">&#x00A0;0.020169149,</span><span
13225 class="cmtt-8">&#x00A0;</span><span
13226 class="cmtt-8">&#x00A0;</span><span
13227 class="cmtt-8">&#x00A0;0.021479854,</span><span
13228 class="cmtt-8">&#x00A0;</span><span
13229 class="cmtt-8">&#x00A0;</span><span
13230 class="cmtt-8">&#x00A0;0.022875735,</span>
13231 <br class="fancyvrb" /><a
13232 id="x1-125100r50"></a><span
13233 class="cmr-6">50</span><span
13234 class="cmtt-8">&#x00A0;</span><span
13235 class="cmtt-8">&#x00A0;</span><span
13236 class="cmtt-8">&#x00A0;</span><span
13237 class="cmtt-8">&#x00A0;0.024362330,</span><span
13238 class="cmtt-8">&#x00A0;</span><span
13239 class="cmtt-8">&#x00A0;</span><span
13240 class="cmtt-8">&#x00A0;0.025945531,</span><span
13241 class="cmtt-8">&#x00A0;</span><span
13242 class="cmtt-8">&#x00A0;</span><span
13243 class="cmtt-8">&#x00A0;0.027631618,</span><span
13244 class="cmtt-8">&#x00A0;</span><span
13245 class="cmtt-8">&#x00A0;</span><span
13246 class="cmtt-8">&#x00A0;0.029427276,</span>
13247 <br class="fancyvrb" /><a
13248 id="x1-125102r51"></a><span
13249 class="cmr-6">51</span><span
13250 class="cmtt-8">&#x00A0;</span><span
13251 class="cmtt-8">&#x00A0;</span><span
13252 class="cmtt-8">&#x00A0;</span><span
13253 class="cmtt-8">&#x00A0;0.031339626,</span><span
13254 class="cmtt-8">&#x00A0;</span><span
13255 class="cmtt-8">&#x00A0;</span><span
13256 class="cmtt-8">&#x00A0;0.033376252,</span><span
13257 class="cmtt-8">&#x00A0;</span><span
13258 class="cmtt-8">&#x00A0;</span><span
13259 class="cmtt-8">&#x00A0;0.035545228,</span><span
13260 class="cmtt-8">&#x00A0;</span><span
13261 class="cmtt-8">&#x00A0;</span><span
13262 class="cmtt-8">&#x00A0;0.037855157,</span>
13263 <br class="fancyvrb" /><a
13264 id="x1-125104r52"></a><span
13265 class="cmr-6">52</span><span
13266 class="cmtt-8">&#x00A0;</span><span
13267 class="cmtt-8">&#x00A0;</span><span
13268 class="cmtt-8">&#x00A0;</span><span
13269 class="cmtt-8">&#x00A0;0.040315199,</span><span
13270 class="cmtt-8">&#x00A0;</span><span
13271 class="cmtt-8">&#x00A0;</span><span
13272 class="cmtt-8">&#x00A0;0.042935108,</span><span
13273 class="cmtt-8">&#x00A0;</span><span
13274 class="cmtt-8">&#x00A0;</span><span
13275 class="cmtt-8">&#x00A0;0.045725273,</span><span
13276 class="cmtt-8">&#x00A0;</span><span
13277 class="cmtt-8">&#x00A0;</span><span
13278 class="cmtt-8">&#x00A0;0.048696758,</span>
13279 <br class="fancyvrb" /><a
13280 id="x1-125106r53"></a><span
13281 class="cmr-6">53</span><span
13282 class="cmtt-8">&#x00A0;</span><span
13283 class="cmtt-8">&#x00A0;</span><span
13284 class="cmtt-8">&#x00A0;</span><span
13285 class="cmtt-8">&#x00A0;0.051861348,</span><span
13286 class="cmtt-8">&#x00A0;</span><span
13287 class="cmtt-8">&#x00A0;</span><span
13288 class="cmtt-8">&#x00A0;0.055231591,</span><span
13289 class="cmtt-8">&#x00A0;</span><span
13290 class="cmtt-8">&#x00A0;</span><span
13291 class="cmtt-8">&#x00A0;0.058820850,</span><span
13292 class="cmtt-8">&#x00A0;</span><span
13293 class="cmtt-8">&#x00A0;</span><span
13294 class="cmtt-8">&#x00A0;0.062643361,</span>
13295 <br class="fancyvrb" /><a
13296 id="x1-125108r54"></a><span
13297 class="cmr-6">54</span><span
13298 class="cmtt-8">&#x00A0;</span><span
13299 class="cmtt-8">&#x00A0;</span><span
13300 class="cmtt-8">&#x00A0;</span><span
13301 class="cmtt-8">&#x00A0;0.066714279,</span><span
13302 class="cmtt-8">&#x00A0;</span><span
13303 class="cmtt-8">&#x00A0;</span><span
13304 class="cmtt-8">&#x00A0;0.071049749,</span><span
13305 class="cmtt-8">&#x00A0;</span><span
13306 class="cmtt-8">&#x00A0;</span><span
13307 class="cmtt-8">&#x00A0;0.075666962,</span><span
13308 class="cmtt-8">&#x00A0;</span><span
13309 class="cmtt-8">&#x00A0;</span><span
13310 class="cmtt-8">&#x00A0;0.080584227,</span>
13311 <br class="fancyvrb" /><a
13312 id="x1-125110r55"></a><span
13313 class="cmr-6">55</span><span
13314 class="cmtt-8">&#x00A0;</span><span
13315 class="cmtt-8">&#x00A0;</span><span
13316 class="cmtt-8">&#x00A0;</span><span
13317 class="cmtt-8">&#x00A0;0.085821044,</span><span
13318 class="cmtt-8">&#x00A0;</span><span
13319 class="cmtt-8">&#x00A0;</span><span
13320 class="cmtt-8">&#x00A0;0.091398179,</span><span
13321 class="cmtt-8">&#x00A0;</span><span
13322 class="cmtt-8">&#x00A0;</span><span
13323 class="cmtt-8">&#x00A0;0.097337747,</span><span
13324 class="cmtt-8">&#x00A0;</span><span
13325 class="cmtt-8">&#x00A0;</span><span
13326 class="cmtt-8">&#x00A0;0.10366330,</span>
13327 <br class="fancyvrb" /><a
13328 id="x1-125112r56"></a><span
13329 class="cmr-6">56</span><span
13330 class="cmtt-8">&#x00A0;</span><span
13331 class="cmtt-8">&#x00A0;</span><span
13332 class="cmtt-8">&#x00A0;</span><span
13333 class="cmtt-8">&#x00A0;0.11039993,</span><span
13334 class="cmtt-8">&#x00A0;</span><span
13335 class="cmtt-8">&#x00A0;</span><span
13336 class="cmtt-8">&#x00A0;</span><span
13337 class="cmtt-8">&#x00A0;0.11757434,</span><span
13338 class="cmtt-8">&#x00A0;</span><span
13339 class="cmtt-8">&#x00A0;</span><span
13340 class="cmtt-8">&#x00A0;</span><span
13341 class="cmtt-8">&#x00A0;0.12521498,</span><span
13342 class="cmtt-8">&#x00A0;</span><span
13343 class="cmtt-8">&#x00A0;</span><span
13344 class="cmtt-8">&#x00A0;</span><span
13345 class="cmtt-8">&#x00A0;0.13335215,</span>
13346 <br class="fancyvrb" /><a
13347 id="x1-125114r57"></a><span
13348 class="cmr-6">57</span><span
13349 class="cmtt-8">&#x00A0;</span><span
13350 class="cmtt-8">&#x00A0;</span><span
13351 class="cmtt-8">&#x00A0;</span><span
13352 class="cmtt-8">&#x00A0;0.14201813,</span><span
13353 class="cmtt-8">&#x00A0;</span><span
13354 class="cmtt-8">&#x00A0;</span><span
13355 class="cmtt-8">&#x00A0;</span><span
13356 class="cmtt-8">&#x00A0;0.15124727,</span><span
13357 class="cmtt-8">&#x00A0;</span><span
13358 class="cmtt-8">&#x00A0;</span><span
13359 class="cmtt-8">&#x00A0;</span><span
13360 class="cmtt-8">&#x00A0;0.16107617,</span><span
13361 class="cmtt-8">&#x00A0;</span><span
13362 class="cmtt-8">&#x00A0;</span><span
13363 class="cmtt-8">&#x00A0;</span><span
13364 class="cmtt-8">&#x00A0;0.17154380,</span>
13365 <br class="fancyvrb" /><a
13366 id="x1-125116r58"></a><span
13367 class="cmr-6">58</span><span
13368 class="cmtt-8">&#x00A0;</span><span
13369 class="cmtt-8">&#x00A0;</span><span
13370 class="cmtt-8">&#x00A0;</span><span
13371 class="cmtt-8">&#x00A0;0.18269168,</span><span
13372 class="cmtt-8">&#x00A0;</span><span
13373 class="cmtt-8">&#x00A0;</span><span
13374 class="cmtt-8">&#x00A0;</span><span
13375 class="cmtt-8">&#x00A0;0.19456402,</span><span
13376 class="cmtt-8">&#x00A0;</span><span
13377 class="cmtt-8">&#x00A0;</span><span
13378 class="cmtt-8">&#x00A0;</span><span
13379 class="cmtt-8">&#x00A0;0.20720788,</span><span
13380 class="cmtt-8">&#x00A0;</span><span
13381 class="cmtt-8">&#x00A0;</span><span
13382 class="cmtt-8">&#x00A0;</span><span
13383 class="cmtt-8">&#x00A0;0.22067342,</span>
13384 <br class="fancyvrb" /><a
13385 id="x1-125118r59"></a><span
13386 class="cmr-6">59</span><span
13387 class="cmtt-8">&#x00A0;</span><span
13388 class="cmtt-8">&#x00A0;</span><span
13389 class="cmtt-8">&#x00A0;</span><span
13390 class="cmtt-8">&#x00A0;0.23501402,</span><span
13391 class="cmtt-8">&#x00A0;</span><span
13392 class="cmtt-8">&#x00A0;</span><span
13393 class="cmtt-8">&#x00A0;</span><span
13394 class="cmtt-8">&#x00A0;0.25028656,</span><span
13395 class="cmtt-8">&#x00A0;</span><span
13396 class="cmtt-8">&#x00A0;</span><span
13397 class="cmtt-8">&#x00A0;</span><span
13398 class="cmtt-8">&#x00A0;0.26655159,</span><span
13399 class="cmtt-8">&#x00A0;</span><span
13400 class="cmtt-8">&#x00A0;</span><span
13401 class="cmtt-8">&#x00A0;</span><span
13402 class="cmtt-8">&#x00A0;0.28387361,</span>
13403 <br class="fancyvrb" /><a
13404 id="x1-125120r60"></a><span
13405 class="cmr-6">60</span><span
13406 class="cmtt-8">&#x00A0;</span><span
13407 class="cmtt-8">&#x00A0;</span><span
13408 class="cmtt-8">&#x00A0;</span><span
13409 class="cmtt-8">&#x00A0;0.30232132,</span><span
13410 class="cmtt-8">&#x00A0;</span><span
13411 class="cmtt-8">&#x00A0;</span><span
13412 class="cmtt-8">&#x00A0;</span><span
13413 class="cmtt-8">&#x00A0;0.32196786,</span><span
13414 class="cmtt-8">&#x00A0;</span><span
13415 class="cmtt-8">&#x00A0;</span><span
13416 class="cmtt-8">&#x00A0;</span><span
13417 class="cmtt-8">&#x00A0;0.34289114,</span><span
13418 class="cmtt-8">&#x00A0;</span><span
13419 class="cmtt-8">&#x00A0;</span><span
13420 class="cmtt-8">&#x00A0;</span><span
13421 class="cmtt-8">&#x00A0;0.36517414,</span>
13422 <br class="fancyvrb" /><a
13423 id="x1-125122r61"></a><span
13424 class="cmr-6">61</span><span
13425 class="cmtt-8">&#x00A0;</span><span
13426 class="cmtt-8">&#x00A0;</span><span
13427 class="cmtt-8">&#x00A0;</span><span
13428 class="cmtt-8">&#x00A0;0.38890521,</span><span
13429 class="cmtt-8">&#x00A0;</span><span
13430 class="cmtt-8">&#x00A0;</span><span
13431 class="cmtt-8">&#x00A0;</span><span
13432 class="cmtt-8">&#x00A0;0.41417847,</span><span
13433 class="cmtt-8">&#x00A0;</span><span
13434 class="cmtt-8">&#x00A0;</span><span
13435 class="cmtt-8">&#x00A0;</span><span
13436 class="cmtt-8">&#x00A0;0.44109412,</span><span
13437 class="cmtt-8">&#x00A0;</span><span
13438 class="cmtt-8">&#x00A0;</span><span
13439 class="cmtt-8">&#x00A0;</span><span
13440 class="cmtt-8">&#x00A0;0.46975890,</span>
13441 <br class="fancyvrb" /><a
13442 id="x1-125124r62"></a><span
13443 class="cmr-6">62</span><span
13444 class="cmtt-8">&#x00A0;</span><span
13445 class="cmtt-8">&#x00A0;</span><span
13446 class="cmtt-8">&#x00A0;</span><span
13447 class="cmtt-8">&#x00A0;0.50028648,</span><span
13448 class="cmtt-8">&#x00A0;</span><span
13449 class="cmtt-8">&#x00A0;</span><span
13450 class="cmtt-8">&#x00A0;</span><span
13451 class="cmtt-8">&#x00A0;0.53279791,</span><span
13452 class="cmtt-8">&#x00A0;</span><span
13453 class="cmtt-8">&#x00A0;</span><span
13454 class="cmtt-8">&#x00A0;</span><span
13455 class="cmtt-8">&#x00A0;0.56742212,</span><span
13456 class="cmtt-8">&#x00A0;</span><span
13457 class="cmtt-8">&#x00A0;</span><span
13458 class="cmtt-8">&#x00A0;</span><span
13459 class="cmtt-8">&#x00A0;0.60429640,</span>
13460 <br class="fancyvrb" /><a
13461 id="x1-125126r63"></a><span
13462 class="cmr-6">63</span><span
13463 class="cmtt-8">&#x00A0;</span><span
13464 class="cmtt-8">&#x00A0;</span><span
13465 class="cmtt-8">&#x00A0;</span><span
13466 class="cmtt-8">&#x00A0;0.64356699,</span><span
13467 class="cmtt-8">&#x00A0;</span><span
13468 class="cmtt-8">&#x00A0;</span><span
13469 class="cmtt-8">&#x00A0;</span><span
13470 class="cmtt-8">&#x00A0;0.68538959,</span><span
13471 class="cmtt-8">&#x00A0;</span><span
13472 class="cmtt-8">&#x00A0;</span><span
13473 class="cmtt-8">&#x00A0;</span><span
13474 class="cmtt-8">&#x00A0;0.72993007,</span><span
13475 class="cmtt-8">&#x00A0;</span><span
13476 class="cmtt-8">&#x00A0;</span><span
13477 class="cmtt-8">&#x00A0;</span><span
13478 class="cmtt-8">&#x00A0;0.77736504,</span>
13479 <br class="fancyvrb" /><a
13480 id="x1-125128r64"></a><span
13481 class="cmr-6">64</span><span
13482 class="cmtt-8">&#x00A0;</span><span
13483 class="cmtt-8">&#x00A0;</span><span
13484 class="cmtt-8">&#x00A0;</span><span
13485 class="cmtt-8">&#x00A0;0.82788260,</span><span
13486 class="cmtt-8">&#x00A0;</span><span
13487 class="cmtt-8">&#x00A0;</span><span
13488 class="cmtt-8">&#x00A0;</span><span
13489 class="cmtt-8">&#x00A0;0.88168307,</span><span
13490 class="cmtt-8">&#x00A0;</span><span
13491 class="cmtt-8">&#x00A0;</span><span
13492 class="cmtt-8">&#x00A0;</span><span
13493 class="cmtt-8">&#x00A0;0.9389798,</span><span
13494 class="cmtt-8">&#x00A0;</span><span
13495 class="cmtt-8">&#x00A0;</span><span
13496 class="cmtt-8">&#x00A0;</span><span
13497 class="cmtt-8">&#x00A0;</span><span
13498 class="cmtt-8">&#x00A0;1.</span>
13499 </div>
13506 <h3 class="sectionHead"><span class="titlemark">A </span> <a
13507 id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3>
13508 <!--l. 6--><p class="noindent" >
13509 <h4 class="subsectionHead"><span class="titlemark">A.1 </span> <a
13510 id="x1-127000A.1"></a>Overview</h4>
13511 <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
13512 compressed audio packet data into file form.
13513 <!--l. 12--><p class="noindent" >The <a
13514 href="#x1-20001">Section&#x00A0;1<!--tex4ht:ref: vorbis:spec:intro --></a>, &#8220;<a
13515 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221; provides an overview of the construction of
13516 Vorbis audio packets.
13517 <!--l. 15--><p class="noindent" >The <a
13518 href="oggstream.html" >Ogg bitstream overview</a> and <a
13519 href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
13520 descriptions of Ogg transport streams. This specification document assumes a working
13521 knowledge of the concepts covered in these named backround documents. Please read them
13522 first.
13523 <!--l. 22--><p class="noindent" >
13524 <h5 class="subsubsectionHead"><span class="titlemark">A.1.1 </span> <a
13525 id="x1-128000A.1.1"></a>Restrictions</h5>
13526 <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
13527 streams in degenerate, unmultiplexed form only. That is:
13528 <ul class="itemize1">
13529 <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
13530 </li>
13531 <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
13532 (links).
13533 </li>
13534 <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
13535 per link)
13536 </li></ul>
13540 <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
13541 types into a multi-stream Ogg file. At the time this document was written, Ogg was
13542 becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
13543 audio. However, a &#8217;Vorbis I audio file&#8217; is taken to imply Vorbis audio existing alone
13544 within a degenerate Ogg stream. A compliant &#8217;Vorbis audio player&#8217; is not required to
13545 implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
13546 stream (naturally, application authors are encouraged to support full multiplexed Ogg
13547 handling).
13548 <!--l. 55--><p class="noindent" >
13549 <h5 class="subsubsectionHead"><span class="titlemark">A.1.2 </span> <a
13550 id="x1-129000A.1.2"></a>MIME type</h5>
13551 <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
13552 applications should use <span
13553 class="cmtt-12">application/ogg</span>, while visual media should use <span
13554 class="cmtt-12">video/ogg</span>, and audio
13555 <span
13556 class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
13557 encapsulated Vorbis should use <span
13558 class="cmtt-12">audio/vorbis </span>+ <span
13559 class="cmtt-12">audio/vorbis-config</span>.
13560 <!--l. 65--><p class="noindent" >
13561 <h4 class="subsectionHead"><span class="titlemark">A.2 </span> <a
13562 id="x1-130000A.2"></a>Encapsulation</h4>
13563 <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
13564 <ul class="itemize1">
13565 <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
13566 as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
13567 results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
13568 stream.
13569 </li>
13570 <li class="itemize">This first page is marked &#8217;beginning of stream&#8217; in the page flags.
13571 </li>
13572 <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
13573 more pages beginning on the second page of the logical stream. However many pages
13574 they span, the third header packet finishes the page on which it ends. The next (first
13575 audio) packet must begin on a fresh page.
13579 </li>
13580 <li class="itemize">The granule position of these first pages containing only headers is zero.
13581 </li>
13582 <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
13583 </li>
13584 <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
13585 </li>
13586 <li class="itemize">The last page is marked &#8217;end of stream&#8217; in the page flags.
13587 </li>
13588 <li class="itemize">Vorbis packets may span page boundaries.
13589 </li>
13590 <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
13591 samples (per channel; a stereo stream&#8217;s granule position does not increment at twice
13592 the speed of a mono stream).
13593 </li>
13594 <li class="itemize">The granule position of a page represents the end PCM sample position of the last
13595 packet <span
13596 class="cmti-12">completed </span>on that page. The &#8217;last PCM sample&#8217; is the last complete sample
13597 returned by decode, not an internal sample awaiting lapping with a subsequent block.
13598 A page that is entirely spanned by a single packet (that completes on a subsequent
13599 page) has no granule position, and the granule position is set to &#8217;-1&#8217;.
13600 <!--l. 126--><p class="noindent" >Note that the last decoded (fully lapped) PCM sample from a packet is not
13601 necessarily the middle sample from that block. If, eg, the current Vorbis packet
13602 encodes a &#8221;long block&#8221; and the next Vorbis packet encodes a &#8221;short block&#8221;, the last
13603 decodable sample from the current packet be at position (3*long_block_length/4) -
13604 (short_block_length/4).
13605 </li>
13606 <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
13607 started at position zero. Although the granule position belongs to the last completed
13608 packet on the page and a valid granule position must be positive, by inference it may
13609 indicate that the PCM position of the beginning of audio is positive or negative.
13610 <ul class="itemize2">
13611 <li class="itemize">A positive starting value simply indicates that this stream begins at some
13612 positive time offset, potentially within a larger program. This is a common case
13613 when connecting to the middle of broadcast stream.
13614 </li>
13615 <li class="itemize">A negative value indicates that output samples preceeding time zero should be
13619 discarded during decoding; this technique is used to allow sample-granularity
13620 editing of the stream start time of already-encoded Vorbis streams. The number
13621 of samples to be discarded must not exceed the overlap-add span of the first two
13622 audio packets.
13623 </li></ul>
13624 <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
13625 second finished audio packet must flush the page on which it appears and the
13626 third packet begin a fresh page. This allows the decoder to always be able to
13627 perform PCM position adjustments before needing to return any PCM data from
13628 synthesis, resulting in correct positioning information without any aditional seeking
13629 logic.
13630 <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a
13631 id="x1-131000A.2"></a><span
13632 class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
13633 incorrect positioning information for seeking operations at the very beginning of the
13634 stream.
13635 </li>
13636 <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
13637 final packet would normally return is used to end the stream on other than even frame
13638 boundaries. The difference between the actual available data returned and the
13639 declared amount indicates how many trailing samples to discard from the decoding
13640 process.
13641 </li></ul>
13645 <h3 class="sectionHead"><span class="titlemark">B </span> <a
13646 id="x1-132000B"></a>Vorbis encapsulation in RTP</h3>
13647 <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span
13648 class="cmti-12">&#8220;RTP Payload Format for Vorbis Encoded Audio&#8221; </span>for description of
13649 how to embed Vorbis audio in an RTP stream.
13656 <h3 class="likesectionHead"><a
13657 id="x1-133000B"></a>Colophon</h3>
13658 <!--l. 6--><p class="noindent" ><img
13659 src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics
13660 name="Vorbis_I_spec13x.png" src="xifish.pdf"
13662 <!--l. 10--><p class="noindent" >Ogg is a <a
13663 href="http://www.xiph.org/" >Xiph.org Foundation</a> effort to protect essential tenets of Internet multimedia from
13664 corporate hostage-taking; Open Source is the net&#8217;s greatest tool to keep everyone honest. See
13666 href="http://www.xiph.org/about.html" >About the Xiph.org Foundation</a> for details.
13667 <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
13668 Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.org
13669 Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
13670 and certify specification compliance.
13671 <!--l. 23--><p class="noindent" >Xiph.org&#8217;s Vorbis software CODEC implementation is distributed under a BSD-like license. This
13672 does not restrict third parties from distributing independent implementations of Vorbis software
13673 under other licenses.
13674 <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.org Foundation and their logos are trademarks (tm) of the <a
13675 href="http://www.xiph.org/" >Xiph.org
13676 Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.org Foundation. All rights
13677 reserved.
13678 <!--l. 33--><p class="noindent" >This document is set using <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span
13679 class="E">E</span>X</span></span>.
13683 <h3 class="likesectionHead"><a
13684 id="x1-134000B"></a>References</h3>
13685 <!--l. 123--><p class="noindent" >
13686 <div class="thebibliography">
13687 <p class="bibitem" ><span class="biblabel">
13688 [1]<span class="bibsp">&#x00A0;&#x00A0;&#x00A0;</span></span><a
13689 id="XSporer/Brandenburg/Edler"></a>T.&#x00A0;Sporer, K.&#x00A0;Brandenburg and
13690 B.&#x00A0;Edler, The use of multirate filter banks for coding of high quality digital audio,
13692 href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span
13693 class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
13694 </p>
13695 </div>
13697 </body></html>