More typo/layout fixes to the floor 1 spec (packet decode and curve computation ->
[platform/upstream/libvorbis.git] / doc / Vorbis_I_spec.html
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="2012-02-03 14:55:00"> 
11 <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css"> 
12 </head><body 
13 >
14 <div class="maketitle">
15                                                                                         
16
17                                                                                         
18                                                                                         
19
20                                                                                         
21
22 <h2 class="titleHead">Vorbis I specification</h2>
23 <div class="author" ><span 
24 class="cmr-17">Xiph.Org Foundation</span></div><br />
25 <div class="date" ><span 
26 class="cmr-17">February 3, 2012</span></div>
27 </div>
28 <h3 class="likesectionHead"><a 
29  id="x1-1000"></a>Contents</h3>
30 <div class="tableofcontents">
31 &#x00A0;<span class="sectionToc" >1 <a 
32 href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span>
33 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.1 <a 
34 href="#x1-30001.1" id="QQ2-1-3">Overview</a></span>
35 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.1 <a 
36 href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span>
37 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.2 <a 
38 href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span>
39 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.3 <a 
40 href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span>
41 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.4 <a 
42 href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span>
43 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.5 <a 
44 href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span>
45 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.6 <a 
46 href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span>
47 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.2 <a 
48 href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span>
49 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.1 <a 
50 href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span>
51 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.2 <a 
52 href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span>
53 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.3 <a 
54 href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span>
55                                                                                         
56
57                                                                                         
58 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.4 <a 
59 href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span>
60 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.5 <a 
61 href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span>
62 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.6 <a 
63 href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span>
64 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.3 <a 
65 href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span>
66 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.1 <a 
67 href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span>
68 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.2 <a 
69 href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span>
70 <br />&#x00A0;<span class="sectionToc" >2 <a 
71 href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span>
72 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >2.1 <a 
73 href="#x1-370002.1" id="QQ2-1-40">Overview</a></span>
74 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.1 <a 
75 href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span>
76 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.2 <a 
77 href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span>
78 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.3 <a 
79 href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span>
80 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.4 <a 
81 href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span>
82 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.5 <a 
83 href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span>
84 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.6 <a 
85 href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span>
86 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.7 <a 
87 href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span>
88 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.8 <a 
89 href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span>
90 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.9 <a 
91 href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span>
92 <br />&#x00A0;<span class="sectionToc" >3 <a 
93 href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span>
94 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.1 <a 
95 href="#x1-480003.1" id="QQ2-1-51">Overview</a></span>
96 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.1 <a 
97 href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span>
98 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.2 <a 
99 href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span>
100 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.2.1 <a 
101 href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span>
102 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.3 <a 
103 href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span>
104 <br />&#x00A0;<span class="sectionToc" >4 <a 
105 href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span>
106 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.1 <a 
107 href="#x1-590004.1" id="QQ2-1-64">Overview</a></span>
108 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.2 <a 
109 href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span>
110 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.1 <a 
111 href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span>
112 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.2 <a 
113 href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span>
114 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.3 <a 
115 href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span>
116                                                                                         
117
118                                                                                         
119 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.4 <a 
120 href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span>
121 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.3 <a 
122 href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span>
123 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.1 <a 
124 href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span>
125 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.2 <a 
126 href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span>
127 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.3 <a 
128 href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span>
129 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.4 <a 
130 href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span>
131 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.5 <a 
132 href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span>
133 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.6 <a 
134 href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span>
135 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.7 <a 
136 href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span>
137 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.8 <a 
138 href="#x1-790004.3.8" id="QQ2-1-85">overlap_add</a></span>
139 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.9 <a 
140 href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span>
141 <br />&#x00A0;<span class="sectionToc" >5 <a 
142 href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span>
143 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.1 <a 
144 href="#x1-820005.1" id="QQ2-1-88">Overview</a></span>
145 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.2 <a 
146 href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span>
147 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.1 <a 
148 href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span>
149 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.2 <a 
150 href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span>
151 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.3 <a 
152 href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span>
153 <br />&#x00A0;<span class="sectionToc" >6 <a 
154 href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span>
155 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.1 <a 
156 href="#x1-900006.1" id="QQ2-1-96">Overview</a></span>
157 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.2 <a 
158 href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span>
159 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.1 <a 
160 href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span>
161 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.2 <a 
162 href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span>
163 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.3 <a 
164 href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span>
165 <br />&#x00A0;<span class="sectionToc" >7 <a 
166 href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span>
167 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.1 <a 
168 href="#x1-960007.1" id="QQ2-1-102">Overview</a></span>
169 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.2 <a 
170 href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span>
171 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.1 <a 
172 href="#x1-980007.2.1" id="QQ2-1-104">model</a></span>
173 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.2 <a 
174 href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span>
175 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.3 <a 
176 href="#x1-1000007.2.3" id="QQ2-1-110">packet decode</a></span>
177                                                                                         
178
179                                                                                         
180 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.4 <a 
181 href="#x1-1010007.2.4" id="QQ2-1-111">curve computation</a></span>
182 <br />&#x00A0;<span class="sectionToc" >8 <a 
183 href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span>
184 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.1 <a 
185 href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span>
186 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.2 <a 
187 href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span>
188 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.3 <a 
189 href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span>
190 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.4 <a 
191 href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span>
192 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.5 <a 
193 href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span>
194 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.6 <a 
195 href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span>
196 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.1 <a 
197 href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span>
198 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.2 <a 
199 href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span>
200 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.3 <a 
201 href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span>
202 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.4 <a 
203 href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span>
204 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.5 <a 
205 href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span>
206 <br />&#x00A0;<span class="sectionToc" >9 <a 
207 href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span>
208 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.1 <a 
209 href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span>
210 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.2 <a 
211 href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span>
212 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.1 <a 
213 href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span>
214 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.2 <a 
215 href="#x1-1180009.2.2" id="QQ2-1-130">float32_unpack</a></span>
216 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.3 <a 
217 href="#x1-1190009.2.3" id="QQ2-1-131">lookup1_values</a></span>
218 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.4 <a 
219 href="#x1-1200009.2.4" id="QQ2-1-132">low_neighbor</a></span>
220 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.5 <a 
221 href="#x1-1210009.2.5" id="QQ2-1-133">high_neighbor</a></span>
222 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.6 <a 
223 href="#x1-1220009.2.6" id="QQ2-1-134">render_point</a></span>
224 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.7 <a 
225 href="#x1-1230009.2.7" id="QQ2-1-135">render_line</a></span>
226 <br />&#x00A0;<span class="sectionToc" >10 <a 
227 href="#x1-12400010" id="QQ2-1-136">Tables</a></span>
228 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >10.1 <a 
229 href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span>
230 <br />&#x00A0;<span class="sectionToc" >A <a 
231 href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span>
232 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.1 <a 
233 href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span>
234 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.1 <a 
235 href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span>
236 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.2 <a 
237 href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span>
238                                                                                         
239
240                                                                                         
241 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.2 <a 
242 href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span>
243 <br />&#x00A0;<span class="sectionToc" >B <a 
244 href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span>
245 </div>
246                                                                                         
247
248                                                                                         
249 <h3 class="sectionHead"><span class="titlemark">1.  </span> <a 
250  id="x1-20001"></a>Introduction and Description</h3>
251 <!--l. 6--><p class="noindent" >
252 <h4 class="subsectionHead"><span class="titlemark">1.1.  </span> <a 
253  id="x1-30001.1"></a>Overview</h4>
254 <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec&#8217;s construction. A bit-by-bit
255 specification appears beginning in <a 
256 href="#x1-580004">Section&#x00A0;4</a>, &#8220;<a 
257 href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>&#8221;. The later
258 sections assume a high-level understanding of the Vorbis decode process, which is provided
259 here.
260 <!--l. 15--><p class="noindent" >
261 <h5 class="subsubsectionHead"><span class="titlemark">1.1.1.  </span> <a 
262  id="x1-40001.1.1"></a>Application</h5>
263 <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder
264 flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At
265 the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same
266 league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT
267 rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower
268 and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel
269 representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
270 discrete channels).
271 <!--l. 29--><p class="noindent" >
272 <h5 class="subsubsectionHead"><span class="titlemark">1.1.2.  </span> <a 
273  id="x1-50001.1.2"></a>Classification</h5>
274 <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete
275 Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in
276 Vorbis II to offer better transient response and reproduction using a transform better suited to
277 localized time events.
278                                                                                         
279
280                                                                                         
281 <!--l. 37--><p class="noindent" >
282 <h5 class="subsubsectionHead"><span class="titlemark">1.1.3.  </span> <a 
283  id="x1-60001.1.3"></a>Assumptions</h5>
284 <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple,
285 low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does
286 require more working memory as Vorbis has no static probability model; the vector codebooks
287 used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis
288 bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to
289 which they are pre-decoded into a cache is the dominant factor in decoder memory
290 usage.
291 <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it
292 is solely a method of accepting input audio, dividing it into individual frames and
293 compressing these frames into raw, unformatted &#8217;packets&#8217;. The decoder then accepts
294 these raw packets in sequence, decodes them, synthesizes audio frames from them, and
295 reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form
296 variable bit rate (VBR) codec and packets have no minimum size, maximum size, or
297 fixed/expected size. Packets are designed that they may be truncated (or padded)
298 and remain decodable; this is not to be considered an error condition and is used
299 extensively in bitrate management in peeling. Both the transport mechanism and
300 decoder must allow that a packet may be any size, or end before or after packet decode
301 expects.
302 <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form
303 framing, sync, positioning and error correction in accordance with these design assumptions, such
304 as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this
305 document, we will assume that Vorbis is to be embedded in an Ogg stream specifically,
306 although this is by no means a requirement or fundamental assumption in the Vorbis
307 design.
308 <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a 
309 href="#x1-126000A">Section&#x00A0;A</a>,
310 &#8220;<a 
311 href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>&#8221;.
312 <!--l. 77--><p class="noindent" >
313 <h5 class="subsubsectionHead"><span class="titlemark">1.1.4.  </span> <a 
314  id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5>
315 <!--l. 79--><p class="noindent" >Vorbis&#8217; heritage is as a research CODEC and its current design reflects a desire to allow multiple
316 decades of continuous encoder improvement before running out of room within the codec
317 specification. For these reasons, configurable aspects of codec setup intentionally lean toward the
318 extreme of forward adaptive.
319                                                                                         
320
321                                                                                         
322 <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis
323 developer to keep in mind) is that the entire probability model of the codec, the Huffman and
324 VQ codebooks, is packed into the bitstream header along with extensive CODEC setup
325 parameters (often several hundred fields). This makes it impossible, as it would be with
326 MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin
327 decode at any frame in the stream without having previously fetched the codec setup
328 header.
329 <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a 
330  id="x1-80001.1.4"></a><span 
331 class="cmbx-12">Note:</span></span> Vorbis <span 
332 class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec
333 has been initialized/setup with the setup headers.
334 <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream
335 headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less
336 is recommended (and Xiph.Org&#8217;s Vorbis encoder follows this suggestion).
337 <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is
338 an unusual design and thus causes some amount of complaint among engineers as this runs
339 against current design trends (and also points out limitations in some existing software/interface
340 designs, such as Windows&#8217; ACM codec framework). However, we find that it does not
341 fundamentally limit Vorbis&#8217; suitable application space.
342 <!--l. 115--><p class="noindent" >
343 <h5 class="subsubsectionHead"><span class="titlemark">1.1.5.  </span> <a 
344  id="x1-90001.1.5"></a>Format Specification</h5>
345 <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets
346 that are correctly decoded by the reference Vorbis decoder described below may be considered
347 a proper Vorbis encoder. A decoder must faithfully and completely implement the
348 specification defined below (except where noted) to be considered a proper Vorbis
349 decoder.
350 <!--l. 123--><p class="noindent" >
351 <h5 class="subsubsectionHead"><span class="titlemark">1.1.6.  </span> <a 
352  id="x1-100001.1.6"></a>Hardware Profile</h5>
353                                                                                         
354
355                                                                                         
356 <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an
357 embedded design. For this reason, embedded designs are allowed to deviate in limited ways from
358 the &#8216;full&#8217; decode specification yet still be certified compliant. These optional omissions are
359 labelled in the spec where relevant.
360 <!--l. 131--><p class="noindent" >
361 <h4 class="subsectionHead"><span class="titlemark">1.2.  </span> <a 
362  id="x1-110001.2"></a>Decoder Configuration</h4>
363 <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that
364 perform specific functions in the decode pipeline. Each different component instance of a specific
365 type is semantically interchangeable; decoder configuration consists both of internal component
366 configuration, as well as arrangement of specific instances into a decode pipeline. Componentry
367 arrangement is roughly as follows:
368 <div class="center" 
369 >
370 <!--l. 141--><p class="noindent" >
371
372 <!--l. 142--><p class="noindent" ><img 
373 src="components.png" alt="PIC"  
374 >
375 <br /> <div class="caption" 
376 ><span class="id">Figure&#x00A0;1: </span><span  
377 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 -->
378 </div>
379 <!--l. 146--><p class="noindent" >
380 <h5 class="subsubsectionHead"><span class="titlemark">1.2.1.  </span> <a 
381  id="x1-120001.2.1"></a>Global Config</h5>
382 <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis
383 version (always &#8217;0&#8217; in Vorbis I), bitrate hints, and the lists of component instances. All other
384 configuration is in the context of specific components.
385 <!--l. 152--><p class="noindent" >
386 <h5 class="subsubsectionHead"><span class="titlemark">1.2.2.  </span> <a 
387  id="x1-130001.2.2"></a>Mode</h5>
388                                                                                         
389
390                                                                                         
391 <!--l. 154--><p class="noindent" >Each Vorbis frame is coded according to a master &#8217;mode&#8217;. A bitstream may use one or many
392 modes.
393 <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible
394 methods with the intention of choosing a method best suited to that frame. Different
395 modes are, e.g. how frame size is changed from frame to frame. The mode number of a
396 frame serves as a top level configuration switch for all other specific aspects of frame
397 decode.
398 <!--l. 164--><p class="noindent" >A &#8217;mode&#8217; configuration consists of a frame size setting, window type (always 0, the Vorbis
399 window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping
400 number. The mapping number specifies which mapping configuration instance to use for low-level
401 packet decode and synthesis.
402 <!--l. 171--><p class="noindent" >
403 <h5 class="subsubsectionHead"><span class="titlemark">1.2.3.  </span> <a 
404  id="x1-140001.2.3"></a>Mapping</h5>
405 <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of &#8217;submaps&#8217; that bundle sets
406 of channel vectors together for grouped encoding and decoding. These submaps are
407 not references to external components; the submap list is internal and specific to a
408 mapping.
409 <!--l. 178--><p class="noindent" >A &#8217;submap&#8217; is a configuration/grouping that applies to a subset of floor and residue vectors
410 within a mapping. The submap functions as a last layer of indirection such that specific special
411 floor or residue settings can be applied not only to all the vectors in a given mode, but also
412 specific vectors in a specific mode. Each submap specifies the proper floor and residue
413 instance number to use for decoding that submap&#8217;s spectral floor and spectral residue
414 vectors.
415 <!--l. 186--><p class="noindent" >As an example:
416 <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth
417 channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a
418 full-spectrum version of it as with the other channels. The submapping mechanism can be used
419 to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only
420 representation to the bass channel, thus saving space. In this example, channels 0-4 belong to
421 submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which
422 uses a bass-only representation.
423                                                                                         
424
425                                                                                         
426 <!--l. 199--><p class="noindent" >
427 <h5 class="subsubsectionHead"><span class="titlemark">1.2.4.  </span> <a 
428  id="x1-150001.2.4"></a>Floor</h5>
429 <!--l. 201--><p class="noindent" >Vorbis encodes a spectral &#8217;floor&#8217; vector for each PCM channel. This vector is a low-resolution
430 representation of the audio spectrum for the given channel in the current frame, generally used
431 akin to a whitening filter. It is named a &#8217;floor&#8217; because the Xiph.Org reference encoder has
432 historically used it as a unit-baseline for spectral resolution.
433 <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB
434 amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear
435 interpolated representation on a dB amplitude scale and linear frequency scale. The two floors
436 are semantically interchangeable in encoding/decoding. However, floor type 1 provides more
437 stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and
438 high bitrate modes. Floor 1 is also considerably less expensive to decode than floor
439 0.
440 <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis
441 encoder past Xiph.Org&#8217;s own beta 4 makes use of floor 0.
442 <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy
443 coding to save space. For this reason, a floor configuration generally refers to multiple
444 codebooks in the codebook component list. Entropy coding is thus provided as an
445 abstraction, and each floor instance may choose from any and all available codebooks when
446 coding/decoding.
447 <!--l. 230--><p class="noindent" >
448 <h5 class="subsubsectionHead"><span class="titlemark">1.2.5.  </span> <a 
449  id="x1-160001.2.5"></a>Residue</h5>
450 <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been
451 subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector
452 quantization according to one of three specific packing/coding algorithms numbered
453 0 through 2. The packing algorithm details are configured by residue instance. As
454 with the floor components, the final VQ/entropy encoding is provided by external
455 codebook instances and each residue instance may choose from any and all available
456 codebooks.
457 <!--l. 241--><p class="noindent" >
458                                                                                         
459
460                                                                                         
461 <h5 class="subsubsectionHead"><span class="titlemark">1.2.6.  </span> <a 
462  id="x1-170001.2.6"></a>Codebooks</h5>
463 <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use
464 the entropy-decoded integer value as an offset into an index of output value vectors, returning
465 the indicated vector of values.
466 <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree
467 representation. This tree is tightly packed using one of several methods, depending on whether
468 codeword lengths are ordered or unordered, or the tree is sparse.
469 <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly,
470 the vector index is encoded as a single list of values of possible values that are then permuted
471 into a list of n-dimensional rows (lattice VQ).
472 <!--l. 260--><p class="noindent" >
473 <h4 class="subsectionHead"><span class="titlemark">1.3.  </span> <a 
474  id="x1-180001.3"></a>High-level Decode Process</h4>
475 <!--l. 262--><p class="noindent" >
476 <h5 class="subsubsectionHead"><span class="titlemark">1.3.1.  </span> <a 
477  id="x1-190001.3.1"></a>Decode Setup</h5>
478 <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the
479 stream to be decoded. Vorbis uses three header packets; all are required, in-order, by
480 this specification. Once set up, decode may begin at any audio packet belonging to
481 the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio
482 packets.
483 <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup
484 header.
485 <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a 
486  id="x1-200001.3.1"></a><span 
487 class="cmbx-12">Identification Header</span></span>
488 The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio
489 characteristics of the stream such as sample rate and number of channels.
490                                                                                         
491
492                                                                                         
493 <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a 
494  id="x1-210001.3.1"></a><span 
495 class="cmbx-12">Comment Header</span></span>
496 The comment header includes user text comments (&#8220;tags&#8221;) and a vendor string for the
497 application/library that produced the bitstream. The encoding and proper use of the comment
498 header is described in <a 
499 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a 
500 href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
501 <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a 
502  id="x1-220001.3.1"></a><span 
503 class="cmbx-12">Setup Header</span></span>
504 The setup header includes extensive CODEC setup information as well as the complete VQ and
505 Huffman codebooks needed for decode.
506 <!--l. 289--><p class="noindent" >
507 <h5 class="subsubsectionHead"><span class="titlemark">1.3.2.  </span> <a 
508  id="x1-230001.3.2"></a>Decode Procedure</h5>
509 <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same.
510       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
511    1. </dt><dd 
512 class="enumerate-enumitem">decode packet type flag
513       </dd><dt class="enumerate-enumitem">
514    2. </dt><dd 
515 class="enumerate-enumitem">decode mode number
516       </dd><dt class="enumerate-enumitem">
517    3. </dt><dd 
518 class="enumerate-enumitem">decode window shape (long windows only)
519       </dd><dt class="enumerate-enumitem">
520    4. </dt><dd 
521 class="enumerate-enumitem">decode floor
522       </dd><dt class="enumerate-enumitem">
523    5. </dt><dd 
524 class="enumerate-enumitem">decode residue into residue vectors
525       </dd><dt class="enumerate-enumitem">
526    6. </dt><dd 
527 class="enumerate-enumitem">inverse channel coupling of residue vectors
528       </dd><dt class="enumerate-enumitem">
529    7. </dt><dd 
530 class="enumerate-enumitem">generate floor curve from decoded floor data
531       </dd><dt class="enumerate-enumitem">
532    8. </dt><dd 
533 class="enumerate-enumitem">compute dot product of floor and residue, producing audio spectrum vector
534       </dd><dt class="enumerate-enumitem">
535    9. </dt><dd 
536 class="enumerate-enumitem">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis
537       I
538                                                                                         
539
540                                                                                         
541       </dd><dt class="enumerate-enumitem">
542   10. </dt><dd 
543 class="enumerate-enumitem">overlap/add left-hand output of transform with right-hand output of previous frame
544       </dd><dt class="enumerate-enumitem">
545   11. </dt><dd 
546 class="enumerate-enumitem">store right hand-data from transform of current frame for future lapping
547       </dd><dt class="enumerate-enumitem">
548   12. </dt><dd 
549 class="enumerate-enumitem">if not first frame, return results of overlap/add as audio result of current frame</dd></dl>
550 <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can
551 take advantage of symmetries in the MDCT to store the right-hand transform data of a partial
552 MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before
553 overlap/add with the next frame. This optimization produces entirely equivalent output and is
554 naturally perfectly legal. The decoder must be <span 
555 class="cmti-12">entirely mathematically equivalent </span>to the
556 specification, it need not be a literal semantic implementation.
557 <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a 
558  id="x1-240001.3.2"></a><span 
559 class="cmbx-12">Packet type decode</span></span>
560 Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis
561 headers described above. The fourth packet type marks an audio packet. All other packet types
562 are reserved; packets marked with a reserved type should be ignored.
563 <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
564 audio packet decode is to read and verify the packet type; <span 
565 class="cmti-12">a non-audio packet when audio is</span>
566 <span 
567 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
568 <span 
569 class="cmti-12">packet and not attempt decoding it to audio</span>.
570 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a 
571  id="x1-250001.3.2"></a><span 
572 class="cmbx-12">Mode decode</span></span>
573 Vorbis allows an encoder to set up multiple, numbered packet &#8217;modes&#8217;, as described earlier, all of
574 which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct
575 offset into the mode instance index.
576 <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a 
577  id="x1-260001.3.2"></a><span 
578 class="cmbx-12">Window shape decode (long windows only)</span></span>
579 Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I,
580 legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis
581 handles channels as independent vectors and these frame sizes are in samples per
582 channel.
583                                                                                         
584
585                                                                                         
586 <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next,
587 avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed
588 according to MDCT requirements, overlapped 50% with the output of the previous frame and
589 added. The window shape assures seamless reconstruction.
590 <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows:
591 <div class="center" 
592 >
593 <!--l. 356--><p class="noindent" >
594
595 <!--l. 357--><p class="noindent" ><img 
596 src="window1.png" alt="PIC"  
597 >
598 <br /> <div class="caption" 
599 ><span class="id">Figure&#x00A0;2: </span><span  
600 class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 -->
601 </div>
602 <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
603 <div class="center" 
604 >
605 <!--l. 364--><p class="noindent" >
606
607 <!--l. 365--><p class="noindent" ><img 
608 src="window2.png" alt="PIC"  
609 >
610 <br /> <div class="caption" 
611 ><span class="id">Figure&#x00A0;3: </span><span  
612 class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 -->
613 </div>
614 <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
615 seamless lapping as above. It is possible to correctly infer window shape to be applied to the
616 current window from knowing the sizes of the current, previous and next window. It is legal for a
617 decoder to use this method. However, in the case of a long window (short windows require no
618 modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although
619 not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to
620 the point of lapping entirely independently of any other packet, allowing easier abstraction of
621 decode layers as well as allowing a greater level of easy parallelism in encode and
622 decode.
623 <!--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 
624 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
625 Vorbis windows all use the slope function
626 <center class="math-display" >
627 <img 
628 src="Vorbis_I_spec0x.png" alt="y = sin (.5 &lowast; &pi; sin2((x + .5)&#x2215;n &lowast; &pi;)).
629                                                                                         
630
631                                                                                         
632 " class="math-display" ></center>
633 <!--l. 385--><p class="nopar" >
634 <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a 
635  id="x1-270001.3.2"></a><span 
636 class="cmbx-12">floor decode</span></span>
637 Each floor is encoded/decoded in channel order, however each floor belongs to a &#8217;submap&#8217; that
638 specifies which floor configuration to use. All floors are decoded before residue decode
639 begins.
640 <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a 
641  id="x1-280001.3.2"></a><span 
642 class="cmbx-12">residue decode</span></span>
643 Although the number of residue vectors equals the number of channels, channel coupling may
644 mean that the raw residue vectors extracted during decode do not map directly to specific
645 channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or
646 angle. The coupling relationships are described in the codec setup and may differ from frame to
647 frame, due to different mode numbers.
648 <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from
649 submap 0 through n-1. This differs from floors which are coded using a configuration provided by
650 submap number, but are coded individually in channel order.
651 <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a 
652  id="x1-290001.3.2"></a><span 
653 class="cmbx-12">inverse channel coupling</span></span>
654 A detailed discussion of stereo in the Vorbis codec can be found in the document
655 <a 
656 href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo
657 coupling, but the stereo document also gives a good overview of the generic coupling
658 mechanism.
659 <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a
660 pair at a time in the order and using the vectors specified in the current mapping
661 configuration. The decoupling operation is the same for all pairs, converting square polar
662 representation (where one vector is magnitude and the second angle) back to Cartesian
663 representation.
664 <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors
665 represent the fine spectral detail of each output channel.
666                                                                                         
667
668                                                                                         
669 <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a 
670  id="x1-300001.3.2"></a><span 
671 class="cmbx-12">generate floor curve</span></span>
672 The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to
673 generate the output curve when the floor data is decoded from the raw packet, or it
674 can be generated after inverse coupling and applied to the spectral residue directly,
675 combining generation and the dot product into one step and eliminating some working
676 space.
677 <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied
678 (dot product) by the linear-range, linear-domain spectral residue.
679 <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a 
680  id="x1-310001.3.2"></a><span 
681 class="cmbx-12">compute floor/residue dot product</span></span>
682 This step is straightforward; for each output channel, the decoder multiplies the floor curve and
683 residue vectors element by element, producing the finished audio spectrum of each
684 channel.
685 <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
686 implementation might be to assume that a 32 bit fixed-point representation for floor and
687 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
688 in all cases because it happens to mostly work with the current Xiph.Org reference
689 encoder.
690 <!--l. 462--><p class="noindent" >However, floor vector values can span <span 
691 class="cmsy-10x-x-120">&sim;</span>140dB (<span 
692 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
693 vector should represent a minimum of 120dB (<span 
694 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
695 bit PCM device. For the residue vector to represent full scale if the floor is nailed
696 to <span 
697 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
698 full scale if the floor is nailed at 0dB, it must be able to represent <span 
699 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
700 Thus, in order to handle full range dynamics, a residue vector may span <span 
701 class="cmsy-10x-x-120">&minus;</span>140dB to
702 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
703 residue vector must be able to represent a 48 bit range and the dot product must
704 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
705 achieved using large (64 bit or larger) integers, or implementing a movable binary point
706 representation.
707 <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a 
708  id="x1-320001.3.2"></a><span 
709 class="cmbx-12">inverse monolithic transform (MDCT)</span></span>
710 The audio spectrum is converted back into time domain PCM audio via an inverse Modified
711 Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in
712 <span class="cite">[<a 
713 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
714 <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be
715                                                                                         
716
717                                                                                         
718 lapped with surrounding frames using an appropriate window (such as the Vorbis window) before
719 the MDCT can be considered orthogonal.
720 <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a 
721  id="x1-330001.3.2"></a><span 
722 class="cmbx-12">overlap/add data</span></span>
723 Windowed MDCT output is overlapped and added with the right hand data of the previous
724 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
725 current window (as illustrated in the window overlap diagram). At this point, the audio data
726 between the center of the previous frame and the center of the current frame is now finished and
727 ready to be returned.
728 <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a 
729  id="x1-340001.3.2"></a><span 
730 class="cmbx-12">cache right hand data</span></span>
731 The decoder must cache the right hand portion of the current frame to be lapped with the left
732 hand portion of the next frame.
733 <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a 
734  id="x1-350001.3.2"></a><span 
735 class="cmbx-12">return finished audio data</span></span>
736 The overlapped portion produced from overlapping the previous and current frame data
737 is finished data to be returned by the decoder. This data spans from the center of
738 the previous window to the center of the current window. In the case of same-sized
739 windows, the amount of data to return is one-half block consisting of and only of the
740 overlapped portions. When overlapping a short and long window, much of the returned
741 range is not actually overlap. This does not damage transform orthogonality. Pay
742 attention however to returning the correct data range; the amount of data to be returned
743 is:
744 <!--l. 519--><p class="noindent" >
745 <div class="fancyvrb" id="fancyvrb1">
746 <a 
747  id="x1-35002r1"></a><span 
748 class="cmr-6">1</span><span 
749 class="cmtt-8">&#x00A0;</span><span 
750 class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
751 </div>
752 <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
753 <!--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
754 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
755 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
756                                                                                         
757
758                                                                                         
759                                                                                         
760
761                                                                                         
762 <h3 class="sectionHead"><span class="titlemark">2.  </span> <a 
763  id="x1-360002"></a>Bitpacking Convention</h3>
764 <!--l. 6--><p class="noindent" >
765 <h4 class="subsectionHead"><span class="titlemark">2.1.  </span> <a 
766  id="x1-370002.1"></a>Overview</h4>
767 <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
768 integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
769 encoder and then read one-by-one in the same monotonically increasing order by the decoder.
770 Most current binary storage arrangements group bits into a native word size of eight bits
771 (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
772 bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
773 representation in fixed-width words.
774 <!--l. 19--><p class="noindent" >
775 <h5 class="subsubsectionHead"><span class="titlemark">2.1.1.  </span> <a 
776  id="x1-380002.1.1"></a>octets, bytes and words</h5>
777 <!--l. 21--><p class="noindent" >In most contemporary architectures, a &#8217;byte&#8217; is synonymous with an &#8217;octet&#8217;, that is, eight bits.
778 This has not always been the case; seven, ten, eleven and sixteen bit &#8217;bytes&#8217; have been used.
779 For purposes of the bitpacking convention, a byte implies the native, smallest integer
780 storage representation offered by a platform. On modern platforms, this is generally
781 assumed to be eight bits (not necessarily because of the processor but because of the
782 filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
783 atom of storage). A &#8217;word&#8217; is an integer size that is a grouped multiple of this smallest
784 size.
785 <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a &#8217;byte&#8217; to be an octet (eight bits) and a word
786 to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
787 bitpacking convention is still well defined for any native byte size; Vorbis uses the native
788 bit-width of a given storage system. This document assumes that a byte is one octet for purposes
789 of example.
790 <!--l. 39--><p class="noindent" >
791                                                                                         
792
793                                                                                         
794 <h5 class="subsubsectionHead"><span class="titlemark">2.1.2.  </span> <a 
795  id="x1-390002.1.2"></a>bit order</h5>
796 <!--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
797 storing the two&#8217;s complement integer value +1. A byte&#8217;s &#8217;most significant&#8217; bit (MSb) is at the
798 opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span 
799 class="cmmi-12">n </span>(<span 
800 class="cmmi-12">n </span>= 7 in an
801 octet) for the MSb.
802 <!--l. 50--><p class="noindent" >
803 <h5 class="subsubsectionHead"><span class="titlemark">2.1.3.  </span> <a 
804  id="x1-400002.1.3"></a>byte order</h5>
805 <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
806 common ones are 3-2-1-0 (&#8217;big endian&#8217; or &#8217;most significant byte first&#8217; in which the
807 highest-valued byte comes first), 0-1-2-3 (&#8217;little endian&#8217; or &#8217;least significant byte first&#8217; in
808 which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (&#8217;mixed
809 endian&#8217;).
810 <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
811 word, level, thus host word ordering is of a concern only during optimization when writing high
812 performance code that operates on a word of storage at a time rather than by byte.
813 Logically, bytes are always coded and decoded in order from byte zero through byte
814 <span 
815 class="cmmi-12">n</span>.
816 <!--l. 68--><p class="noindent" >
817 <h5 class="subsubsectionHead"><span class="titlemark">2.1.4.  </span> <a 
818  id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
819 <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
820 wide, into packets. These integer fields are not aligned to the boundaries of the byte
821 representation; the next field is written at the bit position at which the previous field
822 ends.
823 <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
824 bitstream first, followed by next least significant bit, etc, until the requested number of bits
825 have been coded. When packing the bits into bytes, the encoder begins by placing
826 the LSb of the integer to be written into the least significant unused bit position of
827 the destination byte, followed by the next-least significant bit of the source integer
828 and so on up to the requested number of bits. When all bits of the destination byte
829 have been filled, encoding continues by zeroing all bits of the next byte and writing
830 the next bit into the bit position 0 of that byte. Decoding follows the same process
831                                                                                         
832
833                                                                                         
834 as encoding, but by reading bits from the byte stream and reassembling them into
835 integers.
836 <!--l. 90--><p class="noindent" >
837 <h5 class="subsubsectionHead"><span class="titlemark">2.1.5.  </span> <a 
838  id="x1-420002.1.5"></a>signedness</h5>
839 <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
840 given decode context. That is, the three bit binary pattern &#8217;b111&#8217; can be taken to represent
841 either &#8217;seven&#8217; as an unsigned integer, or &#8217;-1&#8217; as a signed, two&#8217;s complement integer. The
842 encoder and decoder are responsible for knowing if fields are to be treated as signed or
843 unsigned.
844 <!--l. 101--><p class="noindent" >
845 <h5 class="subsubsectionHead"><span class="titlemark">2.1.6.  </span> <a 
846  id="x1-430002.1.6"></a>coding example</h5>
847 <!--l. 103--><p class="noindent" >Code the 4 bit integer value &#8217;12&#8217; [b1100] into an empty bytestream. Bytestream result:
848 <!--l. 106--><p class="noindent" >
849 <div class="fancyvrb" id="fancyvrb2">
850 <a 
851  id="x1-43002r1"></a><span 
852 class="cmr-6">1</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><span 
866 class="cmtt-8">&#x00A0;</span><span 
867 class="cmtt-8">&#x00A0;</span><span 
868 class="cmtt-8">&#x00A0;|</span>
869 <br class="fancyvrb" /><a 
870  id="x1-43004r2"></a><span 
871 class="cmr-6">2</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;</span><span 
885 class="cmtt-8">&#x00A0;</span><span 
886 class="cmtt-8">&#x00A0;</span><span 
887 class="cmtt-8">&#x00A0;V</span>
888 <br class="fancyvrb" /><a 
889  id="x1-43006r3"></a><span 
890 class="cmr-6">3</span><span 
891 class="cmtt-8">&#x00A0;</span><span 
892 class="cmtt-8">&#x00A0;</span>
893 <br class="fancyvrb" /><a 
894  id="x1-43008r4"></a><span 
895 class="cmr-6">4</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;</span><span 
903 class="cmtt-8">&#x00A0;</span><span 
904 class="cmtt-8">&#x00A0;</span><span 
905 class="cmtt-8">&#x00A0;7</span><span 
906 class="cmtt-8">&#x00A0;6</span><span 
907 class="cmtt-8">&#x00A0;5</span><span 
908 class="cmtt-8">&#x00A0;4</span><span 
909 class="cmtt-8">&#x00A0;3</span><span 
910 class="cmtt-8">&#x00A0;2</span><span 
911 class="cmtt-8">&#x00A0;1</span><span 
912 class="cmtt-8">&#x00A0;0</span>
913 <br class="fancyvrb" /><a 
914  id="x1-43010r5"></a><span 
915 class="cmr-6">5</span><span 
916 class="cmtt-8">&#x00A0;</span><span 
917 class="cmtt-8">&#x00A0;byte</span><span 
918 class="cmtt-8">&#x00A0;0</span><span 
919 class="cmtt-8">&#x00A0;[0</span><span 
920 class="cmtt-8">&#x00A0;0</span><span 
921 class="cmtt-8">&#x00A0;0</span><span 
922 class="cmtt-8">&#x00A0;0</span><span 
923 class="cmtt-8">&#x00A0;1</span><span 
924 class="cmtt-8">&#x00A0;1</span><span 
925 class="cmtt-8">&#x00A0;0</span><span 
926 class="cmtt-8">&#x00A0;0]</span><span 
927 class="cmtt-8">&#x00A0;</span><span 
928 class="cmtt-8">&#x00A0;&#x003C;-</span>
929 <br class="fancyvrb" /><a 
930  id="x1-43012r6"></a><span 
931 class="cmr-6">6</span><span 
932 class="cmtt-8">&#x00A0;</span><span 
933 class="cmtt-8">&#x00A0;byte</span><span 
934 class="cmtt-8">&#x00A0;1</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><span 
948 class="cmtt-8">&#x00A0;</span><span 
949 class="cmtt-8">&#x00A0;</span><span 
950 class="cmtt-8">&#x00A0;]</span>
951 <br class="fancyvrb" /><a 
952  id="x1-43014r7"></a><span 
953 class="cmr-6">7</span><span 
954 class="cmtt-8">&#x00A0;</span><span 
955 class="cmtt-8">&#x00A0;byte</span><span 
956 class="cmtt-8">&#x00A0;2</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><span 
970 class="cmtt-8">&#x00A0;</span><span 
971 class="cmtt-8">&#x00A0;</span><span 
972 class="cmtt-8">&#x00A0;]</span>
973 <br class="fancyvrb" /><a 
974  id="x1-43016r8"></a><span 
975 class="cmr-6">8</span><span 
976 class="cmtt-8">&#x00A0;</span><span 
977 class="cmtt-8">&#x00A0;byte</span><span 
978 class="cmtt-8">&#x00A0;3</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><span 
992 class="cmtt-8">&#x00A0;</span><span 
993 class="cmtt-8">&#x00A0;</span><span 
994 class="cmtt-8">&#x00A0;]</span>
995 <br class="fancyvrb" /><a 
996  id="x1-43018r9"></a><span 
997 class="cmr-6">9</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><span 
1010 class="cmtt-8">&#x00A0;</span><span 
1011 class="cmtt-8">&#x00A0;</span><span 
1012 class="cmtt-8">&#x00A0;...</span>
1013 <br class="fancyvrb" /><a 
1014  id="x1-43020r10"></a><span 
1015 class="cmr-6">10</span><span 
1016 class="cmtt-8">&#x00A0;</span><span 
1017 class="cmtt-8">&#x00A0;byte</span><span 
1018 class="cmtt-8">&#x00A0;n</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;</span><span 
1034 class="cmtt-8">&#x00A0;]</span><span 
1035 class="cmtt-8">&#x00A0;</span><span 
1036 class="cmtt-8">&#x00A0;bytestream</span><span 
1037 class="cmtt-8">&#x00A0;length</span><span 
1038 class="cmtt-8">&#x00A0;==</span><span 
1039 class="cmtt-8">&#x00A0;1</span><span 
1040 class="cmtt-8">&#x00A0;byte</span>
1041 <br class="fancyvrb" /><a 
1042  id="x1-43022r11"></a><span 
1043 class="cmr-6">11</span><span 
1044 class="cmtt-8">&#x00A0;</span><span 
1045 class="cmtt-8">&#x00A0;</span>
1046 </div>
1047 <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value &#8217;-1&#8217; [b111]:
1048 <!--l. 123--><p class="noindent" >
1049 <div class="fancyvrb" id="fancyvrb3">
1050 <a 
1051  id="x1-43024r1"></a><span 
1052 class="cmr-6">1</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><span 
1060 class="cmtt-8">&#x00A0;</span><span 
1061 class="cmtt-8">&#x00A0;</span><span 
1062 class="cmtt-8">&#x00A0;|</span>
1063 <br class="fancyvrb" /><a 
1064  id="x1-43026r2"></a><span 
1065 class="cmr-6">2</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;</span><span 
1073 class="cmtt-8">&#x00A0;</span><span 
1074 class="cmtt-8">&#x00A0;</span><span 
1075 class="cmtt-8">&#x00A0;V</span>
1076 <br class="fancyvrb" /><a 
1077  id="x1-43028r3"></a><span 
1078 class="cmr-6">3</span><span 
1079 class="cmtt-8">&#x00A0;</span><span 
1080 class="cmtt-8">&#x00A0;</span>
1081 <br class="fancyvrb" /><a 
1082  id="x1-43030r4"></a><span 
1083 class="cmr-6">4</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;</span><span 
1091 class="cmtt-8">&#x00A0;</span><span 
1092 class="cmtt-8">&#x00A0;</span><span 
1093 class="cmtt-8">&#x00A0;7</span><span 
1094 class="cmtt-8">&#x00A0;6</span><span 
1095 class="cmtt-8">&#x00A0;5</span><span 
1096 class="cmtt-8">&#x00A0;4</span><span 
1097 class="cmtt-8">&#x00A0;3</span><span 
1098 class="cmtt-8">&#x00A0;2</span><span 
1099 class="cmtt-8">&#x00A0;1</span><span 
1100 class="cmtt-8">&#x00A0;0</span>
1101 <br class="fancyvrb" /><a 
1102  id="x1-43032r5"></a><span 
1103 class="cmr-6">5</span><span 
1104 class="cmtt-8">&#x00A0;</span><span 
1105 class="cmtt-8">&#x00A0;byte</span><span 
1106 class="cmtt-8">&#x00A0;0</span><span 
1107 class="cmtt-8">&#x00A0;[0</span><span 
1108 class="cmtt-8">&#x00A0;1</span><span 
1109 class="cmtt-8">&#x00A0;1</span><span 
1110 class="cmtt-8">&#x00A0;1</span><span 
1111 class="cmtt-8">&#x00A0;1</span><span 
1112 class="cmtt-8">&#x00A0;1</span><span 
1113 class="cmtt-8">&#x00A0;0</span><span 
1114 class="cmtt-8">&#x00A0;0]</span><span 
1115 class="cmtt-8">&#x00A0;</span><span 
1116 class="cmtt-8">&#x00A0;&#x003C;-</span>
1117 <br class="fancyvrb" /><a 
1118  id="x1-43034r6"></a><span 
1119 class="cmr-6">6</span><span 
1120 class="cmtt-8">&#x00A0;</span><span 
1121 class="cmtt-8">&#x00A0;byte</span><span 
1122 class="cmtt-8">&#x00A0;1</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><span 
1136 class="cmtt-8">&#x00A0;</span><span 
1137 class="cmtt-8">&#x00A0;</span><span 
1138 class="cmtt-8">&#x00A0;]</span>
1139                                                                                         
1140
1141                                                                                         
1142 <br class="fancyvrb" /><a 
1143  id="x1-43036r7"></a><span 
1144 class="cmr-6">7</span><span 
1145 class="cmtt-8">&#x00A0;</span><span 
1146 class="cmtt-8">&#x00A0;byte</span><span 
1147 class="cmtt-8">&#x00A0;2</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><span 
1161 class="cmtt-8">&#x00A0;</span><span 
1162 class="cmtt-8">&#x00A0;</span><span 
1163 class="cmtt-8">&#x00A0;]</span>
1164 <br class="fancyvrb" /><a 
1165  id="x1-43038r8"></a><span 
1166 class="cmr-6">8</span><span 
1167 class="cmtt-8">&#x00A0;</span><span 
1168 class="cmtt-8">&#x00A0;byte</span><span 
1169 class="cmtt-8">&#x00A0;3</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><span 
1183 class="cmtt-8">&#x00A0;</span><span 
1184 class="cmtt-8">&#x00A0;</span><span 
1185 class="cmtt-8">&#x00A0;]</span>
1186 <br class="fancyvrb" /><a 
1187  id="x1-43040r9"></a><span 
1188 class="cmr-6">9</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><span 
1201 class="cmtt-8">&#x00A0;</span><span 
1202 class="cmtt-8">&#x00A0;</span><span 
1203 class="cmtt-8">&#x00A0;...</span>
1204 <br class="fancyvrb" /><a 
1205  id="x1-43042r10"></a><span 
1206 class="cmr-6">10</span><span 
1207 class="cmtt-8">&#x00A0;</span><span 
1208 class="cmtt-8">&#x00A0;byte</span><span 
1209 class="cmtt-8">&#x00A0;n</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;</span><span 
1225 class="cmtt-8">&#x00A0;]</span><span 
1226 class="cmtt-8">&#x00A0;</span><span 
1227 class="cmtt-8">&#x00A0;bytestream</span><span 
1228 class="cmtt-8">&#x00A0;length</span><span 
1229 class="cmtt-8">&#x00A0;==</span><span 
1230 class="cmtt-8">&#x00A0;1</span><span 
1231 class="cmtt-8">&#x00A0;byte</span>
1232 </div>
1233 <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value &#8217;17&#8217; [b0010001]:
1234 <!--l. 139--><p class="noindent" >
1235 <div class="fancyvrb" id="fancyvrb4">
1236 <a 
1237  id="x1-43044r1"></a><span 
1238 class="cmr-6">1</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><span 
1248 class="cmtt-8">&#x00A0;</span><span 
1249 class="cmtt-8">&#x00A0;</span><span 
1250 class="cmtt-8">&#x00A0;|</span>
1251 <br class="fancyvrb" /><a 
1252  id="x1-43046r2"></a><span 
1253 class="cmr-6">2</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;</span><span 
1263 class="cmtt-8">&#x00A0;</span><span 
1264 class="cmtt-8">&#x00A0;</span><span 
1265 class="cmtt-8">&#x00A0;V</span>
1266 <br class="fancyvrb" /><a 
1267  id="x1-43048r3"></a><span 
1268 class="cmr-6">3</span><span 
1269 class="cmtt-8">&#x00A0;</span><span 
1270 class="cmtt-8">&#x00A0;</span>
1271 <br class="fancyvrb" /><a 
1272  id="x1-43050r4"></a><span 
1273 class="cmr-6">4</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;</span><span 
1281 class="cmtt-8">&#x00A0;</span><span 
1282 class="cmtt-8">&#x00A0;</span><span 
1283 class="cmtt-8">&#x00A0;7</span><span 
1284 class="cmtt-8">&#x00A0;6</span><span 
1285 class="cmtt-8">&#x00A0;5</span><span 
1286 class="cmtt-8">&#x00A0;4</span><span 
1287 class="cmtt-8">&#x00A0;3</span><span 
1288 class="cmtt-8">&#x00A0;2</span><span 
1289 class="cmtt-8">&#x00A0;1</span><span 
1290 class="cmtt-8">&#x00A0;0</span>
1291 <br class="fancyvrb" /><a 
1292  id="x1-43052r5"></a><span 
1293 class="cmr-6">5</span><span 
1294 class="cmtt-8">&#x00A0;</span><span 
1295 class="cmtt-8">&#x00A0;byte</span><span 
1296 class="cmtt-8">&#x00A0;0</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;1</span><span 
1301 class="cmtt-8">&#x00A0;1</span><span 
1302 class="cmtt-8">&#x00A0;1</span><span 
1303 class="cmtt-8">&#x00A0;0</span><span 
1304 class="cmtt-8">&#x00A0;0]</span>
1305 <br class="fancyvrb" /><a 
1306  id="x1-43054r6"></a><span 
1307 class="cmr-6">6</span><span 
1308 class="cmtt-8">&#x00A0;</span><span 
1309 class="cmtt-8">&#x00A0;byte</span><span 
1310 class="cmtt-8">&#x00A0;1</span><span 
1311 class="cmtt-8">&#x00A0;[0</span><span 
1312 class="cmtt-8">&#x00A0;0</span><span 
1313 class="cmtt-8">&#x00A0;0</span><span 
1314 class="cmtt-8">&#x00A0;0</span><span 
1315 class="cmtt-8">&#x00A0;1</span><span 
1316 class="cmtt-8">&#x00A0;0</span><span 
1317 class="cmtt-8">&#x00A0;0</span><span 
1318 class="cmtt-8">&#x00A0;0]</span><span 
1319 class="cmtt-8">&#x00A0;</span><span 
1320 class="cmtt-8">&#x00A0;&#x003C;-</span>
1321 <br class="fancyvrb" /><a 
1322  id="x1-43056r7"></a><span 
1323 class="cmr-6">7</span><span 
1324 class="cmtt-8">&#x00A0;</span><span 
1325 class="cmtt-8">&#x00A0;byte</span><span 
1326 class="cmtt-8">&#x00A0;2</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><span 
1340 class="cmtt-8">&#x00A0;</span><span 
1341 class="cmtt-8">&#x00A0;</span><span 
1342 class="cmtt-8">&#x00A0;]</span>
1343 <br class="fancyvrb" /><a 
1344  id="x1-43058r8"></a><span 
1345 class="cmr-6">8</span><span 
1346 class="cmtt-8">&#x00A0;</span><span 
1347 class="cmtt-8">&#x00A0;byte</span><span 
1348 class="cmtt-8">&#x00A0;3</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><span 
1362 class="cmtt-8">&#x00A0;</span><span 
1363 class="cmtt-8">&#x00A0;</span><span 
1364 class="cmtt-8">&#x00A0;]</span>
1365 <br class="fancyvrb" /><a 
1366  id="x1-43060r9"></a><span 
1367 class="cmr-6">9</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><span 
1380 class="cmtt-8">&#x00A0;</span><span 
1381 class="cmtt-8">&#x00A0;</span><span 
1382 class="cmtt-8">&#x00A0;...</span>
1383 <br class="fancyvrb" /><a 
1384  id="x1-43062r10"></a><span 
1385 class="cmr-6">10</span><span 
1386 class="cmtt-8">&#x00A0;</span><span 
1387 class="cmtt-8">&#x00A0;byte</span><span 
1388 class="cmtt-8">&#x00A0;n</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;</span><span 
1404 class="cmtt-8">&#x00A0;]</span><span 
1405 class="cmtt-8">&#x00A0;</span><span 
1406 class="cmtt-8">&#x00A0;bytestream</span><span 
1407 class="cmtt-8">&#x00A0;length</span><span 
1408 class="cmtt-8">&#x00A0;==</span><span 
1409 class="cmtt-8">&#x00A0;2</span><span 
1410 class="cmtt-8">&#x00A0;bytes</span>
1411 <br class="fancyvrb" /><a 
1412  id="x1-43064r11"></a><span 
1413 class="cmr-6">11</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;</span><span 
1439 class="cmtt-8">&#x00A0;</span><span 
1440 class="cmtt-8">&#x00A0;</span><span 
1441 class="cmtt-8">&#x00A0;bit</span><span 
1442 class="cmtt-8">&#x00A0;cursor</span><span 
1443 class="cmtt-8">&#x00A0;==</span><span 
1444 class="cmtt-8">&#x00A0;6</span>
1445 </div>
1446 <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value &#8217;6969&#8217; [b110 11001110 01]:
1447 <!--l. 156--><p class="noindent" >
1448 <div class="fancyvrb" id="fancyvrb5">
1449 <a 
1450  id="x1-43066r1"></a><span 
1451 class="cmr-6">1</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><span 
1467 class="cmtt-8">&#x00A0;</span><span 
1468 class="cmtt-8">&#x00A0;</span><span 
1469 class="cmtt-8">&#x00A0;|</span>
1470 <br class="fancyvrb" /><a 
1471  id="x1-43068r2"></a><span 
1472 class="cmr-6">2</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;</span><span 
1488 class="cmtt-8">&#x00A0;</span><span 
1489 class="cmtt-8">&#x00A0;</span><span 
1490 class="cmtt-8">&#x00A0;V</span>
1491 <br class="fancyvrb" /><a 
1492  id="x1-43070r3"></a><span 
1493 class="cmr-6">3</span><span 
1494 class="cmtt-8">&#x00A0;</span><span 
1495 class="cmtt-8">&#x00A0;</span>
1496 <br class="fancyvrb" /><a 
1497  id="x1-43072r4"></a><span 
1498 class="cmr-6">4</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;</span><span 
1506 class="cmtt-8">&#x00A0;</span><span 
1507 class="cmtt-8">&#x00A0;</span><span 
1508 class="cmtt-8">&#x00A0;7</span><span 
1509 class="cmtt-8">&#x00A0;6</span><span 
1510 class="cmtt-8">&#x00A0;5</span><span 
1511 class="cmtt-8">&#x00A0;4</span><span 
1512 class="cmtt-8">&#x00A0;3</span><span 
1513 class="cmtt-8">&#x00A0;2</span><span 
1514 class="cmtt-8">&#x00A0;1</span><span 
1515 class="cmtt-8">&#x00A0;0</span>
1516 <br class="fancyvrb" /><a 
1517  id="x1-43074r5"></a><span 
1518 class="cmr-6">5</span><span 
1519 class="cmtt-8">&#x00A0;</span><span 
1520 class="cmtt-8">&#x00A0;byte</span><span 
1521 class="cmtt-8">&#x00A0;0</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;1</span><span 
1526 class="cmtt-8">&#x00A0;1</span><span 
1527 class="cmtt-8">&#x00A0;1</span><span 
1528 class="cmtt-8">&#x00A0;0</span><span 
1529 class="cmtt-8">&#x00A0;0]</span>
1530 <br class="fancyvrb" /><a 
1531  id="x1-43076r6"></a><span 
1532 class="cmr-6">6</span><span 
1533 class="cmtt-8">&#x00A0;</span><span 
1534 class="cmtt-8">&#x00A0;byte</span><span 
1535 class="cmtt-8">&#x00A0;1</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;1</span><span 
1541 class="cmtt-8">&#x00A0;0</span><span 
1542 class="cmtt-8">&#x00A0;0</span><span 
1543 class="cmtt-8">&#x00A0;0]</span>
1544 <br class="fancyvrb" /><a 
1545  id="x1-43078r7"></a><span 
1546 class="cmr-6">7</span><span 
1547 class="cmtt-8">&#x00A0;</span><span 
1548 class="cmtt-8">&#x00A0;byte</span><span 
1549 class="cmtt-8">&#x00A0;2</span><span 
1550 class="cmtt-8">&#x00A0;[1</span><span 
1551 class="cmtt-8">&#x00A0;1</span><span 
1552 class="cmtt-8">&#x00A0;0</span><span 
1553 class="cmtt-8">&#x00A0;0</span><span 
1554 class="cmtt-8">&#x00A0;1</span><span 
1555 class="cmtt-8">&#x00A0;1</span><span 
1556 class="cmtt-8">&#x00A0;1</span><span 
1557 class="cmtt-8">&#x00A0;0]</span>
1558 <br class="fancyvrb" /><a 
1559  id="x1-43080r8"></a><span 
1560 class="cmr-6">8</span><span 
1561 class="cmtt-8">&#x00A0;</span><span 
1562 class="cmtt-8">&#x00A0;byte</span><span 
1563 class="cmtt-8">&#x00A0;3</span><span 
1564 class="cmtt-8">&#x00A0;[0</span><span 
1565 class="cmtt-8">&#x00A0;0</span><span 
1566 class="cmtt-8">&#x00A0;0</span><span 
1567 class="cmtt-8">&#x00A0;0</span><span 
1568 class="cmtt-8">&#x00A0;0</span><span 
1569 class="cmtt-8">&#x00A0;1</span><span 
1570 class="cmtt-8">&#x00A0;1</span><span 
1571 class="cmtt-8">&#x00A0;0]</span><span 
1572 class="cmtt-8">&#x00A0;</span><span 
1573 class="cmtt-8">&#x00A0;&#x003C;-</span>
1574 <br class="fancyvrb" /><a 
1575  id="x1-43082r9"></a><span 
1576 class="cmr-6">9</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><span 
1589 class="cmtt-8">&#x00A0;</span><span 
1590 class="cmtt-8">&#x00A0;</span><span 
1591 class="cmtt-8">&#x00A0;...</span>
1592 <br class="fancyvrb" /><a 
1593  id="x1-43084r10"></a><span 
1594 class="cmr-6">10</span><span 
1595 class="cmtt-8">&#x00A0;</span><span 
1596 class="cmtt-8">&#x00A0;byte</span><span 
1597 class="cmtt-8">&#x00A0;n</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;</span><span 
1613 class="cmtt-8">&#x00A0;]</span><span 
1614 class="cmtt-8">&#x00A0;</span><span 
1615 class="cmtt-8">&#x00A0;bytestream</span><span 
1616 class="cmtt-8">&#x00A0;length</span><span 
1617 class="cmtt-8">&#x00A0;==</span><span 
1618 class="cmtt-8">&#x00A0;4</span><span 
1619 class="cmtt-8">&#x00A0;bytes</span>
1620 <br class="fancyvrb" /><a 
1621  id="x1-43086r11"></a><span 
1622 class="cmr-6">11</span><span 
1623 class="cmtt-8">&#x00A0;</span><span 
1624 class="cmtt-8">&#x00A0;</span>
1625 </div>
1626 <!--l. 173--><p class="noindent" >
1627 <h5 class="subsubsectionHead"><span class="titlemark">2.1.7.  </span> <a 
1628  id="x1-440002.1.7"></a>decoding example</h5>
1629 <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
1630 <!--l. 177--><p class="noindent" >
1631 <div class="fancyvrb" id="fancyvrb6">
1632                                                                                         
1633
1634                                                                                         
1635 <a 
1636  id="x1-44002r1"></a><span 
1637 class="cmr-6">1</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><span 
1659 class="cmtt-8">&#x00A0;</span><span 
1660 class="cmtt-8">&#x00A0;</span><span 
1661 class="cmtt-8">&#x00A0;|</span>
1662 <br class="fancyvrb" /><a 
1663  id="x1-44004r2"></a><span 
1664 class="cmr-6">2</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;</span><span 
1686 class="cmtt-8">&#x00A0;</span><span 
1687 class="cmtt-8">&#x00A0;</span><span 
1688 class="cmtt-8">&#x00A0;V</span>
1689 <br class="fancyvrb" /><a 
1690  id="x1-44006r3"></a><span 
1691 class="cmr-6">3</span><span 
1692 class="cmtt-8">&#x00A0;</span><span 
1693 class="cmtt-8">&#x00A0;</span>
1694 <br class="fancyvrb" /><a 
1695  id="x1-44008r4"></a><span 
1696 class="cmr-6">4</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;</span><span 
1704 class="cmtt-8">&#x00A0;</span><span 
1705 class="cmtt-8">&#x00A0;</span><span 
1706 class="cmtt-8">&#x00A0;7</span><span 
1707 class="cmtt-8">&#x00A0;6</span><span 
1708 class="cmtt-8">&#x00A0;5</span><span 
1709 class="cmtt-8">&#x00A0;4</span><span 
1710 class="cmtt-8">&#x00A0;3</span><span 
1711 class="cmtt-8">&#x00A0;2</span><span 
1712 class="cmtt-8">&#x00A0;1</span><span 
1713 class="cmtt-8">&#x00A0;0</span>
1714 <br class="fancyvrb" /><a 
1715  id="x1-44010r5"></a><span 
1716 class="cmr-6">5</span><span 
1717 class="cmtt-8">&#x00A0;</span><span 
1718 class="cmtt-8">&#x00A0;byte</span><span 
1719 class="cmtt-8">&#x00A0;0</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;1</span><span 
1724 class="cmtt-8">&#x00A0;1</span><span 
1725 class="cmtt-8">&#x00A0;1</span><span 
1726 class="cmtt-8">&#x00A0;0</span><span 
1727 class="cmtt-8">&#x00A0;0]</span><span 
1728 class="cmtt-8">&#x00A0;</span><span 
1729 class="cmtt-8">&#x00A0;&#x003C;-</span>
1730 <br class="fancyvrb" /><a 
1731  id="x1-44012r6"></a><span 
1732 class="cmr-6">6</span><span 
1733 class="cmtt-8">&#x00A0;</span><span 
1734 class="cmtt-8">&#x00A0;byte</span><span 
1735 class="cmtt-8">&#x00A0;1</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;1</span><span 
1741 class="cmtt-8">&#x00A0;0</span><span 
1742 class="cmtt-8">&#x00A0;0</span><span 
1743 class="cmtt-8">&#x00A0;0]</span>
1744 <br class="fancyvrb" /><a 
1745  id="x1-44014r7"></a><span 
1746 class="cmr-6">7</span><span 
1747 class="cmtt-8">&#x00A0;</span><span 
1748 class="cmtt-8">&#x00A0;byte</span><span 
1749 class="cmtt-8">&#x00A0;2</span><span 
1750 class="cmtt-8">&#x00A0;[1</span><span 
1751 class="cmtt-8">&#x00A0;1</span><span 
1752 class="cmtt-8">&#x00A0;0</span><span 
1753 class="cmtt-8">&#x00A0;0</span><span 
1754 class="cmtt-8">&#x00A0;1</span><span 
1755 class="cmtt-8">&#x00A0;1</span><span 
1756 class="cmtt-8">&#x00A0;1</span><span 
1757 class="cmtt-8">&#x00A0;0]</span>
1758 <br class="fancyvrb" /><a 
1759  id="x1-44016r8"></a><span 
1760 class="cmr-6">8</span><span 
1761 class="cmtt-8">&#x00A0;</span><span 
1762 class="cmtt-8">&#x00A0;byte</span><span 
1763 class="cmtt-8">&#x00A0;3</span><span 
1764 class="cmtt-8">&#x00A0;[0</span><span 
1765 class="cmtt-8">&#x00A0;0</span><span 
1766 class="cmtt-8">&#x00A0;0</span><span 
1767 class="cmtt-8">&#x00A0;0</span><span 
1768 class="cmtt-8">&#x00A0;0</span><span 
1769 class="cmtt-8">&#x00A0;1</span><span 
1770 class="cmtt-8">&#x00A0;1</span><span 
1771 class="cmtt-8">&#x00A0;0]</span><span 
1772 class="cmtt-8">&#x00A0;</span><span 
1773 class="cmtt-8">&#x00A0;bytestream</span><span 
1774 class="cmtt-8">&#x00A0;length</span><span 
1775 class="cmtt-8">&#x00A0;==</span><span 
1776 class="cmtt-8">&#x00A0;4</span><span 
1777 class="cmtt-8">&#x00A0;bytes</span>
1778 <br class="fancyvrb" /><a 
1779  id="x1-44018r9"></a><span 
1780 class="cmr-6">9</span><span 
1781 class="cmtt-8">&#x00A0;</span><span 
1782 class="cmtt-8">&#x00A0;</span>
1783 </div>
1784 <!--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
1785 are worth noting here:
1786       <ul class="itemize1">
1787       <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
1788       some other combination of bit-widths from the bitstream is well defined. There are
1789       no artificial alignment boundaries maintained in the bitstream.
1790       </li>
1791       <li class="itemize">The second value is the two-bit-wide integer &#8217;b11&#8217;. This value may be interpreted
1792       either as the unsigned value &#8217;3&#8217;, or the signed value &#8217;-1&#8217;. Signedness is dependent on
1793       decode context.</li></ul>
1794 <!--l. 208--><p class="noindent" >
1795 <h5 class="subsubsectionHead"><span class="titlemark">2.1.8.  </span> <a 
1796  id="x1-450002.1.8"></a>end-of-packet alignment</h5>
1797 <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
1798 embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
1799 Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
1800 the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
1801 in the last byte of a packet.
1802 <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
1803 should this unused space be read, it will return binary zeroes.
1804 <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an &#8217;end-of-packet&#8217; condition.
1805 End-of-packet is not to be considered an error; it is merely a state indicating that there is
1806 insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
1807 normal mode of operation, and as such, decoders must handle reading past the end of a packet as
1808 a typical mode of operation. Any further read operations after an &#8217;end-of-packet&#8217; condition shall
1809 also return &#8217;end-of-packet&#8217;.
1810                                                                                         
1811
1812                                                                                         
1813 <!--l. 233--><p class="noindent" >
1814 <h5 class="subsubsectionHead"><span class="titlemark">2.1.9.  </span> <a 
1815  id="x1-460002.1.9"></a>reading zero bits</h5>
1816 <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value &#8217;0&#8217; and does not increment the stream cursor.
1817 Reading to the end of the packet (but not past, such that an &#8217;end-of-packet&#8217; condition has not
1818 triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
1819 end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets &#8217;end-of-packet&#8217;
1820 shall also fail with &#8217;end-of-packet&#8217;.
1821                                                                                         
1822
1823                                                                                         
1824                                                                                         
1825
1826                                                                                         
1827 <h3 class="sectionHead"><span class="titlemark">3.  </span> <a 
1828  id="x1-470003"></a>Probability Model and Codebooks</h3>
1829 <!--l. 6--><p class="noindent" >
1830 <h4 class="subsectionHead"><span class="titlemark">3.1.  </span> <a 
1831  id="x1-480003.1"></a>Overview</h4>
1832 <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
1833 probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
1834 bitstream itself in the third header, the codec setup header. This packed configuration consists of
1835 multiple &#8217;codebooks&#8217;, each containing a specific Huffman-equivalent representation for decoding
1836 compressed codewords as well as an optional lookup table of output vector values to which a
1837 decoded Huffman value is applied as an offset, generating the final decoded output corresponding
1838 to a given compressed codeword.
1839 <!--l. 18--><p class="noindent" >
1840 <h5 class="subsubsectionHead"><span class="titlemark">3.1.1.  </span> <a 
1841  id="x1-490003.1.1"></a>Bitwise operation</h5>
1842 <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
1843 and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
1844 read from the stream according to <a 
1845 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a 
1846 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221;.
1847 <!--l. 27--><p class="noindent" >
1848 <h4 class="subsectionHead"><span class="titlemark">3.2.  </span> <a 
1849  id="x1-500003.2"></a>Packed codebook format</h4>
1850 <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system&#8217;s native byte width is
1851 eight bits. This is not universally true; see <a 
1852 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a 
1853 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; for discussion
1854 relating to non-eight-bit bytes.
1855                                                                                         
1856
1857                                                                                         
1858 <!--l. 34--><p class="noindent" >
1859 <h5 class="subsubsectionHead"><span class="titlemark">3.2.1.  </span> <a 
1860  id="x1-510003.2.1"></a>codebook decode</h5>
1861 <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
1862 <!--l. 38--><p class="noindent" >
1863 <div class="fancyvrb" id="fancyvrb7">
1864 <a 
1865  id="x1-51002r1"></a><span 
1866 class="cmr-6">1</span><span 
1867 class="cmtt-8">&#x00A0;</span><span 
1868 class="cmtt-8">&#x00A0;byte</span><span 
1869 class="cmtt-8">&#x00A0;0:</span><span 
1870 class="cmtt-8">&#x00A0;[</span><span 
1871 class="cmtt-8">&#x00A0;0</span><span 
1872 class="cmtt-8">&#x00A0;1</span><span 
1873 class="cmtt-8">&#x00A0;0</span><span 
1874 class="cmtt-8">&#x00A0;0</span><span 
1875 class="cmtt-8">&#x00A0;0</span><span 
1876 class="cmtt-8">&#x00A0;0</span><span 
1877 class="cmtt-8">&#x00A0;1</span><span 
1878 class="cmtt-8">&#x00A0;0</span><span 
1879 class="cmtt-8">&#x00A0;]</span><span 
1880 class="cmtt-8">&#x00A0;(0x42)</span>
1881 <br class="fancyvrb" /><a 
1882  id="x1-51004r2"></a><span 
1883 class="cmr-6">2</span><span 
1884 class="cmtt-8">&#x00A0;</span><span 
1885 class="cmtt-8">&#x00A0;byte</span><span 
1886 class="cmtt-8">&#x00A0;1:</span><span 
1887 class="cmtt-8">&#x00A0;[</span><span 
1888 class="cmtt-8">&#x00A0;0</span><span 
1889 class="cmtt-8">&#x00A0;1</span><span 
1890 class="cmtt-8">&#x00A0;0</span><span 
1891 class="cmtt-8">&#x00A0;0</span><span 
1892 class="cmtt-8">&#x00A0;0</span><span 
1893 class="cmtt-8">&#x00A0;0</span><span 
1894 class="cmtt-8">&#x00A0;1</span><span 
1895 class="cmtt-8">&#x00A0;1</span><span 
1896 class="cmtt-8">&#x00A0;]</span><span 
1897 class="cmtt-8">&#x00A0;(0x43)</span>
1898 <br class="fancyvrb" /><a 
1899  id="x1-51006r3"></a><span 
1900 class="cmr-6">3</span><span 
1901 class="cmtt-8">&#x00A0;</span><span 
1902 class="cmtt-8">&#x00A0;byte</span><span 
1903 class="cmtt-8">&#x00A0;2:</span><span 
1904 class="cmtt-8">&#x00A0;[</span><span 
1905 class="cmtt-8">&#x00A0;0</span><span 
1906 class="cmtt-8">&#x00A0;1</span><span 
1907 class="cmtt-8">&#x00A0;0</span><span 
1908 class="cmtt-8">&#x00A0;1</span><span 
1909 class="cmtt-8">&#x00A0;0</span><span 
1910 class="cmtt-8">&#x00A0;1</span><span 
1911 class="cmtt-8">&#x00A0;1</span><span 
1912 class="cmtt-8">&#x00A0;0</span><span 
1913 class="cmtt-8">&#x00A0;]</span><span 
1914 class="cmtt-8">&#x00A0;(0x56)</span>
1915 </div>
1916 <!--l. 44--><p class="noindent" >16 bit <span 
1917 class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span 
1918 class="cmtt-12">[codebook_entries] </span>fields:
1919 <!--l. 46--><p class="noindent" >
1920 <div class="fancyvrb" id="fancyvrb8">
1921 <a 
1922  id="x1-51008r1"></a><span 
1923 class="cmr-6">1</span><span 
1924 class="cmtt-8">&#x00A0;</span><span 
1925 class="cmtt-8">&#x00A0;</span>
1926 <br class="fancyvrb" /><a 
1927  id="x1-51010r2"></a><span 
1928 class="cmr-6">2</span><span 
1929 class="cmtt-8">&#x00A0;</span><span 
1930 class="cmtt-8">&#x00A0;byte</span><span 
1931 class="cmtt-8">&#x00A0;3:</span><span 
1932 class="cmtt-8">&#x00A0;[</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;X</span><span 
1939 class="cmtt-8">&#x00A0;X</span><span 
1940 class="cmtt-8">&#x00A0;X</span><span 
1941 class="cmtt-8">&#x00A0;]</span>
1942 <br class="fancyvrb" /><a 
1943  id="x1-51012r3"></a><span 
1944 class="cmr-6">3</span><span 
1945 class="cmtt-8">&#x00A0;</span><span 
1946 class="cmtt-8">&#x00A0;byte</span><span 
1947 class="cmtt-8">&#x00A0;4:</span><span 
1948 class="cmtt-8">&#x00A0;[</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;X</span><span 
1955 class="cmtt-8">&#x00A0;X</span><span 
1956 class="cmtt-8">&#x00A0;X</span><span 
1957 class="cmtt-8">&#x00A0;]</span><span 
1958 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span 
1959 class="cmtt-8">&#x00A0;(16</span><span 
1960 class="cmtt-8">&#x00A0;bit</span><span 
1961 class="cmtt-8">&#x00A0;unsigned)</span>
1962 <br class="fancyvrb" /><a 
1963  id="x1-51014r4"></a><span 
1964 class="cmr-6">4</span><span 
1965 class="cmtt-8">&#x00A0;</span><span 
1966 class="cmtt-8">&#x00A0;</span>
1967 <br class="fancyvrb" /><a 
1968  id="x1-51016r5"></a><span 
1969 class="cmr-6">5</span><span 
1970 class="cmtt-8">&#x00A0;</span><span 
1971 class="cmtt-8">&#x00A0;byte</span><span 
1972 class="cmtt-8">&#x00A0;5:</span><span 
1973 class="cmtt-8">&#x00A0;[</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;X</span><span 
1980 class="cmtt-8">&#x00A0;X</span><span 
1981 class="cmtt-8">&#x00A0;X</span><span 
1982 class="cmtt-8">&#x00A0;]</span>
1983 <br class="fancyvrb" /><a 
1984  id="x1-51018r6"></a><span 
1985 class="cmr-6">6</span><span 
1986 class="cmtt-8">&#x00A0;</span><span 
1987 class="cmtt-8">&#x00A0;byte</span><span 
1988 class="cmtt-8">&#x00A0;6:</span><span 
1989 class="cmtt-8">&#x00A0;[</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;X</span><span 
1996 class="cmtt-8">&#x00A0;X</span><span 
1997 class="cmtt-8">&#x00A0;X</span><span 
1998 class="cmtt-8">&#x00A0;]</span>
1999 <br class="fancyvrb" /><a 
2000  id="x1-51020r7"></a><span 
2001 class="cmr-6">7</span><span 
2002 class="cmtt-8">&#x00A0;</span><span 
2003 class="cmtt-8">&#x00A0;byte</span><span 
2004 class="cmtt-8">&#x00A0;7:</span><span 
2005 class="cmtt-8">&#x00A0;[</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;X</span><span 
2012 class="cmtt-8">&#x00A0;X</span><span 
2013 class="cmtt-8">&#x00A0;X</span><span 
2014 class="cmtt-8">&#x00A0;]</span><span 
2015 class="cmtt-8">&#x00A0;[codebook_entries]</span><span 
2016 class="cmtt-8">&#x00A0;(24</span><span 
2017 class="cmtt-8">&#x00A0;bit</span><span 
2018 class="cmtt-8">&#x00A0;unsigned)</span>
2019 <br class="fancyvrb" /><a 
2020  id="x1-51022r8"></a><span 
2021 class="cmr-6">8</span><span 
2022 class="cmtt-8">&#x00A0;</span><span 
2023 class="cmtt-8">&#x00A0;</span>
2024 </div>
2025 <!--l. 57--><p class="noindent" >Next is the <span 
2026 class="cmtt-12">[ordered] </span>bit flag:
2027 <!--l. 59--><p class="noindent" >
2028 <div class="fancyvrb" id="fancyvrb9">
2029 <a 
2030  id="x1-51024r1"></a><span 
2031 class="cmr-6">1</span><span 
2032 class="cmtt-8">&#x00A0;</span><span 
2033 class="cmtt-8">&#x00A0;</span>
2034 <br class="fancyvrb" /><a 
2035  id="x1-51026r2"></a><span 
2036 class="cmr-6">2</span><span 
2037 class="cmtt-8">&#x00A0;</span><span 
2038 class="cmtt-8">&#x00A0;byte</span><span 
2039 class="cmtt-8">&#x00A0;8:</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;</span><span 
2053 class="cmtt-8">&#x00A0;</span><span 
2054 class="cmtt-8">&#x00A0;</span><span 
2055 class="cmtt-8">&#x00A0;X</span><span 
2056 class="cmtt-8">&#x00A0;]</span><span 
2057 class="cmtt-8">&#x00A0;[ordered]</span><span 
2058 class="cmtt-8">&#x00A0;(1</span><span 
2059 class="cmtt-8">&#x00A0;bit)</span>
2060 <br class="fancyvrb" /><a 
2061  id="x1-51028r3"></a><span 
2062 class="cmr-6">3</span><span 
2063 class="cmtt-8">&#x00A0;</span><span 
2064 class="cmtt-8">&#x00A0;</span>
2065 </div>
2066 <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span 
2067 class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
2068 We now read the list of codeword lengths and store these lengths in the array
2069 <span 
2070 class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span 
2071 class="cmtt-12">[ordered] </span>flag
2072 is set or unset.
2073       <ul class="itemize1">
2074       <li class="itemize">If the <span 
2075 class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
2076       needs to read each codeword length one-by-one.
2077       <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span 
2078 class="cmtt-12">[sparse] </span>flag. This flag determines
2079       whether or not the codebook contains unused entries that are not to be included in
2080                                                                                         
2081
2082                                                                                         
2083       the codeword decode tree:
2084       <!--l. 82--><p class="noindent" >
2085       <div class="fancyvrb" id="fancyvrb10">
2086 <a 
2087  id="x1-51030r1"></a><span 
2088 class="cmr-6">1</span><span 
2089 class="cmtt-8">&#x00A0;</span><span 
2090 class="cmtt-8">&#x00A0;byte</span><span 
2091 class="cmtt-8">&#x00A0;8:</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;</span><span 
2103 class="cmtt-8">&#x00A0;</span><span 
2104 class="cmtt-8">&#x00A0;</span><span 
2105 class="cmtt-8">&#x00A0;X</span><span 
2106 class="cmtt-8">&#x00A0;1</span><span 
2107 class="cmtt-8">&#x00A0;]</span><span 
2108 class="cmtt-8">&#x00A0;[sparse]</span><span 
2109 class="cmtt-8">&#x00A0;flag</span><span 
2110 class="cmtt-8">&#x00A0;(1</span><span 
2111 class="cmtt-8">&#x00A0;bit)</span>
2112 </div>
2113       <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span 
2114 class="cmtt-12">[codebook_entries] </span>codebook entries:
2115       <!--l. 89--><p class="noindent" >
2116       <div class="fancyvrb" id="fancyvrb11">
2117 <a 
2118  id="x1-51032r1"></a><span 
2119 class="cmr-6">1</span><span 
2120 class="cmtt-8">&#x00A0;</span><span 
2121 class="cmtt-8">&#x00A0;</span>
2122 <br class="fancyvrb" /><a 
2123  id="x1-51034r2"></a><span 
2124 class="cmr-6">2</span><span 
2125 class="cmtt-8">&#x00A0;</span><span 
2126 class="cmtt-8">&#x00A0;</span><span 
2127 class="cmtt-8">&#x00A0;</span><span 
2128 class="cmtt-8">&#x00A0;1)</span><span 
2129 class="cmtt-8">&#x00A0;if([sparse]</span><span 
2130 class="cmtt-8">&#x00A0;is</span><span 
2131 class="cmtt-8">&#x00A0;set)</span><span 
2132 class="cmtt-8">&#x00A0;</span><span 
2133 class="cmsy-8">{</span>
2134 <br class="fancyvrb" /><a 
2135  id="x1-51036r3"></a><span 
2136 class="cmr-6">3</span><span 
2137 class="cmtt-8">&#x00A0;</span><span 
2138 class="cmtt-8">&#x00A0;</span>
2139 <br class="fancyvrb" /><a 
2140  id="x1-51038r4"></a><span 
2141 class="cmr-6">4</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;</span><span 
2150 class="cmtt-8">&#x00A0;</span><span 
2151 class="cmtt-8">&#x00A0;</span><span 
2152 class="cmtt-8">&#x00A0;2)</span><span 
2153 class="cmtt-8">&#x00A0;[flag]</span><span 
2154 class="cmtt-8">&#x00A0;=</span><span 
2155 class="cmtt-8">&#x00A0;read</span><span 
2156 class="cmtt-8">&#x00A0;one</span><span 
2157 class="cmtt-8">&#x00A0;bit;</span>
2158 <br class="fancyvrb" /><a 
2159  id="x1-51040r5"></a><span 
2160 class="cmr-6">5</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;</span><span 
2169 class="cmtt-8">&#x00A0;</span><span 
2170 class="cmtt-8">&#x00A0;</span><span 
2171 class="cmtt-8">&#x00A0;3)</span><span 
2172 class="cmtt-8">&#x00A0;if([flag]</span><span 
2173 class="cmtt-8">&#x00A0;is</span><span 
2174 class="cmtt-8">&#x00A0;set)</span><span 
2175 class="cmtt-8">&#x00A0;</span><span 
2176 class="cmsy-8">{</span>
2177 <br class="fancyvrb" /><a 
2178  id="x1-51042r6"></a><span 
2179 class="cmr-6">6</span><span 
2180 class="cmtt-8">&#x00A0;</span><span 
2181 class="cmtt-8">&#x00A0;</span>
2182 <br class="fancyvrb" /><a 
2183  id="x1-51044r7"></a><span 
2184 class="cmr-6">7</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;</span><span 
2198 class="cmtt-8">&#x00A0;</span><span 
2199 class="cmtt-8">&#x00A0;</span><span 
2200 class="cmtt-8">&#x00A0;4)</span><span 
2201 class="cmtt-8">&#x00A0;[length]</span><span 
2202 class="cmtt-8">&#x00A0;=</span><span 
2203 class="cmtt-8">&#x00A0;read</span><span 
2204 class="cmtt-8">&#x00A0;a</span><span 
2205 class="cmtt-8">&#x00A0;five</span><span 
2206 class="cmtt-8">&#x00A0;bit</span><span 
2207 class="cmtt-8">&#x00A0;unsigned</span><span 
2208 class="cmtt-8">&#x00A0;integer;</span>
2209 <br class="fancyvrb" /><a 
2210  id="x1-51046r8"></a><span 
2211 class="cmr-6">8</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;</span><span 
2225 class="cmtt-8">&#x00A0;</span><span 
2226 class="cmtt-8">&#x00A0;</span><span 
2227 class="cmtt-8">&#x00A0;5)</span><span 
2228 class="cmtt-8">&#x00A0;codeword</span><span 
2229 class="cmtt-8">&#x00A0;length</span><span 
2230 class="cmtt-8">&#x00A0;for</span><span 
2231 class="cmtt-8">&#x00A0;this</span><span 
2232 class="cmtt-8">&#x00A0;entry</span><span 
2233 class="cmtt-8">&#x00A0;is</span><span 
2234 class="cmtt-8">&#x00A0;[length]+1;</span>
2235 <br class="fancyvrb" /><a 
2236  id="x1-51048r9"></a><span 
2237 class="cmr-6">9</span><span 
2238 class="cmtt-8">&#x00A0;</span><span 
2239 class="cmtt-8">&#x00A0;</span>
2240 <br class="fancyvrb" /><a 
2241  id="x1-51050r10"></a><span 
2242 class="cmr-6">10</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="cmtt-8">&#x00A0;</span><span 
2255 class="cmtt-8">&#x00A0;</span><span 
2256 class="cmtt-8">&#x00A0;</span><span 
2257 class="cmsy-8">}</span><span 
2258 class="cmtt-8">&#x00A0;else</span><span 
2259 class="cmtt-8">&#x00A0;</span><span 
2260 class="cmsy-8">{</span>
2261 <br class="fancyvrb" /><a 
2262  id="x1-51052r11"></a><span 
2263 class="cmr-6">11</span><span 
2264 class="cmtt-8">&#x00A0;</span><span 
2265 class="cmtt-8">&#x00A0;</span>
2266 <br class="fancyvrb" /><a 
2267  id="x1-51054r12"></a><span 
2268 class="cmr-6">12</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;</span><span 
2282 class="cmtt-8">&#x00A0;</span><span 
2283 class="cmtt-8">&#x00A0;</span><span 
2284 class="cmtt-8">&#x00A0;6)</span><span 
2285 class="cmtt-8">&#x00A0;this</span><span 
2286 class="cmtt-8">&#x00A0;entry</span><span 
2287 class="cmtt-8">&#x00A0;is</span><span 
2288 class="cmtt-8">&#x00A0;unused.</span><span 
2289 class="cmtt-8">&#x00A0;</span><span 
2290 class="cmtt-8">&#x00A0;mark</span><span 
2291 class="cmtt-8">&#x00A0;it</span><span 
2292 class="cmtt-8">&#x00A0;as</span><span 
2293 class="cmtt-8">&#x00A0;such.</span>
2294 <br class="fancyvrb" /><a 
2295  id="x1-51056r13"></a><span 
2296 class="cmr-6">13</span><span 
2297 class="cmtt-8">&#x00A0;</span><span 
2298 class="cmtt-8">&#x00A0;</span>
2299 <br class="fancyvrb" /><a 
2300  id="x1-51058r14"></a><span 
2301 class="cmr-6">14</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="cmtt-8">&#x00A0;</span><span 
2314 class="cmtt-8">&#x00A0;</span><span 
2315 class="cmtt-8">&#x00A0;</span><span 
2316 class="cmsy-8">}</span>
2317 <br class="fancyvrb" /><a 
2318  id="x1-51060r15"></a><span 
2319 class="cmr-6">15</span><span 
2320 class="cmtt-8">&#x00A0;</span><span 
2321 class="cmtt-8">&#x00A0;</span>
2322 <br class="fancyvrb" /><a 
2323  id="x1-51062r16"></a><span 
2324 class="cmr-6">16</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="cmtt-8">&#x00A0;</span><span 
2330 class="cmtt-8">&#x00A0;</span><span 
2331 class="cmtt-8">&#x00A0;</span><span 
2332 class="cmsy-8">}</span><span 
2333 class="cmtt-8">&#x00A0;else</span><span 
2334 class="cmtt-8">&#x00A0;the</span><span 
2335 class="cmtt-8">&#x00A0;sparse</span><span 
2336 class="cmtt-8">&#x00A0;flag</span><span 
2337 class="cmtt-8">&#x00A0;is</span><span 
2338 class="cmtt-8">&#x00A0;not</span><span 
2339 class="cmtt-8">&#x00A0;set</span><span 
2340 class="cmtt-8">&#x00A0;</span><span 
2341 class="cmsy-8">{</span>
2342 <br class="fancyvrb" /><a 
2343  id="x1-51064r17"></a><span 
2344 class="cmr-6">17</span><span 
2345 class="cmtt-8">&#x00A0;</span><span 
2346 class="cmtt-8">&#x00A0;</span>
2347 <br class="fancyvrb" /><a 
2348  id="x1-51066r18"></a><span 
2349 class="cmr-6">18</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;</span><span 
2357 class="cmtt-8">&#x00A0;</span><span 
2358 class="cmtt-8">&#x00A0;</span><span 
2359 class="cmtt-8">&#x00A0;7)</span><span 
2360 class="cmtt-8">&#x00A0;[length]</span><span 
2361 class="cmtt-8">&#x00A0;=</span><span 
2362 class="cmtt-8">&#x00A0;read</span><span 
2363 class="cmtt-8">&#x00A0;a</span><span 
2364 class="cmtt-8">&#x00A0;five</span><span 
2365 class="cmtt-8">&#x00A0;bit</span><span 
2366 class="cmtt-8">&#x00A0;unsigned</span><span 
2367 class="cmtt-8">&#x00A0;integer;</span>
2368 <br class="fancyvrb" /><a 
2369  id="x1-51068r19"></a><span 
2370 class="cmr-6">19</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;</span><span 
2378 class="cmtt-8">&#x00A0;</span><span 
2379 class="cmtt-8">&#x00A0;</span><span 
2380 class="cmtt-8">&#x00A0;8)</span><span 
2381 class="cmtt-8">&#x00A0;the</span><span 
2382 class="cmtt-8">&#x00A0;codeword</span><span 
2383 class="cmtt-8">&#x00A0;length</span><span 
2384 class="cmtt-8">&#x00A0;for</span><span 
2385 class="cmtt-8">&#x00A0;this</span><span 
2386 class="cmtt-8">&#x00A0;entry</span><span 
2387 class="cmtt-8">&#x00A0;is</span><span 
2388 class="cmtt-8">&#x00A0;[length]+1;</span>
2389 <br class="fancyvrb" /><a 
2390  id="x1-51070r20"></a><span 
2391 class="cmr-6">20</span><span 
2392 class="cmtt-8">&#x00A0;</span><span 
2393 class="cmtt-8">&#x00A0;</span>
2394 <br class="fancyvrb" /><a 
2395  id="x1-51072r21"></a><span 
2396 class="cmr-6">21</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="cmtt-8">&#x00A0;</span><span 
2402 class="cmtt-8">&#x00A0;</span><span 
2403 class="cmtt-8">&#x00A0;</span><span 
2404 class="cmsy-8">}</span>
2405 <br class="fancyvrb" /><a 
2406  id="x1-51074r22"></a><span 
2407 class="cmr-6">22</span><span 
2408 class="cmtt-8">&#x00A0;</span><span 
2409 class="cmtt-8">&#x00A0;</span>
2410 </div>
2411       </li>
2412       <li class="itemize">If the <span 
2413 class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
2414       ascending length order. Rather than reading a length for every codeword, the
2415       encoder reads the number of codewords per length. That is, beginning at entry
2416       zero:
2417       <!--l. 120--><p class="noindent" >
2418       <div class="fancyvrb" id="fancyvrb12">
2419 <a 
2420  id="x1-51076r1"></a><span 
2421 class="cmr-6">1</span><span 
2422 class="cmtt-8">&#x00A0;</span><span 
2423 class="cmtt-8">&#x00A0;</span><span 
2424 class="cmtt-8">&#x00A0;</span><span 
2425 class="cmtt-8">&#x00A0;1)</span><span 
2426 class="cmtt-8">&#x00A0;[current_entry]</span><span 
2427 class="cmtt-8">&#x00A0;=</span><span 
2428 class="cmtt-8">&#x00A0;0;</span>
2429 <br class="fancyvrb" /><a 
2430  id="x1-51078r2"></a><span 
2431 class="cmr-6">2</span><span 
2432 class="cmtt-8">&#x00A0;</span><span 
2433 class="cmtt-8">&#x00A0;</span><span 
2434 class="cmtt-8">&#x00A0;</span><span 
2435 class="cmtt-8">&#x00A0;2)</span><span 
2436 class="cmtt-8">&#x00A0;[current_length]</span><span 
2437 class="cmtt-8">&#x00A0;=</span><span 
2438 class="cmtt-8">&#x00A0;read</span><span 
2439 class="cmtt-8">&#x00A0;a</span><span 
2440 class="cmtt-8">&#x00A0;five</span><span 
2441 class="cmtt-8">&#x00A0;bit</span><span 
2442 class="cmtt-8">&#x00A0;unsigned</span><span 
2443 class="cmtt-8">&#x00A0;integer</span><span 
2444 class="cmtt-8">&#x00A0;and</span><span 
2445 class="cmtt-8">&#x00A0;add</span><span 
2446 class="cmtt-8">&#x00A0;1;</span>
2447 <br class="fancyvrb" /><a 
2448  id="x1-51080r3"></a><span 
2449 class="cmr-6">3</span><span 
2450 class="cmtt-8">&#x00A0;</span><span 
2451 class="cmtt-8">&#x00A0;</span><span 
2452 class="cmtt-8">&#x00A0;</span><span 
2453 class="cmtt-8">&#x00A0;3)</span><span 
2454 class="cmtt-8">&#x00A0;[number]</span><span 
2455 class="cmtt-8">&#x00A0;=</span><span 
2456 class="cmtt-8">&#x00A0;read</span><span 
2457 class="cmtt-8">&#x00A0;</span><a 
2458 href="#x1-1170009.2.1"><span 
2459 class="cmtt-8">ilog</span></a><span 
2460 class="cmtt-8">([codebook_entries]</span><span 
2461 class="cmtt-8">&#x00A0;-</span><span 
2462 class="cmtt-8">&#x00A0;[current_entry])</span><span 
2463 class="cmtt-8">&#x00A0;bits</span><span 
2464 class="cmtt-8">&#x00A0;as</span><span 
2465 class="cmtt-8">&#x00A0;an</span><span 
2466 class="cmtt-8">&#x00A0;unsigned</span><span 
2467 class="cmtt-8">&#x00A0;integer</span>
2468 <br class="fancyvrb" /><a 
2469  id="x1-51082r4"></a><span 
2470 class="cmr-6">4</span><span 
2471 class="cmtt-8">&#x00A0;</span><span 
2472 class="cmtt-8">&#x00A0;</span><span 
2473 class="cmtt-8">&#x00A0;</span><span 
2474 class="cmtt-8">&#x00A0;4)</span><span 
2475 class="cmtt-8">&#x00A0;set</span><span 
2476 class="cmtt-8">&#x00A0;the</span><span 
2477 class="cmtt-8">&#x00A0;entries</span><span 
2478 class="cmtt-8">&#x00A0;[current_entry]</span><span 
2479 class="cmtt-8">&#x00A0;through</span><span 
2480 class="cmtt-8">&#x00A0;[current_entry]+[number]-1,</span><span 
2481 class="cmtt-8">&#x00A0;inclusive,</span>
2482 <br class="fancyvrb" /><a 
2483  id="x1-51084r5"></a><span 
2484 class="cmr-6">5</span><span 
2485 class="cmtt-8">&#x00A0;</span><span 
2486 class="cmtt-8">&#x00A0;</span><span 
2487 class="cmtt-8">&#x00A0;</span><span 
2488 class="cmtt-8">&#x00A0;</span><span 
2489 class="cmtt-8">&#x00A0;</span><span 
2490 class="cmtt-8">&#x00A0;of</span><span 
2491 class="cmtt-8">&#x00A0;the</span><span 
2492 class="cmtt-8">&#x00A0;[codebook_codeword_lengths]</span><span 
2493 class="cmtt-8">&#x00A0;array</span><span 
2494 class="cmtt-8">&#x00A0;to</span><span 
2495 class="cmtt-8">&#x00A0;[current_length]</span>
2496 <br class="fancyvrb" /><a 
2497  id="x1-51086r6"></a><span 
2498 class="cmr-6">6</span><span 
2499 class="cmtt-8">&#x00A0;</span><span 
2500 class="cmtt-8">&#x00A0;</span><span 
2501 class="cmtt-8">&#x00A0;</span><span 
2502 class="cmtt-8">&#x00A0;5)</span><span 
2503 class="cmtt-8">&#x00A0;set</span><span 
2504 class="cmtt-8">&#x00A0;[current_entry]</span><span 
2505 class="cmtt-8">&#x00A0;to</span><span 
2506 class="cmtt-8">&#x00A0;[number]</span><span 
2507 class="cmtt-8">&#x00A0;+</span><span 
2508 class="cmtt-8">&#x00A0;[current_entry]</span>
2509 <br class="fancyvrb" /><a 
2510  id="x1-51088r7"></a><span 
2511 class="cmr-6">7</span><span 
2512 class="cmtt-8">&#x00A0;</span><span 
2513 class="cmtt-8">&#x00A0;</span><span 
2514 class="cmtt-8">&#x00A0;</span><span 
2515 class="cmtt-8">&#x00A0;6)</span><span 
2516 class="cmtt-8">&#x00A0;increment</span><span 
2517 class="cmtt-8">&#x00A0;[current_length]</span><span 
2518 class="cmtt-8">&#x00A0;by</span><span 
2519 class="cmtt-8">&#x00A0;1</span>
2520 <br class="fancyvrb" /><a 
2521  id="x1-51090r8"></a><span 
2522 class="cmr-6">8</span><span 
2523 class="cmtt-8">&#x00A0;</span><span 
2524 class="cmtt-8">&#x00A0;</span><span 
2525 class="cmtt-8">&#x00A0;</span><span 
2526 class="cmtt-8">&#x00A0;7)</span><span 
2527 class="cmtt-8">&#x00A0;if</span><span 
2528 class="cmtt-8">&#x00A0;[current_entry]</span><span 
2529 class="cmtt-8">&#x00A0;is</span><span 
2530 class="cmtt-8">&#x00A0;greater</span><span 
2531 class="cmtt-8">&#x00A0;than</span><span 
2532 class="cmtt-8">&#x00A0;[codebook_entries]</span><span 
2533 class="cmtt-8">&#x00A0;ERROR</span><span 
2534 class="cmtt-8">&#x00A0;CONDITION;</span>
2535 <br class="fancyvrb" /><a 
2536  id="x1-51092r9"></a><span 
2537 class="cmr-6">9</span><span 
2538 class="cmtt-8">&#x00A0;</span><span 
2539 class="cmtt-8">&#x00A0;</span><span 
2540 class="cmtt-8">&#x00A0;</span><span 
2541 class="cmtt-8">&#x00A0;</span><span 
2542 class="cmtt-8">&#x00A0;</span><span 
2543 class="cmtt-8">&#x00A0;the</span><span 
2544 class="cmtt-8">&#x00A0;decoder</span><span 
2545 class="cmtt-8">&#x00A0;will</span><span 
2546 class="cmtt-8">&#x00A0;not</span><span 
2547 class="cmtt-8">&#x00A0;be</span><span 
2548 class="cmtt-8">&#x00A0;able</span><span 
2549 class="cmtt-8">&#x00A0;to</span><span 
2550 class="cmtt-8">&#x00A0;read</span><span 
2551 class="cmtt-8">&#x00A0;this</span><span 
2552 class="cmtt-8">&#x00A0;stream.</span>
2553 <br class="fancyvrb" /><a 
2554  id="x1-51094r10"></a><span 
2555 class="cmr-6">10</span><span 
2556 class="cmtt-8">&#x00A0;</span><span 
2557 class="cmtt-8">&#x00A0;</span><span 
2558 class="cmtt-8">&#x00A0;</span><span 
2559 class="cmtt-8">&#x00A0;8)</span><span 
2560 class="cmtt-8">&#x00A0;if</span><span 
2561 class="cmtt-8">&#x00A0;[current_entry]</span><span 
2562 class="cmtt-8">&#x00A0;is</span><span 
2563 class="cmtt-8">&#x00A0;less</span><span 
2564 class="cmtt-8">&#x00A0;than</span><span 
2565 class="cmtt-8">&#x00A0;[codebook_entries],</span><span 
2566 class="cmtt-8">&#x00A0;repeat</span><span 
2567 class="cmtt-8">&#x00A0;process</span><span 
2568 class="cmtt-8">&#x00A0;starting</span><span 
2569 class="cmtt-8">&#x00A0;at</span><span 
2570 class="cmtt-8">&#x00A0;3)</span>
2571 <br class="fancyvrb" /><a 
2572  id="x1-51096r11"></a><span 
2573 class="cmr-6">11</span><span 
2574 class="cmtt-8">&#x00A0;</span><span 
2575 class="cmtt-8">&#x00A0;</span><span 
2576 class="cmtt-8">&#x00A0;</span><span 
2577 class="cmtt-8">&#x00A0;9)</span><span 
2578 class="cmtt-8">&#x00A0;done.</span>
2579                                                                                         
2580
2581                                                                                         
2582 </div>
2583       </li></ul>
2584 <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
2585 I supports three lookup types:
2586       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
2587    1. </dt><dd 
2588 class="enumerate-enumitem">No lookup
2589       </dd><dt class="enumerate-enumitem">
2590    2. </dt><dd 
2591 class="enumerate-enumitem">Implicitly populated value mapping (lattice VQ)
2592       </dd><dt class="enumerate-enumitem">
2593    3. </dt><dd 
2594 class="enumerate-enumitem">Explicitly populated value mapping (tessellated or &#8217;foam&#8217; VQ)</dd></dl>
2595 <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
2596 <div class="fancyvrb" id="fancyvrb13">
2597 <a 
2598  id="x1-51101r1"></a><span 
2599 class="cmr-6">1</span><span 
2600 class="cmtt-8">&#x00A0;</span><span 
2601 class="cmtt-8">&#x00A0;</span><span 
2602 class="cmtt-8">&#x00A0;</span><span 
2603 class="cmtt-8">&#x00A0;1)</span><span 
2604 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span 
2605 class="cmtt-8">&#x00A0;=</span><span 
2606 class="cmtt-8">&#x00A0;read</span><span 
2607 class="cmtt-8">&#x00A0;four</span><span 
2608 class="cmtt-8">&#x00A0;bits</span><span 
2609 class="cmtt-8">&#x00A0;as</span><span 
2610 class="cmtt-8">&#x00A0;an</span><span 
2611 class="cmtt-8">&#x00A0;unsigned</span><span 
2612 class="cmtt-8">&#x00A0;integer</span>
2613 </div>
2614 <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span 
2615 class="cmtt-12">[codebook_lookup_type]</span>:
2616       <ul class="itemize1">
2617       <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
2618       </li>
2619       <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
2620       be read. Lookup type one reads a list of values that are permuted in a set pattern to
2621       build a list of vectors, each vector of order <span 
2622 class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
2623       type two builds the same vector list, but reads each scalar for each vector explicitly,
2624       rather than building vectors from a smaller list of possible scalar values. Lookup
2625       decode proceeds as follows:
2626       <!--l. 168--><p class="noindent" >
2627       <div class="fancyvrb" id="fancyvrb14">
2628 <a 
2629  id="x1-51103r1"></a><span 
2630 class="cmr-6">1</span><span 
2631 class="cmtt-8">&#x00A0;</span><span 
2632 class="cmtt-8">&#x00A0;</span><span 
2633 class="cmtt-8">&#x00A0;</span><span 
2634 class="cmtt-8">&#x00A0;1)</span><span 
2635 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span 
2636 class="cmtt-8">&#x00A0;=</span><span 
2637 class="cmtt-8">&#x00A0;</span><a 
2638 href="#x1-1180009.2.2"><span 
2639 class="cmtt-8">float32_unpack</span></a><span 
2640 class="cmtt-8">(</span><span 
2641 class="cmtt-8">&#x00A0;read</span><span 
2642 class="cmtt-8">&#x00A0;32</span><span 
2643 class="cmtt-8">&#x00A0;bits</span><span 
2644 class="cmtt-8">&#x00A0;as</span><span 
2645 class="cmtt-8">&#x00A0;an</span><span 
2646 class="cmtt-8">&#x00A0;unsigned</span><span 
2647 class="cmtt-8">&#x00A0;integer)</span>
2648 <br class="fancyvrb" /><a 
2649  id="x1-51105r2"></a><span 
2650 class="cmr-6">2</span><span 
2651 class="cmtt-8">&#x00A0;</span><span 
2652 class="cmtt-8">&#x00A0;</span><span 
2653 class="cmtt-8">&#x00A0;</span><span 
2654 class="cmtt-8">&#x00A0;2)</span><span 
2655 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span 
2656 class="cmtt-8">&#x00A0;=</span><span 
2657 class="cmtt-8">&#x00A0;</span><a 
2658 href="#x1-1180009.2.2"><span 
2659 class="cmtt-8">float32_unpack</span></a><span 
2660 class="cmtt-8">(</span><span 
2661 class="cmtt-8">&#x00A0;read</span><span 
2662 class="cmtt-8">&#x00A0;32</span><span 
2663 class="cmtt-8">&#x00A0;bits</span><span 
2664 class="cmtt-8">&#x00A0;as</span><span 
2665 class="cmtt-8">&#x00A0;an</span><span 
2666 class="cmtt-8">&#x00A0;unsigned</span><span 
2667 class="cmtt-8">&#x00A0;integer)</span>
2668 <br class="fancyvrb" /><a 
2669  id="x1-51107r3"></a><span 
2670 class="cmr-6">3</span><span 
2671 class="cmtt-8">&#x00A0;</span><span 
2672 class="cmtt-8">&#x00A0;</span><span 
2673 class="cmtt-8">&#x00A0;</span><span 
2674 class="cmtt-8">&#x00A0;3)</span><span 
2675 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span 
2676 class="cmtt-8">&#x00A0;=</span><span 
2677 class="cmtt-8">&#x00A0;read</span><span 
2678 class="cmtt-8">&#x00A0;4</span><span 
2679 class="cmtt-8">&#x00A0;bits</span><span 
2680 class="cmtt-8">&#x00A0;as</span><span 
2681 class="cmtt-8">&#x00A0;an</span><span 
2682 class="cmtt-8">&#x00A0;unsigned</span><span 
2683 class="cmtt-8">&#x00A0;integer</span><span 
2684 class="cmtt-8">&#x00A0;and</span><span 
2685 class="cmtt-8">&#x00A0;add</span><span 
2686 class="cmtt-8">&#x00A0;1</span>
2687 <br class="fancyvrb" /><a 
2688  id="x1-51109r4"></a><span 
2689 class="cmr-6">4</span><span 
2690 class="cmtt-8">&#x00A0;</span><span 
2691 class="cmtt-8">&#x00A0;</span><span 
2692 class="cmtt-8">&#x00A0;</span><span 
2693 class="cmtt-8">&#x00A0;4)</span><span 
2694 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span 
2695 class="cmtt-8">&#x00A0;=</span><span 
2696 class="cmtt-8">&#x00A0;read</span><span 
2697 class="cmtt-8">&#x00A0;1</span><span 
2698 class="cmtt-8">&#x00A0;bit</span><span 
2699 class="cmtt-8">&#x00A0;as</span><span 
2700 class="cmtt-8">&#x00A0;a</span><span 
2701 class="cmtt-8">&#x00A0;boolean</span><span 
2702 class="cmtt-8">&#x00A0;flag</span>
2703 <br class="fancyvrb" /><a 
2704  id="x1-51111r5"></a><span 
2705 class="cmr-6">5</span><span 
2706 class="cmtt-8">&#x00A0;</span><span 
2707 class="cmtt-8">&#x00A0;</span>
2708 <br class="fancyvrb" /><a 
2709  id="x1-51113r6"></a><span 
2710 class="cmr-6">6</span><span 
2711 class="cmtt-8">&#x00A0;</span><span 
2712 class="cmtt-8">&#x00A0;</span><span 
2713 class="cmtt-8">&#x00A0;</span><span 
2714 class="cmtt-8">&#x00A0;if</span><span 
2715 class="cmtt-8">&#x00A0;(</span><span 
2716 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span 
2717 class="cmtt-8">&#x00A0;is</span><span 
2718 class="cmtt-8">&#x00A0;1</span><span 
2719 class="cmtt-8">&#x00A0;)</span><span 
2720 class="cmtt-8">&#x00A0;</span><span 
2721 class="cmsy-8">{</span>
2722 <br class="fancyvrb" /><a 
2723  id="x1-51115r7"></a><span 
2724 class="cmr-6">7</span><span 
2725 class="cmtt-8">&#x00A0;</span><span 
2726 class="cmtt-8">&#x00A0;</span>
2727 <br class="fancyvrb" /><a 
2728  id="x1-51117r8"></a><span 
2729 class="cmr-6">8</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;</span><span 
2734 class="cmtt-8">&#x00A0;</span><span 
2735 class="cmtt-8">&#x00A0;</span><span 
2736 class="cmtt-8">&#x00A0;5)</span><span 
2737 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span 
2738 class="cmtt-8">&#x00A0;=</span><span 
2739 class="cmtt-8">&#x00A0;</span><a 
2740 href="#x1-1190009.2.3"><span 
2741 class="cmtt-8">lookup1_values</span></a><span 
2742 class="cmtt-8">([codebook_entries],</span><span 
2743 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span 
2744 class="cmtt-8">&#x00A0;)</span>
2745 <br class="fancyvrb" /><a 
2746  id="x1-51119r9"></a><span 
2747 class="cmr-6">9</span><span 
2748 class="cmtt-8">&#x00A0;</span><span 
2749 class="cmtt-8">&#x00A0;</span>
2750 <br class="fancyvrb" /><a 
2751  id="x1-51121r10"></a><span 
2752 class="cmr-6">10</span><span 
2753 class="cmtt-8">&#x00A0;</span><span 
2754 class="cmtt-8">&#x00A0;</span><span 
2755 class="cmtt-8">&#x00A0;</span><span 
2756 class="cmtt-8">&#x00A0;</span><span 
2757 class="cmsy-8">}</span><span 
2758 class="cmtt-8">&#x00A0;else</span><span 
2759 class="cmtt-8">&#x00A0;</span><span 
2760 class="cmsy-8">{</span>
2761 <br class="fancyvrb" /><a 
2762  id="x1-51123r11"></a><span 
2763 class="cmr-6">11</span><span 
2764 class="cmtt-8">&#x00A0;</span><span 
2765 class="cmtt-8">&#x00A0;</span>
2766 <br class="fancyvrb" /><a 
2767  id="x1-51125r12"></a><span 
2768 class="cmr-6">12</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;</span><span 
2773 class="cmtt-8">&#x00A0;</span><span 
2774 class="cmtt-8">&#x00A0;</span><span 
2775 class="cmtt-8">&#x00A0;6)</span><span 
2776 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span 
2777 class="cmtt-8">&#x00A0;=</span><span 
2778 class="cmtt-8">&#x00A0;[codebook_entries]</span><span 
2779 class="cmtt-8">&#x00A0;*</span><span 
2780 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
2781 <br class="fancyvrb" /><a 
2782  id="x1-51127r13"></a><span 
2783 class="cmr-6">13</span><span 
2784 class="cmtt-8">&#x00A0;</span><span 
2785 class="cmtt-8">&#x00A0;</span>
2786 <br class="fancyvrb" /><a 
2787  id="x1-51129r14"></a><span 
2788 class="cmr-6">14</span><span 
2789 class="cmtt-8">&#x00A0;</span><span 
2790 class="cmtt-8">&#x00A0;</span><span 
2791 class="cmtt-8">&#x00A0;</span><span 
2792 class="cmtt-8">&#x00A0;</span><span 
2793 class="cmsy-8">}</span>
2794 <br class="fancyvrb" /><a 
2795  id="x1-51131r15"></a><span 
2796 class="cmr-6">15</span><span 
2797 class="cmtt-8">&#x00A0;</span><span 
2798 class="cmtt-8">&#x00A0;</span>
2799 <br class="fancyvrb" /><a 
2800  id="x1-51133r16"></a><span 
2801 class="cmr-6">16</span><span 
2802 class="cmtt-8">&#x00A0;</span><span 
2803 class="cmtt-8">&#x00A0;</span><span 
2804 class="cmtt-8">&#x00A0;</span><span 
2805 class="cmtt-8">&#x00A0;7)</span><span 
2806 class="cmtt-8">&#x00A0;read</span><span 
2807 class="cmtt-8">&#x00A0;a</span><span 
2808 class="cmtt-8">&#x00A0;total</span><span 
2809 class="cmtt-8">&#x00A0;of</span><span 
2810 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span 
2811 class="cmtt-8">&#x00A0;unsigned</span><span 
2812 class="cmtt-8">&#x00A0;integers</span><span 
2813 class="cmtt-8">&#x00A0;of</span><span 
2814 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span 
2815 class="cmtt-8">&#x00A0;each;</span>
2816                                                                                         
2817
2818                                                                                         
2819 <br class="fancyvrb" /><a 
2820  id="x1-51135r17"></a><span 
2821 class="cmr-6">17</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;</span><span 
2826 class="cmtt-8">&#x00A0;</span><span 
2827 class="cmtt-8">&#x00A0;</span><span 
2828 class="cmtt-8">&#x00A0;store</span><span 
2829 class="cmtt-8">&#x00A0;these</span><span 
2830 class="cmtt-8">&#x00A0;in</span><span 
2831 class="cmtt-8">&#x00A0;order</span><span 
2832 class="cmtt-8">&#x00A0;in</span><span 
2833 class="cmtt-8">&#x00A0;the</span><span 
2834 class="cmtt-8">&#x00A0;array</span><span 
2835 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span>
2836 </div>
2837       </li>
2838       <li class="itemize">A <span 
2839 class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
2840       not decodable by the specification in this document.
2841       </li></ul>
2842 <!--l. 195--><p class="noindent" >An &#8217;end of packet&#8217; during any read operation in the above steps is considered an error condition
2843 rendering the stream undecodable.
2844 <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a 
2845  id="x1-520003.2.1"></a><span 
2846 class="cmbx-12">Huffman decision tree representation</span></span>
2847 The <span 
2848 class="cmtt-12">[codebook_codeword_lengths] </span>array and <span 
2849 class="cmtt-12">[codebook_entries] </span>value uniquely define the
2850 Huffman decision tree used for entropy decoding.
2851 <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
2852 codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
2853 possible. Assume the following codeword length list:
2854 <!--l. 209--><p class="noindent" >
2855 <div class="fancyvrb" id="fancyvrb15">
2856 <a 
2857  id="x1-52002r1"></a><span 
2858 class="cmr-6">1</span><span 
2859 class="cmtt-8">&#x00A0;</span><span 
2860 class="cmtt-8">&#x00A0;entry</span><span 
2861 class="cmtt-8">&#x00A0;0:</span><span 
2862 class="cmtt-8">&#x00A0;length</span><span 
2863 class="cmtt-8">&#x00A0;2</span>
2864 <br class="fancyvrb" /><a 
2865  id="x1-52004r2"></a><span 
2866 class="cmr-6">2</span><span 
2867 class="cmtt-8">&#x00A0;</span><span 
2868 class="cmtt-8">&#x00A0;entry</span><span 
2869 class="cmtt-8">&#x00A0;1:</span><span 
2870 class="cmtt-8">&#x00A0;length</span><span 
2871 class="cmtt-8">&#x00A0;4</span>
2872 <br class="fancyvrb" /><a 
2873  id="x1-52006r3"></a><span 
2874 class="cmr-6">3</span><span 
2875 class="cmtt-8">&#x00A0;</span><span 
2876 class="cmtt-8">&#x00A0;entry</span><span 
2877 class="cmtt-8">&#x00A0;2:</span><span 
2878 class="cmtt-8">&#x00A0;length</span><span 
2879 class="cmtt-8">&#x00A0;4</span>
2880 <br class="fancyvrb" /><a 
2881  id="x1-52008r4"></a><span 
2882 class="cmr-6">4</span><span 
2883 class="cmtt-8">&#x00A0;</span><span 
2884 class="cmtt-8">&#x00A0;entry</span><span 
2885 class="cmtt-8">&#x00A0;3:</span><span 
2886 class="cmtt-8">&#x00A0;length</span><span 
2887 class="cmtt-8">&#x00A0;4</span>
2888 <br class="fancyvrb" /><a 
2889  id="x1-52010r5"></a><span 
2890 class="cmr-6">5</span><span 
2891 class="cmtt-8">&#x00A0;</span><span 
2892 class="cmtt-8">&#x00A0;entry</span><span 
2893 class="cmtt-8">&#x00A0;4:</span><span 
2894 class="cmtt-8">&#x00A0;length</span><span 
2895 class="cmtt-8">&#x00A0;4</span>
2896 <br class="fancyvrb" /><a 
2897  id="x1-52012r6"></a><span 
2898 class="cmr-6">6</span><span 
2899 class="cmtt-8">&#x00A0;</span><span 
2900 class="cmtt-8">&#x00A0;entry</span><span 
2901 class="cmtt-8">&#x00A0;5:</span><span 
2902 class="cmtt-8">&#x00A0;length</span><span 
2903 class="cmtt-8">&#x00A0;2</span>
2904 <br class="fancyvrb" /><a 
2905  id="x1-52014r7"></a><span 
2906 class="cmr-6">7</span><span 
2907 class="cmtt-8">&#x00A0;</span><span 
2908 class="cmtt-8">&#x00A0;entry</span><span 
2909 class="cmtt-8">&#x00A0;6:</span><span 
2910 class="cmtt-8">&#x00A0;length</span><span 
2911 class="cmtt-8">&#x00A0;3</span>
2912 <br class="fancyvrb" /><a 
2913  id="x1-52016r8"></a><span 
2914 class="cmr-6">8</span><span 
2915 class="cmtt-8">&#x00A0;</span><span 
2916 class="cmtt-8">&#x00A0;entry</span><span 
2917 class="cmtt-8">&#x00A0;7:</span><span 
2918 class="cmtt-8">&#x00A0;length</span><span 
2919 class="cmtt-8">&#x00A0;3</span>
2920 </div>
2921 <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
2922 in the following codeword list:
2923 <!--l. 223--><p class="noindent" >
2924 <div class="fancyvrb" id="fancyvrb16">
2925 <a 
2926  id="x1-52018r1"></a><span 
2927 class="cmr-6">1</span><span 
2928 class="cmtt-8">&#x00A0;</span><span 
2929 class="cmtt-8">&#x00A0;entry</span><span 
2930 class="cmtt-8">&#x00A0;0:</span><span 
2931 class="cmtt-8">&#x00A0;length</span><span 
2932 class="cmtt-8">&#x00A0;2</span><span 
2933 class="cmtt-8">&#x00A0;codeword</span><span 
2934 class="cmtt-8">&#x00A0;00</span>
2935 <br class="fancyvrb" /><a 
2936  id="x1-52020r2"></a><span 
2937 class="cmr-6">2</span><span 
2938 class="cmtt-8">&#x00A0;</span><span 
2939 class="cmtt-8">&#x00A0;entry</span><span 
2940 class="cmtt-8">&#x00A0;1:</span><span 
2941 class="cmtt-8">&#x00A0;length</span><span 
2942 class="cmtt-8">&#x00A0;4</span><span 
2943 class="cmtt-8">&#x00A0;codeword</span><span 
2944 class="cmtt-8">&#x00A0;0100</span>
2945 <br class="fancyvrb" /><a 
2946  id="x1-52022r3"></a><span 
2947 class="cmr-6">3</span><span 
2948 class="cmtt-8">&#x00A0;</span><span 
2949 class="cmtt-8">&#x00A0;entry</span><span 
2950 class="cmtt-8">&#x00A0;2:</span><span 
2951 class="cmtt-8">&#x00A0;length</span><span 
2952 class="cmtt-8">&#x00A0;4</span><span 
2953 class="cmtt-8">&#x00A0;codeword</span><span 
2954 class="cmtt-8">&#x00A0;0101</span>
2955 <br class="fancyvrb" /><a 
2956  id="x1-52024r4"></a><span 
2957 class="cmr-6">4</span><span 
2958 class="cmtt-8">&#x00A0;</span><span 
2959 class="cmtt-8">&#x00A0;entry</span><span 
2960 class="cmtt-8">&#x00A0;3:</span><span 
2961 class="cmtt-8">&#x00A0;length</span><span 
2962 class="cmtt-8">&#x00A0;4</span><span 
2963 class="cmtt-8">&#x00A0;codeword</span><span 
2964 class="cmtt-8">&#x00A0;0110</span>
2965 <br class="fancyvrb" /><a 
2966  id="x1-52026r5"></a><span 
2967 class="cmr-6">5</span><span 
2968 class="cmtt-8">&#x00A0;</span><span 
2969 class="cmtt-8">&#x00A0;entry</span><span 
2970 class="cmtt-8">&#x00A0;4:</span><span 
2971 class="cmtt-8">&#x00A0;length</span><span 
2972 class="cmtt-8">&#x00A0;4</span><span 
2973 class="cmtt-8">&#x00A0;codeword</span><span 
2974 class="cmtt-8">&#x00A0;0111</span>
2975 <br class="fancyvrb" /><a 
2976  id="x1-52028r6"></a><span 
2977 class="cmr-6">6</span><span 
2978 class="cmtt-8">&#x00A0;</span><span 
2979 class="cmtt-8">&#x00A0;entry</span><span 
2980 class="cmtt-8">&#x00A0;5:</span><span 
2981 class="cmtt-8">&#x00A0;length</span><span 
2982 class="cmtt-8">&#x00A0;2</span><span 
2983 class="cmtt-8">&#x00A0;codeword</span><span 
2984 class="cmtt-8">&#x00A0;10</span>
2985 <br class="fancyvrb" /><a 
2986  id="x1-52030r7"></a><span 
2987 class="cmr-6">7</span><span 
2988 class="cmtt-8">&#x00A0;</span><span 
2989 class="cmtt-8">&#x00A0;entry</span><span 
2990 class="cmtt-8">&#x00A0;6:</span><span 
2991 class="cmtt-8">&#x00A0;length</span><span 
2992 class="cmtt-8">&#x00A0;3</span><span 
2993 class="cmtt-8">&#x00A0;codeword</span><span 
2994 class="cmtt-8">&#x00A0;110</span>
2995 <br class="fancyvrb" /><a 
2996  id="x1-52032r8"></a><span 
2997 class="cmr-6">8</span><span 
2998 class="cmtt-8">&#x00A0;</span><span 
2999 class="cmtt-8">&#x00A0;entry</span><span 
3000 class="cmtt-8">&#x00A0;7:</span><span 
3001 class="cmtt-8">&#x00A0;length</span><span 
3002 class="cmtt-8">&#x00A0;3</span><span 
3003 class="cmtt-8">&#x00A0;codeword</span><span 
3004 class="cmtt-8">&#x00A0;111</span>
3005 </div>
3006                                                                                         
3007
3008                                                                                         
3009 <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a 
3010  id="x1-530003.2.1"></a><span 
3011 class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
3012 be read and used bit by bit from left to right, thus the codeword &#8217;001&#8217; is the bit string &#8217;zero, zero,
3013 one&#8217;. When determining &#8217;lowest possible value&#8217; in the assignment definition above, the leftmost
3014 bit is the MSb.
3015 <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
3016 numbers equivalent to the leaves numbered left-to-right:
3017 <div class="center" 
3018 >
3019 <!--l. 247--><p class="noindent" >
3020
3021 <!--l. 248--><p class="noindent" ><img 
3022 src="hufftree.png" alt="PIC"  
3023 >
3024 <br /> <div class="caption" 
3025 ><span class="id">Figure&#x00A0;4: </span><span  
3026 class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
3027 </div>
3028 <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
3029 possible position.
3030 <!--l. 256--><p class="noindent" >Note that it&#8217;s possible to underspecify or overspecify a Huffman tree via the length list.
3031 In the above example, if codeword seven were eliminated, it&#8217;s clear that the tree is
3032 unfinished:
3033 <div class="center" 
3034 >
3035 <!--l. 260--><p class="noindent" >
3036
3037 <!--l. 261--><p class="noindent" ><img 
3038 src="hufftree-under.png" alt="PIC"  
3039 >
3040 <br /> <div class="caption" 
3041 ><span class="id">Figure&#x00A0;5: </span><span  
3042 class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
3043 </div>
3044 <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it&#8217;s clear that the tree is fully populated and a ninth
3045 codeword is impossible. Both underspecified and overspecified trees are an error condition
3046 rendering the stream undecodable. Take special care that a codebook with a single used
3047 entry is handled properly; it consists of a single codework of zero bits and &#8217;reading&#8217;
3048 a value out of such a codebook always returns the single used value and sinks zero
3049 bits.
3050 <!--l. 274--><p class="noindent" >Codebook entries marked &#8217;unused&#8217; are simply skipped in the assigning process. They have no
3051 codeword and do not appear in the decision tree, thus it&#8217;s impossible for any bit pattern read
3052 from the stream to decode to that entry number.
3053                                                                                         
3054
3055                                                                                         
3056 <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a 
3057  id="x1-540003.2.1"></a><span 
3058 class="cmbx-12">VQ lookup table vector representation</span></span>
3059 Unpacking the VQ lookup table vectors relies on the following values:
3060 <div class="fancyvrb" id="fancyvrb17">
3061 <a 
3062  id="x1-54002r1"></a><span 
3063 class="cmr-6">1</span><span 
3064 class="cmtt-8">&#x00A0;</span><span 
3065 class="cmtt-8">&#x00A0;the</span><span 
3066 class="cmtt-8">&#x00A0;[codebook\_multiplicands]</span><span 
3067 class="cmtt-8">&#x00A0;array</span>
3068 <br class="fancyvrb" /><a 
3069  id="x1-54004r2"></a><span 
3070 class="cmr-6">2</span><span 
3071 class="cmtt-8">&#x00A0;</span><span 
3072 class="cmtt-8">&#x00A0;[codebook\_minimum\_value]</span>
3073 <br class="fancyvrb" /><a 
3074  id="x1-54006r3"></a><span 
3075 class="cmr-6">3</span><span 
3076 class="cmtt-8">&#x00A0;</span><span 
3077 class="cmtt-8">&#x00A0;[codebook\_delta\_value]</span>
3078 <br class="fancyvrb" /><a 
3079  id="x1-54008r4"></a><span 
3080 class="cmr-6">4</span><span 
3081 class="cmtt-8">&#x00A0;</span><span 
3082 class="cmtt-8">&#x00A0;[codebook\_sequence\_p]</span>
3083 <br class="fancyvrb" /><a 
3084  id="x1-54010r5"></a><span 
3085 class="cmr-6">5</span><span 
3086 class="cmtt-8">&#x00A0;</span><span 
3087 class="cmtt-8">&#x00A0;[codebook\_lookup\_type]</span>
3088 <br class="fancyvrb" /><a 
3089  id="x1-54012r6"></a><span 
3090 class="cmr-6">6</span><span 
3091 class="cmtt-8">&#x00A0;</span><span 
3092 class="cmtt-8">&#x00A0;[codebook\_entries]</span>
3093 <br class="fancyvrb" /><a 
3094  id="x1-54014r7"></a><span 
3095 class="cmr-6">7</span><span 
3096 class="cmtt-8">&#x00A0;</span><span 
3097 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
3098 <br class="fancyvrb" /><a 
3099  id="x1-54016r8"></a><span 
3100 class="cmr-6">8</span><span 
3101 class="cmtt-8">&#x00A0;</span><span 
3102 class="cmtt-8">&#x00A0;[codebook\_lookup\_values]</span>
3103 </div>
3104 <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
3105 <span 
3106 class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
3107 during audio packet decode in a VQ context.
3108 <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a 
3109  id="x1-550003.2.1"></a><span 
3110 class="cmbx-12">Vector value decode: Lookup type 1</span></span>
3111 Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
3112 scalar values. Calculate (unpack) the final values of a codebook entry vector from
3113 the entries in <span 
3114 class="cmtt-12">[codebook_multiplicands] </span>as follows (<span 
3115 class="cmtt-12">[value_vector] </span>is the output
3116 vector representing the vector of values for entry number <span 
3117 class="cmtt-12">[lookup_offset] </span>in this
3118 codebook):
3119 <!--l. 311--><p class="noindent" >
3120 <div class="fancyvrb" id="fancyvrb18">
3121 <a 
3122  id="x1-55002r1"></a><span 
3123 class="cmr-6">1</span><span 
3124 class="cmtt-8">&#x00A0;</span><span 
3125 class="cmtt-8">&#x00A0;</span><span 
3126 class="cmtt-8">&#x00A0;</span><span 
3127 class="cmtt-8">&#x00A0;1)</span><span 
3128 class="cmtt-8">&#x00A0;[last]</span><span 
3129 class="cmtt-8">&#x00A0;=</span><span 
3130 class="cmtt-8">&#x00A0;0;</span>
3131 <br class="fancyvrb" /><a 
3132  id="x1-55004r2"></a><span 
3133 class="cmr-6">2</span><span 
3134 class="cmtt-8">&#x00A0;</span><span 
3135 class="cmtt-8">&#x00A0;</span><span 
3136 class="cmtt-8">&#x00A0;</span><span 
3137 class="cmtt-8">&#x00A0;2)</span><span 
3138 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
3139 class="cmtt-8">&#x00A0;=</span><span 
3140 class="cmtt-8">&#x00A0;1;</span>
3141 <br class="fancyvrb" /><a 
3142  id="x1-55006r3"></a><span 
3143 class="cmr-6">3</span><span 
3144 class="cmtt-8">&#x00A0;</span><span 
3145 class="cmtt-8">&#x00A0;</span><span 
3146 class="cmtt-8">&#x00A0;</span><span 
3147 class="cmtt-8">&#x00A0;3)</span><span 
3148 class="cmtt-8">&#x00A0;iterate</span><span 
3149 class="cmtt-8">&#x00A0;[i]</span><span 
3150 class="cmtt-8">&#x00A0;over</span><span 
3151 class="cmtt-8">&#x00A0;the</span><span 
3152 class="cmtt-8">&#x00A0;range</span><span 
3153 class="cmtt-8">&#x00A0;0</span><span 
3154 class="cmtt-8">&#x00A0;...</span><span 
3155 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span 
3156 class="cmtt-8">&#x00A0;(once</span><span 
3157 class="cmtt-8">&#x00A0;for</span><span 
3158 class="cmtt-8">&#x00A0;each</span><span 
3159 class="cmtt-8">&#x00A0;scalar</span><span 
3160 class="cmtt-8">&#x00A0;value</span><span 
3161 class="cmtt-8">&#x00A0;in</span><span 
3162 class="cmtt-8">&#x00A0;the</span><span 
3163 class="cmtt-8">&#x00A0;value</span><span 
3164 class="cmtt-8">&#x00A0;vector)</span><span 
3165 class="cmtt-8">&#x00A0;</span><span 
3166 class="cmsy-8">{</span>
3167 <br class="fancyvrb" /><a 
3168  id="x1-55008r4"></a><span 
3169 class="cmr-6">4</span><span 
3170 class="cmtt-8">&#x00A0;</span><span 
3171 class="cmtt-8">&#x00A0;</span>
3172 <br class="fancyvrb" /><a 
3173  id="x1-55010r5"></a><span 
3174 class="cmr-6">5</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;</span><span 
3181 class="cmtt-8">&#x00A0;</span><span 
3182 class="cmtt-8">&#x00A0;</span><span 
3183 class="cmtt-8">&#x00A0;4)</span><span 
3184 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
3185 class="cmtt-8">&#x00A0;=</span><span 
3186 class="cmtt-8">&#x00A0;(</span><span 
3187 class="cmtt-8">&#x00A0;[lookup_offset]</span><span 
3188 class="cmtt-8">&#x00A0;divided</span><span 
3189 class="cmtt-8">&#x00A0;by</span><span 
3190 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
3191 class="cmtt-8">&#x00A0;using</span><span 
3192 class="cmtt-8">&#x00A0;integer</span>
3193 <br class="fancyvrb" /><a 
3194  id="x1-55012r6"></a><span 
3195 class="cmr-6">6</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;</span><span 
3205 class="cmtt-8">&#x00A0;</span><span 
3206 class="cmtt-8">&#x00A0;</span><span 
3207 class="cmtt-8">&#x00A0;division</span><span 
3208 class="cmtt-8">&#x00A0;)</span><span 
3209 class="cmtt-8">&#x00A0;integer</span><span 
3210 class="cmtt-8">&#x00A0;modulo</span><span 
3211 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
3212 <br class="fancyvrb" /><a 
3213  id="x1-55014r7"></a><span 
3214 class="cmr-6">7</span><span 
3215 class="cmtt-8">&#x00A0;</span><span 
3216 class="cmtt-8">&#x00A0;</span>
3217 <br class="fancyvrb" /><a 
3218  id="x1-55016r8"></a><span 
3219 class="cmr-6">8</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;</span><span 
3226 class="cmtt-8">&#x00A0;</span><span 
3227 class="cmtt-8">&#x00A0;</span><span 
3228 class="cmtt-8">&#x00A0;5)</span><span 
3229 class="cmtt-8">&#x00A0;vector</span><span 
3230 class="cmtt-8">&#x00A0;[value_vector]</span><span 
3231 class="cmtt-8">&#x00A0;element</span><span 
3232 class="cmtt-8">&#x00A0;[i]</span><span 
3233 class="cmtt-8">&#x00A0;=</span>
3234 <br class="fancyvrb" /><a 
3235  id="x1-55018r9"></a><span 
3236 class="cmr-6">9</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;</span><span 
3249 class="cmtt-8">&#x00A0;</span><span 
3250 class="cmtt-8">&#x00A0;(</span><span 
3251 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span 
3252 class="cmtt-8">&#x00A0;array</span><span 
3253 class="cmtt-8">&#x00A0;element</span><span 
3254 class="cmtt-8">&#x00A0;number</span><span 
3255 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
3256 class="cmtt-8">&#x00A0;)</span><span 
3257 class="cmtt-8">&#x00A0;*</span>
3258 <br class="fancyvrb" /><a 
3259  id="x1-55020r10"></a><span 
3260 class="cmr-6">10</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;</span><span 
3272 class="cmtt-8">&#x00A0;</span><span 
3273 class="cmtt-8">&#x00A0;</span><span 
3274 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span 
3275 class="cmtt-8">&#x00A0;+</span><span 
3276 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span 
3277 class="cmtt-8">&#x00A0;+</span><span 
3278 class="cmtt-8">&#x00A0;[last];</span>
3279 <br class="fancyvrb" /><a 
3280  id="x1-55022r11"></a><span 
3281 class="cmr-6">11</span><span 
3282 class="cmtt-8">&#x00A0;</span><span 
3283 class="cmtt-8">&#x00A0;</span>
3284 <br class="fancyvrb" /><a 
3285  id="x1-55024r12"></a><span 
3286 class="cmr-6">12</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;</span><span 
3293 class="cmtt-8">&#x00A0;</span><span 
3294 class="cmtt-8">&#x00A0;</span><span 
3295 class="cmtt-8">&#x00A0;6)</span><span 
3296 class="cmtt-8">&#x00A0;if</span><span 
3297 class="cmtt-8">&#x00A0;(</span><span 
3298 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span 
3299 class="cmtt-8">&#x00A0;is</span><span 
3300 class="cmtt-8">&#x00A0;set</span><span 
3301 class="cmtt-8">&#x00A0;)</span><span 
3302 class="cmtt-8">&#x00A0;then</span><span 
3303 class="cmtt-8">&#x00A0;set</span><span 
3304 class="cmtt-8">&#x00A0;[last]</span><span 
3305 class="cmtt-8">&#x00A0;=</span><span 
3306 class="cmtt-8">&#x00A0;vector</span><span 
3307 class="cmtt-8">&#x00A0;[value_vector]</span><span 
3308 class="cmtt-8">&#x00A0;element</span><span 
3309 class="cmtt-8">&#x00A0;[i]</span>
3310 <br class="fancyvrb" /><a 
3311  id="x1-55026r13"></a><span 
3312 class="cmr-6">13</span><span 
3313 class="cmtt-8">&#x00A0;</span><span 
3314 class="cmtt-8">&#x00A0;</span>
3315 <br class="fancyvrb" /><a 
3316  id="x1-55028r14"></a><span 
3317 class="cmr-6">14</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;</span><span 
3324 class="cmtt-8">&#x00A0;</span><span 
3325 class="cmtt-8">&#x00A0;</span><span 
3326 class="cmtt-8">&#x00A0;7)</span><span 
3327 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
3328 class="cmtt-8">&#x00A0;=</span><span 
3329 class="cmtt-8">&#x00A0;[index_divisor]</span><span 
3330 class="cmtt-8">&#x00A0;*</span><span 
3331 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
3332 <br class="fancyvrb" /><a 
3333  id="x1-55030r15"></a><span 
3334 class="cmr-6">15</span><span 
3335 class="cmtt-8">&#x00A0;</span><span 
3336 class="cmtt-8">&#x00A0;</span>
3337 <br class="fancyvrb" /><a 
3338  id="x1-55032r16"></a><span 
3339 class="cmr-6">16</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="cmtt-8">&#x00A0;</span><span 
3345 class="cmtt-8">&#x00A0;</span><span 
3346 class="cmtt-8">&#x00A0;</span><span 
3347 class="cmsy-8">}</span>
3348 <br class="fancyvrb" /><a 
3349  id="x1-55034r17"></a><span 
3350 class="cmr-6">17</span><span 
3351 class="cmtt-8">&#x00A0;</span><span 
3352 class="cmtt-8">&#x00A0;</span>
3353 <br class="fancyvrb" /><a 
3354  id="x1-55036r18"></a><span 
3355 class="cmr-6">18</span><span 
3356 class="cmtt-8">&#x00A0;</span><span 
3357 class="cmtt-8">&#x00A0;</span><span 
3358 class="cmtt-8">&#x00A0;</span><span 
3359 class="cmtt-8">&#x00A0;8)</span><span 
3360 class="cmtt-8">&#x00A0;vector</span><span 
3361 class="cmtt-8">&#x00A0;calculation</span><span 
3362 class="cmtt-8">&#x00A0;completed.</span>
3363 </div>
3364                                                                                         
3365
3366                                                                                         
3367 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a 
3368  id="x1-560003.2.1"></a><span 
3369 class="cmbx-12">Vector value decode: Lookup type 2</span></span>
3370 Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
3371 by the <span 
3372 class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
3373 values of a codebook entry vector from the entries in <span 
3374 class="cmtt-12">[codebook_multiplicands] </span>as follows
3375 (<span 
3376 class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
3377 <span 
3378 class="cmtt-12">[lookup_offset] </span>in this codebook):
3379 <!--l. 344--><p class="noindent" >
3380 <div class="fancyvrb" id="fancyvrb19">
3381 <a 
3382  id="x1-56002r1"></a><span 
3383 class="cmr-6">1</span><span 
3384 class="cmtt-8">&#x00A0;</span><span 
3385 class="cmtt-8">&#x00A0;</span><span 
3386 class="cmtt-8">&#x00A0;</span><span 
3387 class="cmtt-8">&#x00A0;1)</span><span 
3388 class="cmtt-8">&#x00A0;[last]</span><span 
3389 class="cmtt-8">&#x00A0;=</span><span 
3390 class="cmtt-8">&#x00A0;0;</span>
3391 <br class="fancyvrb" /><a 
3392  id="x1-56004r2"></a><span 
3393 class="cmr-6">2</span><span 
3394 class="cmtt-8">&#x00A0;</span><span 
3395 class="cmtt-8">&#x00A0;</span><span 
3396 class="cmtt-8">&#x00A0;</span><span 
3397 class="cmtt-8">&#x00A0;2)</span><span 
3398 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
3399 class="cmtt-8">&#x00A0;=</span><span 
3400 class="cmtt-8">&#x00A0;[lookup_offset]</span><span 
3401 class="cmtt-8">&#x00A0;*</span><span 
3402 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
3403 <br class="fancyvrb" /><a 
3404  id="x1-56006r3"></a><span 
3405 class="cmr-6">3</span><span 
3406 class="cmtt-8">&#x00A0;</span><span 
3407 class="cmtt-8">&#x00A0;</span><span 
3408 class="cmtt-8">&#x00A0;</span><span 
3409 class="cmtt-8">&#x00A0;3)</span><span 
3410 class="cmtt-8">&#x00A0;iterate</span><span 
3411 class="cmtt-8">&#x00A0;[i]</span><span 
3412 class="cmtt-8">&#x00A0;over</span><span 
3413 class="cmtt-8">&#x00A0;the</span><span 
3414 class="cmtt-8">&#x00A0;range</span><span 
3415 class="cmtt-8">&#x00A0;0</span><span 
3416 class="cmtt-8">&#x00A0;...</span><span 
3417 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span 
3418 class="cmtt-8">&#x00A0;(once</span><span 
3419 class="cmtt-8">&#x00A0;for</span><span 
3420 class="cmtt-8">&#x00A0;each</span><span 
3421 class="cmtt-8">&#x00A0;scalar</span><span 
3422 class="cmtt-8">&#x00A0;value</span><span 
3423 class="cmtt-8">&#x00A0;in</span><span 
3424 class="cmtt-8">&#x00A0;the</span><span 
3425 class="cmtt-8">&#x00A0;value</span><span 
3426 class="cmtt-8">&#x00A0;vector)</span><span 
3427 class="cmtt-8">&#x00A0;</span><span 
3428 class="cmsy-8">{</span>
3429 <br class="fancyvrb" /><a 
3430  id="x1-56008r4"></a><span 
3431 class="cmr-6">4</span><span 
3432 class="cmtt-8">&#x00A0;</span><span 
3433 class="cmtt-8">&#x00A0;</span>
3434 <br class="fancyvrb" /><a 
3435  id="x1-56010r5"></a><span 
3436 class="cmr-6">5</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;</span><span 
3443 class="cmtt-8">&#x00A0;</span><span 
3444 class="cmtt-8">&#x00A0;</span><span 
3445 class="cmtt-8">&#x00A0;4)</span><span 
3446 class="cmtt-8">&#x00A0;vector</span><span 
3447 class="cmtt-8">&#x00A0;[value_vector]</span><span 
3448 class="cmtt-8">&#x00A0;element</span><span 
3449 class="cmtt-8">&#x00A0;[i]</span><span 
3450 class="cmtt-8">&#x00A0;=</span>
3451 <br class="fancyvrb" /><a 
3452  id="x1-56012r6"></a><span 
3453 class="cmr-6">6</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;</span><span 
3466 class="cmtt-8">&#x00A0;</span><span 
3467 class="cmtt-8">&#x00A0;(</span><span 
3468 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span 
3469 class="cmtt-8">&#x00A0;array</span><span 
3470 class="cmtt-8">&#x00A0;element</span><span 
3471 class="cmtt-8">&#x00A0;number</span><span 
3472 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span 
3473 class="cmtt-8">&#x00A0;)</span><span 
3474 class="cmtt-8">&#x00A0;*</span>
3475 <br class="fancyvrb" /><a 
3476  id="x1-56014r7"></a><span 
3477 class="cmr-6">7</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;</span><span 
3489 class="cmtt-8">&#x00A0;</span><span 
3490 class="cmtt-8">&#x00A0;</span><span 
3491 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span 
3492 class="cmtt-8">&#x00A0;+</span><span 
3493 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span 
3494 class="cmtt-8">&#x00A0;+</span><span 
3495 class="cmtt-8">&#x00A0;[last];</span>
3496 <br class="fancyvrb" /><a 
3497  id="x1-56016r8"></a><span 
3498 class="cmr-6">8</span><span 
3499 class="cmtt-8">&#x00A0;</span><span 
3500 class="cmtt-8">&#x00A0;</span>
3501 <br class="fancyvrb" /><a 
3502  id="x1-56018r9"></a><span 
3503 class="cmr-6">9</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;</span><span 
3510 class="cmtt-8">&#x00A0;</span><span 
3511 class="cmtt-8">&#x00A0;</span><span 
3512 class="cmtt-8">&#x00A0;5)</span><span 
3513 class="cmtt-8">&#x00A0;if</span><span 
3514 class="cmtt-8">&#x00A0;(</span><span 
3515 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span 
3516 class="cmtt-8">&#x00A0;is</span><span 
3517 class="cmtt-8">&#x00A0;set</span><span 
3518 class="cmtt-8">&#x00A0;)</span><span 
3519 class="cmtt-8">&#x00A0;then</span><span 
3520 class="cmtt-8">&#x00A0;set</span><span 
3521 class="cmtt-8">&#x00A0;[last]</span><span 
3522 class="cmtt-8">&#x00A0;=</span><span 
3523 class="cmtt-8">&#x00A0;vector</span><span 
3524 class="cmtt-8">&#x00A0;[value_vector]</span><span 
3525 class="cmtt-8">&#x00A0;element</span><span 
3526 class="cmtt-8">&#x00A0;[i]</span>
3527 <br class="fancyvrb" /><a 
3528  id="x1-56020r10"></a><span 
3529 class="cmr-6">10</span><span 
3530 class="cmtt-8">&#x00A0;</span><span 
3531 class="cmtt-8">&#x00A0;</span>
3532 <br class="fancyvrb" /><a 
3533  id="x1-56022r11"></a><span 
3534 class="cmr-6">11</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;</span><span 
3541 class="cmtt-8">&#x00A0;</span><span 
3542 class="cmtt-8">&#x00A0;</span><span 
3543 class="cmtt-8">&#x00A0;6)</span><span 
3544 class="cmtt-8">&#x00A0;increment</span><span 
3545 class="cmtt-8">&#x00A0;[multiplicand_offset]</span>
3546 <br class="fancyvrb" /><a 
3547  id="x1-56024r12"></a><span 
3548 class="cmr-6">12</span><span 
3549 class="cmtt-8">&#x00A0;</span><span 
3550 class="cmtt-8">&#x00A0;</span>
3551 <br class="fancyvrb" /><a 
3552  id="x1-56026r13"></a><span 
3553 class="cmr-6">13</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="cmtt-8">&#x00A0;</span><span 
3559 class="cmtt-8">&#x00A0;</span><span 
3560 class="cmtt-8">&#x00A0;</span><span 
3561 class="cmsy-8">}</span>
3562 <br class="fancyvrb" /><a 
3563  id="x1-56028r14"></a><span 
3564 class="cmr-6">14</span><span 
3565 class="cmtt-8">&#x00A0;</span><span 
3566 class="cmtt-8">&#x00A0;</span>
3567 <br class="fancyvrb" /><a 
3568  id="x1-56030r15"></a><span 
3569 class="cmr-6">15</span><span 
3570 class="cmtt-8">&#x00A0;</span><span 
3571 class="cmtt-8">&#x00A0;</span><span 
3572 class="cmtt-8">&#x00A0;</span><span 
3573 class="cmtt-8">&#x00A0;7)</span><span 
3574 class="cmtt-8">&#x00A0;vector</span><span 
3575 class="cmtt-8">&#x00A0;calculation</span><span 
3576 class="cmtt-8">&#x00A0;completed.</span>
3577 </div>
3578 <!--l. 370--><p class="noindent" >
3579 <h4 class="subsectionHead"><span class="titlemark">3.3.  </span> <a 
3580  id="x1-570003.3"></a>Use of the codebook abstraction</h4>
3581 <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
3582 specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
3583 then returns that entry number to the decoder (when used in a scalar entropy coding context), or
3584 uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
3585 used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
3586 call to the codebook mechanism requests either a scalar entry number or a lookup
3587 vector.
3588 <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
3589 decode using a codebook of lookup type 0 in any context expecting a vector return
3590 value (even in a case where a vector of dimension one) is forbidden. If decoder setup
3591 or decode requests such an action, that is an error condition rendering the packet
3592                                                                                         
3593
3594                                                                                         
3595 undecodable.
3596 <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
3597 next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
3598 codeword in the codebook. This process can be though of as logically walking the
3599 Huffman decode tree by reading one bit at a time from the bitstream, and using the
3600 bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
3601 branch (right in the above examples). Walking the tree finishes when the decode process
3602 hits a leaf in the decision tree; the result is the entry number corresponding to that
3603 leaf. Reading past the end of a packet propagates the &#8217;end-of-stream&#8217; condition to the
3604 decoder.
3605 <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
3606 value.
3607 <!--l. 404--><p class="noindent" >When used in a VQ context, the codeword entry number is used as an offset into the VQ lookup
3608 table. The value returned to the decoder is the vector of scalars corresponding to this
3609 offset.
3610                                                                                         
3611
3612                                                                                         
3613                                                                                         
3614
3615                                                                                         
3616 <h3 class="sectionHead"><span class="titlemark">4.  </span> <a 
3617  id="x1-580004"></a>Codec Setup and Packet Decode</h3>
3618 <!--l. 7--><p class="noindent" >
3619 <h4 class="subsectionHead"><span class="titlemark">4.1.  </span> <a 
3620  id="x1-590004.1"></a>Overview</h4>
3621 <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
3622 of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
3623 process, which is provided in <a 
3624 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a 
3625 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221;. <a 
3626 href="#x1-360002">Section&#x00A0;2</a>,
3627 &#8220;<a 
3628 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; covers reading and writing bit fields from and to bitstream
3629 packets.
3630 <!--l. 17--><p class="noindent" >
3631 <h4 class="subsectionHead"><span class="titlemark">4.2.  </span> <a 
3632  id="x1-600004.2"></a>Header decode and decode setup</h4>
3633 <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
3634 identification header, the comments header, and the setup header. All are required for decode
3635 compliance. An end-of-packet condition during decoding the first or third header packet renders
3636 the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
3637 condition.
3638 <!--l. 26--><p class="noindent" >
3639 <h5 class="subsubsectionHead"><span class="titlemark">4.2.1.  </span> <a 
3640  id="x1-610004.2.1"></a>Common header decode</h5>
3641 <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields.
3642 <!--l. 31--><p class="noindent" >
3643 <div class="fancyvrb" id="fancyvrb20">
3644 <a 
3645  id="x1-61002r1"></a><span 
3646 class="cmr-6">1</span><span 
3647 class="cmtt-8">&#x00A0;</span><span 
3648 class="cmtt-8">&#x00A0;</span><span 
3649 class="cmtt-8">&#x00A0;</span><span 
3650 class="cmtt-8">&#x00A0;1)</span><span 
3651 class="cmtt-8">&#x00A0;[packet_type]</span><span 
3652 class="cmtt-8">&#x00A0;:</span><span 
3653 class="cmtt-8">&#x00A0;8</span><span 
3654 class="cmtt-8">&#x00A0;bit</span><span 
3655 class="cmtt-8">&#x00A0;value</span>
3656 <br class="fancyvrb" /><a 
3657  id="x1-61004r2"></a><span 
3658 class="cmr-6">2</span><span 
3659 class="cmtt-8">&#x00A0;</span><span 
3660 class="cmtt-8">&#x00A0;</span><span 
3661 class="cmtt-8">&#x00A0;</span><span 
3662 class="cmtt-8">&#x00A0;2)</span><span 
3663 class="cmtt-8">&#x00A0;0x76,</span><span 
3664 class="cmtt-8">&#x00A0;0x6f,</span><span 
3665 class="cmtt-8">&#x00A0;0x72,</span><span 
3666 class="cmtt-8">&#x00A0;0x62,</span><span 
3667 class="cmtt-8">&#x00A0;0x69,</span><span 
3668 class="cmtt-8">&#x00A0;0x73:</span><span 
3669 class="cmtt-8">&#x00A0;the</span><span 
3670 class="cmtt-8">&#x00A0;characters</span><span 
3671 class="cmtt-8">&#x00A0;&#8217;v&#8217;,&#8217;o&#8217;,&#8217;r&#8217;,&#8217;b&#8217;,&#8217;i&#8217;,&#8217;s&#8217;</span><span 
3672 class="cmtt-8">&#x00A0;as</span><span 
3673 class="cmtt-8">&#x00A0;six</span><span 
3674 class="cmtt-8">&#x00A0;octets</span>
3675 </div>
3676                                                                                         
3677
3678                                                                                         
3679 <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
3680 header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
3681 single bit of &#8217;0&#8217; is an audio packet). The packets must occur in the order of identification,
3682 comment, setup.
3683 <!--l. 44--><p class="noindent" >
3684 <h5 class="subsubsectionHead"><span class="titlemark">4.2.2.  </span> <a 
3685  id="x1-620004.2.2"></a>Identification header</h5>
3686 <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
3687 definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
3688 stream. The identification header is coded as follows:
3689 <!--l. 51--><p class="noindent" >
3690 <div class="fancyvrb" id="fancyvrb21">
3691 <a 
3692  id="x1-62002r1"></a><span 
3693 class="cmr-6">1</span><span 
3694 class="cmtt-8">&#x00A0;</span><span 
3695 class="cmtt-8">&#x00A0;</span><span 
3696 class="cmtt-8">&#x00A0;1)</span><span 
3697 class="cmtt-8">&#x00A0;[vorbis_version]</span><span 
3698 class="cmtt-8">&#x00A0;=</span><span 
3699 class="cmtt-8">&#x00A0;read</span><span 
3700 class="cmtt-8">&#x00A0;32</span><span 
3701 class="cmtt-8">&#x00A0;bits</span><span 
3702 class="cmtt-8">&#x00A0;as</span><span 
3703 class="cmtt-8">&#x00A0;unsigned</span><span 
3704 class="cmtt-8">&#x00A0;integer</span>
3705 <br class="fancyvrb" /><a 
3706  id="x1-62004r2"></a><span 
3707 class="cmr-6">2</span><span 
3708 class="cmtt-8">&#x00A0;</span><span 
3709 class="cmtt-8">&#x00A0;</span><span 
3710 class="cmtt-8">&#x00A0;2)</span><span 
3711 class="cmtt-8">&#x00A0;[audio_channels]</span><span 
3712 class="cmtt-8">&#x00A0;=</span><span 
3713 class="cmtt-8">&#x00A0;read</span><span 
3714 class="cmtt-8">&#x00A0;8</span><span 
3715 class="cmtt-8">&#x00A0;bit</span><span 
3716 class="cmtt-8">&#x00A0;integer</span><span 
3717 class="cmtt-8">&#x00A0;as</span><span 
3718 class="cmtt-8">&#x00A0;unsigned</span>
3719 <br class="fancyvrb" /><a 
3720  id="x1-62006r3"></a><span 
3721 class="cmr-6">3</span><span 
3722 class="cmtt-8">&#x00A0;</span><span 
3723 class="cmtt-8">&#x00A0;</span><span 
3724 class="cmtt-8">&#x00A0;3)</span><span 
3725 class="cmtt-8">&#x00A0;[audio_sample_rate]</span><span 
3726 class="cmtt-8">&#x00A0;=</span><span 
3727 class="cmtt-8">&#x00A0;read</span><span 
3728 class="cmtt-8">&#x00A0;32</span><span 
3729 class="cmtt-8">&#x00A0;bits</span><span 
3730 class="cmtt-8">&#x00A0;as</span><span 
3731 class="cmtt-8">&#x00A0;unsigned</span><span 
3732 class="cmtt-8">&#x00A0;integer</span>
3733 <br class="fancyvrb" /><a 
3734  id="x1-62008r4"></a><span 
3735 class="cmr-6">4</span><span 
3736 class="cmtt-8">&#x00A0;</span><span 
3737 class="cmtt-8">&#x00A0;</span><span 
3738 class="cmtt-8">&#x00A0;4)</span><span 
3739 class="cmtt-8">&#x00A0;[bitrate_maximum]</span><span 
3740 class="cmtt-8">&#x00A0;=</span><span 
3741 class="cmtt-8">&#x00A0;read</span><span 
3742 class="cmtt-8">&#x00A0;32</span><span 
3743 class="cmtt-8">&#x00A0;bits</span><span 
3744 class="cmtt-8">&#x00A0;as</span><span 
3745 class="cmtt-8">&#x00A0;signed</span><span 
3746 class="cmtt-8">&#x00A0;integer</span>
3747 <br class="fancyvrb" /><a 
3748  id="x1-62010r5"></a><span 
3749 class="cmr-6">5</span><span 
3750 class="cmtt-8">&#x00A0;</span><span 
3751 class="cmtt-8">&#x00A0;</span><span 
3752 class="cmtt-8">&#x00A0;5)</span><span 
3753 class="cmtt-8">&#x00A0;[bitrate_nominal]</span><span 
3754 class="cmtt-8">&#x00A0;=</span><span 
3755 class="cmtt-8">&#x00A0;read</span><span 
3756 class="cmtt-8">&#x00A0;32</span><span 
3757 class="cmtt-8">&#x00A0;bits</span><span 
3758 class="cmtt-8">&#x00A0;as</span><span 
3759 class="cmtt-8">&#x00A0;signed</span><span 
3760 class="cmtt-8">&#x00A0;integer</span>
3761 <br class="fancyvrb" /><a 
3762  id="x1-62012r6"></a><span 
3763 class="cmr-6">6</span><span 
3764 class="cmtt-8">&#x00A0;</span><span 
3765 class="cmtt-8">&#x00A0;</span><span 
3766 class="cmtt-8">&#x00A0;6)</span><span 
3767 class="cmtt-8">&#x00A0;[bitrate_minimum]</span><span 
3768 class="cmtt-8">&#x00A0;=</span><span 
3769 class="cmtt-8">&#x00A0;read</span><span 
3770 class="cmtt-8">&#x00A0;32</span><span 
3771 class="cmtt-8">&#x00A0;bits</span><span 
3772 class="cmtt-8">&#x00A0;as</span><span 
3773 class="cmtt-8">&#x00A0;signed</span><span 
3774 class="cmtt-8">&#x00A0;integer</span>
3775 <br class="fancyvrb" /><a 
3776  id="x1-62014r7"></a><span 
3777 class="cmr-6">7</span><span 
3778 class="cmtt-8">&#x00A0;</span><span 
3779 class="cmtt-8">&#x00A0;</span><span 
3780 class="cmtt-8">&#x00A0;7)</span><span 
3781 class="cmtt-8">&#x00A0;[blocksize_0]</span><span 
3782 class="cmtt-8">&#x00A0;=</span><span 
3783 class="cmtt-8">&#x00A0;2</span><span 
3784 class="cmtt-8">&#x00A0;exponent</span><span 
3785 class="cmtt-8">&#x00A0;(read</span><span 
3786 class="cmtt-8">&#x00A0;4</span><span 
3787 class="cmtt-8">&#x00A0;bits</span><span 
3788 class="cmtt-8">&#x00A0;as</span><span 
3789 class="cmtt-8">&#x00A0;unsigned</span><span 
3790 class="cmtt-8">&#x00A0;integer)</span>
3791 <br class="fancyvrb" /><a 
3792  id="x1-62016r8"></a><span 
3793 class="cmr-6">8</span><span 
3794 class="cmtt-8">&#x00A0;</span><span 
3795 class="cmtt-8">&#x00A0;</span><span 
3796 class="cmtt-8">&#x00A0;8)</span><span 
3797 class="cmtt-8">&#x00A0;[blocksize_1]</span><span 
3798 class="cmtt-8">&#x00A0;=</span><span 
3799 class="cmtt-8">&#x00A0;2</span><span 
3800 class="cmtt-8">&#x00A0;exponent</span><span 
3801 class="cmtt-8">&#x00A0;(read</span><span 
3802 class="cmtt-8">&#x00A0;4</span><span 
3803 class="cmtt-8">&#x00A0;bits</span><span 
3804 class="cmtt-8">&#x00A0;as</span><span 
3805 class="cmtt-8">&#x00A0;unsigned</span><span 
3806 class="cmtt-8">&#x00A0;integer)</span>
3807 <br class="fancyvrb" /><a 
3808  id="x1-62018r9"></a><span 
3809 class="cmr-6">9</span><span 
3810 class="cmtt-8">&#x00A0;</span><span 
3811 class="cmtt-8">&#x00A0;</span><span 
3812 class="cmtt-8">&#x00A0;9)</span><span 
3813 class="cmtt-8">&#x00A0;[framing_flag]</span><span 
3814 class="cmtt-8">&#x00A0;=</span><span 
3815 class="cmtt-8">&#x00A0;read</span><span 
3816 class="cmtt-8">&#x00A0;one</span><span 
3817 class="cmtt-8">&#x00A0;bit</span>
3818 </div>
3819 <!--l. 63--><p class="noindent" ><span 
3820 class="cmtt-12">[vorbis_version] </span>is to read &#8217;0&#8217; in order to be compatible with this document. Both
3821 <span 
3822 class="cmtt-12">[audio_channels] </span>and <span 
3823 class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
3824 blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span 
3825 class="cmtt-12">[blocksize_0]</span>
3826 must be less than or equal to <span 
3827 class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
3828 any of these conditions renders a stream undecodable.
3829 <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
3830 considerably off in purely VBR streams. The fields are meaningful only when greater than
3831 zero.
3832       <ul class="itemize1">
3833       <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
3834       fixed-rate bitstream
3835       </li>
3836       <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
3837                                                                                         
3838
3839                                                                                         
3840       </li>
3841       <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
3842       </li>
3843       <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
3844 <!--l. 85--><p class="noindent" >
3845 <h5 class="subsubsectionHead"><span class="titlemark">4.2.3.  </span> <a 
3846  id="x1-630004.2.3"></a>Comment header</h5>
3847 <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a 
3848 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a 
3849 href="#x1-810005">comment field and
3850 header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
3851 <!--l. 90--><p class="noindent" >
3852 <h5 class="subsubsectionHead"><span class="titlemark">4.2.4.  </span> <a 
3853  id="x1-640004.2.4"></a>Setup header</h5>
3854 <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
3855 <div class="center" 
3856 >
3857 <!--l. 94--><p class="noindent" >
3858
3859 <!--l. 95--><p class="noindent" ><img 
3860 src="components.png" alt="PIC"  
3861 >
3862 <br /> <div class="caption" 
3863 ><span class="id">Figure&#x00A0;6: </span><span  
3864 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 -->
3865 </div>
3866 <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
3867 header contains, in order, the lists of codebook configurations, time-domain transform
3868 configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
3869 mapping configurations and mode configurations. It finishes with a framing bit of &#8217;1&#8217;. Header
3870 decode proceeds in the following order:
3871 <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a 
3872  id="x1-650004.2.4"></a><span 
3873 class="cmbx-12">Codebooks</span></span>
3874                                                                                         
3875
3876                                                                                         
3877       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
3878    1. </dt><dd 
3879 class="enumerate-enumitem"><span 
3880 class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
3881       </dd><dt class="enumerate-enumitem">
3882    2. </dt><dd 
3883 class="enumerate-enumitem">Decode  <span 
3884 class="cmtt-12">[vorbis_codebook_count] </span>codebooks  in  order  as  defined  in  <a 
3885 href="#x1-470003">Section&#x00A0;3</a>,
3886       &#8220;<a 
3887 href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>&#8221;. Save each configuration, in order, in an array
3888       of codebook configurations <span 
3889 class="cmtt-12">[vorbis_codebook_configurations]</span>.</dd></dl>
3890 <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a 
3891  id="x1-660004.2.4"></a><span 
3892 class="cmbx-12">Time domain transforms</span></span>
3893 These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
3894 be read to maintain bitstream sync.
3895 <!--l. 127--><p class="noindent" >
3896       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
3897    1. </dt><dd 
3898 class="enumerate-enumitem"><span 
3899 class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
3900       </dd><dt class="enumerate-enumitem">
3901    2. </dt><dd 
3902 class="enumerate-enumitem">read <span 
3903 class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
3904       nonzero, this is an error condition and the stream is undecodable.</dd></dl>
3905 <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a 
3906  id="x1-670004.2.4"></a><span 
3907 class="cmbx-12">Floors</span></span>
3908 Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
3909 type.
3910 <!--l. 139--><p class="noindent" >
3911       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
3912    1. </dt><dd 
3913 class="enumerate-enumitem"><span 
3914 class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
3915       </dd><dt class="enumerate-enumitem">
3916    2. </dt><dd 
3917 class="enumerate-enumitem">For each <span 
3918 class="cmtt-12">[i] </span>of <span 
3919 class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
3920            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
3921        a) </dt><dd 
3922 class="enumerate-enumitem">read the floor type: vector <span 
3923 class="cmtt-12">[vorbis_floor_types] </span>element <span 
3924 class="cmtt-12">[i] </span>= read 16 bits
3925            as unsigned integer
3926            </dd><dt class="enumerate-enumitem">
3927        b) </dt><dd 
3928 class="enumerate-enumitem">If the floor type is zero, decode the floor configuration as defined in <a 
3929 href="#x1-890006">Section&#x00A0;6</a>,
3930            &#8220;<a 
3931 href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>&#8221;; save this configuration in slot <span 
3932 class="cmtt-12">[i] </span>of the floor
3933            configuration array <span 
3934 class="cmtt-12">[vorbis_floor_configurations]</span>.
3935                                                                                         
3936
3937                                                                                         
3938            </dd><dt class="enumerate-enumitem">
3939         c) </dt><dd 
3940 class="enumerate-enumitem">If the floor type is one, decode the floor configuration as defined in <a 
3941 href="#x1-950007">Section&#x00A0;7</a>,
3942            &#8220;<a 
3943 href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>&#8221;; save this configuration in slot <span 
3944 class="cmtt-12">[i] </span>of the floor
3945            configuration array <span 
3946 class="cmtt-12">[vorbis_floor_configurations]</span>.
3947            </dd><dt class="enumerate-enumitem">
3948        d) </dt><dd 
3949 class="enumerate-enumitem">If the the floor type is greater than one, this stream is undecodable; ERROR
3950            CONDITION</dd></dl>
3951       </dd></dl>
3952 <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a 
3953  id="x1-680004.2.4"></a><span 
3954 class="cmbx-12">Residues</span></span>
3955 Vorbis uses three residue types; header decode of each type is identical.
3956 <!--l. 163--><p class="noindent" >
3957       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
3958    1. </dt><dd 
3959 class="enumerate-enumitem"><span 
3960 class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
3961       </dd><dt class="enumerate-enumitem">
3962    2. </dt><dd 
3963 class="enumerate-enumitem">For each of <span 
3964 class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
3965            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
3966        a) </dt><dd 
3967 class="enumerate-enumitem">read the residue type; vector <span 
3968 class="cmtt-12">[vorbis_residue_types] </span>element <span 
3969 class="cmtt-12">[i] </span>= read 16
3970            bits as unsigned integer
3971            </dd><dt class="enumerate-enumitem">
3972        b) </dt><dd 
3973 class="enumerate-enumitem">If the residue type is zero, one or two, decode the residue configuration as defined
3974            in <a 
3975 href="#x1-1020008">Section&#x00A0;8</a>, &#8220;<a 
3976 href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>&#8221;; save this configuration in slot <span 
3977 class="cmtt-12">[i] </span>of
3978            the residue configuration array <span 
3979 class="cmtt-12">[vorbis_residue_configurations]</span>.
3980            </dd><dt class="enumerate-enumitem">
3981         c) </dt><dd 
3982 class="enumerate-enumitem">If the the residue type is greater than two, this stream is undecodable; ERROR
3983            CONDITION</dd></dl>
3984       </dd></dl>
3985 <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a 
3986  id="x1-690004.2.4"></a><span 
3987 class="cmbx-12">Mappings</span></span>
3988 Mappings are used to set up specific pipelines for encoding multichannel audio with varying
3989 channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
3990 channel mappings.
3991                                                                                         
3992
3993                                                                                         
3994 <!--l. 188--><p class="noindent" >
3995       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
3996    1. </dt><dd 
3997 class="enumerate-enumitem"><span 
3998 class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
3999       </dd><dt class="enumerate-enumitem">
4000    2. </dt><dd 
4001 class="enumerate-enumitem">For each <span 
4002 class="cmtt-12">[i] </span>of <span 
4003 class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
4004            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4005        a) </dt><dd 
4006 class="enumerate-enumitem">read the mapping type: 16 bits as unsigned integer. There&#8217;s no reason to save
4007            the mapping type in Vorbis I.
4008            </dd><dt class="enumerate-enumitem">
4009        b) </dt><dd 
4010 class="enumerate-enumitem">If the mapping type is nonzero, the stream is undecodable
4011            </dd><dt class="enumerate-enumitem">
4012         c) </dt><dd 
4013 class="enumerate-enumitem">If the mapping type is zero:
4014                <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4015             i. </dt><dd 
4016 class="enumerate-enumitem">read 1 bit as a boolean flag
4017                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4018                A. </dt><dd 
4019 class="enumerate-enumitem">if set, <span 
4020 class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
4021                    and add one
4022                    </dd><dt class="enumerate-enumitem">
4023                B. </dt><dd 
4024 class="enumerate-enumitem">if unset, <span 
4025 class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</dd></dl>
4026                </dd><dt class="enumerate-enumitem">
4027             ii. </dt><dd 
4028 class="enumerate-enumitem">read 1 bit as a boolean flag
4029                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4030                A. </dt><dd 
4031 class="enumerate-enumitem">if set, square polar channel mapping is in use:
4032                      <ul class="itemize1">
4033                      <li class="itemize"><span 
4034 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>=  read  8  bits  as  unsigned
4035                      integer and add one
4036                      </li>
4037                      <li class="itemize">for <span 
4038 class="cmtt-12">[j] </span>each of <span 
4039 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
4040                        <ul class="itemize2">
4041                        <li class="itemize">vector    <span 
4042 class="cmtt-12">[vorbis_mapping_magnitude]  </span>element    <span 
4043 class="cmtt-12">[j]</span>=    read
4044                        <a 
4045 href="#x1-1170009.2.1">ilog</a>(<span 
4046 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
4047                        </li>
4048                        <li class="itemize">vector     <span 
4049 class="cmtt-12">[vorbis_mapping_angle]   </span>element     <span 
4050 class="cmtt-12">[j]</span>=     read
4051                        <a 
4052 href="#x1-1170009.2.1">ilog</a>(<span 
4053 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
4054                        </li>
4055                                                                                         
4056
4057                                                                                         
4058                        <li class="itemize">the  numbers  read  in  the  above  two  steps  are  channel  numbers
4059                        representing the channel to treat as magnitude and the channel
4060                        to  treat  as  angle,  respectively.  If  for  any  coupling  step  the
4061                        angle channel number equals the magnitude channel number, the
4062                        magnitude channel number is greater than <span 
4063 class="cmtt-12">[audio_channels]</span>-1, or
4064                        the angle channel is greater than <span 
4065 class="cmtt-12">[audio_channels]</span>-1, the stream
4066                        is undecodable.</li></ul>
4067                      </li></ul>
4068                    </dd><dt class="enumerate-enumitem">
4069                B. </dt><dd 
4070 class="enumerate-enumitem">if unset, <span 
4071 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</dd></dl>
4072                </dd><dt class="enumerate-enumitem">
4073            iii. </dt><dd 
4074 class="enumerate-enumitem">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
4075                </dd><dt class="enumerate-enumitem">
4076            iv. </dt><dd 
4077 class="enumerate-enumitem">if <span 
4078 class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
4079                settings. For each <span 
4080 class="cmtt-12">[j] </span>of <span 
4081 class="cmtt-12">[audio_channels] </span>channels:
4082                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4083                A. </dt><dd 
4084 class="enumerate-enumitem">vector <span 
4085 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 
4086 class="cmtt-12">[j] </span>= read 4 bits as unsigned
4087                    integer
4088                    </dd><dt class="enumerate-enumitem">
4089                B. </dt><dd 
4090 class="enumerate-enumitem">if   the   value   is   greater   than   the   highest   numbered   submap
4091                    (<span 
4092 class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
4093                    the stream undecodable</dd></dl>
4094                </dd><dt class="enumerate-enumitem">
4095             v. </dt><dd 
4096 class="enumerate-enumitem">for each submap <span 
4097 class="cmtt-12">[j] </span>of <span 
4098 class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
4099                residue numbers for use in decoding that submap:
4100                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4101                A. </dt><dd 
4102 class="enumerate-enumitem">read and discard 8 bits (the unused time configuration placeholder)
4103                    </dd><dt class="enumerate-enumitem">
4104                B. </dt><dd 
4105 class="enumerate-enumitem">read 8 bits as unsigned integer for the floor number; save in vector
4106                    <span 
4107 class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span 
4108 class="cmtt-12">[j]</span>
4109                    </dd><dt class="enumerate-enumitem">
4110                C. </dt><dd 
4111 class="enumerate-enumitem">verify the floor number is not greater than the highest number floor
4112                    configured for the bitstream. If it is, the bitstream is undecodable
4113                    </dd><dt class="enumerate-enumitem">
4114                D. </dt><dd 
4115 class="enumerate-enumitem">read 8 bits as unsigned integer for the residue number; save in vector
4116                    <span 
4117 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span 
4118 class="cmtt-12">[j]</span>
4119                                                                                         
4120
4121                                                                                         
4122                    </dd><dt class="enumerate-enumitem">
4123                E. </dt><dd 
4124 class="enumerate-enumitem">verify the residue number is not greater than the highest number residue
4125                    configured for the bitstream. If it is, the bitstream is undecodable</dd></dl>
4126                </dd><dt class="enumerate-enumitem">
4127            vi. </dt><dd 
4128 class="enumerate-enumitem">save this mapping configuration in slot <span 
4129 class="cmtt-12">[i] </span>of the mapping configuration array
4130                <span 
4131 class="cmtt-12">[vorbis_mapping_configurations]</span>.</dd></dl>
4132            </dd></dl>
4133       </dd></dl>
4134 <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a 
4135  id="x1-700004.2.4"></a><span 
4136 class="cmbx-12">Modes</span></span>
4137       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4138    1. </dt><dd 
4139 class="enumerate-enumitem"><span 
4140 class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
4141       </dd><dt class="enumerate-enumitem">
4142    2. </dt><dd 
4143 class="enumerate-enumitem">For each of <span 
4144 class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
4145            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4146        a) </dt><dd 
4147 class="enumerate-enumitem"><span 
4148 class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
4149            </dd><dt class="enumerate-enumitem">
4150        b) </dt><dd 
4151 class="enumerate-enumitem"><span 
4152 class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
4153            </dd><dt class="enumerate-enumitem">
4154         c) </dt><dd 
4155 class="enumerate-enumitem"><span 
4156 class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
4157            </dd><dt class="enumerate-enumitem">
4158        d) </dt><dd 
4159 class="enumerate-enumitem"><span 
4160 class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
4161            </dd><dt class="enumerate-enumitem">
4162         e) </dt><dd 
4163 class="enumerate-enumitem">verify       ranges;       zero       is       the       only       legal       value       in
4164            Vorbis I for <span 
4165 class="cmtt-12">[vorbis_mode_windowtype] </span>and <span 
4166 class="cmtt-12">[vorbis_mode_transformtype]</span>.
4167            <span 
4168 class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
4169            in use. Any illegal values render the stream undecodable.
4170            </dd><dt class="enumerate-enumitem">
4171         f) </dt><dd 
4172 class="enumerate-enumitem">save  this  mode  configuration  in  slot  <span 
4173 class="cmtt-12">[i] </span>of  the  mode  configuration  array
4174            <span 
4175 class="cmtt-12">[vorbis_mode_configurations]</span>.</dd></dl>
4176       </dd><dt class="enumerate-enumitem">
4177    3. </dt><dd 
4178 class="enumerate-enumitem">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
4179       decodable.</dd></dl>
4180                                                                                         
4181
4182                                                                                         
4183 <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
4184 <!--l. 277--><p class="noindent" >
4185 <h4 class="subsectionHead"><span class="titlemark">4.3.  </span> <a 
4186  id="x1-710004.3"></a>Audio packet decode and synthesis</h4>
4187 <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
4188 audio packet decode is to read and verify the packet type. <span 
4189 class="cmti-12">A non-audio packet when audio is</span>
4190 <span 
4191 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
4192 <span 
4193 class="cmti-12">packet and not attempt decoding it to audio</span>.
4194 <!--l. 286--><p class="noindent" >
4195 <h5 class="subsubsectionHead"><span class="titlemark">4.3.1.  </span> <a 
4196  id="x1-720004.3.1"></a>packet type, mode and window decode</h5>
4197 <!--l. 289--><p class="noindent" >
4198       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4199    1. </dt><dd 
4200 class="enumerate-enumitem">read 1 bit <span 
4201 class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
4202       </dd><dt class="enumerate-enumitem">
4203    2. </dt><dd 
4204 class="enumerate-enumitem">read <a 
4205 href="#x1-1170009.2.1">ilog</a>([vorbis_mode_count]-1) bits <span 
4206 class="cmtt-12">[mode_number]</span>
4207       </dd><dt class="enumerate-enumitem">
4208    3. </dt><dd 
4209 class="enumerate-enumitem">decode blocksize <span 
4210 class="cmtt-12">[n] </span>is equal to <span 
4211 class="cmtt-12">[blocksize_0] </span>if <span 
4212 class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
4213       else <span 
4214 class="cmtt-12">[n] </span>is equal to <span 
4215 class="cmtt-12">[blocksize_1]</span>.
4216       </dd><dt class="enumerate-enumitem">
4217    4. </dt><dd 
4218 class="enumerate-enumitem">perform window selection and setup; this window is used later by the inverse
4219       MDCT:
4220            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4221        a) </dt><dd 
4222 class="enumerate-enumitem">if this is a long window (the <span 
4223 class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
4224            set):
4225                <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4226             i. </dt><dd 
4227 class="enumerate-enumitem">read 1 bit for <span 
4228 class="cmtt-12">[previous_window_flag]</span>
4229                </dd><dt class="enumerate-enumitem">
4230             ii. </dt><dd 
4231 class="enumerate-enumitem">read 1 bit for <span 
4232 class="cmtt-12">[next_window_flag]</span>
4233                                                                                         
4234
4235                                                                                         
4236                </dd><dt class="enumerate-enumitem">
4237            iii. </dt><dd 
4238 class="enumerate-enumitem">if  <span 
4239 class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
4240                be a hybrid window for lapping with a short block. See <a 
4241 href="#paragraph.1" >paragraph&#x00A0;<a 
4242 href="#x1-260001.3.2">1.3.2</a></a>,
4243                &#8220;<a 
4244 href="#x1-260001.3.2">Window  shape  decode  (long  windows  only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;  for  an  illustration  of
4245                overlapping dissimilar windows. Else, the left half window will have normal
4246                long shape.
4247                </dd><dt class="enumerate-enumitem">
4248            iv. </dt><dd 
4249 class="enumerate-enumitem">if  <span 
4250 class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
4251                a  hybrid  window  for  lapping  with  a  short  block.  See  <a 
4252 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>,
4253                &#8220;<a 
4254 href="#x1-260001.3.2">Window  shape  decode  (long  windows  only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;  for  an  illustration  of
4255                overlapping dissimilar windows. Else, the left right window will have normal
4256                long shape.</dd></dl>
4257            </dd><dt class="enumerate-enumitem">
4258        b) </dt><dd 
4259 class="enumerate-enumitem">if this is a short window, the window is always the same short-window
4260            shape.</dd></dl>
4261       </dd></dl>
4262 <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span 
4263 class="cmmi-12">y </span>= sin(<img 
4264 src="Vorbis_I_spec1x.png" alt="&pi;2"  class="frac" align="middle"> <span 
4265 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span 
4266 class="cmr-8">2</span></sup>((<span 
4267 class="cmmi-12">x </span>+ 0<span 
4268 class="cmmi-12">.</span>5)<span 
4269 class="cmmi-12">&#x2215;n </span><span 
4270 class="cmsy-10x-x-120">&lowast; </span><span 
4271 class="cmmi-12">&pi;</span>)), where <span 
4272 class="cmmi-12">n </span>is window
4273 size and <span 
4274 class="cmmi-12">x </span>ranges 0<span 
4275 class="cmmi-12">&hellip;</span><span 
4276 class="cmmi-12">n</span><span 
4277 class="cmsy-10x-x-120">&minus; </span>1, but dissimilar lapping requirements can affect overall shape. Window
4278 generation proceeds as follows:
4279 <!--l. 327--><p class="noindent" >
4280       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4281    1. </dt><dd 
4282 class="enumerate-enumitem"><span 
4283 class="cmtt-12">[window_center] </span>= <span 
4284 class="cmtt-12">[n] </span>/ 2
4285       </dd><dt class="enumerate-enumitem">
4286    2. </dt><dd 
4287 class="enumerate-enumitem">if (<span 
4288 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span 
4289 class="cmtt-12">[previous_window_flag] </span>is not set)
4290       then
4291            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4292        a) </dt><dd 
4293 class="enumerate-enumitem"><span 
4294 class="cmtt-12">[left_window_start] </span>= <span 
4295 class="cmtt-12">[n]</span>/4 - <span 
4296 class="cmtt-12">[blocksize_0]</span>/4
4297            </dd><dt class="enumerate-enumitem">
4298        b) </dt><dd 
4299 class="enumerate-enumitem"><span 
4300 class="cmtt-12">[left_window_end] </span>= <span 
4301 class="cmtt-12">[n]</span>/4 + <span 
4302 class="cmtt-12">[blocksize_0]</span>/4
4303            </dd><dt class="enumerate-enumitem">
4304         c) </dt><dd 
4305 class="enumerate-enumitem"><span 
4306 class="cmtt-12">[left_n] </span>= <span 
4307 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
4308       <!--l. 336--><p class="noindent" >else
4309            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4310        a) </dt><dd 
4311 class="enumerate-enumitem"><span 
4312 class="cmtt-12">[left_window_start] </span>= 0
4313            </dd><dt class="enumerate-enumitem">
4314        b) </dt><dd 
4315 class="enumerate-enumitem"><span 
4316 class="cmtt-12">[left_window_end] </span>= <span 
4317 class="cmtt-12">[window_center]</span>
4318                                                                                         
4319
4320                                                                                         
4321            </dd><dt class="enumerate-enumitem">
4322         c) </dt><dd 
4323 class="enumerate-enumitem"><span 
4324 class="cmtt-12">[left_n] </span>= <span 
4325 class="cmtt-12">[n]</span>/2</dd></dl>
4326       </dd><dt class="enumerate-enumitem">
4327    3. </dt><dd 
4328 class="enumerate-enumitem">if (<span 
4329 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span 
4330 class="cmtt-12">[next_window_flag] </span>is not set) then
4331            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4332        a) </dt><dd 
4333 class="enumerate-enumitem"><span 
4334 class="cmtt-12">[right_window_start] </span>= <span 
4335 class="cmtt-12">[n]*3</span>/4 - <span 
4336 class="cmtt-12">[blocksize_0]</span>/4
4337            </dd><dt class="enumerate-enumitem">
4338        b) </dt><dd 
4339 class="enumerate-enumitem"><span 
4340 class="cmtt-12">[right_window_end] </span>= <span 
4341 class="cmtt-12">[n]*3</span>/4 + <span 
4342 class="cmtt-12">[blocksize_0]</span>/4
4343            </dd><dt class="enumerate-enumitem">
4344         c) </dt><dd 
4345 class="enumerate-enumitem"><span 
4346 class="cmtt-12">[right_n] </span>= <span 
4347 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
4348       <!--l. 352--><p class="noindent" >else
4349            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4350        a) </dt><dd 
4351 class="enumerate-enumitem"><span 
4352 class="cmtt-12">[right_window_start] </span>= <span 
4353 class="cmtt-12">[window_center]</span>
4354            </dd><dt class="enumerate-enumitem">
4355        b) </dt><dd 
4356 class="enumerate-enumitem"><span 
4357 class="cmtt-12">[right_window_end] </span>= <span 
4358 class="cmtt-12">[n]</span>
4359            </dd><dt class="enumerate-enumitem">
4360         c) </dt><dd 
4361 class="enumerate-enumitem"><span 
4362 class="cmtt-12">[right_n] </span>= <span 
4363 class="cmtt-12">[n]</span>/2</dd></dl>
4364       </dd><dt class="enumerate-enumitem">
4365    4. </dt><dd 
4366 class="enumerate-enumitem">window from range 0 ... <span 
4367 class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
4368       </dd><dt class="enumerate-enumitem">
4369    5. </dt><dd 
4370 class="enumerate-enumitem">for <span 
4371 class="cmtt-12">[i] </span>in range <span 
4372 class="cmtt-12">[left_window_start] </span>... <span 
4373 class="cmtt-12">[left_window_end]</span>-1, window(<span 
4374 class="cmtt-12">[i]</span>) =
4375       sin(<img 
4376 src="Vorbis_I_spec2x.png" alt="&pi;
4377 2"  class="frac" align="middle"> <span 
4378 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span 
4379 class="cmr-8">2</span></sup>( (<span 
4380 class="cmtt-12">[i]</span>-<span 
4381 class="cmtt-12">[left_window_start]</span>+0.5) / <span 
4382 class="cmtt-12">[left_n] </span><span 
4383 class="cmsy-10x-x-120">&lowast;</span><img 
4384 src="Vorbis_I_spec3x.png" alt="&pi;
4385 2"  class="frac" align="middle">) )
4386       </dd><dt class="enumerate-enumitem">
4387    6. </dt><dd 
4388 class="enumerate-enumitem">window from range <span 
4389 class="cmtt-12">[left_window_end] </span>... <span 
4390 class="cmtt-12">[right_window_start]</span>-1 inclusive is
4391       one
4392       </dd><dt class="enumerate-enumitem">
4393    7. </dt><dd 
4394 class="enumerate-enumitem">for <span 
4395 class="cmtt-12">[i] </span>in range <span 
4396 class="cmtt-12">[right_window_start] </span>... <span 
4397 class="cmtt-12">[right_window_end]</span>-1, window(<span 
4398 class="cmtt-12">[i]</span>) =
4399       sin(<img 
4400 src="Vorbis_I_spec4x.png" alt="&pi;
4401 2"  class="frac" align="middle"> <span 
4402 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span 
4403 class="cmr-8">2</span></sup>( (<span 
4404 class="cmtt-12">[i]</span>-<span 
4405 class="cmtt-12">[right_window_start]</span>+0.5) / <span 
4406 class="cmtt-12">[right_n] </span><span 
4407 class="cmsy-10x-x-120">&lowast;</span><img 
4408 src="Vorbis_I_spec5x.png" alt="&pi;
4409 2"  class="frac" align="middle"> + <img 
4410 src="Vorbis_I_spec6x.png" alt="&pi;
4411 2"  class="frac" align="middle">) )
4412       </dd><dt class="enumerate-enumitem">
4413    8. </dt><dd 
4414 class="enumerate-enumitem">window from range <span 
4415 class="cmtt-12">[right_window_start] </span>... <span 
4416 class="cmtt-12">[n]</span>-1 is zero</dd></dl>
4417 <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
4418 packet from the stream. An end of packet condition past this point is to be considered a possible
4419 nominal occurrence.
4420                                                                                         
4421
4422                                                                                         
4423 <!--l. 375--><p class="noindent" >
4424 <h5 class="subsubsectionHead"><span class="titlemark">4.3.2.  </span> <a 
4425  id="x1-730004.3.2"></a>floor curve decode</h5>
4426 <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span 
4427 class="cmtt-12">[mode_number]</span>
4428 from configuration array <span 
4429 class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
4430 <span 
4431 class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
4432 array <span 
4433 class="cmtt-12">[vorbis_mapping_configurations]</span>.
4434 <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
4435 <!--l. 386--><p class="noindent" >For each floor <span 
4436 class="cmtt-12">[i] </span>of <span 
4437 class="cmtt-12">[audio_channels]</span>
4438       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4439    1. </dt><dd 
4440 class="enumerate-enumitem"><span 
4441 class="cmtt-12">[submap_number] </span>= element <span 
4442 class="cmtt-12">[i] </span>of vector [vorbis_mapping_mux]
4443       </dd><dt class="enumerate-enumitem">
4444    2. </dt><dd 
4445 class="enumerate-enumitem"><span 
4446 class="cmtt-12">[floor_number] </span>= element <span 
4447 class="cmtt-12">[submap_number] </span>of vector [vorbis_submap_floor]
4448       </dd><dt class="enumerate-enumitem">
4449    3. </dt><dd 
4450 class="enumerate-enumitem">if          the          floor          type          of          this          floor          (vector
4451       <span 
4452 class="cmtt-12">[vorbis_floor_types] </span>element <span 
4453 class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
4454       channel <span 
4455 class="cmtt-12">[i] </span>according to the <a 
4456 href="#x1-930006.2.2">subsubsection&#x00A0;6.2.2</a>, &#8220;<a 
4457 href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>&#8221;
4458       </dd><dt class="enumerate-enumitem">
4459    4. </dt><dd 
4460 class="enumerate-enumitem">if the type of this floor is one then decode the floor for channel <span 
4461 class="cmtt-12">[i] </span>according to the
4462       <a 
4463 href="#x1-1000007.2.3">subsubsection&#x00A0;7.2.3</a>, &#8220;<a 
4464 href="#x1-1000007.2.3">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>&#8221;
4465       </dd><dt class="enumerate-enumitem">
4466    5. </dt><dd 
4467 class="enumerate-enumitem">save the needed decoded floor information for channel for later synthesis
4468       </dd><dt class="enumerate-enumitem">
4469    6. </dt><dd 
4470 class="enumerate-enumitem">if the decoded floor returned &#8217;unused&#8217;, set vector <span 
4471 class="cmtt-12">[no_residue] </span>element <span 
4472 class="cmtt-12">[i] </span>to true,
4473       else set vector <span 
4474 class="cmtt-12">[no_residue] </span>element <span 
4475 class="cmtt-12">[i] </span>to false</dd></dl>
4476 <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
4477 output vectors and skipping to the add/overlap output stage.
4478 <!--l. 412--><p class="noindent" >
4479 <h5 class="subsubsectionHead"><span class="titlemark">4.3.3.  </span> <a 
4480  id="x1-740004.3.3"></a>nonzero vector propagate</h5>
4481 <!--l. 414--><p class="noindent" >A possible result of floor decode is that a specific vector is marked &#8217;unused&#8217; which indicates that
4482 that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
4483 coded in the stream, save for one complication. If some vectors are used and some are not,
4484                                                                                         
4485
4486                                                                                         
4487 channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
4488 vectors.
4489 <!--l. 421--><p class="noindent" >for each <span 
4490 class="cmtt-12">[i] </span>from 0 ... <span 
4491 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
4492 <!--l. 424--><p class="noindent" >
4493       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4494    1. </dt><dd 
4495 class="enumerate-enumitem">if either <span 
4496 class="cmtt-12">[no_residue] </span>entry for channel (<span 
4497 class="cmtt-12">[vorbis_mapping_magnitude] </span>element
4498       <span 
4499 class="cmtt-12">[i]</span>) or channel (<span 
4500 class="cmtt-12">[vorbis_mapping_angle] </span>element <span 
4501 class="cmtt-12">[i]</span>) are set to false, then both
4502       must be set to false. Note that an &#8217;unused&#8217; floor has no decoded floor information; it
4503       is important that this is remembered at floor curve synthesis time.</dd></dl>
4504 <!--l. 436--><p class="noindent" >
4505 <h5 class="subsubsectionHead"><span class="titlemark">4.3.4.  </span> <a 
4506  id="x1-750004.3.4"></a>residue decode</h5>
4507 <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
4508 order.
4509 <!--l. 441--><p class="noindent" >for each submap <span 
4510 class="cmtt-12">[i] </span>in order from 0 ... <span 
4511 class="cmtt-12">[vorbis_mapping_submaps]</span>-1
4512 <!--l. 444--><p class="noindent" >
4513       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4514    1. </dt><dd 
4515 class="enumerate-enumitem"><span 
4516 class="cmtt-12">[ch] </span>= 0
4517       </dd><dt class="enumerate-enumitem">
4518    2. </dt><dd 
4519 class="enumerate-enumitem">for each channel <span 
4520 class="cmtt-12">[j] </span>in order from 0 ... <span 
4521 class="cmtt-12">[audio_channels] </span>- 1
4522            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4523        a) </dt><dd 
4524 class="enumerate-enumitem">if channel <span 
4525 class="cmtt-12">[j] </span>in submap <span 
4526 class="cmtt-12">[i] </span>(vector <span 
4527 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 
4528 class="cmtt-12">[j] </span>is equal to
4529            <span 
4530 class="cmtt-12">[i]</span>)
4531                <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4532             i. </dt><dd 
4533 class="enumerate-enumitem">if vector <span 
4534 class="cmtt-12">[no_residue] </span>element <span 
4535 class="cmtt-12">[j] </span>is true
4536                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4537                A. </dt><dd 
4538 class="enumerate-enumitem">vector <span 
4539 class="cmtt-12">[do_not_decode_flag] </span>element <span 
4540 class="cmtt-12">[ch] </span>is set</dd></dl>
4541                <!--l. 453--><p class="noindent" >else
4542                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4543                A. </dt><dd 
4544 class="enumerate-enumitem">vector <span 
4545 class="cmtt-12">[do_not_decode_flag] </span>element <span 
4546 class="cmtt-12">[ch] </span>is unset</dd></dl>
4547                </dd><dt class="enumerate-enumitem">
4548             ii. </dt><dd 
4549 class="enumerate-enumitem">increment <span 
4550 class="cmtt-12">[ch]</span></dd></dl>
4551                                                                                         
4552
4553                                                                                         
4554            </dd></dl>
4555       </dd><dt class="enumerate-enumitem">
4556    3. </dt><dd 
4557 class="enumerate-enumitem"><span 
4558 class="cmtt-12">[residue_number] </span>= vector <span 
4559 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span 
4560 class="cmtt-12">[i]</span>
4561       </dd><dt class="enumerate-enumitem">
4562    4. </dt><dd 
4563 class="enumerate-enumitem"><span 
4564 class="cmtt-12">[residue_type] </span>= vector <span 
4565 class="cmtt-12">[vorbis_residue_types] </span>element <span 
4566 class="cmtt-12">[residue_number]</span>
4567       </dd><dt class="enumerate-enumitem">
4568    5. </dt><dd 
4569 class="enumerate-enumitem">decode <span 
4570 class="cmtt-12">[ch] </span>vectors using residue <span 
4571 class="cmtt-12">[residue_number]</span>, according to type <span 
4572 class="cmtt-12">[residue_type]</span>,
4573       also passing vector <span 
4574 class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
4575       not be decoded. Correct per-vector decode length is <span 
4576 class="cmtt-12">[n]</span>/2.
4577       </dd><dt class="enumerate-enumitem">
4578    6. </dt><dd 
4579 class="enumerate-enumitem"><span 
4580 class="cmtt-12">[ch] </span>= 0
4581       </dd><dt class="enumerate-enumitem">
4582    7. </dt><dd 
4583 class="enumerate-enumitem">for each channel <span 
4584 class="cmtt-12">[j] </span>in order from 0 ... <span 
4585 class="cmtt-12">[audio_channels]</span>
4586            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4587        a) </dt><dd 
4588 class="enumerate-enumitem">if channel <span 
4589 class="cmtt-12">[j] </span>is in submap <span 
4590 class="cmtt-12">[i] </span>(vector <span 
4591 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 
4592 class="cmtt-12">[j] </span>is equal
4593            to <span 
4594 class="cmtt-12">[i]</span>)
4595                <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4596             i. </dt><dd 
4597 class="enumerate-enumitem">residue vector for channel <span 
4598 class="cmtt-12">[j] </span>is set to decoded residue vector <span 
4599 class="cmtt-12">[ch]</span>
4600                </dd><dt class="enumerate-enumitem">
4601             ii. </dt><dd 
4602 class="enumerate-enumitem">increment <span 
4603 class="cmtt-12">[ch]</span></dd></dl>
4604            </dd></dl>
4605       </dd></dl>
4606 <!--l. 480--><p class="noindent" >
4607 <h5 class="subsubsectionHead"><span class="titlemark">4.3.5.  </span> <a 
4608  id="x1-760004.3.5"></a>inverse coupling</h5>
4609 <!--l. 482--><p class="noindent" >for each <span 
4610 class="cmtt-12">[i] </span>from <span 
4611 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
4612 <!--l. 485--><p class="noindent" >
4613       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4614    1. </dt><dd 
4615 class="enumerate-enumitem"><span 
4616 class="cmtt-12">[magnitude_vector]   </span>=     the     residue     vector     for     channel     (vector
4617       <span 
4618 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span 
4619 class="cmtt-12">[i]</span>)
4620       </dd><dt class="enumerate-enumitem">
4621    2. </dt><dd 
4622 class="enumerate-enumitem"><span 
4623 class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span 
4624 class="cmtt-12">[vorbis_mapping_angle]</span>
4625                                                                                         
4626
4627                                                                                         
4628       element <span 
4629 class="cmtt-12">[i]</span>)
4630       </dd><dt class="enumerate-enumitem">
4631    3. </dt><dd 
4632 class="enumerate-enumitem">for each scalar value <span 
4633 class="cmtt-12">[M] </span>in vector <span 
4634 class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
4635       <span 
4636 class="cmtt-12">[A] </span>in vector <span 
4637 class="cmtt-12">[angle_vector]</span>:
4638            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4639        a) </dt><dd 
4640 class="enumerate-enumitem">if (<span 
4641 class="cmtt-12">[M] </span>is greater than zero)
4642                <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4643             i. </dt><dd 
4644 class="enumerate-enumitem">if (<span 
4645 class="cmtt-12">[A] </span>is greater than zero)
4646                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4647                A. </dt><dd 
4648 class="enumerate-enumitem"><span 
4649 class="cmtt-12">[new_M] </span>= <span 
4650 class="cmtt-12">[M]</span>
4651                    </dd><dt class="enumerate-enumitem">
4652                B. </dt><dd 
4653 class="enumerate-enumitem"><span 
4654 class="cmtt-12">[new_A] </span>= <span 
4655 class="cmtt-12">[M]</span>-<span 
4656 class="cmtt-12">[A]</span></dd></dl>
4657                <!--l. 498--><p class="noindent" >else
4658                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4659                A. </dt><dd 
4660 class="enumerate-enumitem"><span 
4661 class="cmtt-12">[new_A] </span>= <span 
4662 class="cmtt-12">[M]</span>
4663                    </dd><dt class="enumerate-enumitem">
4664                B. </dt><dd 
4665 class="enumerate-enumitem"><span 
4666 class="cmtt-12">[new_M] </span>= <span 
4667 class="cmtt-12">[M]</span>+<span 
4668 class="cmtt-12">[A]</span></dd></dl>
4669                </dd></dl>
4670            <!--l. 505--><p class="noindent" >else
4671                <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4672             i. </dt><dd 
4673 class="enumerate-enumitem">if (<span 
4674 class="cmtt-12">[A] </span>is greater than zero)
4675                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4676                A. </dt><dd 
4677 class="enumerate-enumitem"><span 
4678 class="cmtt-12">[new_M] </span>= <span 
4679 class="cmtt-12">[M]</span>
4680                    </dd><dt class="enumerate-enumitem">
4681                B. </dt><dd 
4682 class="enumerate-enumitem"><span 
4683 class="cmtt-12">[new_A] </span>= <span 
4684 class="cmtt-12">[M]</span>+<span 
4685 class="cmtt-12">[A]</span></dd></dl>
4686                <!--l. 512--><p class="noindent" >else
4687                    <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
4688                A. </dt><dd 
4689 class="enumerate-enumitem"><span 
4690 class="cmtt-12">[new_A] </span>= <span 
4691 class="cmtt-12">[M]</span>
4692                    </dd><dt class="enumerate-enumitem">
4693                B. </dt><dd 
4694 class="enumerate-enumitem"><span 
4695 class="cmtt-12">[new_M] </span>= <span 
4696 class="cmtt-12">[M]</span>-<span 
4697 class="cmtt-12">[A]</span></dd></dl>
4698                </dd></dl>
4699            </dd><dt class="enumerate-enumitem">
4700        b) </dt><dd 
4701 class="enumerate-enumitem">set scalar value <span 
4702 class="cmtt-12">[M] </span>in vector <span 
4703 class="cmtt-12">[magnitude_vector] </span>to <span 
4704 class="cmtt-12">[new_M]</span>
4705                                                                                         
4706
4707                                                                                         
4708            </dd><dt class="enumerate-enumitem">
4709         c) </dt><dd 
4710 class="enumerate-enumitem">set scalar value <span 
4711 class="cmtt-12">[A] </span>in vector <span 
4712 class="cmtt-12">[angle_vector] </span>to <span 
4713 class="cmtt-12">[new_A]</span></dd></dl>
4714       </dd></dl>
4715 <!--l. 529--><p class="noindent" >
4716 <h5 class="subsubsectionHead"><span class="titlemark">4.3.6.  </span> <a 
4717  id="x1-770004.3.6"></a>dot product</h5>
4718 <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
4719 packet type. Note that the vector synthesis length for floor computation is <span 
4720 class="cmtt-12">[n]</span>/2.
4721 <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
4722 channel&#8217;s residue vector. The result is the dot product of the floor and residue vectors for
4723 each channel; the produced vectors are the length <span 
4724 class="cmtt-12">[n]</span>/2 audio spectrum for each
4725 channel.
4726 <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
4727 implementation might be to assume that a 32 bit fixed-point representation for floor and
4728 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
4729 in all cases because it happens to mostly work with the current Xiph.Org reference
4730 encoder.
4731 <!--l. 550--><p class="noindent" >However, floor vector values can span <span 
4732 class="cmsy-10x-x-120">&sim;</span>140dB (<span 
4733 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
4734 vector should represent a minimum of 120dB (<span 
4735 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
4736 bit PCM device. For the residue vector to represent full scale if the floor is nailed
4737 to <span 
4738 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
4739 full scale if the floor is nailed at 0dB, it must be able to represent <span 
4740 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
4741 Thus, in order to handle full range dynamics, a residue vector may span <span 
4742 class="cmsy-10x-x-120">&minus;</span>140dB to
4743 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
4744 residue vector must be able to represent a 48 bit range and the dot product must
4745 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
4746 achieved using large (64 bit or larger) integers, or implementing a movable binary point
4747 representation.
4748 <!--l. 567--><p class="noindent" >
4749 <h5 class="subsubsectionHead"><span class="titlemark">4.3.7.  </span> <a 
4750  id="x1-780004.3.7"></a>inverse MDCT</h5>
4751 <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
4752                                                                                         
4753
4754                                                                                         
4755 inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
4756 available in <span class="cite">[<a 
4757 href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
4758 earlier.
4759 <!--l. 576--><p class="noindent" >
4760 <h5 class="subsubsectionHead"><span class="titlemark">4.3.8.  </span> <a 
4761  id="x1-790004.3.8"></a>overlap_add</h5>
4762 <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
4763 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
4764 current window (as illustrated in <a 
4765 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>, &#8220;<a 
4766 href="#x1-260001.3.2">Window shape decode (long windows
4767 only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;). The overlapped portion produced from overlapping the previous and current frame data
4768 is finished data to be returned by the decoder. This data spans from the center of
4769 the previous window to the center of the current window. In the case of same-sized
4770 windows, the amount of data to return is one-half block consisting of and only of the
4771 overlapped portions. When overlapping a short and long window, much of the returned
4772 range does not actually overlap. This does not damage transform orthogonality. Pay
4773 attention however to returning the correct data range; the amount of data to be returned
4774 is:
4775 <!--l. 592--><p class="noindent" >
4776 <div class="fancyvrb" id="fancyvrb22">
4777 <a 
4778  id="x1-79002r1"></a><span 
4779 class="cmr-6">1</span><span 
4780 class="cmtt-8">&#x00A0;</span><span 
4781 class="cmtt-8">&#x00A0;window\_blocksize(previous\_window)/4+window\_blocksize(current\_window)/4</span>
4782 </div>
4783 <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
4784 windowsize/2-1, inclusive) of the current window.
4785 <!--l. 599--><p class="noindent" >Data is not returned from the first frame; it must be used to &#8217;prime&#8217; the decode engine. The
4786 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
4787 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
4788 <!--l. 606--><p class="noindent" >
4789 <h5 class="subsubsectionHead"><span class="titlemark">4.3.9.  </span> <a 
4790  id="x1-800004.3.9"></a>output channel order</h5>
4791 <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
4792 implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
4793 specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
4794                                                                                         
4795
4796                                                                                         
4797 greater-than-eight channels remains &#8217;left to the implementation&#8217;.
4798 <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a
4799 decoder to produce output with channels in any order. Any such decoder should explicitly
4800 document channel reordering behavior.
4801 <!--l. 620--><p class="noindent" >
4802       <dl class="description"><dt class="description">
4803 <span 
4804 class="cmssbx-10x-x-120">one channel</span> </dt><dd 
4805 class="description">the stream is monophonic
4806       </dd><dt class="description">
4807 <span 
4808 class="cmssbx-10x-x-120">two channels</span> </dt><dd 
4809 class="description">the stream is stereo. channel order: left, right
4810       </dd><dt class="description">
4811 <span 
4812 class="cmssbx-10x-x-120">three channels</span> </dt><dd 
4813 class="description">the stream is a 1d-surround encoding. channel order: left, center, right
4814       </dd><dt class="description">
4815 <span 
4816 class="cmssbx-10x-x-120">four channels</span> </dt><dd 
4817 class="description">the stream is quadraphonic surround. channel order: front left, front right,
4818       rear left, rear right
4819       </dd><dt class="description">
4820 <span 
4821 class="cmssbx-10x-x-120">five channels</span> </dt><dd 
4822 class="description">the stream is five-channel surround. channel order: front left, center, front
4823       right, rear left, rear right
4824       </dd><dt class="description">
4825 <span 
4826 class="cmssbx-10x-x-120">six channels</span> </dt><dd 
4827 class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear
4828       left, rear right, LFE
4829       </dd><dt class="description">
4830 <span 
4831 class="cmssbx-10x-x-120">seven channels</span> </dt><dd 
4832 class="description">the stream is 6.1 surround. channel order: front left, center, front right,
4833       side left, side right, rear center, LFE
4834       </dd><dt class="description">
4835 <span 
4836 class="cmssbx-10x-x-120">eight channels</span> </dt><dd 
4837 class="description">the stream is 7.1 surround. channel order: front left, center, front right,
4838       side left, side right, rear left, rear right, LFE
4839       </dd><dt class="description">
4840 <span 
4841 class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd 
4842 class="description">channel use and order is defined by the application
4843       </dd></dl>
4844 <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
4845 channel mappings (such as three and four channel <a 
4846 href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
4847 mappings other than mapping 0.
4848                                                                                         
4849
4850                                                                                         
4851                                                                                         
4852
4853                                                                                         
4854 <h3 class="sectionHead"><span class="titlemark">5.  </span> <a 
4855  id="x1-810005"></a>comment field and header specification</h3>
4856 <!--l. 6--><p class="noindent" >
4857 <h4 class="subsectionHead"><span class="titlemark">5.1.  </span> <a 
4858  id="x1-820005.1"></a>Overview</h4>
4859 <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
4860 bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
4861 belongs in a separate logical bitstream (usually an XML stream type) that provides greater
4862 structure and machine parseability.
4863 <!--l. 14--><p class="noindent" >The comment field is meant to be used much like someone jotting a quick note on the bottom of
4864 a CDR. It should be a little information to remember the disc by and explain it to others; a
4865 short, to-the-point text note that need not only be a couple words, but isn&#8217;t going to be more
4866 than a short paragraph. The essentials, in other words, whatever they turn out to be,
4867 eg:
4868 <!--l. 21--><p class="noindent" >
4869       <div class="quote">
4870       <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span 
4871 class="cmti-12">&#8220;I&#8217;m Still Around&#8221;</span>, opening
4872       for Moxy Früvous, 1997.</div>
4873 <!--l. 29--><p class="noindent" >
4874 <h4 class="subsectionHead"><span class="titlemark">5.2.  </span> <a 
4875  id="x1-830005.2"></a>Comment encoding</h4>
4876 <!--l. 31--><p class="noindent" >
4877 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1.  </span> <a 
4878  id="x1-840005.2.1"></a>Structure</h5>
4879 <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
4880 bounded to 2<sup><span 
4881 class="cmr-8">32</span></sup> <span 
4882 class="cmsy-10x-x-120">&minus; </span>1 and the length of each vector is limited to 2<sup><span 
4883 class="cmr-8">32</span></sup> <span 
4884 class="cmsy-10x-x-120">&minus; </span>1 bytes. The vector length is
4885                                                                                         
4886
4887                                                                                         
4888 encoded; the vector contents themselves are not null terminated. In addition to the vector list,
4889 there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
4890 example, the 1.0 release of libvorbis set the vendor string to &#8220;Xiph.Org libVorbis I
4891 20020717&#8221;.
4892 <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
4893 packing conventions of the vorbis codec. However, since data in the comment header
4894 is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
4895 integers.
4896 <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
4897 <!--l. 48--><p class="noindent" >
4898 <div class="fancyvrb" id="fancyvrb23">
4899 <a 
4900  id="x1-84002r1"></a><span 
4901 class="cmr-6">1</span><span 
4902 class="cmtt-8">&#x00A0;</span><span 
4903 class="cmtt-8">&#x00A0;</span><span 
4904 class="cmtt-8">&#x00A0;</span><span 
4905 class="cmtt-8">&#x00A0;1)</span><span 
4906 class="cmtt-8">&#x00A0;[vendor\_length]</span><span 
4907 class="cmtt-8">&#x00A0;=</span><span 
4908 class="cmtt-8">&#x00A0;read</span><span 
4909 class="cmtt-8">&#x00A0;an</span><span 
4910 class="cmtt-8">&#x00A0;unsigned</span><span 
4911 class="cmtt-8">&#x00A0;integer</span><span 
4912 class="cmtt-8">&#x00A0;of</span><span 
4913 class="cmtt-8">&#x00A0;32</span><span 
4914 class="cmtt-8">&#x00A0;bits</span>
4915 <br class="fancyvrb" /><a 
4916  id="x1-84004r2"></a><span 
4917 class="cmr-6">2</span><span 
4918 class="cmtt-8">&#x00A0;</span><span 
4919 class="cmtt-8">&#x00A0;</span><span 
4920 class="cmtt-8">&#x00A0;</span><span 
4921 class="cmtt-8">&#x00A0;2)</span><span 
4922 class="cmtt-8">&#x00A0;[vendor\_string]</span><span 
4923 class="cmtt-8">&#x00A0;=</span><span 
4924 class="cmtt-8">&#x00A0;read</span><span 
4925 class="cmtt-8">&#x00A0;a</span><span 
4926 class="cmtt-8">&#x00A0;UTF-8</span><span 
4927 class="cmtt-8">&#x00A0;vector</span><span 
4928 class="cmtt-8">&#x00A0;as</span><span 
4929 class="cmtt-8">&#x00A0;[vendor\_length]</span><span 
4930 class="cmtt-8">&#x00A0;octets</span>
4931 <br class="fancyvrb" /><a 
4932  id="x1-84006r3"></a><span 
4933 class="cmr-6">3</span><span 
4934 class="cmtt-8">&#x00A0;</span><span 
4935 class="cmtt-8">&#x00A0;</span><span 
4936 class="cmtt-8">&#x00A0;</span><span 
4937 class="cmtt-8">&#x00A0;3)</span><span 
4938 class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span 
4939 class="cmtt-8">&#x00A0;=</span><span 
4940 class="cmtt-8">&#x00A0;read</span><span 
4941 class="cmtt-8">&#x00A0;an</span><span 
4942 class="cmtt-8">&#x00A0;unsigned</span><span 
4943 class="cmtt-8">&#x00A0;integer</span><span 
4944 class="cmtt-8">&#x00A0;of</span><span 
4945 class="cmtt-8">&#x00A0;32</span><span 
4946 class="cmtt-8">&#x00A0;bits</span>
4947 <br class="fancyvrb" /><a 
4948  id="x1-84008r4"></a><span 
4949 class="cmr-6">4</span><span 
4950 class="cmtt-8">&#x00A0;</span><span 
4951 class="cmtt-8">&#x00A0;</span><span 
4952 class="cmtt-8">&#x00A0;</span><span 
4953 class="cmtt-8">&#x00A0;4)</span><span 
4954 class="cmtt-8">&#x00A0;iterate</span><span 
4955 class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span 
4956 class="cmtt-8">&#x00A0;times</span><span 
4957 class="cmtt-8">&#x00A0;{</span>
4958 <br class="fancyvrb" /><a 
4959  id="x1-84010r5"></a><span 
4960 class="cmr-6">5</span><span 
4961 class="cmtt-8">&#x00A0;</span><span 
4962 class="cmtt-8">&#x00A0;</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;5)</span><span 
4970 class="cmtt-8">&#x00A0;[length]</span><span 
4971 class="cmtt-8">&#x00A0;=</span><span 
4972 class="cmtt-8">&#x00A0;read</span><span 
4973 class="cmtt-8">&#x00A0;an</span><span 
4974 class="cmtt-8">&#x00A0;unsigned</span><span 
4975 class="cmtt-8">&#x00A0;integer</span><span 
4976 class="cmtt-8">&#x00A0;of</span><span 
4977 class="cmtt-8">&#x00A0;32</span><span 
4978 class="cmtt-8">&#x00A0;bits</span>
4979 <br class="fancyvrb" /><a 
4980  id="x1-84012r6"></a><span 
4981 class="cmr-6">6</span><span 
4982 class="cmtt-8">&#x00A0;</span><span 
4983 class="cmtt-8">&#x00A0;</span><span 
4984 class="cmtt-8">&#x00A0;</span><span 
4985 class="cmtt-8">&#x00A0;</span><span 
4986 class="cmtt-8">&#x00A0;</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;6)</span><span 
4991 class="cmtt-8">&#x00A0;this</span><span 
4992 class="cmtt-8">&#x00A0;iteration&#8217;s</span><span 
4993 class="cmtt-8">&#x00A0;user</span><span 
4994 class="cmtt-8">&#x00A0;comment</span><span 
4995 class="cmtt-8">&#x00A0;=</span><span 
4996 class="cmtt-8">&#x00A0;read</span><span 
4997 class="cmtt-8">&#x00A0;a</span><span 
4998 class="cmtt-8">&#x00A0;UTF-8</span><span 
4999 class="cmtt-8">&#x00A0;vector</span><span 
5000 class="cmtt-8">&#x00A0;as</span><span 
5001 class="cmtt-8">&#x00A0;[length]</span><span 
5002 class="cmtt-8">&#x00A0;octets</span>
5003 <br class="fancyvrb" /><a 
5004  id="x1-84014r7"></a><span 
5005 class="cmr-6">7</span><span 
5006 class="cmtt-8">&#x00A0;</span><span 
5007 class="cmtt-8">&#x00A0;</span><span 
5008 class="cmtt-8">&#x00A0;</span><span 
5009 class="cmtt-8">&#x00A0;</span><span 
5010 class="cmtt-8">&#x00A0;</span><span 
5011 class="cmtt-8">&#x00A0;</span><span 
5012 class="cmtt-8">&#x00A0;}</span>
5013 <br class="fancyvrb" /><a 
5014  id="x1-84016r8"></a><span 
5015 class="cmr-6">8</span><span 
5016 class="cmtt-8">&#x00A0;</span><span 
5017 class="cmtt-8">&#x00A0;</span><span 
5018 class="cmtt-8">&#x00A0;</span><span 
5019 class="cmtt-8">&#x00A0;7)</span><span 
5020 class="cmtt-8">&#x00A0;[framing\_bit]</span><span 
5021 class="cmtt-8">&#x00A0;=</span><span 
5022 class="cmtt-8">&#x00A0;read</span><span 
5023 class="cmtt-8">&#x00A0;a</span><span 
5024 class="cmtt-8">&#x00A0;single</span><span 
5025 class="cmtt-8">&#x00A0;bit</span><span 
5026 class="cmtt-8">&#x00A0;as</span><span 
5027 class="cmtt-8">&#x00A0;boolean</span>
5028 <br class="fancyvrb" /><a 
5029  id="x1-84018r9"></a><span 
5030 class="cmr-6">9</span><span 
5031 class="cmtt-8">&#x00A0;</span><span 
5032 class="cmtt-8">&#x00A0;</span><span 
5033 class="cmtt-8">&#x00A0;</span><span 
5034 class="cmtt-8">&#x00A0;8)</span><span 
5035 class="cmtt-8">&#x00A0;if</span><span 
5036 class="cmtt-8">&#x00A0;(</span><span 
5037 class="cmtt-8">&#x00A0;[framing\_bit]</span><span 
5038 class="cmtt-8">&#x00A0;unset</span><span 
5039 class="cmtt-8">&#x00A0;or</span><span 
5040 class="cmtt-8">&#x00A0;end-of-packet</span><span 
5041 class="cmtt-8">&#x00A0;)</span><span 
5042 class="cmtt-8">&#x00A0;then</span><span 
5043 class="cmtt-8">&#x00A0;ERROR</span>
5044 <br class="fancyvrb" /><a 
5045  id="x1-84020r10"></a><span 
5046 class="cmr-6">10</span><span 
5047 class="cmtt-8">&#x00A0;</span><span 
5048 class="cmtt-8">&#x00A0;</span><span 
5049 class="cmtt-8">&#x00A0;</span><span 
5050 class="cmtt-8">&#x00A0;9)</span><span 
5051 class="cmtt-8">&#x00A0;done.</span>
5052 </div>
5053 <!--l. 64--><p class="noindent" >
5054 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2.  </span> <a 
5055  id="x1-850005.2.2"></a>Content vector format</h5>
5056 <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
5057 comment fields consist of a field name and a corresponding value and look like:
5058 <!--l. 70--><p class="noindent" >
5059       <div class="quote">
5060       <!--l. 71--><p class="noindent" >
5061       <div class="fancyvrb" id="fancyvrb24">
5062 <a 
5063  id="x1-85002r1"></a><span 
5064 class="cmr-6">1</span><span 
5065 class="cmtt-8">&#x00A0;</span><span 
5066 class="cmtt-8">&#x00A0;comment[0]="ARTIST=me";</span>
5067 <br class="fancyvrb" /><a 
5068  id="x1-85004r2"></a><span 
5069 class="cmr-6">2</span><span 
5070 class="cmtt-8">&#x00A0;</span><span 
5071 class="cmtt-8">&#x00A0;comment[1]="TITLE=the</span><span 
5072 class="cmtt-8">&#x00A0;sound</span><span 
5073 class="cmtt-8">&#x00A0;of</span><span 
5074 class="cmtt-8">&#x00A0;Vorbis";</span>
5075 </div>
5076       </div>
5077                                                                                         
5078
5079                                                                                         
5080 <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (&#8217;=&#8217;)
5081 excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
5082 ASCII 0x61 through 0x7A inclusive (characters a-z).
5083 <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (&#8217;=&#8217;); this equals sign is used to
5084 terminate the field name.
5085 <!--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
5086 field.
5087 <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a 
5088  id="x1-860005.2.2"></a><span 
5089 class="cmbx-12">Field names</span></span>
5090 Below is a proposed, minimal list of standard field names with a description of intended use. No
5091 single or group of field names is mandatory; a comment header may contain one, all or none of
5092 the names in this list.
5093 <!--l. 99--><p class="noindent" >
5094       <dl class="description"><dt class="description">
5095 <span 
5096 class="cmssbx-10x-x-120">TITLE</span> </dt><dd 
5097 class="description">Track/Work name
5098       </dd><dt class="description">
5099 <span 
5100 class="cmssbx-10x-x-120">VERSION</span> </dt><dd 
5101 class="description">The version field may be used to differentiate multiple versions of the same
5102       track title in a single collection. (e.g. remix info)
5103       </dd><dt class="description">
5104 <span 
5105 class="cmssbx-10x-x-120">ALBUM</span> </dt><dd 
5106 class="description">The collection name to which this track belongs
5107       </dd><dt class="description">
5108 <span 
5109 class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd 
5110 class="description">The track number of this piece if part of a specific larger collection or
5111       album
5112       </dd><dt class="description">
5113 <span 
5114 class="cmssbx-10x-x-120">ARTIST</span> </dt><dd 
5115 class="description">The artist generally considered responsible for the work. In popular music this is
5116       usually the performing band or singer. For classical music it would be the composer.
5117       For an audio book it would be the author of the original text.
5118       </dd><dt class="description">
5119 <span 
5120 class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd 
5121 class="description">The artist(s) who performed the work. In classical music this would be the
5122       conductor, orchestra, soloists. In an audio book it would be the actor who did the
5123       reading. In popular music this is typically the same as the ARTIST and is omitted.
5124       </dd><dt class="description">
5125 <span 
5126 class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd 
5127 class="description">Copyright attribution, e.g., &#8217;2001 Nobody&#8217;s Band&#8217; or &#8217;1999 Jack Moffitt&#8217;
5128       </dd><dt class="description">
5129                                                                                         
5130
5131                                                                                         
5132 <span 
5133 class="cmssbx-10x-x-120">LICENSE</span> </dt><dd 
5134 class="description">License information, eg, &#8217;All Rights Reserved&#8217;, &#8217;Any Use Permitted&#8217;, a URL to
5135       a                license                such                as                a                Creative
5136       Commons license (&#8221;www.creativecommons.org/blahblah/license.html&#8221;) or the EFF
5137       Open Audio License (&#8217;distributed under the terms of the Open Audio License. see
5138       http://www.eff.org/IP/Open_licenses/eff_oal.html for details&#8217;), etc.
5139       </dd><dt class="description">
5140 <span 
5141 class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd 
5142 class="description">Name of the organization producing the track (i.e. the &#8217;record label&#8217;)
5143       </dd><dt class="description">
5144 <span 
5145 class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd 
5146 class="description">A short text description of the contents
5147       </dd><dt class="description">
5148 <span 
5149 class="cmssbx-10x-x-120">GENRE</span> </dt><dd 
5150 class="description">A short text indication of music genre
5151       </dd><dt class="description">
5152 <span 
5153 class="cmssbx-10x-x-120">DATE</span> </dt><dd 
5154 class="description">Date the track was recorded
5155       </dd><dt class="description">
5156 <span 
5157 class="cmssbx-10x-x-120">LOCATION</span> </dt><dd 
5158 class="description">Location where track was recorded
5159       </dd><dt class="description">
5160 <span 
5161 class="cmssbx-10x-x-120">CONTACT</span> </dt><dd 
5162 class="description">Contact information for the creators or distributors of the track. This could
5163       be a URL, an email address, the physical address of the producing label.
5164       </dd><dt class="description">
5165 <span 
5166 class="cmssbx-10x-x-120">ISRC</span> </dt><dd 
5167 class="description">International Standard Recording Code for the track; see <a 
5168 href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
5169       more information on ISRC numbers.
5170       </dd></dl>
5171 <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a 
5172  id="x1-870005.2.2"></a><span 
5173 class="cmbx-12">Implications</span></span>
5174 Field names should not be &#8217;internationalized&#8217;; this is a concession to simplicity not
5175 an attempt to exclude the majority of the world that doesn&#8217;t speak English. Field
5176 <span 
5177 class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
5178 language.
5179 <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
5180 the field name is bounded in a known way. Thus we also have the length of the field
5181 contents.
5182 <!--l. 170--><p class="noindent" >Individual &#8217;vendors&#8217; may use non-standard field names within reason. The proper
5183 use of comment fields should be clear through context at this point. Abuse will be
5184 discouraged.
5185                                                                                         
5186
5187                                                                                         
5188 <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to &#8217;nonstandard&#8217; field names. Vendors should make some effort
5189 to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
5190 tags here to help with standardization.
5191 <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
5192 example, assume a track was recorded by three well know artists; the following is permissible,
5193 and encouraged:
5194 <!--l. 183--><p class="noindent" >
5195       <div class="quote">
5196       <!--l. 184--><p class="noindent" >
5197       <div class="fancyvrb" id="fancyvrb25">
5198 <a 
5199  id="x1-87002r1"></a><span 
5200 class="cmr-6">1</span><span 
5201 class="cmtt-8">&#x00A0;</span><span 
5202 class="cmtt-8">&#x00A0;ARTIST=Dizzy</span><span 
5203 class="cmtt-8">&#x00A0;Gillespie</span>
5204 <br class="fancyvrb" /><a 
5205  id="x1-87004r2"></a><span 
5206 class="cmr-6">2</span><span 
5207 class="cmtt-8">&#x00A0;</span><span 
5208 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span 
5209 class="cmtt-8">&#x00A0;Rollins</span>
5210 <br class="fancyvrb" /><a 
5211  id="x1-87006r3"></a><span 
5212 class="cmr-6">3</span><span 
5213 class="cmtt-8">&#x00A0;</span><span 
5214 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span 
5215 class="cmtt-8">&#x00A0;Stitt</span>
5216 </div>
5217       </div>
5218 <!--l. 197--><p class="noindent" >
5219 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3.  </span> <a 
5220  id="x1-880005.2.3"></a>Encoding</h5>
5221 <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
5222 first bitstream header packet, it is not generally the only packet on the second page and may not
5223 be restricted to within the second bitstream page. The length of the comment header packet is
5224 (practically) unbounded. The comment header packet is not optional; it must be present in the
5225 bitstream even if it is effectively empty.
5226 <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg&#8217;s standard bitstream mapping which
5227 renders least-significant-bit of the word to be coded into the least significant available bit of the
5228 current bitstream octet first):
5229 <!--l. 213--><p class="noindent" >
5230       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
5231    1. </dt><dd 
5232 class="enumerate-enumitem">Vendor string length (32 bit unsigned quantity specifying number of octets)
5233       </dd><dt class="enumerate-enumitem">
5234    2. </dt><dd 
5235 class="enumerate-enumitem">Vendor string ([vendor string length] octets coded from beginning of string to end of
5236       string, not null terminated)
5237                                                                                         
5238
5239                                                                                         
5240       </dd><dt class="enumerate-enumitem">
5241    3. </dt><dd 
5242 class="enumerate-enumitem">Number of comment fields (32 bit unsigned quantity specifying number of fields)
5243       </dd><dt class="enumerate-enumitem">
5244    4. </dt><dd 
5245 class="enumerate-enumitem">Comment field 0 length (if [Number of comment fields] <span 
5246 class="cmmi-12">&#x003E; </span>0; 32 bit unsigned quantity
5247       specifying number of octets)
5248       </dd><dt class="enumerate-enumitem">
5249    5. </dt><dd 
5250 class="enumerate-enumitem">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
5251       end of string, not null terminated)
5252       </dd><dt class="enumerate-enumitem">
5253    6. </dt><dd 
5254 class="enumerate-enumitem">Comment field 1 length (if [Number of comment fields] <span 
5255 class="cmmi-12">&#x003E; </span>1...)...
5256       </dd></dl>
5257 <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
5258 in <span 
5259 class="cmtt-12">vorbis/lib/info.c</span>, <span 
5260 class="cmtt-12">_vorbis_pack_comment() </span>and <span 
5261 class="cmtt-12">_vorbis_unpack_comment()</span>.
5262                                                                                         
5263
5264                                                                                         
5265                                                                                         
5266
5267                                                                                         
5268 <h3 class="sectionHead"><span class="titlemark">6.  </span> <a 
5269  id="x1-890006"></a>Floor type 0 setup and decode</h3>
5270 <!--l. 6--><p class="noindent" >
5271 <h4 class="subsectionHead"><span class="titlemark">6.1.  </span> <a 
5272  id="x1-900006.1"></a>Overview</h4>
5273 <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
5274 Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
5275 response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
5276 impulse response filter as would be used in linear predictive coding; LSP representation may be
5277 converted to LPC representation and vice-versa.
5278 <!--l. 18--><p class="noindent" >
5279 <h4 class="subsectionHead"><span class="titlemark">6.2.  </span> <a 
5280  id="x1-910006.2"></a>Floor 0 format</h4>
5281 <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
5282 coding/decoding the LSP filter coefficient values used by each frame.
5283 <!--l. 24--><p class="noindent" >
5284 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1.  </span> <a 
5285  id="x1-920006.2.1"></a>header decode</h5>
5286 <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
5287 packet). configuration decode proceeds as follows:
5288 <!--l. 30--><p class="noindent" >
5289 <div class="fancyvrb" id="fancyvrb26">
5290 <a 
5291  id="x1-92002r1"></a><span 
5292 class="cmr-6">1</span><span 
5293 class="cmtt-8">&#x00A0;</span><span 
5294 class="cmtt-8">&#x00A0;</span><span 
5295 class="cmtt-8">&#x00A0;</span><span 
5296 class="cmtt-8">&#x00A0;1)</span><span 
5297 class="cmtt-8">&#x00A0;[floor0_order]</span><span 
5298 class="cmtt-8">&#x00A0;=</span><span 
5299 class="cmtt-8">&#x00A0;read</span><span 
5300 class="cmtt-8">&#x00A0;an</span><span 
5301 class="cmtt-8">&#x00A0;unsigned</span><span 
5302 class="cmtt-8">&#x00A0;integer</span><span 
5303 class="cmtt-8">&#x00A0;of</span><span 
5304 class="cmtt-8">&#x00A0;8</span><span 
5305 class="cmtt-8">&#x00A0;bits</span>
5306 <br class="fancyvrb" /><a 
5307  id="x1-92004r2"></a><span 
5308 class="cmr-6">2</span><span 
5309 class="cmtt-8">&#x00A0;</span><span 
5310 class="cmtt-8">&#x00A0;</span><span 
5311 class="cmtt-8">&#x00A0;</span><span 
5312 class="cmtt-8">&#x00A0;2)</span><span 
5313 class="cmtt-8">&#x00A0;[floor0_rate]</span><span 
5314 class="cmtt-8">&#x00A0;=</span><span 
5315 class="cmtt-8">&#x00A0;read</span><span 
5316 class="cmtt-8">&#x00A0;an</span><span 
5317 class="cmtt-8">&#x00A0;unsigned</span><span 
5318 class="cmtt-8">&#x00A0;integer</span><span 
5319 class="cmtt-8">&#x00A0;of</span><span 
5320 class="cmtt-8">&#x00A0;16</span><span 
5321 class="cmtt-8">&#x00A0;bits</span>
5322 <br class="fancyvrb" /><a 
5323  id="x1-92006r3"></a><span 
5324 class="cmr-6">3</span><span 
5325 class="cmtt-8">&#x00A0;</span><span 
5326 class="cmtt-8">&#x00A0;</span><span 
5327 class="cmtt-8">&#x00A0;</span><span 
5328 class="cmtt-8">&#x00A0;3)</span><span 
5329 class="cmtt-8">&#x00A0;[floor0_bark_map_size]</span><span 
5330 class="cmtt-8">&#x00A0;=</span><span 
5331 class="cmtt-8">&#x00A0;read</span><span 
5332 class="cmtt-8">&#x00A0;an</span><span 
5333 class="cmtt-8">&#x00A0;unsigned</span><span 
5334 class="cmtt-8">&#x00A0;integer</span><span 
5335 class="cmtt-8">&#x00A0;of</span><span 
5336 class="cmtt-8">&#x00A0;16</span><span 
5337 class="cmtt-8">&#x00A0;bits</span>
5338 <br class="fancyvrb" /><a 
5339  id="x1-92008r4"></a><span 
5340 class="cmr-6">4</span><span 
5341 class="cmtt-8">&#x00A0;</span><span 
5342 class="cmtt-8">&#x00A0;</span><span 
5343 class="cmtt-8">&#x00A0;</span><span 
5344 class="cmtt-8">&#x00A0;4)</span><span 
5345 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span 
5346 class="cmtt-8">&#x00A0;=</span><span 
5347 class="cmtt-8">&#x00A0;read</span><span 
5348 class="cmtt-8">&#x00A0;an</span><span 
5349 class="cmtt-8">&#x00A0;unsigned</span><span 
5350 class="cmtt-8">&#x00A0;integer</span><span 
5351 class="cmtt-8">&#x00A0;of</span><span 
5352 class="cmtt-8">&#x00A0;six</span><span 
5353 class="cmtt-8">&#x00A0;bits</span>
5354 <br class="fancyvrb" /><a 
5355  id="x1-92010r5"></a><span 
5356 class="cmr-6">5</span><span 
5357 class="cmtt-8">&#x00A0;</span><span 
5358 class="cmtt-8">&#x00A0;</span><span 
5359 class="cmtt-8">&#x00A0;</span><span 
5360 class="cmtt-8">&#x00A0;5)</span><span 
5361 class="cmtt-8">&#x00A0;[floor0_amplitude_offset]</span><span 
5362 class="cmtt-8">&#x00A0;=</span><span 
5363 class="cmtt-8">&#x00A0;read</span><span 
5364 class="cmtt-8">&#x00A0;an</span><span 
5365 class="cmtt-8">&#x00A0;unsigned</span><span 
5366 class="cmtt-8">&#x00A0;integer</span><span 
5367 class="cmtt-8">&#x00A0;of</span><span 
5368 class="cmtt-8">&#x00A0;eight</span><span 
5369 class="cmtt-8">&#x00A0;bits</span>
5370 <br class="fancyvrb" /><a 
5371  id="x1-92012r6"></a><span 
5372 class="cmr-6">6</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;6)</span><span 
5377 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span 
5378 class="cmtt-8">&#x00A0;=</span><span 
5379 class="cmtt-8">&#x00A0;read</span><span 
5380 class="cmtt-8">&#x00A0;an</span><span 
5381 class="cmtt-8">&#x00A0;unsigned</span><span 
5382 class="cmtt-8">&#x00A0;integer</span><span 
5383 class="cmtt-8">&#x00A0;of</span><span 
5384 class="cmtt-8">&#x00A0;four</span><span 
5385 class="cmtt-8">&#x00A0;bits</span><span 
5386 class="cmtt-8">&#x00A0;and</span><span 
5387 class="cmtt-8">&#x00A0;add</span><span 
5388 class="cmtt-8">&#x00A0;1</span>
5389 <br class="fancyvrb" /><a 
5390  id="x1-92014r7"></a><span 
5391 class="cmr-6">7</span><span 
5392 class="cmtt-8">&#x00A0;</span><span 
5393 class="cmtt-8">&#x00A0;</span><span 
5394 class="cmtt-8">&#x00A0;</span><span 
5395 class="cmtt-8">&#x00A0;7)</span><span 
5396 class="cmtt-8">&#x00A0;array</span><span 
5397 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span 
5398 class="cmtt-8">&#x00A0;=</span><span 
5399 class="cmtt-8">&#x00A0;read</span><span 
5400 class="cmtt-8">&#x00A0;a</span><span 
5401 class="cmtt-8">&#x00A0;list</span><span 
5402 class="cmtt-8">&#x00A0;of</span><span 
5403 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span 
5404 class="cmtt-8">&#x00A0;unsigned</span><span 
5405 class="cmtt-8">&#x00A0;integers</span><span 
5406 class="cmtt-8">&#x00A0;of</span><span 
5407 class="cmtt-8">&#x00A0;eight</span><span 
5408 class="cmtt-8">&#x00A0;bits</span><span 
5409 class="cmtt-8">&#x00A0;each;</span>
5410 </div>
5411                                                                                         
5412
5413                                                                                         
5414 <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
5415 In addition, any element of the array <span 
5416 class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
5417 codebook number for this bitstream is an error condition that also renders the stream
5418 undecodable.
5419 <!--l. 48--><p class="noindent" >
5420 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2.  </span> <a 
5421  id="x1-930006.2.2"></a>packet decode</h5>
5422 <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
5423 amplitude and <span 
5424 class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
5425 computing the floor curve, which is defined as the frequency response of the decoded LSP
5426 filter.
5427 <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
5428 <div class="fancyvrb" id="fancyvrb27">
5429 <a 
5430  id="x1-93002r1"></a><span 
5431 class="cmr-6">1</span><span 
5432 class="cmtt-8">&#x00A0;</span><span 
5433 class="cmtt-8">&#x00A0;</span><span 
5434 class="cmtt-8">&#x00A0;</span><span 
5435 class="cmtt-8">&#x00A0;1)</span><span 
5436 class="cmtt-8">&#x00A0;[amplitude]</span><span 
5437 class="cmtt-8">&#x00A0;=</span><span 
5438 class="cmtt-8">&#x00A0;read</span><span 
5439 class="cmtt-8">&#x00A0;an</span><span 
5440 class="cmtt-8">&#x00A0;unsigned</span><span 
5441 class="cmtt-8">&#x00A0;integer</span><span 
5442 class="cmtt-8">&#x00A0;of</span><span 
5443 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span 
5444 class="cmtt-8">&#x00A0;bits</span>
5445 <br class="fancyvrb" /><a 
5446  id="x1-93004r2"></a><span 
5447 class="cmr-6">2</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;2)</span><span 
5452 class="cmtt-8">&#x00A0;if</span><span 
5453 class="cmtt-8">&#x00A0;(</span><span 
5454 class="cmtt-8">&#x00A0;[amplitude]</span><span 
5455 class="cmtt-8">&#x00A0;is</span><span 
5456 class="cmtt-8">&#x00A0;greater</span><span 
5457 class="cmtt-8">&#x00A0;than</span><span 
5458 class="cmtt-8">&#x00A0;zero</span><span 
5459 class="cmtt-8">&#x00A0;)</span><span 
5460 class="cmtt-8">&#x00A0;</span><span 
5461 class="cmsy-8">{</span>
5462 <br class="fancyvrb" /><a 
5463  id="x1-93006r3"></a><span 
5464 class="cmr-6">3</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;3)</span><span 
5474 class="cmtt-8">&#x00A0;[coefficients]</span><span 
5475 class="cmtt-8">&#x00A0;is</span><span 
5476 class="cmtt-8">&#x00A0;an</span><span 
5477 class="cmtt-8">&#x00A0;empty,</span><span 
5478 class="cmtt-8">&#x00A0;zero</span><span 
5479 class="cmtt-8">&#x00A0;length</span><span 
5480 class="cmtt-8">&#x00A0;vector</span>
5481 <br class="fancyvrb" /><a 
5482  id="x1-93008r4"></a><span 
5483 class="cmr-6">4</span><span 
5484 class="cmtt-8">&#x00A0;</span><span 
5485 class="cmtt-8">&#x00A0;</span><span 
5486 class="cmtt-8">&#x00A0;</span><span 
5487 class="cmtt-8">&#x00A0;</span><span 
5488 class="cmtt-8">&#x00A0;</span><span 
5489 class="cmtt-8">&#x00A0;</span><span 
5490 class="cmtt-8">&#x00A0;</span><span 
5491 class="cmtt-8">&#x00A0;</span><span 
5492 class="cmtt-8">&#x00A0;4)</span><span 
5493 class="cmtt-8">&#x00A0;[booknumber]</span><span 
5494 class="cmtt-8">&#x00A0;=</span><span 
5495 class="cmtt-8">&#x00A0;read</span><span 
5496 class="cmtt-8">&#x00A0;an</span><span 
5497 class="cmtt-8">&#x00A0;unsigned</span><span 
5498 class="cmtt-8">&#x00A0;integer</span><span 
5499 class="cmtt-8">&#x00A0;of</span><span 
5500 class="cmtt-8">&#x00A0;</span><a 
5501 href="#x1-1170009.2.1"><span 
5502 class="cmtt-8">ilog</span></a><span 
5503 class="cmtt-8">(</span><span 
5504 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span 
5505 class="cmtt-8">&#x00A0;)</span><span 
5506 class="cmtt-8">&#x00A0;bits</span>
5507 <br class="fancyvrb" /><a 
5508  id="x1-93010r5"></a><span 
5509 class="cmr-6">5</span><span 
5510 class="cmtt-8">&#x00A0;</span><span 
5511 class="cmtt-8">&#x00A0;</span><span 
5512 class="cmtt-8">&#x00A0;</span><span 
5513 class="cmtt-8">&#x00A0;</span><span 
5514 class="cmtt-8">&#x00A0;</span><span 
5515 class="cmtt-8">&#x00A0;</span><span 
5516 class="cmtt-8">&#x00A0;</span><span 
5517 class="cmtt-8">&#x00A0;</span><span 
5518 class="cmtt-8">&#x00A0;5)</span><span 
5519 class="cmtt-8">&#x00A0;if</span><span 
5520 class="cmtt-8">&#x00A0;(</span><span 
5521 class="cmtt-8">&#x00A0;[booknumber]</span><span 
5522 class="cmtt-8">&#x00A0;is</span><span 
5523 class="cmtt-8">&#x00A0;greater</span><span 
5524 class="cmtt-8">&#x00A0;than</span><span 
5525 class="cmtt-8">&#x00A0;the</span><span 
5526 class="cmtt-8">&#x00A0;highest</span><span 
5527 class="cmtt-8">&#x00A0;number</span><span 
5528 class="cmtt-8">&#x00A0;decode</span><span 
5529 class="cmtt-8">&#x00A0;codebook</span><span 
5530 class="cmtt-8">&#x00A0;)</span><span 
5531 class="cmtt-8">&#x00A0;then</span><span 
5532 class="cmtt-8">&#x00A0;packet</span><span 
5533 class="cmtt-8">&#x00A0;is</span><span 
5534 class="cmtt-8">&#x00A0;undecodable</span>
5535 <br class="fancyvrb" /><a 
5536  id="x1-93012r6"></a><span 
5537 class="cmr-6">6</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;</span><span 
5543 class="cmtt-8">&#x00A0;</span><span 
5544 class="cmtt-8">&#x00A0;</span><span 
5545 class="cmtt-8">&#x00A0;</span><span 
5546 class="cmtt-8">&#x00A0;6)</span><span 
5547 class="cmtt-8">&#x00A0;[last]</span><span 
5548 class="cmtt-8">&#x00A0;=</span><span 
5549 class="cmtt-8">&#x00A0;zero;</span>
5550 <br class="fancyvrb" /><a 
5551  id="x1-93014r7"></a><span 
5552 class="cmr-6">7</span><span 
5553 class="cmtt-8">&#x00A0;</span><span 
5554 class="cmtt-8">&#x00A0;</span><span 
5555 class="cmtt-8">&#x00A0;</span><span 
5556 class="cmtt-8">&#x00A0;</span><span 
5557 class="cmtt-8">&#x00A0;</span><span 
5558 class="cmtt-8">&#x00A0;</span><span 
5559 class="cmtt-8">&#x00A0;</span><span 
5560 class="cmtt-8">&#x00A0;</span><span 
5561 class="cmtt-8">&#x00A0;7)</span><span 
5562 class="cmtt-8">&#x00A0;vector</span><span 
5563 class="cmtt-8">&#x00A0;[temp_vector]</span><span 
5564 class="cmtt-8">&#x00A0;=</span><span 
5565 class="cmtt-8">&#x00A0;read</span><span 
5566 class="cmtt-8">&#x00A0;vector</span><span 
5567 class="cmtt-8">&#x00A0;from</span><span 
5568 class="cmtt-8">&#x00A0;bitstream</span><span 
5569 class="cmtt-8">&#x00A0;using</span><span 
5570 class="cmtt-8">&#x00A0;codebook</span><span 
5571 class="cmtt-8">&#x00A0;number</span><span 
5572 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span 
5573 class="cmtt-8">&#x00A0;element</span><span 
5574 class="cmtt-8">&#x00A0;[booknumber]</span><span 
5575 class="cmtt-8">&#x00A0;in</span><span 
5576 class="cmtt-8">&#x00A0;VQ</span><span 
5577 class="cmtt-8">&#x00A0;context.</span>
5578 <br class="fancyvrb" /><a 
5579  id="x1-93016r8"></a><span 
5580 class="cmr-6">8</span><span 
5581 class="cmtt-8">&#x00A0;</span><span 
5582 class="cmtt-8">&#x00A0;</span><span 
5583 class="cmtt-8">&#x00A0;</span><span 
5584 class="cmtt-8">&#x00A0;</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;8)</span><span 
5590 class="cmtt-8">&#x00A0;add</span><span 
5591 class="cmtt-8">&#x00A0;the</span><span 
5592 class="cmtt-8">&#x00A0;scalar</span><span 
5593 class="cmtt-8">&#x00A0;value</span><span 
5594 class="cmtt-8">&#x00A0;[last]</span><span 
5595 class="cmtt-8">&#x00A0;to</span><span 
5596 class="cmtt-8">&#x00A0;each</span><span 
5597 class="cmtt-8">&#x00A0;scalar</span><span 
5598 class="cmtt-8">&#x00A0;in</span><span 
5599 class="cmtt-8">&#x00A0;vector</span><span 
5600 class="cmtt-8">&#x00A0;[temp_vector]</span>
5601 <br class="fancyvrb" /><a 
5602  id="x1-93018r9"></a><span 
5603 class="cmr-6">9</span><span 
5604 class="cmtt-8">&#x00A0;</span><span 
5605 class="cmtt-8">&#x00A0;</span><span 
5606 class="cmtt-8">&#x00A0;</span><span 
5607 class="cmtt-8">&#x00A0;</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;9)</span><span 
5613 class="cmtt-8">&#x00A0;[last]</span><span 
5614 class="cmtt-8">&#x00A0;=</span><span 
5615 class="cmtt-8">&#x00A0;the</span><span 
5616 class="cmtt-8">&#x00A0;value</span><span 
5617 class="cmtt-8">&#x00A0;of</span><span 
5618 class="cmtt-8">&#x00A0;the</span><span 
5619 class="cmtt-8">&#x00A0;last</span><span 
5620 class="cmtt-8">&#x00A0;scalar</span><span 
5621 class="cmtt-8">&#x00A0;in</span><span 
5622 class="cmtt-8">&#x00A0;vector</span><span 
5623 class="cmtt-8">&#x00A0;[temp_vector]</span>
5624 <br class="fancyvrb" /><a 
5625  id="x1-93020r10"></a><span 
5626 class="cmr-6">10</span><span 
5627 class="cmtt-8">&#x00A0;</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;10)</span><span 
5635 class="cmtt-8">&#x00A0;concatenate</span><span 
5636 class="cmtt-8">&#x00A0;[temp_vector]</span><span 
5637 class="cmtt-8">&#x00A0;onto</span><span 
5638 class="cmtt-8">&#x00A0;the</span><span 
5639 class="cmtt-8">&#x00A0;end</span><span 
5640 class="cmtt-8">&#x00A0;of</span><span 
5641 class="cmtt-8">&#x00A0;the</span><span 
5642 class="cmtt-8">&#x00A0;[coefficients]</span><span 
5643 class="cmtt-8">&#x00A0;vector</span>
5644 <br class="fancyvrb" /><a 
5645  id="x1-93022r11"></a><span 
5646 class="cmr-6">11</span><span 
5647 class="cmtt-8">&#x00A0;</span><span 
5648 class="cmtt-8">&#x00A0;</span><span 
5649 class="cmtt-8">&#x00A0;</span><span 
5650 class="cmtt-8">&#x00A0;</span><span 
5651 class="cmtt-8">&#x00A0;</span><span 
5652 class="cmtt-8">&#x00A0;</span><span 
5653 class="cmtt-8">&#x00A0;</span><span 
5654 class="cmtt-8">&#x00A0;11)</span><span 
5655 class="cmtt-8">&#x00A0;if</span><span 
5656 class="cmtt-8">&#x00A0;(length</span><span 
5657 class="cmtt-8">&#x00A0;of</span><span 
5658 class="cmtt-8">&#x00A0;vector</span><span 
5659 class="cmtt-8">&#x00A0;[coefficients]</span><span 
5660 class="cmtt-8">&#x00A0;is</span><span 
5661 class="cmtt-8">&#x00A0;less</span><span 
5662 class="cmtt-8">&#x00A0;than</span><span 
5663 class="cmtt-8">&#x00A0;[floor0_order],</span><span 
5664 class="cmtt-8">&#x00A0;continue</span><span 
5665 class="cmtt-8">&#x00A0;at</span><span 
5666 class="cmtt-8">&#x00A0;step</span><span 
5667 class="cmtt-8">&#x00A0;6</span>
5668 <br class="fancyvrb" /><a 
5669  id="x1-93024r12"></a><span 
5670 class="cmr-6">12</span><span 
5671 class="cmtt-8">&#x00A0;</span><span 
5672 class="cmtt-8">&#x00A0;</span>
5673 <br class="fancyvrb" /><a 
5674  id="x1-93026r13"></a><span 
5675 class="cmr-6">13</span><span 
5676 class="cmtt-8">&#x00A0;</span><span 
5677 class="cmtt-8">&#x00A0;</span><span 
5678 class="cmtt-8">&#x00A0;</span><span 
5679 class="cmtt-8">&#x00A0;</span><span 
5680 class="cmtt-8">&#x00A0;</span><span 
5681 class="cmtt-8">&#x00A0;</span><span 
5682 class="cmtt-8">&#x00A0;</span><span 
5683 class="cmsy-8">}</span>
5684 <br class="fancyvrb" /><a 
5685  id="x1-93028r14"></a><span 
5686 class="cmr-6">14</span><span 
5687 class="cmtt-8">&#x00A0;</span><span 
5688 class="cmtt-8">&#x00A0;</span>
5689 <br class="fancyvrb" /><a 
5690  id="x1-93030r15"></a><span 
5691 class="cmr-6">15</span><span 
5692 class="cmtt-8">&#x00A0;</span><span 
5693 class="cmtt-8">&#x00A0;</span><span 
5694 class="cmtt-8">&#x00A0;12)</span><span 
5695 class="cmtt-8">&#x00A0;done.</span>
5696 <br class="fancyvrb" /><a 
5697  id="x1-93032r16"></a><span 
5698 class="cmr-6">16</span><span 
5699 class="cmtt-8">&#x00A0;</span><span 
5700 class="cmtt-8">&#x00A0;</span>
5701 </div>
5702 <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
5703       <ul class="itemize1">
5704       <li class="itemize">An <span 
5705 class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
5706       is unused in this frame (the output of the channel will be all-zeroes in synthesis).
5707       Several later stages of decode don&#8217;t occur for an unused channel.
5708       </li>
5709       <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
5710       if end-of-packet is reached during any read operation above, floor decode is to return
5711       &#8217;unused&#8217; status as if the <span 
5712 class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
5713       </li>
5714       <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a 
5715 href="#x1-1170009.2.1">ilog</a>(
5716                                                                                         
5717
5718                                                                                         
5719       <span 
5720 class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
5721       and values greater than the maximum possible book value are reserved.
5722       </li>
5723       <li class="itemize">The  number  of  scalars  read  into  the  vector  <span 
5724 class="cmtt-12">[coefficients] </span>may  be  greater
5725       than  <span 
5726 class="cmtt-12">[floor0_order]</span>,  the  number  actually  required  for  curve  computation.  For
5727       example,  if  the  VQ  codebook  used  for  the  floor  currently  being  decoded  has  a
5728       <span 
5729 class="cmtt-12">[codebook_dimensions] </span>value of three and <span 
5730 class="cmtt-12">[floor0_order] </span>is ten, the only way to
5731       fill all the needed scalars in <span 
5732 class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
5733       as four vectors of three scalars each. This is not an error condition, and care must
5734       be taken not to allow a buffer overflow in decode. The extra values are not used and
5735       may be ignored or discarded.</li></ul>
5736 <!--l. 104--><p class="noindent" >
5737 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3.  </span> <a 
5738  id="x1-940006.2.3"></a>curve computation</h5>
5739 <!--l. 106--><p class="noindent" >Given an <span 
5740 class="cmtt-12">[amplitude] </span>integer and <span 
5741 class="cmtt-12">[coefficients] </span>vector from packet decode as well as
5742 the [floor0_order], [floor0_rate], [floor0_bark_map_size], [floor0_amplitude_bits] and
5743 [floor0_amplitude_offset] values from floor setup, and an output vector size <span 
5744 class="cmtt-12">[n] </span>specified by the
5745 decode process, we compute a floor output vector.
5746 <!--l. 113--><p class="noindent" >If the value <span 
5747 class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span 
5748 class="cmtt-12">[n] </span>vector with all-zero
5749 scalars. Otherwise, begin by assuming the following definitions for the given vector to be
5750 synthesized:
5751 <center class="par-math-display" >
5752 <img 
5753 src="Vorbis_I_spec7x.png" alt="        {
5754           min (floor0_bark_map_size    &minus; 1,foobar )  for i &isin; [0,n &minus; 1 ]
5755 mapi =    &minus; 1                                        for i = n
5756 " class="par-math-display" ></center>
5757 <!--l. 128--><p class="nopar" >
5758 <!--l. 130--><p class="noindent" >where
5759 <center class="par-math-display" >
5760 <img 
5761 src="Vorbis_I_spec8x.png" alt="          &lfloor;                                                 &rfloor;
5762                 (floor0_rate   &sdot; i) floor0_bark_map_size
5763 foobar =   bark  -------2n-------  &sdot;-bark(.5 &sdot; floor0_rate-)
5764 " class="par-math-display" ></center>
5765                                                                                         
5766
5767                                                                                         
5768 <!--l. 137--><p class="nopar" >
5769 <!--l. 139--><p class="noindent" >and
5770 <center class="par-math-display" >
5771 <img 
5772 src="Vorbis_I_spec9x.png" alt="                                                         2
5773 bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x  +  .0001x )
5774 " class="par-math-display" ></center>
5775 <!--l. 143--><p class="nopar" >
5776 <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
5777 result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
5778 LSP curve <span 
5779 class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
5780 step:
5781 <!--l. 151--><p class="noindent" >
5782       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
5783    1. </dt><dd 
5784 class="enumerate-enumitem"><span 
5785 class="cmtt-12">[i] </span>= 0
5786       </dd><dt class="enumerate-enumitem">
5787    2. </dt><dd 
5788 class="enumerate-enumitem"><span 
5789 class="cmtt-12">[</span><span 
5790 class="cmmi-12">&omega;</span><span 
5791 class="cmtt-12">] </span>= <span 
5792 class="cmmi-12">&pi; </span>* map element <span 
5793 class="cmtt-12">[i] </span>/ <span 
5794 class="cmtt-12">[floor0_bark_map_size]</span>
5795       </dd><dt class="enumerate-enumitem">
5796    3. </dt><dd 
5797 class="enumerate-enumitem">if ( <span 
5798 class="cmtt-12">[floor0_order] </span>is odd )
5799            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
5800        a) </dt><dd 
5801 class="enumerate-enumitem">calculate <span 
5802 class="cmtt-12">[p] </span>and <span 
5803 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
5804            <center class="math-display" >
5805            <img 
5806 src="Vorbis_I_spec10x.png" alt="                   floor0_order&minus;3
5807                2      &prod;2                                       2
5808 p  =   (1 &minus; cos &omega;)           4(cos([coefficients  ]2j+1) &minus; cos&omega; )
5809          floor0_order&minus;1   j=0
5810        1 ----&prod;2----
5811 q  =   --          4(cos([coefficients  ]2j) &minus; cos&omega; )2
5812        4    j=0
5813                                                                                         
5814
5815                                                                                         
5816            " class="math-display" ></center>
5817            </div>
5818            </dd></dl>
5819       <!--l. 162--><p class="noindent" >else <span 
5820 class="cmtt-12">[floor0_order] </span>is even
5821            <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
5822        b) </dt><dd 
5823 class="enumerate-enumitem">calculate <span 
5824 class="cmtt-12">[p] </span>and <span 
5825 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
5826            <center class="math-display" >
5827            <img 
5828 src="Vorbis_I_spec11x.png" alt="                   floor0_order&minus;2
5829        (1-&minus;-cos&omega;-)    &prod;2                                       2
5830 p  =        2                4(cos([coefficients   ]2j+1) &minus; cos&omega;)
5831                       j=0
5832                    floor0_&prod;o2rder&minus;-2
5833 q  =   (1-+-cos&omega;-)           4(cos([coefficients  ]2j) &minus; cos &omega;)2
5834             2         j=0
5835            " class="math-display" ></center>
5836            </div>
5837            </dd></dl>
5838       </dd><dt class="enumerate-enumitem">
5839    4. </dt><dd 
5840 class="enumerate-enumitem">calculate <span 
5841 class="cmtt-12">[linear_floor_value] </span>according to:
5842       <center class="math-display" >
5843       <img 
5844 src="Vorbis_I_spec12x.png" alt="    (           (                                                                      ))
5845 exp   .11512925   amplitude---&sdot; floor0_amplitute_&radic;offset---&minus;  floor0_amplitude_offset
5846                      (2floor0_amplitude_bits &minus; 1)  p + q
5847       " class="math-display" ></center>
5848       <!--l. 177--><p class="nopar" >
5849       </dd><dt class="enumerate-enumitem">
5850    5. </dt><dd 
5851 class="enumerate-enumitem"><span 
5852 class="cmtt-12">[iteration_condition] </span>= map element <span 
5853 class="cmtt-12">[i]</span>
5854                                                                                         
5855
5856                                                                                         
5857       </dd><dt class="enumerate-enumitem">
5858    6. </dt><dd 
5859 class="enumerate-enumitem"><span 
5860 class="cmtt-12">[output] </span>element <span 
5861 class="cmtt-12">[i] </span>= <span 
5862 class="cmtt-12">[linear_floor_value]</span>
5863       </dd><dt class="enumerate-enumitem">
5864    7. </dt><dd 
5865 class="enumerate-enumitem">increment <span 
5866 class="cmtt-12">[i]</span>
5867       </dd><dt class="enumerate-enumitem">
5868    8. </dt><dd 
5869 class="enumerate-enumitem">if ( map element <span 
5870 class="cmtt-12">[i] </span>is equal to <span 
5871 class="cmtt-12">[iteration_condition] </span>) continue at step
5872       5
5873       </dd><dt class="enumerate-enumitem">
5874    9. </dt><dd 
5875 class="enumerate-enumitem">if ( <span 
5876 class="cmtt-12">[i] </span>is less than <span 
5877 class="cmtt-12">[n] </span>) continue at step 2
5878       </dd><dt class="enumerate-enumitem">
5879   10. </dt><dd 
5880 class="enumerate-enumitem">done</dd></dl>
5881                                                                                         
5882
5883                                                                                         
5884                                                                                         
5885
5886                                                                                         
5887 <h3 class="sectionHead"><span class="titlemark">7.  </span> <a 
5888  id="x1-950007"></a>Floor type 1 setup and decode</h3>
5889 <!--l. 6--><p class="noindent" >
5890 <h4 class="subsectionHead"><span class="titlemark">7.1.  </span> <a 
5891  id="x1-960007.1"></a>Overview</h4>
5892 <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
5893 curve. The representation plots this curve mechanically on a linear frequency axis and a
5894 logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham&#8217;s
5895 algorithm.
5896 <!--l. 16--><p class="noindent" >
5897 <h4 class="subsectionHead"><span class="titlemark">7.2.  </span> <a 
5898  id="x1-970007.2"></a>Floor 1 format</h4>
5899 <!--l. 18--><p class="noindent" >
5900 <h5 class="subsubsectionHead"><span class="titlemark">7.2.1.  </span> <a 
5901  id="x1-980007.2.1"></a>model</h5>
5902 <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
5903 floor curve using iterative prediction in a process roughly equivalent to the following simplified
5904 description:
5905       <ul class="itemize1">
5906       <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
5907       where in the base case x&#x02D9;0=0 and x&#x02D9;1=[n], the full range of the spectral floor to be
5908       computed.
5909       </li>
5910       <li class="itemize">the induction step chooses a point x&#x02D9;new within an existing logical line segment and
5911       produces a y&#x02D9;new value at that point computed from the existing line&#8217;s y value at
5912       x&#x02D9;new (as plotted by the line) and a difference value decoded from the bitstream
5913       packet.
5914                                                                                         
5915
5916                                                                                         
5917       </li>
5918       <li class="itemize">floor  computation  produces  two  new  line  segments,  one  running  from  x&#x02D9;0,y&#x02D9;0  to
5919       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
5920       y&#x02D9;new represents no change to the amplitude value at x&#x02D9;new so that later refinement
5921       is additionally bounded at x&#x02D9;new.
5922       </li>
5923       <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
5924       at floor 1 initialization time. Computation is completed at the end of the x value list.
5925       </li></ul>
5926 <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
5927 representing typical configuration:
5928 <!--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
5929 in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
5930 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
5931 example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
5932 way, beginning with the first line:
5933 <div class="center" 
5934 >
5935 <!--l. 59--><p class="noindent" >
5936
5937 <!--l. 60--><p class="noindent" ><img 
5938 src="floor1-1.png" alt="PIC"  
5939 >
5940 <br /> <div class="caption" 
5941 ><span class="id">Figure&#x00A0;7: </span><span  
5942 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 -->
5943 </div>
5944 <!--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
5945 and 96:
5946 <div class="center" 
5947 >
5948 <!--l. 67--><p class="noindent" >
5949
5950 <!--l. 68--><p class="noindent" ><img 
5951 src="floor1-2.png" alt="PIC"  
5952 >
5953 <br /> <div class="caption" 
5954 ><span class="id">Figure&#x00A0;8: </span><span  
5955 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 -->
5956 </div>
5957 <!--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
5958 further refinement. From here on, the pattern should be clear; we complete the floor computation
5959 as follows:
5960                                                                                         
5961
5962                                                                                         
5963 <div class="center" 
5964 >
5965 <!--l. 76--><p class="noindent" >
5966
5967 <!--l. 77--><p class="noindent" ><img 
5968 src="floor1-3.png" alt="PIC"  
5969 >
5970 <br /> <div class="caption" 
5971 ><span class="id">Figure&#x00A0;9: </span><span  
5972 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 -->
5973 </div>
5974 <div class="center" 
5975 >
5976 <!--l. 81--><p class="noindent" >
5977
5978 <!--l. 82--><p class="noindent" ><img 
5979 src="floor1-4.png" alt="PIC"  
5980 >
5981 <br /> <div class="caption" 
5982 ><span class="id">Figure&#x00A0;10: </span><span  
5983 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 -->
5984 </div>
5985 <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
5986 decode, as described later. The actual algorithm splits Y value computation and line plotting
5987 into two steps with modifications to the above algorithm to eliminate noise accumulation
5988 through integer roundoff/truncation.
5989 <!--l. 94--><p class="noindent" >
5990 <h5 class="subsubsectionHead"><span class="titlemark">7.2.2.  </span> <a 
5991  id="x1-990007.2.2"></a>header decode</h5>
5992 <!--l. 96--><p class="noindent" >A list of floor X values is stored in the packet header in interleaved format (used in list order
5993 during packet decode and synthesis). This list is split into partitions, and each partition is
5994 assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
5995 partition or partition class.
5996 <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
5997 the partition class encodes at once), a &#8217;subclass&#8217; value representing the number of
5998 alternate entropy books the partition class may use in representing Y values, the list of
5999 [subclass] books and a master book used to encode which alternate books were chosen
6000 for representation in a given packet. The master/subclass mechanism is meant to be
6001 used as a flexible representation cascade while still using codebooks only in a scalar
6002 context.
6003                                                                                         
6004
6005                                                                                         
6006 <!--l. 112--><p class="noindent" >
6007 <div class="fancyvrb" id="fancyvrb28">
6008 <a 
6009  id="x1-99002r1"></a><span 
6010 class="cmr-6">1</span><span 
6011 class="cmtt-8">&#x00A0;</span><span 
6012 class="cmtt-8">&#x00A0;</span>
6013 <br class="fancyvrb" /><a 
6014  id="x1-99004r2"></a><span 
6015 class="cmr-6">2</span><span 
6016 class="cmtt-8">&#x00A0;</span><span 
6017 class="cmtt-8">&#x00A0;</span><span 
6018 class="cmtt-8">&#x00A0;</span><span 
6019 class="cmtt-8">&#x00A0;1)</span><span 
6020 class="cmtt-8">&#x00A0;[floor1_partitions]</span><span 
6021 class="cmtt-8">&#x00A0;=</span><span 
6022 class="cmtt-8">&#x00A0;read</span><span 
6023 class="cmtt-8">&#x00A0;5</span><span 
6024 class="cmtt-8">&#x00A0;bits</span><span 
6025 class="cmtt-8">&#x00A0;as</span><span 
6026 class="cmtt-8">&#x00A0;unsigned</span><span 
6027 class="cmtt-8">&#x00A0;integer</span>
6028 <br class="fancyvrb" /><a 
6029  id="x1-99006r3"></a><span 
6030 class="cmr-6">3</span><span 
6031 class="cmtt-8">&#x00A0;</span><span 
6032 class="cmtt-8">&#x00A0;</span><span 
6033 class="cmtt-8">&#x00A0;</span><span 
6034 class="cmtt-8">&#x00A0;2)</span><span 
6035 class="cmtt-8">&#x00A0;[maximum_class]</span><span 
6036 class="cmtt-8">&#x00A0;=</span><span 
6037 class="cmtt-8">&#x00A0;-1</span>
6038 <br class="fancyvrb" /><a 
6039  id="x1-99008r4"></a><span 
6040 class="cmr-6">4</span><span 
6041 class="cmtt-8">&#x00A0;</span><span 
6042 class="cmtt-8">&#x00A0;</span><span 
6043 class="cmtt-8">&#x00A0;</span><span 
6044 class="cmtt-8">&#x00A0;3)</span><span 
6045 class="cmtt-8">&#x00A0;iterate</span><span 
6046 class="cmtt-8">&#x00A0;[i]</span><span 
6047 class="cmtt-8">&#x00A0;over</span><span 
6048 class="cmtt-8">&#x00A0;the</span><span 
6049 class="cmtt-8">&#x00A0;range</span><span 
6050 class="cmtt-8">&#x00A0;0</span><span 
6051 class="cmtt-8">&#x00A0;...</span><span 
6052 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span 
6053 class="cmtt-8">&#x00A0;</span><span 
6054 class="cmsy-8">{</span>
6055 <br class="fancyvrb" /><a 
6056  id="x1-99010r5"></a><span 
6057 class="cmr-6">5</span><span 
6058 class="cmtt-8">&#x00A0;</span><span 
6059 class="cmtt-8">&#x00A0;</span>
6060 <br class="fancyvrb" /><a 
6061  id="x1-99012r6"></a><span 
6062 class="cmr-6">6</span><span 
6063 class="cmtt-8">&#x00A0;</span><span 
6064 class="cmtt-8">&#x00A0;</span><span 
6065 class="cmtt-8">&#x00A0;</span><span 
6066 class="cmtt-8">&#x00A0;</span><span 
6067 class="cmtt-8">&#x00A0;</span><span 
6068 class="cmtt-8">&#x00A0;</span><span 
6069 class="cmtt-8">&#x00A0;</span><span 
6070 class="cmtt-8">&#x00A0;</span><span 
6071 class="cmtt-8">&#x00A0;</span><span 
6072 class="cmtt-8">&#x00A0;4)</span><span 
6073 class="cmtt-8">&#x00A0;vector</span><span 
6074 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span 
6075 class="cmtt-8">&#x00A0;element</span><span 
6076 class="cmtt-8">&#x00A0;[i]</span><span 
6077 class="cmtt-8">&#x00A0;=</span><span 
6078 class="cmtt-8">&#x00A0;read</span><span 
6079 class="cmtt-8">&#x00A0;4</span><span 
6080 class="cmtt-8">&#x00A0;bits</span><span 
6081 class="cmtt-8">&#x00A0;as</span><span 
6082 class="cmtt-8">&#x00A0;unsigned</span><span 
6083 class="cmtt-8">&#x00A0;integer</span>
6084 <br class="fancyvrb" /><a 
6085  id="x1-99014r7"></a><span 
6086 class="cmr-6">7</span><span 
6087 class="cmtt-8">&#x00A0;</span><span 
6088 class="cmtt-8">&#x00A0;</span>
6089 <br class="fancyvrb" /><a 
6090  id="x1-99016r8"></a><span 
6091 class="cmr-6">8</span><span 
6092 class="cmtt-8">&#x00A0;</span><span 
6093 class="cmtt-8">&#x00A0;</span><span 
6094 class="cmtt-8">&#x00A0;</span><span 
6095 class="cmtt-8">&#x00A0;</span><span 
6096 class="cmtt-8">&#x00A0;</span><span 
6097 class="cmtt-8">&#x00A0;</span><span 
6098 class="cmtt-8">&#x00A0;</span><span 
6099 class="cmsy-8">}</span>
6100 <br class="fancyvrb" /><a 
6101  id="x1-99018r9"></a><span 
6102 class="cmr-6">9</span><span 
6103 class="cmtt-8">&#x00A0;</span><span 
6104 class="cmtt-8">&#x00A0;</span>
6105 <br class="fancyvrb" /><a 
6106  id="x1-99020r10"></a><span 
6107 class="cmr-6">10</span><span 
6108 class="cmtt-8">&#x00A0;</span><span 
6109 class="cmtt-8">&#x00A0;</span><span 
6110 class="cmtt-8">&#x00A0;</span><span 
6111 class="cmtt-8">&#x00A0;5)</span><span 
6112 class="cmtt-8">&#x00A0;[maximum_class]</span><span 
6113 class="cmtt-8">&#x00A0;=</span><span 
6114 class="cmtt-8">&#x00A0;largest</span><span 
6115 class="cmtt-8">&#x00A0;integer</span><span 
6116 class="cmtt-8">&#x00A0;scalar</span><span 
6117 class="cmtt-8">&#x00A0;value</span><span 
6118 class="cmtt-8">&#x00A0;in</span><span 
6119 class="cmtt-8">&#x00A0;vector</span><span 
6120 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span>
6121 <br class="fancyvrb" /><a 
6122  id="x1-99022r11"></a><span 
6123 class="cmr-6">11</span><span 
6124 class="cmtt-8">&#x00A0;</span><span 
6125 class="cmtt-8">&#x00A0;</span><span 
6126 class="cmtt-8">&#x00A0;</span><span 
6127 class="cmtt-8">&#x00A0;6)</span><span 
6128 class="cmtt-8">&#x00A0;iterate</span><span 
6129 class="cmtt-8">&#x00A0;[i]</span><span 
6130 class="cmtt-8">&#x00A0;over</span><span 
6131 class="cmtt-8">&#x00A0;the</span><span 
6132 class="cmtt-8">&#x00A0;range</span><span 
6133 class="cmtt-8">&#x00A0;0</span><span 
6134 class="cmtt-8">&#x00A0;...</span><span 
6135 class="cmtt-8">&#x00A0;[maximum_class]</span><span 
6136 class="cmtt-8">&#x00A0;</span><span 
6137 class="cmsy-8">{</span>
6138 <br class="fancyvrb" /><a 
6139  id="x1-99024r12"></a><span 
6140 class="cmr-6">12</span><span 
6141 class="cmtt-8">&#x00A0;</span><span 
6142 class="cmtt-8">&#x00A0;</span>
6143 <br class="fancyvrb" /><a 
6144  id="x1-99026r13"></a><span 
6145 class="cmr-6">13</span><span 
6146 class="cmtt-8">&#x00A0;</span><span 
6147 class="cmtt-8">&#x00A0;</span><span 
6148 class="cmtt-8">&#x00A0;</span><span 
6149 class="cmtt-8">&#x00A0;</span><span 
6150 class="cmtt-8">&#x00A0;</span><span 
6151 class="cmtt-8">&#x00A0;</span><span 
6152 class="cmtt-8">&#x00A0;</span><span 
6153 class="cmtt-8">&#x00A0;</span><span 
6154 class="cmtt-8">&#x00A0;</span><span 
6155 class="cmtt-8">&#x00A0;7)</span><span 
6156 class="cmtt-8">&#x00A0;vector</span><span 
6157 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</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;3</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><span 
6167 class="cmtt-8">&#x00A0;and</span><span 
6168 class="cmtt-8">&#x00A0;add</span><span 
6169 class="cmtt-8">&#x00A0;1</span>
6170 <br class="fancyvrb" /><a 
6171  id="x1-99028r14"></a><span 
6172 class="cmr-6">14</span><span 
6173 class="cmtt-8">&#x00A0;</span><span 
6174 class="cmtt-8">&#x00A0;    8)</span><span 
6175 class="cmtt-8">&#x00A0;vector</span><span 
6176 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
6177 class="cmtt-8">&#x00A0;element</span><span 
6178 class="cmtt-8">&#x00A0;[i]</span><span 
6179 class="cmtt-8">&#x00A0;=</span><span 
6180 class="cmtt-8">&#x00A0;read</span><span 
6181 class="cmtt-8">&#x00A0;2</span><span 
6182 class="cmtt-8">&#x00A0;bits</span><span 
6183 class="cmtt-8">&#x00A0;as</span><span 
6184 class="cmtt-8">&#x00A0;unsigned</span><span 
6185 class="cmtt-8">&#x00A0;integer</span>
6186 <br class="fancyvrb" /><a 
6187  id="x1-99030r15"></a><span 
6188 class="cmr-6">15</span><span 
6189 class="cmtt-8">&#x00A0;</span><span 
6190 class="cmtt-8">&#x00A0;</span><span 
6191 class="cmtt-8">&#x00A0;</span><span 
6192 class="cmtt-8">&#x00A0;</span><span 
6193 class="cmtt-8">&#x00A0;</span><span 
6194 class="cmtt-8">&#x00A0;</span><span 
6195 class="cmtt-8">&#x00A0;</span><span 
6196 class="cmtt-8">&#x00A0;</span><span 
6197 class="cmtt-8">&#x00A0;</span><span 
6198 class="cmtt-8">&#x00A0;9)</span><span 
6199 class="cmtt-8">&#x00A0;if</span><span 
6200 class="cmtt-8">&#x00A0;(</span><span 
6201 class="cmtt-8">&#x00A0;vector</span><span 
6202 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
6203 class="cmtt-8">&#x00A0;element</span><span 
6204 class="cmtt-8">&#x00A0;[i]</span><span 
6205 class="cmtt-8">&#x00A0;is</span><span 
6206 class="cmtt-8">&#x00A0;nonzero</span><span 
6207 class="cmtt-8">&#x00A0;)</span><span 
6208 class="cmtt-8">&#x00A0;</span><span 
6209 class="cmsy-8">{</span>
6210 <br class="fancyvrb" /><a 
6211  id="x1-99032r16"></a><span 
6212 class="cmr-6">16</span><span 
6213 class="cmtt-8">&#x00A0;</span><span 
6214 class="cmtt-8">&#x00A0;</span>
6215 <br class="fancyvrb" /><a 
6216  id="x1-99034r17"></a><span 
6217 class="cmr-6">17</span><span 
6218 class="cmtt-8">&#x00A0;</span><span 
6219 class="cmtt-8">&#x00A0;</span><span 
6220 class="cmtt-8">&#x00A0;</span><span 
6221 class="cmtt-8">&#x00A0;</span><span 
6222 class="cmtt-8">&#x00A0;</span><span 
6223 class="cmtt-8">&#x00A0;</span><span 
6224 class="cmtt-8">&#x00A0;</span><span 
6225 class="cmtt-8">&#x00A0;</span><span 
6226 class="cmtt-8">&#x00A0;</span><span 
6227 class="cmtt-8">&#x00A0;</span><span 
6228 class="cmtt-8">&#x00A0;</span><span 
6229 class="cmtt-8">&#x00A0;</span><span 
6230 class="cmtt-8">&#x00A0;</span><span 
6231 class="cmtt-8">&#x00A0;</span><span 
6232 class="cmtt-8">&#x00A0;10)</span><span 
6233 class="cmtt-8">&#x00A0;vector</span><span 
6234 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span 
6235 class="cmtt-8">&#x00A0;element</span><span 
6236 class="cmtt-8">&#x00A0;[i]</span><span 
6237 class="cmtt-8">&#x00A0;=</span><span 
6238 class="cmtt-8">&#x00A0;read</span><span 
6239 class="cmtt-8">&#x00A0;8</span><span 
6240 class="cmtt-8">&#x00A0;bits</span><span 
6241 class="cmtt-8">&#x00A0;as</span><span 
6242 class="cmtt-8">&#x00A0;unsigned</span><span 
6243 class="cmtt-8">&#x00A0;integer</span>
6244 <br class="fancyvrb" /><a 
6245  id="x1-99036r18"></a><span 
6246 class="cmr-6">18</span><span 
6247 class="cmtt-8">&#x00A0;</span><span 
6248 class="cmtt-8">&#x00A0;</span>
6249 <br class="fancyvrb" /><a 
6250  id="x1-99038r19"></a><span 
6251 class="cmr-6">19</span><span 
6252 class="cmtt-8">&#x00A0;</span><span 
6253 class="cmtt-8">&#x00A0;</span><span 
6254 class="cmtt-8">&#x00A0;</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;</span><span 
6264 class="cmtt-8">&#x00A0;</span><span 
6265 class="cmsy-8">}</span>
6266 <br class="fancyvrb" /><a 
6267  id="x1-99040r20"></a><span 
6268 class="cmr-6">20</span><span 
6269 class="cmtt-8">&#x00A0;</span><span 
6270 class="cmtt-8">&#x00A0;</span>
6271 <br class="fancyvrb" /><a 
6272  id="x1-99042r21"></a><span 
6273 class="cmr-6">21</span><span 
6274 class="cmtt-8">&#x00A0;</span><span 
6275 class="cmtt-8">&#x00A0;</span><span 
6276 class="cmtt-8">&#x00A0;</span><span 
6277 class="cmtt-8">&#x00A0;</span><span 
6278 class="cmtt-8">&#x00A0;</span><span 
6279 class="cmtt-8">&#x00A0;</span><span 
6280 class="cmtt-8">&#x00A0;</span><span 
6281 class="cmtt-8">&#x00A0;</span><span 
6282 class="cmtt-8">&#x00A0;11)</span><span 
6283 class="cmtt-8">&#x00A0;iterate</span><span 
6284 class="cmtt-8">&#x00A0;[j]</span><span 
6285 class="cmtt-8">&#x00A0;over</span><span 
6286 class="cmtt-8">&#x00A0;the</span><span 
6287 class="cmtt-8">&#x00A0;range</span><span 
6288 class="cmtt-8">&#x00A0;0</span><span 
6289 class="cmtt-8">&#x00A0;...</span><span 
6290 class="cmtt-8">&#x00A0;(2</span><span 
6291 class="cmtt-8">&#x00A0;exponent</span><span 
6292 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
6293 class="cmtt-8">&#x00A0;element</span><span 
6294 class="cmtt-8">&#x00A0;[i])</span><span 
6295 class="cmtt-8">&#x00A0;-</span><span 
6296 class="cmtt-8">&#x00A0;1</span><span 
6297 class="cmtt-8">&#x00A0;</span><span 
6298 class="cmsy-8">{</span>
6299 <br class="fancyvrb" /><a 
6300  id="x1-99044r22"></a><span 
6301 class="cmr-6">22</span><span 
6302 class="cmtt-8">&#x00A0;</span><span 
6303 class="cmtt-8">&#x00A0;</span>
6304 <br class="fancyvrb" /><a 
6305  id="x1-99046r23"></a><span 
6306 class="cmr-6">23</span><span 
6307 class="cmtt-8">&#x00A0;</span><span 
6308 class="cmtt-8">&#x00A0;</span><span 
6309 class="cmtt-8">&#x00A0;</span><span 
6310 class="cmtt-8">&#x00A0;</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;12)</span><span 
6322 class="cmtt-8">&#x00A0;array</span><span 
6323 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span 
6324 class="cmtt-8">&#x00A0;element</span><span 
6325 class="cmtt-8">&#x00A0;[i],[j]</span><span 
6326 class="cmtt-8">&#x00A0;=</span>
6327 <br class="fancyvrb" /><a 
6328  id="x1-99048r24"></a><span 
6329 class="cmr-6">24</span><span 
6330 class="cmtt-8">&#x00A0;</span><span 
6331 class="cmtt-8">&#x00A0;</span><span 
6332 class="cmtt-8">&#x00A0;</span><span 
6333 class="cmtt-8">&#x00A0;</span><span 
6334 class="cmtt-8">&#x00A0;</span><span 
6335 class="cmtt-8">&#x00A0;</span><span 
6336 class="cmtt-8">&#x00A0;</span><span 
6337 class="cmtt-8">&#x00A0;</span><span 
6338 class="cmtt-8">&#x00A0;</span><span 
6339 class="cmtt-8">&#x00A0;</span><span 
6340 class="cmtt-8">&#x00A0;</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;read</span><span 
6349 class="cmtt-8">&#x00A0;8</span><span 
6350 class="cmtt-8">&#x00A0;bits</span><span 
6351 class="cmtt-8">&#x00A0;as</span><span 
6352 class="cmtt-8">&#x00A0;unsigned</span><span 
6353 class="cmtt-8">&#x00A0;integer</span><span 
6354 class="cmtt-8">&#x00A0;and</span><span 
6355 class="cmtt-8">&#x00A0;subtract</span><span 
6356 class="cmtt-8">&#x00A0;one</span>
6357 <br class="fancyvrb" /><a 
6358  id="x1-99050r25"></a><span 
6359 class="cmr-6">25</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="cmtt-8">&#x00A0;</span><span 
6367 class="cmtt-8">&#x00A0;</span><span 
6368 class="cmtt-8">&#x00A0;</span><span 
6369 class="cmtt-8">&#x00A0;</span><span 
6370 class="cmtt-8">&#x00A0;</span><span 
6371 class="cmtt-8">&#x00A0;</span><span 
6372 class="cmtt-8">&#x00A0;</span><span 
6373 class="cmsy-8">}</span>
6374 <br class="fancyvrb" /><a 
6375  id="x1-99052r26"></a><span 
6376 class="cmr-6">26</span><span 
6377 class="cmtt-8">&#x00A0;</span><span 
6378 class="cmtt-8">&#x00A0;</span><span 
6379 class="cmtt-8">&#x00A0;</span><span 
6380 class="cmtt-8">&#x00A0;</span><span 
6381 class="cmtt-8">&#x00A0;</span><span 
6382 class="cmtt-8">&#x00A0;</span><span 
6383 class="cmtt-8">&#x00A0;</span><span 
6384 class="cmtt-8">&#x00A0;</span><span 
6385 class="cmsy-8">}</span>
6386 <br class="fancyvrb" /><a 
6387  id="x1-99054r27"></a><span 
6388 class="cmr-6">27</span><span 
6389 class="cmtt-8">&#x00A0;</span><span 
6390 class="cmtt-8">&#x00A0;</span>
6391 <br class="fancyvrb" /><a 
6392  id="x1-99056r28"></a><span 
6393 class="cmr-6">28</span><span 
6394 class="cmtt-8">&#x00A0;</span><span 
6395 class="cmtt-8">&#x00A0;</span><span 
6396 class="cmtt-8">&#x00A0;13)</span><span 
6397 class="cmtt-8">&#x00A0;[floor1_multiplier]</span><span 
6398 class="cmtt-8">&#x00A0;=</span><span 
6399 class="cmtt-8">&#x00A0;read</span><span 
6400 class="cmtt-8">&#x00A0;2</span><span 
6401 class="cmtt-8">&#x00A0;bits</span><span 
6402 class="cmtt-8">&#x00A0;as</span><span 
6403 class="cmtt-8">&#x00A0;unsigned</span><span 
6404 class="cmtt-8">&#x00A0;integer</span><span 
6405 class="cmtt-8">&#x00A0;and</span><span 
6406 class="cmtt-8">&#x00A0;add</span><span 
6407 class="cmtt-8">&#x00A0;one</span>
6408 <br class="fancyvrb" /><a 
6409  id="x1-99058r29"></a><span 
6410 class="cmr-6">29</span><span 
6411 class="cmtt-8">&#x00A0;</span><span 
6412 class="cmtt-8">&#x00A0;</span><span 
6413 class="cmtt-8">&#x00A0;14)</span><span 
6414 class="cmtt-8">&#x00A0;[rangebits]</span><span 
6415 class="cmtt-8">&#x00A0;=</span><span 
6416 class="cmtt-8">&#x00A0;read</span><span 
6417 class="cmtt-8">&#x00A0;4</span><span 
6418 class="cmtt-8">&#x00A0;bits</span><span 
6419 class="cmtt-8">&#x00A0;as</span><span 
6420 class="cmtt-8">&#x00A0;unsigned</span><span 
6421 class="cmtt-8">&#x00A0;integer</span>
6422 <br class="fancyvrb" /><a 
6423  id="x1-99060r30"></a><span 
6424 class="cmr-6">30</span><span 
6425 class="cmtt-8">&#x00A0;</span><span 
6426 class="cmtt-8">&#x00A0;</span><span 
6427 class="cmtt-8">&#x00A0;15)</span><span 
6428 class="cmtt-8">&#x00A0;vector</span><span 
6429 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
6430 class="cmtt-8">&#x00A0;element</span><span 
6431 class="cmtt-8">&#x00A0;[0]</span><span 
6432 class="cmtt-8">&#x00A0;=</span><span 
6433 class="cmtt-8">&#x00A0;0</span>
6434 <br class="fancyvrb" /><a 
6435  id="x1-99062r31"></a><span 
6436 class="cmr-6">31</span><span 
6437 class="cmtt-8">&#x00A0;</span><span 
6438 class="cmtt-8">&#x00A0;</span><span 
6439 class="cmtt-8">&#x00A0;16)</span><span 
6440 class="cmtt-8">&#x00A0;vector</span><span 
6441 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
6442 class="cmtt-8">&#x00A0;element</span><span 
6443 class="cmtt-8">&#x00A0;[1]</span><span 
6444 class="cmtt-8">&#x00A0;=</span><span 
6445 class="cmtt-8">&#x00A0;2</span><span 
6446 class="cmtt-8">&#x00A0;exponent</span><span 
6447 class="cmtt-8">&#x00A0;[rangebits];</span>
6448 <br class="fancyvrb" /><a 
6449  id="x1-99064r32"></a><span 
6450 class="cmr-6">32</span><span 
6451 class="cmtt-8">&#x00A0;</span><span 
6452 class="cmtt-8">&#x00A0;</span><span 
6453 class="cmtt-8">&#x00A0;17)</span><span 
6454 class="cmtt-8">&#x00A0;[floor1_values]</span><span 
6455 class="cmtt-8">&#x00A0;=</span><span 
6456 class="cmtt-8">&#x00A0;2</span>
6457 <br class="fancyvrb" /><a 
6458  id="x1-99066r33"></a><span 
6459 class="cmr-6">33</span><span 
6460 class="cmtt-8">&#x00A0;</span><span 
6461 class="cmtt-8">&#x00A0;</span><span 
6462 class="cmtt-8">&#x00A0;18)</span><span 
6463 class="cmtt-8">&#x00A0;iterate</span><span 
6464 class="cmtt-8">&#x00A0;[i]</span><span 
6465 class="cmtt-8">&#x00A0;over</span><span 
6466 class="cmtt-8">&#x00A0;the</span><span 
6467 class="cmtt-8">&#x00A0;range</span><span 
6468 class="cmtt-8">&#x00A0;0</span><span 
6469 class="cmtt-8">&#x00A0;...</span><span 
6470 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span 
6471 class="cmtt-8">&#x00A0;</span><span 
6472 class="cmsy-8">{</span>
6473 <br class="fancyvrb" /><a 
6474  id="x1-99068r34"></a><span 
6475 class="cmr-6">34</span><span 
6476 class="cmtt-8">&#x00A0;</span><span 
6477 class="cmtt-8">&#x00A0;</span>
6478 <br class="fancyvrb" /><a 
6479  id="x1-99070r35"></a><span 
6480 class="cmr-6">35</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;</span><span 
6489 class="cmtt-8">&#x00A0;19)</span><span 
6490 class="cmtt-8">&#x00A0;[current_class_number]</span><span 
6491 class="cmtt-8">&#x00A0;=</span><span 
6492 class="cmtt-8">&#x00A0;vector</span><span 
6493 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span 
6494 class="cmtt-8">&#x00A0;element</span><span 
6495 class="cmtt-8">&#x00A0;[i]</span>
6496 <br class="fancyvrb" /><a 
6497  id="x1-99072r36"></a><span 
6498 class="cmr-6">36</span><span 
6499 class="cmtt-8">&#x00A0;</span><span 
6500 class="cmtt-8">&#x00A0;</span><span 
6501 class="cmtt-8">&#x00A0;</span><span 
6502 class="cmtt-8">&#x00A0;</span><span 
6503 class="cmtt-8">&#x00A0;</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;20)</span><span 
6508 class="cmtt-8">&#x00A0;iterate</span><span 
6509 class="cmtt-8">&#x00A0;[j]</span><span 
6510 class="cmtt-8">&#x00A0;over</span><span 
6511 class="cmtt-8">&#x00A0;the</span><span 
6512 class="cmtt-8">&#x00A0;range</span><span 
6513 class="cmtt-8">&#x00A0;0</span><span 
6514 class="cmtt-8">&#x00A0;...</span><span 
6515 class="cmtt-8">&#x00A0;([floor1_class_dimensions]</span><span 
6516 class="cmtt-8">&#x00A0;element</span><span 
6517 class="cmtt-8">&#x00A0;[current_class_number])-1</span><span 
6518 class="cmtt-8">&#x00A0;</span><span 
6519 class="cmsy-8">{</span>
6520 <br class="fancyvrb" /><a 
6521  id="x1-99074r37"></a><span 
6522 class="cmr-6">37</span><span 
6523 class="cmtt-8">&#x00A0;</span><span 
6524 class="cmtt-8">&#x00A0;</span><span 
6525 class="cmtt-8">&#x00A0;</span><span 
6526 class="cmtt-8">&#x00A0;</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;21)</span><span 
6538 class="cmtt-8">&#x00A0;vector</span><span 
6539 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
6540 class="cmtt-8">&#x00A0;element</span><span 
6541 class="cmtt-8">&#x00A0;([floor1_values])</span><span 
6542 class="cmtt-8">&#x00A0;=</span>
6543 <br class="fancyvrb" /><a 
6544  id="x1-99076r38"></a><span 
6545 class="cmr-6">38</span><span 
6546 class="cmtt-8">&#x00A0;</span><span 
6547 class="cmtt-8">&#x00A0;</span><span 
6548 class="cmtt-8">&#x00A0;</span><span 
6549 class="cmtt-8">&#x00A0;</span><span 
6550 class="cmtt-8">&#x00A0;</span><span 
6551 class="cmtt-8">&#x00A0;</span><span 
6552 class="cmtt-8">&#x00A0;</span><span 
6553 class="cmtt-8">&#x00A0;</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;read</span><span 
6565 class="cmtt-8">&#x00A0;[rangebits]</span><span 
6566 class="cmtt-8">&#x00A0;bits</span><span 
6567 class="cmtt-8">&#x00A0;as</span><span 
6568 class="cmtt-8">&#x00A0;unsigned</span><span 
6569 class="cmtt-8">&#x00A0;integer</span>
6570 <br class="fancyvrb" /><a 
6571  id="x1-99078r39"></a><span 
6572 class="cmr-6">39</span><span 
6573 class="cmtt-8">&#x00A0;</span><span 
6574 class="cmtt-8">&#x00A0;</span><span 
6575 class="cmtt-8">&#x00A0;</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;22)</span><span 
6588 class="cmtt-8">&#x00A0;increment</span><span 
6589 class="cmtt-8">&#x00A0;[floor1_values]</span><span 
6590 class="cmtt-8">&#x00A0;by</span><span 
6591 class="cmtt-8">&#x00A0;one</span>
6592 <br class="fancyvrb" /><a 
6593  id="x1-99080r40"></a><span 
6594 class="cmr-6">40</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="cmtt-8">&#x00A0;</span><span 
6601 class="cmtt-8">&#x00A0;</span><span 
6602 class="cmtt-8">&#x00A0;</span><span 
6603 class="cmtt-8">&#x00A0;</span><span 
6604 class="cmtt-8">&#x00A0;</span><span 
6605 class="cmtt-8">&#x00A0;</span><span 
6606 class="cmtt-8">&#x00A0;</span><span 
6607 class="cmtt-8">&#x00A0;</span><span 
6608 class="cmsy-8">}</span>
6609 <br class="fancyvrb" /><a 
6610  id="x1-99082r41"></a><span 
6611 class="cmr-6">41</span><span 
6612 class="cmtt-8">&#x00A0;</span><span 
6613 class="cmtt-8">&#x00A0;</span><span 
6614 class="cmtt-8">&#x00A0;</span><span 
6615 class="cmtt-8">&#x00A0;</span><span 
6616 class="cmtt-8">&#x00A0;</span><span 
6617 class="cmtt-8">&#x00A0;</span><span 
6618 class="cmtt-8">&#x00A0;</span><span 
6619 class="cmsy-8">}</span>
6620 <br class="fancyvrb" /><a 
6621  id="x1-99084r42"></a><span 
6622 class="cmr-6">42</span><span 
6623 class="cmtt-8">&#x00A0;</span><span 
6624 class="cmtt-8">&#x00A0;</span>
6625 <br class="fancyvrb" /><a 
6626  id="x1-99086r43"></a><span 
6627 class="cmr-6">43</span><span 
6628 class="cmtt-8">&#x00A0;</span><span 
6629 class="cmtt-8">&#x00A0;</span><span 
6630 class="cmtt-8">&#x00A0;23)</span><span 
6631 class="cmtt-8">&#x00A0;done</span>
6632 </div>
6633 <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
6634 setup renders a stream undecodable. In addition, a <span 
6635 class="cmtt-12">[floor1_class_masterbooks] </span>or
6636 <span 
6637 class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
6638 configured in this stream is an error condition that renders the stream undecodable. Vector
6639 [floor1_x_list] is limited to a maximum length of 65 elements; a setup indicating more than 65
6640 total elements (including elements 0 and 1 set prior to the read loop) renders the stream
6641 undecodable. All vector [floor1_x_list] element values must be unique within the vector; a
6642 non-unique value renders the stream undecodable.
6643                                                                                         
6644
6645                                                                                         
6646 <!--l. 170--><p class="noindent" >
6647 <h5 class="subsubsectionHead"><span class="titlemark">7.2.3.  </span> <a 
6648  id="x1-1000007.2.3"></a>packet decode</h5>
6649 <!--l. 172--><p class="noindent" >Packet decode begins by checking the <span 
6650 class="cmtt-12">[nonzero] </span>flag:
6651 <!--l. 174--><p class="noindent" >
6652 <div class="fancyvrb" id="fancyvrb29">
6653 <a 
6654  id="x1-100002r1"></a><span 
6655 class="cmr-6">1</span><span 
6656 class="cmtt-8">&#x00A0;</span><span 
6657 class="cmtt-8">&#x00A0;</span><span 
6658 class="cmtt-8">&#x00A0;</span><span 
6659 class="cmtt-8">&#x00A0;1)</span><span 
6660 class="cmtt-8">&#x00A0;[nonzero]</span><span 
6661 class="cmtt-8">&#x00A0;=</span><span 
6662 class="cmtt-8">&#x00A0;read</span><span 
6663 class="cmtt-8">&#x00A0;1</span><span 
6664 class="cmtt-8">&#x00A0;bit</span><span 
6665 class="cmtt-8">&#x00A0;as</span><span 
6666 class="cmtt-8">&#x00A0;boolean</span>
6667 </div>
6668 <!--l. 178--><p class="noindent" >If <span 
6669 class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
6670 Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
6671 this frame. (A return status of &#8217;unused&#8217; is different from decoding a floor that has all
6672 points set to minimum representation amplitude, which happens to be approximately
6673 -140dB).
6674 <!--l. 186--><p class="noindent" >Assuming <span 
6675 class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
6676 <!--l. 188--><p class="noindent" >
6677 <div class="fancyvrb" id="fancyvrb30">
6678 <a 
6679  id="x1-100004r1"></a><span 
6680 class="cmr-6">1</span><span 
6681 class="cmtt-8">&#x00A0;</span><span 
6682 class="cmtt-8">&#x00A0;</span><span 
6683 class="cmtt-8">&#x00A0;</span><span 
6684 class="cmtt-8">&#x00A0;1)</span><span 
6685 class="cmtt-8">&#x00A0;[range]</span><span 
6686 class="cmtt-8">&#x00A0;=</span><span 
6687 class="cmtt-8">&#x00A0;vector</span><span 
6688 class="cmtt-8">&#x00A0;</span><span 
6689 class="cmsy-8">{</span><span 
6690 class="cmtt-8">&#x00A0;256,</span><span 
6691 class="cmtt-8">&#x00A0;128,</span><span 
6692 class="cmtt-8">&#x00A0;86,</span><span 
6693 class="cmtt-8">&#x00A0;64</span><span 
6694 class="cmtt-8">&#x00A0;</span><span 
6695 class="cmsy-8">}</span><span 
6696 class="cmtt-8">&#x00A0;element</span><span 
6697 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
6698 <br class="fancyvrb" /><a 
6699  id="x1-100006r2"></a><span 
6700 class="cmr-6">2</span><span 
6701 class="cmtt-8">&#x00A0;</span><span 
6702 class="cmtt-8">&#x00A0;</span><span 
6703 class="cmtt-8">&#x00A0;</span><span 
6704 class="cmtt-8">&#x00A0;2)</span><span 
6705 class="cmtt-8">&#x00A0;vector</span><span 
6706 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
6707 class="cmtt-8">&#x00A0;element</span><span 
6708 class="cmtt-8">&#x00A0;[0]</span><span 
6709 class="cmtt-8">&#x00A0;=</span><span 
6710 class="cmtt-8">&#x00A0;read</span><span 
6711 class="cmtt-8">&#x00A0;</span><a 
6712 href="#x1-1170009.2.1"><span 
6713 class="cmtt-8">ilog</span></a><span 
6714 class="cmtt-8">([range]-1)</span><span 
6715 class="cmtt-8">&#x00A0;bits</span><span 
6716 class="cmtt-8">&#x00A0;as</span><span 
6717 class="cmtt-8">&#x00A0;unsigned</span><span 
6718 class="cmtt-8">&#x00A0;integer</span>
6719 <br class="fancyvrb" /><a 
6720  id="x1-100008r3"></a><span 
6721 class="cmr-6">3</span><span 
6722 class="cmtt-8">&#x00A0;</span><span 
6723 class="cmtt-8">&#x00A0;</span><span 
6724 class="cmtt-8">&#x00A0;</span><span 
6725 class="cmtt-8">&#x00A0;3)</span><span 
6726 class="cmtt-8">&#x00A0;vector</span><span 
6727 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
6728 class="cmtt-8">&#x00A0;element</span><span 
6729 class="cmtt-8">&#x00A0;[1]</span><span 
6730 class="cmtt-8">&#x00A0;=</span><span 
6731 class="cmtt-8">&#x00A0;read</span><span 
6732 class="cmtt-8">&#x00A0;</span><a 
6733 href="#x1-1170009.2.1"><span 
6734 class="cmtt-8">ilog</span></a><span 
6735 class="cmtt-8">([range]-1)</span><span 
6736 class="cmtt-8">&#x00A0;bits</span><span 
6737 class="cmtt-8">&#x00A0;as</span><span 
6738 class="cmtt-8">&#x00A0;unsigned</span><span 
6739 class="cmtt-8">&#x00A0;integer</span>
6740 <br class="fancyvrb" /><a 
6741  id="x1-100010r4"></a><span 
6742 class="cmr-6">4</span><span 
6743 class="cmtt-8">&#x00A0;</span><span 
6744 class="cmtt-8">&#x00A0;</span><span 
6745 class="cmtt-8">&#x00A0;</span><span 
6746 class="cmtt-8">&#x00A0;4)</span><span 
6747 class="cmtt-8">&#x00A0;[offset]</span><span 
6748 class="cmtt-8">&#x00A0;=</span><span 
6749 class="cmtt-8">&#x00A0;2;</span>
6750 <br class="fancyvrb" /><a 
6751  id="x1-100012r5"></a><span 
6752 class="cmr-6">5</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;5)</span><span 
6757 class="cmtt-8">&#x00A0;iterate</span><span 
6758 class="cmtt-8">&#x00A0;[i]</span><span 
6759 class="cmtt-8">&#x00A0;over</span><span 
6760 class="cmtt-8">&#x00A0;the</span><span 
6761 class="cmtt-8">&#x00A0;range</span><span 
6762 class="cmtt-8">&#x00A0;0</span><span 
6763 class="cmtt-8">&#x00A0;...</span><span 
6764 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span 
6765 class="cmtt-8">&#x00A0;</span><span 
6766 class="cmsy-8">{</span>
6767 <br class="fancyvrb" /><a 
6768  id="x1-100014r6"></a><span 
6769 class="cmr-6">6</span><span 
6770 class="cmtt-8">&#x00A0;</span><span 
6771 class="cmtt-8">&#x00A0;</span>
6772 <br class="fancyvrb" /><a 
6773  id="x1-100016r7"></a><span 
6774 class="cmr-6">7</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;</span><span 
6780 class="cmtt-8">&#x00A0;</span><span 
6781 class="cmtt-8">&#x00A0;</span><span 
6782 class="cmtt-8">&#x00A0;</span><span 
6783 class="cmtt-8">&#x00A0;6)</span><span 
6784 class="cmtt-8">&#x00A0;[class]</span><span 
6785 class="cmtt-8">&#x00A0;=</span><span 
6786 class="cmtt-8">&#x00A0;vector</span><span 
6787 class="cmtt-8">&#x00A0;[floor1_partition_class]</span><span 
6788 class="cmtt-8">&#x00A0;</span><span 
6789 class="cmtt-8">&#x00A0;element</span><span 
6790 class="cmtt-8">&#x00A0;[i]</span>
6791 <br class="fancyvrb" /><a 
6792  id="x1-100018r8"></a><span 
6793 class="cmr-6">8</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;</span><span 
6799 class="cmtt-8">&#x00A0;</span><span 
6800 class="cmtt-8">&#x00A0;</span><span 
6801 class="cmtt-8">&#x00A0;</span><span 
6802 class="cmtt-8">&#x00A0;7)</span><span 
6803 class="cmtt-8">&#x00A0;[cdim]</span><span 
6804 class="cmtt-8">&#x00A0;</span><span 
6805 class="cmtt-8">&#x00A0;=</span><span 
6806 class="cmtt-8">&#x00A0;vector</span><span 
6807 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span 
6808 class="cmtt-8">&#x00A0;element</span><span 
6809 class="cmtt-8">&#x00A0;[class]</span>
6810 <br class="fancyvrb" /><a 
6811  id="x1-100020r9"></a><span 
6812 class="cmr-6">9</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;</span><span 
6817 class="cmtt-8">&#x00A0;</span><span 
6818 class="cmtt-8">&#x00A0;</span><span 
6819 class="cmtt-8">&#x00A0;</span><span 
6820 class="cmtt-8">&#x00A0;</span><span 
6821 class="cmtt-8">&#x00A0;8)</span><span 
6822 class="cmtt-8">&#x00A0;[cbits]</span><span 
6823 class="cmtt-8">&#x00A0;=</span><span 
6824 class="cmtt-8">&#x00A0;vector</span><span 
6825 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span 
6826 class="cmtt-8">&#x00A0;element</span><span 
6827 class="cmtt-8">&#x00A0;[class]</span>
6828 <br class="fancyvrb" /><a 
6829  id="x1-100022r10"></a><span 
6830 class="cmr-6">10</span><span 
6831 class="cmtt-8">&#x00A0;</span><span 
6832 class="cmtt-8">&#x00A0;</span><span 
6833 class="cmtt-8">&#x00A0;</span><span 
6834 class="cmtt-8">&#x00A0;</span><span 
6835 class="cmtt-8">&#x00A0;</span><span 
6836 class="cmtt-8">&#x00A0;</span><span 
6837 class="cmtt-8">&#x00A0;</span><span 
6838 class="cmtt-8">&#x00A0;</span><span 
6839 class="cmtt-8">&#x00A0;9)</span><span 
6840 class="cmtt-8">&#x00A0;[csub]</span><span 
6841 class="cmtt-8">&#x00A0;</span><span 
6842 class="cmtt-8">&#x00A0;=</span><span 
6843 class="cmtt-8">&#x00A0;(2</span><span 
6844 class="cmtt-8">&#x00A0;exponent</span><span 
6845 class="cmtt-8">&#x00A0;[cbits])-1</span>
6846 <br class="fancyvrb" /><a 
6847  id="x1-100024r11"></a><span 
6848 class="cmr-6">11</span><span 
6849 class="cmtt-8">&#x00A0;</span><span 
6850 class="cmtt-8">&#x00A0;</span><span 
6851 class="cmtt-8">&#x00A0;</span><span 
6852 class="cmtt-8">&#x00A0;</span><span 
6853 class="cmtt-8">&#x00A0;</span><span 
6854 class="cmtt-8">&#x00A0;</span><span 
6855 class="cmtt-8">&#x00A0;</span><span 
6856 class="cmtt-8">&#x00A0;10)</span><span 
6857 class="cmtt-8">&#x00A0;[cval]</span><span 
6858 class="cmtt-8">&#x00A0;</span><span 
6859 class="cmtt-8">&#x00A0;=</span><span 
6860 class="cmtt-8">&#x00A0;0</span>
6861 <br class="fancyvrb" /><a 
6862  id="x1-100026r12"></a><span 
6863 class="cmr-6">12</span><span 
6864 class="cmtt-8">&#x00A0;</span><span 
6865 class="cmtt-8">&#x00A0;</span><span 
6866 class="cmtt-8">&#x00A0;</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;11)</span><span 
6872 class="cmtt-8">&#x00A0;if</span><span 
6873 class="cmtt-8">&#x00A0;(</span><span 
6874 class="cmtt-8">&#x00A0;[cbits]</span><span 
6875 class="cmtt-8">&#x00A0;is</span><span 
6876 class="cmtt-8">&#x00A0;greater</span><span 
6877 class="cmtt-8">&#x00A0;than</span><span 
6878 class="cmtt-8">&#x00A0;zero</span><span 
6879 class="cmtt-8">&#x00A0;)</span><span 
6880 class="cmtt-8">&#x00A0;</span><span 
6881 class="cmsy-8">{</span>
6882 <br class="fancyvrb" /><a 
6883  id="x1-100028r13"></a><span 
6884 class="cmr-6">13</span><span 
6885 class="cmtt-8">&#x00A0;</span><span 
6886 class="cmtt-8">&#x00A0;</span>
6887 <br class="fancyvrb" /><a 
6888  id="x1-100030r14"></a><span 
6889 class="cmr-6">14</span><span 
6890 class="cmtt-8">&#x00A0;</span><span 
6891 class="cmtt-8">&#x00A0;</span><span 
6892 class="cmtt-8">&#x00A0;</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;12)</span><span 
6905 class="cmtt-8">&#x00A0;[cval]</span><span 
6906 class="cmtt-8">&#x00A0;=</span><span 
6907 class="cmtt-8">&#x00A0;read</span><span 
6908 class="cmtt-8">&#x00A0;from</span><span 
6909 class="cmtt-8">&#x00A0;packet</span><span 
6910 class="cmtt-8">&#x00A0;using</span><span 
6911 class="cmtt-8">&#x00A0;codebook</span><span 
6912 class="cmtt-8">&#x00A0;number</span>
6913 <br class="fancyvrb" /><a 
6914  id="x1-100032r15"></a><span 
6915 class="cmr-6">15</span><span 
6916 class="cmtt-8">&#x00A0;</span><span 
6917 class="cmtt-8">&#x00A0;</span><span 
6918 class="cmtt-8">&#x00A0;</span><span 
6919 class="cmtt-8">&#x00A0;</span><span 
6920 class="cmtt-8">&#x00A0;</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="cmtt-8">&#x00A0;</span><span 
6934 class="cmtt-8">&#x00A0;(vector</span><span 
6935 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span 
6936 class="cmtt-8">&#x00A0;element</span><span 
6937 class="cmtt-8">&#x00A0;[class])</span><span 
6938 class="cmtt-8">&#x00A0;in</span><span 
6939 class="cmtt-8">&#x00A0;scalar</span><span 
6940 class="cmtt-8">&#x00A0;context</span>
6941 <br class="fancyvrb" /><a 
6942  id="x1-100034r16"></a><span 
6943 class="cmr-6">16</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;</span><span 
6950 class="cmtt-8">&#x00A0;</span><span 
6951 class="cmtt-8">&#x00A0;</span><span 
6952 class="cmtt-8">&#x00A0;</span><span 
6953 class="cmtt-8">&#x00A0;</span><span 
6954 class="cmtt-8">&#x00A0;</span><span 
6955 class="cmtt-8">&#x00A0;</span><span 
6956 class="cmsy-8">}</span>
6957 <br class="fancyvrb" /><a 
6958  id="x1-100036r17"></a><span 
6959 class="cmr-6">17</span><span 
6960 class="cmtt-8">&#x00A0;</span><span 
6961 class="cmtt-8">&#x00A0;</span>
6962 <br class="fancyvrb" /><a 
6963  id="x1-100038r18"></a><span 
6964 class="cmr-6">18</span><span 
6965 class="cmtt-8">&#x00A0;</span><span 
6966 class="cmtt-8">&#x00A0;</span><span 
6967 class="cmtt-8">&#x00A0;</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;13)</span><span 
6973 class="cmtt-8">&#x00A0;iterate</span><span 
6974 class="cmtt-8">&#x00A0;[j]</span><span 
6975 class="cmtt-8">&#x00A0;over</span><span 
6976 class="cmtt-8">&#x00A0;the</span><span 
6977 class="cmtt-8">&#x00A0;range</span><span 
6978 class="cmtt-8">&#x00A0;0</span><span 
6979 class="cmtt-8">&#x00A0;...</span><span 
6980 class="cmtt-8">&#x00A0;[cdim]-1</span><span 
6981 class="cmtt-8">&#x00A0;</span><span 
6982 class="cmsy-8">{</span>
6983 <br class="fancyvrb" /><a 
6984  id="x1-100040r19"></a><span 
6985 class="cmr-6">19</span><span 
6986 class="cmtt-8">&#x00A0;</span><span 
6987 class="cmtt-8">&#x00A0;</span>
6988 <br class="fancyvrb" /><a 
6989  id="x1-100042r20"></a><span 
6990 class="cmr-6">20</span><span 
6991 class="cmtt-8">&#x00A0;</span><span 
6992 class="cmtt-8">&#x00A0;</span><span 
6993 class="cmtt-8">&#x00A0;</span><span 
6994 class="cmtt-8">&#x00A0;</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;14)</span><span 
7006 class="cmtt-8">&#x00A0;[book]</span><span 
7007 class="cmtt-8">&#x00A0;=</span><span 
7008 class="cmtt-8">&#x00A0;array</span><span 
7009 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span 
7010 class="cmtt-8">&#x00A0;element</span><span 
7011 class="cmtt-8">&#x00A0;[class],([cval]</span><span 
7012 class="cmtt-8">&#x00A0;bitwise</span><span 
7013 class="cmtt-8">&#x00A0;AND</span><span 
7014 class="cmtt-8">&#x00A0;[csub])</span>
7015 <br class="fancyvrb" /><a 
7016  id="x1-100044r21"></a><span 
7017 class="cmr-6">21</span><span 
7018 class="cmtt-8">&#x00A0;</span><span 
7019 class="cmtt-8">&#x00A0;</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;</span><span 
7027 class="cmtt-8">&#x00A0;</span><span 
7028 class="cmtt-8">&#x00A0;</span><span 
7029 class="cmtt-8">&#x00A0;</span><span 
7030 class="cmtt-8">&#x00A0;</span><span 
7031 class="cmtt-8">&#x00A0;</span><span 
7032 class="cmtt-8">&#x00A0;15)</span><span 
7033 class="cmtt-8">&#x00A0;[cval]</span><span 
7034 class="cmtt-8">&#x00A0;=</span><span 
7035 class="cmtt-8">&#x00A0;[cval]</span><span 
7036 class="cmtt-8">&#x00A0;right</span><span 
7037 class="cmtt-8">&#x00A0;shifted</span><span 
7038 class="cmtt-8">&#x00A0;[cbits]</span><span 
7039 class="cmtt-8">&#x00A0;bits</span>
7040 <br class="fancyvrb" /><a 
7041  id="x1-100046r22"></a><span 
7042 class="cmr-6">22</span><span 
7043 class="cmtt-8">&#x00A0;</span><span 
7044 class="cmtt-8">&#x00A0;    </span><span 
7045 class="cmtt-8">&#x00A0;</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;16)</span><span 
7050 class="cmtt-8">&#x00A0;if</span><span 
7051 class="cmtt-8">&#x00A0;(</span><span 
7052 class="cmtt-8">&#x00A0;[book]</span><span 
7053 class="cmtt-8">&#x00A0;is</span><span 
7054 class="cmtt-8">&#x00A0;not</span><span 
7055 class="cmtt-8">&#x00A0;less</span><span 
7056 class="cmtt-8">&#x00A0;than</span><span 
7057 class="cmtt-8">&#x00A0;zero</span><span 
7058 class="cmtt-8">&#x00A0;)</span><span 
7059 class="cmtt-8">&#x00A0;</span><span 
7060 class="cmsy-8">{</span>
7061 <br class="fancyvrb" /><a 
7062  id="x1-100048r23"></a><span 
7063 class="cmr-6">23</span><span 
7064 class="cmtt-8">&#x00A0;</span><span 
7065 class="cmtt-8">&#x00A0;</span>
7066 <br class="fancyvrb" /><a 
7067  id="x1-100050r24"></a><span 
7068 class="cmr-6">24</span><span 
7069 class="cmtt-8">&#x00A0;</span><span 
7070 class="cmtt-8">&#x00A0;    </span><span 
7071 class="cmtt-8">&#x00A0;</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;17)</span><span 
7082 class="cmtt-8">&#x00A0;vector</span><span 
7083 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
7084 class="cmtt-8">&#x00A0;element</span><span 
7085 class="cmtt-8">&#x00A0;([j]+[offset])</span><span 
7086 class="cmtt-8">&#x00A0;=</span><span 
7087 class="cmtt-8">&#x00A0;read</span><span 
7088 class="cmtt-8">&#x00A0;from</span><span 
7089 class="cmtt-8">&#x00A0;packet</span><span 
7090 class="cmtt-8">&#x00A0;using</span><span 
7091 class="cmtt-8">&#x00A0;codebook</span>
7092 <br class="fancyvrb" /><a 
7093  id="x1-100052r25"></a><span 
7094 class="cmr-6">25</span><span 
7095 class="cmtt-8">&#x00A0;</span><span 
7096 class="cmtt-8">&#x00A0;</span><span 
7097 class="cmtt-8">&#x00A0;</span><span 
7098 class="cmtt-8">&#x00A0;</span><span 
7099 class="cmtt-8">&#x00A0;</span><span 
7100 class="cmtt-8">&#x00A0;</span><span 
7101 class="cmtt-8">&#x00A0;</span><span 
7102 class="cmtt-8">&#x00A0;</span><span 
7103 class="cmtt-8">&#x00A0;</span><span 
7104 class="cmtt-8">&#x00A0;</span><span 
7105 class="cmtt-8">&#x00A0;</span><span 
7106 class="cmtt-8">&#x00A0;</span><span 
7107 class="cmtt-8">&#x00A0;</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;[book]</span><span 
7120 class="cmtt-8">&#x00A0;in</span><span 
7121 class="cmtt-8">&#x00A0;scalar</span><span 
7122 class="cmtt-8">&#x00A0;context</span>
7123 <br class="fancyvrb" /><a 
7124  id="x1-100054r26"></a><span 
7125 class="cmr-6">26</span><span 
7126 class="cmtt-8">&#x00A0;</span><span 
7127 class="cmtt-8">&#x00A0;</span>
7128 <br class="fancyvrb" /><a 
7129  id="x1-100056r27"></a><span 
7130 class="cmr-6">27</span><span 
7131 class="cmtt-8">&#x00A0;</span><span 
7132 class="cmtt-8">&#x00A0;</span><span 
7133 class="cmtt-8">&#x00A0;</span><span 
7134 class="cmtt-8">&#x00A0;</span><span 
7135 class="cmtt-8">&#x00A0;</span><span 
7136 class="cmtt-8">&#x00A0;</span><span 
7137 class="cmtt-8">&#x00A0;</span><span 
7138 class="cmtt-8">&#x00A0;</span><span 
7139 class="cmtt-8">&#x00A0;</span><span 
7140 class="cmtt-8">&#x00A0;</span><span 
7141 class="cmtt-8">&#x00A0;</span><span 
7142 class="cmtt-8">&#x00A0;</span><span 
7143 class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><span 
7151 class="cmtt-8">&#x00A0;else</span><span 
7152 class="cmtt-8">&#x00A0;[book]</span><span 
7153 class="cmtt-8">&#x00A0;is</span><span 
7154 class="cmtt-8">&#x00A0;less</span><span 
7155 class="cmtt-8">&#x00A0;than</span><span 
7156 class="cmtt-8">&#x00A0;zero</span><span 
7157 class="cmtt-8">&#x00A0;</span><span 
7158 class="cmsy-8">{</span>
7159 <br class="fancyvrb" /><a 
7160  id="x1-100058r28"></a><span 
7161 class="cmr-6">28</span><span 
7162 class="cmtt-8">&#x00A0;</span><span 
7163 class="cmtt-8">&#x00A0;</span>
7164 <br class="fancyvrb" /><a 
7165  id="x1-100060r29"></a><span 
7166 class="cmr-6">29</span><span 
7167 class="cmtt-8">&#x00A0;</span><span 
7168 class="cmtt-8">&#x00A0;    </span><span 
7169 class="cmtt-8">&#x00A0;</span><span 
7170 class="cmtt-8">&#x00A0;</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;18)</span><span 
7180 class="cmtt-8">&#x00A0;vector</span><span 
7181 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
7182 class="cmtt-8">&#x00A0;element</span><span 
7183 class="cmtt-8">&#x00A0;([j]+[offset])</span><span 
7184 class="cmtt-8">&#x00A0;=</span><span 
7185 class="cmtt-8">&#x00A0;0</span>
7186 <br class="fancyvrb" /><a 
7187  id="x1-100062r30"></a><span 
7188 class="cmr-6">30</span><span 
7189 class="cmtt-8">&#x00A0;</span><span 
7190 class="cmtt-8">&#x00A0;</span>
7191 <br class="fancyvrb" /><a 
7192  id="x1-100064r31"></a><span 
7193 class="cmr-6">31</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="cmtt-8">&#x00A0;</span><span 
7207 class="cmtt-8">&#x00A0;</span><span 
7208 class="cmtt-8">&#x00A0;</span><span 
7209 class="cmtt-8">&#x00A0;</span><span 
7210 class="cmtt-8">&#x00A0;</span><span 
7211 class="cmtt-8">&#x00A0;</span><span 
7212 class="cmtt-8">&#x00A0;</span><span 
7213 class="cmsy-8">}</span>
7214 <br class="fancyvrb" /><a 
7215  id="x1-100066r32"></a><span 
7216 class="cmr-6">32</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;</span><span 
7223 class="cmtt-8">&#x00A0;</span><span 
7224 class="cmtt-8">&#x00A0;</span><span 
7225 class="cmtt-8">&#x00A0;</span><span 
7226 class="cmtt-8">&#x00A0;</span><span 
7227 class="cmtt-8">&#x00A0;</span><span 
7228 class="cmtt-8">&#x00A0;</span><span 
7229 class="cmsy-8">}</span>
7230 <br class="fancyvrb" /><a 
7231  id="x1-100068r33"></a><span 
7232 class="cmr-6">33</span><span 
7233 class="cmtt-8">&#x00A0;</span><span 
7234 class="cmtt-8">&#x00A0;</span>
7235 <br class="fancyvrb" /><a 
7236  id="x1-100070r34"></a><span 
7237 class="cmr-6">34</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="cmtt-8">&#x00A0;</span><span 
7244 class="cmtt-8">&#x00A0;</span><span 
7245 class="cmtt-8">&#x00A0;19)</span><span 
7246 class="cmtt-8">&#x00A0;[offset]</span><span 
7247 class="cmtt-8">&#x00A0;=</span><span 
7248 class="cmtt-8">&#x00A0;[offset]</span><span 
7249 class="cmtt-8">&#x00A0;+</span><span 
7250 class="cmtt-8">&#x00A0;[cdim]</span>
7251                                                                                         
7252
7253                                                                                         
7254 <br class="fancyvrb" /><a 
7255  id="x1-100072r35"></a><span 
7256 class="cmr-6">35</span><span 
7257 class="cmtt-8">&#x00A0;</span><span 
7258 class="cmtt-8">&#x00A0;</span>
7259 <br class="fancyvrb" /><a 
7260  id="x1-100074r36"></a><span 
7261 class="cmr-6">36</span><span 
7262 class="cmtt-8">&#x00A0;</span><span 
7263 class="cmtt-8">&#x00A0;</span><span 
7264 class="cmtt-8">&#x00A0;</span><span 
7265 class="cmtt-8">&#x00A0;</span><span 
7266 class="cmtt-8">&#x00A0;</span><span 
7267 class="cmtt-8">&#x00A0;</span><span 
7268 class="cmtt-8">&#x00A0;</span><span 
7269 class="cmsy-8">}</span>
7270 <br class="fancyvrb" /><a 
7271  id="x1-100076r37"></a><span 
7272 class="cmr-6">37</span><span 
7273 class="cmtt-8">&#x00A0;</span><span 
7274 class="cmtt-8">&#x00A0;</span>
7275 <br class="fancyvrb" /><a 
7276  id="x1-100078r38"></a><span 
7277 class="cmr-6">38</span><span 
7278 class="cmtt-8">&#x00A0;</span><span 
7279 class="cmtt-8">&#x00A0;</span><span 
7280 class="cmtt-8">&#x00A0;20)</span><span 
7281 class="cmtt-8">&#x00A0;done</span>
7282 </div>
7283 <!--l. 229--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
7284 end-of-packet is reached during any read operation above, floor decode is to return &#8217;unused&#8217;
7285 status as if the <span 
7286 class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
7287 <!--l. 235--><p class="noindent" >Vector <span 
7288 class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
7289 <!--l. 240--><p class="noindent" >
7290 <h5 class="subsubsectionHead"><span class="titlemark">7.2.4.  </span> <a 
7291  id="x1-1010007.2.4"></a>curve computation</h5>
7292 <!--l. 242--><p class="noindent" >Curve computation is split into two logical steps; the first step derives final Y amplitude values
7293 from the encoded, wrapped difference values taken from the bitstream. The second step
7294 plots the curve lines. Also, although zero-difference values are used in the iterative
7295 prediction to find final Y values, these points are conditionally skipped during final
7296 line computation in step two. Skipping zero-difference values allows a smoother line
7297 fit.
7298 <!--l. 250--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
7299 implementors are warned to follow the details closely. Deviation from implementing a strictly
7300 equivalent algorithm can result in serious decoding errors.
7301 <!--l. 255--><p class="noindent" ><span 
7302 class="cmti-12">Additional note: </span>Although <span 
7303 class="cmtt-12">[floor1_final_Y] </span>values in the prediction loop and at the end of
7304 step 1 are inherently limited by the prediction algorithm to [0, <span 
7305 class="cmtt-12">[range]</span>), it is possible to abuse
7306 the setup and codebook machinery to produce negative or over-range results. We suggest that
7307 decoder implementations guard the values in vector <span 
7308 class="cmtt-12">[floor1_final_Y] </span>by clamping each
7309 element to [0, <span 
7310 class="cmtt-12">[range]</span>) after step 1. Variants of this suggestion are acceptable as valid floor1
7311 setups cannot produce out of range values.
7312 <!--l. 266--><p class="noindent" >
7313       <dl class="description"><dt class="description">
7314 <span 
7315 class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd 
7316 class="description">
7317       <!--l. 268--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
7318       values, then apply to line prediction.
7319       <!--l. 271--><p class="noindent" >
7320       <div class="fancyvrb" id="fancyvrb31">
7321                                                                                         
7322
7323                                                                                         
7324 <a 
7325  id="x1-101002r1"></a><span 
7326 class="cmr-6">1</span><span 
7327 class="cmtt-8">&#x00A0;</span><span 
7328 class="cmtt-8">&#x00A0;</span><span 
7329 class="cmtt-8">&#x00A0;</span><span 
7330 class="cmtt-8">&#x00A0;1)</span><span 
7331 class="cmtt-8">&#x00A0;[range]</span><span 
7332 class="cmtt-8">&#x00A0;=</span><span 
7333 class="cmtt-8">&#x00A0;vector</span><span 
7334 class="cmtt-8">&#x00A0;</span><span 
7335 class="cmsy-8">{</span><span 
7336 class="cmtt-8">&#x00A0;256,</span><span 
7337 class="cmtt-8">&#x00A0;128,</span><span 
7338 class="cmtt-8">&#x00A0;86,</span><span 
7339 class="cmtt-8">&#x00A0;64</span><span 
7340 class="cmtt-8">&#x00A0;</span><span 
7341 class="cmsy-8">}</span><span 
7342 class="cmtt-8">&#x00A0;element</span><span 
7343 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
7344 <br class="fancyvrb" /><a 
7345  id="x1-101004r2"></a><span 
7346 class="cmr-6">2</span><span 
7347 class="cmtt-8">&#x00A0;</span><span 
7348 class="cmtt-8">&#x00A0;</span><span 
7349 class="cmtt-8">&#x00A0;</span><span 
7350 class="cmtt-8">&#x00A0;2)</span><span 
7351 class="cmtt-8">&#x00A0;vector</span><span 
7352 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
7353 class="cmtt-8">&#x00A0;element</span><span 
7354 class="cmtt-8">&#x00A0;[0]</span><span 
7355 class="cmtt-8">&#x00A0;=</span><span 
7356 class="cmtt-8">&#x00A0;set</span>
7357 <br class="fancyvrb" /><a 
7358  id="x1-101006r3"></a><span 
7359 class="cmr-6">3</span><span 
7360 class="cmtt-8">&#x00A0;</span><span 
7361 class="cmtt-8">&#x00A0;</span><span 
7362 class="cmtt-8">&#x00A0;</span><span 
7363 class="cmtt-8">&#x00A0;3)</span><span 
7364 class="cmtt-8">&#x00A0;vector</span><span 
7365 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
7366 class="cmtt-8">&#x00A0;element</span><span 
7367 class="cmtt-8">&#x00A0;[1]</span><span 
7368 class="cmtt-8">&#x00A0;=</span><span 
7369 class="cmtt-8">&#x00A0;set</span>
7370 <br class="fancyvrb" /><a 
7371  id="x1-101008r4"></a><span 
7372 class="cmr-6">4</span><span 
7373 class="cmtt-8">&#x00A0;</span><span 
7374 class="cmtt-8">&#x00A0;</span><span 
7375 class="cmtt-8">&#x00A0;</span><span 
7376 class="cmtt-8">&#x00A0;4)</span><span 
7377 class="cmtt-8">&#x00A0;vector</span><span 
7378 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
7379 class="cmtt-8">&#x00A0;element</span><span 
7380 class="cmtt-8">&#x00A0;[0]</span><span 
7381 class="cmtt-8">&#x00A0;=</span><span 
7382 class="cmtt-8">&#x00A0;vector</span><span 
7383 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
7384 class="cmtt-8">&#x00A0;element</span><span 
7385 class="cmtt-8">&#x00A0;[0]</span>
7386 <br class="fancyvrb" /><a 
7387  id="x1-101010r5"></a><span 
7388 class="cmr-6">5</span><span 
7389 class="cmtt-8">&#x00A0;</span><span 
7390 class="cmtt-8">&#x00A0;</span><span 
7391 class="cmtt-8">&#x00A0;</span><span 
7392 class="cmtt-8">&#x00A0;5)</span><span 
7393 class="cmtt-8">&#x00A0;vector</span><span 
7394 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
7395 class="cmtt-8">&#x00A0;element</span><span 
7396 class="cmtt-8">&#x00A0;[1]</span><span 
7397 class="cmtt-8">&#x00A0;=</span><span 
7398 class="cmtt-8">&#x00A0;vector</span><span 
7399 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
7400 class="cmtt-8">&#x00A0;element</span><span 
7401 class="cmtt-8">&#x00A0;[1]</span>
7402 <br class="fancyvrb" /><a 
7403  id="x1-101012r6"></a><span 
7404 class="cmr-6">6</span><span 
7405 class="cmtt-8">&#x00A0;</span><span 
7406 class="cmtt-8">&#x00A0;</span><span 
7407 class="cmtt-8">&#x00A0;</span><span 
7408 class="cmtt-8">&#x00A0;6)</span><span 
7409 class="cmtt-8">&#x00A0;iterate</span><span 
7410 class="cmtt-8">&#x00A0;[i]</span><span 
7411 class="cmtt-8">&#x00A0;over</span><span 
7412 class="cmtt-8">&#x00A0;the</span><span 
7413 class="cmtt-8">&#x00A0;range</span><span 
7414 class="cmtt-8">&#x00A0;2</span><span 
7415 class="cmtt-8">&#x00A0;...</span><span 
7416 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span 
7417 class="cmtt-8">&#x00A0;</span><span 
7418 class="cmsy-8">{</span>
7419 <br class="fancyvrb" /><a 
7420  id="x1-101014r7"></a><span 
7421 class="cmr-6">7</span><span 
7422 class="cmtt-8">&#x00A0;</span><span 
7423 class="cmtt-8">&#x00A0;</span>
7424 <br class="fancyvrb" /><a 
7425  id="x1-101016r8"></a><span 
7426 class="cmr-6">8</span><span 
7427 class="cmtt-8">&#x00A0;</span><span 
7428 class="cmtt-8">&#x00A0;</span><span 
7429 class="cmtt-8">&#x00A0;</span><span 
7430 class="cmtt-8">&#x00A0;</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;7)</span><span 
7436 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span 
7437 class="cmtt-8">&#x00A0;=</span><span 
7438 class="cmtt-8">&#x00A0;</span><a 
7439 href="#x1-1200009.2.4"><span 
7440 class="cmtt-8">low_neighbor</span></a><span 
7441 class="cmtt-8">([floor1_X_list],[i])</span>
7442 <br class="fancyvrb" /><a 
7443  id="x1-101018r9"></a><span 
7444 class="cmr-6">9</span><span 
7445 class="cmtt-8">&#x00A0;</span><span 
7446 class="cmtt-8">&#x00A0;</span><span 
7447 class="cmtt-8">&#x00A0;</span><span 
7448 class="cmtt-8">&#x00A0;</span><span 
7449 class="cmtt-8">&#x00A0;</span><span 
7450 class="cmtt-8">&#x00A0;</span><span 
7451 class="cmtt-8">&#x00A0;</span><span 
7452 class="cmtt-8">&#x00A0;</span><span 
7453 class="cmtt-8">&#x00A0;8)</span><span 
7454 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span 
7455 class="cmtt-8">&#x00A0;=</span><span 
7456 class="cmtt-8">&#x00A0;</span><a 
7457 href="#x1-1210009.2.5"><span 
7458 class="cmtt-8">high_neighbor</span></a><span 
7459 class="cmtt-8">([floor1_X_list],[i])</span>
7460 <br class="fancyvrb" /><a 
7461  id="x1-101020r10"></a><span 
7462 class="cmr-6">10</span><span 
7463 class="cmtt-8">&#x00A0;</span><span 
7464 class="cmtt-8">&#x00A0;</span>
7465 <br class="fancyvrb" /><a 
7466  id="x1-101022r11"></a><span 
7467 class="cmr-6">11</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;9)</span><span 
7477 class="cmtt-8">&#x00A0;[predicted]</span><span 
7478 class="cmtt-8">&#x00A0;=</span><span 
7479 class="cmtt-8">&#x00A0;</span><a 
7480 href="#x1-1220009.2.6"><span 
7481 class="cmtt-8">render_point</span></a><span 
7482 class="cmtt-8">(</span><span 
7483 class="cmtt-8">&#x00A0;vector</span><span 
7484 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
7485 class="cmtt-8">&#x00A0;element</span><span 
7486 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
7487 <br class="fancyvrb" /><a 
7488  id="x1-101024r12"></a><span 
7489 class="cmr-6">12</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;vector</span><span 
7498 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
7499 class="cmtt-8">&#x00A0;element</span><span 
7500 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
7501 <br class="fancyvrb" /><a 
7502  id="x1-101026r13"></a><span 
7503 class="cmr-6">13</span><span 
7504 class="cmtt-8">&#x00A0;</span><span 
7505 class="cmtt-8">&#x00A0;</span><span 
7506 class="cmtt-8">&#x00A0;</span><span 
7507 class="cmtt-8">&#x00A0;</span><span 
7508 class="cmtt-8">&#x00A0;</span><span 
7509 class="cmtt-8">&#x00A0;</span><span 
7510 class="cmtt-8">&#x00A0;</span><span 
7511 class="cmtt-8">&#x00A0;</span><span 
7512 class="cmtt-8">&#x00A0;</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;</span><span 
7521 class="cmtt-8">&#x00A0;</span><span 
7522 class="cmtt-8">&#x00A0;</span><span 
7523 class="cmtt-8">&#x00A0;</span><span 
7524 class="cmtt-8">&#x00A0;</span><span 
7525 class="cmtt-8">&#x00A0;</span><span 
7526 class="cmtt-8">&#x00A0;</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;vector</span><span 
7544 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
7545 class="cmtt-8">&#x00A0;element</span><span 
7546 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
7547 <br class="fancyvrb" /><a 
7548  id="x1-101028r14"></a><span 
7549 class="cmr-6">14</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;vector</span><span 
7558 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
7559 class="cmtt-8">&#x00A0;element</span><span 
7560 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
7561 <br class="fancyvrb" /><a 
7562  id="x1-101030r15"></a><span 
7563 class="cmr-6">15</span><span 
7564 class="cmtt-8">&#x00A0;</span><span 
7565 class="cmtt-8">&#x00A0;</span><span 
7566 class="cmtt-8">&#x00A0;</span><span 
7567 class="cmtt-8">&#x00A0;</span><span 
7568 class="cmtt-8">&#x00A0;</span><span 
7569 class="cmtt-8">&#x00A0;</span><span 
7570 class="cmtt-8">&#x00A0;</span><span 
7571 class="cmtt-8">&#x00A0;</span><span 
7572 class="cmtt-8">&#x00A0;</span><span 
7573 class="cmtt-8">&#x00A0;</span><span 
7574 class="cmtt-8">&#x00A0;</span><span 
7575 class="cmtt-8">&#x00A0;</span><span 
7576 class="cmtt-8">&#x00A0;</span><span 
7577 class="cmtt-8">&#x00A0;</span><span 
7578 class="cmtt-8">&#x00A0;</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;</span><span 
7587 class="cmtt-8">&#x00A0;</span><span 
7588 class="cmtt-8">&#x00A0;</span><span 
7589 class="cmtt-8">&#x00A0;</span><span 
7590 class="cmtt-8">&#x00A0;</span><span 
7591 class="cmtt-8">&#x00A0;</span><span 
7592 class="cmtt-8">&#x00A0;</span><span 
7593 class="cmtt-8">&#x00A0;</span><span 
7594 class="cmtt-8">&#x00A0;</span><span 
7595 class="cmtt-8">&#x00A0;</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;vector</span><span 
7604 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span 
7605 class="cmtt-8">&#x00A0;element</span><span 
7606 class="cmtt-8">&#x00A0;[i]</span><span 
7607 class="cmtt-8">&#x00A0;)</span>
7608 <br class="fancyvrb" /><a 
7609  id="x1-101032r16"></a><span 
7610 class="cmr-6">16</span><span 
7611 class="cmtt-8">&#x00A0;</span><span 
7612 class="cmtt-8">&#x00A0;</span>
7613 <br class="fancyvrb" /><a 
7614  id="x1-101034r17"></a><span 
7615 class="cmr-6">17</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;</span><span 
7620 class="cmtt-8">&#x00A0;</span><span 
7621 class="cmtt-8">&#x00A0;</span><span 
7622 class="cmtt-8">&#x00A0;</span><span 
7623 class="cmtt-8">&#x00A0;10)</span><span 
7624 class="cmtt-8">&#x00A0;[val]</span><span 
7625 class="cmtt-8">&#x00A0;=</span><span 
7626 class="cmtt-8">&#x00A0;vector</span><span 
7627 class="cmtt-8">&#x00A0;[floor1_Y]</span><span 
7628 class="cmtt-8">&#x00A0;element</span><span 
7629 class="cmtt-8">&#x00A0;[i]</span>
7630 <br class="fancyvrb" /><a 
7631  id="x1-101036r18"></a><span 
7632 class="cmr-6">18</span><span 
7633 class="cmtt-8">&#x00A0;</span><span 
7634 class="cmtt-8">&#x00A0;</span><span 
7635 class="cmtt-8">&#x00A0;</span><span 
7636 class="cmtt-8">&#x00A0;</span><span 
7637 class="cmtt-8">&#x00A0;</span><span 
7638 class="cmtt-8">&#x00A0;</span><span 
7639 class="cmtt-8">&#x00A0;</span><span 
7640 class="cmtt-8">&#x00A0;11)</span><span 
7641 class="cmtt-8">&#x00A0;[highroom]</span><span 
7642 class="cmtt-8">&#x00A0;=</span><span 
7643 class="cmtt-8">&#x00A0;[range]</span><span 
7644 class="cmtt-8">&#x00A0;-</span><span 
7645 class="cmtt-8">&#x00A0;[predicted]</span>
7646 <br class="fancyvrb" /><a 
7647  id="x1-101038r19"></a><span 
7648 class="cmr-6">19</span><span 
7649 class="cmtt-8">&#x00A0;</span><span 
7650 class="cmtt-8">&#x00A0;</span><span 
7651 class="cmtt-8">&#x00A0;</span><span 
7652 class="cmtt-8">&#x00A0;</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;12)</span><span 
7657 class="cmtt-8">&#x00A0;[lowroom]</span><span 
7658 class="cmtt-8">&#x00A0;</span><span 
7659 class="cmtt-8">&#x00A0;=</span><span 
7660 class="cmtt-8">&#x00A0;[predicted]</span>
7661 <br class="fancyvrb" /><a 
7662  id="x1-101040r20"></a><span 
7663 class="cmr-6">20</span><span 
7664 class="cmtt-8">&#x00A0;</span><span 
7665 class="cmtt-8">&#x00A0;</span><span 
7666 class="cmtt-8">&#x00A0;</span><span 
7667 class="cmtt-8">&#x00A0;</span><span 
7668 class="cmtt-8">&#x00A0;</span><span 
7669 class="cmtt-8">&#x00A0;</span><span 
7670 class="cmtt-8">&#x00A0;</span><span 
7671 class="cmtt-8">&#x00A0;13)</span><span 
7672 class="cmtt-8">&#x00A0;if</span><span 
7673 class="cmtt-8">&#x00A0;(</span><span 
7674 class="cmtt-8">&#x00A0;[highroom]</span><span 
7675 class="cmtt-8">&#x00A0;is</span><span 
7676 class="cmtt-8">&#x00A0;less</span><span 
7677 class="cmtt-8">&#x00A0;than</span><span 
7678 class="cmtt-8">&#x00A0;[lowroom]</span><span 
7679 class="cmtt-8">&#x00A0;)</span><span 
7680 class="cmtt-8">&#x00A0;</span><span 
7681 class="cmsy-8">{</span>
7682 <br class="fancyvrb" /><a 
7683  id="x1-101042r21"></a><span 
7684 class="cmr-6">21</span><span 
7685 class="cmtt-8">&#x00A0;</span><span 
7686 class="cmtt-8">&#x00A0;</span>
7687 <br class="fancyvrb" /><a 
7688  id="x1-101044r22"></a><span 
7689 class="cmr-6">22</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="cmtt-8">&#x00A0;</span><span 
7696 class="cmtt-8">&#x00A0;</span><span 
7697 class="cmtt-8">&#x00A0;</span><span 
7698 class="cmtt-8">&#x00A0;</span><span 
7699 class="cmtt-8">&#x00A0;</span><span 
7700 class="cmtt-8">&#x00A0;</span><span 
7701 class="cmtt-8">&#x00A0;</span><span 
7702 class="cmtt-8">&#x00A0;</span><span 
7703 class="cmtt-8">&#x00A0;14)</span><span 
7704 class="cmtt-8">&#x00A0;[room]</span><span 
7705 class="cmtt-8">&#x00A0;=</span><span 
7706 class="cmtt-8">&#x00A0;[highroom]</span><span 
7707 class="cmtt-8">&#x00A0;*</span><span 
7708 class="cmtt-8">&#x00A0;2</span>
7709 <br class="fancyvrb" /><a 
7710  id="x1-101046r23"></a><span 
7711 class="cmr-6">23</span><span 
7712 class="cmtt-8">&#x00A0;</span><span 
7713 class="cmtt-8">&#x00A0;</span>
7714 <br class="fancyvrb" /><a 
7715  id="x1-101048r24"></a><span 
7716 class="cmr-6">24</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;</span><span 
7727 class="cmtt-8">&#x00A0;</span><span 
7728 class="cmtt-8">&#x00A0;</span><span 
7729 class="cmsy-8">}</span><span 
7730 class="cmtt-8">&#x00A0;else</span><span 
7731 class="cmtt-8">&#x00A0;[highroom]</span><span 
7732 class="cmtt-8">&#x00A0;is</span><span 
7733 class="cmtt-8">&#x00A0;not</span><span 
7734 class="cmtt-8">&#x00A0;less</span><span 
7735 class="cmtt-8">&#x00A0;than</span><span 
7736 class="cmtt-8">&#x00A0;[lowroom]</span><span 
7737 class="cmtt-8">&#x00A0;</span><span 
7738 class="cmsy-8">{</span>
7739 <br class="fancyvrb" /><a 
7740  id="x1-101050r25"></a><span 
7741 class="cmr-6">25</span><span 
7742 class="cmtt-8">&#x00A0;</span><span 
7743 class="cmtt-8">&#x00A0;</span>
7744 <br class="fancyvrb" /><a 
7745  id="x1-101052r26"></a><span 
7746 class="cmr-6">26</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="cmtt-8">&#x00A0;</span><span 
7753 class="cmtt-8">&#x00A0;</span><span 
7754 class="cmtt-8">&#x00A0;</span><span 
7755 class="cmtt-8">&#x00A0;</span><span 
7756 class="cmtt-8">&#x00A0;</span><span 
7757 class="cmtt-8">&#x00A0;</span><span 
7758 class="cmtt-8">&#x00A0;</span><span 
7759 class="cmtt-8">&#x00A0;</span><span 
7760 class="cmtt-8">&#x00A0;15)</span><span 
7761 class="cmtt-8">&#x00A0;[room]</span><span 
7762 class="cmtt-8">&#x00A0;=</span><span 
7763 class="cmtt-8">&#x00A0;[lowroom]</span><span 
7764 class="cmtt-8">&#x00A0;*</span><span 
7765 class="cmtt-8">&#x00A0;2</span>
7766 <br class="fancyvrb" /><a 
7767  id="x1-101054r27"></a><span 
7768 class="cmr-6">27</span><span 
7769 class="cmtt-8">&#x00A0;</span><span 
7770 class="cmtt-8">&#x00A0;</span>
7771 <br class="fancyvrb" /><a 
7772  id="x1-101056r28"></a><span 
7773 class="cmr-6">28</span><span 
7774 class="cmtt-8">&#x00A0;</span><span 
7775 class="cmtt-8">&#x00A0;</span><span 
7776 class="cmtt-8">&#x00A0;</span><span 
7777 class="cmtt-8">&#x00A0;</span><span 
7778 class="cmtt-8">&#x00A0;</span><span 
7779 class="cmtt-8">&#x00A0;</span><span 
7780 class="cmtt-8">&#x00A0;</span><span 
7781 class="cmtt-8">&#x00A0;</span><span 
7782 class="cmtt-8">&#x00A0;</span><span 
7783 class="cmtt-8">&#x00A0;</span><span 
7784 class="cmtt-8">&#x00A0;</span><span 
7785 class="cmtt-8">&#x00A0;</span><span 
7786 class="cmsy-8">}</span>
7787 <br class="fancyvrb" /><a 
7788  id="x1-101058r29"></a><span 
7789 class="cmr-6">29</span><span 
7790 class="cmtt-8">&#x00A0;</span><span 
7791 class="cmtt-8">&#x00A0;</span>
7792 <br class="fancyvrb" /><a 
7793  id="x1-101060r30"></a><span 
7794 class="cmr-6">30</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;</span><span 
7799 class="cmtt-8">&#x00A0;</span><span 
7800 class="cmtt-8">&#x00A0;</span><span 
7801 class="cmtt-8">&#x00A0;</span><span 
7802 class="cmtt-8">&#x00A0;16)</span><span 
7803 class="cmtt-8">&#x00A0;if</span><span 
7804 class="cmtt-8">&#x00A0;(</span><span 
7805 class="cmtt-8">&#x00A0;[val]</span><span 
7806 class="cmtt-8">&#x00A0;is</span><span 
7807 class="cmtt-8">&#x00A0;nonzero</span><span 
7808 class="cmtt-8">&#x00A0;)</span><span 
7809 class="cmtt-8">&#x00A0;</span><span 
7810 class="cmsy-8">{</span>
7811 <br class="fancyvrb" /><a 
7812  id="x1-101062r31"></a><span 
7813 class="cmr-6">31</span><span 
7814 class="cmtt-8">&#x00A0;</span><span 
7815 class="cmtt-8">&#x00A0;</span>
7816 <br class="fancyvrb" /><a 
7817  id="x1-101064r32"></a><span 
7818 class="cmr-6">32</span><span 
7819 class="cmtt-8">&#x00A0;</span><span 
7820 class="cmtt-8">&#x00A0;</span><span 
7821 class="cmtt-8">&#x00A0;</span><span 
7822 class="cmtt-8">&#x00A0;</span><span 
7823 class="cmtt-8">&#x00A0;</span><span 
7824 class="cmtt-8">&#x00A0;</span><span 
7825 class="cmtt-8">&#x00A0;</span><span 
7826 class="cmtt-8">&#x00A0;</span><span 
7827 class="cmtt-8">&#x00A0;</span><span 
7828 class="cmtt-8">&#x00A0;</span><span 
7829 class="cmtt-8">&#x00A0;</span><span 
7830 class="cmtt-8">&#x00A0;</span><span 
7831 class="cmtt-8">&#x00A0;</span><span 
7832 class="cmtt-8">&#x00A0;17)</span><span 
7833 class="cmtt-8">&#x00A0;vector</span><span 
7834 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
7835 class="cmtt-8">&#x00A0;element</span><span 
7836 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span 
7837 class="cmtt-8">&#x00A0;=</span><span 
7838 class="cmtt-8">&#x00A0;set</span>
7839 <br class="fancyvrb" /><a 
7840  id="x1-101066r33"></a><span 
7841 class="cmr-6">33</span><span 
7842 class="cmtt-8">&#x00A0;</span><span 
7843 class="cmtt-8">&#x00A0;</span><span 
7844 class="cmtt-8">&#x00A0;</span><span 
7845 class="cmtt-8">&#x00A0;</span><span 
7846 class="cmtt-8">&#x00A0;</span><span 
7847 class="cmtt-8">&#x00A0;</span><span 
7848 class="cmtt-8">&#x00A0;</span><span 
7849 class="cmtt-8">&#x00A0;</span><span 
7850 class="cmtt-8">&#x00A0;</span><span 
7851 class="cmtt-8">&#x00A0;</span><span 
7852 class="cmtt-8">&#x00A0;</span><span 
7853 class="cmtt-8">&#x00A0;</span><span 
7854 class="cmtt-8">&#x00A0;</span><span 
7855 class="cmtt-8">&#x00A0;18)</span><span 
7856 class="cmtt-8">&#x00A0;vector</span><span 
7857 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
7858 class="cmtt-8">&#x00A0;element</span><span 
7859 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span 
7860 class="cmtt-8">&#x00A0;=</span><span 
7861 class="cmtt-8">&#x00A0;set</span>
7862 <br class="fancyvrb" /><a 
7863  id="x1-101068r34"></a><span 
7864 class="cmr-6">34</span><span 
7865 class="cmtt-8">&#x00A0;</span><span 
7866 class="cmtt-8">&#x00A0;</span><span 
7867 class="cmtt-8">&#x00A0;</span><span 
7868 class="cmtt-8">&#x00A0;</span><span 
7869 class="cmtt-8">&#x00A0;</span><span 
7870 class="cmtt-8">&#x00A0;</span><span 
7871 class="cmtt-8">&#x00A0;</span><span 
7872 class="cmtt-8">&#x00A0;</span><span 
7873 class="cmtt-8">&#x00A0;</span><span 
7874 class="cmtt-8">&#x00A0;</span><span 
7875 class="cmtt-8">&#x00A0;</span><span 
7876 class="cmtt-8">&#x00A0;</span><span 
7877 class="cmtt-8">&#x00A0;</span><span 
7878 class="cmtt-8">&#x00A0;19)</span><span 
7879 class="cmtt-8">&#x00A0;vector</span><span 
7880 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
7881 class="cmtt-8">&#x00A0;element</span><span 
7882 class="cmtt-8">&#x00A0;[i]</span><span 
7883 class="cmtt-8">&#x00A0;=</span><span 
7884 class="cmtt-8">&#x00A0;set</span>
7885 <br class="fancyvrb" /><a 
7886  id="x1-101070r35"></a><span 
7887 class="cmr-6">35</span><span 
7888 class="cmtt-8">&#x00A0;</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;20)</span><span 
7902 class="cmtt-8">&#x00A0;if</span><span 
7903 class="cmtt-8">&#x00A0;(</span><span 
7904 class="cmtt-8">&#x00A0;[val]</span><span 
7905 class="cmtt-8">&#x00A0;is</span><span 
7906 class="cmtt-8">&#x00A0;greater</span><span 
7907 class="cmtt-8">&#x00A0;than</span><span 
7908 class="cmtt-8">&#x00A0;or</span><span 
7909 class="cmtt-8">&#x00A0;equal</span><span 
7910 class="cmtt-8">&#x00A0;to</span><span 
7911 class="cmtt-8">&#x00A0;[room]</span><span 
7912 class="cmtt-8">&#x00A0;)</span><span 
7913 class="cmtt-8">&#x00A0;</span><span 
7914 class="cmsy-8">{</span>
7915 <br class="fancyvrb" /><a 
7916  id="x1-101072r36"></a><span 
7917 class="cmr-6">36</span><span 
7918 class="cmtt-8">&#x00A0;</span><span 
7919 class="cmtt-8">&#x00A0;</span>
7920 <br class="fancyvrb" /><a 
7921  id="x1-101074r37"></a><span 
7922 class="cmr-6">37</span><span 
7923 class="cmtt-8">&#x00A0;</span><span 
7924 class="cmtt-8">&#x00A0;</span><span 
7925 class="cmtt-8">&#x00A0;</span><span 
7926 class="cmtt-8">&#x00A0;</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;21)</span><span 
7943 class="cmtt-8">&#x00A0;if</span><span 
7944 class="cmtt-8">&#x00A0;(</span><span 
7945 class="cmtt-8">&#x00A0;[highroom]</span><span 
7946 class="cmtt-8">&#x00A0;is</span><span 
7947 class="cmtt-8">&#x00A0;greater</span><span 
7948 class="cmtt-8">&#x00A0;than</span><span 
7949 class="cmtt-8">&#x00A0;[lowroom]</span><span 
7950 class="cmtt-8">&#x00A0;)</span><span 
7951 class="cmtt-8">&#x00A0;</span><span 
7952 class="cmsy-8">{</span>
7953 <br class="fancyvrb" /><a 
7954  id="x1-101076r38"></a><span 
7955 class="cmr-6">38</span><span 
7956 class="cmtt-8">&#x00A0;</span><span 
7957 class="cmtt-8">&#x00A0;</span>
7958 <br class="fancyvrb" /><a 
7959  id="x1-101078r39"></a><span 
7960 class="cmr-6">39</span><span 
7961 class="cmtt-8">&#x00A0;</span><span 
7962 class="cmtt-8">&#x00A0;</span><span 
7963 class="cmtt-8">&#x00A0;</span><span 
7964 class="cmtt-8">&#x00A0;</span><span 
7965 class="cmtt-8">&#x00A0;</span><span 
7966 class="cmtt-8">&#x00A0;</span><span 
7967 class="cmtt-8">&#x00A0;</span><span 
7968 class="cmtt-8">&#x00A0;</span><span 
7969 class="cmtt-8">&#x00A0;</span><span 
7970 class="cmtt-8">&#x00A0;</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="cmtt-8">&#x00A0;</span><span 
7980 class="cmtt-8">&#x00A0;</span><span 
7981 class="cmtt-8">&#x00A0;</span><span 
7982 class="cmtt-8">&#x00A0;</span><span 
7983 class="cmtt-8">&#x00A0;</span><span 
7984 class="cmtt-8">&#x00A0;</span><span 
7985 class="cmtt-8">&#x00A0;</span><span 
7986 class="cmtt-8">&#x00A0;22)</span><span 
7987 class="cmtt-8">&#x00A0;vector</span><span 
7988 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
7989 class="cmtt-8">&#x00A0;element</span><span 
7990 class="cmtt-8">&#x00A0;[i]</span><span 
7991 class="cmtt-8">&#x00A0;=</span><span 
7992 class="cmtt-8">&#x00A0;[val]</span><span 
7993 class="cmtt-8">&#x00A0;-</span><span 
7994 class="cmtt-8">&#x00A0;[lowroom]</span><span 
7995 class="cmtt-8">&#x00A0;+</span><span 
7996 class="cmtt-8">&#x00A0;[predicted]</span>
7997 <br class="fancyvrb" /><a 
7998  id="x1-101080r40"></a><span 
7999 class="cmr-6">40</span><span 
8000 class="cmtt-8">&#x00A0;</span><span 
8001 class="cmtt-8">&#x00A0;</span>
8002 <br class="fancyvrb" /><a 
8003  id="x1-101082r41"></a><span 
8004 class="cmr-6">41</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="cmsy-8">}</span><span 
8014 class="cmtt-8">&#x00A0;else</span><span 
8015 class="cmtt-8">&#x00A0;[highroom]</span><span 
8016 class="cmtt-8">&#x00A0;is</span><span 
8017 class="cmtt-8">&#x00A0;not</span><span 
8018 class="cmtt-8">&#x00A0;greater</span><span 
8019 class="cmtt-8">&#x00A0;than</span><span 
8020 class="cmtt-8">&#x00A0;[lowroom]</span><span 
8021 class="cmtt-8">&#x00A0;</span><span 
8022 class="cmsy-8">{</span>
8023 <br class="fancyvrb" /><a 
8024  id="x1-101084r42"></a><span 
8025 class="cmr-6">42</span><span 
8026 class="cmtt-8">&#x00A0;</span><span 
8027 class="cmtt-8">&#x00A0;</span>
8028 <br class="fancyvrb" /><a 
8029  id="x1-101086r43"></a><span 
8030 class="cmr-6">43</span><span 
8031 class="cmtt-8">&#x00A0;</span><span 
8032 class="cmtt-8">&#x00A0;</span><span 
8033 class="cmtt-8">&#x00A0;</span><span 
8034 class="cmtt-8">&#x00A0;</span><span 
8035 class="cmtt-8">&#x00A0;</span><span 
8036 class="cmtt-8">&#x00A0;</span><span 
8037 class="cmtt-8">&#x00A0;</span><span 
8038 class="cmtt-8">&#x00A0;</span><span 
8039 class="cmtt-8">&#x00A0;</span><span 
8040 class="cmtt-8">&#x00A0;</span><span 
8041 class="cmtt-8">&#x00A0;</span><span 
8042 class="cmtt-8">&#x00A0;</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;23)</span><span 
8057 class="cmtt-8">&#x00A0;vector</span><span 
8058 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
8059 class="cmtt-8">&#x00A0;element</span><span 
8060 class="cmtt-8">&#x00A0;[i]</span><span 
8061 class="cmtt-8">&#x00A0;=</span><span 
8062 class="cmtt-8">&#x00A0;[predicted]</span><span 
8063 class="cmtt-8">&#x00A0;-</span><span 
8064 class="cmtt-8">&#x00A0;[val]</span><span 
8065 class="cmtt-8">&#x00A0;+</span><span 
8066 class="cmtt-8">&#x00A0;[highroom]</span><span 
8067 class="cmtt-8">&#x00A0;-</span><span 
8068 class="cmtt-8">&#x00A0;1</span>
8069 <br class="fancyvrb" /><a 
8070  id="x1-101088r44"></a><span 
8071 class="cmr-6">44</span><span 
8072 class="cmtt-8">&#x00A0;</span><span 
8073 class="cmtt-8">&#x00A0;</span>
8074 <br class="fancyvrb" /><a 
8075  id="x1-101090r45"></a><span 
8076 class="cmr-6">45</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="cmtt-8">&#x00A0;</span><span 
8095 class="cmtt-8">&#x00A0;</span><span 
8096 class="cmtt-8">&#x00A0;</span><span 
8097 class="cmtt-8">&#x00A0;</span><span 
8098 class="cmtt-8">&#x00A0;</span><span 
8099 class="cmtt-8">&#x00A0;</span><span 
8100 class="cmtt-8">&#x00A0;</span><span 
8101 class="cmsy-8">}</span>
8102 <br class="fancyvrb" /><a 
8103  id="x1-101092r46"></a><span 
8104 class="cmr-6">46</span><span 
8105 class="cmtt-8">&#x00A0;</span><span 
8106 class="cmtt-8">&#x00A0;</span>
8107 <br class="fancyvrb" /><a 
8108  id="x1-101094r47"></a><span 
8109 class="cmr-6">47</span><span 
8110 class="cmtt-8">&#x00A0;</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;</span><span 
8115 class="cmtt-8">&#x00A0;</span><span 
8116 class="cmtt-8">&#x00A0;</span><span 
8117 class="cmtt-8">&#x00A0;</span><span 
8118 class="cmtt-8">&#x00A0;</span><span 
8119 class="cmtt-8">&#x00A0;</span><span 
8120 class="cmtt-8">&#x00A0;</span><span 
8121 class="cmtt-8">&#x00A0;</span><span 
8122 class="cmtt-8">&#x00A0;</span><span 
8123 class="cmtt-8">&#x00A0;</span><span 
8124 class="cmtt-8">&#x00A0;</span><span 
8125 class="cmtt-8">&#x00A0;</span><span 
8126 class="cmtt-8">&#x00A0;</span><span 
8127 class="cmtt-8">&#x00A0;</span><span 
8128 class="cmsy-8">}</span><span 
8129 class="cmtt-8">&#x00A0;else</span><span 
8130 class="cmtt-8">&#x00A0;[val]</span><span 
8131 class="cmtt-8">&#x00A0;is</span><span 
8132 class="cmtt-8">&#x00A0;less</span><span 
8133 class="cmtt-8">&#x00A0;than</span><span 
8134 class="cmtt-8">&#x00A0;[room]</span><span 
8135 class="cmtt-8">&#x00A0;</span><span 
8136 class="cmsy-8">{</span>
8137 <br class="fancyvrb" /><a 
8138  id="x1-101096r48"></a><span 
8139 class="cmr-6">48</span><span 
8140 class="cmtt-8">&#x00A0;</span><span 
8141 class="cmtt-8">&#x00A0;</span>
8142 <br class="fancyvrb" /><a 
8143  id="x1-101098r49"></a><span 
8144 class="cmr-6">49</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;</span><span 
8155 class="cmtt-8">&#x00A0;</span><span 
8156 class="cmtt-8">&#x00A0;</span><span 
8157 class="cmtt-8">&#x00A0;</span><span 
8158 class="cmtt-8">&#x00A0;</span><span 
8159 class="cmtt-8">&#x00A0;</span><span 
8160 class="cmtt-8">&#x00A0;</span><span 
8161 class="cmtt-8">&#x00A0;</span><span 
8162 class="cmtt-8">&#x00A0;</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;24)</span><span 
8167 class="cmtt-8">&#x00A0;if</span><span 
8168 class="cmtt-8">&#x00A0;([val]</span><span 
8169 class="cmtt-8">&#x00A0;is</span><span 
8170 class="cmtt-8">&#x00A0;odd)</span><span 
8171 class="cmtt-8">&#x00A0;</span><span 
8172 class="cmsy-8">{</span>
8173 <br class="fancyvrb" /><a 
8174  id="x1-101100r50"></a><span 
8175 class="cmr-6">50</span><span 
8176 class="cmtt-8">&#x00A0;</span><span 
8177 class="cmtt-8">&#x00A0;</span>
8178 <br class="fancyvrb" /><a 
8179  id="x1-101102r51"></a><span 
8180 class="cmr-6">51</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;</span><span 
8193 class="cmtt-8">&#x00A0;</span><span 
8194 class="cmtt-8">&#x00A0;</span><span 
8195 class="cmtt-8">&#x00A0;</span><span 
8196 class="cmtt-8">&#x00A0;</span><span 
8197 class="cmtt-8">&#x00A0;</span><span 
8198 class="cmtt-8">&#x00A0;</span><span 
8199 class="cmtt-8">&#x00A0;</span><span 
8200 class="cmtt-8">&#x00A0;</span><span 
8201 class="cmtt-8">&#x00A0;</span><span 
8202 class="cmtt-8">&#x00A0;</span><span 
8203 class="cmtt-8">&#x00A0;</span><span 
8204 class="cmtt-8">&#x00A0;</span><span 
8205 class="cmtt-8">&#x00A0;</span><span 
8206 class="cmtt-8">&#x00A0;25)</span><span 
8207 class="cmtt-8">&#x00A0;vector</span><span 
8208 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
8209 class="cmtt-8">&#x00A0;element</span><span 
8210 class="cmtt-8">&#x00A0;[i]</span><span 
8211 class="cmtt-8">&#x00A0;=</span>
8212 <br class="fancyvrb" /><a 
8213  id="x1-101104r52"></a><span 
8214 class="cmr-6">52</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="cmtt-8">&#x00A0;</span><span 
8237 class="cmtt-8">&#x00A0;</span><span 
8238 class="cmtt-8">&#x00A0;</span><span 
8239 class="cmtt-8">&#x00A0;</span><span 
8240 class="cmtt-8">&#x00A0;</span><span 
8241 class="cmtt-8">&#x00A0;</span><span 
8242 class="cmtt-8">&#x00A0;</span><span 
8243 class="cmtt-8">&#x00A0;</span><span 
8244 class="cmtt-8">&#x00A0;[predicted]</span><span 
8245 class="cmtt-8">&#x00A0;-</span><span 
8246 class="cmtt-8">&#x00A0;(([val]</span><span 
8247 class="cmtt-8">&#x00A0;+</span><span 
8248 class="cmtt-8">&#x00A0;1)</span><span 
8249 class="cmtt-8">&#x00A0;divided</span><span 
8250 class="cmtt-8">&#x00A0;by</span><span 
8251 class="cmtt-8">&#x00A0;</span><span 
8252 class="cmtt-8">&#x00A0;2</span><span 
8253 class="cmtt-8">&#x00A0;using</span><span 
8254 class="cmtt-8">&#x00A0;integer</span><span 
8255 class="cmtt-8">&#x00A0;division)</span>
8256 <br class="fancyvrb" /><a 
8257  id="x1-101106r53"></a><span 
8258 class="cmr-6">53</span><span 
8259 class="cmtt-8">&#x00A0;</span><span 
8260 class="cmtt-8">&#x00A0;</span>
8261 <br class="fancyvrb" /><a 
8262  id="x1-101108r54"></a><span 
8263 class="cmr-6">54</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;</span><span 
8277 class="cmtt-8">&#x00A0;</span><span 
8278 class="cmtt-8">&#x00A0;</span><span 
8279 class="cmtt-8">&#x00A0;</span><span 
8280 class="cmtt-8">&#x00A0;</span><span 
8281 class="cmtt-8">&#x00A0;</span><span 
8282 class="cmtt-8">&#x00A0;</span><span 
8283 class="cmtt-8">&#x00A0;</span><span 
8284 class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><span 
8289 class="cmtt-8">&#x00A0;else</span><span 
8290 class="cmtt-8">&#x00A0;[val]</span><span 
8291 class="cmtt-8">&#x00A0;is</span><span 
8292 class="cmtt-8">&#x00A0;even</span><span 
8293 class="cmtt-8">&#x00A0;</span><span 
8294 class="cmsy-8">{</span>
8295 <br class="fancyvrb" /><a 
8296  id="x1-101110r55"></a><span 
8297 class="cmr-6">55</span><span 
8298 class="cmtt-8">&#x00A0;</span><span 
8299 class="cmtt-8">&#x00A0;</span>
8300 <br class="fancyvrb" /><a 
8301  id="x1-101112r56"></a><span 
8302 class="cmr-6">56</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;</span><span 
8315 class="cmtt-8">&#x00A0;</span><span 
8316 class="cmtt-8">&#x00A0;</span><span 
8317 class="cmtt-8">&#x00A0;</span><span 
8318 class="cmtt-8">&#x00A0;</span><span 
8319 class="cmtt-8">&#x00A0;</span><span 
8320 class="cmtt-8">&#x00A0;</span><span 
8321 class="cmtt-8">&#x00A0;</span><span 
8322 class="cmtt-8">&#x00A0;</span><span 
8323 class="cmtt-8">&#x00A0;</span><span 
8324 class="cmtt-8">&#x00A0;</span><span 
8325 class="cmtt-8">&#x00A0;</span><span 
8326 class="cmtt-8">&#x00A0;</span><span 
8327 class="cmtt-8">&#x00A0;</span><span 
8328 class="cmtt-8">&#x00A0;26)</span><span 
8329 class="cmtt-8">&#x00A0;vector</span><span 
8330 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
8331 class="cmtt-8">&#x00A0;element</span><span 
8332 class="cmtt-8">&#x00A0;[i]</span><span 
8333 class="cmtt-8">&#x00A0;=</span>
8334 <br class="fancyvrb" /><a 
8335  id="x1-101114r57"></a><span 
8336 class="cmr-6">57</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="cmtt-8">&#x00A0;</span><span 
8355 class="cmtt-8">&#x00A0;</span><span 
8356 class="cmtt-8">&#x00A0;</span><span 
8357 class="cmtt-8">&#x00A0;</span><span 
8358 class="cmtt-8">&#x00A0;</span><span 
8359 class="cmtt-8">&#x00A0;</span><span 
8360 class="cmtt-8">&#x00A0;</span><span 
8361 class="cmtt-8">&#x00A0;</span><span 
8362 class="cmtt-8">&#x00A0;</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;[predicted]</span><span 
8367 class="cmtt-8">&#x00A0;+</span><span 
8368 class="cmtt-8">&#x00A0;([val]</span><span 
8369 class="cmtt-8">&#x00A0;/</span><span 
8370 class="cmtt-8">&#x00A0;2</span><span 
8371 class="cmtt-8">&#x00A0;using</span><span 
8372 class="cmtt-8">&#x00A0;integer</span><span 
8373 class="cmtt-8">&#x00A0;division)</span>
8374 <br class="fancyvrb" /><a 
8375  id="x1-101116r58"></a><span 
8376 class="cmr-6">58</span><span 
8377 class="cmtt-8">&#x00A0;</span><span 
8378 class="cmtt-8">&#x00A0;</span>
8379 <br class="fancyvrb" /><a 
8380  id="x1-101118r59"></a><span 
8381 class="cmr-6">59</span><span 
8382 class="cmtt-8">&#x00A0;</span><span 
8383 class="cmtt-8">&#x00A0;</span><span 
8384 class="cmtt-8">&#x00A0;</span><span 
8385 class="cmtt-8">&#x00A0;</span><span 
8386 class="cmtt-8">&#x00A0;</span><span 
8387 class="cmtt-8">&#x00A0;</span><span 
8388 class="cmtt-8">&#x00A0;</span><span 
8389 class="cmtt-8">&#x00A0;</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="cmtt-8">&#x00A0;</span><span 
8403 class="cmtt-8">&#x00A0;</span><span 
8404 class="cmtt-8">&#x00A0;</span><span 
8405 class="cmtt-8">&#x00A0;</span><span 
8406 class="cmsy-8">}</span>
8407 <br class="fancyvrb" /><a 
8408  id="x1-101120r60"></a><span 
8409 class="cmr-6">60</span><span 
8410 class="cmtt-8">&#x00A0;</span><span 
8411 class="cmtt-8">&#x00A0;</span>
8412 <br class="fancyvrb" /><a 
8413  id="x1-101122r61"></a><span 
8414 class="cmr-6">61</span><span 
8415 class="cmtt-8">&#x00A0;</span><span 
8416 class="cmtt-8">&#x00A0;</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;</span><span 
8431 class="cmtt-8">&#x00A0;</span><span 
8432 class="cmtt-8">&#x00A0;</span><span 
8433 class="cmsy-8">}</span>
8434 <br class="fancyvrb" /><a 
8435  id="x1-101124r62"></a><span 
8436 class="cmr-6">62</span><span 
8437 class="cmtt-8">&#x00A0;</span><span 
8438 class="cmtt-8">&#x00A0;</span>
8439 <br class="fancyvrb" /><a 
8440  id="x1-101126r63"></a><span 
8441 class="cmr-6">63</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;</span><span 
8454 class="cmsy-8">}</span><span 
8455 class="cmtt-8">&#x00A0;else</span><span 
8456 class="cmtt-8">&#x00A0;[val]</span><span 
8457 class="cmtt-8">&#x00A0;is</span><span 
8458 class="cmtt-8">&#x00A0;zero</span><span 
8459 class="cmtt-8">&#x00A0;</span><span 
8460 class="cmsy-8">{</span>
8461 <br class="fancyvrb" /><a 
8462  id="x1-101128r64"></a><span 
8463 class="cmr-6">64</span><span 
8464 class="cmtt-8">&#x00A0;</span><span 
8465 class="cmtt-8">&#x00A0;</span>
8466 <br class="fancyvrb" /><a 
8467  id="x1-101130r65"></a><span 
8468 class="cmr-6">65</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="cmtt-8">&#x00A0;</span><span 
8481 class="cmtt-8">&#x00A0;</span><span 
8482 class="cmtt-8">&#x00A0;27)</span><span 
8483 class="cmtt-8">&#x00A0;vector</span><span 
8484 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span 
8485 class="cmtt-8">&#x00A0;element</span><span 
8486 class="cmtt-8">&#x00A0;[i]</span><span 
8487 class="cmtt-8">&#x00A0;=</span><span 
8488 class="cmtt-8">&#x00A0;unset</span>
8489                                                                                         
8490
8491                                                                                         
8492 <br class="fancyvrb" /><a 
8493  id="x1-101132r66"></a><span 
8494 class="cmr-6">66</span><span 
8495 class="cmtt-8">&#x00A0;</span><span 
8496 class="cmtt-8">&#x00A0;</span><span 
8497 class="cmtt-8">&#x00A0;</span><span 
8498 class="cmtt-8">&#x00A0;</span><span 
8499 class="cmtt-8">&#x00A0;</span><span 
8500 class="cmtt-8">&#x00A0;</span><span 
8501 class="cmtt-8">&#x00A0;</span><span 
8502 class="cmtt-8">&#x00A0;</span><span 
8503 class="cmtt-8">&#x00A0;</span><span 
8504 class="cmtt-8">&#x00A0;</span><span 
8505 class="cmtt-8">&#x00A0;</span><span 
8506 class="cmtt-8">&#x00A0;</span><span 
8507 class="cmtt-8">&#x00A0;</span><span 
8508 class="cmtt-8">&#x00A0;28)</span><span 
8509 class="cmtt-8">&#x00A0;vector</span><span 
8510 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span 
8511 class="cmtt-8">&#x00A0;element</span><span 
8512 class="cmtt-8">&#x00A0;[i]</span><span 
8513 class="cmtt-8">&#x00A0;=</span><span 
8514 class="cmtt-8">&#x00A0;[predicted]</span>
8515 <br class="fancyvrb" /><a 
8516  id="x1-101134r67"></a><span 
8517 class="cmr-6">67</span><span 
8518 class="cmtt-8">&#x00A0;</span><span 
8519 class="cmtt-8">&#x00A0;</span>
8520 <br class="fancyvrb" /><a 
8521  id="x1-101136r68"></a><span 
8522 class="cmr-6">68</span><span 
8523 class="cmtt-8">&#x00A0;</span><span 
8524 class="cmtt-8">&#x00A0;</span><span 
8525 class="cmtt-8">&#x00A0;</span><span 
8526 class="cmtt-8">&#x00A0;</span><span 
8527 class="cmtt-8">&#x00A0;</span><span 
8528 class="cmtt-8">&#x00A0;</span><span 
8529 class="cmtt-8">&#x00A0;</span><span 
8530 class="cmtt-8">&#x00A0;</span><span 
8531 class="cmtt-8">&#x00A0;</span><span 
8532 class="cmtt-8">&#x00A0;</span><span 
8533 class="cmtt-8">&#x00A0;</span><span 
8534 class="cmtt-8">&#x00A0;</span><span 
8535 class="cmsy-8">}</span>
8536 <br class="fancyvrb" /><a 
8537  id="x1-101138r69"></a><span 
8538 class="cmr-6">69</span><span 
8539 class="cmtt-8">&#x00A0;</span><span 
8540 class="cmtt-8">&#x00A0;</span>
8541 <br class="fancyvrb" /><a 
8542  id="x1-101140r70"></a><span 
8543 class="cmr-6">70</span><span 
8544 class="cmtt-8">&#x00A0;</span><span 
8545 class="cmtt-8">&#x00A0;</span><span 
8546 class="cmtt-8">&#x00A0;</span><span 
8547 class="cmtt-8">&#x00A0;</span><span 
8548 class="cmtt-8">&#x00A0;</span><span 
8549 class="cmtt-8">&#x00A0;</span><span 
8550 class="cmtt-8">&#x00A0;</span><span 
8551 class="cmsy-8">}</span>
8552 <br class="fancyvrb" /><a 
8553  id="x1-101142r71"></a><span 
8554 class="cmr-6">71</span><span 
8555 class="cmtt-8">&#x00A0;</span><span 
8556 class="cmtt-8">&#x00A0;</span>
8557 <br class="fancyvrb" /><a 
8558  id="x1-101144r72"></a><span 
8559 class="cmr-6">72</span><span 
8560 class="cmtt-8">&#x00A0;</span><span 
8561 class="cmtt-8">&#x00A0;</span><span 
8562 class="cmtt-8">&#x00A0;29)</span><span 
8563 class="cmtt-8">&#x00A0;done</span>
8564 <br class="fancyvrb" /><a 
8565  id="x1-101146r73"></a><span 
8566 class="cmr-6">73</span><span 
8567 class="cmtt-8">&#x00A0;</span><span 
8568 class="cmtt-8">&#x00A0;</span>
8569 </div>
8570       </dd><dt class="description">
8571 <span 
8572 class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd 
8573 class="description">
8574       <!--l. 351--><p class="noindent" >Curve synthesis generates a return vector <span 
8575 class="cmtt-12">[floor] </span>of length <span 
8576 class="cmtt-12">[n] </span>(where <span 
8577 class="cmtt-12">[n] </span>is provided by
8578       the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
8579       <span 
8580 class="cmtt-12">[floor1_X_list]</span>, <span 
8581 class="cmtt-12">[floor1_final_Y] </span>and <span 
8582 class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
8583       [floor1_multiplier] and [floor1_values] values.
8584       <!--l. 358--><p class="noindent" >Decode begins by sorting the scalars from vectors <span 
8585 class="cmtt-12">[floor1_X_list]</span>, <span 
8586 class="cmtt-12">[floor1_final_Y] </span>and
8587       <span 
8588 class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span 
8589 class="cmtt-12">[floor1_X_list]&#8217;</span>, <span 
8590 class="cmtt-12">[floor1_final_Y]&#8217;</span>
8591       and <span 
8592 class="cmtt-12">[floor1_step2_flag]&#8217; </span>according to ascending sort order of the values in
8593       <span 
8594 class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span 
8595 class="cmtt-12">[floor1_X_list] </span>and then apply the same
8596       permutation to elements of the other two vectors so that the X, Y and step2_flag values
8597       still match.
8598       <!--l. 368--><p class="noindent" >Then compute the final curve in one pass:
8599       <!--l. 370--><p class="noindent" >
8600       <div class="fancyvrb" id="fancyvrb32">
8601 <a 
8602  id="x1-101148r1"></a><span 
8603 class="cmr-6">1</span><span 
8604 class="cmtt-8">&#x00A0;</span><span 
8605 class="cmtt-8">&#x00A0;</span><span 
8606 class="cmtt-8">&#x00A0;</span><span 
8607 class="cmtt-8">&#x00A0;1)</span><span 
8608 class="cmtt-8">&#x00A0;[hx]</span><span 
8609 class="cmtt-8">&#x00A0;=</span><span 
8610 class="cmtt-8">&#x00A0;0</span>
8611 <br class="fancyvrb" /><a 
8612  id="x1-101150r2"></a><span 
8613 class="cmr-6">2</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;2)</span><span 
8618 class="cmtt-8">&#x00A0;[lx]</span><span 
8619 class="cmtt-8">&#x00A0;=</span><span 
8620 class="cmtt-8">&#x00A0;0</span>
8621 <br class="fancyvrb" /><a 
8622  id="x1-101152r3"></a><span 
8623 class="cmr-6">3</span><span 
8624 class="cmtt-8">&#x00A0;</span><span 
8625 class="cmtt-8">&#x00A0;</span><span 
8626 class="cmtt-8">&#x00A0;</span><span 
8627 class="cmtt-8">&#x00A0;3)</span><span 
8628 class="cmtt-8">&#x00A0;[ly]</span><span 
8629 class="cmtt-8">&#x00A0;=</span><span 
8630 class="cmtt-8">&#x00A0;vector</span><span 
8631 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span 
8632 class="cmtt-8">&#x00A0;element</span><span 
8633 class="cmtt-8">&#x00A0;[0]</span><span 
8634 class="cmtt-8">&#x00A0;*</span><span 
8635 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
8636 <br class="fancyvrb" /><a 
8637  id="x1-101154r4"></a><span 
8638 class="cmr-6">4</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;4)</span><span 
8643 class="cmtt-8">&#x00A0;iterate</span><span 
8644 class="cmtt-8">&#x00A0;[i]</span><span 
8645 class="cmtt-8">&#x00A0;over</span><span 
8646 class="cmtt-8">&#x00A0;the</span><span 
8647 class="cmtt-8">&#x00A0;range</span><span 
8648 class="cmtt-8">&#x00A0;1</span><span 
8649 class="cmtt-8">&#x00A0;...</span><span 
8650 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span 
8651 class="cmtt-8">&#x00A0;</span><span 
8652 class="cmsy-8">{</span>
8653 <br class="fancyvrb" /><a 
8654  id="x1-101156r5"></a><span 
8655 class="cmr-6">5</span><span 
8656 class="cmtt-8">&#x00A0;</span><span 
8657 class="cmtt-8">&#x00A0;</span>
8658 <br class="fancyvrb" /><a 
8659  id="x1-101158r6"></a><span 
8660 class="cmr-6">6</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;</span><span 
8669 class="cmtt-8">&#x00A0;5)</span><span 
8670 class="cmtt-8">&#x00A0;if</span><span 
8671 class="cmtt-8">&#x00A0;(</span><span 
8672 class="cmtt-8">&#x00A0;[floor1_step2_flag]&#8217;</span><span 
8673 class="cmtt-8">&#x00A0;element</span><span 
8674 class="cmtt-8">&#x00A0;[i]</span><span 
8675 class="cmtt-8">&#x00A0;is</span><span 
8676 class="cmtt-8">&#x00A0;set</span><span 
8677 class="cmtt-8">&#x00A0;)</span><span 
8678 class="cmtt-8">&#x00A0;</span><span 
8679 class="cmsy-8">{</span>
8680 <br class="fancyvrb" /><a 
8681  id="x1-101160r7"></a><span 
8682 class="cmr-6">7</span><span 
8683 class="cmtt-8">&#x00A0;</span><span 
8684 class="cmtt-8">&#x00A0;</span>
8685 <br class="fancyvrb" /><a 
8686  id="x1-101162r8"></a><span 
8687 class="cmr-6">8</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;</span><span 
8692 class="cmtt-8">&#x00A0;</span><span 
8693 class="cmtt-8">&#x00A0;</span><span 
8694 class="cmtt-8">&#x00A0;</span><span 
8695 class="cmtt-8">&#x00A0;</span><span 
8696 class="cmtt-8">&#x00A0;</span><span 
8697 class="cmtt-8">&#x00A0;</span><span 
8698 class="cmtt-8">&#x00A0;</span><span 
8699 class="cmtt-8">&#x00A0;</span><span 
8700 class="cmtt-8">&#x00A0;</span><span 
8701 class="cmtt-8">&#x00A0;</span><span 
8702 class="cmtt-8">&#x00A0;6)</span><span 
8703 class="cmtt-8">&#x00A0;[hy]</span><span 
8704 class="cmtt-8">&#x00A0;=</span><span 
8705 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span 
8706 class="cmtt-8">&#x00A0;element</span><span 
8707 class="cmtt-8">&#x00A0;[i]</span><span 
8708 class="cmtt-8">&#x00A0;*</span><span 
8709 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
8710 <br class="fancyvrb" /><a 
8711  id="x1-101164r9"></a><span 
8712 class="cmr-6">9</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;</span><span 
8720 class="cmtt-8">&#x00A0;7)</span><span 
8721 class="cmtt-8">&#x00A0;[hx]</span><span 
8722 class="cmtt-8">&#x00A0;=</span><span 
8723 class="cmtt-8">&#x00A0;[floor1_X_list]&#8217;</span><span 
8724 class="cmtt-8">&#x00A0;element</span><span 
8725 class="cmtt-8">&#x00A0;[i]</span>
8726 <br class="fancyvrb" /><a 
8727  id="x1-101166r10"></a><span 
8728 class="cmr-6">10</span><span 
8729 class="cmtt-8">&#x00A0;</span><span 
8730 class="cmtt-8">&#x00A0;</span><span 
8731 class="cmtt-8">&#x00A0;</span><span 
8732 class="cmtt-8">&#x00A0;</span><span 
8733 class="cmtt-8">&#x00A0;</span><span 
8734 class="cmtt-8">&#x00A0;</span><span 
8735 class="cmtt-8">&#x00A0;</span><span 
8736 class="cmtt-8">&#x00A0;</span><span 
8737 class="cmtt-8">&#x00A0;</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;8)</span><span 
8744 class="cmtt-8">&#x00A0;</span><a 
8745 href="#x1-1230009.2.7"><span 
8746 class="cmtt-8">render_line</span></a><span 
8747 class="cmtt-8">(</span><span 
8748 class="cmtt-8">&#x00A0;[lx],</span><span 
8749 class="cmtt-8">&#x00A0;[ly],</span><span 
8750 class="cmtt-8">&#x00A0;[hx],</span><span 
8751 class="cmtt-8">&#x00A0;[hy],</span><span 
8752 class="cmtt-8">&#x00A0;[floor]</span><span 
8753 class="cmtt-8">&#x00A0;)</span>
8754 <br class="fancyvrb" /><a 
8755  id="x1-101168r11"></a><span 
8756 class="cmr-6">11</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="cmtt-8">&#x00A0;</span><span 
8762 class="cmtt-8">&#x00A0;</span><span 
8763 class="cmtt-8">&#x00A0;</span><span 
8764 class="cmtt-8">&#x00A0;</span><span 
8765 class="cmtt-8">&#x00A0;</span><span 
8766 class="cmtt-8">&#x00A0;</span><span 
8767 class="cmtt-8">&#x00A0;</span><span 
8768 class="cmtt-8">&#x00A0;</span><span 
8769 class="cmtt-8">&#x00A0;</span><span 
8770 class="cmtt-8">&#x00A0;</span><span 
8771 class="cmtt-8">&#x00A0;9)</span><span 
8772 class="cmtt-8">&#x00A0;[lx]</span><span 
8773 class="cmtt-8">&#x00A0;=</span><span 
8774 class="cmtt-8">&#x00A0;[hx]</span>
8775 <br class="fancyvrb" /><a 
8776  id="x1-101170r12"></a><span 
8777 class="cmr-6">12</span><span 
8778 class="cmtt-8">&#x00A0;</span><span 
8779 class="cmtt-8">&#x00A0;    </span><span 
8780 class="cmtt-8">&#x00A0;</span><span 
8781 class="cmtt-8">&#x00A0;</span><span 
8782 class="cmtt-8">&#x00A0;</span><span 
8783 class="cmtt-8">&#x00A0;10)</span><span 
8784 class="cmtt-8">&#x00A0;[ly]</span><span 
8785 class="cmtt-8">&#x00A0;=</span><span 
8786 class="cmtt-8">&#x00A0;[hy]</span>
8787 <br class="fancyvrb" /><a 
8788  id="x1-101172r13"></a><span 
8789 class="cmr-6">13</span><span 
8790 class="cmtt-8">&#x00A0;</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;</span><span 
8801 class="cmtt-8">&#x00A0;</span><span 
8802 class="cmsy-8">}</span>
8803 <br class="fancyvrb" /><a 
8804  id="x1-101174r14"></a><span 
8805 class="cmr-6">14</span><span 
8806 class="cmtt-8">&#x00A0;</span><span 
8807 class="cmtt-8">&#x00A0;</span><span 
8808 class="cmtt-8">&#x00A0;</span><span 
8809 class="cmtt-8">&#x00A0;</span><span 
8810 class="cmtt-8">&#x00A0;</span><span 
8811 class="cmtt-8">&#x00A0;</span><span 
8812 class="cmtt-8">&#x00A0;</span><span 
8813 class="cmsy-8">}</span>
8814 <br class="fancyvrb" /><a 
8815  id="x1-101176r15"></a><span 
8816 class="cmr-6">15</span><span 
8817 class="cmtt-8">&#x00A0;</span><span 
8818 class="cmtt-8">&#x00A0;</span>
8819 <br class="fancyvrb" /><a 
8820  id="x1-101178r16"></a><span 
8821 class="cmr-6">16</span><span 
8822 class="cmtt-8">&#x00A0;</span><span 
8823 class="cmtt-8">&#x00A0;</span><span 
8824 class="cmtt-8">&#x00A0;11)</span><span 
8825 class="cmtt-8">&#x00A0;if</span><span 
8826 class="cmtt-8">&#x00A0;(</span><span 
8827 class="cmtt-8">&#x00A0;[hx]</span><span 
8828 class="cmtt-8">&#x00A0;is</span><span 
8829 class="cmtt-8">&#x00A0;less</span><span 
8830 class="cmtt-8">&#x00A0;than</span><span 
8831 class="cmtt-8">&#x00A0;[n]</span><span 
8832 class="cmtt-8">&#x00A0;)</span><span 
8833 class="cmtt-8">&#x00A0;</span><span 
8834 class="cmsy-8">{</span>
8835 <br class="fancyvrb" /><a 
8836  id="x1-101180r17"></a><span 
8837 class="cmr-6">17</span><span 
8838 class="cmtt-8">&#x00A0;</span><span 
8839 class="cmtt-8">&#x00A0;</span>
8840 <br class="fancyvrb" /><a 
8841  id="x1-101182r18"></a><span 
8842 class="cmr-6">18</span><span 
8843 class="cmtt-8">&#x00A0;</span><span 
8844 class="cmtt-8">&#x00A0;</span><span 
8845 class="cmtt-8">&#x00A0;</span><span 
8846 class="cmtt-8">&#x00A0;</span><span 
8847 class="cmtt-8">&#x00A0;</span><span 
8848 class="cmtt-8">&#x00A0;</span><span 
8849 class="cmtt-8">&#x00A0;</span><span 
8850 class="cmtt-8">&#x00A0;</span><span 
8851 class="cmtt-8">&#x00A0;</span><span 
8852 class="cmtt-8">&#x00A0;12)</span><span 
8853 class="cmtt-8">&#x00A0;</span><a 
8854 href="#x1-1230009.2.7"><span 
8855 class="cmtt-8">render_line</span></a><span 
8856 class="cmtt-8">(</span><span 
8857 class="cmtt-8">&#x00A0;[hx],</span><span 
8858 class="cmtt-8">&#x00A0;[hy],</span><span 
8859 class="cmtt-8">&#x00A0;[n],</span><span 
8860 class="cmtt-8">&#x00A0;[hy],</span><span 
8861 class="cmtt-8">&#x00A0;[floor]</span><span 
8862 class="cmtt-8">&#x00A0;)</span>
8863 <br class="fancyvrb" /><a 
8864  id="x1-101184r19"></a><span 
8865 class="cmr-6">19</span><span 
8866 class="cmtt-8">&#x00A0;</span><span 
8867 class="cmtt-8">&#x00A0;</span>
8868 <br class="fancyvrb" /><a 
8869  id="x1-101186r20"></a><span 
8870 class="cmr-6">20</span><span 
8871 class="cmtt-8">&#x00A0;</span><span 
8872 class="cmtt-8">&#x00A0;</span><span 
8873 class="cmtt-8">&#x00A0;</span><span 
8874 class="cmtt-8">&#x00A0;</span><span 
8875 class="cmtt-8">&#x00A0;</span><span 
8876 class="cmtt-8">&#x00A0;</span><span 
8877 class="cmtt-8">&#x00A0;</span><span 
8878 class="cmsy-8">}</span>
8879 <br class="fancyvrb" /><a 
8880  id="x1-101188r21"></a><span 
8881 class="cmr-6">21</span><span 
8882 class="cmtt-8">&#x00A0;</span><span 
8883 class="cmtt-8">&#x00A0;</span>
8884 <br class="fancyvrb" /><a 
8885  id="x1-101190r22"></a><span 
8886 class="cmr-6">22</span><span 
8887 class="cmtt-8">&#x00A0;</span><span 
8888 class="cmtt-8">&#x00A0;</span><span 
8889 class="cmtt-8">&#x00A0;13)</span><span 
8890 class="cmtt-8">&#x00A0;if</span><span 
8891 class="cmtt-8">&#x00A0;(</span><span 
8892 class="cmtt-8">&#x00A0;[hx]</span><span 
8893 class="cmtt-8">&#x00A0;is</span><span 
8894 class="cmtt-8">&#x00A0;greater</span><span 
8895 class="cmtt-8">&#x00A0;than</span><span 
8896 class="cmtt-8">&#x00A0;[n]</span><span 
8897 class="cmtt-8">&#x00A0;)</span><span 
8898 class="cmtt-8">&#x00A0;</span><span 
8899 class="cmsy-8">{</span>
8900 <br class="fancyvrb" /><a 
8901  id="x1-101192r23"></a><span 
8902 class="cmr-6">23</span><span 
8903 class="cmtt-8">&#x00A0;</span><span 
8904 class="cmtt-8">&#x00A0;</span>
8905 <br class="fancyvrb" /><a 
8906  id="x1-101194r24"></a><span 
8907 class="cmr-6">24</span><span 
8908 class="cmtt-8">&#x00A0;</span><span 
8909 class="cmtt-8">&#x00A0;</span><span 
8910 class="cmtt-8">&#x00A0;</span><span 
8911 class="cmtt-8">&#x00A0;</span><span 
8912 class="cmtt-8">&#x00A0;</span><span 
8913 class="cmtt-8">&#x00A0;</span><span 
8914 class="cmtt-8">&#x00A0;</span><span 
8915 class="cmtt-8">&#x00A0;</span><span 
8916 class="cmtt-8">&#x00A0;</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;14)</span><span 
8922 class="cmtt-8">&#x00A0;truncate</span><span 
8923 class="cmtt-8">&#x00A0;vector</span><span 
8924 class="cmtt-8">&#x00A0;[floor]</span><span 
8925 class="cmtt-8">&#x00A0;to</span><span 
8926 class="cmtt-8">&#x00A0;[n]</span><span 
8927 class="cmtt-8">&#x00A0;elements</span>
8928 <br class="fancyvrb" /><a 
8929  id="x1-101196r25"></a><span 
8930 class="cmr-6">25</span><span 
8931 class="cmtt-8">&#x00A0;</span><span 
8932 class="cmtt-8">&#x00A0;</span>
8933 <br class="fancyvrb" /><a 
8934  id="x1-101198r26"></a><span 
8935 class="cmr-6">26</span><span 
8936 class="cmtt-8">&#x00A0;</span><span 
8937 class="cmtt-8">&#x00A0;</span><span 
8938 class="cmtt-8">&#x00A0;</span><span 
8939 class="cmtt-8">&#x00A0;</span><span 
8940 class="cmtt-8">&#x00A0;</span><span 
8941 class="cmtt-8">&#x00A0;</span><span 
8942 class="cmtt-8">&#x00A0;</span><span 
8943 class="cmsy-8">}</span>
8944 <br class="fancyvrb" /><a 
8945  id="x1-101200r27"></a><span 
8946 class="cmr-6">27</span><span 
8947 class="cmtt-8">&#x00A0;</span><span 
8948 class="cmtt-8">&#x00A0;</span>
8949                                                                                         
8950
8951                                                                                         
8952 <br class="fancyvrb" /><a 
8953  id="x1-101202r28"></a><span 
8954 class="cmr-6">28</span><span 
8955 class="cmtt-8">&#x00A0;</span><span 
8956 class="cmtt-8">&#x00A0;</span><span 
8957 class="cmtt-8">&#x00A0;15)</span><span 
8958 class="cmtt-8">&#x00A0;for</span><span 
8959 class="cmtt-8">&#x00A0;each</span><span 
8960 class="cmtt-8">&#x00A0;scalar</span><span 
8961 class="cmtt-8">&#x00A0;in</span><span 
8962 class="cmtt-8">&#x00A0;vector</span><span 
8963 class="cmtt-8">&#x00A0;[floor],</span><span 
8964 class="cmtt-8">&#x00A0;perform</span><span 
8965 class="cmtt-8">&#x00A0;a</span><span 
8966 class="cmtt-8">&#x00A0;lookup</span><span 
8967 class="cmtt-8">&#x00A0;substitution</span><span 
8968 class="cmtt-8">&#x00A0;using</span>
8969 <br class="fancyvrb" /><a 
8970  id="x1-101204r29"></a><span 
8971 class="cmr-6">29</span><span 
8972 class="cmtt-8">&#x00A0;</span><span 
8973 class="cmtt-8">&#x00A0;</span><span 
8974 class="cmtt-8">&#x00A0;</span><span 
8975 class="cmtt-8">&#x00A0;</span><span 
8976 class="cmtt-8">&#x00A0;</span><span 
8977 class="cmtt-8">&#x00A0;</span><span 
8978 class="cmtt-8">&#x00A0;the</span><span 
8979 class="cmtt-8">&#x00A0;scalar</span><span 
8980 class="cmtt-8">&#x00A0;value</span><span 
8981 class="cmtt-8">&#x00A0;from</span><span 
8982 class="cmtt-8">&#x00A0;[floor]</span><span 
8983 class="cmtt-8">&#x00A0;as</span><span 
8984 class="cmtt-8">&#x00A0;an</span><span 
8985 class="cmtt-8">&#x00A0;offset</span><span 
8986 class="cmtt-8">&#x00A0;into</span><span 
8987 class="cmtt-8">&#x00A0;the</span><span 
8988 class="cmtt-8">&#x00A0;vector</span><span 
8989 class="cmtt-8">&#x00A0;</span><a 
8990 href="#x1-12500010.1"><span 
8991 class="cmtt-8">[floor1_inverse_dB_static_table]</span></a>
8992 <br class="fancyvrb" /><a 
8993  id="x1-101206r30"></a><span 
8994 class="cmr-6">30</span><span 
8995 class="cmtt-8">&#x00A0;</span><span 
8996 class="cmtt-8">&#x00A0;</span>
8997 <br class="fancyvrb" /><a 
8998  id="x1-101208r31"></a><span 
8999 class="cmr-6">31</span><span 
9000 class="cmtt-8">&#x00A0;</span><span 
9001 class="cmtt-8">&#x00A0;</span><span 
9002 class="cmtt-8">&#x00A0;16)</span><span 
9003 class="cmtt-8">&#x00A0;done</span>
9004 <br class="fancyvrb" /><a 
9005  id="x1-101210r32"></a><span 
9006 class="cmr-6">32</span><span 
9007 class="cmtt-8">&#x00A0;</span><span 
9008 class="cmtt-8">&#x00A0;</span>
9009 </div>
9010       </dd></dl>
9011                                                                                         
9012
9013                                                                                         
9014 <h3 class="sectionHead"><span class="titlemark">8.  </span> <a 
9015  id="x1-1020008"></a>Residue setup and decode</h3>
9016 <!--l. 6--><p class="noindent" >
9017 <h4 class="subsectionHead"><span class="titlemark">8.1.  </span> <a 
9018  id="x1-1030008.1"></a>Overview</h4>
9019 <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
9020 after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
9021 may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
9022 coupling. The exact semantic content of the vector does not matter to the residue
9023 abstraction.
9024 <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
9025 bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
9026 different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
9027 abstraction.
9028 <!--l. 23--><p class="noindent" >
9029 <h4 class="subsectionHead"><span class="titlemark">8.2.  </span> <a 
9030  id="x1-1040008.2"></a>Residue format</h4>
9031 <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
9032 chunk, encodes the chunk classifications and finally encodes the chunks themselves
9033 using the the specific VQ arrangement defined for each selected classification. The
9034 exact interleaving and partitioning vary by residue encoding number, however the
9035 high-level process used to classify and encode the residue vector is the same in all three
9036 variants.
9037 <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
9038 the moment exactly how a partition is encoded and simply trusting that it is, is as
9039 follows:
9040       <ul class="itemize1">
9041       <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
9042       specified.  If  we  have  a  vector  size  of  <span 
9043 class="cmti-12">n</span>,  a  partition  size  <span 
9044 class="cmti-12">residue</span><span 
9045 class="cmti-12">_partition</span><span 
9046 class="cmti-12">_size</span>,
9047       and a total of <span 
9048 class="cmti-12">ch  </span>residue vectors, the total number of partitioned chunks coded
9049                                                                                         
9050
9051                                                                                         
9052       is  <span 
9053 class="cmti-12">n</span>/<span 
9054 class="cmti-12">residue</span><span 
9055 class="cmti-12">_partition</span><span 
9056 class="cmti-12">_size</span>*<span 
9057 class="cmti-12">ch</span>.  It  is  important  to  note  that  the  integer  division
9058       truncates. In the below example, we assume an example <span 
9059 class="cmti-12">residue</span><span 
9060 class="cmti-12">_partition</span><span 
9061 class="cmti-12">_size </span>of 8.
9062       </li>
9063       <li class="itemize">Each partition in each vector has a classification number that specifies which of
9064       multiple configured VQ codebook setups are used to decode that partition. The
9065       classification numbers of each partition can be thought of as forming a vector in
9066       their own right, as in the illustration below. Just as the residue vectors are coded
9067       in grouped partitions to increase encoding efficiency, the classification vector is also
9068       partitioned into chunks. The integer elements of each scalar in a classification chunk
9069       are built into a single scalar that represents the classification numbers in that chunk.
9070       In the below example, the classification codeword encodes two classification numbers.
9071       </li>
9072       <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
9073       the residue vector, but more often efficient codebook design dictates that each vector
9074       is encoded as the additive sum of several passes through the residue vector using
9075       more than one VQ codebook. Thus, each residue value potentially accumulates values
9076       from multiple decode passes. The classification value associated with a partition is
9077       the same in each pass, thus the classification codeword is coded only in the first pass.
9078       </li></ul>
9079 <div class="center" 
9080 >
9081 <!--l. 70--><p class="noindent" >
9082
9083 <!--l. 71--><p class="noindent" ><img 
9084 src="residue-pack.png" alt="PIC"  
9085 >
9086 <br /> <div class="caption" 
9087 ><span class="id">Figure&#x00A0;11: </span><span  
9088 class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 -->
9089 </div>
9090 <!--l. 77--><p class="noindent" >
9091 <h4 class="subsectionHead"><span class="titlemark">8.3.  </span> <a 
9092  id="x1-1050008.3"></a>residue 0</h4>
9093 <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
9094 partition encoding (visually treated as a black box&#8211;or cyan box or brown box&#8211;in the above
9095 figure).
9096 <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
9097                                                                                         
9098
9099                                                                                         
9100 encode a partition in a specific pass. The dimension of the codebook need not be the same in
9101 multiple passes, however the partition size must be an even multiple of the codebook
9102 dimension.
9103 <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
9104 codebook sizes of 8, 4, 2 and 1:
9105 <!--l. 92--><p class="noindent" >
9106 <div class="fancyvrb" id="fancyvrb33">
9107 <a 
9108  id="x1-105002r1"></a><span 
9109 class="cmr-6">1</span><span 
9110 class="cmtt-8">&#x00A0;</span><span 
9111 class="cmtt-8">&#x00A0;</span>
9112 <br class="fancyvrb" /><a 
9113  id="x1-105004r2"></a><span 
9114 class="cmr-6">2</span><span 
9115 class="cmtt-8">&#x00A0;</span><span 
9116 class="cmtt-8">&#x00A0;</span><span 
9117 class="cmtt-8">&#x00A0;</span><span 
9118 class="cmtt-8">&#x00A0;</span><span 
9119 class="cmtt-8">&#x00A0;</span><span 
9120 class="cmtt-8">&#x00A0;</span><span 
9121 class="cmtt-8">&#x00A0;</span><span 
9122 class="cmtt-8">&#x00A0;</span><span 
9123 class="cmtt-8">&#x00A0;</span><span 
9124 class="cmtt-8">&#x00A0;</span><span 
9125 class="cmtt-8">&#x00A0;</span><span 
9126 class="cmtt-8">&#x00A0;</span><span 
9127 class="cmtt-8">&#x00A0;</span><span 
9128 class="cmtt-8">&#x00A0;original</span><span 
9129 class="cmtt-8">&#x00A0;residue</span><span 
9130 class="cmtt-8">&#x00A0;vector:</span><span 
9131 class="cmtt-8">&#x00A0;[</span><span 
9132 class="cmtt-8">&#x00A0;0</span><span 
9133 class="cmtt-8">&#x00A0;1</span><span 
9134 class="cmtt-8">&#x00A0;2</span><span 
9135 class="cmtt-8">&#x00A0;3</span><span 
9136 class="cmtt-8">&#x00A0;4</span><span 
9137 class="cmtt-8">&#x00A0;5</span><span 
9138 class="cmtt-8">&#x00A0;6</span><span 
9139 class="cmtt-8">&#x00A0;7</span><span 
9140 class="cmtt-8">&#x00A0;]</span>
9141 <br class="fancyvrb" /><a 
9142  id="x1-105006r3"></a><span 
9143 class="cmr-6">3</span><span 
9144 class="cmtt-8">&#x00A0;</span><span 
9145 class="cmtt-8">&#x00A0;</span>
9146 <br class="fancyvrb" /><a 
9147  id="x1-105008r4"></a><span 
9148 class="cmr-6">4</span><span 
9149 class="cmtt-8">&#x00A0;</span><span 
9150 class="cmtt-8">&#x00A0;codebook</span><span 
9151 class="cmtt-8">&#x00A0;dimensions</span><span 
9152 class="cmtt-8">&#x00A0;=</span><span 
9153 class="cmtt-8">&#x00A0;8</span><span 
9154 class="cmtt-8">&#x00A0;</span><span 
9155 class="cmtt-8">&#x00A0;encoded</span><span 
9156 class="cmtt-8">&#x00A0;as:</span><span 
9157 class="cmtt-8">&#x00A0;[</span><span 
9158 class="cmtt-8">&#x00A0;0</span><span 
9159 class="cmtt-8">&#x00A0;1</span><span 
9160 class="cmtt-8">&#x00A0;2</span><span 
9161 class="cmtt-8">&#x00A0;3</span><span 
9162 class="cmtt-8">&#x00A0;4</span><span 
9163 class="cmtt-8">&#x00A0;5</span><span 
9164 class="cmtt-8">&#x00A0;6</span><span 
9165 class="cmtt-8">&#x00A0;7</span><span 
9166 class="cmtt-8">&#x00A0;]</span>
9167 <br class="fancyvrb" /><a 
9168  id="x1-105010r5"></a><span 
9169 class="cmr-6">5</span><span 
9170 class="cmtt-8">&#x00A0;</span><span 
9171 class="cmtt-8">&#x00A0;</span>
9172 <br class="fancyvrb" /><a 
9173  id="x1-105012r6"></a><span 
9174 class="cmr-6">6</span><span 
9175 class="cmtt-8">&#x00A0;</span><span 
9176 class="cmtt-8">&#x00A0;codebook</span><span 
9177 class="cmtt-8">&#x00A0;dimensions</span><span 
9178 class="cmtt-8">&#x00A0;=</span><span 
9179 class="cmtt-8">&#x00A0;4</span><span 
9180 class="cmtt-8">&#x00A0;</span><span 
9181 class="cmtt-8">&#x00A0;encoded</span><span 
9182 class="cmtt-8">&#x00A0;as:</span><span 
9183 class="cmtt-8">&#x00A0;[</span><span 
9184 class="cmtt-8">&#x00A0;0</span><span 
9185 class="cmtt-8">&#x00A0;2</span><span 
9186 class="cmtt-8">&#x00A0;4</span><span 
9187 class="cmtt-8">&#x00A0;6</span><span 
9188 class="cmtt-8">&#x00A0;],</span><span 
9189 class="cmtt-8">&#x00A0;[</span><span 
9190 class="cmtt-8">&#x00A0;1</span><span 
9191 class="cmtt-8">&#x00A0;3</span><span 
9192 class="cmtt-8">&#x00A0;5</span><span 
9193 class="cmtt-8">&#x00A0;7</span><span 
9194 class="cmtt-8">&#x00A0;]</span>
9195 <br class="fancyvrb" /><a 
9196  id="x1-105014r7"></a><span 
9197 class="cmr-6">7</span><span 
9198 class="cmtt-8">&#x00A0;</span><span 
9199 class="cmtt-8">&#x00A0;</span>
9200 <br class="fancyvrb" /><a 
9201  id="x1-105016r8"></a><span 
9202 class="cmr-6">8</span><span 
9203 class="cmtt-8">&#x00A0;</span><span 
9204 class="cmtt-8">&#x00A0;codebook</span><span 
9205 class="cmtt-8">&#x00A0;dimensions</span><span 
9206 class="cmtt-8">&#x00A0;=</span><span 
9207 class="cmtt-8">&#x00A0;2</span><span 
9208 class="cmtt-8">&#x00A0;</span><span 
9209 class="cmtt-8">&#x00A0;encoded</span><span 
9210 class="cmtt-8">&#x00A0;as:</span><span 
9211 class="cmtt-8">&#x00A0;[</span><span 
9212 class="cmtt-8">&#x00A0;0</span><span 
9213 class="cmtt-8">&#x00A0;4</span><span 
9214 class="cmtt-8">&#x00A0;],</span><span 
9215 class="cmtt-8">&#x00A0;[</span><span 
9216 class="cmtt-8">&#x00A0;1</span><span 
9217 class="cmtt-8">&#x00A0;5</span><span 
9218 class="cmtt-8">&#x00A0;],</span><span 
9219 class="cmtt-8">&#x00A0;[</span><span 
9220 class="cmtt-8">&#x00A0;2</span><span 
9221 class="cmtt-8">&#x00A0;6</span><span 
9222 class="cmtt-8">&#x00A0;],</span><span 
9223 class="cmtt-8">&#x00A0;[</span><span 
9224 class="cmtt-8">&#x00A0;3</span><span 
9225 class="cmtt-8">&#x00A0;7</span><span 
9226 class="cmtt-8">&#x00A0;]</span>
9227 <br class="fancyvrb" /><a 
9228  id="x1-105018r9"></a><span 
9229 class="cmr-6">9</span><span 
9230 class="cmtt-8">&#x00A0;</span><span 
9231 class="cmtt-8">&#x00A0;</span>
9232 <br class="fancyvrb" /><a 
9233  id="x1-105020r10"></a><span 
9234 class="cmr-6">10</span><span 
9235 class="cmtt-8">&#x00A0;</span><span 
9236 class="cmtt-8">&#x00A0;codebook</span><span 
9237 class="cmtt-8">&#x00A0;dimensions</span><span 
9238 class="cmtt-8">&#x00A0;=</span><span 
9239 class="cmtt-8">&#x00A0;1</span><span 
9240 class="cmtt-8">&#x00A0;</span><span 
9241 class="cmtt-8">&#x00A0;encoded</span><span 
9242 class="cmtt-8">&#x00A0;as:</span><span 
9243 class="cmtt-8">&#x00A0;[</span><span 
9244 class="cmtt-8">&#x00A0;0</span><span 
9245 class="cmtt-8">&#x00A0;],</span><span 
9246 class="cmtt-8">&#x00A0;[</span><span 
9247 class="cmtt-8">&#x00A0;1</span><span 
9248 class="cmtt-8">&#x00A0;],</span><span 
9249 class="cmtt-8">&#x00A0;[</span><span 
9250 class="cmtt-8">&#x00A0;2</span><span 
9251 class="cmtt-8">&#x00A0;],</span><span 
9252 class="cmtt-8">&#x00A0;[</span><span 
9253 class="cmtt-8">&#x00A0;3</span><span 
9254 class="cmtt-8">&#x00A0;],</span><span 
9255 class="cmtt-8">&#x00A0;[</span><span 
9256 class="cmtt-8">&#x00A0;4</span><span 
9257 class="cmtt-8">&#x00A0;],</span><span 
9258 class="cmtt-8">&#x00A0;[</span><span 
9259 class="cmtt-8">&#x00A0;5</span><span 
9260 class="cmtt-8">&#x00A0;],</span><span 
9261 class="cmtt-8">&#x00A0;[</span><span 
9262 class="cmtt-8">&#x00A0;6</span><span 
9263 class="cmtt-8">&#x00A0;],</span><span 
9264 class="cmtt-8">&#x00A0;[</span><span 
9265 class="cmtt-8">&#x00A0;7</span><span 
9266 class="cmtt-8">&#x00A0;]</span>
9267 <br class="fancyvrb" /><a 
9268  id="x1-105022r11"></a><span 
9269 class="cmr-6">11</span><span 
9270 class="cmtt-8">&#x00A0;</span><span 
9271 class="cmtt-8">&#x00A0;</span>
9272 </div>
9273 <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
9274 restricted to a power of two.
9275 <!--l. 111--><p class="noindent" >
9276 <h4 class="subsectionHead"><span class="titlemark">8.4.  </span> <a 
9277  id="x1-1060008.4"></a>residue 1</h4>
9278 <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
9279 with residue 0, however, partition length must be an integer multiple of the codebook dimension,
9280 although dimension may vary from pass to pass.
9281 <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
9282 codebook sizes of 8, 4, 2 and 1:
9283 <!--l. 121--><p class="noindent" >
9284 <div class="fancyvrb" id="fancyvrb34">
9285 <a 
9286  id="x1-106002r1"></a><span 
9287 class="cmr-6">1</span><span 
9288 class="cmtt-8">&#x00A0;</span><span 
9289 class="cmtt-8">&#x00A0;</span>
9290 <br class="fancyvrb" /><a 
9291  id="x1-106004r2"></a><span 
9292 class="cmr-6">2</span><span 
9293 class="cmtt-8">&#x00A0;</span><span 
9294 class="cmtt-8">&#x00A0;</span><span 
9295 class="cmtt-8">&#x00A0;</span><span 
9296 class="cmtt-8">&#x00A0;</span><span 
9297 class="cmtt-8">&#x00A0;</span><span 
9298 class="cmtt-8">&#x00A0;</span><span 
9299 class="cmtt-8">&#x00A0;</span><span 
9300 class="cmtt-8">&#x00A0;</span><span 
9301 class="cmtt-8">&#x00A0;</span><span 
9302 class="cmtt-8">&#x00A0;</span><span 
9303 class="cmtt-8">&#x00A0;</span><span 
9304 class="cmtt-8">&#x00A0;</span><span 
9305 class="cmtt-8">&#x00A0;</span><span 
9306 class="cmtt-8">&#x00A0;original</span><span 
9307 class="cmtt-8">&#x00A0;residue</span><span 
9308 class="cmtt-8">&#x00A0;vector:</span><span 
9309 class="cmtt-8">&#x00A0;[</span><span 
9310 class="cmtt-8">&#x00A0;0</span><span 
9311 class="cmtt-8">&#x00A0;1</span><span 
9312 class="cmtt-8">&#x00A0;2</span><span 
9313 class="cmtt-8">&#x00A0;3</span><span 
9314 class="cmtt-8">&#x00A0;4</span><span 
9315 class="cmtt-8">&#x00A0;5</span><span 
9316 class="cmtt-8">&#x00A0;6</span><span 
9317 class="cmtt-8">&#x00A0;7</span><span 
9318 class="cmtt-8">&#x00A0;]</span>
9319 <br class="fancyvrb" /><a 
9320  id="x1-106006r3"></a><span 
9321 class="cmr-6">3</span><span 
9322 class="cmtt-8">&#x00A0;</span><span 
9323 class="cmtt-8">&#x00A0;</span>
9324 <br class="fancyvrb" /><a 
9325  id="x1-106008r4"></a><span 
9326 class="cmr-6">4</span><span 
9327 class="cmtt-8">&#x00A0;</span><span 
9328 class="cmtt-8">&#x00A0;codebook</span><span 
9329 class="cmtt-8">&#x00A0;dimensions</span><span 
9330 class="cmtt-8">&#x00A0;=</span><span 
9331 class="cmtt-8">&#x00A0;8</span><span 
9332 class="cmtt-8">&#x00A0;</span><span 
9333 class="cmtt-8">&#x00A0;encoded</span><span 
9334 class="cmtt-8">&#x00A0;as:</span><span 
9335 class="cmtt-8">&#x00A0;[</span><span 
9336 class="cmtt-8">&#x00A0;0</span><span 
9337 class="cmtt-8">&#x00A0;1</span><span 
9338 class="cmtt-8">&#x00A0;2</span><span 
9339 class="cmtt-8">&#x00A0;3</span><span 
9340 class="cmtt-8">&#x00A0;4</span><span 
9341 class="cmtt-8">&#x00A0;5</span><span 
9342 class="cmtt-8">&#x00A0;6</span><span 
9343 class="cmtt-8">&#x00A0;7</span><span 
9344 class="cmtt-8">&#x00A0;]</span>
9345 <br class="fancyvrb" /><a 
9346  id="x1-106010r5"></a><span 
9347 class="cmr-6">5</span><span 
9348 class="cmtt-8">&#x00A0;</span><span 
9349 class="cmtt-8">&#x00A0;</span>
9350 <br class="fancyvrb" /><a 
9351  id="x1-106012r6"></a><span 
9352 class="cmr-6">6</span><span 
9353 class="cmtt-8">&#x00A0;</span><span 
9354 class="cmtt-8">&#x00A0;codebook</span><span 
9355 class="cmtt-8">&#x00A0;dimensions</span><span 
9356 class="cmtt-8">&#x00A0;=</span><span 
9357 class="cmtt-8">&#x00A0;4</span><span 
9358 class="cmtt-8">&#x00A0;</span><span 
9359 class="cmtt-8">&#x00A0;encoded</span><span 
9360 class="cmtt-8">&#x00A0;as:</span><span 
9361 class="cmtt-8">&#x00A0;[</span><span 
9362 class="cmtt-8">&#x00A0;0</span><span 
9363 class="cmtt-8">&#x00A0;1</span><span 
9364 class="cmtt-8">&#x00A0;2</span><span 
9365 class="cmtt-8">&#x00A0;3</span><span 
9366 class="cmtt-8">&#x00A0;],</span><span 
9367 class="cmtt-8">&#x00A0;[</span><span 
9368 class="cmtt-8">&#x00A0;4</span><span 
9369 class="cmtt-8">&#x00A0;5</span><span 
9370 class="cmtt-8">&#x00A0;6</span><span 
9371 class="cmtt-8">&#x00A0;7</span><span 
9372 class="cmtt-8">&#x00A0;]</span>
9373 <br class="fancyvrb" /><a 
9374  id="x1-106014r7"></a><span 
9375 class="cmr-6">7</span><span 
9376 class="cmtt-8">&#x00A0;</span><span 
9377 class="cmtt-8">&#x00A0;</span>
9378 <br class="fancyvrb" /><a 
9379  id="x1-106016r8"></a><span 
9380 class="cmr-6">8</span><span 
9381 class="cmtt-8">&#x00A0;</span><span 
9382 class="cmtt-8">&#x00A0;codebook</span><span 
9383 class="cmtt-8">&#x00A0;dimensions</span><span 
9384 class="cmtt-8">&#x00A0;=</span><span 
9385 class="cmtt-8">&#x00A0;2</span><span 
9386 class="cmtt-8">&#x00A0;</span><span 
9387 class="cmtt-8">&#x00A0;encoded</span><span 
9388 class="cmtt-8">&#x00A0;as:</span><span 
9389 class="cmtt-8">&#x00A0;[</span><span 
9390 class="cmtt-8">&#x00A0;0</span><span 
9391 class="cmtt-8">&#x00A0;1</span><span 
9392 class="cmtt-8">&#x00A0;],</span><span 
9393 class="cmtt-8">&#x00A0;[</span><span 
9394 class="cmtt-8">&#x00A0;2</span><span 
9395 class="cmtt-8">&#x00A0;3</span><span 
9396 class="cmtt-8">&#x00A0;],</span><span 
9397 class="cmtt-8">&#x00A0;[</span><span 
9398 class="cmtt-8">&#x00A0;4</span><span 
9399 class="cmtt-8">&#x00A0;5</span><span 
9400 class="cmtt-8">&#x00A0;],</span><span 
9401 class="cmtt-8">&#x00A0;[</span><span 
9402 class="cmtt-8">&#x00A0;6</span><span 
9403 class="cmtt-8">&#x00A0;7</span><span 
9404 class="cmtt-8">&#x00A0;]</span>
9405 <br class="fancyvrb" /><a 
9406  id="x1-106018r9"></a><span 
9407 class="cmr-6">9</span><span 
9408 class="cmtt-8">&#x00A0;</span><span 
9409 class="cmtt-8">&#x00A0;</span>
9410 <br class="fancyvrb" /><a 
9411  id="x1-106020r10"></a><span 
9412 class="cmr-6">10</span><span 
9413 class="cmtt-8">&#x00A0;</span><span 
9414 class="cmtt-8">&#x00A0;codebook</span><span 
9415 class="cmtt-8">&#x00A0;dimensions</span><span 
9416 class="cmtt-8">&#x00A0;=</span><span 
9417 class="cmtt-8">&#x00A0;1</span><span 
9418 class="cmtt-8">&#x00A0;</span><span 
9419 class="cmtt-8">&#x00A0;encoded</span><span 
9420 class="cmtt-8">&#x00A0;as:</span><span 
9421 class="cmtt-8">&#x00A0;[</span><span 
9422 class="cmtt-8">&#x00A0;0</span><span 
9423 class="cmtt-8">&#x00A0;],</span><span 
9424 class="cmtt-8">&#x00A0;[</span><span 
9425 class="cmtt-8">&#x00A0;1</span><span 
9426 class="cmtt-8">&#x00A0;],</span><span 
9427 class="cmtt-8">&#x00A0;[</span><span 
9428 class="cmtt-8">&#x00A0;2</span><span 
9429 class="cmtt-8">&#x00A0;],</span><span 
9430 class="cmtt-8">&#x00A0;[</span><span 
9431 class="cmtt-8">&#x00A0;3</span><span 
9432 class="cmtt-8">&#x00A0;],</span><span 
9433 class="cmtt-8">&#x00A0;[</span><span 
9434 class="cmtt-8">&#x00A0;4</span><span 
9435 class="cmtt-8">&#x00A0;],</span><span 
9436 class="cmtt-8">&#x00A0;[</span><span 
9437 class="cmtt-8">&#x00A0;5</span><span 
9438 class="cmtt-8">&#x00A0;],</span><span 
9439 class="cmtt-8">&#x00A0;[</span><span 
9440 class="cmtt-8">&#x00A0;6</span><span 
9441 class="cmtt-8">&#x00A0;],</span><span 
9442 class="cmtt-8">&#x00A0;[</span><span 
9443 class="cmtt-8">&#x00A0;7</span><span 
9444 class="cmtt-8">&#x00A0;]</span>
9445 <br class="fancyvrb" /><a 
9446  id="x1-106022r11"></a><span 
9447 class="cmr-6">11</span><span 
9448 class="cmtt-8">&#x00A0;</span><span 
9449 class="cmtt-8">&#x00A0;</span>
9450                                                                                         
9451
9452                                                                                         
9453 </div>
9454 <!--l. 137--><p class="noindent" >
9455 <h4 class="subsectionHead"><span class="titlemark">8.5.  </span> <a 
9456  id="x1-1070008.5"></a>residue 2</h4>
9457 <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
9458 passed-in vectors as in residue type 1, the <span 
9459 class="cmti-12">ch </span>passed in vectors of length <span 
9460 class="cmti-12">n </span>are first interleaved
9461 and flattened into a single vector of length <span 
9462 class="cmti-12">ch</span>*<span 
9463 class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
9464 is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
9465 residue type 1 and type 2 are equivalent.
9466 <div class="center" 
9467 >
9468 <!--l. 147--><p class="noindent" >
9469
9470 <!--l. 148--><p class="noindent" ><img 
9471 src="residue2.png" alt="PIC"  
9472 >
9473 <br /> <div class="caption" 
9474 ><span class="id">Figure&#x00A0;12: </span><span  
9475 class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 -->
9476 </div>
9477 <!--l. 153--><p class="noindent" >
9478 <h4 class="subsectionHead"><span class="titlemark">8.6.  </span> <a 
9479  id="x1-1080008.6"></a>Residue decode</h4>
9480 <!--l. 155--><p class="noindent" >
9481 <h5 class="subsubsectionHead"><span class="titlemark">8.6.1.  </span> <a 
9482  id="x1-1090008.6.1"></a>header decode</h5>
9483 <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
9484 <div class="fancyvrb" id="fancyvrb35">
9485 <a 
9486  id="x1-109002r1"></a><span 
9487 class="cmr-6">1</span><span 
9488 class="cmtt-8">&#x00A0;</span><span 
9489 class="cmtt-8">&#x00A0;</span><span 
9490 class="cmtt-8">&#x00A0;</span><span 
9491 class="cmtt-8">&#x00A0;1)</span><span 
9492 class="cmtt-8">&#x00A0;[residue\_begin]</span><span 
9493 class="cmtt-8">&#x00A0;=</span><span 
9494 class="cmtt-8">&#x00A0;read</span><span 
9495 class="cmtt-8">&#x00A0;24</span><span 
9496 class="cmtt-8">&#x00A0;bits</span><span 
9497 class="cmtt-8">&#x00A0;as</span><span 
9498 class="cmtt-8">&#x00A0;unsigned</span><span 
9499 class="cmtt-8">&#x00A0;integer</span>
9500 <br class="fancyvrb" /><a 
9501  id="x1-109004r2"></a><span 
9502 class="cmr-6">2</span><span 
9503 class="cmtt-8">&#x00A0;</span><span 
9504 class="cmtt-8">&#x00A0;</span><span 
9505 class="cmtt-8">&#x00A0;</span><span 
9506 class="cmtt-8">&#x00A0;2)</span><span 
9507 class="cmtt-8">&#x00A0;[residue\_end]</span><span 
9508 class="cmtt-8">&#x00A0;=</span><span 
9509 class="cmtt-8">&#x00A0;read</span><span 
9510 class="cmtt-8">&#x00A0;24</span><span 
9511 class="cmtt-8">&#x00A0;bits</span><span 
9512 class="cmtt-8">&#x00A0;as</span><span 
9513 class="cmtt-8">&#x00A0;unsigned</span><span 
9514 class="cmtt-8">&#x00A0;integer</span>
9515 <br class="fancyvrb" /><a 
9516  id="x1-109006r3"></a><span 
9517 class="cmr-6">3</span><span 
9518 class="cmtt-8">&#x00A0;</span><span 
9519 class="cmtt-8">&#x00A0;</span><span 
9520 class="cmtt-8">&#x00A0;</span><span 
9521 class="cmtt-8">&#x00A0;3)</span><span 
9522 class="cmtt-8">&#x00A0;[residue\_partition\_size]</span><span 
9523 class="cmtt-8">&#x00A0;=</span><span 
9524 class="cmtt-8">&#x00A0;read</span><span 
9525 class="cmtt-8">&#x00A0;24</span><span 
9526 class="cmtt-8">&#x00A0;bits</span><span 
9527 class="cmtt-8">&#x00A0;as</span><span 
9528 class="cmtt-8">&#x00A0;unsigned</span><span 
9529 class="cmtt-8">&#x00A0;integer</span><span 
9530 class="cmtt-8">&#x00A0;and</span><span 
9531 class="cmtt-8">&#x00A0;add</span><span 
9532 class="cmtt-8">&#x00A0;one</span>
9533 <br class="fancyvrb" /><a 
9534  id="x1-109008r4"></a><span 
9535 class="cmr-6">4</span><span 
9536 class="cmtt-8">&#x00A0;</span><span 
9537 class="cmtt-8">&#x00A0;</span><span 
9538 class="cmtt-8">&#x00A0;</span><span 
9539 class="cmtt-8">&#x00A0;4)</span><span 
9540 class="cmtt-8">&#x00A0;[residue\_classifications]</span><span 
9541 class="cmtt-8">&#x00A0;=</span><span 
9542 class="cmtt-8">&#x00A0;read</span><span 
9543 class="cmtt-8">&#x00A0;6</span><span 
9544 class="cmtt-8">&#x00A0;bits</span><span 
9545 class="cmtt-8">&#x00A0;as</span><span 
9546 class="cmtt-8">&#x00A0;unsigned</span><span 
9547 class="cmtt-8">&#x00A0;integer</span><span 
9548 class="cmtt-8">&#x00A0;and</span><span 
9549 class="cmtt-8">&#x00A0;add</span><span 
9550 class="cmtt-8">&#x00A0;one</span>
9551                                                                                         
9552
9553                                                                                         
9554 <br class="fancyvrb" /><a 
9555  id="x1-109010r5"></a><span 
9556 class="cmr-6">5</span><span 
9557 class="cmtt-8">&#x00A0;</span><span 
9558 class="cmtt-8">&#x00A0;</span><span 
9559 class="cmtt-8">&#x00A0;</span><span 
9560 class="cmtt-8">&#x00A0;5)</span><span 
9561 class="cmtt-8">&#x00A0;[residue\_classbook]</span><span 
9562 class="cmtt-8">&#x00A0;=</span><span 
9563 class="cmtt-8">&#x00A0;read</span><span 
9564 class="cmtt-8">&#x00A0;8</span><span 
9565 class="cmtt-8">&#x00A0;bits</span><span 
9566 class="cmtt-8">&#x00A0;as</span><span 
9567 class="cmtt-8">&#x00A0;unsigned</span><span 
9568 class="cmtt-8">&#x00A0;integer</span>
9569 </div>
9570 <!--l. 166--><p class="noindent" ><span 
9571 class="cmtt-12">[residue_begin] </span>and <span 
9572 class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
9573 actually coded; it implements akin to a bandpass where, for coding purposes, the vector
9574 effectively begins at element <span 
9575 class="cmtt-12">[residue_begin] </span>and ends at <span 
9576 class="cmtt-12">[residue_end]</span>. Preceding and
9577 following values in the unpacked vectors are zeroed. Note that for residue type 2, these
9578 values as well as <span 
9579 class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
9580 individual vectors before interleave. <span 
9581 class="cmtt-12">[residue_partition_size] </span>is as explained above,
9582 <span 
9583 class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
9584 belong and <span 
9585 class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
9586 codewords. The number of dimensions in book <span 
9587 class="cmtt-12">[residue_classbook] </span>determines how
9588 many classification values are grouped into a single classification codeword. Note that
9589 the number of entries and dimensions in book <span 
9590 class="cmtt-12">[residue_classbook]</span>, along with
9591 <span 
9592 class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
9593 codewords. If <span 
9594 class="cmtt-12">[residue_classifications]</span>&#x02C6;<span 
9595 class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
9596 <span 
9597 class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
9598 <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
9599 passes.
9600 <!--l. 193--><p class="noindent" >
9601 <div class="fancyvrb" id="fancyvrb36">
9602 <a 
9603  id="x1-109012r1"></a><span 
9604 class="cmr-6">1</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;1)</span><span 
9609 class="cmtt-8">&#x00A0;iterate</span><span 
9610 class="cmtt-8">&#x00A0;[i]</span><span 
9611 class="cmtt-8">&#x00A0;over</span><span 
9612 class="cmtt-8">&#x00A0;the</span><span 
9613 class="cmtt-8">&#x00A0;range</span><span 
9614 class="cmtt-8">&#x00A0;0</span><span 
9615 class="cmtt-8">&#x00A0;...</span><span 
9616 class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span 
9617 class="cmtt-8">&#x00A0;{</span>
9618 <br class="fancyvrb" /><a 
9619  id="x1-109014r2"></a><span 
9620 class="cmr-6">2</span><span 
9621 class="cmtt-8">&#x00A0;</span><span 
9622 class="cmtt-8">&#x00A0;</span>
9623 <br class="fancyvrb" /><a 
9624  id="x1-109016r3"></a><span 
9625 class="cmr-6">3</span><span 
9626 class="cmtt-8">&#x00A0;</span><span 
9627 class="cmtt-8">&#x00A0;</span><span 
9628 class="cmtt-8">&#x00A0;</span><span 
9629 class="cmtt-8">&#x00A0;</span><span 
9630 class="cmtt-8">&#x00A0;</span><span 
9631 class="cmtt-8">&#x00A0;</span><span 
9632 class="cmtt-8">&#x00A0;</span><span 
9633 class="cmtt-8">&#x00A0;</span><span 
9634 class="cmtt-8">&#x00A0;2)</span><span 
9635 class="cmtt-8">&#x00A0;[high\_bits]</span><span 
9636 class="cmtt-8">&#x00A0;=</span><span 
9637 class="cmtt-8">&#x00A0;0</span>
9638 <br class="fancyvrb" /><a 
9639  id="x1-109018r4"></a><span 
9640 class="cmr-6">4</span><span 
9641 class="cmtt-8">&#x00A0;</span><span 
9642 class="cmtt-8">&#x00A0;</span><span 
9643 class="cmtt-8">&#x00A0;</span><span 
9644 class="cmtt-8">&#x00A0;</span><span 
9645 class="cmtt-8">&#x00A0;</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;3)</span><span 
9650 class="cmtt-8">&#x00A0;[low\_bits]</span><span 
9651 class="cmtt-8">&#x00A0;=</span><span 
9652 class="cmtt-8">&#x00A0;read</span><span 
9653 class="cmtt-8">&#x00A0;3</span><span 
9654 class="cmtt-8">&#x00A0;bits</span><span 
9655 class="cmtt-8">&#x00A0;as</span><span 
9656 class="cmtt-8">&#x00A0;unsigned</span><span 
9657 class="cmtt-8">&#x00A0;integer</span>
9658 <br class="fancyvrb" /><a 
9659  id="x1-109020r5"></a><span 
9660 class="cmr-6">5</span><span 
9661 class="cmtt-8">&#x00A0;</span><span 
9662 class="cmtt-8">&#x00A0;</span><span 
9663 class="cmtt-8">&#x00A0;</span><span 
9664 class="cmtt-8">&#x00A0;</span><span 
9665 class="cmtt-8">&#x00A0;</span><span 
9666 class="cmtt-8">&#x00A0;</span><span 
9667 class="cmtt-8">&#x00A0;</span><span 
9668 class="cmtt-8">&#x00A0;</span><span 
9669 class="cmtt-8">&#x00A0;4)</span><span 
9670 class="cmtt-8">&#x00A0;[bitflag]</span><span 
9671 class="cmtt-8">&#x00A0;=</span><span 
9672 class="cmtt-8">&#x00A0;read</span><span 
9673 class="cmtt-8">&#x00A0;one</span><span 
9674 class="cmtt-8">&#x00A0;bit</span><span 
9675 class="cmtt-8">&#x00A0;as</span><span 
9676 class="cmtt-8">&#x00A0;boolean</span>
9677 <br class="fancyvrb" /><a 
9678  id="x1-109022r6"></a><span 
9679 class="cmr-6">6</span><span 
9680 class="cmtt-8">&#x00A0;</span><span 
9681 class="cmtt-8">&#x00A0;</span><span 
9682 class="cmtt-8">&#x00A0;</span><span 
9683 class="cmtt-8">&#x00A0;</span><span 
9684 class="cmtt-8">&#x00A0;</span><span 
9685 class="cmtt-8">&#x00A0;</span><span 
9686 class="cmtt-8">&#x00A0;</span><span 
9687 class="cmtt-8">&#x00A0;</span><span 
9688 class="cmtt-8">&#x00A0;5)</span><span 
9689 class="cmtt-8">&#x00A0;if</span><span 
9690 class="cmtt-8">&#x00A0;(</span><span 
9691 class="cmtt-8">&#x00A0;[bitflag]</span><span 
9692 class="cmtt-8">&#x00A0;is</span><span 
9693 class="cmtt-8">&#x00A0;set</span><span 
9694 class="cmtt-8">&#x00A0;)</span><span 
9695 class="cmtt-8">&#x00A0;then</span><span 
9696 class="cmtt-8">&#x00A0;[high\_bits]</span><span 
9697 class="cmtt-8">&#x00A0;=</span><span 
9698 class="cmtt-8">&#x00A0;read</span><span 
9699 class="cmtt-8">&#x00A0;five</span><span 
9700 class="cmtt-8">&#x00A0;bits</span><span 
9701 class="cmtt-8">&#x00A0;as</span><span 
9702 class="cmtt-8">&#x00A0;unsigned</span><span 
9703 class="cmtt-8">&#x00A0;integer</span>
9704 <br class="fancyvrb" /><a 
9705  id="x1-109024r7"></a><span 
9706 class="cmr-6">7</span><span 
9707 class="cmtt-8">&#x00A0;</span><span 
9708 class="cmtt-8">&#x00A0;</span><span 
9709 class="cmtt-8">&#x00A0;</span><span 
9710 class="cmtt-8">&#x00A0;</span><span 
9711 class="cmtt-8">&#x00A0;</span><span 
9712 class="cmtt-8">&#x00A0;</span><span 
9713 class="cmtt-8">&#x00A0;</span><span 
9714 class="cmtt-8">&#x00A0;</span><span 
9715 class="cmtt-8">&#x00A0;6)</span><span 
9716 class="cmtt-8">&#x00A0;vector</span><span 
9717 class="cmtt-8">&#x00A0;[residue\_cascade]</span><span 
9718 class="cmtt-8">&#x00A0;element</span><span 
9719 class="cmtt-8">&#x00A0;[i]</span><span 
9720 class="cmtt-8">&#x00A0;=</span><span 
9721 class="cmtt-8">&#x00A0;[high\_bits]</span><span 
9722 class="cmtt-8">&#x00A0;*</span><span 
9723 class="cmtt-8">&#x00A0;8</span><span 
9724 class="cmtt-8">&#x00A0;+</span><span 
9725 class="cmtt-8">&#x00A0;[low\_bits]</span>
9726 <br class="fancyvrb" /><a 
9727  id="x1-109026r8"></a><span 
9728 class="cmr-6">8</span><span 
9729 class="cmtt-8">&#x00A0;</span><span 
9730 class="cmtt-8">&#x00A0;</span><span 
9731 class="cmtt-8">&#x00A0;</span><span 
9732 class="cmtt-8">&#x00A0;</span><span 
9733 class="cmtt-8">&#x00A0;</span><span 
9734 class="cmtt-8">&#x00A0;</span><span 
9735 class="cmtt-8">&#x00A0;}</span>
9736 <br class="fancyvrb" /><a 
9737  id="x1-109028r9"></a><span 
9738 class="cmr-6">9</span><span 
9739 class="cmtt-8">&#x00A0;</span><span 
9740 class="cmtt-8">&#x00A0;</span><span 
9741 class="cmtt-8">&#x00A0;</span><span 
9742 class="cmtt-8">&#x00A0;7)</span><span 
9743 class="cmtt-8">&#x00A0;done</span>
9744 </div>
9745 <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
9746 bitmap. We loop over the possible codebook classifications and the maximum possible number of
9747 encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
9748 bits):
9749 <!--l. 211--><p class="noindent" >
9750 <div class="fancyvrb" id="fancyvrb37">
9751 <a 
9752  id="x1-109030r1"></a><span 
9753 class="cmr-6">1</span><span 
9754 class="cmtt-8">&#x00A0;</span><span 
9755 class="cmtt-8">&#x00A0;</span><span 
9756 class="cmtt-8">&#x00A0;</span><span 
9757 class="cmtt-8">&#x00A0;1)</span><span 
9758 class="cmtt-8">&#x00A0;iterate</span><span 
9759 class="cmtt-8">&#x00A0;[i]</span><span 
9760 class="cmtt-8">&#x00A0;over</span><span 
9761 class="cmtt-8">&#x00A0;the</span><span 
9762 class="cmtt-8">&#x00A0;range</span><span 
9763 class="cmtt-8">&#x00A0;0</span><span 
9764 class="cmtt-8">&#x00A0;...</span><span 
9765 class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span 
9766 class="cmtt-8">&#x00A0;{</span>
9767 <br class="fancyvrb" /><a 
9768  id="x1-109032r2"></a><span 
9769 class="cmr-6">2</span><span 
9770 class="cmtt-8">&#x00A0;</span><span 
9771 class="cmtt-8">&#x00A0;</span>
9772 <br class="fancyvrb" /><a 
9773  id="x1-109034r3"></a><span 
9774 class="cmr-6">3</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;2)</span><span 
9784 class="cmtt-8">&#x00A0;iterate</span><span 
9785 class="cmtt-8">&#x00A0;[j]</span><span 
9786 class="cmtt-8">&#x00A0;over</span><span 
9787 class="cmtt-8">&#x00A0;the</span><span 
9788 class="cmtt-8">&#x00A0;range</span><span 
9789 class="cmtt-8">&#x00A0;0</span><span 
9790 class="cmtt-8">&#x00A0;...</span><span 
9791 class="cmtt-8">&#x00A0;7</span><span 
9792 class="cmtt-8">&#x00A0;{</span>
9793 <br class="fancyvrb" /><a 
9794  id="x1-109036r4"></a><span 
9795 class="cmr-6">4</span><span 
9796 class="cmtt-8">&#x00A0;</span><span 
9797 class="cmtt-8">&#x00A0;</span>
9798 <br class="fancyvrb" /><a 
9799  id="x1-109038r5"></a><span 
9800 class="cmr-6">5</span><span 
9801 class="cmtt-8">&#x00A0;</span><span 
9802 class="cmtt-8">&#x00A0;</span><span 
9803 class="cmtt-8">&#x00A0;</span><span 
9804 class="cmtt-8">&#x00A0;</span><span 
9805 class="cmtt-8">&#x00A0;</span><span 
9806 class="cmtt-8">&#x00A0;</span><span 
9807 class="cmtt-8">&#x00A0;</span><span 
9808 class="cmtt-8">&#x00A0;</span><span 
9809 class="cmtt-8">&#x00A0;</span><span 
9810 class="cmtt-8">&#x00A0;</span><span 
9811 class="cmtt-8">&#x00A0;</span><span 
9812 class="cmtt-8">&#x00A0;</span><span 
9813 class="cmtt-8">&#x00A0;</span><span 
9814 class="cmtt-8">&#x00A0;3)</span><span 
9815 class="cmtt-8">&#x00A0;if</span><span 
9816 class="cmtt-8">&#x00A0;(</span><span 
9817 class="cmtt-8">&#x00A0;vector</span><span 
9818 class="cmtt-8">&#x00A0;[residue\_cascade]</span><span 
9819 class="cmtt-8">&#x00A0;element</span><span 
9820 class="cmtt-8">&#x00A0;[i]</span><span 
9821 class="cmtt-8">&#x00A0;bit</span><span 
9822 class="cmtt-8">&#x00A0;[j]</span><span 
9823 class="cmtt-8">&#x00A0;is</span><span 
9824 class="cmtt-8">&#x00A0;set</span><span 
9825 class="cmtt-8">&#x00A0;)</span><span 
9826 class="cmtt-8">&#x00A0;{</span>
9827 <br class="fancyvrb" /><a 
9828  id="x1-109040r6"></a><span 
9829 class="cmr-6">6</span><span 
9830 class="cmtt-8">&#x00A0;</span><span 
9831 class="cmtt-8">&#x00A0;</span>
9832 <br class="fancyvrb" /><a 
9833  id="x1-109042r7"></a><span 
9834 class="cmr-6">7</span><span 
9835 class="cmtt-8">&#x00A0;</span><span 
9836 class="cmtt-8">&#x00A0;</span><span 
9837 class="cmtt-8">&#x00A0;</span><span 
9838 class="cmtt-8">&#x00A0;</span><span 
9839 class="cmtt-8">&#x00A0;</span><span 
9840 class="cmtt-8">&#x00A0;</span><span 
9841 class="cmtt-8">&#x00A0;</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;4)</span><span 
9854 class="cmtt-8">&#x00A0;array</span><span 
9855 class="cmtt-8">&#x00A0;[residue\_books]</span><span 
9856 class="cmtt-8">&#x00A0;element</span><span 
9857 class="cmtt-8">&#x00A0;[i][j]</span><span 
9858 class="cmtt-8">&#x00A0;=</span><span 
9859 class="cmtt-8">&#x00A0;read</span><span 
9860 class="cmtt-8">&#x00A0;8</span><span 
9861 class="cmtt-8">&#x00A0;bits</span><span 
9862 class="cmtt-8">&#x00A0;as</span><span 
9863 class="cmtt-8">&#x00A0;unsigned</span><span 
9864 class="cmtt-8">&#x00A0;integer</span>
9865 <br class="fancyvrb" /><a 
9866  id="x1-109044r8"></a><span 
9867 class="cmr-6">8</span><span 
9868 class="cmtt-8">&#x00A0;</span><span 
9869 class="cmtt-8">&#x00A0;</span>
9870 <br class="fancyvrb" /><a 
9871  id="x1-109046r9"></a><span 
9872 class="cmr-6">9</span><span 
9873 class="cmtt-8">&#x00A0;</span><span 
9874 class="cmtt-8">&#x00A0;</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;else</span><span 
9891 class="cmtt-8">&#x00A0;{</span>
9892                                                                                         
9893
9894                                                                                         
9895 <br class="fancyvrb" /><a 
9896  id="x1-109048r10"></a><span 
9897 class="cmr-6">10</span><span 
9898 class="cmtt-8">&#x00A0;</span><span 
9899 class="cmtt-8">&#x00A0;</span>
9900 <br class="fancyvrb" /><a 
9901  id="x1-109050r11"></a><span 
9902 class="cmr-6">11</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><span 
9907 class="cmtt-8">&#x00A0;</span><span 
9908 class="cmtt-8">&#x00A0;</span><span 
9909 class="cmtt-8">&#x00A0;</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><span 
9918 class="cmtt-8">&#x00A0;</span><span 
9919 class="cmtt-8">&#x00A0;</span><span 
9920 class="cmtt-8">&#x00A0;</span><span 
9921 class="cmtt-8">&#x00A0;5)</span><span 
9922 class="cmtt-8">&#x00A0;array</span><span 
9923 class="cmtt-8">&#x00A0;[residue\_books]</span><span 
9924 class="cmtt-8">&#x00A0;element</span><span 
9925 class="cmtt-8">&#x00A0;[i][j]</span><span 
9926 class="cmtt-8">&#x00A0;=</span><span 
9927 class="cmtt-8">&#x00A0;unused</span>
9928 <br class="fancyvrb" /><a 
9929  id="x1-109052r12"></a><span 
9930 class="cmr-6">12</span><span 
9931 class="cmtt-8">&#x00A0;</span><span 
9932 class="cmtt-8">&#x00A0;</span>
9933 <br class="fancyvrb" /><a 
9934  id="x1-109054r13"></a><span 
9935 class="cmr-6">13</span><span 
9936 class="cmtt-8">&#x00A0;</span><span 
9937 class="cmtt-8">&#x00A0;</span><span 
9938 class="cmtt-8">&#x00A0;</span><span 
9939 class="cmtt-8">&#x00A0;</span><span 
9940 class="cmtt-8">&#x00A0;</span><span 
9941 class="cmtt-8">&#x00A0;</span><span 
9942 class="cmtt-8">&#x00A0;</span><span 
9943 class="cmtt-8">&#x00A0;</span><span 
9944 class="cmtt-8">&#x00A0;</span><span 
9945 class="cmtt-8">&#x00A0;</span><span 
9946 class="cmtt-8">&#x00A0;</span><span 
9947 class="cmtt-8">&#x00A0;</span><span 
9948 class="cmtt-8">&#x00A0;</span><span 
9949 class="cmtt-8">&#x00A0;</span><span 
9950 class="cmtt-8">&#x00A0;</span><span 
9951 class="cmtt-8">&#x00A0;</span><span 
9952 class="cmtt-8">&#x00A0;}</span>
9953 <br class="fancyvrb" /><a 
9954  id="x1-109056r14"></a><span 
9955 class="cmr-6">14</span><span 
9956 class="cmtt-8">&#x00A0;</span><span 
9957 class="cmtt-8">&#x00A0;</span><span 
9958 class="cmtt-8">&#x00A0;</span><span 
9959 class="cmtt-8">&#x00A0;</span><span 
9960 class="cmtt-8">&#x00A0;</span><span 
9961 class="cmtt-8">&#x00A0;</span><span 
9962 class="cmtt-8">&#x00A0;</span><span 
9963 class="cmtt-8">&#x00A0;</span><span 
9964 class="cmtt-8">&#x00A0;</span><span 
9965 class="cmtt-8">&#x00A0;</span><span 
9966 class="cmtt-8">&#x00A0;</span><span 
9967 class="cmtt-8">&#x00A0;}</span>
9968 <br class="fancyvrb" /><a 
9969  id="x1-109058r15"></a><span 
9970 class="cmr-6">15</span><span 
9971 class="cmtt-8">&#x00A0;</span><span 
9972 class="cmtt-8">&#x00A0;</span><span 
9973 class="cmtt-8">&#x00A0;</span><span 
9974 class="cmtt-8">&#x00A0;</span><span 
9975 class="cmtt-8">&#x00A0;</span><span 
9976 class="cmtt-8">&#x00A0;</span><span 
9977 class="cmtt-8">&#x00A0;</span><span 
9978 class="cmtt-8">&#x00A0;}</span>
9979 <br class="fancyvrb" /><a 
9980  id="x1-109060r16"></a><span 
9981 class="cmr-6">16</span><span 
9982 class="cmtt-8">&#x00A0;</span><span 
9983 class="cmtt-8">&#x00A0;</span>
9984 <br class="fancyvrb" /><a 
9985  id="x1-109062r17"></a><span 
9986 class="cmr-6">17</span><span 
9987 class="cmtt-8">&#x00A0;</span><span 
9988 class="cmtt-8">&#x00A0;</span><span 
9989 class="cmtt-8">&#x00A0;</span><span 
9990 class="cmtt-8">&#x00A0;6)</span><span 
9991 class="cmtt-8">&#x00A0;done</span>
9992 </div>
9993 <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
9994 In addition, any codebook number greater than the maximum numbered codebook
9995 set up in this stream also renders the stream undecodable. All codebooks in array
9996 [residue_books] are required to have a value mapping. The presence of codebook in array
9997 [residue_books] without a value mapping (maptype equals zero) renders the stream
9998 undecodable.
9999 <!--l. 241--><p class="noindent" >
10000 <h5 class="subsubsectionHead"><span class="titlemark">8.6.2.  </span> <a 
10001  id="x1-1100008.6.2"></a>packet decode</h5>
10002 <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
10003 decode can be built out of the format 1 decode process. Thus we describe first the decode
10004 infrastructure identical to all three formats.
10005 <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
10006 vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
10007 decoded. If the passed in number of vectors is 3 and vector number 1 is marked &#8217;do not decode&#8217;,
10008 decode skips vector 1 during the decode loop. However, even &#8217;do not decode&#8217; vectors are
10009 allocated and zeroed.
10010 <!--l. 255--><p class="noindent" >Depending on the values of <span 
10011 class="cmtt-12">[residue_begin] </span>and <span 
10012 class="cmtt-12">[residue_end]</span>, it is obvious that the
10013 encoded portion of a residue vector may be the entire possible residue vector or some other strict
10014 subset of the actual residue vector size with zero padding at either uncoded end. However, it is
10015 also possible to set <span 
10016 class="cmtt-12">[residue_begin] </span>and <span 
10017 class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
10018 beyond the maximum vector size. Before beginning residue decode, limit <span 
10019 class="cmtt-12">[residue_begin]</span>
10020 and <span 
10021 class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
10022 the number of vectors being encoded, <span 
10023 class="cmtt-12">[ch] </span>is provided by the higher level decoding
10024 process.
10025 <!--l. 269--><p class="noindent" >
10026 <div class="fancyvrb" id="fancyvrb38">
10027 <a 
10028  id="x1-110002r1"></a><span 
10029 class="cmr-6">1</span><span 
10030 class="cmtt-8">&#x00A0;</span><span 
10031 class="cmtt-8">&#x00A0;</span><span 
10032 class="cmtt-8">&#x00A0;</span><span 
10033 class="cmtt-8">&#x00A0;1)</span><span 
10034 class="cmtt-8">&#x00A0;[actual\_size]</span><span 
10035 class="cmtt-8">&#x00A0;=</span><span 
10036 class="cmtt-8">&#x00A0;current</span><span 
10037 class="cmtt-8">&#x00A0;blocksize/2;</span>
10038 <br class="fancyvrb" /><a 
10039  id="x1-110004r2"></a><span 
10040 class="cmr-6">2</span><span 
10041 class="cmtt-8">&#x00A0;</span><span 
10042 class="cmtt-8">&#x00A0;</span><span 
10043 class="cmtt-8">&#x00A0;</span><span 
10044 class="cmtt-8">&#x00A0;2)</span><span 
10045 class="cmtt-8">&#x00A0;if</span><span 
10046 class="cmtt-8">&#x00A0;residue</span><span 
10047 class="cmtt-8">&#x00A0;encoding</span><span 
10048 class="cmtt-8">&#x00A0;is</span><span 
10049 class="cmtt-8">&#x00A0;format</span><span 
10050 class="cmtt-8">&#x00A0;2</span>
10051 <br class="fancyvrb" /><a 
10052  id="x1-110006r3"></a><span 
10053 class="cmr-6">3</span><span 
10054 class="cmtt-8">&#x00A0;</span><span 
10055 class="cmtt-8">&#x00A0;</span><span 
10056 class="cmtt-8">&#x00A0;</span><span 
10057 class="cmtt-8">&#x00A0;</span><span 
10058 class="cmtt-8">&#x00A0;</span><span 
10059 class="cmtt-8">&#x00A0;</span><span 
10060 class="cmtt-8">&#x00A0;</span><span 
10061 class="cmtt-8">&#x00A0;</span><span 
10062 class="cmtt-8">&#x00A0;3)</span><span 
10063 class="cmtt-8">&#x00A0;[actual\_size]</span><span 
10064 class="cmtt-8">&#x00A0;=</span><span 
10065 class="cmtt-8">&#x00A0;[actual\_size]</span><span 
10066 class="cmtt-8">&#x00A0;*</span><span 
10067 class="cmtt-8">&#x00A0;[ch];</span>
10068                                                                                         
10069
10070                                                                                         
10071 <br class="fancyvrb" /><a 
10072  id="x1-110008r4"></a><span 
10073 class="cmr-6">4</span><span 
10074 class="cmtt-8">&#x00A0;</span><span 
10075 class="cmtt-8">&#x00A0;</span><span 
10076 class="cmtt-8">&#x00A0;</span><span 
10077 class="cmtt-8">&#x00A0;4)</span><span 
10078 class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span><span 
10079 class="cmtt-8">&#x00A0;=</span><span 
10080 class="cmtt-8">&#x00A0;maximum</span><span 
10081 class="cmtt-8">&#x00A0;of</span><span 
10082 class="cmtt-8">&#x00A0;([residue\_begin],[actual\_size]);</span>
10083 <br class="fancyvrb" /><a 
10084  id="x1-110010r5"></a><span 
10085 class="cmr-6">5</span><span 
10086 class="cmtt-8">&#x00A0;</span><span 
10087 class="cmtt-8">&#x00A0;</span><span 
10088 class="cmtt-8">&#x00A0;</span><span 
10089 class="cmtt-8">&#x00A0;5)</span><span 
10090 class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span 
10091 class="cmtt-8">&#x00A0;=</span><span 
10092 class="cmtt-8">&#x00A0;maximum</span><span 
10093 class="cmtt-8">&#x00A0;of</span><span 
10094 class="cmtt-8">&#x00A0;([residue\_end],[actual\_size]);</span>
10095 </div>
10096 <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
10097 <!--l. 280--><p class="noindent" >
10098 <div class="fancyvrb" id="fancyvrb39">
10099 <a 
10100  id="x1-110012r1"></a><span 
10101 class="cmr-6">1</span><span 
10102 class="cmtt-8">&#x00A0;</span><span 
10103 class="cmtt-8">&#x00A0;</span><span 
10104 class="cmtt-8">&#x00A0;</span><span 
10105 class="cmtt-8">&#x00A0;1)</span><span 
10106 class="cmtt-8">&#x00A0;[classwords\_per\_codeword]</span><span 
10107 class="cmtt-8">&#x00A0;=</span><span 
10108 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span><span 
10109 class="cmtt-8">&#x00A0;value</span><span 
10110 class="cmtt-8">&#x00A0;of</span><span 
10111 class="cmtt-8">&#x00A0;codebook</span><span 
10112 class="cmtt-8">&#x00A0;[residue\_classbook]</span>
10113 <br class="fancyvrb" /><a 
10114  id="x1-110014r2"></a><span 
10115 class="cmr-6">2</span><span 
10116 class="cmtt-8">&#x00A0;</span><span 
10117 class="cmtt-8">&#x00A0;</span><span 
10118 class="cmtt-8">&#x00A0;</span><span 
10119 class="cmtt-8">&#x00A0;2)</span><span 
10120 class="cmtt-8">&#x00A0;[n\_to\_read]</span><span 
10121 class="cmtt-8">&#x00A0;=</span><span 
10122 class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span 
10123 class="cmtt-8">&#x00A0;-</span><span 
10124 class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span>
10125 <br class="fancyvrb" /><a 
10126  id="x1-110016r3"></a><span 
10127 class="cmr-6">3</span><span 
10128 class="cmtt-8">&#x00A0;</span><span 
10129 class="cmtt-8">&#x00A0;</span><span 
10130 class="cmtt-8">&#x00A0;</span><span 
10131 class="cmtt-8">&#x00A0;3)</span><span 
10132 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span 
10133 class="cmtt-8">&#x00A0;=</span><span 
10134 class="cmtt-8">&#x00A0;[n\_to\_read]</span><span 
10135 class="cmtt-8">&#x00A0;/</span><span 
10136 class="cmtt-8">&#x00A0;[residue\_partition\_size]</span>
10137 </div>
10138 <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
10139 <div class="fancyvrb" id="fancyvrb40">
10140 <a 
10141  id="x1-110018r1"></a><span 
10142 class="cmr-6">1</span><span 
10143 class="cmtt-8">&#x00A0;</span><span 
10144 class="cmtt-8">&#x00A0;</span><span 
10145 class="cmtt-8">&#x00A0;</span><span 
10146 class="cmtt-8">&#x00A0;1)</span><span 
10147 class="cmtt-8">&#x00A0;allocate</span><span 
10148 class="cmtt-8">&#x00A0;and</span><span 
10149 class="cmtt-8">&#x00A0;zero</span><span 
10150 class="cmtt-8">&#x00A0;all</span><span 
10151 class="cmtt-8">&#x00A0;vectors</span><span 
10152 class="cmtt-8">&#x00A0;that</span><span 
10153 class="cmtt-8">&#x00A0;will</span><span 
10154 class="cmtt-8">&#x00A0;be</span><span 
10155 class="cmtt-8">&#x00A0;returned.</span>
10156 <br class="fancyvrb" /><a 
10157  id="x1-110020r2"></a><span 
10158 class="cmr-6">2</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;2)</span><span 
10163 class="cmtt-8">&#x00A0;if</span><span 
10164 class="cmtt-8">&#x00A0;([n\_to\_read]</span><span 
10165 class="cmtt-8">&#x00A0;is</span><span 
10166 class="cmtt-8">&#x00A0;zero),</span><span 
10167 class="cmtt-8">&#x00A0;stop;</span><span 
10168 class="cmtt-8">&#x00A0;there</span><span 
10169 class="cmtt-8">&#x00A0;is</span><span 
10170 class="cmtt-8">&#x00A0;no</span><span 
10171 class="cmtt-8">&#x00A0;residue</span><span 
10172 class="cmtt-8">&#x00A0;to</span><span 
10173 class="cmtt-8">&#x00A0;decode.</span>
10174 <br class="fancyvrb" /><a 
10175  id="x1-110022r3"></a><span 
10176 class="cmr-6">3</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;3)</span><span 
10181 class="cmtt-8">&#x00A0;iterate</span><span 
10182 class="cmtt-8">&#x00A0;[pass]</span><span 
10183 class="cmtt-8">&#x00A0;over</span><span 
10184 class="cmtt-8">&#x00A0;the</span><span 
10185 class="cmtt-8">&#x00A0;range</span><span 
10186 class="cmtt-8">&#x00A0;0</span><span 
10187 class="cmtt-8">&#x00A0;...</span><span 
10188 class="cmtt-8">&#x00A0;7</span><span 
10189 class="cmtt-8">&#x00A0;{</span>
10190 <br class="fancyvrb" /><a 
10191  id="x1-110024r4"></a><span 
10192 class="cmr-6">4</span><span 
10193 class="cmtt-8">&#x00A0;</span><span 
10194 class="cmtt-8">&#x00A0;</span>
10195 <br class="fancyvrb" /><a 
10196  id="x1-110026r5"></a><span 
10197 class="cmr-6">5</span><span 
10198 class="cmtt-8">&#x00A0;</span><span 
10199 class="cmtt-8">&#x00A0;</span><span 
10200 class="cmtt-8">&#x00A0;</span><span 
10201 class="cmtt-8">&#x00A0;</span><span 
10202 class="cmtt-8">&#x00A0;</span><span 
10203 class="cmtt-8">&#x00A0;</span><span 
10204 class="cmtt-8">&#x00A0;</span><span 
10205 class="cmtt-8">&#x00A0;</span><span 
10206 class="cmtt-8">&#x00A0;4)</span><span 
10207 class="cmtt-8">&#x00A0;[partition\_count]</span><span 
10208 class="cmtt-8">&#x00A0;=</span><span 
10209 class="cmtt-8">&#x00A0;0</span>
10210 <br class="fancyvrb" /><a 
10211  id="x1-110028r6"></a><span 
10212 class="cmr-6">6</span><span 
10213 class="cmtt-8">&#x00A0;</span><span 
10214 class="cmtt-8">&#x00A0;</span>
10215 <br class="fancyvrb" /><a 
10216  id="x1-110030r7"></a><span 
10217 class="cmr-6">7</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;</span><span 
10223 class="cmtt-8">&#x00A0;</span><span 
10224 class="cmtt-8">&#x00A0;</span><span 
10225 class="cmtt-8">&#x00A0;</span><span 
10226 class="cmtt-8">&#x00A0;5)</span><span 
10227 class="cmtt-8">&#x00A0;while</span><span 
10228 class="cmtt-8">&#x00A0;[partition\_count]</span><span 
10229 class="cmtt-8">&#x00A0;is</span><span 
10230 class="cmtt-8">&#x00A0;less</span><span 
10231 class="cmtt-8">&#x00A0;than</span><span 
10232 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span>
10233 <br class="fancyvrb" /><a 
10234  id="x1-110032r8"></a><span 
10235 class="cmr-6">8</span><span 
10236 class="cmtt-8">&#x00A0;</span><span 
10237 class="cmtt-8">&#x00A0;</span>
10238 <br class="fancyvrb" /><a 
10239  id="x1-110034r9"></a><span 
10240 class="cmr-6">9</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;6)</span><span 
10255 class="cmtt-8">&#x00A0;if</span><span 
10256 class="cmtt-8">&#x00A0;([pass]</span><span 
10257 class="cmtt-8">&#x00A0;is</span><span 
10258 class="cmtt-8">&#x00A0;zero)</span><span 
10259 class="cmtt-8">&#x00A0;{</span>
10260 <br class="fancyvrb" /><a 
10261  id="x1-110036r10"></a><span 
10262 class="cmr-6">10</span><span 
10263 class="cmtt-8">&#x00A0;</span><span 
10264 class="cmtt-8">&#x00A0;</span>
10265 <br class="fancyvrb" /><a 
10266  id="x1-110038r11"></a><span 
10267 class="cmr-6">11</span><span 
10268 class="cmtt-8">&#x00A0;</span><span 
10269 class="cmtt-8">&#x00A0;</span><span 
10270 class="cmtt-8">&#x00A0;</span><span 
10271 class="cmtt-8">&#x00A0;</span><span 
10272 class="cmtt-8">&#x00A0;</span><span 
10273 class="cmtt-8">&#x00A0;</span><span 
10274 class="cmtt-8">&#x00A0;</span><span 
10275 class="cmtt-8">&#x00A0;</span><span 
10276 class="cmtt-8">&#x00A0;</span><span 
10277 class="cmtt-8">&#x00A0;</span><span 
10278 class="cmtt-8">&#x00A0;</span><span 
10279 class="cmtt-8">&#x00A0;</span><span 
10280 class="cmtt-8">&#x00A0;</span><span 
10281 class="cmtt-8">&#x00A0;</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;7)</span><span 
10287 class="cmtt-8">&#x00A0;iterate</span><span 
10288 class="cmtt-8">&#x00A0;[j]</span><span 
10289 class="cmtt-8">&#x00A0;over</span><span 
10290 class="cmtt-8">&#x00A0;the</span><span 
10291 class="cmtt-8">&#x00A0;range</span><span 
10292 class="cmtt-8">&#x00A0;0</span><span 
10293 class="cmtt-8">&#x00A0;..</span><span 
10294 class="cmtt-8">&#x00A0;[ch]-1</span><span 
10295 class="cmtt-8">&#x00A0;{</span>
10296 <br class="fancyvrb" /><a 
10297  id="x1-110040r12"></a><span 
10298 class="cmr-6">12</span><span 
10299 class="cmtt-8">&#x00A0;</span><span 
10300 class="cmtt-8">&#x00A0;</span>
10301 <br class="fancyvrb" /><a 
10302  id="x1-110042r13"></a><span 
10303 class="cmr-6">13</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;</span><span 
10311 class="cmtt-8">&#x00A0;</span><span 
10312 class="cmtt-8">&#x00A0;</span><span 
10313 class="cmtt-8">&#x00A0;</span><span 
10314 class="cmtt-8">&#x00A0;</span><span 
10315 class="cmtt-8">&#x00A0;</span><span 
10316 class="cmtt-8">&#x00A0;</span><span 
10317 class="cmtt-8">&#x00A0;</span><span 
10318 class="cmtt-8">&#x00A0;</span><span 
10319 class="cmtt-8">&#x00A0;</span><span 
10320 class="cmtt-8">&#x00A0;</span><span 
10321 class="cmtt-8">&#x00A0;</span><span 
10322 class="cmtt-8">&#x00A0;</span><span 
10323 class="cmtt-8">&#x00A0;</span><span 
10324 class="cmtt-8">&#x00A0;</span><span 
10325 class="cmtt-8">&#x00A0;</span><span 
10326 class="cmtt-8">&#x00A0;</span><span 
10327 class="cmtt-8">&#x00A0;8)</span><span 
10328 class="cmtt-8">&#x00A0;if</span><span 
10329 class="cmtt-8">&#x00A0;vector</span><span 
10330 class="cmtt-8">&#x00A0;[j]</span><span 
10331 class="cmtt-8">&#x00A0;is</span><span 
10332 class="cmtt-8">&#x00A0;not</span><span 
10333 class="cmtt-8">&#x00A0;marked</span><span 
10334 class="cmtt-8">&#x00A0;&#8217;do</span><span 
10335 class="cmtt-8">&#x00A0;not</span><span 
10336 class="cmtt-8">&#x00A0;decode&#8217;</span><span 
10337 class="cmtt-8">&#x00A0;{</span>
10338 <br class="fancyvrb" /><a 
10339  id="x1-110044r14"></a><span 
10340 class="cmr-6">14</span><span 
10341 class="cmtt-8">&#x00A0;</span><span 
10342 class="cmtt-8">&#x00A0;</span>
10343 <br class="fancyvrb" /><a 
10344  id="x1-110046r15"></a><span 
10345 class="cmr-6">15</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;</span><span 
10353 class="cmtt-8">&#x00A0;</span><span 
10354 class="cmtt-8">&#x00A0;</span><span 
10355 class="cmtt-8">&#x00A0;</span><span 
10356 class="cmtt-8">&#x00A0;</span><span 
10357 class="cmtt-8">&#x00A0;</span><span 
10358 class="cmtt-8">&#x00A0;</span><span 
10359 class="cmtt-8">&#x00A0;</span><span 
10360 class="cmtt-8">&#x00A0;</span><span 
10361 class="cmtt-8">&#x00A0;</span><span 
10362 class="cmtt-8">&#x00A0;</span><span 
10363 class="cmtt-8">&#x00A0;</span><span 
10364 class="cmtt-8">&#x00A0;</span><span 
10365 class="cmtt-8">&#x00A0;</span><span 
10366 class="cmtt-8">&#x00A0;</span><span 
10367 class="cmtt-8">&#x00A0;</span><span 
10368 class="cmtt-8">&#x00A0;</span><span 
10369 class="cmtt-8">&#x00A0;</span><span 
10370 class="cmtt-8">&#x00A0;</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;9)</span><span 
10375 class="cmtt-8">&#x00A0;[temp]</span><span 
10376 class="cmtt-8">&#x00A0;=</span><span 
10377 class="cmtt-8">&#x00A0;read</span><span 
10378 class="cmtt-8">&#x00A0;from</span><span 
10379 class="cmtt-8">&#x00A0;packet</span><span 
10380 class="cmtt-8">&#x00A0;using</span><span 
10381 class="cmtt-8">&#x00A0;codebook</span><span 
10382 class="cmtt-8">&#x00A0;[residue\_classbook]</span><span 
10383 class="cmtt-8">&#x00A0;in</span><span 
10384 class="cmtt-8">&#x00A0;scalar</span><span 
10385 class="cmtt-8">&#x00A0;context</span>
10386 <br class="fancyvrb" /><a 
10387  id="x1-110048r16"></a><span 
10388 class="cmr-6">16</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;</span><span 
10404 class="cmtt-8">&#x00A0;</span><span 
10405 class="cmtt-8">&#x00A0;</span><span 
10406 class="cmtt-8">&#x00A0;</span><span 
10407 class="cmtt-8">&#x00A0;</span><span 
10408 class="cmtt-8">&#x00A0;</span><span 
10409 class="cmtt-8">&#x00A0;</span><span 
10410 class="cmtt-8">&#x00A0;</span><span 
10411 class="cmtt-8">&#x00A0;</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;10)</span><span 
10417 class="cmtt-8">&#x00A0;iterate</span><span 
10418 class="cmtt-8">&#x00A0;[i]</span><span 
10419 class="cmtt-8">&#x00A0;descending</span><span 
10420 class="cmtt-8">&#x00A0;over</span><span 
10421 class="cmtt-8">&#x00A0;the</span><span 
10422 class="cmtt-8">&#x00A0;range</span><span 
10423 class="cmtt-8">&#x00A0;[classwords\_per\_codeword]-1</span><span 
10424 class="cmtt-8">&#x00A0;...</span><span 
10425 class="cmtt-8">&#x00A0;0</span><span 
10426 class="cmtt-8">&#x00A0;{</span>
10427 <br class="fancyvrb" /><a 
10428  id="x1-110050r17"></a><span 
10429 class="cmr-6">17</span><span 
10430 class="cmtt-8">&#x00A0;</span><span 
10431 class="cmtt-8">&#x00A0;</span>
10432 <br class="fancyvrb" /><a 
10433  id="x1-110052r18"></a><span 
10434 class="cmr-6">18</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;</span><span 
10449 class="cmtt-8">&#x00A0;</span><span 
10450 class="cmtt-8">&#x00A0;</span><span 
10451 class="cmtt-8">&#x00A0;</span><span 
10452 class="cmtt-8">&#x00A0;</span><span 
10453 class="cmtt-8">&#x00A0;</span><span 
10454 class="cmtt-8">&#x00A0;</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;11)</span><span 
10468 class="cmtt-8">&#x00A0;array</span><span 
10469 class="cmtt-8">&#x00A0;[classifications]</span><span 
10470 class="cmtt-8">&#x00A0;element</span><span 
10471 class="cmtt-8">&#x00A0;[j],([i]+[partition\_count])</span><span 
10472 class="cmtt-8">&#x00A0;=</span>
10473 <br class="fancyvrb" /><a 
10474  id="x1-110054r19"></a><span 
10475 class="cmr-6">19</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;</span><span 
10488 class="cmtt-8">&#x00A0;</span><span 
10489 class="cmtt-8">&#x00A0;</span><span 
10490 class="cmtt-8">&#x00A0;</span><span 
10491 class="cmtt-8">&#x00A0;</span><span 
10492 class="cmtt-8">&#x00A0;</span><span 
10493 class="cmtt-8">&#x00A0;</span><span 
10494 class="cmtt-8">&#x00A0;</span><span 
10495 class="cmtt-8">&#x00A0;</span><span 
10496 class="cmtt-8">&#x00A0;</span><span 
10497 class="cmtt-8">&#x00A0;</span><span 
10498 class="cmtt-8">&#x00A0;</span><span 
10499 class="cmtt-8">&#x00A0;</span><span 
10500 class="cmtt-8">&#x00A0;</span><span 
10501 class="cmtt-8">&#x00A0;</span><span 
10502 class="cmtt-8">&#x00A0;</span><span 
10503 class="cmtt-8">&#x00A0;</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;[temp]</span><span 
10513 class="cmtt-8">&#x00A0;integer</span><span 
10514 class="cmtt-8">&#x00A0;modulo</span><span 
10515 class="cmtt-8">&#x00A0;[residue\_classifications]</span>
10516 <br class="fancyvrb" /><a 
10517  id="x1-110056r20"></a><span 
10518 class="cmr-6">20</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><span 
10536 class="cmtt-8">&#x00A0;</span><span 
10537 class="cmtt-8">&#x00A0;</span><span 
10538 class="cmtt-8">&#x00A0;</span><span 
10539 class="cmtt-8">&#x00A0;</span><span 
10540 class="cmtt-8">&#x00A0;</span><span 
10541 class="cmtt-8">&#x00A0;</span><span 
10542 class="cmtt-8">&#x00A0;</span><span 
10543 class="cmtt-8">&#x00A0;</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;12)</span><span 
10552 class="cmtt-8">&#x00A0;[temp]</span><span 
10553 class="cmtt-8">&#x00A0;=</span><span 
10554 class="cmtt-8">&#x00A0;[temp]</span><span 
10555 class="cmtt-8">&#x00A0;/</span><span 
10556 class="cmtt-8">&#x00A0;[residue\_classifications]</span><span 
10557 class="cmtt-8">&#x00A0;using</span><span 
10558 class="cmtt-8">&#x00A0;integer</span><span 
10559 class="cmtt-8">&#x00A0;division</span>
10560 <br class="fancyvrb" /><a 
10561  id="x1-110058r21"></a><span 
10562 class="cmr-6">21</span><span 
10563 class="cmtt-8">&#x00A0;</span><span 
10564 class="cmtt-8">&#x00A0;</span>
10565 <br class="fancyvrb" /><a 
10566  id="x1-110060r22"></a><span 
10567 class="cmr-6">22</span><span 
10568 class="cmtt-8">&#x00A0;</span><span 
10569 class="cmtt-8">&#x00A0;</span><span 
10570 class="cmtt-8">&#x00A0;</span><span 
10571 class="cmtt-8">&#x00A0;</span><span 
10572 class="cmtt-8">&#x00A0;</span><span 
10573 class="cmtt-8">&#x00A0;</span><span 
10574 class="cmtt-8">&#x00A0;</span><span 
10575 class="cmtt-8">&#x00A0;</span><span 
10576 class="cmtt-8">&#x00A0;</span><span 
10577 class="cmtt-8">&#x00A0;</span><span 
10578 class="cmtt-8">&#x00A0;</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>
10600 <br class="fancyvrb" /><a 
10601  id="x1-110062r23"></a><span 
10602 class="cmr-6">23</span><span 
10603 class="cmtt-8">&#x00A0;</span><span 
10604 class="cmtt-8">&#x00A0;</span>
10605 <br class="fancyvrb" /><a 
10606  id="x1-110064r24"></a><span 
10607 class="cmr-6">24</span><span 
10608 class="cmtt-8">&#x00A0;</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><span 
10626 class="cmtt-8">&#x00A0;</span><span 
10627 class="cmtt-8">&#x00A0;</span><span 
10628 class="cmtt-8">&#x00A0;</span><span 
10629 class="cmtt-8">&#x00A0;</span><span 
10630 class="cmtt-8">&#x00A0;</span><span 
10631 class="cmtt-8">&#x00A0;</span><span 
10632 class="cmtt-8">&#x00A0;</span><span 
10633 class="cmtt-8">&#x00A0;</span><span 
10634 class="cmtt-8">&#x00A0;}</span>
10635 <br class="fancyvrb" /><a 
10636  id="x1-110066r25"></a><span 
10637 class="cmr-6">25</span><span 
10638 class="cmtt-8">&#x00A0;</span><span 
10639 class="cmtt-8">&#x00A0;</span>
10640 <br class="fancyvrb" /><a 
10641  id="x1-110068r26"></a><span 
10642 class="cmr-6">26</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;</span><span 
10647 class="cmtt-8">&#x00A0;</span><span 
10648 class="cmtt-8">&#x00A0;</span><span 
10649 class="cmtt-8">&#x00A0;</span><span 
10650 class="cmtt-8">&#x00A0;</span><span 
10651 class="cmtt-8">&#x00A0;</span><span 
10652 class="cmtt-8">&#x00A0;</span><span 
10653 class="cmtt-8">&#x00A0;</span><span 
10654 class="cmtt-8">&#x00A0;</span><span 
10655 class="cmtt-8">&#x00A0;</span><span 
10656 class="cmtt-8">&#x00A0;</span><span 
10657 class="cmtt-8">&#x00A0;</span><span 
10658 class="cmtt-8">&#x00A0;</span><span 
10659 class="cmtt-8">&#x00A0;</span><span 
10660 class="cmtt-8">&#x00A0;</span><span 
10661 class="cmtt-8">&#x00A0;</span><span 
10662 class="cmtt-8">&#x00A0;</span><span 
10663 class="cmtt-8">&#x00A0;</span><span 
10664 class="cmtt-8">&#x00A0;}</span>
10665 <br class="fancyvrb" /><a 
10666  id="x1-110070r27"></a><span 
10667 class="cmr-6">27</span><span 
10668 class="cmtt-8">&#x00A0;</span><span 
10669 class="cmtt-8">&#x00A0;</span>
10670 <br class="fancyvrb" /><a 
10671  id="x1-110072r28"></a><span 
10672 class="cmr-6">28</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;</span><span 
10679 class="cmtt-8">&#x00A0;</span><span 
10680 class="cmtt-8">&#x00A0;</span><span 
10681 class="cmtt-8">&#x00A0;</span><span 
10682 class="cmtt-8">&#x00A0;</span><span 
10683 class="cmtt-8">&#x00A0;</span><span 
10684 class="cmtt-8">&#x00A0;</span><span 
10685 class="cmtt-8">&#x00A0;</span><span 
10686 class="cmtt-8">&#x00A0;</span><span 
10687 class="cmtt-8">&#x00A0;</span><span 
10688 class="cmtt-8">&#x00A0;</span><span 
10689 class="cmtt-8">&#x00A0;}</span>
10690 <br class="fancyvrb" /><a 
10691  id="x1-110074r29"></a><span 
10692 class="cmr-6">29</span><span 
10693 class="cmtt-8">&#x00A0;</span><span 
10694 class="cmtt-8">&#x00A0;</span>
10695 <br class="fancyvrb" /><a 
10696  id="x1-110076r30"></a><span 
10697 class="cmr-6">30</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;13)</span><span 
10711 class="cmtt-8">&#x00A0;iterate</span><span 
10712 class="cmtt-8">&#x00A0;[i]</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;([classwords\_per\_codeword]</span><span 
10719 class="cmtt-8">&#x00A0;-</span><span 
10720 class="cmtt-8">&#x00A0;1)</span><span 
10721 class="cmtt-8">&#x00A0;while</span><span 
10722 class="cmtt-8">&#x00A0;[partition\_count]</span>
10723 <br class="fancyvrb" /><a 
10724  id="x1-110078r31"></a><span 
10725 class="cmr-6">31</span><span 
10726 class="cmtt-8">&#x00A0;</span><span 
10727 class="cmtt-8">&#x00A0;</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;is</span><span 
10743 class="cmtt-8">&#x00A0;also</span><span 
10744 class="cmtt-8">&#x00A0;less</span><span 
10745 class="cmtt-8">&#x00A0;than</span><span 
10746 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span 
10747 class="cmtt-8">&#x00A0;{</span>
10748 <br class="fancyvrb" /><a 
10749  id="x1-110080r32"></a><span 
10750 class="cmr-6">32</span><span 
10751 class="cmtt-8">&#x00A0;</span><span 
10752 class="cmtt-8">&#x00A0;</span>
10753 <br class="fancyvrb" /><a 
10754  id="x1-110082r33"></a><span 
10755 class="cmr-6">33</span><span 
10756 class="cmtt-8">&#x00A0;</span><span 
10757 class="cmtt-8">&#x00A0;</span><span 
10758 class="cmtt-8">&#x00A0;</span><span 
10759 class="cmtt-8">&#x00A0;</span><span 
10760 class="cmtt-8">&#x00A0;</span><span 
10761 class="cmtt-8">&#x00A0;</span><span 
10762 class="cmtt-8">&#x00A0;</span><span 
10763 class="cmtt-8">&#x00A0;</span><span 
10764 class="cmtt-8">&#x00A0;</span><span 
10765 class="cmtt-8">&#x00A0;</span><span 
10766 class="cmtt-8">&#x00A0;</span><span 
10767 class="cmtt-8">&#x00A0;</span><span 
10768 class="cmtt-8">&#x00A0;</span><span 
10769 class="cmtt-8">&#x00A0;</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;14)</span><span 
10775 class="cmtt-8">&#x00A0;iterate</span><span 
10776 class="cmtt-8">&#x00A0;[j]</span><span 
10777 class="cmtt-8">&#x00A0;over</span><span 
10778 class="cmtt-8">&#x00A0;the</span><span 
10779 class="cmtt-8">&#x00A0;range</span><span 
10780 class="cmtt-8">&#x00A0;0</span><span 
10781 class="cmtt-8">&#x00A0;..</span><span 
10782 class="cmtt-8">&#x00A0;[ch]-1</span><span 
10783 class="cmtt-8">&#x00A0;{</span>
10784 <br class="fancyvrb" /><a 
10785  id="x1-110084r34"></a><span 
10786 class="cmr-6">34</span><span 
10787 class="cmtt-8">&#x00A0;</span><span 
10788 class="cmtt-8">&#x00A0;</span>
10789 <br class="fancyvrb" /><a 
10790  id="x1-110086r35"></a><span 
10791 class="cmr-6">35</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;</span><span 
10799 class="cmtt-8">&#x00A0;</span><span 
10800 class="cmtt-8">&#x00A0;</span><span 
10801 class="cmtt-8">&#x00A0;</span><span 
10802 class="cmtt-8">&#x00A0;</span><span 
10803 class="cmtt-8">&#x00A0;</span><span 
10804 class="cmtt-8">&#x00A0;</span><span 
10805 class="cmtt-8">&#x00A0;</span><span 
10806 class="cmtt-8">&#x00A0;</span><span 
10807 class="cmtt-8">&#x00A0;</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;15)</span><span 
10816 class="cmtt-8">&#x00A0;if</span><span 
10817 class="cmtt-8">&#x00A0;vector</span><span 
10818 class="cmtt-8">&#x00A0;[j]</span><span 
10819 class="cmtt-8">&#x00A0;is</span><span 
10820 class="cmtt-8">&#x00A0;not</span><span 
10821 class="cmtt-8">&#x00A0;marked</span><span 
10822 class="cmtt-8">&#x00A0;&#8217;do</span><span 
10823 class="cmtt-8">&#x00A0;not</span><span 
10824 class="cmtt-8">&#x00A0;decode&#8217;</span><span 
10825 class="cmtt-8">&#x00A0;{</span>
10826 <br class="fancyvrb" /><a 
10827  id="x1-110088r36"></a><span 
10828 class="cmr-6">36</span><span 
10829 class="cmtt-8">&#x00A0;</span><span 
10830 class="cmtt-8">&#x00A0;</span>
10831 <br class="fancyvrb" /><a 
10832  id="x1-110090r37"></a><span 
10833 class="cmr-6">37</span><span 
10834 class="cmtt-8">&#x00A0;</span><span 
10835 class="cmtt-8">&#x00A0;</span><span 
10836 class="cmtt-8">&#x00A0;</span><span 
10837 class="cmtt-8">&#x00A0;</span><span 
10838 class="cmtt-8">&#x00A0;</span><span 
10839 class="cmtt-8">&#x00A0;</span><span 
10840 class="cmtt-8">&#x00A0;</span><span 
10841 class="cmtt-8">&#x00A0;</span><span 
10842 class="cmtt-8">&#x00A0;</span><span 
10843 class="cmtt-8">&#x00A0;</span><span 
10844 class="cmtt-8">&#x00A0;</span><span 
10845 class="cmtt-8">&#x00A0;</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;16)</span><span 
10863 class="cmtt-8">&#x00A0;[vqclass]</span><span 
10864 class="cmtt-8">&#x00A0;=</span><span 
10865 class="cmtt-8">&#x00A0;array</span><span 
10866 class="cmtt-8">&#x00A0;[classifications]</span><span 
10867 class="cmtt-8">&#x00A0;element</span><span 
10868 class="cmtt-8">&#x00A0;[j],[partition\_count]</span>
10869 <br class="fancyvrb" /><a 
10870  id="x1-110092r38"></a><span 
10871 class="cmr-6">38</span><span 
10872 class="cmtt-8">&#x00A0;</span><span 
10873 class="cmtt-8">&#x00A0;</span><span 
10874 class="cmtt-8">&#x00A0;</span><span 
10875 class="cmtt-8">&#x00A0;</span><span 
10876 class="cmtt-8">&#x00A0;</span><span 
10877 class="cmtt-8">&#x00A0;</span><span 
10878 class="cmtt-8">&#x00A0;</span><span 
10879 class="cmtt-8">&#x00A0;</span><span 
10880 class="cmtt-8">&#x00A0;</span><span 
10881 class="cmtt-8">&#x00A0;</span><span 
10882 class="cmtt-8">&#x00A0;</span><span 
10883 class="cmtt-8">&#x00A0;</span><span 
10884 class="cmtt-8">&#x00A0;</span><span 
10885 class="cmtt-8">&#x00A0;</span><span 
10886 class="cmtt-8">&#x00A0;</span><span 
10887 class="cmtt-8">&#x00A0;</span><span 
10888 class="cmtt-8">&#x00A0;</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;17)</span><span 
10901 class="cmtt-8">&#x00A0;[vqbook]</span><span 
10902 class="cmtt-8">&#x00A0;=</span><span 
10903 class="cmtt-8">&#x00A0;array</span><span 
10904 class="cmtt-8">&#x00A0;[residue\_books]</span><span 
10905 class="cmtt-8">&#x00A0;element</span><span 
10906 class="cmtt-8">&#x00A0;[vqclass],[pass]</span>
10907 <br class="fancyvrb" /><a 
10908  id="x1-110094r39"></a><span 
10909 class="cmr-6">39</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;</span><span 
10923 class="cmtt-8">&#x00A0;</span><span 
10924 class="cmtt-8">&#x00A0;</span><span 
10925 class="cmtt-8">&#x00A0;</span><span 
10926 class="cmtt-8">&#x00A0;</span><span 
10927 class="cmtt-8">&#x00A0;</span><span 
10928 class="cmtt-8">&#x00A0;</span><span 
10929 class="cmtt-8">&#x00A0;</span><span 
10930 class="cmtt-8">&#x00A0;</span><span 
10931 class="cmtt-8">&#x00A0;</span><span 
10932 class="cmtt-8">&#x00A0;</span><span 
10933 class="cmtt-8">&#x00A0;</span><span 
10934 class="cmtt-8">&#x00A0;</span><span 
10935 class="cmtt-8">&#x00A0;</span><span 
10936 class="cmtt-8">&#x00A0;</span><span 
10937 class="cmtt-8">&#x00A0;</span><span 
10938 class="cmtt-8">&#x00A0;18)</span><span 
10939 class="cmtt-8">&#x00A0;if</span><span 
10940 class="cmtt-8">&#x00A0;([vqbook]</span><span 
10941 class="cmtt-8">&#x00A0;is</span><span 
10942 class="cmtt-8">&#x00A0;not</span><span 
10943 class="cmtt-8">&#x00A0;&#8217;unused&#8217;)</span><span 
10944 class="cmtt-8">&#x00A0;{</span>
10945 <br class="fancyvrb" /><a 
10946  id="x1-110096r40"></a><span 
10947 class="cmr-6">40</span><span 
10948 class="cmtt-8">&#x00A0;</span><span 
10949 class="cmtt-8">&#x00A0;</span>
10950 <br class="fancyvrb" /><a 
10951  id="x1-110098r41"></a><span 
10952 class="cmr-6">41</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;</span><span 
10974 class="cmtt-8">&#x00A0;</span><span 
10975 class="cmtt-8">&#x00A0;</span><span 
10976 class="cmtt-8">&#x00A0;</span><span 
10977 class="cmtt-8">&#x00A0;</span><span 
10978 class="cmtt-8">&#x00A0;</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;19)</span><span 
10987 class="cmtt-8">&#x00A0;decode</span><span 
10988 class="cmtt-8">&#x00A0;partition</span><span 
10989 class="cmtt-8">&#x00A0;into</span><span 
10990 class="cmtt-8">&#x00A0;output</span><span 
10991 class="cmtt-8">&#x00A0;vector</span><span 
10992 class="cmtt-8">&#x00A0;number</span><span 
10993 class="cmtt-8">&#x00A0;[j],</span><span 
10994 class="cmtt-8">&#x00A0;starting</span><span 
10995 class="cmtt-8">&#x00A0;at</span><span 
10996 class="cmtt-8">&#x00A0;scalar</span>
10997 <br class="fancyvrb" /><a 
10998  id="x1-110100r42"></a><span 
10999 class="cmr-6">42</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;</span><span 
11017 class="cmtt-8">&#x00A0;</span><span 
11018 class="cmtt-8">&#x00A0;</span><span 
11019 class="cmtt-8">&#x00A0;</span><span 
11020 class="cmtt-8">&#x00A0;</span><span 
11021 class="cmtt-8">&#x00A0;</span><span 
11022 class="cmtt-8">&#x00A0;</span><span 
11023 class="cmtt-8">&#x00A0;</span><span 
11024 class="cmtt-8">&#x00A0;</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;offset</span><span 
11038 class="cmtt-8">&#x00A0;[limit\_residue\_begin]+[partition\_count]*[residue\_partition\_size]</span><span 
11039 class="cmtt-8">&#x00A0;using</span>
11040 <br class="fancyvrb" /><a 
11041  id="x1-110102r43"></a><span 
11042 class="cmr-6">43</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><span 
11053 class="cmtt-8">&#x00A0;</span><span 
11054 class="cmtt-8">&#x00A0;</span><span 
11055 class="cmtt-8">&#x00A0;</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><span 
11079 class="cmtt-8">&#x00A0;</span><span 
11080 class="cmtt-8">&#x00A0;codebook</span><span 
11081 class="cmtt-8">&#x00A0;number</span><span 
11082 class="cmtt-8">&#x00A0;[vqbook]</span><span 
11083 class="cmtt-8">&#x00A0;in</span><span 
11084 class="cmtt-8">&#x00A0;VQ</span><span 
11085 class="cmtt-8">&#x00A0;context</span>
11086 <br class="fancyvrb" /><a 
11087  id="x1-110104r44"></a><span 
11088 class="cmr-6">44</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;</span><span 
11106 class="cmtt-8">&#x00A0;</span><span 
11107 class="cmtt-8">&#x00A0;</span><span 
11108 class="cmtt-8">&#x00A0;</span><span 
11109 class="cmtt-8">&#x00A0;</span><span 
11110 class="cmtt-8">&#x00A0;</span><span 
11111 class="cmtt-8">&#x00A0;</span><span 
11112 class="cmtt-8">&#x00A0;</span><span 
11113 class="cmtt-8">&#x00A0;</span><span 
11114 class="cmtt-8">&#x00A0;</span><span 
11115 class="cmtt-8">&#x00A0;</span><span 
11116 class="cmtt-8">&#x00A0;}</span>
11117                                                                                         
11118
11119                                                                                         
11120 <br class="fancyvrb" /><a 
11121  id="x1-110106r45"></a><span 
11122 class="cmr-6">45</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><span 
11135 class="cmtt-8">&#x00A0;</span><span 
11136 class="cmtt-8">&#x00A0;</span><span 
11137 class="cmtt-8">&#x00A0;</span><span 
11138 class="cmtt-8">&#x00A0;</span><span 
11139 class="cmtt-8">&#x00A0;</span><span 
11140 class="cmtt-8">&#x00A0;</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>
11146 <br class="fancyvrb" /><a 
11147  id="x1-110108r46"></a><span 
11148 class="cmr-6">46</span><span 
11149 class="cmtt-8">&#x00A0;</span><span 
11150 class="cmtt-8">&#x00A0;</span>
11151 <br class="fancyvrb" /><a 
11152  id="x1-110110r47"></a><span 
11153 class="cmr-6">47</span><span 
11154 class="cmtt-8">&#x00A0;</span><span 
11155 class="cmtt-8">&#x00A0;</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><span 
11163 class="cmtt-8">&#x00A0;</span><span 
11164 class="cmtt-8">&#x00A0;</span><span 
11165 class="cmtt-8">&#x00A0;</span><span 
11166 class="cmtt-8">&#x00A0;</span><span 
11167 class="cmtt-8">&#x00A0;</span><span 
11168 class="cmtt-8">&#x00A0;</span><span 
11169 class="cmtt-8">&#x00A0;</span><span 
11170 class="cmtt-8">&#x00A0;</span><span 
11171 class="cmtt-8">&#x00A0;</span><span 
11172 class="cmtt-8">&#x00A0;20)</span><span 
11173 class="cmtt-8">&#x00A0;increment</span><span 
11174 class="cmtt-8">&#x00A0;[partition\_count]</span><span 
11175 class="cmtt-8">&#x00A0;by</span><span 
11176 class="cmtt-8">&#x00A0;one</span>
11177 <br class="fancyvrb" /><a 
11178  id="x1-110112r48"></a><span 
11179 class="cmr-6">48</span><span 
11180 class="cmtt-8">&#x00A0;</span><span 
11181 class="cmtt-8">&#x00A0;</span>
11182 <br class="fancyvrb" /><a 
11183  id="x1-110114r49"></a><span 
11184 class="cmr-6">49</span><span 
11185 class="cmtt-8">&#x00A0;</span><span 
11186 class="cmtt-8">&#x00A0;</span><span 
11187 class="cmtt-8">&#x00A0;</span><span 
11188 class="cmtt-8">&#x00A0;</span><span 
11189 class="cmtt-8">&#x00A0;</span><span 
11190 class="cmtt-8">&#x00A0;</span><span 
11191 class="cmtt-8">&#x00A0;</span><span 
11192 class="cmtt-8">&#x00A0;</span><span 
11193 class="cmtt-8">&#x00A0;</span><span 
11194 class="cmtt-8">&#x00A0;</span><span 
11195 class="cmtt-8">&#x00A0;</span><span 
11196 class="cmtt-8">&#x00A0;</span><span 
11197 class="cmtt-8">&#x00A0;</span><span 
11198 class="cmtt-8">&#x00A0;</span><span 
11199 class="cmtt-8">&#x00A0;</span><span 
11200 class="cmtt-8">&#x00A0;</span><span 
11201 class="cmtt-8">&#x00A0;}</span>
11202 <br class="fancyvrb" /><a 
11203  id="x1-110116r50"></a><span 
11204 class="cmr-6">50</span><span 
11205 class="cmtt-8">&#x00A0;</span><span 
11206 class="cmtt-8">&#x00A0;</span><span 
11207 class="cmtt-8">&#x00A0;</span><span 
11208 class="cmtt-8">&#x00A0;</span><span 
11209 class="cmtt-8">&#x00A0;</span><span 
11210 class="cmtt-8">&#x00A0;</span><span 
11211 class="cmtt-8">&#x00A0;</span><span 
11212 class="cmtt-8">&#x00A0;</span><span 
11213 class="cmtt-8">&#x00A0;</span><span 
11214 class="cmtt-8">&#x00A0;</span><span 
11215 class="cmtt-8">&#x00A0;</span><span 
11216 class="cmtt-8">&#x00A0;}</span>
11217 <br class="fancyvrb" /><a 
11218  id="x1-110118r51"></a><span 
11219 class="cmr-6">51</span><span 
11220 class="cmtt-8">&#x00A0;</span><span 
11221 class="cmtt-8">&#x00A0;</span><span 
11222 class="cmtt-8">&#x00A0;</span><span 
11223 class="cmtt-8">&#x00A0;</span><span 
11224 class="cmtt-8">&#x00A0;</span><span 
11225 class="cmtt-8">&#x00A0;</span><span 
11226 class="cmtt-8">&#x00A0;}</span>
11227 <br class="fancyvrb" /><a 
11228  id="x1-110120r52"></a><span 
11229 class="cmr-6">52</span><span 
11230 class="cmtt-8">&#x00A0;</span><span 
11231 class="cmtt-8">&#x00A0;</span>
11232 <br class="fancyvrb" /><a 
11233  id="x1-110122r53"></a><span 
11234 class="cmr-6">53</span><span 
11235 class="cmtt-8">&#x00A0;</span><span 
11236 class="cmtt-8">&#x00A0;</span><span 
11237 class="cmtt-8">&#x00A0;21)</span><span 
11238 class="cmtt-8">&#x00A0;done</span>
11239 <br class="fancyvrb" /><a 
11240  id="x1-110124r54"></a><span 
11241 class="cmr-6">54</span><span 
11242 class="cmtt-8">&#x00A0;</span><span 
11243 class="cmtt-8">&#x00A0;</span>
11244 </div>
11245 <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
11246 Decode returns the result of vector decode up to that point.
11247 <!--l. 350--><p class="noindent" >
11248 <h5 class="subsubsectionHead"><span class="titlemark">8.6.3.  </span> <a 
11249  id="x1-1110008.6.3"></a>format 0 specifics</h5>
11250 <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 0&#8217;
11251 section. The following pseudocode presents the same algorithm. Assume:
11252       <ul class="itemize1">
11253       <li class="itemize"><span 
11254 class="cmtt-12">[n] </span>is the value in <span 
11255 class="cmtt-12">[residue_partition_size]</span>
11256       </li>
11257       <li class="itemize"><span 
11258 class="cmtt-12">[v] </span>is the residue vector
11259       </li>
11260       <li class="itemize"><span 
11261 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
11262 <!--l. 363--><p class="noindent" >
11263 <div class="fancyvrb" id="fancyvrb41">
11264 <a 
11265  id="x1-111002r1"></a><span 
11266 class="cmr-6">1</span><span 
11267 class="cmtt-8">&#x00A0;</span><span 
11268 class="cmtt-8">&#x00A0;</span><span 
11269 class="cmtt-8">&#x00A0;1)</span><span 
11270 class="cmtt-8">&#x00A0;[step]</span><span 
11271 class="cmtt-8">&#x00A0;=</span><span 
11272 class="cmtt-8">&#x00A0;[n]</span><span 
11273 class="cmtt-8">&#x00A0;/</span><span 
11274 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
11275 <br class="fancyvrb" /><a 
11276  id="x1-111004r2"></a><span 
11277 class="cmr-6">2</span><span 
11278 class="cmtt-8">&#x00A0;</span><span 
11279 class="cmtt-8">&#x00A0;</span><span 
11280 class="cmtt-8">&#x00A0;2)</span><span 
11281 class="cmtt-8">&#x00A0;iterate</span><span 
11282 class="cmtt-8">&#x00A0;[i]</span><span 
11283 class="cmtt-8">&#x00A0;over</span><span 
11284 class="cmtt-8">&#x00A0;the</span><span 
11285 class="cmtt-8">&#x00A0;range</span><span 
11286 class="cmtt-8">&#x00A0;0</span><span 
11287 class="cmtt-8">&#x00A0;...</span><span 
11288 class="cmtt-8">&#x00A0;[step]-1</span><span 
11289 class="cmtt-8">&#x00A0;{</span>
11290 <br class="fancyvrb" /><a 
11291  id="x1-111006r3"></a><span 
11292 class="cmr-6">3</span><span 
11293 class="cmtt-8">&#x00A0;</span><span 
11294 class="cmtt-8">&#x00A0;</span>
11295 <br class="fancyvrb" /><a 
11296  id="x1-111008r4"></a><span 
11297 class="cmr-6">4</span><span 
11298 class="cmtt-8">&#x00A0;</span><span 
11299 class="cmtt-8">&#x00A0;</span><span 
11300 class="cmtt-8">&#x00A0;</span><span 
11301 class="cmtt-8">&#x00A0;</span><span 
11302 class="cmtt-8">&#x00A0;</span><span 
11303 class="cmtt-8">&#x00A0;</span><span 
11304 class="cmtt-8">&#x00A0;</span><span 
11305 class="cmtt-8">&#x00A0;3)</span><span 
11306 class="cmtt-8">&#x00A0;vector</span><span 
11307 class="cmtt-8">&#x00A0;[entry\_temp]</span><span 
11308 class="cmtt-8">&#x00A0;=</span><span 
11309 class="cmtt-8">&#x00A0;read</span><span 
11310 class="cmtt-8">&#x00A0;vector</span><span 
11311 class="cmtt-8">&#x00A0;from</span><span 
11312 class="cmtt-8">&#x00A0;packet</span><span 
11313 class="cmtt-8">&#x00A0;using</span><span 
11314 class="cmtt-8">&#x00A0;current</span><span 
11315 class="cmtt-8">&#x00A0;codebook</span><span 
11316 class="cmtt-8">&#x00A0;in</span><span 
11317 class="cmtt-8">&#x00A0;VQ</span><span 
11318 class="cmtt-8">&#x00A0;context</span>
11319 <br class="fancyvrb" /><a 
11320  id="x1-111010r5"></a><span 
11321 class="cmr-6">5</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;4)</span><span 
11330 class="cmtt-8">&#x00A0;iterate</span><span 
11331 class="cmtt-8">&#x00A0;[j]</span><span 
11332 class="cmtt-8">&#x00A0;over</span><span 
11333 class="cmtt-8">&#x00A0;the</span><span 
11334 class="cmtt-8">&#x00A0;range</span><span 
11335 class="cmtt-8">&#x00A0;0</span><span 
11336 class="cmtt-8">&#x00A0;...</span><span 
11337 class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span 
11338 class="cmtt-8">&#x00A0;{</span>
11339 <br class="fancyvrb" /><a 
11340  id="x1-111012r6"></a><span 
11341 class="cmr-6">6</span><span 
11342 class="cmtt-8">&#x00A0;</span><span 
11343 class="cmtt-8">&#x00A0;</span>
11344 <br class="fancyvrb" /><a 
11345  id="x1-111014r7"></a><span 
11346 class="cmr-6">7</span><span 
11347 class="cmtt-8">&#x00A0;</span><span 
11348 class="cmtt-8">&#x00A0;</span><span 
11349 class="cmtt-8">&#x00A0;</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;5)</span><span 
11360 class="cmtt-8">&#x00A0;vector</span><span 
11361 class="cmtt-8">&#x00A0;[v]</span><span 
11362 class="cmtt-8">&#x00A0;element</span><span 
11363 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span 
11364 class="cmtt-8">&#x00A0;=</span>
11365 <br class="fancyvrb" /><a 
11366  id="x1-111016r8"></a><span 
11367 class="cmr-6">8</span><span 
11368 class="cmtt-8">&#x00A0;</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><span 
11375 class="cmtt-8">&#x00A0;</span><span 
11376 class="cmtt-8">&#x00A0;</span><span 
11377 class="cmtt-8">&#x00A0;vector</span><span 
11378 class="cmtt-8">&#x00A0;[v]</span><span 
11379 class="cmtt-8">&#x00A0;element</span><span 
11380 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span 
11381 class="cmtt-8">&#x00A0;+</span>
11382 <br class="fancyvrb" /><a 
11383  id="x1-111018r9"></a><span 
11384 class="cmr-6">9</span><span 
11385 class="cmtt-8">&#x00A0;</span><span 
11386 class="cmtt-8">&#x00A0;</span><span 
11387 class="cmtt-8">&#x00A0;</span><span 
11388 class="cmtt-8">&#x00A0;</span><span 
11389 class="cmtt-8">&#x00A0;</span><span 
11390 class="cmtt-8">&#x00A0;</span><span 
11391 class="cmtt-8">&#x00A0;</span><span 
11392 class="cmtt-8">&#x00A0;</span><span 
11393 class="cmtt-8">&#x00A0;</span><span 
11394 class="cmtt-8">&#x00A0;</span><span 
11395 class="cmtt-8">&#x00A0;</span><span 
11396 class="cmtt-8">&#x00A0;</span><span 
11397 class="cmtt-8">&#x00A0;</span><span 
11398 class="cmtt-8">&#x00A0;</span><span 
11399 class="cmtt-8">&#x00A0;</span><span 
11400 class="cmtt-8">&#x00A0;</span><span 
11401 class="cmtt-8">&#x00A0;</span><span 
11402 class="cmtt-8">&#x00A0;vector</span><span 
11403 class="cmtt-8">&#x00A0;[entry\_temp]</span><span 
11404 class="cmtt-8">&#x00A0;element</span><span 
11405 class="cmtt-8">&#x00A0;[j]</span>
11406 <br class="fancyvrb" /><a 
11407  id="x1-111020r10"></a><span 
11408 class="cmr-6">10</span><span 
11409 class="cmtt-8">&#x00A0;</span><span 
11410 class="cmtt-8">&#x00A0;</span>
11411 <br class="fancyvrb" /><a 
11412  id="x1-111022r11"></a><span 
11413 class="cmr-6">11</span><span 
11414 class="cmtt-8">&#x00A0;</span><span 
11415 class="cmtt-8">&#x00A0;</span><span 
11416 class="cmtt-8">&#x00A0;</span><span 
11417 class="cmtt-8">&#x00A0;</span><span 
11418 class="cmtt-8">&#x00A0;</span><span 
11419 class="cmtt-8">&#x00A0;</span><span 
11420 class="cmtt-8">&#x00A0;</span><span 
11421 class="cmtt-8">&#x00A0;</span><span 
11422 class="cmtt-8">&#x00A0;</span><span 
11423 class="cmtt-8">&#x00A0;</span><span 
11424 class="cmtt-8">&#x00A0;}</span>
11425 <br class="fancyvrb" /><a 
11426  id="x1-111024r12"></a><span 
11427 class="cmr-6">12</span><span 
11428 class="cmtt-8">&#x00A0;</span><span 
11429 class="cmtt-8">&#x00A0;</span>
11430 <br class="fancyvrb" /><a 
11431  id="x1-111026r13"></a><span 
11432 class="cmr-6">13</span><span 
11433 class="cmtt-8">&#x00A0;</span><span 
11434 class="cmtt-8">&#x00A0;</span><span 
11435 class="cmtt-8">&#x00A0;</span><span 
11436 class="cmtt-8">&#x00A0;</span><span 
11437 class="cmtt-8">&#x00A0;</span><span 
11438 class="cmtt-8">&#x00A0;}</span>
11439 <br class="fancyvrb" /><a 
11440  id="x1-111028r14"></a><span 
11441 class="cmr-6">14</span><span 
11442 class="cmtt-8">&#x00A0;</span><span 
11443 class="cmtt-8">&#x00A0;</span>
11444 <br class="fancyvrb" /><a 
11445  id="x1-111030r15"></a><span 
11446 class="cmr-6">15</span><span 
11447 class="cmtt-8">&#x00A0;</span><span 
11448 class="cmtt-8">&#x00A0;</span><span 
11449 class="cmtt-8">&#x00A0;</span><span 
11450 class="cmtt-8">&#x00A0;6)</span><span 
11451 class="cmtt-8">&#x00A0;done</span>
11452 <br class="fancyvrb" /><a 
11453  id="x1-111032r16"></a><span 
11454 class="cmr-6">16</span><span 
11455 class="cmtt-8">&#x00A0;</span><span 
11456 class="cmtt-8">&#x00A0;</span>
11457                                                                                         
11458
11459                                                                                         
11460 </div>
11461 <!--l. 384--><p class="noindent" >
11462 <h5 class="subsubsectionHead"><span class="titlemark">8.6.4.  </span> <a 
11463  id="x1-1120008.6.4"></a>format 1 specifics</h5>
11464 <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 1&#8217;
11465 section. The following pseudocode presents the same algorithm. Assume:
11466       <ul class="itemize1">
11467       <li class="itemize"><span 
11468 class="cmtt-12">[n] </span>is the value in <span 
11469 class="cmtt-12">[residue_partition_size]</span>
11470       </li>
11471       <li class="itemize"><span 
11472 class="cmtt-12">[v] </span>is the residue vector
11473       </li>
11474       <li class="itemize"><span 
11475 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
11476 <!--l. 398--><p class="noindent" >
11477 <div class="fancyvrb" id="fancyvrb42">
11478 <a 
11479  id="x1-112002r1"></a><span 
11480 class="cmr-6">1</span><span 
11481 class="cmtt-8">&#x00A0;</span><span 
11482 class="cmtt-8">&#x00A0;</span><span 
11483 class="cmtt-8">&#x00A0;1)</span><span 
11484 class="cmtt-8">&#x00A0;[i]</span><span 
11485 class="cmtt-8">&#x00A0;=</span><span 
11486 class="cmtt-8">&#x00A0;0</span>
11487 <br class="fancyvrb" /><a 
11488  id="x1-112004r2"></a><span 
11489 class="cmr-6">2</span><span 
11490 class="cmtt-8">&#x00A0;</span><span 
11491 class="cmtt-8">&#x00A0;</span><span 
11492 class="cmtt-8">&#x00A0;2)</span><span 
11493 class="cmtt-8">&#x00A0;vector</span><span 
11494 class="cmtt-8">&#x00A0;[entry\_temp]</span><span 
11495 class="cmtt-8">&#x00A0;=</span><span 
11496 class="cmtt-8">&#x00A0;read</span><span 
11497 class="cmtt-8">&#x00A0;vector</span><span 
11498 class="cmtt-8">&#x00A0;from</span><span 
11499 class="cmtt-8">&#x00A0;packet</span><span 
11500 class="cmtt-8">&#x00A0;using</span><span 
11501 class="cmtt-8">&#x00A0;current</span><span 
11502 class="cmtt-8">&#x00A0;codebook</span><span 
11503 class="cmtt-8">&#x00A0;in</span><span 
11504 class="cmtt-8">&#x00A0;VQ</span><span 
11505 class="cmtt-8">&#x00A0;context</span>
11506 <br class="fancyvrb" /><a 
11507  id="x1-112006r3"></a><span 
11508 class="cmr-6">3</span><span 
11509 class="cmtt-8">&#x00A0;</span><span 
11510 class="cmtt-8">&#x00A0;</span><span 
11511 class="cmtt-8">&#x00A0;3)</span><span 
11512 class="cmtt-8">&#x00A0;iterate</span><span 
11513 class="cmtt-8">&#x00A0;[j]</span><span 
11514 class="cmtt-8">&#x00A0;over</span><span 
11515 class="cmtt-8">&#x00A0;the</span><span 
11516 class="cmtt-8">&#x00A0;range</span><span 
11517 class="cmtt-8">&#x00A0;0</span><span 
11518 class="cmtt-8">&#x00A0;...</span><span 
11519 class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span 
11520 class="cmtt-8">&#x00A0;{</span>
11521 <br class="fancyvrb" /><a 
11522  id="x1-112008r4"></a><span 
11523 class="cmr-6">4</span><span 
11524 class="cmtt-8">&#x00A0;</span><span 
11525 class="cmtt-8">&#x00A0;</span>
11526 <br class="fancyvrb" /><a 
11527  id="x1-112010r5"></a><span 
11528 class="cmr-6">5</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><span 
11534 class="cmtt-8">&#x00A0;</span><span 
11535 class="cmtt-8">&#x00A0;</span><span 
11536 class="cmtt-8">&#x00A0;4)</span><span 
11537 class="cmtt-8">&#x00A0;vector</span><span 
11538 class="cmtt-8">&#x00A0;[v]</span><span 
11539 class="cmtt-8">&#x00A0;element</span><span 
11540 class="cmtt-8">&#x00A0;([offset]+[i])</span><span 
11541 class="cmtt-8">&#x00A0;=</span>
11542 <br class="fancyvrb" /><a 
11543  id="x1-112012r6"></a><span 
11544 class="cmr-6">6</span><span 
11545 class="cmtt-8">&#x00A0;</span><span 
11546 class="cmtt-8">&#x00A0;    </span><span 
11547 class="cmtt-8">&#x00A0;</span><span 
11548 class="cmtt-8">&#x00A0;vector</span><span 
11549 class="cmtt-8">&#x00A0;[v]</span><span 
11550 class="cmtt-8">&#x00A0;element</span><span 
11551 class="cmtt-8">&#x00A0;([offset]+[i])</span><span 
11552 class="cmtt-8">&#x00A0;+</span>
11553 <br class="fancyvrb" /><a 
11554  id="x1-112014r7"></a><span 
11555 class="cmr-6">7</span><span 
11556 class="cmtt-8">&#x00A0;</span><span 
11557 class="cmtt-8">&#x00A0;</span><span 
11558 class="cmtt-8">&#x00A0;</span><span 
11559 class="cmtt-8">&#x00A0;</span><span 
11560 class="cmtt-8">&#x00A0;</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;</span><span 
11565 class="cmtt-8">&#x00A0;</span><span 
11566 class="cmtt-8">&#x00A0;</span><span 
11567 class="cmtt-8">&#x00A0;vector</span><span 
11568 class="cmtt-8">&#x00A0;[entry\_temp]</span><span 
11569 class="cmtt-8">&#x00A0;element</span><span 
11570 class="cmtt-8">&#x00A0;[j]</span>
11571 <br class="fancyvrb" /><a 
11572  id="x1-112016r8"></a><span 
11573 class="cmr-6">8</span><span 
11574 class="cmtt-8">&#x00A0;</span><span 
11575 class="cmtt-8">&#x00A0;</span><span 
11576 class="cmtt-8">&#x00A0;</span><span 
11577 class="cmtt-8">&#x00A0;</span><span 
11578 class="cmtt-8">&#x00A0;</span><span 
11579 class="cmtt-8">&#x00A0;</span><span 
11580 class="cmtt-8">&#x00A0;</span><span 
11581 class="cmtt-8">&#x00A0;5)</span><span 
11582 class="cmtt-8">&#x00A0;increment</span><span 
11583 class="cmtt-8">&#x00A0;[i]</span>
11584 <br class="fancyvrb" /><a 
11585  id="x1-112018r9"></a><span 
11586 class="cmr-6">9</span><span 
11587 class="cmtt-8">&#x00A0;</span><span 
11588 class="cmtt-8">&#x00A0;</span>
11589 <br class="fancyvrb" /><a 
11590  id="x1-112020r10"></a><span 
11591 class="cmr-6">10</span><span 
11592 class="cmtt-8">&#x00A0;</span><span 
11593 class="cmtt-8">&#x00A0;</span><span 
11594 class="cmtt-8">&#x00A0;</span><span 
11595 class="cmtt-8">&#x00A0;</span><span 
11596 class="cmtt-8">&#x00A0;</span><span 
11597 class="cmtt-8">&#x00A0;}</span>
11598 <br class="fancyvrb" /><a 
11599  id="x1-112022r11"></a><span 
11600 class="cmr-6">11</span><span 
11601 class="cmtt-8">&#x00A0;</span><span 
11602 class="cmtt-8">&#x00A0;</span>
11603 <br class="fancyvrb" /><a 
11604  id="x1-112024r12"></a><span 
11605 class="cmr-6">12</span><span 
11606 class="cmtt-8">&#x00A0;</span><span 
11607 class="cmtt-8">&#x00A0;</span><span 
11608 class="cmtt-8">&#x00A0;</span><span 
11609 class="cmtt-8">&#x00A0;6)</span><span 
11610 class="cmtt-8">&#x00A0;if</span><span 
11611 class="cmtt-8">&#x00A0;(</span><span 
11612 class="cmtt-8">&#x00A0;[i]</span><span 
11613 class="cmtt-8">&#x00A0;is</span><span 
11614 class="cmtt-8">&#x00A0;less</span><span 
11615 class="cmtt-8">&#x00A0;than</span><span 
11616 class="cmtt-8">&#x00A0;[n]</span><span 
11617 class="cmtt-8">&#x00A0;)</span><span 
11618 class="cmtt-8">&#x00A0;continue</span><span 
11619 class="cmtt-8">&#x00A0;at</span><span 
11620 class="cmtt-8">&#x00A0;step</span><span 
11621 class="cmtt-8">&#x00A0;2</span>
11622 <br class="fancyvrb" /><a 
11623  id="x1-112026r13"></a><span 
11624 class="cmr-6">13</span><span 
11625 class="cmtt-8">&#x00A0;</span><span 
11626 class="cmtt-8">&#x00A0;</span><span 
11627 class="cmtt-8">&#x00A0;</span><span 
11628 class="cmtt-8">&#x00A0;7)</span><span 
11629 class="cmtt-8">&#x00A0;done</span>
11630 </div>
11631 <!--l. 416--><p class="noindent" >
11632 <h5 class="subsubsectionHead"><span class="titlemark">8.6.5.  </span> <a 
11633  id="x1-1130008.6.5"></a>format 2 specifics</h5>
11634 <!--l. 418--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
11635 additional post-decode step after a normal format 1 decode.
11636                                                                                         
11637
11638                                                                                         
11639 <!--l. 421--><p class="noindent" >Format 2 handles &#8217;do not decode&#8217; vectors differently than residue 0 or 1; if all vectors are marked
11640 &#8217;do not decode&#8217;, no decode occurrs. However, if at least one vector is to be decoded, all
11641 the vectors are decoded. We then request normal format 1 to decode a single vector
11642 representing all output channels, rather than a vector for each channel. After decode,
11643 deinterleave the vector into independent vectors, one for each output channel. That
11644 is:
11645 <!--l. 429--><p class="noindent" >
11646       <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
11647    1. </dt><dd 
11648 class="enumerate-enumitem">If all vectors 0 through <span 
11649 class="cmti-12">ch</span>-1 are marked &#8217;do not decode&#8217;, allocate and clear a single
11650       vector <span 
11651 class="cmtt-12">[v]</span>of length <span 
11652 class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
11653       step.
11654       </dd><dt class="enumerate-enumitem">
11655    2. </dt><dd 
11656 class="enumerate-enumitem">Rather than performing format 1 decode to produce <span 
11657 class="cmti-12">ch </span>vectors of length <span 
11658 class="cmti-12">n </span>each, call
11659       format 1 decode to produce a single vector <span 
11660 class="cmtt-12">[v] </span>of length <span 
11661 class="cmti-12">ch*n</span>.
11662       </dd><dt class="enumerate-enumitem">
11663    3. </dt><dd 
11664 class="enumerate-enumitem">Post decode: Deinterleave the single vector <span 
11665 class="cmtt-12">[v] </span>returned by format 1 decode as
11666       described above into <span 
11667 class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
11668       to:
11669       <div class="fancyvrb" id="fancyvrb43">
11670 <a 
11671  id="x1-113005r1"></a><span 
11672 class="cmr-6">1</span><span 
11673 class="cmtt-8">&#x00A0;</span><span 
11674 class="cmtt-8">&#x00A0;</span><span 
11675 class="cmtt-8">&#x00A0;</span><span 
11676 class="cmtt-8">&#x00A0;1)</span><span 
11677 class="cmtt-8">&#x00A0;iterate</span><span 
11678 class="cmtt-8">&#x00A0;[i]</span><span 
11679 class="cmtt-8">&#x00A0;over</span><span 
11680 class="cmtt-8">&#x00A0;the</span><span 
11681 class="cmtt-8">&#x00A0;range</span><span 
11682 class="cmtt-8">&#x00A0;0</span><span 
11683 class="cmtt-8">&#x00A0;...</span><span 
11684 class="cmtt-8">&#x00A0;[n]-1</span><span 
11685 class="cmtt-8">&#x00A0;{</span>
11686 <br class="fancyvrb" /><a 
11687  id="x1-113007r2"></a><span 
11688 class="cmr-6">2</span><span 
11689 class="cmtt-8">&#x00A0;</span><span 
11690 class="cmtt-8">&#x00A0;</span>
11691 <br class="fancyvrb" /><a 
11692  id="x1-113009r3"></a><span 
11693 class="cmr-6">3</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;2)</span><span 
11703 class="cmtt-8">&#x00A0;iterate</span><span 
11704 class="cmtt-8">&#x00A0;[j]</span><span 
11705 class="cmtt-8">&#x00A0;over</span><span 
11706 class="cmtt-8">&#x00A0;the</span><span 
11707 class="cmtt-8">&#x00A0;range</span><span 
11708 class="cmtt-8">&#x00A0;0</span><span 
11709 class="cmtt-8">&#x00A0;...</span><span 
11710 class="cmtt-8">&#x00A0;[ch]-1</span><span 
11711 class="cmtt-8">&#x00A0;{</span>
11712 <br class="fancyvrb" /><a 
11713  id="x1-113011r4"></a><span 
11714 class="cmr-6">4</span><span 
11715 class="cmtt-8">&#x00A0;</span><span 
11716 class="cmtt-8">&#x00A0;</span>
11717 <br class="fancyvrb" /><a 
11718  id="x1-113013r5"></a><span 
11719 class="cmr-6">5</span><span 
11720 class="cmtt-8">&#x00A0;</span><span 
11721 class="cmtt-8">&#x00A0;</span><span 
11722 class="cmtt-8">&#x00A0;</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;</span><span 
11727 class="cmtt-8">&#x00A0;</span><span 
11728 class="cmtt-8">&#x00A0;</span><span 
11729 class="cmtt-8">&#x00A0;</span><span 
11730 class="cmtt-8">&#x00A0;</span><span 
11731 class="cmtt-8">&#x00A0;</span><span 
11732 class="cmtt-8">&#x00A0;</span><span 
11733 class="cmtt-8">&#x00A0;3)</span><span 
11734 class="cmtt-8">&#x00A0;output</span><span 
11735 class="cmtt-8">&#x00A0;vector</span><span 
11736 class="cmtt-8">&#x00A0;number</span><span 
11737 class="cmtt-8">&#x00A0;[j]</span><span 
11738 class="cmtt-8">&#x00A0;element</span><span 
11739 class="cmtt-8">&#x00A0;[i]</span><span 
11740 class="cmtt-8">&#x00A0;=</span><span 
11741 class="cmtt-8">&#x00A0;vector</span><span 
11742 class="cmtt-8">&#x00A0;[v]</span><span 
11743 class="cmtt-8">&#x00A0;element</span><span 
11744 class="cmtt-8">&#x00A0;([i]</span><span 
11745 class="cmtt-8">&#x00A0;*</span><span 
11746 class="cmtt-8">&#x00A0;[ch]</span><span 
11747 class="cmtt-8">&#x00A0;+</span><span 
11748 class="cmtt-8">&#x00A0;[j])</span>
11749 <br class="fancyvrb" /><a 
11750  id="x1-113015r6"></a><span 
11751 class="cmr-6">6</span><span 
11752 class="cmtt-8">&#x00A0;</span><span 
11753 class="cmtt-8">&#x00A0;</span>
11754 <br class="fancyvrb" /><a 
11755  id="x1-113017r7"></a><span 
11756 class="cmr-6">7</span><span 
11757 class="cmtt-8">&#x00A0;</span><span 
11758 class="cmtt-8">&#x00A0;</span><span 
11759 class="cmtt-8">&#x00A0;</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;</span><span 
11764 class="cmtt-8">&#x00A0;</span><span 
11765 class="cmtt-8">&#x00A0;</span><span 
11766 class="cmtt-8">&#x00A0;</span><span 
11767 class="cmtt-8">&#x00A0;</span><span 
11768 class="cmtt-8">&#x00A0;}</span>
11769 <br class="fancyvrb" /><a 
11770  id="x1-113019r8"></a><span 
11771 class="cmr-6">8</span><span 
11772 class="cmtt-8">&#x00A0;</span><span 
11773 class="cmtt-8">&#x00A0;</span><span 
11774 class="cmtt-8">&#x00A0;</span><span 
11775 class="cmtt-8">&#x00A0;</span><span 
11776 class="cmtt-8">&#x00A0;</span><span 
11777 class="cmtt-8">&#x00A0;</span><span 
11778 class="cmtt-8">&#x00A0;}</span>
11779 <br class="fancyvrb" /><a 
11780  id="x1-113021r9"></a><span 
11781 class="cmr-6">9</span><span 
11782 class="cmtt-8">&#x00A0;</span><span 
11783 class="cmtt-8">&#x00A0;</span>
11784 <br class="fancyvrb" /><a 
11785  id="x1-113023r10"></a><span 
11786 class="cmr-6">10</span><span 
11787 class="cmtt-8">&#x00A0;</span><span 
11788 class="cmtt-8">&#x00A0;</span><span 
11789 class="cmtt-8">&#x00A0;</span><span 
11790 class="cmtt-8">&#x00A0;4)</span><span 
11791 class="cmtt-8">&#x00A0;done</span>
11792 </div>
11793       </dd></dl>
11794                                                                                         
11795
11796                                                                                         
11797                                                                                         
11798
11799                                                                                         
11800 <h3 class="sectionHead"><span class="titlemark">9.  </span> <a 
11801  id="x1-1140009"></a>Helper equations</h3>
11802 <!--l. 6--><p class="noindent" >
11803 <h4 class="subsectionHead"><span class="titlemark">9.1.  </span> <a 
11804  id="x1-1150009.1"></a>Overview</h4>
11805 <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
11806 cluttering up the main specification documents, they are defined here and referenced where
11807 appropriate.
11808 <!--l. 13--><p class="noindent" >
11809 <h4 class="subsectionHead"><span class="titlemark">9.2.  </span> <a 
11810  id="x1-1160009.2"></a>Functions</h4>
11811 <!--l. 15--><p class="noindent" >
11812 <h5 class="subsubsectionHead"><span class="titlemark">9.2.1.  </span> <a 
11813  id="x1-1170009.2.1"></a>ilog</h5>
11814 <!--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
11815 two&#8217;s complement integer value <span 
11816 class="cmtt-12">[x]</span>. Values of <span 
11817 class="cmtt-12">[x] </span>less than zero are defined to return
11818 zero.
11819 <!--l. 20--><p class="noindent" >
11820 <div class="fancyvrb" id="fancyvrb44">
11821 <a 
11822  id="x1-117002r1"></a><span 
11823 class="cmr-6">1</span><span 
11824 class="cmtt-8">&#x00A0;</span><span 
11825 class="cmtt-8">&#x00A0;</span><span 
11826 class="cmtt-8">&#x00A0;</span><span 
11827 class="cmtt-8">&#x00A0;1)</span><span 
11828 class="cmtt-8">&#x00A0;[return\_value]</span><span 
11829 class="cmtt-8">&#x00A0;=</span><span 
11830 class="cmtt-8">&#x00A0;0;</span>
11831 <br class="fancyvrb" /><a 
11832  id="x1-117004r2"></a><span 
11833 class="cmr-6">2</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;2)</span><span 
11838 class="cmtt-8">&#x00A0;if</span><span 
11839 class="cmtt-8">&#x00A0;(</span><span 
11840 class="cmtt-8">&#x00A0;[x]</span><span 
11841 class="cmtt-8">&#x00A0;is</span><span 
11842 class="cmtt-8">&#x00A0;greater</span><span 
11843 class="cmtt-8">&#x00A0;than</span><span 
11844 class="cmtt-8">&#x00A0;zero</span><span 
11845 class="cmtt-8">&#x00A0;)</span><span 
11846 class="cmtt-8">&#x00A0;{</span>
11847 <br class="fancyvrb" /><a 
11848  id="x1-117006r3"></a><span 
11849 class="cmr-6">3</span><span 
11850 class="cmtt-8">&#x00A0;</span><span 
11851 class="cmtt-8">&#x00A0;</span>
11852 <br class="fancyvrb" /><a 
11853  id="x1-117008r4"></a><span 
11854 class="cmr-6">4</span><span 
11855 class="cmtt-8">&#x00A0;</span><span 
11856 class="cmtt-8">&#x00A0;</span><span 
11857 class="cmtt-8">&#x00A0;</span><span 
11858 class="cmtt-8">&#x00A0;</span><span 
11859 class="cmtt-8">&#x00A0;</span><span 
11860 class="cmtt-8">&#x00A0;</span><span 
11861 class="cmtt-8">&#x00A0;</span><span 
11862 class="cmtt-8">&#x00A0;</span><span 
11863 class="cmtt-8">&#x00A0;3)</span><span 
11864 class="cmtt-8">&#x00A0;increment</span><span 
11865 class="cmtt-8">&#x00A0;[return\_value];</span>
11866 <br class="fancyvrb" /><a 
11867  id="x1-117010r5"></a><span 
11868 class="cmr-6">5</span><span 
11869 class="cmtt-8">&#x00A0;</span><span 
11870 class="cmtt-8">&#x00A0;</span><span 
11871 class="cmtt-8">&#x00A0;</span><span 
11872 class="cmtt-8">&#x00A0;</span><span 
11873 class="cmtt-8">&#x00A0;</span><span 
11874 class="cmtt-8">&#x00A0;</span><span 
11875 class="cmtt-8">&#x00A0;</span><span 
11876 class="cmtt-8">&#x00A0;</span><span 
11877 class="cmtt-8">&#x00A0;4)</span><span 
11878 class="cmtt-8">&#x00A0;logical</span><span 
11879 class="cmtt-8">&#x00A0;shift</span><span 
11880 class="cmtt-8">&#x00A0;[x]</span><span 
11881 class="cmtt-8">&#x00A0;one</span><span 
11882 class="cmtt-8">&#x00A0;bit</span><span 
11883 class="cmtt-8">&#x00A0;to</span><span 
11884 class="cmtt-8">&#x00A0;the</span><span 
11885 class="cmtt-8">&#x00A0;right,</span><span 
11886 class="cmtt-8">&#x00A0;padding</span><span 
11887 class="cmtt-8">&#x00A0;the</span><span 
11888 class="cmtt-8">&#x00A0;MSb</span><span 
11889 class="cmtt-8">&#x00A0;with</span><span 
11890 class="cmtt-8">&#x00A0;zero</span>
11891 <br class="fancyvrb" /><a 
11892  id="x1-117012r6"></a><span 
11893 class="cmr-6">6</span><span 
11894 class="cmtt-8">&#x00A0;</span><span 
11895 class="cmtt-8">&#x00A0;</span><span 
11896 class="cmtt-8">&#x00A0;</span><span 
11897 class="cmtt-8">&#x00A0;</span><span 
11898 class="cmtt-8">&#x00A0;</span><span 
11899 class="cmtt-8">&#x00A0;</span><span 
11900 class="cmtt-8">&#x00A0;</span><span 
11901 class="cmtt-8">&#x00A0;</span><span 
11902 class="cmtt-8">&#x00A0;5)</span><span 
11903 class="cmtt-8">&#x00A0;repeat</span><span 
11904 class="cmtt-8">&#x00A0;at</span><span 
11905 class="cmtt-8">&#x00A0;step</span><span 
11906 class="cmtt-8">&#x00A0;2)</span>
11907 <br class="fancyvrb" /><a 
11908  id="x1-117014r7"></a><span 
11909 class="cmr-6">7</span><span 
11910 class="cmtt-8">&#x00A0;</span><span 
11911 class="cmtt-8">&#x00A0;</span>
11912 <br class="fancyvrb" /><a 
11913  id="x1-117016r8"></a><span 
11914 class="cmr-6">8</span><span 
11915 class="cmtt-8">&#x00A0;</span><span 
11916 class="cmtt-8">&#x00A0;</span><span 
11917 class="cmtt-8">&#x00A0;</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;}</span>
11922 <br class="fancyvrb" /><a 
11923  id="x1-117018r9"></a><span 
11924 class="cmr-6">9</span><span 
11925 class="cmtt-8">&#x00A0;</span><span 
11926 class="cmtt-8">&#x00A0;</span>
11927 <br class="fancyvrb" /><a 
11928  id="x1-117020r10"></a><span 
11929 class="cmr-6">10</span><span 
11930 class="cmtt-8">&#x00A0;</span><span 
11931 class="cmtt-8">&#x00A0;</span><span 
11932 class="cmtt-8">&#x00A0;</span><span 
11933 class="cmtt-8">&#x00A0;</span><span 
11934 class="cmtt-8">&#x00A0;6)</span><span 
11935 class="cmtt-8">&#x00A0;done</span>
11936 </div>
11937                                                                                         
11938
11939                                                                                         
11940 <!--l. 33--><p class="noindent" >Examples:
11941       <ul class="itemize1">
11942       <li class="itemize">ilog(0) = 0;
11943       </li>
11944       <li class="itemize">ilog(1) = 1;
11945       </li>
11946       <li class="itemize">ilog(2) = 2;
11947       </li>
11948       <li class="itemize">ilog(3) = 2;
11949       </li>
11950       <li class="itemize">ilog(4) = 3;
11951       </li>
11952       <li class="itemize">ilog(7) = 3;
11953       </li>
11954       <li class="itemize">ilog(negative number) = 0;</li></ul>
11955 <!--l. 48--><p class="noindent" >
11956 <h5 class="subsubsectionHead"><span class="titlemark">9.2.2.  </span> <a 
11957  id="x1-1180009.2.2"></a>float32_unpack</h5>
11958 <!--l. 50--><p class="noindent" >&#8221;float32_unpack(x)&#8221; is intended to translate the packed binary representation of a Vorbis
11959 codebook float value into the representation used by the decoder for floating point numbers. For
11960 purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
11961 number.
11962 <!--l. 56--><p class="noindent" >
11963 <div class="fancyvrb" id="fancyvrb45">
11964 <a 
11965  id="x1-118002r1"></a><span 
11966 class="cmr-6">1</span><span 
11967 class="cmtt-8">&#x00A0;</span><span 
11968 class="cmtt-8">&#x00A0;</span><span 
11969 class="cmtt-8">&#x00A0;</span><span 
11970 class="cmtt-8">&#x00A0;1)</span><span 
11971 class="cmtt-8">&#x00A0;[mantissa]</span><span 
11972 class="cmtt-8">&#x00A0;=</span><span 
11973 class="cmtt-8">&#x00A0;[x]</span><span 
11974 class="cmtt-8">&#x00A0;bitwise</span><span 
11975 class="cmtt-8">&#x00A0;AND</span><span 
11976 class="cmtt-8">&#x00A0;0x1fffff</span><span 
11977 class="cmtt-8">&#x00A0;(unsigned</span><span 
11978 class="cmtt-8">&#x00A0;result)</span>
11979 <br class="fancyvrb" /><a 
11980  id="x1-118004r2"></a><span 
11981 class="cmr-6">2</span><span 
11982 class="cmtt-8">&#x00A0;</span><span 
11983 class="cmtt-8">&#x00A0;</span><span 
11984 class="cmtt-8">&#x00A0;</span><span 
11985 class="cmtt-8">&#x00A0;2)</span><span 
11986 class="cmtt-8">&#x00A0;[sign]</span><span 
11987 class="cmtt-8">&#x00A0;=</span><span 
11988 class="cmtt-8">&#x00A0;[x]</span><span 
11989 class="cmtt-8">&#x00A0;bitwise</span><span 
11990 class="cmtt-8">&#x00A0;AND</span><span 
11991 class="cmtt-8">&#x00A0;0x80000000</span><span 
11992 class="cmtt-8">&#x00A0;(unsigned</span><span 
11993 class="cmtt-8">&#x00A0;result)</span>
11994 <br class="fancyvrb" /><a 
11995  id="x1-118006r3"></a><span 
11996 class="cmr-6">3</span><span 
11997 class="cmtt-8">&#x00A0;</span><span 
11998 class="cmtt-8">&#x00A0;</span><span 
11999 class="cmtt-8">&#x00A0;</span><span 
12000 class="cmtt-8">&#x00A0;3)</span><span 
12001 class="cmtt-8">&#x00A0;[exponent]</span><span 
12002 class="cmtt-8">&#x00A0;=</span><span 
12003 class="cmtt-8">&#x00A0;(</span><span 
12004 class="cmtt-8">&#x00A0;[x]</span><span 
12005 class="cmtt-8">&#x00A0;bitwise</span><span 
12006 class="cmtt-8">&#x00A0;AND</span><span 
12007 class="cmtt-8">&#x00A0;0x7fe00000)</span><span 
12008 class="cmtt-8">&#x00A0;shifted</span><span 
12009 class="cmtt-8">&#x00A0;right</span><span 
12010 class="cmtt-8">&#x00A0;21</span><span 
12011 class="cmtt-8">&#x00A0;bits</span><span 
12012 class="cmtt-8">&#x00A0;(unsigned</span><span 
12013 class="cmtt-8">&#x00A0;result)</span>
12014 <br class="fancyvrb" /><a 
12015  id="x1-118008r4"></a><span 
12016 class="cmr-6">4</span><span 
12017 class="cmtt-8">&#x00A0;</span><span 
12018 class="cmtt-8">&#x00A0;</span><span 
12019 class="cmtt-8">&#x00A0;</span><span 
12020 class="cmtt-8">&#x00A0;4)</span><span 
12021 class="cmtt-8">&#x00A0;if</span><span 
12022 class="cmtt-8">&#x00A0;(</span><span 
12023 class="cmtt-8">&#x00A0;[sign]</span><span 
12024 class="cmtt-8">&#x00A0;is</span><span 
12025 class="cmtt-8">&#x00A0;nonzero</span><span 
12026 class="cmtt-8">&#x00A0;)</span><span 
12027 class="cmtt-8">&#x00A0;then</span><span 
12028 class="cmtt-8">&#x00A0;negate</span><span 
12029 class="cmtt-8">&#x00A0;[mantissa]</span>
12030 <br class="fancyvrb" /><a 
12031  id="x1-118010r5"></a><span 
12032 class="cmr-6">5</span><span 
12033 class="cmtt-8">&#x00A0;</span><span 
12034 class="cmtt-8">&#x00A0;</span><span 
12035 class="cmtt-8">&#x00A0;</span><span 
12036 class="cmtt-8">&#x00A0;5)</span><span 
12037 class="cmtt-8">&#x00A0;return</span><span 
12038 class="cmtt-8">&#x00A0;[mantissa]</span><span 
12039 class="cmtt-8">&#x00A0;*</span><span 
12040 class="cmtt-8">&#x00A0;(</span><span 
12041 class="cmtt-8">&#x00A0;2</span><span 
12042 class="cmtt-8">&#x00A0;^</span><span 
12043 class="cmtt-8">&#x00A0;(</span><span 
12044 class="cmtt-8">&#x00A0;[exponent]</span><span 
12045 class="cmtt-8">&#x00A0;-</span><span 
12046 class="cmtt-8">&#x00A0;788</span><span 
12047 class="cmtt-8">&#x00A0;)</span><span 
12048 class="cmtt-8">&#x00A0;)</span>
12049 </div>
12050                                                                                         
12051
12052                                                                                         
12053 <!--l. 66--><p class="noindent" >
12054 <h5 class="subsubsectionHead"><span class="titlemark">9.2.3.  </span> <a 
12055  id="x1-1190009.2.3"></a>lookup1_values</h5>
12056 <!--l. 68--><p class="noindent" >&#8221;lookup1_values(codebook_entries,codebook_dimensions)&#8221; is used to compute the
12057 correct length of the value index for a codebook VQ lookup table of lookup type 1.
12058 The values on this list are permuted to construct the VQ vector lookup table of size
12059 <span 
12060 class="cmtt-12">[codebook_entries]</span>.
12061 <!--l. 74--><p class="noindent" >The return value for this function is defined to be &#8217;the greatest integer value for which
12062 <span 
12063 class="cmtt-12">[return_value] </span>to the power of <span 
12064 class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
12065 <span 
12066 class="cmtt-12">[codebook_entries]</span>&#8217;.
12067 <!--l. 81--><p class="noindent" >
12068 <h5 class="subsubsectionHead"><span class="titlemark">9.2.4.  </span> <a 
12069  id="x1-1200009.2.4"></a>low_neighbor</h5>
12070 <!--l. 83--><p class="noindent" >&#8221;low_neighbor(v,x)&#8221; finds the position <span 
12071 class="cmtt-12">n </span>in vector <span 
12072 class="cmtt-12">[v] </span>of the greatest value scalar element for
12073 which <span 
12074 class="cmtt-12">n </span>is less than <span 
12075 class="cmtt-12">[x] </span>and vector <span 
12076 class="cmtt-12">[v] </span>element <span 
12077 class="cmtt-12">n </span>is less than vector <span 
12078 class="cmtt-12">[v] </span>element
12079 <span 
12080 class="cmtt-12">[x]</span>.
12081 <!--l. 88--><p class="noindent" >
12082 <h5 class="subsubsectionHead"><span class="titlemark">9.2.5.  </span> <a 
12083  id="x1-1210009.2.5"></a>high_neighbor</h5>
12084 <!--l. 90--><p class="noindent" >&#8221;high_neighbor(v,x)&#8221; finds the position <span 
12085 class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
12086 which <span 
12087 class="cmtt-12">n </span>is less than <span 
12088 class="cmtt-12">[x] </span>and vector <span 
12089 class="cmtt-12">[v] </span>element <span 
12090 class="cmtt-12">n </span>is greater than vector <span 
12091 class="cmtt-12">[v] </span>element
12092 <span 
12093 class="cmtt-12">[x]</span>.
12094 <!--l. 97--><p class="noindent" >
12095 <h5 class="subsubsectionHead"><span class="titlemark">9.2.6.  </span> <a 
12096  id="x1-1220009.2.6"></a>render_point</h5>
12097 <!--l. 99--><p class="noindent" >&#8221;render_point(x0,y0,x1,y1,X)&#8221; is used to find the Y value at point X along the line specified by
12098 x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
12099 calculating intervening values along the line.
12100                                                                                         
12101
12102                                                                                         
12103 <!--l. 104--><p class="noindent" >
12104 <div class="fancyvrb" id="fancyvrb46">
12105 <a 
12106  id="x1-122002r1"></a><span 
12107 class="cmr-6">1</span><span 
12108 class="cmtt-8">&#x00A0;</span><span 
12109 class="cmtt-8">&#x00A0;</span><span 
12110 class="cmtt-8">&#x00A0;</span><span 
12111 class="cmtt-8">&#x00A0;1)</span><span 
12112 class="cmtt-8">&#x00A0;</span><span 
12113 class="cmtt-8">&#x00A0;[dy]</span><span 
12114 class="cmtt-8">&#x00A0;=</span><span 
12115 class="cmtt-8">&#x00A0;[y1]</span><span 
12116 class="cmtt-8">&#x00A0;-</span><span 
12117 class="cmtt-8">&#x00A0;[y0]</span>
12118 <br class="fancyvrb" /><a 
12119  id="x1-122004r2"></a><span 
12120 class="cmr-6">2</span><span 
12121 class="cmtt-8">&#x00A0;</span><span 
12122 class="cmtt-8">&#x00A0;</span><span 
12123 class="cmtt-8">&#x00A0;</span><span 
12124 class="cmtt-8">&#x00A0;2)</span><span 
12125 class="cmtt-8">&#x00A0;[adx]</span><span 
12126 class="cmtt-8">&#x00A0;=</span><span 
12127 class="cmtt-8">&#x00A0;[x1]</span><span 
12128 class="cmtt-8">&#x00A0;-</span><span 
12129 class="cmtt-8">&#x00A0;[x0]</span>
12130 <br class="fancyvrb" /><a 
12131  id="x1-122006r3"></a><span 
12132 class="cmr-6">3</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;3)</span><span 
12137 class="cmtt-8">&#x00A0;[ady]</span><span 
12138 class="cmtt-8">&#x00A0;=</span><span 
12139 class="cmtt-8">&#x00A0;absolute</span><span 
12140 class="cmtt-8">&#x00A0;value</span><span 
12141 class="cmtt-8">&#x00A0;of</span><span 
12142 class="cmtt-8">&#x00A0;[dy]</span>
12143 <br class="fancyvrb" /><a 
12144  id="x1-122008r4"></a><span 
12145 class="cmr-6">4</span><span 
12146 class="cmtt-8">&#x00A0;</span><span 
12147 class="cmtt-8">&#x00A0;</span><span 
12148 class="cmtt-8">&#x00A0;</span><span 
12149 class="cmtt-8">&#x00A0;4)</span><span 
12150 class="cmtt-8">&#x00A0;[err]</span><span 
12151 class="cmtt-8">&#x00A0;=</span><span 
12152 class="cmtt-8">&#x00A0;[ady]</span><span 
12153 class="cmtt-8">&#x00A0;*</span><span 
12154 class="cmtt-8">&#x00A0;([X]</span><span 
12155 class="cmtt-8">&#x00A0;-</span><span 
12156 class="cmtt-8">&#x00A0;[x0])</span>
12157 <br class="fancyvrb" /><a 
12158  id="x1-122010r5"></a><span 
12159 class="cmr-6">5</span><span 
12160 class="cmtt-8">&#x00A0;</span><span 
12161 class="cmtt-8">&#x00A0;</span><span 
12162 class="cmtt-8">&#x00A0;</span><span 
12163 class="cmtt-8">&#x00A0;5)</span><span 
12164 class="cmtt-8">&#x00A0;[off]</span><span 
12165 class="cmtt-8">&#x00A0;=</span><span 
12166 class="cmtt-8">&#x00A0;[err]</span><span 
12167 class="cmtt-8">&#x00A0;/</span><span 
12168 class="cmtt-8">&#x00A0;[adx]</span><span 
12169 class="cmtt-8">&#x00A0;using</span><span 
12170 class="cmtt-8">&#x00A0;integer</span><span 
12171 class="cmtt-8">&#x00A0;division</span>
12172 <br class="fancyvrb" /><a 
12173  id="x1-122012r6"></a><span 
12174 class="cmr-6">6</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;6)</span><span 
12179 class="cmtt-8">&#x00A0;if</span><span 
12180 class="cmtt-8">&#x00A0;(</span><span 
12181 class="cmtt-8">&#x00A0;[dy]</span><span 
12182 class="cmtt-8">&#x00A0;is</span><span 
12183 class="cmtt-8">&#x00A0;less</span><span 
12184 class="cmtt-8">&#x00A0;than</span><span 
12185 class="cmtt-8">&#x00A0;zero</span><span 
12186 class="cmtt-8">&#x00A0;)</span><span 
12187 class="cmtt-8">&#x00A0;{</span>
12188 <br class="fancyvrb" /><a 
12189  id="x1-122014r7"></a><span 
12190 class="cmr-6">7</span><span 
12191 class="cmtt-8">&#x00A0;</span><span 
12192 class="cmtt-8">&#x00A0;</span>
12193 <br class="fancyvrb" /><a 
12194  id="x1-122016r8"></a><span 
12195 class="cmr-6">8</span><span 
12196 class="cmtt-8">&#x00A0;</span><span 
12197 class="cmtt-8">&#x00A0;</span><span 
12198 class="cmtt-8">&#x00A0;</span><span 
12199 class="cmtt-8">&#x00A0;</span><span 
12200 class="cmtt-8">&#x00A0;</span><span 
12201 class="cmtt-8">&#x00A0;</span><span 
12202 class="cmtt-8">&#x00A0;</span><span 
12203 class="cmtt-8">&#x00A0;</span><span 
12204 class="cmtt-8">&#x00A0;7)</span><span 
12205 class="cmtt-8">&#x00A0;[Y]</span><span 
12206 class="cmtt-8">&#x00A0;=</span><span 
12207 class="cmtt-8">&#x00A0;[y0]</span><span 
12208 class="cmtt-8">&#x00A0;-</span><span 
12209 class="cmtt-8">&#x00A0;[off]</span>
12210 <br class="fancyvrb" /><a 
12211  id="x1-122018r9"></a><span 
12212 class="cmr-6">9</span><span 
12213 class="cmtt-8">&#x00A0;</span><span 
12214 class="cmtt-8">&#x00A0;</span>
12215 <br class="fancyvrb" /><a 
12216  id="x1-122020r10"></a><span 
12217 class="cmr-6">10</span><span 
12218 class="cmtt-8">&#x00A0;</span><span 
12219 class="cmtt-8">&#x00A0;</span><span 
12220 class="cmtt-8">&#x00A0;</span><span 
12221 class="cmtt-8">&#x00A0;</span><span 
12222 class="cmtt-8">&#x00A0;</span><span 
12223 class="cmtt-8">&#x00A0;</span><span 
12224 class="cmtt-8">&#x00A0;}</span><span 
12225 class="cmtt-8">&#x00A0;else</span><span 
12226 class="cmtt-8">&#x00A0;{</span>
12227 <br class="fancyvrb" /><a 
12228  id="x1-122022r11"></a><span 
12229 class="cmr-6">11</span><span 
12230 class="cmtt-8">&#x00A0;</span><span 
12231 class="cmtt-8">&#x00A0;</span>
12232 <br class="fancyvrb" /><a 
12233  id="x1-122024r12"></a><span 
12234 class="cmr-6">12</span><span 
12235 class="cmtt-8">&#x00A0;</span><span 
12236 class="cmtt-8">&#x00A0;</span><span 
12237 class="cmtt-8">&#x00A0;</span><span 
12238 class="cmtt-8">&#x00A0;</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;</span><span 
12243 class="cmtt-8">&#x00A0;8)</span><span 
12244 class="cmtt-8">&#x00A0;[Y]</span><span 
12245 class="cmtt-8">&#x00A0;=</span><span 
12246 class="cmtt-8">&#x00A0;[y0]</span><span 
12247 class="cmtt-8">&#x00A0;+</span><span 
12248 class="cmtt-8">&#x00A0;[off]</span>
12249 <br class="fancyvrb" /><a 
12250  id="x1-122026r13"></a><span 
12251 class="cmr-6">13</span><span 
12252 class="cmtt-8">&#x00A0;</span><span 
12253 class="cmtt-8">&#x00A0;</span>
12254 <br class="fancyvrb" /><a 
12255  id="x1-122028r14"></a><span 
12256 class="cmr-6">14</span><span 
12257 class="cmtt-8">&#x00A0;</span><span 
12258 class="cmtt-8">&#x00A0;</span><span 
12259 class="cmtt-8">&#x00A0;</span><span 
12260 class="cmtt-8">&#x00A0;</span><span 
12261 class="cmtt-8">&#x00A0;</span><span 
12262 class="cmtt-8">&#x00A0;</span><span 
12263 class="cmtt-8">&#x00A0;}</span>
12264 <br class="fancyvrb" /><a 
12265  id="x1-122030r15"></a><span 
12266 class="cmr-6">15</span><span 
12267 class="cmtt-8">&#x00A0;</span><span 
12268 class="cmtt-8">&#x00A0;</span>
12269 <br class="fancyvrb" /><a 
12270  id="x1-122032r16"></a><span 
12271 class="cmr-6">16</span><span 
12272 class="cmtt-8">&#x00A0;</span><span 
12273 class="cmtt-8">&#x00A0;</span><span 
12274 class="cmtt-8">&#x00A0;</span><span 
12275 class="cmtt-8">&#x00A0;9)</span><span 
12276 class="cmtt-8">&#x00A0;done</span>
12277 </div>
12278 <!--l. 125--><p class="noindent" >
12279 <h5 class="subsubsectionHead"><span class="titlemark">9.2.7.  </span> <a 
12280  id="x1-1230009.2.7"></a>render_line</h5>
12281 <!--l. 127--><p class="noindent" >Floor decode type one uses the integer line drawing algorithm of &#8221;render_line(x0, y0, x1, y1, v)&#8221;
12282 to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
12283 been relevant elsewhere, but here we must define integer division as rounding division of both
12284 positive and negative numbers toward zero.
12285 <!--l. 134--><p class="noindent" >
12286 <div class="fancyvrb" id="fancyvrb47">
12287 <a 
12288  id="x1-123002r1"></a><span 
12289 class="cmr-6">1</span><span 
12290 class="cmtt-8">&#x00A0;</span><span 
12291 class="cmtt-8">&#x00A0;</span><span 
12292 class="cmtt-8">&#x00A0;</span><span 
12293 class="cmtt-8">&#x00A0;1)</span><span 
12294 class="cmtt-8">&#x00A0;</span><span 
12295 class="cmtt-8">&#x00A0;</span><span 
12296 class="cmtt-8">&#x00A0;[dy]</span><span 
12297 class="cmtt-8">&#x00A0;=</span><span 
12298 class="cmtt-8">&#x00A0;[y1]</span><span 
12299 class="cmtt-8">&#x00A0;-</span><span 
12300 class="cmtt-8">&#x00A0;[y0]</span>
12301 <br class="fancyvrb" /><a 
12302  id="x1-123004r2"></a><span 
12303 class="cmr-6">2</span><span 
12304 class="cmtt-8">&#x00A0;</span><span 
12305 class="cmtt-8">&#x00A0;</span><span 
12306 class="cmtt-8">&#x00A0;</span><span 
12307 class="cmtt-8">&#x00A0;2)</span><span 
12308 class="cmtt-8">&#x00A0;</span><span 
12309 class="cmtt-8">&#x00A0;[adx]</span><span 
12310 class="cmtt-8">&#x00A0;=</span><span 
12311 class="cmtt-8">&#x00A0;[x1]</span><span 
12312 class="cmtt-8">&#x00A0;-</span><span 
12313 class="cmtt-8">&#x00A0;[x0]</span>
12314 <br class="fancyvrb" /><a 
12315  id="x1-123006r3"></a><span 
12316 class="cmr-6">3</span><span 
12317 class="cmtt-8">&#x00A0;</span><span 
12318 class="cmtt-8">&#x00A0;</span><span 
12319 class="cmtt-8">&#x00A0;</span><span 
12320 class="cmtt-8">&#x00A0;3)</span><span 
12321 class="cmtt-8">&#x00A0;</span><span 
12322 class="cmtt-8">&#x00A0;[ady]</span><span 
12323 class="cmtt-8">&#x00A0;=</span><span 
12324 class="cmtt-8">&#x00A0;absolute</span><span 
12325 class="cmtt-8">&#x00A0;value</span><span 
12326 class="cmtt-8">&#x00A0;of</span><span 
12327 class="cmtt-8">&#x00A0;[dy]</span>
12328 <br class="fancyvrb" /><a 
12329  id="x1-123008r4"></a><span 
12330 class="cmr-6">4</span><span 
12331 class="cmtt-8">&#x00A0;</span><span 
12332 class="cmtt-8">&#x00A0;</span><span 
12333 class="cmtt-8">&#x00A0;</span><span 
12334 class="cmtt-8">&#x00A0;4)</span><span 
12335 class="cmtt-8">&#x00A0;[base]</span><span 
12336 class="cmtt-8">&#x00A0;=</span><span 
12337 class="cmtt-8">&#x00A0;[dy]</span><span 
12338 class="cmtt-8">&#x00A0;/</span><span 
12339 class="cmtt-8">&#x00A0;[adx]</span><span 
12340 class="cmtt-8">&#x00A0;using</span><span 
12341 class="cmtt-8">&#x00A0;integer</span><span 
12342 class="cmtt-8">&#x00A0;division</span>
12343 <br class="fancyvrb" /><a 
12344  id="x1-123010r5"></a><span 
12345 class="cmr-6">5</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;5)</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;[x]</span><span 
12354 class="cmtt-8">&#x00A0;=</span><span 
12355 class="cmtt-8">&#x00A0;[x0]</span>
12356 <br class="fancyvrb" /><a 
12357  id="x1-123012r6"></a><span 
12358 class="cmr-6">6</span><span 
12359 class="cmtt-8">&#x00A0;</span><span 
12360 class="cmtt-8">&#x00A0;</span><span 
12361 class="cmtt-8">&#x00A0;</span><span 
12362 class="cmtt-8">&#x00A0;6)</span><span 
12363 class="cmtt-8">&#x00A0;</span><span 
12364 class="cmtt-8">&#x00A0;</span><span 
12365 class="cmtt-8">&#x00A0;</span><span 
12366 class="cmtt-8">&#x00A0;[y]</span><span 
12367 class="cmtt-8">&#x00A0;=</span><span 
12368 class="cmtt-8">&#x00A0;[y0]</span>
12369 <br class="fancyvrb" /><a 
12370  id="x1-123014r7"></a><span 
12371 class="cmr-6">7</span><span 
12372 class="cmtt-8">&#x00A0;</span><span 
12373 class="cmtt-8">&#x00A0;</span><span 
12374 class="cmtt-8">&#x00A0;</span><span 
12375 class="cmtt-8">&#x00A0;7)</span><span 
12376 class="cmtt-8">&#x00A0;</span><span 
12377 class="cmtt-8">&#x00A0;[err]</span><span 
12378 class="cmtt-8">&#x00A0;=</span><span 
12379 class="cmtt-8">&#x00A0;0</span>
12380 <br class="fancyvrb" /><a 
12381  id="x1-123016r8"></a><span 
12382 class="cmr-6">8</span><span 
12383 class="cmtt-8">&#x00A0;</span><span 
12384 class="cmtt-8">&#x00A0;</span>
12385 <br class="fancyvrb" /><a 
12386  id="x1-123018r9"></a><span 
12387 class="cmr-6">9</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;8)</span><span 
12392 class="cmtt-8">&#x00A0;if</span><span 
12393 class="cmtt-8">&#x00A0;(</span><span 
12394 class="cmtt-8">&#x00A0;[dy]</span><span 
12395 class="cmtt-8">&#x00A0;is</span><span 
12396 class="cmtt-8">&#x00A0;less</span><span 
12397 class="cmtt-8">&#x00A0;than</span><span 
12398 class="cmtt-8">&#x00A0;0</span><span 
12399 class="cmtt-8">&#x00A0;)</span><span 
12400 class="cmtt-8">&#x00A0;{</span>
12401 <br class="fancyvrb" /><a 
12402  id="x1-123020r10"></a><span 
12403 class="cmr-6">10</span><span 
12404 class="cmtt-8">&#x00A0;</span><span 
12405 class="cmtt-8">&#x00A0;</span>
12406 <br class="fancyvrb" /><a 
12407  id="x1-123022r11"></a><span 
12408 class="cmr-6">11</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><span 
12413 class="cmtt-8">&#x00A0;</span><span 
12414 class="cmtt-8">&#x00A0;</span><span 
12415 class="cmtt-8">&#x00A0;</span><span 
12416 class="cmtt-8">&#x00A0;</span><span 
12417 class="cmtt-8">&#x00A0;</span><span 
12418 class="cmtt-8">&#x00A0;9)</span><span 
12419 class="cmtt-8">&#x00A0;[sy]</span><span 
12420 class="cmtt-8">&#x00A0;=</span><span 
12421 class="cmtt-8">&#x00A0;[base]</span><span 
12422 class="cmtt-8">&#x00A0;-</span><span 
12423 class="cmtt-8">&#x00A0;1</span>
12424 <br class="fancyvrb" /><a 
12425  id="x1-123024r12"></a><span 
12426 class="cmr-6">12</span><span 
12427 class="cmtt-8">&#x00A0;</span><span 
12428 class="cmtt-8">&#x00A0;</span>
12429 <br class="fancyvrb" /><a 
12430  id="x1-123026r13"></a><span 
12431 class="cmr-6">13</span><span 
12432 class="cmtt-8">&#x00A0;</span><span 
12433 class="cmtt-8">&#x00A0;</span><span 
12434 class="cmtt-8">&#x00A0;</span><span 
12435 class="cmtt-8">&#x00A0;</span><span 
12436 class="cmtt-8">&#x00A0;</span><span 
12437 class="cmtt-8">&#x00A0;</span><span 
12438 class="cmtt-8">&#x00A0;}</span><span 
12439 class="cmtt-8">&#x00A0;else</span><span 
12440 class="cmtt-8">&#x00A0;{</span>
12441 <br class="fancyvrb" /><a 
12442  id="x1-123028r14"></a><span 
12443 class="cmr-6">14</span><span 
12444 class="cmtt-8">&#x00A0;</span><span 
12445 class="cmtt-8">&#x00A0;</span>
12446 <br class="fancyvrb" /><a 
12447  id="x1-123030r15"></a><span 
12448 class="cmr-6">15</span><span 
12449 class="cmtt-8">&#x00A0;</span><span 
12450 class="cmtt-8">&#x00A0;</span><span 
12451 class="cmtt-8">&#x00A0;</span><span 
12452 class="cmtt-8">&#x00A0;</span><span 
12453 class="cmtt-8">&#x00A0;</span><span 
12454 class="cmtt-8">&#x00A0;</span><span 
12455 class="cmtt-8">&#x00A0;</span><span 
12456 class="cmtt-8">&#x00A0;</span><span 
12457 class="cmtt-8">&#x00A0;10)</span><span 
12458 class="cmtt-8">&#x00A0;[sy]</span><span 
12459 class="cmtt-8">&#x00A0;=</span><span 
12460 class="cmtt-8">&#x00A0;[base]</span><span 
12461 class="cmtt-8">&#x00A0;+</span><span 
12462 class="cmtt-8">&#x00A0;1</span>
12463 <br class="fancyvrb" /><a 
12464  id="x1-123032r16"></a><span 
12465 class="cmr-6">16</span><span 
12466 class="cmtt-8">&#x00A0;</span><span 
12467 class="cmtt-8">&#x00A0;</span>
12468 <br class="fancyvrb" /><a 
12469  id="x1-123034r17"></a><span 
12470 class="cmr-6">17</span><span 
12471 class="cmtt-8">&#x00A0;</span><span 
12472 class="cmtt-8">&#x00A0;</span><span 
12473 class="cmtt-8">&#x00A0;</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>
12478 <br class="fancyvrb" /><a 
12479  id="x1-123036r18"></a><span 
12480 class="cmr-6">18</span><span 
12481 class="cmtt-8">&#x00A0;</span><span 
12482 class="cmtt-8">&#x00A0;</span>
12483 <br class="fancyvrb" /><a 
12484  id="x1-123038r19"></a><span 
12485 class="cmr-6">19</span><span 
12486 class="cmtt-8">&#x00A0;</span><span 
12487 class="cmtt-8">&#x00A0;</span><span 
12488 class="cmtt-8">&#x00A0;11)</span><span 
12489 class="cmtt-8">&#x00A0;[ady]</span><span 
12490 class="cmtt-8">&#x00A0;=</span><span 
12491 class="cmtt-8">&#x00A0;[ady]</span><span 
12492 class="cmtt-8">&#x00A0;-</span><span 
12493 class="cmtt-8">&#x00A0;(absolute</span><span 
12494 class="cmtt-8">&#x00A0;value</span><span 
12495 class="cmtt-8">&#x00A0;of</span><span 
12496 class="cmtt-8">&#x00A0;[base])</span><span 
12497 class="cmtt-8">&#x00A0;*</span><span 
12498 class="cmtt-8">&#x00A0;[adx]</span>
12499 <br class="fancyvrb" /><a 
12500  id="x1-123040r20"></a><span 
12501 class="cmr-6">20</span><span 
12502 class="cmtt-8">&#x00A0;</span><span 
12503 class="cmtt-8">&#x00A0;</span><span 
12504 class="cmtt-8">&#x00A0;12)</span><span 
12505 class="cmtt-8">&#x00A0;vector</span><span 
12506 class="cmtt-8">&#x00A0;[v]</span><span 
12507 class="cmtt-8">&#x00A0;element</span><span 
12508 class="cmtt-8">&#x00A0;[x]</span><span 
12509 class="cmtt-8">&#x00A0;=</span><span 
12510 class="cmtt-8">&#x00A0;[y]</span>
12511 <br class="fancyvrb" /><a 
12512  id="x1-123042r21"></a><span 
12513 class="cmr-6">21</span><span 
12514 class="cmtt-8">&#x00A0;</span><span 
12515 class="cmtt-8">&#x00A0;</span>
12516 <br class="fancyvrb" /><a 
12517  id="x1-123044r22"></a><span 
12518 class="cmr-6">22</span><span 
12519 class="cmtt-8">&#x00A0;</span><span 
12520 class="cmtt-8">&#x00A0;</span><span 
12521 class="cmtt-8">&#x00A0;13)</span><span 
12522 class="cmtt-8">&#x00A0;iterate</span><span 
12523 class="cmtt-8">&#x00A0;[x]</span><span 
12524 class="cmtt-8">&#x00A0;over</span><span 
12525 class="cmtt-8">&#x00A0;the</span><span 
12526 class="cmtt-8">&#x00A0;range</span><span 
12527 class="cmtt-8">&#x00A0;[x0]+1</span><span 
12528 class="cmtt-8">&#x00A0;...</span><span 
12529 class="cmtt-8">&#x00A0;[x1]-1</span><span 
12530 class="cmtt-8">&#x00A0;{</span>
12531                                                                                         
12532
12533                                                                                         
12534 <br class="fancyvrb" /><a 
12535  id="x1-123046r23"></a><span 
12536 class="cmr-6">23</span><span 
12537 class="cmtt-8">&#x00A0;</span><span 
12538 class="cmtt-8">&#x00A0;</span>
12539 <br class="fancyvrb" /><a 
12540  id="x1-123048r24"></a><span 
12541 class="cmr-6">24</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;14)</span><span 
12551 class="cmtt-8">&#x00A0;[err]</span><span 
12552 class="cmtt-8">&#x00A0;=</span><span 
12553 class="cmtt-8">&#x00A0;[err]</span><span 
12554 class="cmtt-8">&#x00A0;+</span><span 
12555 class="cmtt-8">&#x00A0;[ady];</span>
12556 <br class="fancyvrb" /><a 
12557  id="x1-123050r25"></a><span 
12558 class="cmr-6">25</span><span 
12559 class="cmtt-8">&#x00A0;</span><span 
12560 class="cmtt-8">&#x00A0;</span><span 
12561 class="cmtt-8">&#x00A0;</span><span 
12562 class="cmtt-8">&#x00A0;</span><span 
12563 class="cmtt-8">&#x00A0;</span><span 
12564 class="cmtt-8">&#x00A0;</span><span 
12565 class="cmtt-8">&#x00A0;</span><span 
12566 class="cmtt-8">&#x00A0;</span><span 
12567 class="cmtt-8">&#x00A0;15)</span><span 
12568 class="cmtt-8">&#x00A0;if</span><span 
12569 class="cmtt-8">&#x00A0;(</span><span 
12570 class="cmtt-8">&#x00A0;[err]</span><span 
12571 class="cmtt-8">&#x00A0;&#x003E;=</span><span 
12572 class="cmtt-8">&#x00A0;[adx]</span><span 
12573 class="cmtt-8">&#x00A0;)</span><span 
12574 class="cmtt-8">&#x00A0;{</span>
12575 <br class="fancyvrb" /><a 
12576  id="x1-123052r26"></a><span 
12577 class="cmr-6">26</span><span 
12578 class="cmtt-8">&#x00A0;</span><span 
12579 class="cmtt-8">&#x00A0;</span>
12580 <br class="fancyvrb" /><a 
12581  id="x1-123054r27"></a><span 
12582 class="cmr-6">27</span><span 
12583 class="cmtt-8">&#x00A0;</span><span 
12584 class="cmtt-8">&#x00A0;</span><span 
12585 class="cmtt-8">&#x00A0;</span><span 
12586 class="cmtt-8">&#x00A0;</span><span 
12587 class="cmtt-8">&#x00A0;</span><span 
12588 class="cmtt-8">&#x00A0;</span><span 
12589 class="cmtt-8">&#x00A0;</span><span 
12590 class="cmtt-8">&#x00A0;</span><span 
12591 class="cmtt-8">&#x00A0;</span><span 
12592 class="cmtt-8">&#x00A0;</span><span 
12593 class="cmtt-8">&#x00A0;</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;16)</span><span 
12598 class="cmtt-8">&#x00A0;[err]</span><span 
12599 class="cmtt-8">&#x00A0;=</span><span 
12600 class="cmtt-8">&#x00A0;[err]</span><span 
12601 class="cmtt-8">&#x00A0;-</span><span 
12602 class="cmtt-8">&#x00A0;[adx]</span>
12603 <br class="fancyvrb" /><a 
12604  id="x1-123056r28"></a><span 
12605 class="cmr-6">28</span><span 
12606 class="cmtt-8">&#x00A0;</span><span 
12607 class="cmtt-8">&#x00A0;</span><span 
12608 class="cmtt-8">&#x00A0;</span><span 
12609 class="cmtt-8">&#x00A0;</span><span 
12610 class="cmtt-8">&#x00A0;</span><span 
12611 class="cmtt-8">&#x00A0;</span><span 
12612 class="cmtt-8">&#x00A0;</span><span 
12613 class="cmtt-8">&#x00A0;</span><span 
12614 class="cmtt-8">&#x00A0;</span><span 
12615 class="cmtt-8">&#x00A0;</span><span 
12616 class="cmtt-8">&#x00A0;</span><span 
12617 class="cmtt-8">&#x00A0;</span><span 
12618 class="cmtt-8">&#x00A0;</span><span 
12619 class="cmtt-8">&#x00A0;</span><span 
12620 class="cmtt-8">&#x00A0;17)</span><span 
12621 class="cmtt-8">&#x00A0;</span><span 
12622 class="cmtt-8">&#x00A0;</span><span 
12623 class="cmtt-8">&#x00A0;[y]</span><span 
12624 class="cmtt-8">&#x00A0;=</span><span 
12625 class="cmtt-8">&#x00A0;[y]</span><span 
12626 class="cmtt-8">&#x00A0;+</span><span 
12627 class="cmtt-8">&#x00A0;[sy]</span>
12628 <br class="fancyvrb" /><a 
12629  id="x1-123058r29"></a><span 
12630 class="cmr-6">29</span><span 
12631 class="cmtt-8">&#x00A0;</span><span 
12632 class="cmtt-8">&#x00A0;</span>
12633 <br class="fancyvrb" /><a 
12634  id="x1-123060r30"></a><span 
12635 class="cmr-6">30</span><span 
12636 class="cmtt-8">&#x00A0;</span><span 
12637 class="cmtt-8">&#x00A0;</span><span 
12638 class="cmtt-8">&#x00A0;</span><span 
12639 class="cmtt-8">&#x00A0;</span><span 
12640 class="cmtt-8">&#x00A0;</span><span 
12641 class="cmtt-8">&#x00A0;</span><span 
12642 class="cmtt-8">&#x00A0;</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;else</span><span 
12650 class="cmtt-8">&#x00A0;{</span>
12651 <br class="fancyvrb" /><a 
12652  id="x1-123062r31"></a><span 
12653 class="cmr-6">31</span><span 
12654 class="cmtt-8">&#x00A0;</span><span 
12655 class="cmtt-8">&#x00A0;</span>
12656 <br class="fancyvrb" /><a 
12657  id="x1-123064r32"></a><span 
12658 class="cmr-6">32</span><span 
12659 class="cmtt-8">&#x00A0;</span><span 
12660 class="cmtt-8">&#x00A0;</span><span 
12661 class="cmtt-8">&#x00A0;</span><span 
12662 class="cmtt-8">&#x00A0;</span><span 
12663 class="cmtt-8">&#x00A0;</span><span 
12664 class="cmtt-8">&#x00A0;</span><span 
12665 class="cmtt-8">&#x00A0;</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><span 
12673 class="cmtt-8">&#x00A0;18)</span><span 
12674 class="cmtt-8">&#x00A0;[y]</span><span 
12675 class="cmtt-8">&#x00A0;=</span><span 
12676 class="cmtt-8">&#x00A0;[y]</span><span 
12677 class="cmtt-8">&#x00A0;+</span><span 
12678 class="cmtt-8">&#x00A0;[base]</span>
12679 <br class="fancyvrb" /><a 
12680  id="x1-123066r33"></a><span 
12681 class="cmr-6">33</span><span 
12682 class="cmtt-8">&#x00A0;</span><span 
12683 class="cmtt-8">&#x00A0;</span>
12684 <br class="fancyvrb" /><a 
12685  id="x1-123068r34"></a><span 
12686 class="cmr-6">34</span><span 
12687 class="cmtt-8">&#x00A0;</span><span 
12688 class="cmtt-8">&#x00A0;</span><span 
12689 class="cmtt-8">&#x00A0;</span><span 
12690 class="cmtt-8">&#x00A0;</span><span 
12691 class="cmtt-8">&#x00A0;</span><span 
12692 class="cmtt-8">&#x00A0;</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;</span><span 
12697 class="cmtt-8">&#x00A0;</span><span 
12698 class="cmtt-8">&#x00A0;</span><span 
12699 class="cmtt-8">&#x00A0;}</span>
12700 <br class="fancyvrb" /><a 
12701  id="x1-123070r35"></a><span 
12702 class="cmr-6">35</span><span 
12703 class="cmtt-8">&#x00A0;</span><span 
12704 class="cmtt-8">&#x00A0;</span>
12705 <br class="fancyvrb" /><a 
12706  id="x1-123072r36"></a><span 
12707 class="cmr-6">36</span><span 
12708 class="cmtt-8">&#x00A0;</span><span 
12709 class="cmtt-8">&#x00A0;</span><span 
12710 class="cmtt-8">&#x00A0;</span><span 
12711 class="cmtt-8">&#x00A0;</span><span 
12712 class="cmtt-8">&#x00A0;</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;19)</span><span 
12717 class="cmtt-8">&#x00A0;vector</span><span 
12718 class="cmtt-8">&#x00A0;[v]</span><span 
12719 class="cmtt-8">&#x00A0;element</span><span 
12720 class="cmtt-8">&#x00A0;[x]</span><span 
12721 class="cmtt-8">&#x00A0;=</span><span 
12722 class="cmtt-8">&#x00A0;[y]</span>
12723 <br class="fancyvrb" /><a 
12724  id="x1-123074r37"></a><span 
12725 class="cmr-6">37</span><span 
12726 class="cmtt-8">&#x00A0;</span><span 
12727 class="cmtt-8">&#x00A0;</span>
12728 <br class="fancyvrb" /><a 
12729  id="x1-123076r38"></a><span 
12730 class="cmr-6">38</span><span 
12731 class="cmtt-8">&#x00A0;</span><span 
12732 class="cmtt-8">&#x00A0;</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;</span><span 
12737 class="cmtt-8">&#x00A0;}</span>
12738 </div>
12739                                                                                         
12740
12741                                                                                         
12742                                                                                         
12743
12744                                                                                         
12745 <h3 class="sectionHead"><span class="titlemark">10.  </span> <a 
12746  id="x1-12400010"></a>Tables</h3>
12747 <!--l. 6--><p class="noindent" >
12748 <h4 class="subsectionHead"><span class="titlemark">10.1.  </span> <a 
12749  id="x1-12500010.1"></a>floor1_inverse_dB_table</h4>
12750 <!--l. 8--><p class="noindent" >The vector <span 
12751 class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the
12752 following values (read left to right then top to bottom):
12753 <!--l. 12--><p class="noindent" >
12754 <div class="fancyvrb" id="fancyvrb48">
12755 <a 
12756  id="x1-125002r1"></a><span 
12757 class="cmr-6">1</span><span 
12758 class="cmtt-8">&#x00A0;</span><span 
12759 class="cmtt-8">&#x00A0;</span><span 
12760 class="cmtt-8">&#x00A0;</span><span 
12761 class="cmtt-8">&#x00A0;1.0649863e-07,</span><span 
12762 class="cmtt-8">&#x00A0;1.1341951e-07,</span><span 
12763 class="cmtt-8">&#x00A0;1.2079015e-07,</span><span 
12764 class="cmtt-8">&#x00A0;1.2863978e-07,</span>
12765 <br class="fancyvrb" /><a 
12766  id="x1-125004r2"></a><span 
12767 class="cmr-6">2</span><span 
12768 class="cmtt-8">&#x00A0;</span><span 
12769 class="cmtt-8">&#x00A0;</span><span 
12770 class="cmtt-8">&#x00A0;</span><span 
12771 class="cmtt-8">&#x00A0;1.3699951e-07,</span><span 
12772 class="cmtt-8">&#x00A0;1.4590251e-07,</span><span 
12773 class="cmtt-8">&#x00A0;1.5538408e-07,</span><span 
12774 class="cmtt-8">&#x00A0;1.6548181e-07,</span>
12775 <br class="fancyvrb" /><a 
12776  id="x1-125006r3"></a><span 
12777 class="cmr-6">3</span><span 
12778 class="cmtt-8">&#x00A0;</span><span 
12779 class="cmtt-8">&#x00A0;</span><span 
12780 class="cmtt-8">&#x00A0;</span><span 
12781 class="cmtt-8">&#x00A0;1.7623575e-07,</span><span 
12782 class="cmtt-8">&#x00A0;1.8768855e-07,</span><span 
12783 class="cmtt-8">&#x00A0;1.9988561e-07,</span><span 
12784 class="cmtt-8">&#x00A0;2.1287530e-07,</span>
12785 <br class="fancyvrb" /><a 
12786  id="x1-125008r4"></a><span 
12787 class="cmr-6">4</span><span 
12788 class="cmtt-8">&#x00A0;</span><span 
12789 class="cmtt-8">&#x00A0;</span><span 
12790 class="cmtt-8">&#x00A0;</span><span 
12791 class="cmtt-8">&#x00A0;2.2670913e-07,</span><span 
12792 class="cmtt-8">&#x00A0;2.4144197e-07,</span><span 
12793 class="cmtt-8">&#x00A0;2.5713223e-07,</span><span 
12794 class="cmtt-8">&#x00A0;2.7384213e-07,</span>
12795 <br class="fancyvrb" /><a 
12796  id="x1-125010r5"></a><span 
12797 class="cmr-6">5</span><span 
12798 class="cmtt-8">&#x00A0;</span><span 
12799 class="cmtt-8">&#x00A0;</span><span 
12800 class="cmtt-8">&#x00A0;</span><span 
12801 class="cmtt-8">&#x00A0;2.9163793e-07,</span><span 
12802 class="cmtt-8">&#x00A0;3.1059021e-07,</span><span 
12803 class="cmtt-8">&#x00A0;3.3077411e-07,</span><span 
12804 class="cmtt-8">&#x00A0;3.5226968e-07,</span>
12805 <br class="fancyvrb" /><a 
12806  id="x1-125012r6"></a><span 
12807 class="cmr-6">6</span><span 
12808 class="cmtt-8">&#x00A0;</span><span 
12809 class="cmtt-8">&#x00A0;</span><span 
12810 class="cmtt-8">&#x00A0;</span><span 
12811 class="cmtt-8">&#x00A0;3.7516214e-07,</span><span 
12812 class="cmtt-8">&#x00A0;3.9954229e-07,</span><span 
12813 class="cmtt-8">&#x00A0;4.2550680e-07,</span><span 
12814 class="cmtt-8">&#x00A0;4.5315863e-07,</span>
12815 <br class="fancyvrb" /><a 
12816  id="x1-125014r7"></a><span 
12817 class="cmr-6">7</span><span 
12818 class="cmtt-8">&#x00A0;</span><span 
12819 class="cmtt-8">&#x00A0;</span><span 
12820 class="cmtt-8">&#x00A0;</span><span 
12821 class="cmtt-8">&#x00A0;4.8260743e-07,</span><span 
12822 class="cmtt-8">&#x00A0;5.1396998e-07,</span><span 
12823 class="cmtt-8">&#x00A0;5.4737065e-07,</span><span 
12824 class="cmtt-8">&#x00A0;5.8294187e-07,</span>
12825 <br class="fancyvrb" /><a 
12826  id="x1-125016r8"></a><span 
12827 class="cmr-6">8</span><span 
12828 class="cmtt-8">&#x00A0;</span><span 
12829 class="cmtt-8">&#x00A0;</span><span 
12830 class="cmtt-8">&#x00A0;</span><span 
12831 class="cmtt-8">&#x00A0;6.2082472e-07,</span><span 
12832 class="cmtt-8">&#x00A0;6.6116941e-07,</span><span 
12833 class="cmtt-8">&#x00A0;7.0413592e-07,</span><span 
12834 class="cmtt-8">&#x00A0;7.4989464e-07,</span>
12835 <br class="fancyvrb" /><a 
12836  id="x1-125018r9"></a><span 
12837 class="cmr-6">9</span><span 
12838 class="cmtt-8">&#x00A0;</span><span 
12839 class="cmtt-8">&#x00A0;</span><span 
12840 class="cmtt-8">&#x00A0;</span><span 
12841 class="cmtt-8">&#x00A0;7.9862701e-07,</span><span 
12842 class="cmtt-8">&#x00A0;8.5052630e-07,</span><span 
12843 class="cmtt-8">&#x00A0;9.0579828e-07,</span><span 
12844 class="cmtt-8">&#x00A0;9.6466216e-07,</span>
12845 <br class="fancyvrb" /><a 
12846  id="x1-125020r10"></a><span 
12847 class="cmr-6">10</span><span 
12848 class="cmtt-8">&#x00A0;</span><span 
12849 class="cmtt-8">&#x00A0;</span><span 
12850 class="cmtt-8">&#x00A0;</span><span 
12851 class="cmtt-8">&#x00A0;1.0273513e-06,</span><span 
12852 class="cmtt-8">&#x00A0;1.0941144e-06,</span><span 
12853 class="cmtt-8">&#x00A0;1.1652161e-06,</span><span 
12854 class="cmtt-8">&#x00A0;1.2409384e-06,</span>
12855 <br class="fancyvrb" /><a 
12856  id="x1-125022r11"></a><span 
12857 class="cmr-6">11</span><span 
12858 class="cmtt-8">&#x00A0;</span><span 
12859 class="cmtt-8">&#x00A0;</span><span 
12860 class="cmtt-8">&#x00A0;</span><span 
12861 class="cmtt-8">&#x00A0;1.3215816e-06,</span><span 
12862 class="cmtt-8">&#x00A0;1.4074654e-06,</span><span 
12863 class="cmtt-8">&#x00A0;1.4989305e-06,</span><span 
12864 class="cmtt-8">&#x00A0;1.5963394e-06,</span>
12865 <br class="fancyvrb" /><a 
12866  id="x1-125024r12"></a><span 
12867 class="cmr-6">12</span><span 
12868 class="cmtt-8">&#x00A0;</span><span 
12869 class="cmtt-8">&#x00A0;</span><span 
12870 class="cmtt-8">&#x00A0;</span><span 
12871 class="cmtt-8">&#x00A0;1.7000785e-06,</span><span 
12872 class="cmtt-8">&#x00A0;1.8105592e-06,</span><span 
12873 class="cmtt-8">&#x00A0;1.9282195e-06,</span><span 
12874 class="cmtt-8">&#x00A0;2.0535261e-06,</span>
12875 <br class="fancyvrb" /><a 
12876  id="x1-125026r13"></a><span 
12877 class="cmr-6">13</span><span 
12878 class="cmtt-8">&#x00A0;</span><span 
12879 class="cmtt-8">&#x00A0;</span><span 
12880 class="cmtt-8">&#x00A0;</span><span 
12881 class="cmtt-8">&#x00A0;2.1869758e-06,</span><span 
12882 class="cmtt-8">&#x00A0;2.3290978e-06,</span><span 
12883 class="cmtt-8">&#x00A0;2.4804557e-06,</span><span 
12884 class="cmtt-8">&#x00A0;2.6416497e-06,</span>
12885 <br class="fancyvrb" /><a 
12886  id="x1-125028r14"></a><span 
12887 class="cmr-6">14</span><span 
12888 class="cmtt-8">&#x00A0;</span><span 
12889 class="cmtt-8">&#x00A0;</span><span 
12890 class="cmtt-8">&#x00A0;</span><span 
12891 class="cmtt-8">&#x00A0;2.8133190e-06,</span><span 
12892 class="cmtt-8">&#x00A0;2.9961443e-06,</span><span 
12893 class="cmtt-8">&#x00A0;3.1908506e-06,</span><span 
12894 class="cmtt-8">&#x00A0;3.3982101e-06,</span>
12895 <br class="fancyvrb" /><a 
12896  id="x1-125030r15"></a><span 
12897 class="cmr-6">15</span><span 
12898 class="cmtt-8">&#x00A0;</span><span 
12899 class="cmtt-8">&#x00A0;</span><span 
12900 class="cmtt-8">&#x00A0;</span><span 
12901 class="cmtt-8">&#x00A0;3.6190449e-06,</span><span 
12902 class="cmtt-8">&#x00A0;3.8542308e-06,</span><span 
12903 class="cmtt-8">&#x00A0;4.1047004e-06,</span><span 
12904 class="cmtt-8">&#x00A0;4.3714470e-06,</span>
12905 <br class="fancyvrb" /><a 
12906  id="x1-125032r16"></a><span 
12907 class="cmr-6">16</span><span 
12908 class="cmtt-8">&#x00A0;</span><span 
12909 class="cmtt-8">&#x00A0;</span><span 
12910 class="cmtt-8">&#x00A0;</span><span 
12911 class="cmtt-8">&#x00A0;4.6555282e-06,</span><span 
12912 class="cmtt-8">&#x00A0;4.9580707e-06,</span><span 
12913 class="cmtt-8">&#x00A0;5.2802740e-06,</span><span 
12914 class="cmtt-8">&#x00A0;5.6234160e-06,</span>
12915 <br class="fancyvrb" /><a 
12916  id="x1-125034r17"></a><span 
12917 class="cmr-6">17</span><span 
12918 class="cmtt-8">&#x00A0;</span><span 
12919 class="cmtt-8">&#x00A0;</span><span 
12920 class="cmtt-8">&#x00A0;</span><span 
12921 class="cmtt-8">&#x00A0;5.9888572e-06,</span><span 
12922 class="cmtt-8">&#x00A0;6.3780469e-06,</span><span 
12923 class="cmtt-8">&#x00A0;6.7925283e-06,</span><span 
12924 class="cmtt-8">&#x00A0;7.2339451e-06,</span>
12925 <br class="fancyvrb" /><a 
12926  id="x1-125036r18"></a><span 
12927 class="cmr-6">18</span><span 
12928 class="cmtt-8">&#x00A0;</span><span 
12929 class="cmtt-8">&#x00A0;</span><span 
12930 class="cmtt-8">&#x00A0;</span><span 
12931 class="cmtt-8">&#x00A0;7.7040476e-06,</span><span 
12932 class="cmtt-8">&#x00A0;8.2047000e-06,</span><span 
12933 class="cmtt-8">&#x00A0;8.7378876e-06,</span><span 
12934 class="cmtt-8">&#x00A0;9.3057248e-06,</span>
12935 <br class="fancyvrb" /><a 
12936  id="x1-125038r19"></a><span 
12937 class="cmr-6">19</span><span 
12938 class="cmtt-8">&#x00A0;</span><span 
12939 class="cmtt-8">&#x00A0;</span><span 
12940 class="cmtt-8">&#x00A0;</span><span 
12941 class="cmtt-8">&#x00A0;9.9104632e-06,</span><span 
12942 class="cmtt-8">&#x00A0;1.0554501e-05,</span><span 
12943 class="cmtt-8">&#x00A0;1.1240392e-05,</span><span 
12944 class="cmtt-8">&#x00A0;1.1970856e-05,</span>
12945 <br class="fancyvrb" /><a 
12946  id="x1-125040r20"></a><span 
12947 class="cmr-6">20</span><span 
12948 class="cmtt-8">&#x00A0;</span><span 
12949 class="cmtt-8">&#x00A0;</span><span 
12950 class="cmtt-8">&#x00A0;</span><span 
12951 class="cmtt-8">&#x00A0;1.2748789e-05,</span><span 
12952 class="cmtt-8">&#x00A0;1.3577278e-05,</span><span 
12953 class="cmtt-8">&#x00A0;1.4459606e-05,</span><span 
12954 class="cmtt-8">&#x00A0;1.5399272e-05,</span>
12955 <br class="fancyvrb" /><a 
12956  id="x1-125042r21"></a><span 
12957 class="cmr-6">21</span><span 
12958 class="cmtt-8">&#x00A0;</span><span 
12959 class="cmtt-8">&#x00A0;</span><span 
12960 class="cmtt-8">&#x00A0;</span><span 
12961 class="cmtt-8">&#x00A0;1.6400004e-05,</span><span 
12962 class="cmtt-8">&#x00A0;1.7465768e-05,</span><span 
12963 class="cmtt-8">&#x00A0;1.8600792e-05,</span><span 
12964 class="cmtt-8">&#x00A0;1.9809576e-05,</span>
12965 <br class="fancyvrb" /><a 
12966  id="x1-125044r22"></a><span 
12967 class="cmr-6">22</span><span 
12968 class="cmtt-8">&#x00A0;</span><span 
12969 class="cmtt-8">&#x00A0;</span><span 
12970 class="cmtt-8">&#x00A0;</span><span 
12971 class="cmtt-8">&#x00A0;2.1096914e-05,</span><span 
12972 class="cmtt-8">&#x00A0;2.2467911e-05,</span><span 
12973 class="cmtt-8">&#x00A0;2.3928002e-05,</span><span 
12974 class="cmtt-8">&#x00A0;2.5482978e-05,</span>
12975 <br class="fancyvrb" /><a 
12976  id="x1-125046r23"></a><span 
12977 class="cmr-6">23</span><span 
12978 class="cmtt-8">&#x00A0;</span><span 
12979 class="cmtt-8">&#x00A0;</span><span 
12980 class="cmtt-8">&#x00A0;</span><span 
12981 class="cmtt-8">&#x00A0;2.7139006e-05,</span><span 
12982 class="cmtt-8">&#x00A0;2.8902651e-05,</span><span 
12983 class="cmtt-8">&#x00A0;3.0780908e-05,</span><span 
12984 class="cmtt-8">&#x00A0;3.2781225e-05,</span>
12985 <br class="fancyvrb" /><a 
12986  id="x1-125048r24"></a><span 
12987 class="cmr-6">24</span><span 
12988 class="cmtt-8">&#x00A0;</span><span 
12989 class="cmtt-8">&#x00A0;</span><span 
12990 class="cmtt-8">&#x00A0;</span><span 
12991 class="cmtt-8">&#x00A0;3.4911534e-05,</span><span 
12992 class="cmtt-8">&#x00A0;3.7180282e-05,</span><span 
12993 class="cmtt-8">&#x00A0;3.9596466e-05,</span><span 
12994 class="cmtt-8">&#x00A0;4.2169667e-05,</span>
12995 <br class="fancyvrb" /><a 
12996  id="x1-125050r25"></a><span 
12997 class="cmr-6">25</span><span 
12998 class="cmtt-8">&#x00A0;</span><span 
12999 class="cmtt-8">&#x00A0;</span><span 
13000 class="cmtt-8">&#x00A0;</span><span 
13001 class="cmtt-8">&#x00A0;4.4910090e-05,</span><span 
13002 class="cmtt-8">&#x00A0;4.7828601e-05,</span><span 
13003 class="cmtt-8">&#x00A0;5.0936773e-05,</span><span 
13004 class="cmtt-8">&#x00A0;5.4246931e-05,</span>
13005 <br class="fancyvrb" /><a 
13006  id="x1-125052r26"></a><span 
13007 class="cmr-6">26</span><span 
13008 class="cmtt-8">&#x00A0;</span><span 
13009 class="cmtt-8">&#x00A0;</span><span 
13010 class="cmtt-8">&#x00A0;</span><span 
13011 class="cmtt-8">&#x00A0;5.7772202e-05,</span><span 
13012 class="cmtt-8">&#x00A0;6.1526565e-05,</span><span 
13013 class="cmtt-8">&#x00A0;6.5524908e-05,</span><span 
13014 class="cmtt-8">&#x00A0;6.9783085e-05,</span>
13015 <br class="fancyvrb" /><a 
13016  id="x1-125054r27"></a><span 
13017 class="cmr-6">27</span><span 
13018 class="cmtt-8">&#x00A0;</span><span 
13019 class="cmtt-8">&#x00A0;</span><span 
13020 class="cmtt-8">&#x00A0;</span><span 
13021 class="cmtt-8">&#x00A0;7.4317983e-05,</span><span 
13022 class="cmtt-8">&#x00A0;7.9147585e-05,</span><span 
13023 class="cmtt-8">&#x00A0;8.4291040e-05,</span><span 
13024 class="cmtt-8">&#x00A0;8.9768747e-05,</span>
13025 <br class="fancyvrb" /><a 
13026  id="x1-125056r28"></a><span 
13027 class="cmr-6">28</span><span 
13028 class="cmtt-8">&#x00A0;</span><span 
13029 class="cmtt-8">&#x00A0;</span><span 
13030 class="cmtt-8">&#x00A0;</span><span 
13031 class="cmtt-8">&#x00A0;9.5602426e-05,</span><span 
13032 class="cmtt-8">&#x00A0;0.00010181521,</span><span 
13033 class="cmtt-8">&#x00A0;0.00010843174,</span><span 
13034 class="cmtt-8">&#x00A0;0.00011547824,</span>
13035 <br class="fancyvrb" /><a 
13036  id="x1-125058r29"></a><span 
13037 class="cmr-6">29</span><span 
13038 class="cmtt-8">&#x00A0;</span><span 
13039 class="cmtt-8">&#x00A0;</span><span 
13040 class="cmtt-8">&#x00A0;</span><span 
13041 class="cmtt-8">&#x00A0;0.00012298267,</span><span 
13042 class="cmtt-8">&#x00A0;0.00013097477,</span><span 
13043 class="cmtt-8">&#x00A0;0.00013948625,</span><span 
13044 class="cmtt-8">&#x00A0;0.00014855085,</span>
13045 <br class="fancyvrb" /><a 
13046  id="x1-125060r30"></a><span 
13047 class="cmr-6">30</span><span 
13048 class="cmtt-8">&#x00A0;</span><span 
13049 class="cmtt-8">&#x00A0;</span><span 
13050 class="cmtt-8">&#x00A0;</span><span 
13051 class="cmtt-8">&#x00A0;0.00015820453,</span><span 
13052 class="cmtt-8">&#x00A0;0.00016848555,</span><span 
13053 class="cmtt-8">&#x00A0;0.00017943469,</span><span 
13054 class="cmtt-8">&#x00A0;0.00019109536,</span>
13055 <br class="fancyvrb" /><a 
13056  id="x1-125062r31"></a><span 
13057 class="cmr-6">31</span><span 
13058 class="cmtt-8">&#x00A0;</span><span 
13059 class="cmtt-8">&#x00A0;</span><span 
13060 class="cmtt-8">&#x00A0;</span><span 
13061 class="cmtt-8">&#x00A0;0.00020351382,</span><span 
13062 class="cmtt-8">&#x00A0;0.00021673929,</span><span 
13063 class="cmtt-8">&#x00A0;0.00023082423,</span><span 
13064 class="cmtt-8">&#x00A0;0.00024582449,</span>
13065 <br class="fancyvrb" /><a 
13066  id="x1-125064r32"></a><span 
13067 class="cmr-6">32</span><span 
13068 class="cmtt-8">&#x00A0;</span><span 
13069 class="cmtt-8">&#x00A0;</span><span 
13070 class="cmtt-8">&#x00A0;</span><span 
13071 class="cmtt-8">&#x00A0;0.00026179955,</span><span 
13072 class="cmtt-8">&#x00A0;0.00027881276,</span><span 
13073 class="cmtt-8">&#x00A0;0.00029693158,</span><span 
13074 class="cmtt-8">&#x00A0;0.00031622787,</span>
13075 <br class="fancyvrb" /><a 
13076  id="x1-125066r33"></a><span 
13077 class="cmr-6">33</span><span 
13078 class="cmtt-8">&#x00A0;</span><span 
13079 class="cmtt-8">&#x00A0;</span><span 
13080 class="cmtt-8">&#x00A0;</span><span 
13081 class="cmtt-8">&#x00A0;0.00033677814,</span><span 
13082 class="cmtt-8">&#x00A0;0.00035866388,</span><span 
13083 class="cmtt-8">&#x00A0;0.00038197188,</span><span 
13084 class="cmtt-8">&#x00A0;0.00040679456,</span>
13085 <br class="fancyvrb" /><a 
13086  id="x1-125068r34"></a><span 
13087 class="cmr-6">34</span><span 
13088 class="cmtt-8">&#x00A0;</span><span 
13089 class="cmtt-8">&#x00A0;</span><span 
13090 class="cmtt-8">&#x00A0;</span><span 
13091 class="cmtt-8">&#x00A0;0.00043323036,</span><span 
13092 class="cmtt-8">&#x00A0;0.00046138411,</span><span 
13093 class="cmtt-8">&#x00A0;0.00049136745,</span><span 
13094 class="cmtt-8">&#x00A0;0.00052329927,</span>
13095 <br class="fancyvrb" /><a 
13096  id="x1-125070r35"></a><span 
13097 class="cmr-6">35</span><span 
13098 class="cmtt-8">&#x00A0;</span><span 
13099 class="cmtt-8">&#x00A0;</span><span 
13100 class="cmtt-8">&#x00A0;</span><span 
13101 class="cmtt-8">&#x00A0;0.00055730621,</span><span 
13102 class="cmtt-8">&#x00A0;0.00059352311,</span><span 
13103 class="cmtt-8">&#x00A0;0.00063209358,</span><span 
13104 class="cmtt-8">&#x00A0;0.00067317058,</span>
13105 <br class="fancyvrb" /><a 
13106  id="x1-125072r36"></a><span 
13107 class="cmr-6">36</span><span 
13108 class="cmtt-8">&#x00A0;</span><span 
13109 class="cmtt-8">&#x00A0;</span><span 
13110 class="cmtt-8">&#x00A0;</span><span 
13111 class="cmtt-8">&#x00A0;0.00071691700,</span><span 
13112 class="cmtt-8">&#x00A0;0.00076350630,</span><span 
13113 class="cmtt-8">&#x00A0;0.00081312324,</span><span 
13114 class="cmtt-8">&#x00A0;0.00086596457,</span>
13115 <br class="fancyvrb" /><a 
13116  id="x1-125074r37"></a><span 
13117 class="cmr-6">37</span><span 
13118 class="cmtt-8">&#x00A0;</span><span 
13119 class="cmtt-8">&#x00A0;</span><span 
13120 class="cmtt-8">&#x00A0;</span><span 
13121 class="cmtt-8">&#x00A0;0.00092223983,</span><span 
13122 class="cmtt-8">&#x00A0;0.00098217216,</span><span 
13123 class="cmtt-8">&#x00A0;0.0010459992,</span><span 
13124 class="cmtt-8">&#x00A0;</span><span 
13125 class="cmtt-8">&#x00A0;0.0011139742,</span>
13126 <br class="fancyvrb" /><a 
13127  id="x1-125076r38"></a><span 
13128 class="cmr-6">38</span><span 
13129 class="cmtt-8">&#x00A0;</span><span 
13130 class="cmtt-8">&#x00A0;</span><span 
13131 class="cmtt-8">&#x00A0;</span><span 
13132 class="cmtt-8">&#x00A0;0.0011863665,</span><span 
13133 class="cmtt-8">&#x00A0;</span><span 
13134 class="cmtt-8">&#x00A0;0.0012634633,</span><span 
13135 class="cmtt-8">&#x00A0;</span><span 
13136 class="cmtt-8">&#x00A0;0.0013455702,</span><span 
13137 class="cmtt-8">&#x00A0;</span><span 
13138 class="cmtt-8">&#x00A0;0.0014330129,</span>
13139 <br class="fancyvrb" /><a 
13140  id="x1-125078r39"></a><span 
13141 class="cmr-6">39</span><span 
13142 class="cmtt-8">&#x00A0;</span><span 
13143 class="cmtt-8">&#x00A0;</span><span 
13144 class="cmtt-8">&#x00A0;</span><span 
13145 class="cmtt-8">&#x00A0;0.0015261382,</span><span 
13146 class="cmtt-8">&#x00A0;</span><span 
13147 class="cmtt-8">&#x00A0;0.0016253153,</span><span 
13148 class="cmtt-8">&#x00A0;</span><span 
13149 class="cmtt-8">&#x00A0;0.0017309374,</span><span 
13150 class="cmtt-8">&#x00A0;</span><span 
13151 class="cmtt-8">&#x00A0;0.0018434235,</span>
13152 <br class="fancyvrb" /><a 
13153  id="x1-125080r40"></a><span 
13154 class="cmr-6">40</span><span 
13155 class="cmtt-8">&#x00A0;</span><span 
13156 class="cmtt-8">&#x00A0;</span><span 
13157 class="cmtt-8">&#x00A0;</span><span 
13158 class="cmtt-8">&#x00A0;0.0019632195,</span><span 
13159 class="cmtt-8">&#x00A0;</span><span 
13160 class="cmtt-8">&#x00A0;0.0020908006,</span><span 
13161 class="cmtt-8">&#x00A0;</span><span 
13162 class="cmtt-8">&#x00A0;0.0022266726,</span><span 
13163 class="cmtt-8">&#x00A0;</span><span 
13164 class="cmtt-8">&#x00A0;0.0023713743,</span>
13165 <br class="fancyvrb" /><a 
13166  id="x1-125082r41"></a><span 
13167 class="cmr-6">41</span><span 
13168 class="cmtt-8">&#x00A0;</span><span 
13169 class="cmtt-8">&#x00A0;</span><span 
13170 class="cmtt-8">&#x00A0;</span><span 
13171 class="cmtt-8">&#x00A0;0.0025254795,</span><span 
13172 class="cmtt-8">&#x00A0;</span><span 
13173 class="cmtt-8">&#x00A0;0.0026895994,</span><span 
13174 class="cmtt-8">&#x00A0;</span><span 
13175 class="cmtt-8">&#x00A0;0.0028643847,</span><span 
13176 class="cmtt-8">&#x00A0;</span><span 
13177 class="cmtt-8">&#x00A0;0.0030505286,</span>
13178 <br class="fancyvrb" /><a 
13179  id="x1-125084r42"></a><span 
13180 class="cmr-6">42</span><span 
13181 class="cmtt-8">&#x00A0;</span><span 
13182 class="cmtt-8">&#x00A0;</span><span 
13183 class="cmtt-8">&#x00A0;</span><span 
13184 class="cmtt-8">&#x00A0;0.0032487691,</span><span 
13185 class="cmtt-8">&#x00A0;</span><span 
13186 class="cmtt-8">&#x00A0;0.0034598925,</span><span 
13187 class="cmtt-8">&#x00A0;</span><span 
13188 class="cmtt-8">&#x00A0;0.0036847358,</span><span 
13189 class="cmtt-8">&#x00A0;</span><span 
13190 class="cmtt-8">&#x00A0;0.0039241906,</span>
13191                                                                                         
13192
13193                                                                                         
13194 <br class="fancyvrb" /><a 
13195  id="x1-125086r43"></a><span 
13196 class="cmr-6">43</span><span 
13197 class="cmtt-8">&#x00A0;</span><span 
13198 class="cmtt-8">&#x00A0;</span><span 
13199 class="cmtt-8">&#x00A0;</span><span 
13200 class="cmtt-8">&#x00A0;0.0041792066,</span><span 
13201 class="cmtt-8">&#x00A0;</span><span 
13202 class="cmtt-8">&#x00A0;0.0044507950,</span><span 
13203 class="cmtt-8">&#x00A0;</span><span 
13204 class="cmtt-8">&#x00A0;0.0047400328,</span><span 
13205 class="cmtt-8">&#x00A0;</span><span 
13206 class="cmtt-8">&#x00A0;0.0050480668,</span>
13207 <br class="fancyvrb" /><a 
13208  id="x1-125088r44"></a><span 
13209 class="cmr-6">44</span><span 
13210 class="cmtt-8">&#x00A0;</span><span 
13211 class="cmtt-8">&#x00A0;</span><span 
13212 class="cmtt-8">&#x00A0;</span><span 
13213 class="cmtt-8">&#x00A0;0.0053761186,</span><span 
13214 class="cmtt-8">&#x00A0;</span><span 
13215 class="cmtt-8">&#x00A0;0.0057254891,</span><span 
13216 class="cmtt-8">&#x00A0;</span><span 
13217 class="cmtt-8">&#x00A0;0.0060975636,</span><span 
13218 class="cmtt-8">&#x00A0;</span><span 
13219 class="cmtt-8">&#x00A0;0.0064938176,</span>
13220 <br class="fancyvrb" /><a 
13221  id="x1-125090r45"></a><span 
13222 class="cmr-6">45</span><span 
13223 class="cmtt-8">&#x00A0;</span><span 
13224 class="cmtt-8">&#x00A0;</span><span 
13225 class="cmtt-8">&#x00A0;</span><span 
13226 class="cmtt-8">&#x00A0;0.0069158225,</span><span 
13227 class="cmtt-8">&#x00A0;</span><span 
13228 class="cmtt-8">&#x00A0;0.0073652516,</span><span 
13229 class="cmtt-8">&#x00A0;</span><span 
13230 class="cmtt-8">&#x00A0;0.0078438871,</span><span 
13231 class="cmtt-8">&#x00A0;</span><span 
13232 class="cmtt-8">&#x00A0;0.0083536271,</span>
13233 <br class="fancyvrb" /><a 
13234  id="x1-125092r46"></a><span 
13235 class="cmr-6">46</span><span 
13236 class="cmtt-8">&#x00A0;</span><span 
13237 class="cmtt-8">&#x00A0;</span><span 
13238 class="cmtt-8">&#x00A0;</span><span 
13239 class="cmtt-8">&#x00A0;0.0088964928,</span><span 
13240 class="cmtt-8">&#x00A0;</span><span 
13241 class="cmtt-8">&#x00A0;0.009474637,</span><span 
13242 class="cmtt-8">&#x00A0;</span><span 
13243 class="cmtt-8">&#x00A0;</span><span 
13244 class="cmtt-8">&#x00A0;0.010090352,</span><span 
13245 class="cmtt-8">&#x00A0;</span><span 
13246 class="cmtt-8">&#x00A0;</span><span 
13247 class="cmtt-8">&#x00A0;0.010746080,</span>
13248 <br class="fancyvrb" /><a 
13249  id="x1-125094r47"></a><span 
13250 class="cmr-6">47</span><span 
13251 class="cmtt-8">&#x00A0;</span><span 
13252 class="cmtt-8">&#x00A0;</span><span 
13253 class="cmtt-8">&#x00A0;</span><span 
13254 class="cmtt-8">&#x00A0;0.011444421,</span><span 
13255 class="cmtt-8">&#x00A0;</span><span 
13256 class="cmtt-8">&#x00A0;</span><span 
13257 class="cmtt-8">&#x00A0;0.012188144,</span><span 
13258 class="cmtt-8">&#x00A0;</span><span 
13259 class="cmtt-8">&#x00A0;</span><span 
13260 class="cmtt-8">&#x00A0;0.012980198,</span><span 
13261 class="cmtt-8">&#x00A0;</span><span 
13262 class="cmtt-8">&#x00A0;</span><span 
13263 class="cmtt-8">&#x00A0;0.013823725,</span>
13264 <br class="fancyvrb" /><a 
13265  id="x1-125096r48"></a><span 
13266 class="cmr-6">48</span><span 
13267 class="cmtt-8">&#x00A0;</span><span 
13268 class="cmtt-8">&#x00A0;</span><span 
13269 class="cmtt-8">&#x00A0;</span><span 
13270 class="cmtt-8">&#x00A0;0.014722068,</span><span 
13271 class="cmtt-8">&#x00A0;</span><span 
13272 class="cmtt-8">&#x00A0;</span><span 
13273 class="cmtt-8">&#x00A0;0.015678791,</span><span 
13274 class="cmtt-8">&#x00A0;</span><span 
13275 class="cmtt-8">&#x00A0;</span><span 
13276 class="cmtt-8">&#x00A0;0.016697687,</span><span 
13277 class="cmtt-8">&#x00A0;</span><span 
13278 class="cmtt-8">&#x00A0;</span><span 
13279 class="cmtt-8">&#x00A0;0.017782797,</span>
13280 <br class="fancyvrb" /><a 
13281  id="x1-125098r49"></a><span 
13282 class="cmr-6">49</span><span 
13283 class="cmtt-8">&#x00A0;</span><span 
13284 class="cmtt-8">&#x00A0;</span><span 
13285 class="cmtt-8">&#x00A0;</span><span 
13286 class="cmtt-8">&#x00A0;0.018938423,</span><span 
13287 class="cmtt-8">&#x00A0;</span><span 
13288 class="cmtt-8">&#x00A0;</span><span 
13289 class="cmtt-8">&#x00A0;0.020169149,</span><span 
13290 class="cmtt-8">&#x00A0;</span><span 
13291 class="cmtt-8">&#x00A0;</span><span 
13292 class="cmtt-8">&#x00A0;0.021479854,</span><span 
13293 class="cmtt-8">&#x00A0;</span><span 
13294 class="cmtt-8">&#x00A0;</span><span 
13295 class="cmtt-8">&#x00A0;0.022875735,</span>
13296 <br class="fancyvrb" /><a 
13297  id="x1-125100r50"></a><span 
13298 class="cmr-6">50</span><span 
13299 class="cmtt-8">&#x00A0;</span><span 
13300 class="cmtt-8">&#x00A0;</span><span 
13301 class="cmtt-8">&#x00A0;</span><span 
13302 class="cmtt-8">&#x00A0;0.024362330,</span><span 
13303 class="cmtt-8">&#x00A0;</span><span 
13304 class="cmtt-8">&#x00A0;</span><span 
13305 class="cmtt-8">&#x00A0;0.025945531,</span><span 
13306 class="cmtt-8">&#x00A0;</span><span 
13307 class="cmtt-8">&#x00A0;</span><span 
13308 class="cmtt-8">&#x00A0;0.027631618,</span><span 
13309 class="cmtt-8">&#x00A0;</span><span 
13310 class="cmtt-8">&#x00A0;</span><span 
13311 class="cmtt-8">&#x00A0;0.029427276,</span>
13312 <br class="fancyvrb" /><a 
13313  id="x1-125102r51"></a><span 
13314 class="cmr-6">51</span><span 
13315 class="cmtt-8">&#x00A0;</span><span 
13316 class="cmtt-8">&#x00A0;</span><span 
13317 class="cmtt-8">&#x00A0;</span><span 
13318 class="cmtt-8">&#x00A0;0.031339626,</span><span 
13319 class="cmtt-8">&#x00A0;</span><span 
13320 class="cmtt-8">&#x00A0;</span><span 
13321 class="cmtt-8">&#x00A0;0.033376252,</span><span 
13322 class="cmtt-8">&#x00A0;</span><span 
13323 class="cmtt-8">&#x00A0;</span><span 
13324 class="cmtt-8">&#x00A0;0.035545228,</span><span 
13325 class="cmtt-8">&#x00A0;</span><span 
13326 class="cmtt-8">&#x00A0;</span><span 
13327 class="cmtt-8">&#x00A0;0.037855157,</span>
13328 <br class="fancyvrb" /><a 
13329  id="x1-125104r52"></a><span 
13330 class="cmr-6">52</span><span 
13331 class="cmtt-8">&#x00A0;</span><span 
13332 class="cmtt-8">&#x00A0;</span><span 
13333 class="cmtt-8">&#x00A0;</span><span 
13334 class="cmtt-8">&#x00A0;0.040315199,</span><span 
13335 class="cmtt-8">&#x00A0;</span><span 
13336 class="cmtt-8">&#x00A0;</span><span 
13337 class="cmtt-8">&#x00A0;0.042935108,</span><span 
13338 class="cmtt-8">&#x00A0;</span><span 
13339 class="cmtt-8">&#x00A0;</span><span 
13340 class="cmtt-8">&#x00A0;0.045725273,</span><span 
13341 class="cmtt-8">&#x00A0;</span><span 
13342 class="cmtt-8">&#x00A0;</span><span 
13343 class="cmtt-8">&#x00A0;0.048696758,</span>
13344 <br class="fancyvrb" /><a 
13345  id="x1-125106r53"></a><span 
13346 class="cmr-6">53</span><span 
13347 class="cmtt-8">&#x00A0;</span><span 
13348 class="cmtt-8">&#x00A0;</span><span 
13349 class="cmtt-8">&#x00A0;</span><span 
13350 class="cmtt-8">&#x00A0;0.051861348,</span><span 
13351 class="cmtt-8">&#x00A0;</span><span 
13352 class="cmtt-8">&#x00A0;</span><span 
13353 class="cmtt-8">&#x00A0;0.055231591,</span><span 
13354 class="cmtt-8">&#x00A0;</span><span 
13355 class="cmtt-8">&#x00A0;</span><span 
13356 class="cmtt-8">&#x00A0;0.058820850,</span><span 
13357 class="cmtt-8">&#x00A0;</span><span 
13358 class="cmtt-8">&#x00A0;</span><span 
13359 class="cmtt-8">&#x00A0;0.062643361,</span>
13360 <br class="fancyvrb" /><a 
13361  id="x1-125108r54"></a><span 
13362 class="cmr-6">54</span><span 
13363 class="cmtt-8">&#x00A0;</span><span 
13364 class="cmtt-8">&#x00A0;</span><span 
13365 class="cmtt-8">&#x00A0;</span><span 
13366 class="cmtt-8">&#x00A0;0.066714279,</span><span 
13367 class="cmtt-8">&#x00A0;</span><span 
13368 class="cmtt-8">&#x00A0;</span><span 
13369 class="cmtt-8">&#x00A0;0.071049749,</span><span 
13370 class="cmtt-8">&#x00A0;</span><span 
13371 class="cmtt-8">&#x00A0;</span><span 
13372 class="cmtt-8">&#x00A0;0.075666962,</span><span 
13373 class="cmtt-8">&#x00A0;</span><span 
13374 class="cmtt-8">&#x00A0;</span><span 
13375 class="cmtt-8">&#x00A0;0.080584227,</span>
13376 <br class="fancyvrb" /><a 
13377  id="x1-125110r55"></a><span 
13378 class="cmr-6">55</span><span 
13379 class="cmtt-8">&#x00A0;</span><span 
13380 class="cmtt-8">&#x00A0;</span><span 
13381 class="cmtt-8">&#x00A0;</span><span 
13382 class="cmtt-8">&#x00A0;0.085821044,</span><span 
13383 class="cmtt-8">&#x00A0;</span><span 
13384 class="cmtt-8">&#x00A0;</span><span 
13385 class="cmtt-8">&#x00A0;0.091398179,</span><span 
13386 class="cmtt-8">&#x00A0;</span><span 
13387 class="cmtt-8">&#x00A0;</span><span 
13388 class="cmtt-8">&#x00A0;0.097337747,</span><span 
13389 class="cmtt-8">&#x00A0;</span><span 
13390 class="cmtt-8">&#x00A0;</span><span 
13391 class="cmtt-8">&#x00A0;0.10366330,</span>
13392 <br class="fancyvrb" /><a 
13393  id="x1-125112r56"></a><span 
13394 class="cmr-6">56</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.11039993,</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.11757434,</span><span 
13403 class="cmtt-8">&#x00A0;</span><span 
13404 class="cmtt-8">&#x00A0;</span><span 
13405 class="cmtt-8">&#x00A0;</span><span 
13406 class="cmtt-8">&#x00A0;0.12521498,</span><span 
13407 class="cmtt-8">&#x00A0;</span><span 
13408 class="cmtt-8">&#x00A0;</span><span 
13409 class="cmtt-8">&#x00A0;</span><span 
13410 class="cmtt-8">&#x00A0;0.13335215,</span>
13411 <br class="fancyvrb" /><a 
13412  id="x1-125114r57"></a><span 
13413 class="cmr-6">57</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.14201813,</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.15124727,</span><span 
13422 class="cmtt-8">&#x00A0;</span><span 
13423 class="cmtt-8">&#x00A0;</span><span 
13424 class="cmtt-8">&#x00A0;</span><span 
13425 class="cmtt-8">&#x00A0;0.16107617,</span><span 
13426 class="cmtt-8">&#x00A0;</span><span 
13427 class="cmtt-8">&#x00A0;</span><span 
13428 class="cmtt-8">&#x00A0;</span><span 
13429 class="cmtt-8">&#x00A0;0.17154380,</span>
13430 <br class="fancyvrb" /><a 
13431  id="x1-125116r58"></a><span 
13432 class="cmr-6">58</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.18269168,</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.19456402,</span><span 
13441 class="cmtt-8">&#x00A0;</span><span 
13442 class="cmtt-8">&#x00A0;</span><span 
13443 class="cmtt-8">&#x00A0;</span><span 
13444 class="cmtt-8">&#x00A0;0.20720788,</span><span 
13445 class="cmtt-8">&#x00A0;</span><span 
13446 class="cmtt-8">&#x00A0;</span><span 
13447 class="cmtt-8">&#x00A0;</span><span 
13448 class="cmtt-8">&#x00A0;0.22067342,</span>
13449 <br class="fancyvrb" /><a 
13450  id="x1-125118r59"></a><span 
13451 class="cmr-6">59</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.23501402,</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.25028656,</span><span 
13460 class="cmtt-8">&#x00A0;</span><span 
13461 class="cmtt-8">&#x00A0;</span><span 
13462 class="cmtt-8">&#x00A0;</span><span 
13463 class="cmtt-8">&#x00A0;0.26655159,</span><span 
13464 class="cmtt-8">&#x00A0;</span><span 
13465 class="cmtt-8">&#x00A0;</span><span 
13466 class="cmtt-8">&#x00A0;</span><span 
13467 class="cmtt-8">&#x00A0;0.28387361,</span>
13468 <br class="fancyvrb" /><a 
13469  id="x1-125120r60"></a><span 
13470 class="cmr-6">60</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.30232132,</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.32196786,</span><span 
13479 class="cmtt-8">&#x00A0;</span><span 
13480 class="cmtt-8">&#x00A0;</span><span 
13481 class="cmtt-8">&#x00A0;</span><span 
13482 class="cmtt-8">&#x00A0;0.34289114,</span><span 
13483 class="cmtt-8">&#x00A0;</span><span 
13484 class="cmtt-8">&#x00A0;</span><span 
13485 class="cmtt-8">&#x00A0;</span><span 
13486 class="cmtt-8">&#x00A0;0.36517414,</span>
13487 <br class="fancyvrb" /><a 
13488  id="x1-125122r61"></a><span 
13489 class="cmr-6">61</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.38890521,</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;0.41417847,</span><span 
13498 class="cmtt-8">&#x00A0;</span><span 
13499 class="cmtt-8">&#x00A0;</span><span 
13500 class="cmtt-8">&#x00A0;</span><span 
13501 class="cmtt-8">&#x00A0;0.44109412,</span><span 
13502 class="cmtt-8">&#x00A0;</span><span 
13503 class="cmtt-8">&#x00A0;</span><span 
13504 class="cmtt-8">&#x00A0;</span><span 
13505 class="cmtt-8">&#x00A0;0.46975890,</span>
13506 <br class="fancyvrb" /><a 
13507  id="x1-125124r62"></a><span 
13508 class="cmr-6">62</span><span 
13509 class="cmtt-8">&#x00A0;</span><span 
13510 class="cmtt-8">&#x00A0;</span><span 
13511 class="cmtt-8">&#x00A0;</span><span 
13512 class="cmtt-8">&#x00A0;0.50028648,</span><span 
13513 class="cmtt-8">&#x00A0;</span><span 
13514 class="cmtt-8">&#x00A0;</span><span 
13515 class="cmtt-8">&#x00A0;</span><span 
13516 class="cmtt-8">&#x00A0;0.53279791,</span><span 
13517 class="cmtt-8">&#x00A0;</span><span 
13518 class="cmtt-8">&#x00A0;</span><span 
13519 class="cmtt-8">&#x00A0;</span><span 
13520 class="cmtt-8">&#x00A0;0.56742212,</span><span 
13521 class="cmtt-8">&#x00A0;</span><span 
13522 class="cmtt-8">&#x00A0;</span><span 
13523 class="cmtt-8">&#x00A0;</span><span 
13524 class="cmtt-8">&#x00A0;0.60429640,</span>
13525 <br class="fancyvrb" /><a 
13526  id="x1-125126r63"></a><span 
13527 class="cmr-6">63</span><span 
13528 class="cmtt-8">&#x00A0;</span><span 
13529 class="cmtt-8">&#x00A0;</span><span 
13530 class="cmtt-8">&#x00A0;</span><span 
13531 class="cmtt-8">&#x00A0;0.64356699,</span><span 
13532 class="cmtt-8">&#x00A0;</span><span 
13533 class="cmtt-8">&#x00A0;</span><span 
13534 class="cmtt-8">&#x00A0;</span><span 
13535 class="cmtt-8">&#x00A0;0.68538959,</span><span 
13536 class="cmtt-8">&#x00A0;</span><span 
13537 class="cmtt-8">&#x00A0;</span><span 
13538 class="cmtt-8">&#x00A0;</span><span 
13539 class="cmtt-8">&#x00A0;0.72993007,</span><span 
13540 class="cmtt-8">&#x00A0;</span><span 
13541 class="cmtt-8">&#x00A0;</span><span 
13542 class="cmtt-8">&#x00A0;</span><span 
13543 class="cmtt-8">&#x00A0;0.77736504,</span>
13544 <br class="fancyvrb" /><a 
13545  id="x1-125128r64"></a><span 
13546 class="cmr-6">64</span><span 
13547 class="cmtt-8">&#x00A0;</span><span 
13548 class="cmtt-8">&#x00A0;</span><span 
13549 class="cmtt-8">&#x00A0;</span><span 
13550 class="cmtt-8">&#x00A0;0.82788260,</span><span 
13551 class="cmtt-8">&#x00A0;</span><span 
13552 class="cmtt-8">&#x00A0;</span><span 
13553 class="cmtt-8">&#x00A0;</span><span 
13554 class="cmtt-8">&#x00A0;0.88168307,</span><span 
13555 class="cmtt-8">&#x00A0;</span><span 
13556 class="cmtt-8">&#x00A0;</span><span 
13557 class="cmtt-8">&#x00A0;</span><span 
13558 class="cmtt-8">&#x00A0;0.9389798,</span><span 
13559 class="cmtt-8">&#x00A0;</span><span 
13560 class="cmtt-8">&#x00A0;</span><span 
13561 class="cmtt-8">&#x00A0;</span><span 
13562 class="cmtt-8">&#x00A0;</span><span 
13563 class="cmtt-8">&#x00A0;1.</span>
13564 </div>
13565                                                                                         
13566
13567                                                                                         
13568                                                                                         
13569
13570                                                                                         
13571 <h3 class="sectionHead"><span class="titlemark">A.  </span> <a 
13572  id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3>
13573 <!--l. 6--><p class="noindent" >
13574 <h4 class="subsectionHead"><span class="titlemark">A.1.  </span> <a 
13575  id="x1-127000A.1"></a>Overview</h4>
13576 <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
13577 compressed audio packet data into file form.
13578 <!--l. 12--><p class="noindent" >The <a 
13579 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a 
13580 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221; provides an overview of the construction of
13581 Vorbis audio packets.
13582 <!--l. 15--><p class="noindent" >The <a 
13583 href="oggstream.html" >Ogg bitstream overview</a> and <a 
13584 href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
13585 descriptions of Ogg transport streams. This specification document assumes a working
13586 knowledge of the concepts covered in these named backround documents. Please read them
13587 first.
13588 <!--l. 22--><p class="noindent" >
13589 <h5 class="subsubsectionHead"><span class="titlemark">A.1.1.  </span> <a 
13590  id="x1-128000A.1.1"></a>Restrictions</h5>
13591 <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
13592 streams in degenerate, unmultiplexed form only. That is:
13593       <ul class="itemize1">
13594       <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
13595       </li>
13596       <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
13597       (links).
13598       </li>
13599       <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
13600       per link)
13601       </li></ul>
13602                                                                                         
13603
13604                                                                                         
13605 <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
13606 types into a multi-stream Ogg file. At the time this document was written, Ogg was
13607 becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
13608 audio. However, a &#8217;Vorbis I audio file&#8217; is taken to imply Vorbis audio existing alone
13609 within a degenerate Ogg stream. A compliant &#8217;Vorbis audio player&#8217; is not required to
13610 implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
13611 stream (naturally, application authors are encouraged to support full multiplexed Ogg
13612 handling).
13613 <!--l. 55--><p class="noindent" >
13614 <h5 class="subsubsectionHead"><span class="titlemark">A.1.2.  </span> <a 
13615  id="x1-129000A.1.2"></a>MIME type</h5>
13616 <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
13617 applications should use <span 
13618 class="cmtt-12">application/ogg</span>, while visual media should use <span 
13619 class="cmtt-12">video/ogg</span>, and audio
13620 <span 
13621 class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
13622 encapsulated Vorbis should use <span 
13623 class="cmtt-12">audio/vorbis </span>+ <span 
13624 class="cmtt-12">audio/vorbis-config</span>.
13625 <!--l. 65--><p class="noindent" >
13626 <h4 class="subsectionHead"><span class="titlemark">A.2.  </span> <a 
13627  id="x1-130000A.2"></a>Encapsulation</h4>
13628 <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
13629       <ul class="itemize1">
13630       <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
13631       as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
13632       results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
13633       stream.
13634       </li>
13635       <li class="itemize">This first page is marked &#8217;beginning of stream&#8217; in the page flags.
13636       </li>
13637       <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
13638       more pages beginning on the second page of the logical stream. However many pages
13639       they span, the third header packet finishes the page on which it ends. The next (first
13640       audio) packet must begin on a fresh page.
13641                                                                                         
13642
13643                                                                                         
13644       </li>
13645       <li class="itemize">The granule position of these first pages containing only headers is zero.
13646       </li>
13647       <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
13648       </li>
13649       <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
13650       </li>
13651       <li class="itemize">The last page is marked &#8217;end of stream&#8217; in the page flags.
13652       </li>
13653       <li class="itemize">Vorbis packets may span page boundaries.
13654       </li>
13655       <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
13656       samples (per channel; a stereo stream&#8217;s granule position does not increment at twice
13657       the speed of a mono stream).
13658       </li>
13659       <li class="itemize">The granule position of a page represents the end PCM sample position of the last
13660       packet <span 
13661 class="cmti-12">completed </span>on that page. The &#8217;last PCM sample&#8217; is the last complete sample
13662       returned by decode, not an internal sample awaiting lapping with a subsequent block.
13663       A page that is entirely spanned by a single packet (that completes on a subsequent
13664       page) has no granule position, and the granule position is set to &#8217;-1&#8217;.
13665       <!--l. 126--><p class="noindent" >Note  that  the  last  decoded  (fully  lapped)  PCM  sample  from  a  packet  is  not
13666       necessarily the middle sample from that block. If, eg, the current Vorbis packet
13667       encodes a &#8221;long block&#8221; and the next Vorbis packet encodes a &#8221;short block&#8221;, the last
13668       decodable sample from the current packet be at position (3*long_block_length/4) -
13669       (short_block_length/4).
13670       </li>
13671       <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
13672       started at position zero. Although the granule position belongs to the last completed
13673       packet on the page and a valid granule position must be positive, by inference it may
13674       indicate that the PCM position of the beginning of audio is positive or negative.
13675            <ul class="itemize2">
13676            <li class="itemize">A  positive  starting  value  simply  indicates  that  this  stream  begins  at  some
13677            positive time offset, potentially within a larger program. This is a common case
13678            when connecting to the middle of broadcast stream.
13679            </li>
13680            <li class="itemize">A negative value indicates that output samples preceeding time zero should be
13681                                                                                         
13682
13683                                                                                         
13684            discarded during decoding; this technique is used to allow sample-granularity
13685            editing of the stream start time of already-encoded Vorbis streams. The number
13686            of samples to be discarded must not exceed the overlap-add span of the first two
13687            audio packets.
13688            </li></ul>
13689       <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
13690       second finished audio packet must flush the page on which it appears and the
13691       third packet begin a fresh page. This allows the decoder to always be able to
13692       perform PCM position adjustments before needing to return any PCM data from
13693       synthesis, resulting in correct positioning information without any aditional seeking
13694       logic.
13695       <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a 
13696  id="x1-131000A.2"></a><span 
13697 class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
13698       incorrect positioning information for seeking operations at the very beginning of the
13699       stream.
13700       </li>
13701       <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
13702       final packet would normally return is used to end the stream on other than even frame
13703       boundaries. The difference between the actual available data returned and the
13704       declared amount indicates how many trailing samples to discard from the decoding
13705       process.
13706       </li></ul>
13707                                                                                         
13708
13709                                                                                         
13710 <h3 class="sectionHead"><span class="titlemark">B.  </span> <a 
13711  id="x1-132000B"></a>Vorbis encapsulation in RTP</h3>
13712 <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span 
13713 class="cmti-12">&#8220;RTP Payload Format for Vorbis Encoded Audio&#8221; </span>for description of
13714 how to embed Vorbis audio in an RTP stream.
13715                                                                                         
13716
13717                                                                                         
13718                                                                                         
13719
13720                                                                                         
13721 <h3 class="likesectionHead"><a 
13722  id="x1-133000B"></a>Colophon</h3>
13723 <!--l. 6--><p class="noindent" ><img 
13724 src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics  
13725 name="Vorbis_I_spec13x.png" src="xifish.pdf"  
13726 -->
13727 <!--l. 10--><p class="noindent" >Ogg is a <a 
13728 href="http://www.xiph.org/" >Xiph.Org Foundation</a> effort to protect essential tenets of Internet multimedia from
13729 corporate hostage-taking; Open Source is the net&#8217;s greatest tool to keep everyone honest. See
13730 <a 
13731 href="http://www.xiph.org/about.html" >About the Xiph.Org Foundation</a> for details.
13732 <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
13733 Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.Org
13734 Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
13735 and certify specification compliance.
13736 <!--l. 23--><p class="noindent" >Xiph.Org&#8217;s Vorbis software CODEC implementation is distributed under a BSD-like license. This
13737 does not restrict third parties from distributing independent implementations of Vorbis software
13738 under other licenses.
13739 <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.Org Foundation and their logos are trademarks (tm) of the <a 
13740 href="http://www.xiph.org/" >Xiph.Org
13741 Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.Org Foundation. All rights
13742 reserved.
13743 <!--l. 33--><p class="noindent" >This document is set using <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span 
13744 class="E">E</span>X</span></span>.
13745                                                                                         
13746
13747                                                                                         
13748 <h3 class="likesectionHead"><a 
13749  id="x1-134000B"></a>References</h3>
13750 <!--l. 125--><p class="noindent" >
13751      <div class="thebibliography">
13752      <p class="bibitem" ><span class="biblabel">
13753   [1]<span class="bibsp">&#x00A0;&#x00A0;&#x00A0;</span></span><a 
13754  id="XSporer/Brandenburg/Edler"></a>T.&#x00A0;Sporer,                                 K.&#x00A0;Brandenburg                                 and
13755      B.&#x00A0;Edler, The use of multirate filter banks for coding of high quality digital audio,
13756      <a 
13757 href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span 
13758 class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
13759 </p>
13760      </div>
13761  
13762 </body></html> 
13763
13764                                                                                         
13765
13766