Chris@1
|
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
Chris@1
|
2 "http://www.w3.org/TR/html4/loose.dtd">
|
Chris@1
|
3 <html >
|
Chris@1
|
4 <head><title>Vorbis I specification</title>
|
Chris@1
|
5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
Chris@1
|
6 <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
|
Chris@1
|
7 <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
|
Chris@1
|
8 <!-- html -->
|
Chris@1
|
9 <meta name="src" content="Vorbis_I_spec.tex">
|
Chris@1
|
10 <meta name="date" content="2012-02-03 17:22:00">
|
Chris@1
|
11 <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css">
|
Chris@1
|
12 </head><body
|
Chris@1
|
13 >
|
Chris@1
|
14 <div class="maketitle">
|
Chris@1
|
15
|
Chris@1
|
16
|
Chris@1
|
17
|
Chris@1
|
18
|
Chris@1
|
19
|
Chris@1
|
20
|
Chris@1
|
21
|
Chris@1
|
22 <h2 class="titleHead">Vorbis I specification</h2>
|
Chris@1
|
23 <div class="author" ><span
|
Chris@1
|
24 class="cmr-17">Xiph.Org Foundation</span></div><br />
|
Chris@1
|
25 <div class="date" ><span
|
Chris@1
|
26 class="cmr-17">February 3, 2012</span></div>
|
Chris@1
|
27 </div>
|
Chris@1
|
28 <h3 class="likesectionHead"><a
|
Chris@1
|
29 id="x1-1000"></a>Contents</h3>
|
Chris@1
|
30 <div class="tableofcontents">
|
Chris@1
|
31  <span class="sectionToc" >1 <a
|
Chris@1
|
32 href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span>
|
Chris@1
|
33 <br />  <span class="subsectionToc" >1.1 <a
|
Chris@1
|
34 href="#x1-30001.1" id="QQ2-1-3">Overview</a></span>
|
Chris@1
|
35 <br />   <span class="subsubsectionToc" >1.1.1 <a
|
Chris@1
|
36 href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span>
|
Chris@1
|
37 <br />   <span class="subsubsectionToc" >1.1.2 <a
|
Chris@1
|
38 href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span>
|
Chris@1
|
39 <br />   <span class="subsubsectionToc" >1.1.3 <a
|
Chris@1
|
40 href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span>
|
Chris@1
|
41 <br />   <span class="subsubsectionToc" >1.1.4 <a
|
Chris@1
|
42 href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span>
|
Chris@1
|
43 <br />   <span class="subsubsectionToc" >1.1.5 <a
|
Chris@1
|
44 href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span>
|
Chris@1
|
45 <br />   <span class="subsubsectionToc" >1.1.6 <a
|
Chris@1
|
46 href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span>
|
Chris@1
|
47 <br />  <span class="subsectionToc" >1.2 <a
|
Chris@1
|
48 href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span>
|
Chris@1
|
49 <br />   <span class="subsubsectionToc" >1.2.1 <a
|
Chris@1
|
50 href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span>
|
Chris@1
|
51 <br />   <span class="subsubsectionToc" >1.2.2 <a
|
Chris@1
|
52 href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span>
|
Chris@1
|
53 <br />   <span class="subsubsectionToc" >1.2.3 <a
|
Chris@1
|
54 href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span>
|
Chris@1
|
55
|
Chris@1
|
56
|
Chris@1
|
57
|
Chris@1
|
58 <br />   <span class="subsubsectionToc" >1.2.4 <a
|
Chris@1
|
59 href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span>
|
Chris@1
|
60 <br />   <span class="subsubsectionToc" >1.2.5 <a
|
Chris@1
|
61 href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span>
|
Chris@1
|
62 <br />   <span class="subsubsectionToc" >1.2.6 <a
|
Chris@1
|
63 href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span>
|
Chris@1
|
64 <br />  <span class="subsectionToc" >1.3 <a
|
Chris@1
|
65 href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span>
|
Chris@1
|
66 <br />   <span class="subsubsectionToc" >1.3.1 <a
|
Chris@1
|
67 href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span>
|
Chris@1
|
68 <br />   <span class="subsubsectionToc" >1.3.2 <a
|
Chris@1
|
69 href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span>
|
Chris@1
|
70 <br /> <span class="sectionToc" >2 <a
|
Chris@1
|
71 href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span>
|
Chris@1
|
72 <br />  <span class="subsectionToc" >2.1 <a
|
Chris@1
|
73 href="#x1-370002.1" id="QQ2-1-40">Overview</a></span>
|
Chris@1
|
74 <br />   <span class="subsubsectionToc" >2.1.1 <a
|
Chris@1
|
75 href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span>
|
Chris@1
|
76 <br />   <span class="subsubsectionToc" >2.1.2 <a
|
Chris@1
|
77 href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span>
|
Chris@1
|
78 <br />   <span class="subsubsectionToc" >2.1.3 <a
|
Chris@1
|
79 href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span>
|
Chris@1
|
80 <br />   <span class="subsubsectionToc" >2.1.4 <a
|
Chris@1
|
81 href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span>
|
Chris@1
|
82 <br />   <span class="subsubsectionToc" >2.1.5 <a
|
Chris@1
|
83 href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span>
|
Chris@1
|
84 <br />   <span class="subsubsectionToc" >2.1.6 <a
|
Chris@1
|
85 href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span>
|
Chris@1
|
86 <br />   <span class="subsubsectionToc" >2.1.7 <a
|
Chris@1
|
87 href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span>
|
Chris@1
|
88 <br />   <span class="subsubsectionToc" >2.1.8 <a
|
Chris@1
|
89 href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span>
|
Chris@1
|
90 <br />   <span class="subsubsectionToc" >2.1.9 <a
|
Chris@1
|
91 href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span>
|
Chris@1
|
92 <br /> <span class="sectionToc" >3 <a
|
Chris@1
|
93 href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span>
|
Chris@1
|
94 <br />  <span class="subsectionToc" >3.1 <a
|
Chris@1
|
95 href="#x1-480003.1" id="QQ2-1-51">Overview</a></span>
|
Chris@1
|
96 <br />   <span class="subsubsectionToc" >3.1.1 <a
|
Chris@1
|
97 href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span>
|
Chris@1
|
98 <br />  <span class="subsectionToc" >3.2 <a
|
Chris@1
|
99 href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span>
|
Chris@1
|
100 <br />   <span class="subsubsectionToc" >3.2.1 <a
|
Chris@1
|
101 href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span>
|
Chris@1
|
102 <br />  <span class="subsectionToc" >3.3 <a
|
Chris@1
|
103 href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span>
|
Chris@1
|
104 <br /> <span class="sectionToc" >4 <a
|
Chris@1
|
105 href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span>
|
Chris@1
|
106 <br />  <span class="subsectionToc" >4.1 <a
|
Chris@1
|
107 href="#x1-590004.1" id="QQ2-1-64">Overview</a></span>
|
Chris@1
|
108 <br />  <span class="subsectionToc" >4.2 <a
|
Chris@1
|
109 href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span>
|
Chris@1
|
110 <br />   <span class="subsubsectionToc" >4.2.1 <a
|
Chris@1
|
111 href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span>
|
Chris@1
|
112 <br />   <span class="subsubsectionToc" >4.2.2 <a
|
Chris@1
|
113 href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span>
|
Chris@1
|
114 <br />   <span class="subsubsectionToc" >4.2.3 <a
|
Chris@1
|
115 href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span>
|
Chris@1
|
116
|
Chris@1
|
117
|
Chris@1
|
118
|
Chris@1
|
119 <br />   <span class="subsubsectionToc" >4.2.4 <a
|
Chris@1
|
120 href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span>
|
Chris@1
|
121 <br />  <span class="subsectionToc" >4.3 <a
|
Chris@1
|
122 href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span>
|
Chris@1
|
123 <br />   <span class="subsubsectionToc" >4.3.1 <a
|
Chris@1
|
124 href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span>
|
Chris@1
|
125 <br />   <span class="subsubsectionToc" >4.3.2 <a
|
Chris@1
|
126 href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span>
|
Chris@1
|
127 <br />   <span class="subsubsectionToc" >4.3.3 <a
|
Chris@1
|
128 href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span>
|
Chris@1
|
129 <br />   <span class="subsubsectionToc" >4.3.4 <a
|
Chris@1
|
130 href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span>
|
Chris@1
|
131 <br />   <span class="subsubsectionToc" >4.3.5 <a
|
Chris@1
|
132 href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span>
|
Chris@1
|
133 <br />   <span class="subsubsectionToc" >4.3.6 <a
|
Chris@1
|
134 href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span>
|
Chris@1
|
135 <br />   <span class="subsubsectionToc" >4.3.7 <a
|
Chris@1
|
136 href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span>
|
Chris@1
|
137 <br />   <span class="subsubsectionToc" >4.3.8 <a
|
Chris@1
|
138 href="#x1-790004.3.8" id="QQ2-1-85">overlap_add</a></span>
|
Chris@1
|
139 <br />   <span class="subsubsectionToc" >4.3.9 <a
|
Chris@1
|
140 href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span>
|
Chris@1
|
141 <br /> <span class="sectionToc" >5 <a
|
Chris@1
|
142 href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span>
|
Chris@1
|
143 <br />  <span class="subsectionToc" >5.1 <a
|
Chris@1
|
144 href="#x1-820005.1" id="QQ2-1-88">Overview</a></span>
|
Chris@1
|
145 <br />  <span class="subsectionToc" >5.2 <a
|
Chris@1
|
146 href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span>
|
Chris@1
|
147 <br />   <span class="subsubsectionToc" >5.2.1 <a
|
Chris@1
|
148 href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span>
|
Chris@1
|
149 <br />   <span class="subsubsectionToc" >5.2.2 <a
|
Chris@1
|
150 href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span>
|
Chris@1
|
151 <br />   <span class="subsubsectionToc" >5.2.3 <a
|
Chris@1
|
152 href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span>
|
Chris@1
|
153 <br /> <span class="sectionToc" >6 <a
|
Chris@1
|
154 href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span>
|
Chris@1
|
155 <br />  <span class="subsectionToc" >6.1 <a
|
Chris@1
|
156 href="#x1-900006.1" id="QQ2-1-96">Overview</a></span>
|
Chris@1
|
157 <br />  <span class="subsectionToc" >6.2 <a
|
Chris@1
|
158 href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span>
|
Chris@1
|
159 <br />   <span class="subsubsectionToc" >6.2.1 <a
|
Chris@1
|
160 href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span>
|
Chris@1
|
161 <br />   <span class="subsubsectionToc" >6.2.2 <a
|
Chris@1
|
162 href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span>
|
Chris@1
|
163 <br />   <span class="subsubsectionToc" >6.2.3 <a
|
Chris@1
|
164 href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span>
|
Chris@1
|
165 <br /> <span class="sectionToc" >7 <a
|
Chris@1
|
166 href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span>
|
Chris@1
|
167 <br />  <span class="subsectionToc" >7.1 <a
|
Chris@1
|
168 href="#x1-960007.1" id="QQ2-1-102">Overview</a></span>
|
Chris@1
|
169 <br />  <span class="subsectionToc" >7.2 <a
|
Chris@1
|
170 href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span>
|
Chris@1
|
171 <br />   <span class="subsubsectionToc" >7.2.1 <a
|
Chris@1
|
172 href="#x1-980007.2.1" id="QQ2-1-104">model</a></span>
|
Chris@1
|
173 <br />   <span class="subsubsectionToc" >7.2.2 <a
|
Chris@1
|
174 href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span>
|
Chris@1
|
175 <br />   <span class="subsubsectionToc" >7.2.3 <a
|
Chris@1
|
176 href="#x1-1000007.2.3" id="QQ2-1-110">packet decode</a></span>
|
Chris@1
|
177
|
Chris@1
|
178
|
Chris@1
|
179
|
Chris@1
|
180 <br />   <span class="subsubsectionToc" >7.2.4 <a
|
Chris@1
|
181 href="#x1-1010007.2.4" id="QQ2-1-111">curve computation</a></span>
|
Chris@1
|
182 <br /> <span class="sectionToc" >8 <a
|
Chris@1
|
183 href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span>
|
Chris@1
|
184 <br />  <span class="subsectionToc" >8.1 <a
|
Chris@1
|
185 href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span>
|
Chris@1
|
186 <br />  <span class="subsectionToc" >8.2 <a
|
Chris@1
|
187 href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span>
|
Chris@1
|
188 <br />  <span class="subsectionToc" >8.3 <a
|
Chris@1
|
189 href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span>
|
Chris@1
|
190 <br />  <span class="subsectionToc" >8.4 <a
|
Chris@1
|
191 href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span>
|
Chris@1
|
192 <br />  <span class="subsectionToc" >8.5 <a
|
Chris@1
|
193 href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span>
|
Chris@1
|
194 <br />  <span class="subsectionToc" >8.6 <a
|
Chris@1
|
195 href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span>
|
Chris@1
|
196 <br />   <span class="subsubsectionToc" >8.6.1 <a
|
Chris@1
|
197 href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span>
|
Chris@1
|
198 <br />   <span class="subsubsectionToc" >8.6.2 <a
|
Chris@1
|
199 href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span>
|
Chris@1
|
200 <br />   <span class="subsubsectionToc" >8.6.3 <a
|
Chris@1
|
201 href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span>
|
Chris@1
|
202 <br />   <span class="subsubsectionToc" >8.6.4 <a
|
Chris@1
|
203 href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span>
|
Chris@1
|
204 <br />   <span class="subsubsectionToc" >8.6.5 <a
|
Chris@1
|
205 href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span>
|
Chris@1
|
206 <br /> <span class="sectionToc" >9 <a
|
Chris@1
|
207 href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span>
|
Chris@1
|
208 <br />  <span class="subsectionToc" >9.1 <a
|
Chris@1
|
209 href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span>
|
Chris@1
|
210 <br />  <span class="subsectionToc" >9.2 <a
|
Chris@1
|
211 href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span>
|
Chris@1
|
212 <br />   <span class="subsubsectionToc" >9.2.1 <a
|
Chris@1
|
213 href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span>
|
Chris@1
|
214 <br />   <span class="subsubsectionToc" >9.2.2 <a
|
Chris@1
|
215 href="#x1-1180009.2.2" id="QQ2-1-130">float32_unpack</a></span>
|
Chris@1
|
216 <br />   <span class="subsubsectionToc" >9.2.3 <a
|
Chris@1
|
217 href="#x1-1190009.2.3" id="QQ2-1-131">lookup1_values</a></span>
|
Chris@1
|
218 <br />   <span class="subsubsectionToc" >9.2.4 <a
|
Chris@1
|
219 href="#x1-1200009.2.4" id="QQ2-1-132">low_neighbor</a></span>
|
Chris@1
|
220 <br />   <span class="subsubsectionToc" >9.2.5 <a
|
Chris@1
|
221 href="#x1-1210009.2.5" id="QQ2-1-133">high_neighbor</a></span>
|
Chris@1
|
222 <br />   <span class="subsubsectionToc" >9.2.6 <a
|
Chris@1
|
223 href="#x1-1220009.2.6" id="QQ2-1-134">render_point</a></span>
|
Chris@1
|
224 <br />   <span class="subsubsectionToc" >9.2.7 <a
|
Chris@1
|
225 href="#x1-1230009.2.7" id="QQ2-1-135">render_line</a></span>
|
Chris@1
|
226 <br /> <span class="sectionToc" >10 <a
|
Chris@1
|
227 href="#x1-12400010" id="QQ2-1-136">Tables</a></span>
|
Chris@1
|
228 <br />  <span class="subsectionToc" >10.1 <a
|
Chris@1
|
229 href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span>
|
Chris@1
|
230 <br /> <span class="sectionToc" >A <a
|
Chris@1
|
231 href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span>
|
Chris@1
|
232 <br />  <span class="subsectionToc" >A.1 <a
|
Chris@1
|
233 href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span>
|
Chris@1
|
234 <br />   <span class="subsubsectionToc" >A.1.1 <a
|
Chris@1
|
235 href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span>
|
Chris@1
|
236 <br />   <span class="subsubsectionToc" >A.1.2 <a
|
Chris@1
|
237 href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span>
|
Chris@1
|
238
|
Chris@1
|
239
|
Chris@1
|
240
|
Chris@1
|
241 <br />  <span class="subsectionToc" >A.2 <a
|
Chris@1
|
242 href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span>
|
Chris@1
|
243 <br /> <span class="sectionToc" >B <a
|
Chris@1
|
244 href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span>
|
Chris@1
|
245 </div>
|
Chris@1
|
246
|
Chris@1
|
247
|
Chris@1
|
248
|
Chris@1
|
249 <h3 class="sectionHead"><span class="titlemark">1. </span> <a
|
Chris@1
|
250 id="x1-20001"></a>Introduction and Description</h3>
|
Chris@1
|
251 <!--l. 6--><p class="noindent" >
|
Chris@1
|
252 <h4 class="subsectionHead"><span class="titlemark">1.1. </span> <a
|
Chris@1
|
253 id="x1-30001.1"></a>Overview</h4>
|
Chris@1
|
254 <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec’s construction. A bit-by-bit
|
Chris@1
|
255 specification appears beginning in <a
|
Chris@1
|
256 href="#x1-580004">Section 4</a>, “<a
|
Chris@1
|
257 href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>”. The later
|
Chris@1
|
258 sections assume a high-level understanding of the Vorbis decode process, which is provided
|
Chris@1
|
259 here.
|
Chris@1
|
260 <!--l. 15--><p class="noindent" >
|
Chris@1
|
261 <h5 class="subsubsectionHead"><span class="titlemark">1.1.1. </span> <a
|
Chris@1
|
262 id="x1-40001.1.1"></a>Application</h5>
|
Chris@1
|
263 <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder
|
Chris@1
|
264 flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At
|
Chris@1
|
265 the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same
|
Chris@1
|
266 league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT
|
Chris@1
|
267 rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower
|
Chris@1
|
268 and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel
|
Chris@1
|
269 representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
|
Chris@1
|
270 discrete channels).
|
Chris@1
|
271 <!--l. 29--><p class="noindent" >
|
Chris@1
|
272 <h5 class="subsubsectionHead"><span class="titlemark">1.1.2. </span> <a
|
Chris@1
|
273 id="x1-50001.1.2"></a>Classification</h5>
|
Chris@1
|
274 <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete
|
Chris@1
|
275 Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in
|
Chris@1
|
276 Vorbis II to offer better transient response and reproduction using a transform better suited to
|
Chris@1
|
277 localized time events.
|
Chris@1
|
278
|
Chris@1
|
279
|
Chris@1
|
280
|
Chris@1
|
281 <!--l. 37--><p class="noindent" >
|
Chris@1
|
282 <h5 class="subsubsectionHead"><span class="titlemark">1.1.3. </span> <a
|
Chris@1
|
283 id="x1-60001.1.3"></a>Assumptions</h5>
|
Chris@1
|
284 <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple,
|
Chris@1
|
285 low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does
|
Chris@1
|
286 require more working memory as Vorbis has no static probability model; the vector codebooks
|
Chris@1
|
287 used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis
|
Chris@1
|
288 bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to
|
Chris@1
|
289 which they are pre-decoded into a cache is the dominant factor in decoder memory
|
Chris@1
|
290 usage.
|
Chris@1
|
291 <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it
|
Chris@1
|
292 is solely a method of accepting input audio, dividing it into individual frames and
|
Chris@1
|
293 compressing these frames into raw, unformatted ’packets’. The decoder then accepts
|
Chris@1
|
294 these raw packets in sequence, decodes them, synthesizes audio frames from them, and
|
Chris@1
|
295 reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form
|
Chris@1
|
296 variable bit rate (VBR) codec and packets have no minimum size, maximum size, or
|
Chris@1
|
297 fixed/expected size. Packets are designed that they may be truncated (or padded)
|
Chris@1
|
298 and remain decodable; this is not to be considered an error condition and is used
|
Chris@1
|
299 extensively in bitrate management in peeling. Both the transport mechanism and
|
Chris@1
|
300 decoder must allow that a packet may be any size, or end before or after packet decode
|
Chris@1
|
301 expects.
|
Chris@1
|
302 <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form
|
Chris@1
|
303 framing, sync, positioning and error correction in accordance with these design assumptions, such
|
Chris@1
|
304 as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this
|
Chris@1
|
305 document, we will assume that Vorbis is to be embedded in an Ogg stream specifically,
|
Chris@1
|
306 although this is by no means a requirement or fundamental assumption in the Vorbis
|
Chris@1
|
307 design.
|
Chris@1
|
308 <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a
|
Chris@1
|
309 href="#x1-126000A">Section A</a>,
|
Chris@1
|
310 “<a
|
Chris@1
|
311 href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>”.
|
Chris@1
|
312 <!--l. 77--><p class="noindent" >
|
Chris@1
|
313 <h5 class="subsubsectionHead"><span class="titlemark">1.1.4. </span> <a
|
Chris@1
|
314 id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5>
|
Chris@1
|
315 <!--l. 79--><p class="noindent" >Vorbis’ heritage is as a research CODEC and its current design reflects a desire to allow multiple
|
Chris@1
|
316 decades of continuous encoder improvement before running out of room within the codec
|
Chris@1
|
317 specification. For these reasons, configurable aspects of codec setup intentionally lean toward the
|
Chris@1
|
318 extreme of forward adaptive.
|
Chris@1
|
319
|
Chris@1
|
320
|
Chris@1
|
321
|
Chris@1
|
322 <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis
|
Chris@1
|
323 developer to keep in mind) is that the entire probability model of the codec, the Huffman and
|
Chris@1
|
324 VQ codebooks, is packed into the bitstream header along with extensive CODEC setup
|
Chris@1
|
325 parameters (often several hundred fields). This makes it impossible, as it would be with
|
Chris@1
|
326 MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin
|
Chris@1
|
327 decode at any frame in the stream without having previously fetched the codec setup
|
Chris@1
|
328 header.
|
Chris@1
|
329 <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a
|
Chris@1
|
330 id="x1-80001.1.4"></a><span
|
Chris@1
|
331 class="cmbx-12">Note:</span></span> Vorbis <span
|
Chris@1
|
332 class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec
|
Chris@1
|
333 has been initialized/setup with the setup headers.
|
Chris@1
|
334 <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream
|
Chris@1
|
335 headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less
|
Chris@1
|
336 is recommended (and Xiph.Org’s Vorbis encoder follows this suggestion).
|
Chris@1
|
337 <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is
|
Chris@1
|
338 an unusual design and thus causes some amount of complaint among engineers as this runs
|
Chris@1
|
339 against current design trends (and also points out limitations in some existing software/interface
|
Chris@1
|
340 designs, such as Windows’ ACM codec framework). However, we find that it does not
|
Chris@1
|
341 fundamentally limit Vorbis’ suitable application space.
|
Chris@1
|
342 <!--l. 115--><p class="noindent" >
|
Chris@1
|
343 <h5 class="subsubsectionHead"><span class="titlemark">1.1.5. </span> <a
|
Chris@1
|
344 id="x1-90001.1.5"></a>Format Specification</h5>
|
Chris@1
|
345 <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets
|
Chris@1
|
346 that are correctly decoded by the reference Vorbis decoder described below may be considered
|
Chris@1
|
347 a proper Vorbis encoder. A decoder must faithfully and completely implement the
|
Chris@1
|
348 specification defined below (except where noted) to be considered a proper Vorbis
|
Chris@1
|
349 decoder.
|
Chris@1
|
350 <!--l. 123--><p class="noindent" >
|
Chris@1
|
351 <h5 class="subsubsectionHead"><span class="titlemark">1.1.6. </span> <a
|
Chris@1
|
352 id="x1-100001.1.6"></a>Hardware Profile</h5>
|
Chris@1
|
353
|
Chris@1
|
354
|
Chris@1
|
355
|
Chris@1
|
356 <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an
|
Chris@1
|
357 embedded design. For this reason, embedded designs are allowed to deviate in limited ways from
|
Chris@1
|
358 the ‘full’ decode specification yet still be certified compliant. These optional omissions are
|
Chris@1
|
359 labelled in the spec where relevant.
|
Chris@1
|
360 <!--l. 131--><p class="noindent" >
|
Chris@1
|
361 <h4 class="subsectionHead"><span class="titlemark">1.2. </span> <a
|
Chris@1
|
362 id="x1-110001.2"></a>Decoder Configuration</h4>
|
Chris@1
|
363 <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that
|
Chris@1
|
364 perform specific functions in the decode pipeline. Each different component instance of a specific
|
Chris@1
|
365 type is semantically interchangeable; decoder configuration consists both of internal component
|
Chris@1
|
366 configuration, as well as arrangement of specific instances into a decode pipeline. Componentry
|
Chris@1
|
367 arrangement is roughly as follows:
|
Chris@1
|
368 <div class="center"
|
Chris@1
|
369 >
|
Chris@1
|
370 <!--l. 141--><p class="noindent" >
|
Chris@1
|
371
|
Chris@1
|
372 <!--l. 142--><p class="noindent" ><img
|
Chris@1
|
373 src="components.png" alt="PIC"
|
Chris@1
|
374 >
|
Chris@1
|
375 <br /> <div class="caption"
|
Chris@1
|
376 ><span class="id">Figure 1: </span><span
|
Chris@1
|
377 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 -->
|
Chris@1
|
378 </div>
|
Chris@1
|
379 <!--l. 146--><p class="noindent" >
|
Chris@1
|
380 <h5 class="subsubsectionHead"><span class="titlemark">1.2.1. </span> <a
|
Chris@1
|
381 id="x1-120001.2.1"></a>Global Config</h5>
|
Chris@1
|
382 <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis
|
Chris@1
|
383 version (always ’0’ in Vorbis I), bitrate hints, and the lists of component instances. All other
|
Chris@1
|
384 configuration is in the context of specific components.
|
Chris@1
|
385 <!--l. 152--><p class="noindent" >
|
Chris@1
|
386 <h5 class="subsubsectionHead"><span class="titlemark">1.2.2. </span> <a
|
Chris@1
|
387 id="x1-130001.2.2"></a>Mode</h5>
|
Chris@1
|
388
|
Chris@1
|
389
|
Chris@1
|
390
|
Chris@1
|
391 <!--l. 154--><p class="noindent" >Each Vorbis frame is coded according to a master ’mode’. A bitstream may use one or many
|
Chris@1
|
392 modes.
|
Chris@1
|
393 <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible
|
Chris@1
|
394 methods with the intention of choosing a method best suited to that frame. Different
|
Chris@1
|
395 modes are, e.g. how frame size is changed from frame to frame. The mode number of a
|
Chris@1
|
396 frame serves as a top level configuration switch for all other specific aspects of frame
|
Chris@1
|
397 decode.
|
Chris@1
|
398 <!--l. 164--><p class="noindent" >A ’mode’ configuration consists of a frame size setting, window type (always 0, the Vorbis
|
Chris@1
|
399 window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping
|
Chris@1
|
400 number. The mapping number specifies which mapping configuration instance to use for low-level
|
Chris@1
|
401 packet decode and synthesis.
|
Chris@1
|
402 <!--l. 171--><p class="noindent" >
|
Chris@1
|
403 <h5 class="subsubsectionHead"><span class="titlemark">1.2.3. </span> <a
|
Chris@1
|
404 id="x1-140001.2.3"></a>Mapping</h5>
|
Chris@1
|
405 <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of ’submaps’ that bundle sets
|
Chris@1
|
406 of channel vectors together for grouped encoding and decoding. These submaps are
|
Chris@1
|
407 not references to external components; the submap list is internal and specific to a
|
Chris@1
|
408 mapping.
|
Chris@1
|
409 <!--l. 178--><p class="noindent" >A ’submap’ is a configuration/grouping that applies to a subset of floor and residue vectors
|
Chris@1
|
410 within a mapping. The submap functions as a last layer of indirection such that specific special
|
Chris@1
|
411 floor or residue settings can be applied not only to all the vectors in a given mode, but also
|
Chris@1
|
412 specific vectors in a specific mode. Each submap specifies the proper floor and residue
|
Chris@1
|
413 instance number to use for decoding that submap’s spectral floor and spectral residue
|
Chris@1
|
414 vectors.
|
Chris@1
|
415 <!--l. 186--><p class="noindent" >As an example:
|
Chris@1
|
416 <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth
|
Chris@1
|
417 channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a
|
Chris@1
|
418 full-spectrum version of it as with the other channels. The submapping mechanism can be used
|
Chris@1
|
419 to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only
|
Chris@1
|
420 representation to the bass channel, thus saving space. In this example, channels 0-4 belong to
|
Chris@1
|
421 submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which
|
Chris@1
|
422 uses a bass-only representation.
|
Chris@1
|
423
|
Chris@1
|
424
|
Chris@1
|
425
|
Chris@1
|
426 <!--l. 199--><p class="noindent" >
|
Chris@1
|
427 <h5 class="subsubsectionHead"><span class="titlemark">1.2.4. </span> <a
|
Chris@1
|
428 id="x1-150001.2.4"></a>Floor</h5>
|
Chris@1
|
429 <!--l. 201--><p class="noindent" >Vorbis encodes a spectral ’floor’ vector for each PCM channel. This vector is a low-resolution
|
Chris@1
|
430 representation of the audio spectrum for the given channel in the current frame, generally used
|
Chris@1
|
431 akin to a whitening filter. It is named a ’floor’ because the Xiph.Org reference encoder has
|
Chris@1
|
432 historically used it as a unit-baseline for spectral resolution.
|
Chris@1
|
433 <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB
|
Chris@1
|
434 amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear
|
Chris@1
|
435 interpolated representation on a dB amplitude scale and linear frequency scale. The two floors
|
Chris@1
|
436 are semantically interchangeable in encoding/decoding. However, floor type 1 provides more
|
Chris@1
|
437 stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and
|
Chris@1
|
438 high bitrate modes. Floor 1 is also considerably less expensive to decode than floor
|
Chris@1
|
439 0.
|
Chris@1
|
440 <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis
|
Chris@1
|
441 encoder past Xiph.Org’s own beta 4 makes use of floor 0.
|
Chris@1
|
442 <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy
|
Chris@1
|
443 coding to save space. For this reason, a floor configuration generally refers to multiple
|
Chris@1
|
444 codebooks in the codebook component list. Entropy coding is thus provided as an
|
Chris@1
|
445 abstraction, and each floor instance may choose from any and all available codebooks when
|
Chris@1
|
446 coding/decoding.
|
Chris@1
|
447 <!--l. 230--><p class="noindent" >
|
Chris@1
|
448 <h5 class="subsubsectionHead"><span class="titlemark">1.2.5. </span> <a
|
Chris@1
|
449 id="x1-160001.2.5"></a>Residue</h5>
|
Chris@1
|
450 <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been
|
Chris@1
|
451 subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector
|
Chris@1
|
452 quantization according to one of three specific packing/coding algorithms numbered
|
Chris@1
|
453 0 through 2. The packing algorithm details are configured by residue instance. As
|
Chris@1
|
454 with the floor components, the final VQ/entropy encoding is provided by external
|
Chris@1
|
455 codebook instances and each residue instance may choose from any and all available
|
Chris@1
|
456 codebooks.
|
Chris@1
|
457 <!--l. 241--><p class="noindent" >
|
Chris@1
|
458
|
Chris@1
|
459
|
Chris@1
|
460
|
Chris@1
|
461 <h5 class="subsubsectionHead"><span class="titlemark">1.2.6. </span> <a
|
Chris@1
|
462 id="x1-170001.2.6"></a>Codebooks</h5>
|
Chris@1
|
463 <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use
|
Chris@1
|
464 the entropy-decoded integer value as an offset into an index of output value vectors, returning
|
Chris@1
|
465 the indicated vector of values.
|
Chris@1
|
466 <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree
|
Chris@1
|
467 representation. This tree is tightly packed using one of several methods, depending on whether
|
Chris@1
|
468 codeword lengths are ordered or unordered, or the tree is sparse.
|
Chris@1
|
469 <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly,
|
Chris@1
|
470 the vector index is encoded as a single list of values of possible values that are then permuted
|
Chris@1
|
471 into a list of n-dimensional rows (lattice VQ).
|
Chris@1
|
472 <!--l. 260--><p class="noindent" >
|
Chris@1
|
473 <h4 class="subsectionHead"><span class="titlemark">1.3. </span> <a
|
Chris@1
|
474 id="x1-180001.3"></a>High-level Decode Process</h4>
|
Chris@1
|
475 <!--l. 262--><p class="noindent" >
|
Chris@1
|
476 <h5 class="subsubsectionHead"><span class="titlemark">1.3.1. </span> <a
|
Chris@1
|
477 id="x1-190001.3.1"></a>Decode Setup</h5>
|
Chris@1
|
478 <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the
|
Chris@1
|
479 stream to be decoded. Vorbis uses three header packets; all are required, in-order, by
|
Chris@1
|
480 this specification. Once set up, decode may begin at any audio packet belonging to
|
Chris@1
|
481 the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio
|
Chris@1
|
482 packets.
|
Chris@1
|
483 <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup
|
Chris@1
|
484 header.
|
Chris@1
|
485 <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
486 id="x1-200001.3.1"></a><span
|
Chris@1
|
487 class="cmbx-12">Identification Header</span></span>
|
Chris@1
|
488 The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio
|
Chris@1
|
489 characteristics of the stream such as sample rate and number of channels.
|
Chris@1
|
490
|
Chris@1
|
491
|
Chris@1
|
492
|
Chris@1
|
493 <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
494 id="x1-210001.3.1"></a><span
|
Chris@1
|
495 class="cmbx-12">Comment Header</span></span>
|
Chris@1
|
496 The comment header includes user text comments (“tags”) and a vendor string for the
|
Chris@1
|
497 application/library that produced the bitstream. The encoding and proper use of the comment
|
Chris@1
|
498 header is described in <a
|
Chris@1
|
499 href="#x1-810005">Section 5</a>, “<a
|
Chris@1
|
500 href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>”.
|
Chris@1
|
501 <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
502 id="x1-220001.3.1"></a><span
|
Chris@1
|
503 class="cmbx-12">Setup Header</span></span>
|
Chris@1
|
504 The setup header includes extensive CODEC setup information as well as the complete VQ and
|
Chris@1
|
505 Huffman codebooks needed for decode.
|
Chris@1
|
506 <!--l. 289--><p class="noindent" >
|
Chris@1
|
507 <h5 class="subsubsectionHead"><span class="titlemark">1.3.2. </span> <a
|
Chris@1
|
508 id="x1-230001.3.2"></a>Decode Procedure</h5>
|
Chris@1
|
509 <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same.
|
Chris@1
|
510 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
511 1. </dt><dd
|
Chris@1
|
512 class="enumerate-enumitem">decode packet type flag
|
Chris@1
|
513 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
514 2. </dt><dd
|
Chris@1
|
515 class="enumerate-enumitem">decode mode number
|
Chris@1
|
516 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
517 3. </dt><dd
|
Chris@1
|
518 class="enumerate-enumitem">decode window shape (long windows only)
|
Chris@1
|
519 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
520 4. </dt><dd
|
Chris@1
|
521 class="enumerate-enumitem">decode floor
|
Chris@1
|
522 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
523 5. </dt><dd
|
Chris@1
|
524 class="enumerate-enumitem">decode residue into residue vectors
|
Chris@1
|
525 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
526 6. </dt><dd
|
Chris@1
|
527 class="enumerate-enumitem">inverse channel coupling of residue vectors
|
Chris@1
|
528 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
529 7. </dt><dd
|
Chris@1
|
530 class="enumerate-enumitem">generate floor curve from decoded floor data
|
Chris@1
|
531 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
532 8. </dt><dd
|
Chris@1
|
533 class="enumerate-enumitem">compute dot product of floor and residue, producing audio spectrum vector
|
Chris@1
|
534 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
535 9. </dt><dd
|
Chris@1
|
536 class="enumerate-enumitem">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis
|
Chris@1
|
537 I
|
Chris@1
|
538
|
Chris@1
|
539
|
Chris@1
|
540
|
Chris@1
|
541 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
542 10. </dt><dd
|
Chris@1
|
543 class="enumerate-enumitem">overlap/add left-hand output of transform with right-hand output of previous frame
|
Chris@1
|
544 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
545 11. </dt><dd
|
Chris@1
|
546 class="enumerate-enumitem">store right hand-data from transform of current frame for future lapping
|
Chris@1
|
547 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
548 12. </dt><dd
|
Chris@1
|
549 class="enumerate-enumitem">if not first frame, return results of overlap/add as audio result of current frame</dd></dl>
|
Chris@1
|
550 <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can
|
Chris@1
|
551 take advantage of symmetries in the MDCT to store the right-hand transform data of a partial
|
Chris@1
|
552 MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before
|
Chris@1
|
553 overlap/add with the next frame. This optimization produces entirely equivalent output and is
|
Chris@1
|
554 naturally perfectly legal. The decoder must be <span
|
Chris@1
|
555 class="cmti-12">entirely mathematically equivalent </span>to the
|
Chris@1
|
556 specification, it need not be a literal semantic implementation.
|
Chris@1
|
557 <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
558 id="x1-240001.3.2"></a><span
|
Chris@1
|
559 class="cmbx-12">Packet type decode</span></span>
|
Chris@1
|
560 Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis
|
Chris@1
|
561 headers described above. The fourth packet type marks an audio packet. All other packet types
|
Chris@1
|
562 are reserved; packets marked with a reserved type should be ignored.
|
Chris@1
|
563 <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
|
Chris@1
|
564 audio packet decode is to read and verify the packet type; <span
|
Chris@1
|
565 class="cmti-12">a non-audio packet when audio is</span>
|
Chris@1
|
566 <span
|
Chris@1
|
567 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
|
Chris@1
|
568 <span
|
Chris@1
|
569 class="cmti-12">packet and not attempt decoding it to audio</span>.
|
Chris@1
|
570 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
571 id="x1-250001.3.2"></a><span
|
Chris@1
|
572 class="cmbx-12">Mode decode</span></span>
|
Chris@1
|
573 Vorbis allows an encoder to set up multiple, numbered packet ’modes’, as described earlier, all of
|
Chris@1
|
574 which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct
|
Chris@1
|
575 offset into the mode instance index.
|
Chris@1
|
576 <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
577 id="x1-260001.3.2"></a><span
|
Chris@1
|
578 class="cmbx-12">Window shape decode (long windows only)</span></span>
|
Chris@1
|
579 Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I,
|
Chris@1
|
580 legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis
|
Chris@1
|
581 handles channels as independent vectors and these frame sizes are in samples per
|
Chris@1
|
582 channel.
|
Chris@1
|
583
|
Chris@1
|
584
|
Chris@1
|
585
|
Chris@1
|
586 <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next,
|
Chris@1
|
587 avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed
|
Chris@1
|
588 according to MDCT requirements, overlapped 50% with the output of the previous frame and
|
Chris@1
|
589 added. The window shape assures seamless reconstruction.
|
Chris@1
|
590 <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows:
|
Chris@1
|
591 <div class="center"
|
Chris@1
|
592 >
|
Chris@1
|
593 <!--l. 356--><p class="noindent" >
|
Chris@1
|
594
|
Chris@1
|
595 <!--l. 357--><p class="noindent" ><img
|
Chris@1
|
596 src="window1.png" alt="PIC"
|
Chris@1
|
597 >
|
Chris@1
|
598 <br /> <div class="caption"
|
Chris@1
|
599 ><span class="id">Figure 2: </span><span
|
Chris@1
|
600 class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 -->
|
Chris@1
|
601 </div>
|
Chris@1
|
602 <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
|
Chris@1
|
603 <div class="center"
|
Chris@1
|
604 >
|
Chris@1
|
605 <!--l. 364--><p class="noindent" >
|
Chris@1
|
606
|
Chris@1
|
607 <!--l. 365--><p class="noindent" ><img
|
Chris@1
|
608 src="window2.png" alt="PIC"
|
Chris@1
|
609 >
|
Chris@1
|
610 <br /> <div class="caption"
|
Chris@1
|
611 ><span class="id">Figure 3: </span><span
|
Chris@1
|
612 class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 -->
|
Chris@1
|
613 </div>
|
Chris@1
|
614 <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
|
Chris@1
|
615 seamless lapping as above. It is possible to correctly infer window shape to be applied to the
|
Chris@1
|
616 current window from knowing the sizes of the current, previous and next window. It is legal for a
|
Chris@1
|
617 decoder to use this method. However, in the case of a long window (short windows require no
|
Chris@1
|
618 modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although
|
Chris@1
|
619 not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to
|
Chris@1
|
620 the point of lapping entirely independently of any other packet, allowing easier abstraction of
|
Chris@1
|
621 decode layers as well as allowing a greater level of easy parallelism in encode and
|
Chris@1
|
622 decode.
|
Chris@1
|
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
|
Chris@1
|
624 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
|
Chris@1
|
625 Vorbis windows all use the slope function
|
Chris@1
|
626 <center class="math-display" >
|
Chris@1
|
627 <img
|
Chris@1
|
628 src="Vorbis_I_spec0x.png" alt="y = sin (.5 ∗ π sin2((x + .5)∕n ∗ π)).
|
Chris@1
|
629
|
Chris@1
|
630
|
Chris@1
|
631
|
Chris@1
|
632 " class="math-display" ></center>
|
Chris@1
|
633 <!--l. 385--><p class="nopar" >
|
Chris@1
|
634 <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
635 id="x1-270001.3.2"></a><span
|
Chris@1
|
636 class="cmbx-12">floor decode</span></span>
|
Chris@1
|
637 Each floor is encoded/decoded in channel order, however each floor belongs to a ’submap’ that
|
Chris@1
|
638 specifies which floor configuration to use. All floors are decoded before residue decode
|
Chris@1
|
639 begins.
|
Chris@1
|
640 <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
641 id="x1-280001.3.2"></a><span
|
Chris@1
|
642 class="cmbx-12">residue decode</span></span>
|
Chris@1
|
643 Although the number of residue vectors equals the number of channels, channel coupling may
|
Chris@1
|
644 mean that the raw residue vectors extracted during decode do not map directly to specific
|
Chris@1
|
645 channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or
|
Chris@1
|
646 angle. The coupling relationships are described in the codec setup and may differ from frame to
|
Chris@1
|
647 frame, due to different mode numbers.
|
Chris@1
|
648 <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from
|
Chris@1
|
649 submap 0 through n-1. This differs from floors which are coded using a configuration provided by
|
Chris@1
|
650 submap number, but are coded individually in channel order.
|
Chris@1
|
651 <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
652 id="x1-290001.3.2"></a><span
|
Chris@1
|
653 class="cmbx-12">inverse channel coupling</span></span>
|
Chris@1
|
654 A detailed discussion of stereo in the Vorbis codec can be found in the document
|
Chris@1
|
655 <a
|
Chris@1
|
656 href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo
|
Chris@1
|
657 coupling, but the stereo document also gives a good overview of the generic coupling
|
Chris@1
|
658 mechanism.
|
Chris@1
|
659 <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a
|
Chris@1
|
660 pair at a time in the order and using the vectors specified in the current mapping
|
Chris@1
|
661 configuration. The decoupling operation is the same for all pairs, converting square polar
|
Chris@1
|
662 representation (where one vector is magnitude and the second angle) back to Cartesian
|
Chris@1
|
663 representation.
|
Chris@1
|
664 <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors
|
Chris@1
|
665 represent the fine spectral detail of each output channel.
|
Chris@1
|
666
|
Chris@1
|
667
|
Chris@1
|
668
|
Chris@1
|
669 <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
670 id="x1-300001.3.2"></a><span
|
Chris@1
|
671 class="cmbx-12">generate floor curve</span></span>
|
Chris@1
|
672 The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to
|
Chris@1
|
673 generate the output curve when the floor data is decoded from the raw packet, or it
|
Chris@1
|
674 can be generated after inverse coupling and applied to the spectral residue directly,
|
Chris@1
|
675 combining generation and the dot product into one step and eliminating some working
|
Chris@1
|
676 space.
|
Chris@1
|
677 <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied
|
Chris@1
|
678 (dot product) by the linear-range, linear-domain spectral residue.
|
Chris@1
|
679 <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
680 id="x1-310001.3.2"></a><span
|
Chris@1
|
681 class="cmbx-12">compute floor/residue dot product</span></span>
|
Chris@1
|
682 This step is straightforward; for each output channel, the decoder multiplies the floor curve and
|
Chris@1
|
683 residue vectors element by element, producing the finished audio spectrum of each
|
Chris@1
|
684 channel.
|
Chris@1
|
685 <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
|
Chris@1
|
686 implementation might be to assume that a 32 bit fixed-point representation for floor and
|
Chris@1
|
687 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
|
Chris@1
|
688 in all cases because it happens to mostly work with the current Xiph.Org reference
|
Chris@1
|
689 encoder.
|
Chris@1
|
690 <!--l. 462--><p class="noindent" >However, floor vector values can span <span
|
Chris@1
|
691 class="cmsy-10x-x-120">∼</span>140dB (<span
|
Chris@1
|
692 class="cmsy-10x-x-120">∼</span>24 bits unsigned), and the audio spectrum
|
Chris@1
|
693 vector should represent a minimum of 120dB (<span
|
Chris@1
|
694 class="cmsy-10x-x-120">∼</span>21 bits with sign), even when output is to a 16
|
Chris@1
|
695 bit PCM device. For the residue vector to represent full scale if the floor is nailed
|
Chris@1
|
696 to <span
|
Chris@1
|
697 class="cmsy-10x-x-120">−</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
|
Chris@1
|
698 full scale if the floor is nailed at 0dB, it must be able to represent <span
|
Chris@1
|
699 class="cmsy-10x-x-120">−</span>140dB to +0dB.
|
Chris@1
|
700 Thus, in order to handle full range dynamics, a residue vector may span <span
|
Chris@1
|
701 class="cmsy-10x-x-120">−</span>140dB to
|
Chris@1
|
702 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
|
Chris@1
|
703 residue vector must be able to represent a 48 bit range and the dot product must
|
Chris@1
|
704 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
|
Chris@1
|
705 achieved using large (64 bit or larger) integers, or implementing a movable binary point
|
Chris@1
|
706 representation.
|
Chris@1
|
707 <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
708 id="x1-320001.3.2"></a><span
|
Chris@1
|
709 class="cmbx-12">inverse monolithic transform (MDCT)</span></span>
|
Chris@1
|
710 The audio spectrum is converted back into time domain PCM audio via an inverse Modified
|
Chris@1
|
711 Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in
|
Chris@1
|
712 <span class="cite">[<a
|
Chris@1
|
713 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
|
Chris@1
|
714 <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be
|
Chris@1
|
715
|
Chris@1
|
716
|
Chris@1
|
717
|
Chris@1
|
718 lapped with surrounding frames using an appropriate window (such as the Vorbis window) before
|
Chris@1
|
719 the MDCT can be considered orthogonal.
|
Chris@1
|
720 <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
721 id="x1-330001.3.2"></a><span
|
Chris@1
|
722 class="cmbx-12">overlap/add data</span></span>
|
Chris@1
|
723 Windowed MDCT output is overlapped and added with the right hand data of the previous
|
Chris@1
|
724 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
|
Chris@1
|
725 current window (as illustrated in the window overlap diagram). At this point, the audio data
|
Chris@1
|
726 between the center of the previous frame and the center of the current frame is now finished and
|
Chris@1
|
727 ready to be returned.
|
Chris@1
|
728 <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
729 id="x1-340001.3.2"></a><span
|
Chris@1
|
730 class="cmbx-12">cache right hand data</span></span>
|
Chris@1
|
731 The decoder must cache the right hand portion of the current frame to be lapped with the left
|
Chris@1
|
732 hand portion of the next frame.
|
Chris@1
|
733 <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
734 id="x1-350001.3.2"></a><span
|
Chris@1
|
735 class="cmbx-12">return finished audio data</span></span>
|
Chris@1
|
736 The overlapped portion produced from overlapping the previous and current frame data
|
Chris@1
|
737 is finished data to be returned by the decoder. This data spans from the center of
|
Chris@1
|
738 the previous window to the center of the current window. In the case of same-sized
|
Chris@1
|
739 windows, the amount of data to return is one-half block consisting of and only of the
|
Chris@1
|
740 overlapped portions. When overlapping a short and long window, much of the returned
|
Chris@1
|
741 range is not actually overlap. This does not damage transform orthogonality. Pay
|
Chris@1
|
742 attention however to returning the correct data range; the amount of data to be returned
|
Chris@1
|
743 is:
|
Chris@1
|
744 <!--l. 519--><p class="noindent" >
|
Chris@1
|
745 <div class="fancyvrb" id="fancyvrb1">
|
Chris@1
|
746 <a
|
Chris@1
|
747 id="x1-35002r1"></a><span
|
Chris@1
|
748 class="cmr-6">1</span><span
|
Chris@1
|
749 class="cmtt-8"> </span><span
|
Chris@1
|
750 class="cmtt-8"> window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
|
Chris@1
|
751 </div>
|
Chris@1
|
752 <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
|
Chris@1
|
753 <!--l. 526--><p class="noindent" >Data is not returned from the first frame; it must be used to ’prime’ the decode engine. The
|
Chris@1
|
754 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
|
Chris@1
|
755 PCM output offset is ’0’ (as no data has been returned yet).
|
Chris@1
|
756
|
Chris@1
|
757
|
Chris@1
|
758
|
Chris@1
|
759
|
Chris@1
|
760
|
Chris@1
|
761
|
Chris@1
|
762 <h3 class="sectionHead"><span class="titlemark">2. </span> <a
|
Chris@1
|
763 id="x1-360002"></a>Bitpacking Convention</h3>
|
Chris@1
|
764 <!--l. 6--><p class="noindent" >
|
Chris@1
|
765 <h4 class="subsectionHead"><span class="titlemark">2.1. </span> <a
|
Chris@1
|
766 id="x1-370002.1"></a>Overview</h4>
|
Chris@1
|
767 <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
|
Chris@1
|
768 integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
|
Chris@1
|
769 encoder and then read one-by-one in the same monotonically increasing order by the decoder.
|
Chris@1
|
770 Most current binary storage arrangements group bits into a native word size of eight bits
|
Chris@1
|
771 (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
|
Chris@1
|
772 bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
|
Chris@1
|
773 representation in fixed-width words.
|
Chris@1
|
774 <!--l. 19--><p class="noindent" >
|
Chris@1
|
775 <h5 class="subsubsectionHead"><span class="titlemark">2.1.1. </span> <a
|
Chris@1
|
776 id="x1-380002.1.1"></a>octets, bytes and words</h5>
|
Chris@1
|
777 <!--l. 21--><p class="noindent" >In most contemporary architectures, a ’byte’ is synonymous with an ’octet’, that is, eight bits.
|
Chris@1
|
778 This has not always been the case; seven, ten, eleven and sixteen bit ’bytes’ have been used.
|
Chris@1
|
779 For purposes of the bitpacking convention, a byte implies the native, smallest integer
|
Chris@1
|
780 storage representation offered by a platform. On modern platforms, this is generally
|
Chris@1
|
781 assumed to be eight bits (not necessarily because of the processor but because of the
|
Chris@1
|
782 filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
|
Chris@1
|
783 atom of storage). A ’word’ is an integer size that is a grouped multiple of this smallest
|
Chris@1
|
784 size.
|
Chris@1
|
785 <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a ’byte’ to be an octet (eight bits) and a word
|
Chris@1
|
786 to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
|
Chris@1
|
787 bitpacking convention is still well defined for any native byte size; Vorbis uses the native
|
Chris@1
|
788 bit-width of a given storage system. This document assumes that a byte is one octet for purposes
|
Chris@1
|
789 of example.
|
Chris@1
|
790 <!--l. 39--><p class="noindent" >
|
Chris@1
|
791
|
Chris@1
|
792
|
Chris@1
|
793
|
Chris@1
|
794 <h5 class="subsubsectionHead"><span class="titlemark">2.1.2. </span> <a
|
Chris@1
|
795 id="x1-390002.1.2"></a>bit order</h5>
|
Chris@1
|
796 <!--l. 41--><p class="noindent" >A byte has a well-defined ’least significant’ bit (LSb), which is the only bit set when the byte is
|
Chris@1
|
797 storing the two’s complement integer value +1. A byte’s ’most significant’ bit (MSb) is at the
|
Chris@1
|
798 opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span
|
Chris@1
|
799 class="cmmi-12">n </span>(<span
|
Chris@1
|
800 class="cmmi-12">n </span>= 7 in an
|
Chris@1
|
801 octet) for the MSb.
|
Chris@1
|
802 <!--l. 50--><p class="noindent" >
|
Chris@1
|
803 <h5 class="subsubsectionHead"><span class="titlemark">2.1.3. </span> <a
|
Chris@1
|
804 id="x1-400002.1.3"></a>byte order</h5>
|
Chris@1
|
805 <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
|
Chris@1
|
806 common ones are 3-2-1-0 (’big endian’ or ’most significant byte first’ in which the
|
Chris@1
|
807 highest-valued byte comes first), 0-1-2-3 (’little endian’ or ’least significant byte first’ in
|
Chris@1
|
808 which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (’mixed
|
Chris@1
|
809 endian’).
|
Chris@1
|
810 <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
|
Chris@1
|
811 word, level, thus host word ordering is of a concern only during optimization when writing high
|
Chris@1
|
812 performance code that operates on a word of storage at a time rather than by byte.
|
Chris@1
|
813 Logically, bytes are always coded and decoded in order from byte zero through byte
|
Chris@1
|
814 <span
|
Chris@1
|
815 class="cmmi-12">n</span>.
|
Chris@1
|
816 <!--l. 68--><p class="noindent" >
|
Chris@1
|
817 <h5 class="subsubsectionHead"><span class="titlemark">2.1.4. </span> <a
|
Chris@1
|
818 id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
|
Chris@1
|
819 <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
|
Chris@1
|
820 wide, into packets. These integer fields are not aligned to the boundaries of the byte
|
Chris@1
|
821 representation; the next field is written at the bit position at which the previous field
|
Chris@1
|
822 ends.
|
Chris@1
|
823 <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
|
Chris@1
|
824 bitstream first, followed by next least significant bit, etc, until the requested number of bits
|
Chris@1
|
825 have been coded. When packing the bits into bytes, the encoder begins by placing
|
Chris@1
|
826 the LSb of the integer to be written into the least significant unused bit position of
|
Chris@1
|
827 the destination byte, followed by the next-least significant bit of the source integer
|
Chris@1
|
828 and so on up to the requested number of bits. When all bits of the destination byte
|
Chris@1
|
829 have been filled, encoding continues by zeroing all bits of the next byte and writing
|
Chris@1
|
830 the next bit into the bit position 0 of that byte. Decoding follows the same process
|
Chris@1
|
831
|
Chris@1
|
832
|
Chris@1
|
833
|
Chris@1
|
834 as encoding, but by reading bits from the byte stream and reassembling them into
|
Chris@1
|
835 integers.
|
Chris@1
|
836 <!--l. 90--><p class="noindent" >
|
Chris@1
|
837 <h5 class="subsubsectionHead"><span class="titlemark">2.1.5. </span> <a
|
Chris@1
|
838 id="x1-420002.1.5"></a>signedness</h5>
|
Chris@1
|
839 <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
|
Chris@1
|
840 given decode context. That is, the three bit binary pattern ’b111’ can be taken to represent
|
Chris@1
|
841 either ’seven’ as an unsigned integer, or ’-1’ as a signed, two’s complement integer. The
|
Chris@1
|
842 encoder and decoder are responsible for knowing if fields are to be treated as signed or
|
Chris@1
|
843 unsigned.
|
Chris@1
|
844 <!--l. 101--><p class="noindent" >
|
Chris@1
|
845 <h5 class="subsubsectionHead"><span class="titlemark">2.1.6. </span> <a
|
Chris@1
|
846 id="x1-430002.1.6"></a>coding example</h5>
|
Chris@1
|
847 <!--l. 103--><p class="noindent" >Code the 4 bit integer value ’12’ [b1100] into an empty bytestream. Bytestream result:
|
Chris@1
|
848 <!--l. 106--><p class="noindent" >
|
Chris@1
|
849 <div class="fancyvrb" id="fancyvrb2">
|
Chris@1
|
850 <a
|
Chris@1
|
851 id="x1-43002r1"></a><span
|
Chris@1
|
852 class="cmr-6">1</span><span
|
Chris@1
|
853 class="cmtt-8"> </span><span
|
Chris@1
|
854 class="cmtt-8"> </span><span
|
Chris@1
|
855 class="cmtt-8"> </span><span
|
Chris@1
|
856 class="cmtt-8"> </span><span
|
Chris@1
|
857 class="cmtt-8"> </span><span
|
Chris@1
|
858 class="cmtt-8"> </span><span
|
Chris@1
|
859 class="cmtt-8"> </span><span
|
Chris@1
|
860 class="cmtt-8"> </span><span
|
Chris@1
|
861 class="cmtt-8"> </span><span
|
Chris@1
|
862 class="cmtt-8"> </span><span
|
Chris@1
|
863 class="cmtt-8"> </span><span
|
Chris@1
|
864 class="cmtt-8"> </span><span
|
Chris@1
|
865 class="cmtt-8"> </span><span
|
Chris@1
|
866 class="cmtt-8"> </span><span
|
Chris@1
|
867 class="cmtt-8"> </span><span
|
Chris@1
|
868 class="cmtt-8"> |</span>
|
Chris@1
|
869 <br class="fancyvrb" /><a
|
Chris@1
|
870 id="x1-43004r2"></a><span
|
Chris@1
|
871 class="cmr-6">2</span><span
|
Chris@1
|
872 class="cmtt-8"> </span><span
|
Chris@1
|
873 class="cmtt-8"> </span><span
|
Chris@1
|
874 class="cmtt-8"> </span><span
|
Chris@1
|
875 class="cmtt-8"> </span><span
|
Chris@1
|
876 class="cmtt-8"> </span><span
|
Chris@1
|
877 class="cmtt-8"> </span><span
|
Chris@1
|
878 class="cmtt-8"> </span><span
|
Chris@1
|
879 class="cmtt-8"> </span><span
|
Chris@1
|
880 class="cmtt-8"> </span><span
|
Chris@1
|
881 class="cmtt-8"> </span><span
|
Chris@1
|
882 class="cmtt-8"> </span><span
|
Chris@1
|
883 class="cmtt-8"> </span><span
|
Chris@1
|
884 class="cmtt-8"> </span><span
|
Chris@1
|
885 class="cmtt-8"> </span><span
|
Chris@1
|
886 class="cmtt-8"> </span><span
|
Chris@1
|
887 class="cmtt-8"> V</span>
|
Chris@1
|
888 <br class="fancyvrb" /><a
|
Chris@1
|
889 id="x1-43006r3"></a><span
|
Chris@1
|
890 class="cmr-6">3</span><span
|
Chris@1
|
891 class="cmtt-8"> </span><span
|
Chris@1
|
892 class="cmtt-8"> </span>
|
Chris@1
|
893 <br class="fancyvrb" /><a
|
Chris@1
|
894 id="x1-43008r4"></a><span
|
Chris@1
|
895 class="cmr-6">4</span><span
|
Chris@1
|
896 class="cmtt-8"> </span><span
|
Chris@1
|
897 class="cmtt-8"> </span><span
|
Chris@1
|
898 class="cmtt-8"> </span><span
|
Chris@1
|
899 class="cmtt-8"> </span><span
|
Chris@1
|
900 class="cmtt-8"> </span><span
|
Chris@1
|
901 class="cmtt-8"> </span><span
|
Chris@1
|
902 class="cmtt-8"> </span><span
|
Chris@1
|
903 class="cmtt-8"> </span><span
|
Chris@1
|
904 class="cmtt-8"> </span><span
|
Chris@1
|
905 class="cmtt-8"> 7</span><span
|
Chris@1
|
906 class="cmtt-8"> 6</span><span
|
Chris@1
|
907 class="cmtt-8"> 5</span><span
|
Chris@1
|
908 class="cmtt-8"> 4</span><span
|
Chris@1
|
909 class="cmtt-8"> 3</span><span
|
Chris@1
|
910 class="cmtt-8"> 2</span><span
|
Chris@1
|
911 class="cmtt-8"> 1</span><span
|
Chris@1
|
912 class="cmtt-8"> 0</span>
|
Chris@1
|
913 <br class="fancyvrb" /><a
|
Chris@1
|
914 id="x1-43010r5"></a><span
|
Chris@1
|
915 class="cmr-6">5</span><span
|
Chris@1
|
916 class="cmtt-8"> </span><span
|
Chris@1
|
917 class="cmtt-8"> byte</span><span
|
Chris@1
|
918 class="cmtt-8"> 0</span><span
|
Chris@1
|
919 class="cmtt-8"> [0</span><span
|
Chris@1
|
920 class="cmtt-8"> 0</span><span
|
Chris@1
|
921 class="cmtt-8"> 0</span><span
|
Chris@1
|
922 class="cmtt-8"> 0</span><span
|
Chris@1
|
923 class="cmtt-8"> 1</span><span
|
Chris@1
|
924 class="cmtt-8"> 1</span><span
|
Chris@1
|
925 class="cmtt-8"> 0</span><span
|
Chris@1
|
926 class="cmtt-8"> 0]</span><span
|
Chris@1
|
927 class="cmtt-8"> </span><span
|
Chris@1
|
928 class="cmtt-8"> <-</span>
|
Chris@1
|
929 <br class="fancyvrb" /><a
|
Chris@1
|
930 id="x1-43012r6"></a><span
|
Chris@1
|
931 class="cmr-6">6</span><span
|
Chris@1
|
932 class="cmtt-8"> </span><span
|
Chris@1
|
933 class="cmtt-8"> byte</span><span
|
Chris@1
|
934 class="cmtt-8"> 1</span><span
|
Chris@1
|
935 class="cmtt-8"> [</span><span
|
Chris@1
|
936 class="cmtt-8"> </span><span
|
Chris@1
|
937 class="cmtt-8"> </span><span
|
Chris@1
|
938 class="cmtt-8"> </span><span
|
Chris@1
|
939 class="cmtt-8"> </span><span
|
Chris@1
|
940 class="cmtt-8"> </span><span
|
Chris@1
|
941 class="cmtt-8"> </span><span
|
Chris@1
|
942 class="cmtt-8"> </span><span
|
Chris@1
|
943 class="cmtt-8"> </span><span
|
Chris@1
|
944 class="cmtt-8"> </span><span
|
Chris@1
|
945 class="cmtt-8"> </span><span
|
Chris@1
|
946 class="cmtt-8"> </span><span
|
Chris@1
|
947 class="cmtt-8"> </span><span
|
Chris@1
|
948 class="cmtt-8"> </span><span
|
Chris@1
|
949 class="cmtt-8"> </span><span
|
Chris@1
|
950 class="cmtt-8"> ]</span>
|
Chris@1
|
951 <br class="fancyvrb" /><a
|
Chris@1
|
952 id="x1-43014r7"></a><span
|
Chris@1
|
953 class="cmr-6">7</span><span
|
Chris@1
|
954 class="cmtt-8"> </span><span
|
Chris@1
|
955 class="cmtt-8"> byte</span><span
|
Chris@1
|
956 class="cmtt-8"> 2</span><span
|
Chris@1
|
957 class="cmtt-8"> [</span><span
|
Chris@1
|
958 class="cmtt-8"> </span><span
|
Chris@1
|
959 class="cmtt-8"> </span><span
|
Chris@1
|
960 class="cmtt-8"> </span><span
|
Chris@1
|
961 class="cmtt-8"> </span><span
|
Chris@1
|
962 class="cmtt-8"> </span><span
|
Chris@1
|
963 class="cmtt-8"> </span><span
|
Chris@1
|
964 class="cmtt-8"> </span><span
|
Chris@1
|
965 class="cmtt-8"> </span><span
|
Chris@1
|
966 class="cmtt-8"> </span><span
|
Chris@1
|
967 class="cmtt-8"> </span><span
|
Chris@1
|
968 class="cmtt-8"> </span><span
|
Chris@1
|
969 class="cmtt-8"> </span><span
|
Chris@1
|
970 class="cmtt-8"> </span><span
|
Chris@1
|
971 class="cmtt-8"> </span><span
|
Chris@1
|
972 class="cmtt-8"> ]</span>
|
Chris@1
|
973 <br class="fancyvrb" /><a
|
Chris@1
|
974 id="x1-43016r8"></a><span
|
Chris@1
|
975 class="cmr-6">8</span><span
|
Chris@1
|
976 class="cmtt-8"> </span><span
|
Chris@1
|
977 class="cmtt-8"> byte</span><span
|
Chris@1
|
978 class="cmtt-8"> 3</span><span
|
Chris@1
|
979 class="cmtt-8"> [</span><span
|
Chris@1
|
980 class="cmtt-8"> </span><span
|
Chris@1
|
981 class="cmtt-8"> </span><span
|
Chris@1
|
982 class="cmtt-8"> </span><span
|
Chris@1
|
983 class="cmtt-8"> </span><span
|
Chris@1
|
984 class="cmtt-8"> </span><span
|
Chris@1
|
985 class="cmtt-8"> </span><span
|
Chris@1
|
986 class="cmtt-8"> </span><span
|
Chris@1
|
987 class="cmtt-8"> </span><span
|
Chris@1
|
988 class="cmtt-8"> </span><span
|
Chris@1
|
989 class="cmtt-8"> </span><span
|
Chris@1
|
990 class="cmtt-8"> </span><span
|
Chris@1
|
991 class="cmtt-8"> </span><span
|
Chris@1
|
992 class="cmtt-8"> </span><span
|
Chris@1
|
993 class="cmtt-8"> </span><span
|
Chris@1
|
994 class="cmtt-8"> ]</span>
|
Chris@1
|
995 <br class="fancyvrb" /><a
|
Chris@1
|
996 id="x1-43018r9"></a><span
|
Chris@1
|
997 class="cmr-6">9</span><span
|
Chris@1
|
998 class="cmtt-8"> </span><span
|
Chris@1
|
999 class="cmtt-8"> </span><span
|
Chris@1
|
1000 class="cmtt-8"> </span><span
|
Chris@1
|
1001 class="cmtt-8"> </span><span
|
Chris@1
|
1002 class="cmtt-8"> </span><span
|
Chris@1
|
1003 class="cmtt-8"> </span><span
|
Chris@1
|
1004 class="cmtt-8"> </span><span
|
Chris@1
|
1005 class="cmtt-8"> </span><span
|
Chris@1
|
1006 class="cmtt-8"> </span><span
|
Chris@1
|
1007 class="cmtt-8"> </span><span
|
Chris@1
|
1008 class="cmtt-8"> </span><span
|
Chris@1
|
1009 class="cmtt-8"> </span><span
|
Chris@1
|
1010 class="cmtt-8"> </span><span
|
Chris@1
|
1011 class="cmtt-8"> </span><span
|
Chris@1
|
1012 class="cmtt-8"> ...</span>
|
Chris@1
|
1013 <br class="fancyvrb" /><a
|
Chris@1
|
1014 id="x1-43020r10"></a><span
|
Chris@1
|
1015 class="cmr-6">10</span><span
|
Chris@1
|
1016 class="cmtt-8"> </span><span
|
Chris@1
|
1017 class="cmtt-8"> byte</span><span
|
Chris@1
|
1018 class="cmtt-8"> n</span><span
|
Chris@1
|
1019 class="cmtt-8"> [</span><span
|
Chris@1
|
1020 class="cmtt-8"> </span><span
|
Chris@1
|
1021 class="cmtt-8"> </span><span
|
Chris@1
|
1022 class="cmtt-8"> </span><span
|
Chris@1
|
1023 class="cmtt-8"> </span><span
|
Chris@1
|
1024 class="cmtt-8"> </span><span
|
Chris@1
|
1025 class="cmtt-8"> </span><span
|
Chris@1
|
1026 class="cmtt-8"> </span><span
|
Chris@1
|
1027 class="cmtt-8"> </span><span
|
Chris@1
|
1028 class="cmtt-8"> </span><span
|
Chris@1
|
1029 class="cmtt-8"> </span><span
|
Chris@1
|
1030 class="cmtt-8"> </span><span
|
Chris@1
|
1031 class="cmtt-8"> </span><span
|
Chris@1
|
1032 class="cmtt-8"> </span><span
|
Chris@1
|
1033 class="cmtt-8"> </span><span
|
Chris@1
|
1034 class="cmtt-8"> ]</span><span
|
Chris@1
|
1035 class="cmtt-8"> </span><span
|
Chris@1
|
1036 class="cmtt-8"> bytestream</span><span
|
Chris@1
|
1037 class="cmtt-8"> length</span><span
|
Chris@1
|
1038 class="cmtt-8"> ==</span><span
|
Chris@1
|
1039 class="cmtt-8"> 1</span><span
|
Chris@1
|
1040 class="cmtt-8"> byte</span>
|
Chris@1
|
1041 <br class="fancyvrb" /><a
|
Chris@1
|
1042 id="x1-43022r11"></a><span
|
Chris@1
|
1043 class="cmr-6">11</span><span
|
Chris@1
|
1044 class="cmtt-8"> </span><span
|
Chris@1
|
1045 class="cmtt-8"> </span>
|
Chris@1
|
1046 </div>
|
Chris@1
|
1047 <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value ’-1’ [b111]:
|
Chris@1
|
1048 <!--l. 123--><p class="noindent" >
|
Chris@1
|
1049 <div class="fancyvrb" id="fancyvrb3">
|
Chris@1
|
1050 <a
|
Chris@1
|
1051 id="x1-43024r1"></a><span
|
Chris@1
|
1052 class="cmr-6">1</span><span
|
Chris@1
|
1053 class="cmtt-8"> </span><span
|
Chris@1
|
1054 class="cmtt-8"> </span><span
|
Chris@1
|
1055 class="cmtt-8"> </span><span
|
Chris@1
|
1056 class="cmtt-8"> </span><span
|
Chris@1
|
1057 class="cmtt-8"> </span><span
|
Chris@1
|
1058 class="cmtt-8"> </span><span
|
Chris@1
|
1059 class="cmtt-8"> </span><span
|
Chris@1
|
1060 class="cmtt-8"> </span><span
|
Chris@1
|
1061 class="cmtt-8"> </span><span
|
Chris@1
|
1062 class="cmtt-8"> |</span>
|
Chris@1
|
1063 <br class="fancyvrb" /><a
|
Chris@1
|
1064 id="x1-43026r2"></a><span
|
Chris@1
|
1065 class="cmr-6">2</span><span
|
Chris@1
|
1066 class="cmtt-8"> </span><span
|
Chris@1
|
1067 class="cmtt-8"> </span><span
|
Chris@1
|
1068 class="cmtt-8"> </span><span
|
Chris@1
|
1069 class="cmtt-8"> </span><span
|
Chris@1
|
1070 class="cmtt-8"> </span><span
|
Chris@1
|
1071 class="cmtt-8"> </span><span
|
Chris@1
|
1072 class="cmtt-8"> </span><span
|
Chris@1
|
1073 class="cmtt-8"> </span><span
|
Chris@1
|
1074 class="cmtt-8"> </span><span
|
Chris@1
|
1075 class="cmtt-8"> V</span>
|
Chris@1
|
1076 <br class="fancyvrb" /><a
|
Chris@1
|
1077 id="x1-43028r3"></a><span
|
Chris@1
|
1078 class="cmr-6">3</span><span
|
Chris@1
|
1079 class="cmtt-8"> </span><span
|
Chris@1
|
1080 class="cmtt-8"> </span>
|
Chris@1
|
1081 <br class="fancyvrb" /><a
|
Chris@1
|
1082 id="x1-43030r4"></a><span
|
Chris@1
|
1083 class="cmr-6">4</span><span
|
Chris@1
|
1084 class="cmtt-8"> </span><span
|
Chris@1
|
1085 class="cmtt-8"> </span><span
|
Chris@1
|
1086 class="cmtt-8"> </span><span
|
Chris@1
|
1087 class="cmtt-8"> </span><span
|
Chris@1
|
1088 class="cmtt-8"> </span><span
|
Chris@1
|
1089 class="cmtt-8"> </span><span
|
Chris@1
|
1090 class="cmtt-8"> </span><span
|
Chris@1
|
1091 class="cmtt-8"> </span><span
|
Chris@1
|
1092 class="cmtt-8"> </span><span
|
Chris@1
|
1093 class="cmtt-8"> 7</span><span
|
Chris@1
|
1094 class="cmtt-8"> 6</span><span
|
Chris@1
|
1095 class="cmtt-8"> 5</span><span
|
Chris@1
|
1096 class="cmtt-8"> 4</span><span
|
Chris@1
|
1097 class="cmtt-8"> 3</span><span
|
Chris@1
|
1098 class="cmtt-8"> 2</span><span
|
Chris@1
|
1099 class="cmtt-8"> 1</span><span
|
Chris@1
|
1100 class="cmtt-8"> 0</span>
|
Chris@1
|
1101 <br class="fancyvrb" /><a
|
Chris@1
|
1102 id="x1-43032r5"></a><span
|
Chris@1
|
1103 class="cmr-6">5</span><span
|
Chris@1
|
1104 class="cmtt-8"> </span><span
|
Chris@1
|
1105 class="cmtt-8"> byte</span><span
|
Chris@1
|
1106 class="cmtt-8"> 0</span><span
|
Chris@1
|
1107 class="cmtt-8"> [0</span><span
|
Chris@1
|
1108 class="cmtt-8"> 1</span><span
|
Chris@1
|
1109 class="cmtt-8"> 1</span><span
|
Chris@1
|
1110 class="cmtt-8"> 1</span><span
|
Chris@1
|
1111 class="cmtt-8"> 1</span><span
|
Chris@1
|
1112 class="cmtt-8"> 1</span><span
|
Chris@1
|
1113 class="cmtt-8"> 0</span><span
|
Chris@1
|
1114 class="cmtt-8"> 0]</span><span
|
Chris@1
|
1115 class="cmtt-8"> </span><span
|
Chris@1
|
1116 class="cmtt-8"> <-</span>
|
Chris@1
|
1117 <br class="fancyvrb" /><a
|
Chris@1
|
1118 id="x1-43034r6"></a><span
|
Chris@1
|
1119 class="cmr-6">6</span><span
|
Chris@1
|
1120 class="cmtt-8"> </span><span
|
Chris@1
|
1121 class="cmtt-8"> byte</span><span
|
Chris@1
|
1122 class="cmtt-8"> 1</span><span
|
Chris@1
|
1123 class="cmtt-8"> [</span><span
|
Chris@1
|
1124 class="cmtt-8"> </span><span
|
Chris@1
|
1125 class="cmtt-8"> </span><span
|
Chris@1
|
1126 class="cmtt-8"> </span><span
|
Chris@1
|
1127 class="cmtt-8"> </span><span
|
Chris@1
|
1128 class="cmtt-8"> </span><span
|
Chris@1
|
1129 class="cmtt-8"> </span><span
|
Chris@1
|
1130 class="cmtt-8"> </span><span
|
Chris@1
|
1131 class="cmtt-8"> </span><span
|
Chris@1
|
1132 class="cmtt-8"> </span><span
|
Chris@1
|
1133 class="cmtt-8"> </span><span
|
Chris@1
|
1134 class="cmtt-8"> </span><span
|
Chris@1
|
1135 class="cmtt-8"> </span><span
|
Chris@1
|
1136 class="cmtt-8"> </span><span
|
Chris@1
|
1137 class="cmtt-8"> </span><span
|
Chris@1
|
1138 class="cmtt-8"> ]</span>
|
Chris@1
|
1139
|
Chris@1
|
1140
|
Chris@1
|
1141
|
Chris@1
|
1142 <br class="fancyvrb" /><a
|
Chris@1
|
1143 id="x1-43036r7"></a><span
|
Chris@1
|
1144 class="cmr-6">7</span><span
|
Chris@1
|
1145 class="cmtt-8"> </span><span
|
Chris@1
|
1146 class="cmtt-8"> byte</span><span
|
Chris@1
|
1147 class="cmtt-8"> 2</span><span
|
Chris@1
|
1148 class="cmtt-8"> [</span><span
|
Chris@1
|
1149 class="cmtt-8"> </span><span
|
Chris@1
|
1150 class="cmtt-8"> </span><span
|
Chris@1
|
1151 class="cmtt-8"> </span><span
|
Chris@1
|
1152 class="cmtt-8"> </span><span
|
Chris@1
|
1153 class="cmtt-8"> </span><span
|
Chris@1
|
1154 class="cmtt-8"> </span><span
|
Chris@1
|
1155 class="cmtt-8"> </span><span
|
Chris@1
|
1156 class="cmtt-8"> </span><span
|
Chris@1
|
1157 class="cmtt-8"> </span><span
|
Chris@1
|
1158 class="cmtt-8"> </span><span
|
Chris@1
|
1159 class="cmtt-8"> </span><span
|
Chris@1
|
1160 class="cmtt-8"> </span><span
|
Chris@1
|
1161 class="cmtt-8"> </span><span
|
Chris@1
|
1162 class="cmtt-8"> </span><span
|
Chris@1
|
1163 class="cmtt-8"> ]</span>
|
Chris@1
|
1164 <br class="fancyvrb" /><a
|
Chris@1
|
1165 id="x1-43038r8"></a><span
|
Chris@1
|
1166 class="cmr-6">8</span><span
|
Chris@1
|
1167 class="cmtt-8"> </span><span
|
Chris@1
|
1168 class="cmtt-8"> byte</span><span
|
Chris@1
|
1169 class="cmtt-8"> 3</span><span
|
Chris@1
|
1170 class="cmtt-8"> [</span><span
|
Chris@1
|
1171 class="cmtt-8"> </span><span
|
Chris@1
|
1172 class="cmtt-8"> </span><span
|
Chris@1
|
1173 class="cmtt-8"> </span><span
|
Chris@1
|
1174 class="cmtt-8"> </span><span
|
Chris@1
|
1175 class="cmtt-8"> </span><span
|
Chris@1
|
1176 class="cmtt-8"> </span><span
|
Chris@1
|
1177 class="cmtt-8"> </span><span
|
Chris@1
|
1178 class="cmtt-8"> </span><span
|
Chris@1
|
1179 class="cmtt-8"> </span><span
|
Chris@1
|
1180 class="cmtt-8"> </span><span
|
Chris@1
|
1181 class="cmtt-8"> </span><span
|
Chris@1
|
1182 class="cmtt-8"> </span><span
|
Chris@1
|
1183 class="cmtt-8"> </span><span
|
Chris@1
|
1184 class="cmtt-8"> </span><span
|
Chris@1
|
1185 class="cmtt-8"> ]</span>
|
Chris@1
|
1186 <br class="fancyvrb" /><a
|
Chris@1
|
1187 id="x1-43040r9"></a><span
|
Chris@1
|
1188 class="cmr-6">9</span><span
|
Chris@1
|
1189 class="cmtt-8"> </span><span
|
Chris@1
|
1190 class="cmtt-8"> </span><span
|
Chris@1
|
1191 class="cmtt-8"> </span><span
|
Chris@1
|
1192 class="cmtt-8"> </span><span
|
Chris@1
|
1193 class="cmtt-8"> </span><span
|
Chris@1
|
1194 class="cmtt-8"> </span><span
|
Chris@1
|
1195 class="cmtt-8"> </span><span
|
Chris@1
|
1196 class="cmtt-8"> </span><span
|
Chris@1
|
1197 class="cmtt-8"> </span><span
|
Chris@1
|
1198 class="cmtt-8"> </span><span
|
Chris@1
|
1199 class="cmtt-8"> </span><span
|
Chris@1
|
1200 class="cmtt-8"> </span><span
|
Chris@1
|
1201 class="cmtt-8"> </span><span
|
Chris@1
|
1202 class="cmtt-8"> </span><span
|
Chris@1
|
1203 class="cmtt-8"> ...</span>
|
Chris@1
|
1204 <br class="fancyvrb" /><a
|
Chris@1
|
1205 id="x1-43042r10"></a><span
|
Chris@1
|
1206 class="cmr-6">10</span><span
|
Chris@1
|
1207 class="cmtt-8"> </span><span
|
Chris@1
|
1208 class="cmtt-8"> byte</span><span
|
Chris@1
|
1209 class="cmtt-8"> n</span><span
|
Chris@1
|
1210 class="cmtt-8"> [</span><span
|
Chris@1
|
1211 class="cmtt-8"> </span><span
|
Chris@1
|
1212 class="cmtt-8"> </span><span
|
Chris@1
|
1213 class="cmtt-8"> </span><span
|
Chris@1
|
1214 class="cmtt-8"> </span><span
|
Chris@1
|
1215 class="cmtt-8"> </span><span
|
Chris@1
|
1216 class="cmtt-8"> </span><span
|
Chris@1
|
1217 class="cmtt-8"> </span><span
|
Chris@1
|
1218 class="cmtt-8"> </span><span
|
Chris@1
|
1219 class="cmtt-8"> </span><span
|
Chris@1
|
1220 class="cmtt-8"> </span><span
|
Chris@1
|
1221 class="cmtt-8"> </span><span
|
Chris@1
|
1222 class="cmtt-8"> </span><span
|
Chris@1
|
1223 class="cmtt-8"> </span><span
|
Chris@1
|
1224 class="cmtt-8"> </span><span
|
Chris@1
|
1225 class="cmtt-8"> ]</span><span
|
Chris@1
|
1226 class="cmtt-8"> </span><span
|
Chris@1
|
1227 class="cmtt-8"> bytestream</span><span
|
Chris@1
|
1228 class="cmtt-8"> length</span><span
|
Chris@1
|
1229 class="cmtt-8"> ==</span><span
|
Chris@1
|
1230 class="cmtt-8"> 1</span><span
|
Chris@1
|
1231 class="cmtt-8"> byte</span>
|
Chris@1
|
1232 </div>
|
Chris@1
|
1233 <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value ’17’ [b0010001]:
|
Chris@1
|
1234 <!--l. 139--><p class="noindent" >
|
Chris@1
|
1235 <div class="fancyvrb" id="fancyvrb4">
|
Chris@1
|
1236 <a
|
Chris@1
|
1237 id="x1-43044r1"></a><span
|
Chris@1
|
1238 class="cmr-6">1</span><span
|
Chris@1
|
1239 class="cmtt-8"> </span><span
|
Chris@1
|
1240 class="cmtt-8"> </span><span
|
Chris@1
|
1241 class="cmtt-8"> </span><span
|
Chris@1
|
1242 class="cmtt-8"> </span><span
|
Chris@1
|
1243 class="cmtt-8"> </span><span
|
Chris@1
|
1244 class="cmtt-8"> </span><span
|
Chris@1
|
1245 class="cmtt-8"> </span><span
|
Chris@1
|
1246 class="cmtt-8"> </span><span
|
Chris@1
|
1247 class="cmtt-8"> </span><span
|
Chris@1
|
1248 class="cmtt-8"> </span><span
|
Chris@1
|
1249 class="cmtt-8"> </span><span
|
Chris@1
|
1250 class="cmtt-8"> |</span>
|
Chris@1
|
1251 <br class="fancyvrb" /><a
|
Chris@1
|
1252 id="x1-43046r2"></a><span
|
Chris@1
|
1253 class="cmr-6">2</span><span
|
Chris@1
|
1254 class="cmtt-8"> </span><span
|
Chris@1
|
1255 class="cmtt-8"> </span><span
|
Chris@1
|
1256 class="cmtt-8"> </span><span
|
Chris@1
|
1257 class="cmtt-8"> </span><span
|
Chris@1
|
1258 class="cmtt-8"> </span><span
|
Chris@1
|
1259 class="cmtt-8"> </span><span
|
Chris@1
|
1260 class="cmtt-8"> </span><span
|
Chris@1
|
1261 class="cmtt-8"> </span><span
|
Chris@1
|
1262 class="cmtt-8"> </span><span
|
Chris@1
|
1263 class="cmtt-8"> </span><span
|
Chris@1
|
1264 class="cmtt-8"> </span><span
|
Chris@1
|
1265 class="cmtt-8"> V</span>
|
Chris@1
|
1266 <br class="fancyvrb" /><a
|
Chris@1
|
1267 id="x1-43048r3"></a><span
|
Chris@1
|
1268 class="cmr-6">3</span><span
|
Chris@1
|
1269 class="cmtt-8"> </span><span
|
Chris@1
|
1270 class="cmtt-8"> </span>
|
Chris@1
|
1271 <br class="fancyvrb" /><a
|
Chris@1
|
1272 id="x1-43050r4"></a><span
|
Chris@1
|
1273 class="cmr-6">4</span><span
|
Chris@1
|
1274 class="cmtt-8"> </span><span
|
Chris@1
|
1275 class="cmtt-8"> </span><span
|
Chris@1
|
1276 class="cmtt-8"> </span><span
|
Chris@1
|
1277 class="cmtt-8"> </span><span
|
Chris@1
|
1278 class="cmtt-8"> </span><span
|
Chris@1
|
1279 class="cmtt-8"> </span><span
|
Chris@1
|
1280 class="cmtt-8"> </span><span
|
Chris@1
|
1281 class="cmtt-8"> </span><span
|
Chris@1
|
1282 class="cmtt-8"> </span><span
|
Chris@1
|
1283 class="cmtt-8"> 7</span><span
|
Chris@1
|
1284 class="cmtt-8"> 6</span><span
|
Chris@1
|
1285 class="cmtt-8"> 5</span><span
|
Chris@1
|
1286 class="cmtt-8"> 4</span><span
|
Chris@1
|
1287 class="cmtt-8"> 3</span><span
|
Chris@1
|
1288 class="cmtt-8"> 2</span><span
|
Chris@1
|
1289 class="cmtt-8"> 1</span><span
|
Chris@1
|
1290 class="cmtt-8"> 0</span>
|
Chris@1
|
1291 <br class="fancyvrb" /><a
|
Chris@1
|
1292 id="x1-43052r5"></a><span
|
Chris@1
|
1293 class="cmr-6">5</span><span
|
Chris@1
|
1294 class="cmtt-8"> </span><span
|
Chris@1
|
1295 class="cmtt-8"> byte</span><span
|
Chris@1
|
1296 class="cmtt-8"> 0</span><span
|
Chris@1
|
1297 class="cmtt-8"> [1</span><span
|
Chris@1
|
1298 class="cmtt-8"> 1</span><span
|
Chris@1
|
1299 class="cmtt-8"> 1</span><span
|
Chris@1
|
1300 class="cmtt-8"> 1</span><span
|
Chris@1
|
1301 class="cmtt-8"> 1</span><span
|
Chris@1
|
1302 class="cmtt-8"> 1</span><span
|
Chris@1
|
1303 class="cmtt-8"> 0</span><span
|
Chris@1
|
1304 class="cmtt-8"> 0]</span>
|
Chris@1
|
1305 <br class="fancyvrb" /><a
|
Chris@1
|
1306 id="x1-43054r6"></a><span
|
Chris@1
|
1307 class="cmr-6">6</span><span
|
Chris@1
|
1308 class="cmtt-8"> </span><span
|
Chris@1
|
1309 class="cmtt-8"> byte</span><span
|
Chris@1
|
1310 class="cmtt-8"> 1</span><span
|
Chris@1
|
1311 class="cmtt-8"> [0</span><span
|
Chris@1
|
1312 class="cmtt-8"> 0</span><span
|
Chris@1
|
1313 class="cmtt-8"> 0</span><span
|
Chris@1
|
1314 class="cmtt-8"> 0</span><span
|
Chris@1
|
1315 class="cmtt-8"> 1</span><span
|
Chris@1
|
1316 class="cmtt-8"> 0</span><span
|
Chris@1
|
1317 class="cmtt-8"> 0</span><span
|
Chris@1
|
1318 class="cmtt-8"> 0]</span><span
|
Chris@1
|
1319 class="cmtt-8"> </span><span
|
Chris@1
|
1320 class="cmtt-8"> <-</span>
|
Chris@1
|
1321 <br class="fancyvrb" /><a
|
Chris@1
|
1322 id="x1-43056r7"></a><span
|
Chris@1
|
1323 class="cmr-6">7</span><span
|
Chris@1
|
1324 class="cmtt-8"> </span><span
|
Chris@1
|
1325 class="cmtt-8"> byte</span><span
|
Chris@1
|
1326 class="cmtt-8"> 2</span><span
|
Chris@1
|
1327 class="cmtt-8"> [</span><span
|
Chris@1
|
1328 class="cmtt-8"> </span><span
|
Chris@1
|
1329 class="cmtt-8"> </span><span
|
Chris@1
|
1330 class="cmtt-8"> </span><span
|
Chris@1
|
1331 class="cmtt-8"> </span><span
|
Chris@1
|
1332 class="cmtt-8"> </span><span
|
Chris@1
|
1333 class="cmtt-8"> </span><span
|
Chris@1
|
1334 class="cmtt-8"> </span><span
|
Chris@1
|
1335 class="cmtt-8"> </span><span
|
Chris@1
|
1336 class="cmtt-8"> </span><span
|
Chris@1
|
1337 class="cmtt-8"> </span><span
|
Chris@1
|
1338 class="cmtt-8"> </span><span
|
Chris@1
|
1339 class="cmtt-8"> </span><span
|
Chris@1
|
1340 class="cmtt-8"> </span><span
|
Chris@1
|
1341 class="cmtt-8"> </span><span
|
Chris@1
|
1342 class="cmtt-8"> ]</span>
|
Chris@1
|
1343 <br class="fancyvrb" /><a
|
Chris@1
|
1344 id="x1-43058r8"></a><span
|
Chris@1
|
1345 class="cmr-6">8</span><span
|
Chris@1
|
1346 class="cmtt-8"> </span><span
|
Chris@1
|
1347 class="cmtt-8"> byte</span><span
|
Chris@1
|
1348 class="cmtt-8"> 3</span><span
|
Chris@1
|
1349 class="cmtt-8"> [</span><span
|
Chris@1
|
1350 class="cmtt-8"> </span><span
|
Chris@1
|
1351 class="cmtt-8"> </span><span
|
Chris@1
|
1352 class="cmtt-8"> </span><span
|
Chris@1
|
1353 class="cmtt-8"> </span><span
|
Chris@1
|
1354 class="cmtt-8"> </span><span
|
Chris@1
|
1355 class="cmtt-8"> </span><span
|
Chris@1
|
1356 class="cmtt-8"> </span><span
|
Chris@1
|
1357 class="cmtt-8"> </span><span
|
Chris@1
|
1358 class="cmtt-8"> </span><span
|
Chris@1
|
1359 class="cmtt-8"> </span><span
|
Chris@1
|
1360 class="cmtt-8"> </span><span
|
Chris@1
|
1361 class="cmtt-8"> </span><span
|
Chris@1
|
1362 class="cmtt-8"> </span><span
|
Chris@1
|
1363 class="cmtt-8"> </span><span
|
Chris@1
|
1364 class="cmtt-8"> ]</span>
|
Chris@1
|
1365 <br class="fancyvrb" /><a
|
Chris@1
|
1366 id="x1-43060r9"></a><span
|
Chris@1
|
1367 class="cmr-6">9</span><span
|
Chris@1
|
1368 class="cmtt-8"> </span><span
|
Chris@1
|
1369 class="cmtt-8"> </span><span
|
Chris@1
|
1370 class="cmtt-8"> </span><span
|
Chris@1
|
1371 class="cmtt-8"> </span><span
|
Chris@1
|
1372 class="cmtt-8"> </span><span
|
Chris@1
|
1373 class="cmtt-8"> </span><span
|
Chris@1
|
1374 class="cmtt-8"> </span><span
|
Chris@1
|
1375 class="cmtt-8"> </span><span
|
Chris@1
|
1376 class="cmtt-8"> </span><span
|
Chris@1
|
1377 class="cmtt-8"> </span><span
|
Chris@1
|
1378 class="cmtt-8"> </span><span
|
Chris@1
|
1379 class="cmtt-8"> </span><span
|
Chris@1
|
1380 class="cmtt-8"> </span><span
|
Chris@1
|
1381 class="cmtt-8"> </span><span
|
Chris@1
|
1382 class="cmtt-8"> ...</span>
|
Chris@1
|
1383 <br class="fancyvrb" /><a
|
Chris@1
|
1384 id="x1-43062r10"></a><span
|
Chris@1
|
1385 class="cmr-6">10</span><span
|
Chris@1
|
1386 class="cmtt-8"> </span><span
|
Chris@1
|
1387 class="cmtt-8"> byte</span><span
|
Chris@1
|
1388 class="cmtt-8"> n</span><span
|
Chris@1
|
1389 class="cmtt-8"> [</span><span
|
Chris@1
|
1390 class="cmtt-8"> </span><span
|
Chris@1
|
1391 class="cmtt-8"> </span><span
|
Chris@1
|
1392 class="cmtt-8"> </span><span
|
Chris@1
|
1393 class="cmtt-8"> </span><span
|
Chris@1
|
1394 class="cmtt-8"> </span><span
|
Chris@1
|
1395 class="cmtt-8"> </span><span
|
Chris@1
|
1396 class="cmtt-8"> </span><span
|
Chris@1
|
1397 class="cmtt-8"> </span><span
|
Chris@1
|
1398 class="cmtt-8"> </span><span
|
Chris@1
|
1399 class="cmtt-8"> </span><span
|
Chris@1
|
1400 class="cmtt-8"> </span><span
|
Chris@1
|
1401 class="cmtt-8"> </span><span
|
Chris@1
|
1402 class="cmtt-8"> </span><span
|
Chris@1
|
1403 class="cmtt-8"> </span><span
|
Chris@1
|
1404 class="cmtt-8"> ]</span><span
|
Chris@1
|
1405 class="cmtt-8"> </span><span
|
Chris@1
|
1406 class="cmtt-8"> bytestream</span><span
|
Chris@1
|
1407 class="cmtt-8"> length</span><span
|
Chris@1
|
1408 class="cmtt-8"> ==</span><span
|
Chris@1
|
1409 class="cmtt-8"> 2</span><span
|
Chris@1
|
1410 class="cmtt-8"> bytes</span>
|
Chris@1
|
1411 <br class="fancyvrb" /><a
|
Chris@1
|
1412 id="x1-43064r11"></a><span
|
Chris@1
|
1413 class="cmr-6">11</span><span
|
Chris@1
|
1414 class="cmtt-8"> </span><span
|
Chris@1
|
1415 class="cmtt-8"> </span><span
|
Chris@1
|
1416 class="cmtt-8"> </span><span
|
Chris@1
|
1417 class="cmtt-8"> </span><span
|
Chris@1
|
1418 class="cmtt-8"> </span><span
|
Chris@1
|
1419 class="cmtt-8"> </span><span
|
Chris@1
|
1420 class="cmtt-8"> </span><span
|
Chris@1
|
1421 class="cmtt-8"> </span><span
|
Chris@1
|
1422 class="cmtt-8"> </span><span
|
Chris@1
|
1423 class="cmtt-8"> </span><span
|
Chris@1
|
1424 class="cmtt-8"> </span><span
|
Chris@1
|
1425 class="cmtt-8"> </span><span
|
Chris@1
|
1426 class="cmtt-8"> </span><span
|
Chris@1
|
1427 class="cmtt-8"> </span><span
|
Chris@1
|
1428 class="cmtt-8"> </span><span
|
Chris@1
|
1429 class="cmtt-8"> </span><span
|
Chris@1
|
1430 class="cmtt-8"> </span><span
|
Chris@1
|
1431 class="cmtt-8"> </span><span
|
Chris@1
|
1432 class="cmtt-8"> </span><span
|
Chris@1
|
1433 class="cmtt-8"> </span><span
|
Chris@1
|
1434 class="cmtt-8"> </span><span
|
Chris@1
|
1435 class="cmtt-8"> </span><span
|
Chris@1
|
1436 class="cmtt-8"> </span><span
|
Chris@1
|
1437 class="cmtt-8"> </span><span
|
Chris@1
|
1438 class="cmtt-8"> </span><span
|
Chris@1
|
1439 class="cmtt-8"> </span><span
|
Chris@1
|
1440 class="cmtt-8"> </span><span
|
Chris@1
|
1441 class="cmtt-8"> bit</span><span
|
Chris@1
|
1442 class="cmtt-8"> cursor</span><span
|
Chris@1
|
1443 class="cmtt-8"> ==</span><span
|
Chris@1
|
1444 class="cmtt-8"> 6</span>
|
Chris@1
|
1445 </div>
|
Chris@1
|
1446 <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value ’6969’ [b110 11001110 01]:
|
Chris@1
|
1447 <!--l. 156--><p class="noindent" >
|
Chris@1
|
1448 <div class="fancyvrb" id="fancyvrb5">
|
Chris@1
|
1449 <a
|
Chris@1
|
1450 id="x1-43066r1"></a><span
|
Chris@1
|
1451 class="cmr-6">1</span><span
|
Chris@1
|
1452 class="cmtt-8"> </span><span
|
Chris@1
|
1453 class="cmtt-8"> </span><span
|
Chris@1
|
1454 class="cmtt-8"> </span><span
|
Chris@1
|
1455 class="cmtt-8"> </span><span
|
Chris@1
|
1456 class="cmtt-8"> </span><span
|
Chris@1
|
1457 class="cmtt-8"> </span><span
|
Chris@1
|
1458 class="cmtt-8"> </span><span
|
Chris@1
|
1459 class="cmtt-8"> </span><span
|
Chris@1
|
1460 class="cmtt-8"> </span><span
|
Chris@1
|
1461 class="cmtt-8"> </span><span
|
Chris@1
|
1462 class="cmtt-8"> </span><span
|
Chris@1
|
1463 class="cmtt-8"> </span><span
|
Chris@1
|
1464 class="cmtt-8"> </span><span
|
Chris@1
|
1465 class="cmtt-8"> </span><span
|
Chris@1
|
1466 class="cmtt-8"> </span><span
|
Chris@1
|
1467 class="cmtt-8"> </span><span
|
Chris@1
|
1468 class="cmtt-8"> </span><span
|
Chris@1
|
1469 class="cmtt-8"> |</span>
|
Chris@1
|
1470 <br class="fancyvrb" /><a
|
Chris@1
|
1471 id="x1-43068r2"></a><span
|
Chris@1
|
1472 class="cmr-6">2</span><span
|
Chris@1
|
1473 class="cmtt-8"> </span><span
|
Chris@1
|
1474 class="cmtt-8"> </span><span
|
Chris@1
|
1475 class="cmtt-8"> </span><span
|
Chris@1
|
1476 class="cmtt-8"> </span><span
|
Chris@1
|
1477 class="cmtt-8"> </span><span
|
Chris@1
|
1478 class="cmtt-8"> </span><span
|
Chris@1
|
1479 class="cmtt-8"> </span><span
|
Chris@1
|
1480 class="cmtt-8"> </span><span
|
Chris@1
|
1481 class="cmtt-8"> </span><span
|
Chris@1
|
1482 class="cmtt-8"> </span><span
|
Chris@1
|
1483 class="cmtt-8"> </span><span
|
Chris@1
|
1484 class="cmtt-8"> </span><span
|
Chris@1
|
1485 class="cmtt-8"> </span><span
|
Chris@1
|
1486 class="cmtt-8"> </span><span
|
Chris@1
|
1487 class="cmtt-8"> </span><span
|
Chris@1
|
1488 class="cmtt-8"> </span><span
|
Chris@1
|
1489 class="cmtt-8"> </span><span
|
Chris@1
|
1490 class="cmtt-8"> V</span>
|
Chris@1
|
1491 <br class="fancyvrb" /><a
|
Chris@1
|
1492 id="x1-43070r3"></a><span
|
Chris@1
|
1493 class="cmr-6">3</span><span
|
Chris@1
|
1494 class="cmtt-8"> </span><span
|
Chris@1
|
1495 class="cmtt-8"> </span>
|
Chris@1
|
1496 <br class="fancyvrb" /><a
|
Chris@1
|
1497 id="x1-43072r4"></a><span
|
Chris@1
|
1498 class="cmr-6">4</span><span
|
Chris@1
|
1499 class="cmtt-8"> </span><span
|
Chris@1
|
1500 class="cmtt-8"> </span><span
|
Chris@1
|
1501 class="cmtt-8"> </span><span
|
Chris@1
|
1502 class="cmtt-8"> </span><span
|
Chris@1
|
1503 class="cmtt-8"> </span><span
|
Chris@1
|
1504 class="cmtt-8"> </span><span
|
Chris@1
|
1505 class="cmtt-8"> </span><span
|
Chris@1
|
1506 class="cmtt-8"> </span><span
|
Chris@1
|
1507 class="cmtt-8"> </span><span
|
Chris@1
|
1508 class="cmtt-8"> 7</span><span
|
Chris@1
|
1509 class="cmtt-8"> 6</span><span
|
Chris@1
|
1510 class="cmtt-8"> 5</span><span
|
Chris@1
|
1511 class="cmtt-8"> 4</span><span
|
Chris@1
|
1512 class="cmtt-8"> 3</span><span
|
Chris@1
|
1513 class="cmtt-8"> 2</span><span
|
Chris@1
|
1514 class="cmtt-8"> 1</span><span
|
Chris@1
|
1515 class="cmtt-8"> 0</span>
|
Chris@1
|
1516 <br class="fancyvrb" /><a
|
Chris@1
|
1517 id="x1-43074r5"></a><span
|
Chris@1
|
1518 class="cmr-6">5</span><span
|
Chris@1
|
1519 class="cmtt-8"> </span><span
|
Chris@1
|
1520 class="cmtt-8"> byte</span><span
|
Chris@1
|
1521 class="cmtt-8"> 0</span><span
|
Chris@1
|
1522 class="cmtt-8"> [1</span><span
|
Chris@1
|
1523 class="cmtt-8"> 1</span><span
|
Chris@1
|
1524 class="cmtt-8"> 1</span><span
|
Chris@1
|
1525 class="cmtt-8"> 1</span><span
|
Chris@1
|
1526 class="cmtt-8"> 1</span><span
|
Chris@1
|
1527 class="cmtt-8"> 1</span><span
|
Chris@1
|
1528 class="cmtt-8"> 0</span><span
|
Chris@1
|
1529 class="cmtt-8"> 0]</span>
|
Chris@1
|
1530 <br class="fancyvrb" /><a
|
Chris@1
|
1531 id="x1-43076r6"></a><span
|
Chris@1
|
1532 class="cmr-6">6</span><span
|
Chris@1
|
1533 class="cmtt-8"> </span><span
|
Chris@1
|
1534 class="cmtt-8"> byte</span><span
|
Chris@1
|
1535 class="cmtt-8"> 1</span><span
|
Chris@1
|
1536 class="cmtt-8"> [0</span><span
|
Chris@1
|
1537 class="cmtt-8"> 1</span><span
|
Chris@1
|
1538 class="cmtt-8"> 0</span><span
|
Chris@1
|
1539 class="cmtt-8"> 0</span><span
|
Chris@1
|
1540 class="cmtt-8"> 1</span><span
|
Chris@1
|
1541 class="cmtt-8"> 0</span><span
|
Chris@1
|
1542 class="cmtt-8"> 0</span><span
|
Chris@1
|
1543 class="cmtt-8"> 0]</span>
|
Chris@1
|
1544 <br class="fancyvrb" /><a
|
Chris@1
|
1545 id="x1-43078r7"></a><span
|
Chris@1
|
1546 class="cmr-6">7</span><span
|
Chris@1
|
1547 class="cmtt-8"> </span><span
|
Chris@1
|
1548 class="cmtt-8"> byte</span><span
|
Chris@1
|
1549 class="cmtt-8"> 2</span><span
|
Chris@1
|
1550 class="cmtt-8"> [1</span><span
|
Chris@1
|
1551 class="cmtt-8"> 1</span><span
|
Chris@1
|
1552 class="cmtt-8"> 0</span><span
|
Chris@1
|
1553 class="cmtt-8"> 0</span><span
|
Chris@1
|
1554 class="cmtt-8"> 1</span><span
|
Chris@1
|
1555 class="cmtt-8"> 1</span><span
|
Chris@1
|
1556 class="cmtt-8"> 1</span><span
|
Chris@1
|
1557 class="cmtt-8"> 0]</span>
|
Chris@1
|
1558 <br class="fancyvrb" /><a
|
Chris@1
|
1559 id="x1-43080r8"></a><span
|
Chris@1
|
1560 class="cmr-6">8</span><span
|
Chris@1
|
1561 class="cmtt-8"> </span><span
|
Chris@1
|
1562 class="cmtt-8"> byte</span><span
|
Chris@1
|
1563 class="cmtt-8"> 3</span><span
|
Chris@1
|
1564 class="cmtt-8"> [0</span><span
|
Chris@1
|
1565 class="cmtt-8"> 0</span><span
|
Chris@1
|
1566 class="cmtt-8"> 0</span><span
|
Chris@1
|
1567 class="cmtt-8"> 0</span><span
|
Chris@1
|
1568 class="cmtt-8"> 0</span><span
|
Chris@1
|
1569 class="cmtt-8"> 1</span><span
|
Chris@1
|
1570 class="cmtt-8"> 1</span><span
|
Chris@1
|
1571 class="cmtt-8"> 0]</span><span
|
Chris@1
|
1572 class="cmtt-8"> </span><span
|
Chris@1
|
1573 class="cmtt-8"> <-</span>
|
Chris@1
|
1574 <br class="fancyvrb" /><a
|
Chris@1
|
1575 id="x1-43082r9"></a><span
|
Chris@1
|
1576 class="cmr-6">9</span><span
|
Chris@1
|
1577 class="cmtt-8"> </span><span
|
Chris@1
|
1578 class="cmtt-8"> </span><span
|
Chris@1
|
1579 class="cmtt-8"> </span><span
|
Chris@1
|
1580 class="cmtt-8"> </span><span
|
Chris@1
|
1581 class="cmtt-8"> </span><span
|
Chris@1
|
1582 class="cmtt-8"> </span><span
|
Chris@1
|
1583 class="cmtt-8"> </span><span
|
Chris@1
|
1584 class="cmtt-8"> </span><span
|
Chris@1
|
1585 class="cmtt-8"> </span><span
|
Chris@1
|
1586 class="cmtt-8"> </span><span
|
Chris@1
|
1587 class="cmtt-8"> </span><span
|
Chris@1
|
1588 class="cmtt-8"> </span><span
|
Chris@1
|
1589 class="cmtt-8"> </span><span
|
Chris@1
|
1590 class="cmtt-8"> </span><span
|
Chris@1
|
1591 class="cmtt-8"> ...</span>
|
Chris@1
|
1592 <br class="fancyvrb" /><a
|
Chris@1
|
1593 id="x1-43084r10"></a><span
|
Chris@1
|
1594 class="cmr-6">10</span><span
|
Chris@1
|
1595 class="cmtt-8"> </span><span
|
Chris@1
|
1596 class="cmtt-8"> byte</span><span
|
Chris@1
|
1597 class="cmtt-8"> n</span><span
|
Chris@1
|
1598 class="cmtt-8"> [</span><span
|
Chris@1
|
1599 class="cmtt-8"> </span><span
|
Chris@1
|
1600 class="cmtt-8"> </span><span
|
Chris@1
|
1601 class="cmtt-8"> </span><span
|
Chris@1
|
1602 class="cmtt-8"> </span><span
|
Chris@1
|
1603 class="cmtt-8"> </span><span
|
Chris@1
|
1604 class="cmtt-8"> </span><span
|
Chris@1
|
1605 class="cmtt-8"> </span><span
|
Chris@1
|
1606 class="cmtt-8"> </span><span
|
Chris@1
|
1607 class="cmtt-8"> </span><span
|
Chris@1
|
1608 class="cmtt-8"> </span><span
|
Chris@1
|
1609 class="cmtt-8"> </span><span
|
Chris@1
|
1610 class="cmtt-8"> </span><span
|
Chris@1
|
1611 class="cmtt-8"> </span><span
|
Chris@1
|
1612 class="cmtt-8"> </span><span
|
Chris@1
|
1613 class="cmtt-8"> ]</span><span
|
Chris@1
|
1614 class="cmtt-8"> </span><span
|
Chris@1
|
1615 class="cmtt-8"> bytestream</span><span
|
Chris@1
|
1616 class="cmtt-8"> length</span><span
|
Chris@1
|
1617 class="cmtt-8"> ==</span><span
|
Chris@1
|
1618 class="cmtt-8"> 4</span><span
|
Chris@1
|
1619 class="cmtt-8"> bytes</span>
|
Chris@1
|
1620 <br class="fancyvrb" /><a
|
Chris@1
|
1621 id="x1-43086r11"></a><span
|
Chris@1
|
1622 class="cmr-6">11</span><span
|
Chris@1
|
1623 class="cmtt-8"> </span><span
|
Chris@1
|
1624 class="cmtt-8"> </span>
|
Chris@1
|
1625 </div>
|
Chris@1
|
1626 <!--l. 173--><p class="noindent" >
|
Chris@1
|
1627 <h5 class="subsubsectionHead"><span class="titlemark">2.1.7. </span> <a
|
Chris@1
|
1628 id="x1-440002.1.7"></a>decoding example</h5>
|
Chris@1
|
1629 <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
|
Chris@1
|
1630 <!--l. 177--><p class="noindent" >
|
Chris@1
|
1631 <div class="fancyvrb" id="fancyvrb6">
|
Chris@1
|
1632
|
Chris@1
|
1633
|
Chris@1
|
1634
|
Chris@1
|
1635 <a
|
Chris@1
|
1636 id="x1-44002r1"></a><span
|
Chris@1
|
1637 class="cmr-6">1</span><span
|
Chris@1
|
1638 class="cmtt-8"> </span><span
|
Chris@1
|
1639 class="cmtt-8"> </span><span
|
Chris@1
|
1640 class="cmtt-8"> </span><span
|
Chris@1
|
1641 class="cmtt-8"> </span><span
|
Chris@1
|
1642 class="cmtt-8"> </span><span
|
Chris@1
|
1643 class="cmtt-8"> </span><span
|
Chris@1
|
1644 class="cmtt-8"> </span><span
|
Chris@1
|
1645 class="cmtt-8"> </span><span
|
Chris@1
|
1646 class="cmtt-8"> </span><span
|
Chris@1
|
1647 class="cmtt-8"> </span><span
|
Chris@1
|
1648 class="cmtt-8"> </span><span
|
Chris@1
|
1649 class="cmtt-8"> </span><span
|
Chris@1
|
1650 class="cmtt-8"> </span><span
|
Chris@1
|
1651 class="cmtt-8"> </span><span
|
Chris@1
|
1652 class="cmtt-8"> </span><span
|
Chris@1
|
1653 class="cmtt-8"> </span><span
|
Chris@1
|
1654 class="cmtt-8"> </span><span
|
Chris@1
|
1655 class="cmtt-8"> </span><span
|
Chris@1
|
1656 class="cmtt-8"> </span><span
|
Chris@1
|
1657 class="cmtt-8"> </span><span
|
Chris@1
|
1658 class="cmtt-8"> </span><span
|
Chris@1
|
1659 class="cmtt-8"> </span><span
|
Chris@1
|
1660 class="cmtt-8"> </span><span
|
Chris@1
|
1661 class="cmtt-8"> |</span>
|
Chris@1
|
1662 <br class="fancyvrb" /><a
|
Chris@1
|
1663 id="x1-44004r2"></a><span
|
Chris@1
|
1664 class="cmr-6">2</span><span
|
Chris@1
|
1665 class="cmtt-8"> </span><span
|
Chris@1
|
1666 class="cmtt-8"> </span><span
|
Chris@1
|
1667 class="cmtt-8"> </span><span
|
Chris@1
|
1668 class="cmtt-8"> </span><span
|
Chris@1
|
1669 class="cmtt-8"> </span><span
|
Chris@1
|
1670 class="cmtt-8"> </span><span
|
Chris@1
|
1671 class="cmtt-8"> </span><span
|
Chris@1
|
1672 class="cmtt-8"> </span><span
|
Chris@1
|
1673 class="cmtt-8"> </span><span
|
Chris@1
|
1674 class="cmtt-8"> </span><span
|
Chris@1
|
1675 class="cmtt-8"> </span><span
|
Chris@1
|
1676 class="cmtt-8"> </span><span
|
Chris@1
|
1677 class="cmtt-8"> </span><span
|
Chris@1
|
1678 class="cmtt-8"> </span><span
|
Chris@1
|
1679 class="cmtt-8"> </span><span
|
Chris@1
|
1680 class="cmtt-8"> </span><span
|
Chris@1
|
1681 class="cmtt-8"> </span><span
|
Chris@1
|
1682 class="cmtt-8"> </span><span
|
Chris@1
|
1683 class="cmtt-8"> </span><span
|
Chris@1
|
1684 class="cmtt-8"> </span><span
|
Chris@1
|
1685 class="cmtt-8"> </span><span
|
Chris@1
|
1686 class="cmtt-8"> </span><span
|
Chris@1
|
1687 class="cmtt-8"> </span><span
|
Chris@1
|
1688 class="cmtt-8"> V</span>
|
Chris@1
|
1689 <br class="fancyvrb" /><a
|
Chris@1
|
1690 id="x1-44006r3"></a><span
|
Chris@1
|
1691 class="cmr-6">3</span><span
|
Chris@1
|
1692 class="cmtt-8"> </span><span
|
Chris@1
|
1693 class="cmtt-8"> </span>
|
Chris@1
|
1694 <br class="fancyvrb" /><a
|
Chris@1
|
1695 id="x1-44008r4"></a><span
|
Chris@1
|
1696 class="cmr-6">4</span><span
|
Chris@1
|
1697 class="cmtt-8"> </span><span
|
Chris@1
|
1698 class="cmtt-8"> </span><span
|
Chris@1
|
1699 class="cmtt-8"> </span><span
|
Chris@1
|
1700 class="cmtt-8"> </span><span
|
Chris@1
|
1701 class="cmtt-8"> </span><span
|
Chris@1
|
1702 class="cmtt-8"> </span><span
|
Chris@1
|
1703 class="cmtt-8"> </span><span
|
Chris@1
|
1704 class="cmtt-8"> </span><span
|
Chris@1
|
1705 class="cmtt-8"> </span><span
|
Chris@1
|
1706 class="cmtt-8"> 7</span><span
|
Chris@1
|
1707 class="cmtt-8"> 6</span><span
|
Chris@1
|
1708 class="cmtt-8"> 5</span><span
|
Chris@1
|
1709 class="cmtt-8"> 4</span><span
|
Chris@1
|
1710 class="cmtt-8"> 3</span><span
|
Chris@1
|
1711 class="cmtt-8"> 2</span><span
|
Chris@1
|
1712 class="cmtt-8"> 1</span><span
|
Chris@1
|
1713 class="cmtt-8"> 0</span>
|
Chris@1
|
1714 <br class="fancyvrb" /><a
|
Chris@1
|
1715 id="x1-44010r5"></a><span
|
Chris@1
|
1716 class="cmr-6">5</span><span
|
Chris@1
|
1717 class="cmtt-8"> </span><span
|
Chris@1
|
1718 class="cmtt-8"> byte</span><span
|
Chris@1
|
1719 class="cmtt-8"> 0</span><span
|
Chris@1
|
1720 class="cmtt-8"> [1</span><span
|
Chris@1
|
1721 class="cmtt-8"> 1</span><span
|
Chris@1
|
1722 class="cmtt-8"> 1</span><span
|
Chris@1
|
1723 class="cmtt-8"> 1</span><span
|
Chris@1
|
1724 class="cmtt-8"> 1</span><span
|
Chris@1
|
1725 class="cmtt-8"> 1</span><span
|
Chris@1
|
1726 class="cmtt-8"> 0</span><span
|
Chris@1
|
1727 class="cmtt-8"> 0]</span><span
|
Chris@1
|
1728 class="cmtt-8"> </span><span
|
Chris@1
|
1729 class="cmtt-8"> <-</span>
|
Chris@1
|
1730 <br class="fancyvrb" /><a
|
Chris@1
|
1731 id="x1-44012r6"></a><span
|
Chris@1
|
1732 class="cmr-6">6</span><span
|
Chris@1
|
1733 class="cmtt-8"> </span><span
|
Chris@1
|
1734 class="cmtt-8"> byte</span><span
|
Chris@1
|
1735 class="cmtt-8"> 1</span><span
|
Chris@1
|
1736 class="cmtt-8"> [0</span><span
|
Chris@1
|
1737 class="cmtt-8"> 1</span><span
|
Chris@1
|
1738 class="cmtt-8"> 0</span><span
|
Chris@1
|
1739 class="cmtt-8"> 0</span><span
|
Chris@1
|
1740 class="cmtt-8"> 1</span><span
|
Chris@1
|
1741 class="cmtt-8"> 0</span><span
|
Chris@1
|
1742 class="cmtt-8"> 0</span><span
|
Chris@1
|
1743 class="cmtt-8"> 0]</span>
|
Chris@1
|
1744 <br class="fancyvrb" /><a
|
Chris@1
|
1745 id="x1-44014r7"></a><span
|
Chris@1
|
1746 class="cmr-6">7</span><span
|
Chris@1
|
1747 class="cmtt-8"> </span><span
|
Chris@1
|
1748 class="cmtt-8"> byte</span><span
|
Chris@1
|
1749 class="cmtt-8"> 2</span><span
|
Chris@1
|
1750 class="cmtt-8"> [1</span><span
|
Chris@1
|
1751 class="cmtt-8"> 1</span><span
|
Chris@1
|
1752 class="cmtt-8"> 0</span><span
|
Chris@1
|
1753 class="cmtt-8"> 0</span><span
|
Chris@1
|
1754 class="cmtt-8"> 1</span><span
|
Chris@1
|
1755 class="cmtt-8"> 1</span><span
|
Chris@1
|
1756 class="cmtt-8"> 1</span><span
|
Chris@1
|
1757 class="cmtt-8"> 0]</span>
|
Chris@1
|
1758 <br class="fancyvrb" /><a
|
Chris@1
|
1759 id="x1-44016r8"></a><span
|
Chris@1
|
1760 class="cmr-6">8</span><span
|
Chris@1
|
1761 class="cmtt-8"> </span><span
|
Chris@1
|
1762 class="cmtt-8"> byte</span><span
|
Chris@1
|
1763 class="cmtt-8"> 3</span><span
|
Chris@1
|
1764 class="cmtt-8"> [0</span><span
|
Chris@1
|
1765 class="cmtt-8"> 0</span><span
|
Chris@1
|
1766 class="cmtt-8"> 0</span><span
|
Chris@1
|
1767 class="cmtt-8"> 0</span><span
|
Chris@1
|
1768 class="cmtt-8"> 0</span><span
|
Chris@1
|
1769 class="cmtt-8"> 1</span><span
|
Chris@1
|
1770 class="cmtt-8"> 1</span><span
|
Chris@1
|
1771 class="cmtt-8"> 0]</span><span
|
Chris@1
|
1772 class="cmtt-8"> </span><span
|
Chris@1
|
1773 class="cmtt-8"> bytestream</span><span
|
Chris@1
|
1774 class="cmtt-8"> length</span><span
|
Chris@1
|
1775 class="cmtt-8"> ==</span><span
|
Chris@1
|
1776 class="cmtt-8"> 4</span><span
|
Chris@1
|
1777 class="cmtt-8"> bytes</span>
|
Chris@1
|
1778 <br class="fancyvrb" /><a
|
Chris@1
|
1779 id="x1-44018r9"></a><span
|
Chris@1
|
1780 class="cmr-6">9</span><span
|
Chris@1
|
1781 class="cmtt-8"> </span><span
|
Chris@1
|
1782 class="cmtt-8"> </span>
|
Chris@1
|
1783 </div>
|
Chris@1
|
1784 <!--l. 190--><p class="noindent" >We read two, two-bit integer fields, resulting in the returned numbers ’b00’ and ’b11’. Two things
|
Chris@1
|
1785 are worth noting here:
|
Chris@1
|
1786 <ul class="itemize1">
|
Chris@1
|
1787 <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
|
Chris@1
|
1788 some other combination of bit-widths from the bitstream is well defined. There are
|
Chris@1
|
1789 no artificial alignment boundaries maintained in the bitstream.
|
Chris@1
|
1790 </li>
|
Chris@1
|
1791 <li class="itemize">The second value is the two-bit-wide integer ’b11’. This value may be interpreted
|
Chris@1
|
1792 either as the unsigned value ’3’, or the signed value ’-1’. Signedness is dependent on
|
Chris@1
|
1793 decode context.</li></ul>
|
Chris@1
|
1794 <!--l. 208--><p class="noindent" >
|
Chris@1
|
1795 <h5 class="subsubsectionHead"><span class="titlemark">2.1.8. </span> <a
|
Chris@1
|
1796 id="x1-450002.1.8"></a>end-of-packet alignment</h5>
|
Chris@1
|
1797 <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
|
Chris@1
|
1798 embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
|
Chris@1
|
1799 Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
|
Chris@1
|
1800 the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
|
Chris@1
|
1801 in the last byte of a packet.
|
Chris@1
|
1802 <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
|
Chris@1
|
1803 should this unused space be read, it will return binary zeroes.
|
Chris@1
|
1804 <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an ’end-of-packet’ condition.
|
Chris@1
|
1805 End-of-packet is not to be considered an error; it is merely a state indicating that there is
|
Chris@1
|
1806 insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
|
Chris@1
|
1807 normal mode of operation, and as such, decoders must handle reading past the end of a packet as
|
Chris@1
|
1808 a typical mode of operation. Any further read operations after an ’end-of-packet’ condition shall
|
Chris@1
|
1809 also return ’end-of-packet’.
|
Chris@1
|
1810
|
Chris@1
|
1811
|
Chris@1
|
1812
|
Chris@1
|
1813 <!--l. 233--><p class="noindent" >
|
Chris@1
|
1814 <h5 class="subsubsectionHead"><span class="titlemark">2.1.9. </span> <a
|
Chris@1
|
1815 id="x1-460002.1.9"></a>reading zero bits</h5>
|
Chris@1
|
1816 <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value ’0’ and does not increment the stream cursor.
|
Chris@1
|
1817 Reading to the end of the packet (but not past, such that an ’end-of-packet’ condition has not
|
Chris@1
|
1818 triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
|
Chris@1
|
1819 end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets ’end-of-packet’
|
Chris@1
|
1820 shall also fail with ’end-of-packet’.
|
Chris@1
|
1821
|
Chris@1
|
1822
|
Chris@1
|
1823
|
Chris@1
|
1824
|
Chris@1
|
1825
|
Chris@1
|
1826
|
Chris@1
|
1827 <h3 class="sectionHead"><span class="titlemark">3. </span> <a
|
Chris@1
|
1828 id="x1-470003"></a>Probability Model and Codebooks</h3>
|
Chris@1
|
1829 <!--l. 6--><p class="noindent" >
|
Chris@1
|
1830 <h4 class="subsectionHead"><span class="titlemark">3.1. </span> <a
|
Chris@1
|
1831 id="x1-480003.1"></a>Overview</h4>
|
Chris@1
|
1832 <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
|
Chris@1
|
1833 probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
|
Chris@1
|
1834 bitstream itself in the third header, the codec setup header. This packed configuration consists of
|
Chris@1
|
1835 multiple ’codebooks’, each containing a specific Huffman-equivalent representation for decoding
|
Chris@1
|
1836 compressed codewords as well as an optional lookup table of output vector values to which a
|
Chris@1
|
1837 decoded Huffman value is applied as an offset, generating the final decoded output corresponding
|
Chris@1
|
1838 to a given compressed codeword.
|
Chris@1
|
1839 <!--l. 18--><p class="noindent" >
|
Chris@1
|
1840 <h5 class="subsubsectionHead"><span class="titlemark">3.1.1. </span> <a
|
Chris@1
|
1841 id="x1-490003.1.1"></a>Bitwise operation</h5>
|
Chris@1
|
1842 <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
|
Chris@1
|
1843 and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
|
Chris@1
|
1844 read from the stream according to <a
|
Chris@1
|
1845 href="#x1-360002">Section 2</a>, “<a
|
Chris@1
|
1846 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>”.
|
Chris@1
|
1847 <!--l. 27--><p class="noindent" >
|
Chris@1
|
1848 <h4 class="subsectionHead"><span class="titlemark">3.2. </span> <a
|
Chris@1
|
1849 id="x1-500003.2"></a>Packed codebook format</h4>
|
Chris@1
|
1850 <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system’s native byte width is
|
Chris@1
|
1851 eight bits. This is not universally true; see <a
|
Chris@1
|
1852 href="#x1-360002">Section 2</a>, “<a
|
Chris@1
|
1853 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>” for discussion
|
Chris@1
|
1854 relating to non-eight-bit bytes.
|
Chris@1
|
1855
|
Chris@1
|
1856
|
Chris@1
|
1857
|
Chris@1
|
1858 <!--l. 34--><p class="noindent" >
|
Chris@1
|
1859 <h5 class="subsubsectionHead"><span class="titlemark">3.2.1. </span> <a
|
Chris@1
|
1860 id="x1-510003.2.1"></a>codebook decode</h5>
|
Chris@1
|
1861 <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
|
Chris@1
|
1862 <!--l. 38--><p class="noindent" >
|
Chris@1
|
1863 <div class="fancyvrb" id="fancyvrb7">
|
Chris@1
|
1864 <a
|
Chris@1
|
1865 id="x1-51002r1"></a><span
|
Chris@1
|
1866 class="cmr-6">1</span><span
|
Chris@1
|
1867 class="cmtt-8"> </span><span
|
Chris@1
|
1868 class="cmtt-8"> byte</span><span
|
Chris@1
|
1869 class="cmtt-8"> 0:</span><span
|
Chris@1
|
1870 class="cmtt-8"> [</span><span
|
Chris@1
|
1871 class="cmtt-8"> 0</span><span
|
Chris@1
|
1872 class="cmtt-8"> 1</span><span
|
Chris@1
|
1873 class="cmtt-8"> 0</span><span
|
Chris@1
|
1874 class="cmtt-8"> 0</span><span
|
Chris@1
|
1875 class="cmtt-8"> 0</span><span
|
Chris@1
|
1876 class="cmtt-8"> 0</span><span
|
Chris@1
|
1877 class="cmtt-8"> 1</span><span
|
Chris@1
|
1878 class="cmtt-8"> 0</span><span
|
Chris@1
|
1879 class="cmtt-8"> ]</span><span
|
Chris@1
|
1880 class="cmtt-8"> (0x42)</span>
|
Chris@1
|
1881 <br class="fancyvrb" /><a
|
Chris@1
|
1882 id="x1-51004r2"></a><span
|
Chris@1
|
1883 class="cmr-6">2</span><span
|
Chris@1
|
1884 class="cmtt-8"> </span><span
|
Chris@1
|
1885 class="cmtt-8"> byte</span><span
|
Chris@1
|
1886 class="cmtt-8"> 1:</span><span
|
Chris@1
|
1887 class="cmtt-8"> [</span><span
|
Chris@1
|
1888 class="cmtt-8"> 0</span><span
|
Chris@1
|
1889 class="cmtt-8"> 1</span><span
|
Chris@1
|
1890 class="cmtt-8"> 0</span><span
|
Chris@1
|
1891 class="cmtt-8"> 0</span><span
|
Chris@1
|
1892 class="cmtt-8"> 0</span><span
|
Chris@1
|
1893 class="cmtt-8"> 0</span><span
|
Chris@1
|
1894 class="cmtt-8"> 1</span><span
|
Chris@1
|
1895 class="cmtt-8"> 1</span><span
|
Chris@1
|
1896 class="cmtt-8"> ]</span><span
|
Chris@1
|
1897 class="cmtt-8"> (0x43)</span>
|
Chris@1
|
1898 <br class="fancyvrb" /><a
|
Chris@1
|
1899 id="x1-51006r3"></a><span
|
Chris@1
|
1900 class="cmr-6">3</span><span
|
Chris@1
|
1901 class="cmtt-8"> </span><span
|
Chris@1
|
1902 class="cmtt-8"> byte</span><span
|
Chris@1
|
1903 class="cmtt-8"> 2:</span><span
|
Chris@1
|
1904 class="cmtt-8"> [</span><span
|
Chris@1
|
1905 class="cmtt-8"> 0</span><span
|
Chris@1
|
1906 class="cmtt-8"> 1</span><span
|
Chris@1
|
1907 class="cmtt-8"> 0</span><span
|
Chris@1
|
1908 class="cmtt-8"> 1</span><span
|
Chris@1
|
1909 class="cmtt-8"> 0</span><span
|
Chris@1
|
1910 class="cmtt-8"> 1</span><span
|
Chris@1
|
1911 class="cmtt-8"> 1</span><span
|
Chris@1
|
1912 class="cmtt-8"> 0</span><span
|
Chris@1
|
1913 class="cmtt-8"> ]</span><span
|
Chris@1
|
1914 class="cmtt-8"> (0x56)</span>
|
Chris@1
|
1915 </div>
|
Chris@1
|
1916 <!--l. 44--><p class="noindent" >16 bit <span
|
Chris@1
|
1917 class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span
|
Chris@1
|
1918 class="cmtt-12">[codebook_entries] </span>fields:
|
Chris@1
|
1919 <!--l. 46--><p class="noindent" >
|
Chris@1
|
1920 <div class="fancyvrb" id="fancyvrb8">
|
Chris@1
|
1921 <a
|
Chris@1
|
1922 id="x1-51008r1"></a><span
|
Chris@1
|
1923 class="cmr-6">1</span><span
|
Chris@1
|
1924 class="cmtt-8"> </span><span
|
Chris@1
|
1925 class="cmtt-8"> </span>
|
Chris@1
|
1926 <br class="fancyvrb" /><a
|
Chris@1
|
1927 id="x1-51010r2"></a><span
|
Chris@1
|
1928 class="cmr-6">2</span><span
|
Chris@1
|
1929 class="cmtt-8"> </span><span
|
Chris@1
|
1930 class="cmtt-8"> byte</span><span
|
Chris@1
|
1931 class="cmtt-8"> 3:</span><span
|
Chris@1
|
1932 class="cmtt-8"> [</span><span
|
Chris@1
|
1933 class="cmtt-8"> X</span><span
|
Chris@1
|
1934 class="cmtt-8"> X</span><span
|
Chris@1
|
1935 class="cmtt-8"> X</span><span
|
Chris@1
|
1936 class="cmtt-8"> X</span><span
|
Chris@1
|
1937 class="cmtt-8"> X</span><span
|
Chris@1
|
1938 class="cmtt-8"> X</span><span
|
Chris@1
|
1939 class="cmtt-8"> X</span><span
|
Chris@1
|
1940 class="cmtt-8"> X</span><span
|
Chris@1
|
1941 class="cmtt-8"> ]</span>
|
Chris@1
|
1942 <br class="fancyvrb" /><a
|
Chris@1
|
1943 id="x1-51012r3"></a><span
|
Chris@1
|
1944 class="cmr-6">3</span><span
|
Chris@1
|
1945 class="cmtt-8"> </span><span
|
Chris@1
|
1946 class="cmtt-8"> byte</span><span
|
Chris@1
|
1947 class="cmtt-8"> 4:</span><span
|
Chris@1
|
1948 class="cmtt-8"> [</span><span
|
Chris@1
|
1949 class="cmtt-8"> X</span><span
|
Chris@1
|
1950 class="cmtt-8"> X</span><span
|
Chris@1
|
1951 class="cmtt-8"> X</span><span
|
Chris@1
|
1952 class="cmtt-8"> X</span><span
|
Chris@1
|
1953 class="cmtt-8"> X</span><span
|
Chris@1
|
1954 class="cmtt-8"> X</span><span
|
Chris@1
|
1955 class="cmtt-8"> X</span><span
|
Chris@1
|
1956 class="cmtt-8"> X</span><span
|
Chris@1
|
1957 class="cmtt-8"> ]</span><span
|
Chris@1
|
1958 class="cmtt-8"> [codebook_dimensions]</span><span
|
Chris@1
|
1959 class="cmtt-8"> (16</span><span
|
Chris@1
|
1960 class="cmtt-8"> bit</span><span
|
Chris@1
|
1961 class="cmtt-8"> unsigned)</span>
|
Chris@1
|
1962 <br class="fancyvrb" /><a
|
Chris@1
|
1963 id="x1-51014r4"></a><span
|
Chris@1
|
1964 class="cmr-6">4</span><span
|
Chris@1
|
1965 class="cmtt-8"> </span><span
|
Chris@1
|
1966 class="cmtt-8"> </span>
|
Chris@1
|
1967 <br class="fancyvrb" /><a
|
Chris@1
|
1968 id="x1-51016r5"></a><span
|
Chris@1
|
1969 class="cmr-6">5</span><span
|
Chris@1
|
1970 class="cmtt-8"> </span><span
|
Chris@1
|
1971 class="cmtt-8"> byte</span><span
|
Chris@1
|
1972 class="cmtt-8"> 5:</span><span
|
Chris@1
|
1973 class="cmtt-8"> [</span><span
|
Chris@1
|
1974 class="cmtt-8"> X</span><span
|
Chris@1
|
1975 class="cmtt-8"> X</span><span
|
Chris@1
|
1976 class="cmtt-8"> X</span><span
|
Chris@1
|
1977 class="cmtt-8"> X</span><span
|
Chris@1
|
1978 class="cmtt-8"> X</span><span
|
Chris@1
|
1979 class="cmtt-8"> X</span><span
|
Chris@1
|
1980 class="cmtt-8"> X</span><span
|
Chris@1
|
1981 class="cmtt-8"> X</span><span
|
Chris@1
|
1982 class="cmtt-8"> ]</span>
|
Chris@1
|
1983 <br class="fancyvrb" /><a
|
Chris@1
|
1984 id="x1-51018r6"></a><span
|
Chris@1
|
1985 class="cmr-6">6</span><span
|
Chris@1
|
1986 class="cmtt-8"> </span><span
|
Chris@1
|
1987 class="cmtt-8"> byte</span><span
|
Chris@1
|
1988 class="cmtt-8"> 6:</span><span
|
Chris@1
|
1989 class="cmtt-8"> [</span><span
|
Chris@1
|
1990 class="cmtt-8"> X</span><span
|
Chris@1
|
1991 class="cmtt-8"> X</span><span
|
Chris@1
|
1992 class="cmtt-8"> X</span><span
|
Chris@1
|
1993 class="cmtt-8"> X</span><span
|
Chris@1
|
1994 class="cmtt-8"> X</span><span
|
Chris@1
|
1995 class="cmtt-8"> X</span><span
|
Chris@1
|
1996 class="cmtt-8"> X</span><span
|
Chris@1
|
1997 class="cmtt-8"> X</span><span
|
Chris@1
|
1998 class="cmtt-8"> ]</span>
|
Chris@1
|
1999 <br class="fancyvrb" /><a
|
Chris@1
|
2000 id="x1-51020r7"></a><span
|
Chris@1
|
2001 class="cmr-6">7</span><span
|
Chris@1
|
2002 class="cmtt-8"> </span><span
|
Chris@1
|
2003 class="cmtt-8"> byte</span><span
|
Chris@1
|
2004 class="cmtt-8"> 7:</span><span
|
Chris@1
|
2005 class="cmtt-8"> [</span><span
|
Chris@1
|
2006 class="cmtt-8"> X</span><span
|
Chris@1
|
2007 class="cmtt-8"> X</span><span
|
Chris@1
|
2008 class="cmtt-8"> X</span><span
|
Chris@1
|
2009 class="cmtt-8"> X</span><span
|
Chris@1
|
2010 class="cmtt-8"> X</span><span
|
Chris@1
|
2011 class="cmtt-8"> X</span><span
|
Chris@1
|
2012 class="cmtt-8"> X</span><span
|
Chris@1
|
2013 class="cmtt-8"> X</span><span
|
Chris@1
|
2014 class="cmtt-8"> ]</span><span
|
Chris@1
|
2015 class="cmtt-8"> [codebook_entries]</span><span
|
Chris@1
|
2016 class="cmtt-8"> (24</span><span
|
Chris@1
|
2017 class="cmtt-8"> bit</span><span
|
Chris@1
|
2018 class="cmtt-8"> unsigned)</span>
|
Chris@1
|
2019 <br class="fancyvrb" /><a
|
Chris@1
|
2020 id="x1-51022r8"></a><span
|
Chris@1
|
2021 class="cmr-6">8</span><span
|
Chris@1
|
2022 class="cmtt-8"> </span><span
|
Chris@1
|
2023 class="cmtt-8"> </span>
|
Chris@1
|
2024 </div>
|
Chris@1
|
2025 <!--l. 57--><p class="noindent" >Next is the <span
|
Chris@1
|
2026 class="cmtt-12">[ordered] </span>bit flag:
|
Chris@1
|
2027 <!--l. 59--><p class="noindent" >
|
Chris@1
|
2028 <div class="fancyvrb" id="fancyvrb9">
|
Chris@1
|
2029 <a
|
Chris@1
|
2030 id="x1-51024r1"></a><span
|
Chris@1
|
2031 class="cmr-6">1</span><span
|
Chris@1
|
2032 class="cmtt-8"> </span><span
|
Chris@1
|
2033 class="cmtt-8"> </span>
|
Chris@1
|
2034 <br class="fancyvrb" /><a
|
Chris@1
|
2035 id="x1-51026r2"></a><span
|
Chris@1
|
2036 class="cmr-6">2</span><span
|
Chris@1
|
2037 class="cmtt-8"> </span><span
|
Chris@1
|
2038 class="cmtt-8"> byte</span><span
|
Chris@1
|
2039 class="cmtt-8"> 8:</span><span
|
Chris@1
|
2040 class="cmtt-8"> [</span><span
|
Chris@1
|
2041 class="cmtt-8"> </span><span
|
Chris@1
|
2042 class="cmtt-8"> </span><span
|
Chris@1
|
2043 class="cmtt-8"> </span><span
|
Chris@1
|
2044 class="cmtt-8"> </span><span
|
Chris@1
|
2045 class="cmtt-8"> </span><span
|
Chris@1
|
2046 class="cmtt-8"> </span><span
|
Chris@1
|
2047 class="cmtt-8"> </span><span
|
Chris@1
|
2048 class="cmtt-8"> </span><span
|
Chris@1
|
2049 class="cmtt-8"> </span><span
|
Chris@1
|
2050 class="cmtt-8"> </span><span
|
Chris@1
|
2051 class="cmtt-8"> </span><span
|
Chris@1
|
2052 class="cmtt-8"> </span><span
|
Chris@1
|
2053 class="cmtt-8"> </span><span
|
Chris@1
|
2054 class="cmtt-8"> </span><span
|
Chris@1
|
2055 class="cmtt-8"> X</span><span
|
Chris@1
|
2056 class="cmtt-8"> ]</span><span
|
Chris@1
|
2057 class="cmtt-8"> [ordered]</span><span
|
Chris@1
|
2058 class="cmtt-8"> (1</span><span
|
Chris@1
|
2059 class="cmtt-8"> bit)</span>
|
Chris@1
|
2060 <br class="fancyvrb" /><a
|
Chris@1
|
2061 id="x1-51028r3"></a><span
|
Chris@1
|
2062 class="cmr-6">3</span><span
|
Chris@1
|
2063 class="cmtt-8"> </span><span
|
Chris@1
|
2064 class="cmtt-8"> </span>
|
Chris@1
|
2065 </div>
|
Chris@1
|
2066 <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span
|
Chris@1
|
2067 class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
|
Chris@1
|
2068 We now read the list of codeword lengths and store these lengths in the array
|
Chris@1
|
2069 <span
|
Chris@1
|
2070 class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span
|
Chris@1
|
2071 class="cmtt-12">[ordered] </span>flag
|
Chris@1
|
2072 is set or unset.
|
Chris@1
|
2073 <ul class="itemize1">
|
Chris@1
|
2074 <li class="itemize">If the <span
|
Chris@1
|
2075 class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
|
Chris@1
|
2076 needs to read each codeword length one-by-one.
|
Chris@1
|
2077 <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span
|
Chris@1
|
2078 class="cmtt-12">[sparse] </span>flag. This flag determines
|
Chris@1
|
2079 whether or not the codebook contains unused entries that are not to be included in
|
Chris@1
|
2080
|
Chris@1
|
2081
|
Chris@1
|
2082
|
Chris@1
|
2083 the codeword decode tree:
|
Chris@1
|
2084 <!--l. 82--><p class="noindent" >
|
Chris@1
|
2085 <div class="fancyvrb" id="fancyvrb10">
|
Chris@1
|
2086 <a
|
Chris@1
|
2087 id="x1-51030r1"></a><span
|
Chris@1
|
2088 class="cmr-6">1</span><span
|
Chris@1
|
2089 class="cmtt-8"> </span><span
|
Chris@1
|
2090 class="cmtt-8"> byte</span><span
|
Chris@1
|
2091 class="cmtt-8"> 8:</span><span
|
Chris@1
|
2092 class="cmtt-8"> [</span><span
|
Chris@1
|
2093 class="cmtt-8"> </span><span
|
Chris@1
|
2094 class="cmtt-8"> </span><span
|
Chris@1
|
2095 class="cmtt-8"> </span><span
|
Chris@1
|
2096 class="cmtt-8"> </span><span
|
Chris@1
|
2097 class="cmtt-8"> </span><span
|
Chris@1
|
2098 class="cmtt-8"> </span><span
|
Chris@1
|
2099 class="cmtt-8"> </span><span
|
Chris@1
|
2100 class="cmtt-8"> </span><span
|
Chris@1
|
2101 class="cmtt-8"> </span><span
|
Chris@1
|
2102 class="cmtt-8"> </span><span
|
Chris@1
|
2103 class="cmtt-8"> </span><span
|
Chris@1
|
2104 class="cmtt-8"> </span><span
|
Chris@1
|
2105 class="cmtt-8"> X</span><span
|
Chris@1
|
2106 class="cmtt-8"> 1</span><span
|
Chris@1
|
2107 class="cmtt-8"> ]</span><span
|
Chris@1
|
2108 class="cmtt-8"> [sparse]</span><span
|
Chris@1
|
2109 class="cmtt-8"> flag</span><span
|
Chris@1
|
2110 class="cmtt-8"> (1</span><span
|
Chris@1
|
2111 class="cmtt-8"> bit)</span>
|
Chris@1
|
2112 </div>
|
Chris@1
|
2113 <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span
|
Chris@1
|
2114 class="cmtt-12">[codebook_entries] </span>codebook entries:
|
Chris@1
|
2115 <!--l. 89--><p class="noindent" >
|
Chris@1
|
2116 <div class="fancyvrb" id="fancyvrb11">
|
Chris@1
|
2117 <a
|
Chris@1
|
2118 id="x1-51032r1"></a><span
|
Chris@1
|
2119 class="cmr-6">1</span><span
|
Chris@1
|
2120 class="cmtt-8"> </span><span
|
Chris@1
|
2121 class="cmtt-8"> </span>
|
Chris@1
|
2122 <br class="fancyvrb" /><a
|
Chris@1
|
2123 id="x1-51034r2"></a><span
|
Chris@1
|
2124 class="cmr-6">2</span><span
|
Chris@1
|
2125 class="cmtt-8"> </span><span
|
Chris@1
|
2126 class="cmtt-8"> </span><span
|
Chris@1
|
2127 class="cmtt-8"> </span><span
|
Chris@1
|
2128 class="cmtt-8"> 1)</span><span
|
Chris@1
|
2129 class="cmtt-8"> if([sparse]</span><span
|
Chris@1
|
2130 class="cmtt-8"> is</span><span
|
Chris@1
|
2131 class="cmtt-8"> set)</span><span
|
Chris@1
|
2132 class="cmtt-8"> </span><span
|
Chris@1
|
2133 class="cmsy-8">{</span>
|
Chris@1
|
2134 <br class="fancyvrb" /><a
|
Chris@1
|
2135 id="x1-51036r3"></a><span
|
Chris@1
|
2136 class="cmr-6">3</span><span
|
Chris@1
|
2137 class="cmtt-8"> </span><span
|
Chris@1
|
2138 class="cmtt-8"> </span>
|
Chris@1
|
2139 <br class="fancyvrb" /><a
|
Chris@1
|
2140 id="x1-51038r4"></a><span
|
Chris@1
|
2141 class="cmr-6">4</span><span
|
Chris@1
|
2142 class="cmtt-8"> </span><span
|
Chris@1
|
2143 class="cmtt-8"> </span><span
|
Chris@1
|
2144 class="cmtt-8"> </span><span
|
Chris@1
|
2145 class="cmtt-8"> </span><span
|
Chris@1
|
2146 class="cmtt-8"> </span><span
|
Chris@1
|
2147 class="cmtt-8"> </span><span
|
Chris@1
|
2148 class="cmtt-8"> </span><span
|
Chris@1
|
2149 class="cmtt-8"> </span><span
|
Chris@1
|
2150 class="cmtt-8"> </span><span
|
Chris@1
|
2151 class="cmtt-8"> </span><span
|
Chris@1
|
2152 class="cmtt-8"> 2)</span><span
|
Chris@1
|
2153 class="cmtt-8"> [flag]</span><span
|
Chris@1
|
2154 class="cmtt-8"> =</span><span
|
Chris@1
|
2155 class="cmtt-8"> read</span><span
|
Chris@1
|
2156 class="cmtt-8"> one</span><span
|
Chris@1
|
2157 class="cmtt-8"> bit;</span>
|
Chris@1
|
2158 <br class="fancyvrb" /><a
|
Chris@1
|
2159 id="x1-51040r5"></a><span
|
Chris@1
|
2160 class="cmr-6">5</span><span
|
Chris@1
|
2161 class="cmtt-8"> </span><span
|
Chris@1
|
2162 class="cmtt-8"> </span><span
|
Chris@1
|
2163 class="cmtt-8"> </span><span
|
Chris@1
|
2164 class="cmtt-8"> </span><span
|
Chris@1
|
2165 class="cmtt-8"> </span><span
|
Chris@1
|
2166 class="cmtt-8"> </span><span
|
Chris@1
|
2167 class="cmtt-8"> </span><span
|
Chris@1
|
2168 class="cmtt-8"> </span><span
|
Chris@1
|
2169 class="cmtt-8"> </span><span
|
Chris@1
|
2170 class="cmtt-8"> </span><span
|
Chris@1
|
2171 class="cmtt-8"> 3)</span><span
|
Chris@1
|
2172 class="cmtt-8"> if([flag]</span><span
|
Chris@1
|
2173 class="cmtt-8"> is</span><span
|
Chris@1
|
2174 class="cmtt-8"> set)</span><span
|
Chris@1
|
2175 class="cmtt-8"> </span><span
|
Chris@1
|
2176 class="cmsy-8">{</span>
|
Chris@1
|
2177 <br class="fancyvrb" /><a
|
Chris@1
|
2178 id="x1-51042r6"></a><span
|
Chris@1
|
2179 class="cmr-6">6</span><span
|
Chris@1
|
2180 class="cmtt-8"> </span><span
|
Chris@1
|
2181 class="cmtt-8"> </span>
|
Chris@1
|
2182 <br class="fancyvrb" /><a
|
Chris@1
|
2183 id="x1-51044r7"></a><span
|
Chris@1
|
2184 class="cmr-6">7</span><span
|
Chris@1
|
2185 class="cmtt-8"> </span><span
|
Chris@1
|
2186 class="cmtt-8"> </span><span
|
Chris@1
|
2187 class="cmtt-8"> </span><span
|
Chris@1
|
2188 class="cmtt-8"> </span><span
|
Chris@1
|
2189 class="cmtt-8"> </span><span
|
Chris@1
|
2190 class="cmtt-8"> </span><span
|
Chris@1
|
2191 class="cmtt-8"> </span><span
|
Chris@1
|
2192 class="cmtt-8"> </span><span
|
Chris@1
|
2193 class="cmtt-8"> </span><span
|
Chris@1
|
2194 class="cmtt-8"> </span><span
|
Chris@1
|
2195 class="cmtt-8"> </span><span
|
Chris@1
|
2196 class="cmtt-8"> </span><span
|
Chris@1
|
2197 class="cmtt-8"> </span><span
|
Chris@1
|
2198 class="cmtt-8"> </span><span
|
Chris@1
|
2199 class="cmtt-8"> </span><span
|
Chris@1
|
2200 class="cmtt-8"> 4)</span><span
|
Chris@1
|
2201 class="cmtt-8"> [length]</span><span
|
Chris@1
|
2202 class="cmtt-8"> =</span><span
|
Chris@1
|
2203 class="cmtt-8"> read</span><span
|
Chris@1
|
2204 class="cmtt-8"> a</span><span
|
Chris@1
|
2205 class="cmtt-8"> five</span><span
|
Chris@1
|
2206 class="cmtt-8"> bit</span><span
|
Chris@1
|
2207 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2208 class="cmtt-8"> integer;</span>
|
Chris@1
|
2209 <br class="fancyvrb" /><a
|
Chris@1
|
2210 id="x1-51046r8"></a><span
|
Chris@1
|
2211 class="cmr-6">8</span><span
|
Chris@1
|
2212 class="cmtt-8"> </span><span
|
Chris@1
|
2213 class="cmtt-8"> </span><span
|
Chris@1
|
2214 class="cmtt-8"> </span><span
|
Chris@1
|
2215 class="cmtt-8"> </span><span
|
Chris@1
|
2216 class="cmtt-8"> </span><span
|
Chris@1
|
2217 class="cmtt-8"> </span><span
|
Chris@1
|
2218 class="cmtt-8"> </span><span
|
Chris@1
|
2219 class="cmtt-8"> </span><span
|
Chris@1
|
2220 class="cmtt-8"> </span><span
|
Chris@1
|
2221 class="cmtt-8"> </span><span
|
Chris@1
|
2222 class="cmtt-8"> </span><span
|
Chris@1
|
2223 class="cmtt-8"> </span><span
|
Chris@1
|
2224 class="cmtt-8"> </span><span
|
Chris@1
|
2225 class="cmtt-8"> </span><span
|
Chris@1
|
2226 class="cmtt-8"> </span><span
|
Chris@1
|
2227 class="cmtt-8"> 5)</span><span
|
Chris@1
|
2228 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2229 class="cmtt-8"> length</span><span
|
Chris@1
|
2230 class="cmtt-8"> for</span><span
|
Chris@1
|
2231 class="cmtt-8"> this</span><span
|
Chris@1
|
2232 class="cmtt-8"> entry</span><span
|
Chris@1
|
2233 class="cmtt-8"> is</span><span
|
Chris@1
|
2234 class="cmtt-8"> [length]+1;</span>
|
Chris@1
|
2235 <br class="fancyvrb" /><a
|
Chris@1
|
2236 id="x1-51048r9"></a><span
|
Chris@1
|
2237 class="cmr-6">9</span><span
|
Chris@1
|
2238 class="cmtt-8"> </span><span
|
Chris@1
|
2239 class="cmtt-8"> </span>
|
Chris@1
|
2240 <br class="fancyvrb" /><a
|
Chris@1
|
2241 id="x1-51050r10"></a><span
|
Chris@1
|
2242 class="cmr-6">10</span><span
|
Chris@1
|
2243 class="cmtt-8"> </span><span
|
Chris@1
|
2244 class="cmtt-8"> </span><span
|
Chris@1
|
2245 class="cmtt-8"> </span><span
|
Chris@1
|
2246 class="cmtt-8"> </span><span
|
Chris@1
|
2247 class="cmtt-8"> </span><span
|
Chris@1
|
2248 class="cmtt-8"> </span><span
|
Chris@1
|
2249 class="cmtt-8"> </span><span
|
Chris@1
|
2250 class="cmtt-8"> </span><span
|
Chris@1
|
2251 class="cmtt-8"> </span><span
|
Chris@1
|
2252 class="cmtt-8"> </span><span
|
Chris@1
|
2253 class="cmtt-8"> </span><span
|
Chris@1
|
2254 class="cmtt-8"> </span><span
|
Chris@1
|
2255 class="cmtt-8"> </span><span
|
Chris@1
|
2256 class="cmtt-8"> </span><span
|
Chris@1
|
2257 class="cmsy-8">}</span><span
|
Chris@1
|
2258 class="cmtt-8"> else</span><span
|
Chris@1
|
2259 class="cmtt-8"> </span><span
|
Chris@1
|
2260 class="cmsy-8">{</span>
|
Chris@1
|
2261 <br class="fancyvrb" /><a
|
Chris@1
|
2262 id="x1-51052r11"></a><span
|
Chris@1
|
2263 class="cmr-6">11</span><span
|
Chris@1
|
2264 class="cmtt-8"> </span><span
|
Chris@1
|
2265 class="cmtt-8"> </span>
|
Chris@1
|
2266 <br class="fancyvrb" /><a
|
Chris@1
|
2267 id="x1-51054r12"></a><span
|
Chris@1
|
2268 class="cmr-6">12</span><span
|
Chris@1
|
2269 class="cmtt-8"> </span><span
|
Chris@1
|
2270 class="cmtt-8"> </span><span
|
Chris@1
|
2271 class="cmtt-8"> </span><span
|
Chris@1
|
2272 class="cmtt-8"> </span><span
|
Chris@1
|
2273 class="cmtt-8"> </span><span
|
Chris@1
|
2274 class="cmtt-8"> </span><span
|
Chris@1
|
2275 class="cmtt-8"> </span><span
|
Chris@1
|
2276 class="cmtt-8"> </span><span
|
Chris@1
|
2277 class="cmtt-8"> </span><span
|
Chris@1
|
2278 class="cmtt-8"> </span><span
|
Chris@1
|
2279 class="cmtt-8"> </span><span
|
Chris@1
|
2280 class="cmtt-8"> </span><span
|
Chris@1
|
2281 class="cmtt-8"> </span><span
|
Chris@1
|
2282 class="cmtt-8"> </span><span
|
Chris@1
|
2283 class="cmtt-8"> </span><span
|
Chris@1
|
2284 class="cmtt-8"> 6)</span><span
|
Chris@1
|
2285 class="cmtt-8"> this</span><span
|
Chris@1
|
2286 class="cmtt-8"> entry</span><span
|
Chris@1
|
2287 class="cmtt-8"> is</span><span
|
Chris@1
|
2288 class="cmtt-8"> unused.</span><span
|
Chris@1
|
2289 class="cmtt-8"> </span><span
|
Chris@1
|
2290 class="cmtt-8"> mark</span><span
|
Chris@1
|
2291 class="cmtt-8"> it</span><span
|
Chris@1
|
2292 class="cmtt-8"> as</span><span
|
Chris@1
|
2293 class="cmtt-8"> such.</span>
|
Chris@1
|
2294 <br class="fancyvrb" /><a
|
Chris@1
|
2295 id="x1-51056r13"></a><span
|
Chris@1
|
2296 class="cmr-6">13</span><span
|
Chris@1
|
2297 class="cmtt-8"> </span><span
|
Chris@1
|
2298 class="cmtt-8"> </span>
|
Chris@1
|
2299 <br class="fancyvrb" /><a
|
Chris@1
|
2300 id="x1-51058r14"></a><span
|
Chris@1
|
2301 class="cmr-6">14</span><span
|
Chris@1
|
2302 class="cmtt-8"> </span><span
|
Chris@1
|
2303 class="cmtt-8"> </span><span
|
Chris@1
|
2304 class="cmtt-8"> </span><span
|
Chris@1
|
2305 class="cmtt-8"> </span><span
|
Chris@1
|
2306 class="cmtt-8"> </span><span
|
Chris@1
|
2307 class="cmtt-8"> </span><span
|
Chris@1
|
2308 class="cmtt-8"> </span><span
|
Chris@1
|
2309 class="cmtt-8"> </span><span
|
Chris@1
|
2310 class="cmtt-8"> </span><span
|
Chris@1
|
2311 class="cmtt-8"> </span><span
|
Chris@1
|
2312 class="cmtt-8"> </span><span
|
Chris@1
|
2313 class="cmtt-8"> </span><span
|
Chris@1
|
2314 class="cmtt-8"> </span><span
|
Chris@1
|
2315 class="cmtt-8"> </span><span
|
Chris@1
|
2316 class="cmsy-8">}</span>
|
Chris@1
|
2317 <br class="fancyvrb" /><a
|
Chris@1
|
2318 id="x1-51060r15"></a><span
|
Chris@1
|
2319 class="cmr-6">15</span><span
|
Chris@1
|
2320 class="cmtt-8"> </span><span
|
Chris@1
|
2321 class="cmtt-8"> </span>
|
Chris@1
|
2322 <br class="fancyvrb" /><a
|
Chris@1
|
2323 id="x1-51062r16"></a><span
|
Chris@1
|
2324 class="cmr-6">16</span><span
|
Chris@1
|
2325 class="cmtt-8"> </span><span
|
Chris@1
|
2326 class="cmtt-8"> </span><span
|
Chris@1
|
2327 class="cmtt-8"> </span><span
|
Chris@1
|
2328 class="cmtt-8"> </span><span
|
Chris@1
|
2329 class="cmtt-8"> </span><span
|
Chris@1
|
2330 class="cmtt-8"> </span><span
|
Chris@1
|
2331 class="cmtt-8"> </span><span
|
Chris@1
|
2332 class="cmsy-8">}</span><span
|
Chris@1
|
2333 class="cmtt-8"> else</span><span
|
Chris@1
|
2334 class="cmtt-8"> the</span><span
|
Chris@1
|
2335 class="cmtt-8"> sparse</span><span
|
Chris@1
|
2336 class="cmtt-8"> flag</span><span
|
Chris@1
|
2337 class="cmtt-8"> is</span><span
|
Chris@1
|
2338 class="cmtt-8"> not</span><span
|
Chris@1
|
2339 class="cmtt-8"> set</span><span
|
Chris@1
|
2340 class="cmtt-8"> </span><span
|
Chris@1
|
2341 class="cmsy-8">{</span>
|
Chris@1
|
2342 <br class="fancyvrb" /><a
|
Chris@1
|
2343 id="x1-51064r17"></a><span
|
Chris@1
|
2344 class="cmr-6">17</span><span
|
Chris@1
|
2345 class="cmtt-8"> </span><span
|
Chris@1
|
2346 class="cmtt-8"> </span>
|
Chris@1
|
2347 <br class="fancyvrb" /><a
|
Chris@1
|
2348 id="x1-51066r18"></a><span
|
Chris@1
|
2349 class="cmr-6">18</span><span
|
Chris@1
|
2350 class="cmtt-8"> </span><span
|
Chris@1
|
2351 class="cmtt-8"> </span><span
|
Chris@1
|
2352 class="cmtt-8"> </span><span
|
Chris@1
|
2353 class="cmtt-8"> </span><span
|
Chris@1
|
2354 class="cmtt-8"> </span><span
|
Chris@1
|
2355 class="cmtt-8"> </span><span
|
Chris@1
|
2356 class="cmtt-8"> </span><span
|
Chris@1
|
2357 class="cmtt-8"> </span><span
|
Chris@1
|
2358 class="cmtt-8"> </span><span
|
Chris@1
|
2359 class="cmtt-8"> 7)</span><span
|
Chris@1
|
2360 class="cmtt-8"> [length]</span><span
|
Chris@1
|
2361 class="cmtt-8"> =</span><span
|
Chris@1
|
2362 class="cmtt-8"> read</span><span
|
Chris@1
|
2363 class="cmtt-8"> a</span><span
|
Chris@1
|
2364 class="cmtt-8"> five</span><span
|
Chris@1
|
2365 class="cmtt-8"> bit</span><span
|
Chris@1
|
2366 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2367 class="cmtt-8"> integer;</span>
|
Chris@1
|
2368 <br class="fancyvrb" /><a
|
Chris@1
|
2369 id="x1-51068r19"></a><span
|
Chris@1
|
2370 class="cmr-6">19</span><span
|
Chris@1
|
2371 class="cmtt-8"> </span><span
|
Chris@1
|
2372 class="cmtt-8"> </span><span
|
Chris@1
|
2373 class="cmtt-8"> </span><span
|
Chris@1
|
2374 class="cmtt-8"> </span><span
|
Chris@1
|
2375 class="cmtt-8"> </span><span
|
Chris@1
|
2376 class="cmtt-8"> </span><span
|
Chris@1
|
2377 class="cmtt-8"> </span><span
|
Chris@1
|
2378 class="cmtt-8"> </span><span
|
Chris@1
|
2379 class="cmtt-8"> </span><span
|
Chris@1
|
2380 class="cmtt-8"> 8)</span><span
|
Chris@1
|
2381 class="cmtt-8"> the</span><span
|
Chris@1
|
2382 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2383 class="cmtt-8"> length</span><span
|
Chris@1
|
2384 class="cmtt-8"> for</span><span
|
Chris@1
|
2385 class="cmtt-8"> this</span><span
|
Chris@1
|
2386 class="cmtt-8"> entry</span><span
|
Chris@1
|
2387 class="cmtt-8"> is</span><span
|
Chris@1
|
2388 class="cmtt-8"> [length]+1;</span>
|
Chris@1
|
2389 <br class="fancyvrb" /><a
|
Chris@1
|
2390 id="x1-51070r20"></a><span
|
Chris@1
|
2391 class="cmr-6">20</span><span
|
Chris@1
|
2392 class="cmtt-8"> </span><span
|
Chris@1
|
2393 class="cmtt-8"> </span>
|
Chris@1
|
2394 <br class="fancyvrb" /><a
|
Chris@1
|
2395 id="x1-51072r21"></a><span
|
Chris@1
|
2396 class="cmr-6">21</span><span
|
Chris@1
|
2397 class="cmtt-8"> </span><span
|
Chris@1
|
2398 class="cmtt-8"> </span><span
|
Chris@1
|
2399 class="cmtt-8"> </span><span
|
Chris@1
|
2400 class="cmtt-8"> </span><span
|
Chris@1
|
2401 class="cmtt-8"> </span><span
|
Chris@1
|
2402 class="cmtt-8"> </span><span
|
Chris@1
|
2403 class="cmtt-8"> </span><span
|
Chris@1
|
2404 class="cmsy-8">}</span>
|
Chris@1
|
2405 <br class="fancyvrb" /><a
|
Chris@1
|
2406 id="x1-51074r22"></a><span
|
Chris@1
|
2407 class="cmr-6">22</span><span
|
Chris@1
|
2408 class="cmtt-8"> </span><span
|
Chris@1
|
2409 class="cmtt-8"> </span>
|
Chris@1
|
2410 </div>
|
Chris@1
|
2411 </li>
|
Chris@1
|
2412 <li class="itemize">If the <span
|
Chris@1
|
2413 class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
|
Chris@1
|
2414 ascending length order. Rather than reading a length for every codeword, the
|
Chris@1
|
2415 encoder reads the number of codewords per length. That is, beginning at entry
|
Chris@1
|
2416 zero:
|
Chris@1
|
2417 <!--l. 120--><p class="noindent" >
|
Chris@1
|
2418 <div class="fancyvrb" id="fancyvrb12">
|
Chris@1
|
2419 <a
|
Chris@1
|
2420 id="x1-51076r1"></a><span
|
Chris@1
|
2421 class="cmr-6">1</span><span
|
Chris@1
|
2422 class="cmtt-8"> </span><span
|
Chris@1
|
2423 class="cmtt-8"> </span><span
|
Chris@1
|
2424 class="cmtt-8"> </span><span
|
Chris@1
|
2425 class="cmtt-8"> 1)</span><span
|
Chris@1
|
2426 class="cmtt-8"> [current_entry]</span><span
|
Chris@1
|
2427 class="cmtt-8"> =</span><span
|
Chris@1
|
2428 class="cmtt-8"> 0;</span>
|
Chris@1
|
2429 <br class="fancyvrb" /><a
|
Chris@1
|
2430 id="x1-51078r2"></a><span
|
Chris@1
|
2431 class="cmr-6">2</span><span
|
Chris@1
|
2432 class="cmtt-8"> </span><span
|
Chris@1
|
2433 class="cmtt-8"> </span><span
|
Chris@1
|
2434 class="cmtt-8"> </span><span
|
Chris@1
|
2435 class="cmtt-8"> 2)</span><span
|
Chris@1
|
2436 class="cmtt-8"> [current_length]</span><span
|
Chris@1
|
2437 class="cmtt-8"> =</span><span
|
Chris@1
|
2438 class="cmtt-8"> read</span><span
|
Chris@1
|
2439 class="cmtt-8"> a</span><span
|
Chris@1
|
2440 class="cmtt-8"> five</span><span
|
Chris@1
|
2441 class="cmtt-8"> bit</span><span
|
Chris@1
|
2442 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2443 class="cmtt-8"> integer</span><span
|
Chris@1
|
2444 class="cmtt-8"> and</span><span
|
Chris@1
|
2445 class="cmtt-8"> add</span><span
|
Chris@1
|
2446 class="cmtt-8"> 1;</span>
|
Chris@1
|
2447 <br class="fancyvrb" /><a
|
Chris@1
|
2448 id="x1-51080r3"></a><span
|
Chris@1
|
2449 class="cmr-6">3</span><span
|
Chris@1
|
2450 class="cmtt-8"> </span><span
|
Chris@1
|
2451 class="cmtt-8"> </span><span
|
Chris@1
|
2452 class="cmtt-8"> </span><span
|
Chris@1
|
2453 class="cmtt-8"> 3)</span><span
|
Chris@1
|
2454 class="cmtt-8"> [number]</span><span
|
Chris@1
|
2455 class="cmtt-8"> =</span><span
|
Chris@1
|
2456 class="cmtt-8"> read</span><span
|
Chris@1
|
2457 class="cmtt-8"> </span><a
|
Chris@1
|
2458 href="#x1-1170009.2.1"><span
|
Chris@1
|
2459 class="cmtt-8">ilog</span></a><span
|
Chris@1
|
2460 class="cmtt-8">([codebook_entries]</span><span
|
Chris@1
|
2461 class="cmtt-8"> -</span><span
|
Chris@1
|
2462 class="cmtt-8"> [current_entry])</span><span
|
Chris@1
|
2463 class="cmtt-8"> bits</span><span
|
Chris@1
|
2464 class="cmtt-8"> as</span><span
|
Chris@1
|
2465 class="cmtt-8"> an</span><span
|
Chris@1
|
2466 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2467 class="cmtt-8"> integer</span>
|
Chris@1
|
2468 <br class="fancyvrb" /><a
|
Chris@1
|
2469 id="x1-51082r4"></a><span
|
Chris@1
|
2470 class="cmr-6">4</span><span
|
Chris@1
|
2471 class="cmtt-8"> </span><span
|
Chris@1
|
2472 class="cmtt-8"> </span><span
|
Chris@1
|
2473 class="cmtt-8"> </span><span
|
Chris@1
|
2474 class="cmtt-8"> 4)</span><span
|
Chris@1
|
2475 class="cmtt-8"> set</span><span
|
Chris@1
|
2476 class="cmtt-8"> the</span><span
|
Chris@1
|
2477 class="cmtt-8"> entries</span><span
|
Chris@1
|
2478 class="cmtt-8"> [current_entry]</span><span
|
Chris@1
|
2479 class="cmtt-8"> through</span><span
|
Chris@1
|
2480 class="cmtt-8"> [current_entry]+[number]-1,</span><span
|
Chris@1
|
2481 class="cmtt-8"> inclusive,</span>
|
Chris@1
|
2482 <br class="fancyvrb" /><a
|
Chris@1
|
2483 id="x1-51084r5"></a><span
|
Chris@1
|
2484 class="cmr-6">5</span><span
|
Chris@1
|
2485 class="cmtt-8"> </span><span
|
Chris@1
|
2486 class="cmtt-8"> </span><span
|
Chris@1
|
2487 class="cmtt-8"> </span><span
|
Chris@1
|
2488 class="cmtt-8"> </span><span
|
Chris@1
|
2489 class="cmtt-8"> </span><span
|
Chris@1
|
2490 class="cmtt-8"> of</span><span
|
Chris@1
|
2491 class="cmtt-8"> the</span><span
|
Chris@1
|
2492 class="cmtt-8"> [codebook_codeword_lengths]</span><span
|
Chris@1
|
2493 class="cmtt-8"> array</span><span
|
Chris@1
|
2494 class="cmtt-8"> to</span><span
|
Chris@1
|
2495 class="cmtt-8"> [current_length]</span>
|
Chris@1
|
2496 <br class="fancyvrb" /><a
|
Chris@1
|
2497 id="x1-51086r6"></a><span
|
Chris@1
|
2498 class="cmr-6">6</span><span
|
Chris@1
|
2499 class="cmtt-8"> </span><span
|
Chris@1
|
2500 class="cmtt-8"> </span><span
|
Chris@1
|
2501 class="cmtt-8"> </span><span
|
Chris@1
|
2502 class="cmtt-8"> 5)</span><span
|
Chris@1
|
2503 class="cmtt-8"> set</span><span
|
Chris@1
|
2504 class="cmtt-8"> [current_entry]</span><span
|
Chris@1
|
2505 class="cmtt-8"> to</span><span
|
Chris@1
|
2506 class="cmtt-8"> [number]</span><span
|
Chris@1
|
2507 class="cmtt-8"> +</span><span
|
Chris@1
|
2508 class="cmtt-8"> [current_entry]</span>
|
Chris@1
|
2509 <br class="fancyvrb" /><a
|
Chris@1
|
2510 id="x1-51088r7"></a><span
|
Chris@1
|
2511 class="cmr-6">7</span><span
|
Chris@1
|
2512 class="cmtt-8"> </span><span
|
Chris@1
|
2513 class="cmtt-8"> </span><span
|
Chris@1
|
2514 class="cmtt-8"> </span><span
|
Chris@1
|
2515 class="cmtt-8"> 6)</span><span
|
Chris@1
|
2516 class="cmtt-8"> increment</span><span
|
Chris@1
|
2517 class="cmtt-8"> [current_length]</span><span
|
Chris@1
|
2518 class="cmtt-8"> by</span><span
|
Chris@1
|
2519 class="cmtt-8"> 1</span>
|
Chris@1
|
2520 <br class="fancyvrb" /><a
|
Chris@1
|
2521 id="x1-51090r8"></a><span
|
Chris@1
|
2522 class="cmr-6">8</span><span
|
Chris@1
|
2523 class="cmtt-8"> </span><span
|
Chris@1
|
2524 class="cmtt-8"> </span><span
|
Chris@1
|
2525 class="cmtt-8"> </span><span
|
Chris@1
|
2526 class="cmtt-8"> 7)</span><span
|
Chris@1
|
2527 class="cmtt-8"> if</span><span
|
Chris@1
|
2528 class="cmtt-8"> [current_entry]</span><span
|
Chris@1
|
2529 class="cmtt-8"> is</span><span
|
Chris@1
|
2530 class="cmtt-8"> greater</span><span
|
Chris@1
|
2531 class="cmtt-8"> than</span><span
|
Chris@1
|
2532 class="cmtt-8"> [codebook_entries]</span><span
|
Chris@1
|
2533 class="cmtt-8"> ERROR</span><span
|
Chris@1
|
2534 class="cmtt-8"> CONDITION;</span>
|
Chris@1
|
2535 <br class="fancyvrb" /><a
|
Chris@1
|
2536 id="x1-51092r9"></a><span
|
Chris@1
|
2537 class="cmr-6">9</span><span
|
Chris@1
|
2538 class="cmtt-8"> </span><span
|
Chris@1
|
2539 class="cmtt-8"> </span><span
|
Chris@1
|
2540 class="cmtt-8"> </span><span
|
Chris@1
|
2541 class="cmtt-8"> </span><span
|
Chris@1
|
2542 class="cmtt-8"> </span><span
|
Chris@1
|
2543 class="cmtt-8"> the</span><span
|
Chris@1
|
2544 class="cmtt-8"> decoder</span><span
|
Chris@1
|
2545 class="cmtt-8"> will</span><span
|
Chris@1
|
2546 class="cmtt-8"> not</span><span
|
Chris@1
|
2547 class="cmtt-8"> be</span><span
|
Chris@1
|
2548 class="cmtt-8"> able</span><span
|
Chris@1
|
2549 class="cmtt-8"> to</span><span
|
Chris@1
|
2550 class="cmtt-8"> read</span><span
|
Chris@1
|
2551 class="cmtt-8"> this</span><span
|
Chris@1
|
2552 class="cmtt-8"> stream.</span>
|
Chris@1
|
2553 <br class="fancyvrb" /><a
|
Chris@1
|
2554 id="x1-51094r10"></a><span
|
Chris@1
|
2555 class="cmr-6">10</span><span
|
Chris@1
|
2556 class="cmtt-8"> </span><span
|
Chris@1
|
2557 class="cmtt-8"> </span><span
|
Chris@1
|
2558 class="cmtt-8"> </span><span
|
Chris@1
|
2559 class="cmtt-8"> 8)</span><span
|
Chris@1
|
2560 class="cmtt-8"> if</span><span
|
Chris@1
|
2561 class="cmtt-8"> [current_entry]</span><span
|
Chris@1
|
2562 class="cmtt-8"> is</span><span
|
Chris@1
|
2563 class="cmtt-8"> less</span><span
|
Chris@1
|
2564 class="cmtt-8"> than</span><span
|
Chris@1
|
2565 class="cmtt-8"> [codebook_entries],</span><span
|
Chris@1
|
2566 class="cmtt-8"> repeat</span><span
|
Chris@1
|
2567 class="cmtt-8"> process</span><span
|
Chris@1
|
2568 class="cmtt-8"> starting</span><span
|
Chris@1
|
2569 class="cmtt-8"> at</span><span
|
Chris@1
|
2570 class="cmtt-8"> 3)</span>
|
Chris@1
|
2571 <br class="fancyvrb" /><a
|
Chris@1
|
2572 id="x1-51096r11"></a><span
|
Chris@1
|
2573 class="cmr-6">11</span><span
|
Chris@1
|
2574 class="cmtt-8"> </span><span
|
Chris@1
|
2575 class="cmtt-8"> </span><span
|
Chris@1
|
2576 class="cmtt-8"> </span><span
|
Chris@1
|
2577 class="cmtt-8"> 9)</span><span
|
Chris@1
|
2578 class="cmtt-8"> done.</span>
|
Chris@1
|
2579
|
Chris@1
|
2580
|
Chris@1
|
2581
|
Chris@1
|
2582 </div>
|
Chris@1
|
2583 </li></ul>
|
Chris@1
|
2584 <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
|
Chris@1
|
2585 I supports three lookup types:
|
Chris@1
|
2586 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
2587 1. </dt><dd
|
Chris@1
|
2588 class="enumerate-enumitem">No lookup
|
Chris@1
|
2589 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
2590 2. </dt><dd
|
Chris@1
|
2591 class="enumerate-enumitem">Implicitly populated value mapping (lattice VQ)
|
Chris@1
|
2592 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
2593 3. </dt><dd
|
Chris@1
|
2594 class="enumerate-enumitem">Explicitly populated value mapping (tessellated or ’foam’ VQ)</dd></dl>
|
Chris@1
|
2595 <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
|
Chris@1
|
2596 <div class="fancyvrb" id="fancyvrb13">
|
Chris@1
|
2597 <a
|
Chris@1
|
2598 id="x1-51101r1"></a><span
|
Chris@1
|
2599 class="cmr-6">1</span><span
|
Chris@1
|
2600 class="cmtt-8"> </span><span
|
Chris@1
|
2601 class="cmtt-8"> </span><span
|
Chris@1
|
2602 class="cmtt-8"> </span><span
|
Chris@1
|
2603 class="cmtt-8"> 1)</span><span
|
Chris@1
|
2604 class="cmtt-8"> [codebook_lookup_type]</span><span
|
Chris@1
|
2605 class="cmtt-8"> =</span><span
|
Chris@1
|
2606 class="cmtt-8"> read</span><span
|
Chris@1
|
2607 class="cmtt-8"> four</span><span
|
Chris@1
|
2608 class="cmtt-8"> bits</span><span
|
Chris@1
|
2609 class="cmtt-8"> as</span><span
|
Chris@1
|
2610 class="cmtt-8"> an</span><span
|
Chris@1
|
2611 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2612 class="cmtt-8"> integer</span>
|
Chris@1
|
2613 </div>
|
Chris@1
|
2614 <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span
|
Chris@1
|
2615 class="cmtt-12">[codebook_lookup_type]</span>:
|
Chris@1
|
2616 <ul class="itemize1">
|
Chris@1
|
2617 <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
|
Chris@1
|
2618 </li>
|
Chris@1
|
2619 <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
|
Chris@1
|
2620 be read. Lookup type one reads a list of values that are permuted in a set pattern to
|
Chris@1
|
2621 build a list of vectors, each vector of order <span
|
Chris@1
|
2622 class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
|
Chris@1
|
2623 type two builds the same vector list, but reads each scalar for each vector explicitly,
|
Chris@1
|
2624 rather than building vectors from a smaller list of possible scalar values. Lookup
|
Chris@1
|
2625 decode proceeds as follows:
|
Chris@1
|
2626 <!--l. 168--><p class="noindent" >
|
Chris@1
|
2627 <div class="fancyvrb" id="fancyvrb14">
|
Chris@1
|
2628 <a
|
Chris@1
|
2629 id="x1-51103r1"></a><span
|
Chris@1
|
2630 class="cmr-6">1</span><span
|
Chris@1
|
2631 class="cmtt-8"> </span><span
|
Chris@1
|
2632 class="cmtt-8"> </span><span
|
Chris@1
|
2633 class="cmtt-8"> </span><span
|
Chris@1
|
2634 class="cmtt-8"> 1)</span><span
|
Chris@1
|
2635 class="cmtt-8"> [codebook_minimum_value]</span><span
|
Chris@1
|
2636 class="cmtt-8"> =</span><span
|
Chris@1
|
2637 class="cmtt-8"> </span><a
|
Chris@1
|
2638 href="#x1-1180009.2.2"><span
|
Chris@1
|
2639 class="cmtt-8">float32_unpack</span></a><span
|
Chris@1
|
2640 class="cmtt-8">(</span><span
|
Chris@1
|
2641 class="cmtt-8"> read</span><span
|
Chris@1
|
2642 class="cmtt-8"> 32</span><span
|
Chris@1
|
2643 class="cmtt-8"> bits</span><span
|
Chris@1
|
2644 class="cmtt-8"> as</span><span
|
Chris@1
|
2645 class="cmtt-8"> an</span><span
|
Chris@1
|
2646 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2647 class="cmtt-8"> integer)</span>
|
Chris@1
|
2648 <br class="fancyvrb" /><a
|
Chris@1
|
2649 id="x1-51105r2"></a><span
|
Chris@1
|
2650 class="cmr-6">2</span><span
|
Chris@1
|
2651 class="cmtt-8"> </span><span
|
Chris@1
|
2652 class="cmtt-8"> </span><span
|
Chris@1
|
2653 class="cmtt-8"> </span><span
|
Chris@1
|
2654 class="cmtt-8"> 2)</span><span
|
Chris@1
|
2655 class="cmtt-8"> [codebook_delta_value]</span><span
|
Chris@1
|
2656 class="cmtt-8"> =</span><span
|
Chris@1
|
2657 class="cmtt-8"> </span><a
|
Chris@1
|
2658 href="#x1-1180009.2.2"><span
|
Chris@1
|
2659 class="cmtt-8">float32_unpack</span></a><span
|
Chris@1
|
2660 class="cmtt-8">(</span><span
|
Chris@1
|
2661 class="cmtt-8"> read</span><span
|
Chris@1
|
2662 class="cmtt-8"> 32</span><span
|
Chris@1
|
2663 class="cmtt-8"> bits</span><span
|
Chris@1
|
2664 class="cmtt-8"> as</span><span
|
Chris@1
|
2665 class="cmtt-8"> an</span><span
|
Chris@1
|
2666 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2667 class="cmtt-8"> integer)</span>
|
Chris@1
|
2668 <br class="fancyvrb" /><a
|
Chris@1
|
2669 id="x1-51107r3"></a><span
|
Chris@1
|
2670 class="cmr-6">3</span><span
|
Chris@1
|
2671 class="cmtt-8"> </span><span
|
Chris@1
|
2672 class="cmtt-8"> </span><span
|
Chris@1
|
2673 class="cmtt-8"> </span><span
|
Chris@1
|
2674 class="cmtt-8"> 3)</span><span
|
Chris@1
|
2675 class="cmtt-8"> [codebook_value_bits]</span><span
|
Chris@1
|
2676 class="cmtt-8"> =</span><span
|
Chris@1
|
2677 class="cmtt-8"> read</span><span
|
Chris@1
|
2678 class="cmtt-8"> 4</span><span
|
Chris@1
|
2679 class="cmtt-8"> bits</span><span
|
Chris@1
|
2680 class="cmtt-8"> as</span><span
|
Chris@1
|
2681 class="cmtt-8"> an</span><span
|
Chris@1
|
2682 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2683 class="cmtt-8"> integer</span><span
|
Chris@1
|
2684 class="cmtt-8"> and</span><span
|
Chris@1
|
2685 class="cmtt-8"> add</span><span
|
Chris@1
|
2686 class="cmtt-8"> 1</span>
|
Chris@1
|
2687 <br class="fancyvrb" /><a
|
Chris@1
|
2688 id="x1-51109r4"></a><span
|
Chris@1
|
2689 class="cmr-6">4</span><span
|
Chris@1
|
2690 class="cmtt-8"> </span><span
|
Chris@1
|
2691 class="cmtt-8"> </span><span
|
Chris@1
|
2692 class="cmtt-8"> </span><span
|
Chris@1
|
2693 class="cmtt-8"> 4)</span><span
|
Chris@1
|
2694 class="cmtt-8"> [codebook_sequence_p]</span><span
|
Chris@1
|
2695 class="cmtt-8"> =</span><span
|
Chris@1
|
2696 class="cmtt-8"> read</span><span
|
Chris@1
|
2697 class="cmtt-8"> 1</span><span
|
Chris@1
|
2698 class="cmtt-8"> bit</span><span
|
Chris@1
|
2699 class="cmtt-8"> as</span><span
|
Chris@1
|
2700 class="cmtt-8"> a</span><span
|
Chris@1
|
2701 class="cmtt-8"> boolean</span><span
|
Chris@1
|
2702 class="cmtt-8"> flag</span>
|
Chris@1
|
2703 <br class="fancyvrb" /><a
|
Chris@1
|
2704 id="x1-51111r5"></a><span
|
Chris@1
|
2705 class="cmr-6">5</span><span
|
Chris@1
|
2706 class="cmtt-8"> </span><span
|
Chris@1
|
2707 class="cmtt-8"> </span>
|
Chris@1
|
2708 <br class="fancyvrb" /><a
|
Chris@1
|
2709 id="x1-51113r6"></a><span
|
Chris@1
|
2710 class="cmr-6">6</span><span
|
Chris@1
|
2711 class="cmtt-8"> </span><span
|
Chris@1
|
2712 class="cmtt-8"> </span><span
|
Chris@1
|
2713 class="cmtt-8"> </span><span
|
Chris@1
|
2714 class="cmtt-8"> if</span><span
|
Chris@1
|
2715 class="cmtt-8"> (</span><span
|
Chris@1
|
2716 class="cmtt-8"> [codebook_lookup_type]</span><span
|
Chris@1
|
2717 class="cmtt-8"> is</span><span
|
Chris@1
|
2718 class="cmtt-8"> 1</span><span
|
Chris@1
|
2719 class="cmtt-8"> )</span><span
|
Chris@1
|
2720 class="cmtt-8"> </span><span
|
Chris@1
|
2721 class="cmsy-8">{</span>
|
Chris@1
|
2722 <br class="fancyvrb" /><a
|
Chris@1
|
2723 id="x1-51115r7"></a><span
|
Chris@1
|
2724 class="cmr-6">7</span><span
|
Chris@1
|
2725 class="cmtt-8"> </span><span
|
Chris@1
|
2726 class="cmtt-8"> </span>
|
Chris@1
|
2727 <br class="fancyvrb" /><a
|
Chris@1
|
2728 id="x1-51117r8"></a><span
|
Chris@1
|
2729 class="cmr-6">8</span><span
|
Chris@1
|
2730 class="cmtt-8"> </span><span
|
Chris@1
|
2731 class="cmtt-8"> </span><span
|
Chris@1
|
2732 class="cmtt-8"> </span><span
|
Chris@1
|
2733 class="cmtt-8"> </span><span
|
Chris@1
|
2734 class="cmtt-8"> </span><span
|
Chris@1
|
2735 class="cmtt-8"> </span><span
|
Chris@1
|
2736 class="cmtt-8"> 5)</span><span
|
Chris@1
|
2737 class="cmtt-8"> [codebook_lookup_values]</span><span
|
Chris@1
|
2738 class="cmtt-8"> =</span><span
|
Chris@1
|
2739 class="cmtt-8"> </span><a
|
Chris@1
|
2740 href="#x1-1190009.2.3"><span
|
Chris@1
|
2741 class="cmtt-8">lookup1_values</span></a><span
|
Chris@1
|
2742 class="cmtt-8">([codebook_entries],</span><span
|
Chris@1
|
2743 class="cmtt-8"> [codebook_dimensions]</span><span
|
Chris@1
|
2744 class="cmtt-8"> )</span>
|
Chris@1
|
2745 <br class="fancyvrb" /><a
|
Chris@1
|
2746 id="x1-51119r9"></a><span
|
Chris@1
|
2747 class="cmr-6">9</span><span
|
Chris@1
|
2748 class="cmtt-8"> </span><span
|
Chris@1
|
2749 class="cmtt-8"> </span>
|
Chris@1
|
2750 <br class="fancyvrb" /><a
|
Chris@1
|
2751 id="x1-51121r10"></a><span
|
Chris@1
|
2752 class="cmr-6">10</span><span
|
Chris@1
|
2753 class="cmtt-8"> </span><span
|
Chris@1
|
2754 class="cmtt-8"> </span><span
|
Chris@1
|
2755 class="cmtt-8"> </span><span
|
Chris@1
|
2756 class="cmtt-8"> </span><span
|
Chris@1
|
2757 class="cmsy-8">}</span><span
|
Chris@1
|
2758 class="cmtt-8"> else</span><span
|
Chris@1
|
2759 class="cmtt-8"> </span><span
|
Chris@1
|
2760 class="cmsy-8">{</span>
|
Chris@1
|
2761 <br class="fancyvrb" /><a
|
Chris@1
|
2762 id="x1-51123r11"></a><span
|
Chris@1
|
2763 class="cmr-6">11</span><span
|
Chris@1
|
2764 class="cmtt-8"> </span><span
|
Chris@1
|
2765 class="cmtt-8"> </span>
|
Chris@1
|
2766 <br class="fancyvrb" /><a
|
Chris@1
|
2767 id="x1-51125r12"></a><span
|
Chris@1
|
2768 class="cmr-6">12</span><span
|
Chris@1
|
2769 class="cmtt-8"> </span><span
|
Chris@1
|
2770 class="cmtt-8"> </span><span
|
Chris@1
|
2771 class="cmtt-8"> </span><span
|
Chris@1
|
2772 class="cmtt-8"> </span><span
|
Chris@1
|
2773 class="cmtt-8"> </span><span
|
Chris@1
|
2774 class="cmtt-8"> </span><span
|
Chris@1
|
2775 class="cmtt-8"> 6)</span><span
|
Chris@1
|
2776 class="cmtt-8"> [codebook_lookup_values]</span><span
|
Chris@1
|
2777 class="cmtt-8"> =</span><span
|
Chris@1
|
2778 class="cmtt-8"> [codebook_entries]</span><span
|
Chris@1
|
2779 class="cmtt-8"> *</span><span
|
Chris@1
|
2780 class="cmtt-8"> [codebook_dimensions]</span>
|
Chris@1
|
2781 <br class="fancyvrb" /><a
|
Chris@1
|
2782 id="x1-51127r13"></a><span
|
Chris@1
|
2783 class="cmr-6">13</span><span
|
Chris@1
|
2784 class="cmtt-8"> </span><span
|
Chris@1
|
2785 class="cmtt-8"> </span>
|
Chris@1
|
2786 <br class="fancyvrb" /><a
|
Chris@1
|
2787 id="x1-51129r14"></a><span
|
Chris@1
|
2788 class="cmr-6">14</span><span
|
Chris@1
|
2789 class="cmtt-8"> </span><span
|
Chris@1
|
2790 class="cmtt-8"> </span><span
|
Chris@1
|
2791 class="cmtt-8"> </span><span
|
Chris@1
|
2792 class="cmtt-8"> </span><span
|
Chris@1
|
2793 class="cmsy-8">}</span>
|
Chris@1
|
2794 <br class="fancyvrb" /><a
|
Chris@1
|
2795 id="x1-51131r15"></a><span
|
Chris@1
|
2796 class="cmr-6">15</span><span
|
Chris@1
|
2797 class="cmtt-8"> </span><span
|
Chris@1
|
2798 class="cmtt-8"> </span>
|
Chris@1
|
2799 <br class="fancyvrb" /><a
|
Chris@1
|
2800 id="x1-51133r16"></a><span
|
Chris@1
|
2801 class="cmr-6">16</span><span
|
Chris@1
|
2802 class="cmtt-8"> </span><span
|
Chris@1
|
2803 class="cmtt-8"> </span><span
|
Chris@1
|
2804 class="cmtt-8"> </span><span
|
Chris@1
|
2805 class="cmtt-8"> 7)</span><span
|
Chris@1
|
2806 class="cmtt-8"> read</span><span
|
Chris@1
|
2807 class="cmtt-8"> a</span><span
|
Chris@1
|
2808 class="cmtt-8"> total</span><span
|
Chris@1
|
2809 class="cmtt-8"> of</span><span
|
Chris@1
|
2810 class="cmtt-8"> [codebook_lookup_values]</span><span
|
Chris@1
|
2811 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
2812 class="cmtt-8"> integers</span><span
|
Chris@1
|
2813 class="cmtt-8"> of</span><span
|
Chris@1
|
2814 class="cmtt-8"> [codebook_value_bits]</span><span
|
Chris@1
|
2815 class="cmtt-8"> each;</span>
|
Chris@1
|
2816
|
Chris@1
|
2817
|
Chris@1
|
2818
|
Chris@1
|
2819 <br class="fancyvrb" /><a
|
Chris@1
|
2820 id="x1-51135r17"></a><span
|
Chris@1
|
2821 class="cmr-6">17</span><span
|
Chris@1
|
2822 class="cmtt-8"> </span><span
|
Chris@1
|
2823 class="cmtt-8"> </span><span
|
Chris@1
|
2824 class="cmtt-8"> </span><span
|
Chris@1
|
2825 class="cmtt-8"> </span><span
|
Chris@1
|
2826 class="cmtt-8"> </span><span
|
Chris@1
|
2827 class="cmtt-8"> </span><span
|
Chris@1
|
2828 class="cmtt-8"> store</span><span
|
Chris@1
|
2829 class="cmtt-8"> these</span><span
|
Chris@1
|
2830 class="cmtt-8"> in</span><span
|
Chris@1
|
2831 class="cmtt-8"> order</span><span
|
Chris@1
|
2832 class="cmtt-8"> in</span><span
|
Chris@1
|
2833 class="cmtt-8"> the</span><span
|
Chris@1
|
2834 class="cmtt-8"> array</span><span
|
Chris@1
|
2835 class="cmtt-8"> [codebook_multiplicands]</span>
|
Chris@1
|
2836 </div>
|
Chris@1
|
2837 </li>
|
Chris@1
|
2838 <li class="itemize">A <span
|
Chris@1
|
2839 class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
|
Chris@1
|
2840 not decodable by the specification in this document.
|
Chris@1
|
2841 </li></ul>
|
Chris@1
|
2842 <!--l. 195--><p class="noindent" >An ’end of packet’ during any read operation in the above steps is considered an error condition
|
Chris@1
|
2843 rendering the stream undecodable.
|
Chris@1
|
2844 <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
2845 id="x1-520003.2.1"></a><span
|
Chris@1
|
2846 class="cmbx-12">Huffman decision tree representation</span></span>
|
Chris@1
|
2847 The <span
|
Chris@1
|
2848 class="cmtt-12">[codebook_codeword_lengths] </span>array and <span
|
Chris@1
|
2849 class="cmtt-12">[codebook_entries] </span>value uniquely define the
|
Chris@1
|
2850 Huffman decision tree used for entropy decoding.
|
Chris@1
|
2851 <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
|
Chris@1
|
2852 codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
|
Chris@1
|
2853 possible. Assume the following codeword length list:
|
Chris@1
|
2854 <!--l. 209--><p class="noindent" >
|
Chris@1
|
2855 <div class="fancyvrb" id="fancyvrb15">
|
Chris@1
|
2856 <a
|
Chris@1
|
2857 id="x1-52002r1"></a><span
|
Chris@1
|
2858 class="cmr-6">1</span><span
|
Chris@1
|
2859 class="cmtt-8"> </span><span
|
Chris@1
|
2860 class="cmtt-8"> entry</span><span
|
Chris@1
|
2861 class="cmtt-8"> 0:</span><span
|
Chris@1
|
2862 class="cmtt-8"> length</span><span
|
Chris@1
|
2863 class="cmtt-8"> 2</span>
|
Chris@1
|
2864 <br class="fancyvrb" /><a
|
Chris@1
|
2865 id="x1-52004r2"></a><span
|
Chris@1
|
2866 class="cmr-6">2</span><span
|
Chris@1
|
2867 class="cmtt-8"> </span><span
|
Chris@1
|
2868 class="cmtt-8"> entry</span><span
|
Chris@1
|
2869 class="cmtt-8"> 1:</span><span
|
Chris@1
|
2870 class="cmtt-8"> length</span><span
|
Chris@1
|
2871 class="cmtt-8"> 4</span>
|
Chris@1
|
2872 <br class="fancyvrb" /><a
|
Chris@1
|
2873 id="x1-52006r3"></a><span
|
Chris@1
|
2874 class="cmr-6">3</span><span
|
Chris@1
|
2875 class="cmtt-8"> </span><span
|
Chris@1
|
2876 class="cmtt-8"> entry</span><span
|
Chris@1
|
2877 class="cmtt-8"> 2:</span><span
|
Chris@1
|
2878 class="cmtt-8"> length</span><span
|
Chris@1
|
2879 class="cmtt-8"> 4</span>
|
Chris@1
|
2880 <br class="fancyvrb" /><a
|
Chris@1
|
2881 id="x1-52008r4"></a><span
|
Chris@1
|
2882 class="cmr-6">4</span><span
|
Chris@1
|
2883 class="cmtt-8"> </span><span
|
Chris@1
|
2884 class="cmtt-8"> entry</span><span
|
Chris@1
|
2885 class="cmtt-8"> 3:</span><span
|
Chris@1
|
2886 class="cmtt-8"> length</span><span
|
Chris@1
|
2887 class="cmtt-8"> 4</span>
|
Chris@1
|
2888 <br class="fancyvrb" /><a
|
Chris@1
|
2889 id="x1-52010r5"></a><span
|
Chris@1
|
2890 class="cmr-6">5</span><span
|
Chris@1
|
2891 class="cmtt-8"> </span><span
|
Chris@1
|
2892 class="cmtt-8"> entry</span><span
|
Chris@1
|
2893 class="cmtt-8"> 4:</span><span
|
Chris@1
|
2894 class="cmtt-8"> length</span><span
|
Chris@1
|
2895 class="cmtt-8"> 4</span>
|
Chris@1
|
2896 <br class="fancyvrb" /><a
|
Chris@1
|
2897 id="x1-52012r6"></a><span
|
Chris@1
|
2898 class="cmr-6">6</span><span
|
Chris@1
|
2899 class="cmtt-8"> </span><span
|
Chris@1
|
2900 class="cmtt-8"> entry</span><span
|
Chris@1
|
2901 class="cmtt-8"> 5:</span><span
|
Chris@1
|
2902 class="cmtt-8"> length</span><span
|
Chris@1
|
2903 class="cmtt-8"> 2</span>
|
Chris@1
|
2904 <br class="fancyvrb" /><a
|
Chris@1
|
2905 id="x1-52014r7"></a><span
|
Chris@1
|
2906 class="cmr-6">7</span><span
|
Chris@1
|
2907 class="cmtt-8"> </span><span
|
Chris@1
|
2908 class="cmtt-8"> entry</span><span
|
Chris@1
|
2909 class="cmtt-8"> 6:</span><span
|
Chris@1
|
2910 class="cmtt-8"> length</span><span
|
Chris@1
|
2911 class="cmtt-8"> 3</span>
|
Chris@1
|
2912 <br class="fancyvrb" /><a
|
Chris@1
|
2913 id="x1-52016r8"></a><span
|
Chris@1
|
2914 class="cmr-6">8</span><span
|
Chris@1
|
2915 class="cmtt-8"> </span><span
|
Chris@1
|
2916 class="cmtt-8"> entry</span><span
|
Chris@1
|
2917 class="cmtt-8"> 7:</span><span
|
Chris@1
|
2918 class="cmtt-8"> length</span><span
|
Chris@1
|
2919 class="cmtt-8"> 3</span>
|
Chris@1
|
2920 </div>
|
Chris@1
|
2921 <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
|
Chris@1
|
2922 in the following codeword list:
|
Chris@1
|
2923 <!--l. 223--><p class="noindent" >
|
Chris@1
|
2924 <div class="fancyvrb" id="fancyvrb16">
|
Chris@1
|
2925 <a
|
Chris@1
|
2926 id="x1-52018r1"></a><span
|
Chris@1
|
2927 class="cmr-6">1</span><span
|
Chris@1
|
2928 class="cmtt-8"> </span><span
|
Chris@1
|
2929 class="cmtt-8"> entry</span><span
|
Chris@1
|
2930 class="cmtt-8"> 0:</span><span
|
Chris@1
|
2931 class="cmtt-8"> length</span><span
|
Chris@1
|
2932 class="cmtt-8"> 2</span><span
|
Chris@1
|
2933 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2934 class="cmtt-8"> 00</span>
|
Chris@1
|
2935 <br class="fancyvrb" /><a
|
Chris@1
|
2936 id="x1-52020r2"></a><span
|
Chris@1
|
2937 class="cmr-6">2</span><span
|
Chris@1
|
2938 class="cmtt-8"> </span><span
|
Chris@1
|
2939 class="cmtt-8"> entry</span><span
|
Chris@1
|
2940 class="cmtt-8"> 1:</span><span
|
Chris@1
|
2941 class="cmtt-8"> length</span><span
|
Chris@1
|
2942 class="cmtt-8"> 4</span><span
|
Chris@1
|
2943 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2944 class="cmtt-8"> 0100</span>
|
Chris@1
|
2945 <br class="fancyvrb" /><a
|
Chris@1
|
2946 id="x1-52022r3"></a><span
|
Chris@1
|
2947 class="cmr-6">3</span><span
|
Chris@1
|
2948 class="cmtt-8"> </span><span
|
Chris@1
|
2949 class="cmtt-8"> entry</span><span
|
Chris@1
|
2950 class="cmtt-8"> 2:</span><span
|
Chris@1
|
2951 class="cmtt-8"> length</span><span
|
Chris@1
|
2952 class="cmtt-8"> 4</span><span
|
Chris@1
|
2953 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2954 class="cmtt-8"> 0101</span>
|
Chris@1
|
2955 <br class="fancyvrb" /><a
|
Chris@1
|
2956 id="x1-52024r4"></a><span
|
Chris@1
|
2957 class="cmr-6">4</span><span
|
Chris@1
|
2958 class="cmtt-8"> </span><span
|
Chris@1
|
2959 class="cmtt-8"> entry</span><span
|
Chris@1
|
2960 class="cmtt-8"> 3:</span><span
|
Chris@1
|
2961 class="cmtt-8"> length</span><span
|
Chris@1
|
2962 class="cmtt-8"> 4</span><span
|
Chris@1
|
2963 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2964 class="cmtt-8"> 0110</span>
|
Chris@1
|
2965 <br class="fancyvrb" /><a
|
Chris@1
|
2966 id="x1-52026r5"></a><span
|
Chris@1
|
2967 class="cmr-6">5</span><span
|
Chris@1
|
2968 class="cmtt-8"> </span><span
|
Chris@1
|
2969 class="cmtt-8"> entry</span><span
|
Chris@1
|
2970 class="cmtt-8"> 4:</span><span
|
Chris@1
|
2971 class="cmtt-8"> length</span><span
|
Chris@1
|
2972 class="cmtt-8"> 4</span><span
|
Chris@1
|
2973 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2974 class="cmtt-8"> 0111</span>
|
Chris@1
|
2975 <br class="fancyvrb" /><a
|
Chris@1
|
2976 id="x1-52028r6"></a><span
|
Chris@1
|
2977 class="cmr-6">6</span><span
|
Chris@1
|
2978 class="cmtt-8"> </span><span
|
Chris@1
|
2979 class="cmtt-8"> entry</span><span
|
Chris@1
|
2980 class="cmtt-8"> 5:</span><span
|
Chris@1
|
2981 class="cmtt-8"> length</span><span
|
Chris@1
|
2982 class="cmtt-8"> 2</span><span
|
Chris@1
|
2983 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2984 class="cmtt-8"> 10</span>
|
Chris@1
|
2985 <br class="fancyvrb" /><a
|
Chris@1
|
2986 id="x1-52030r7"></a><span
|
Chris@1
|
2987 class="cmr-6">7</span><span
|
Chris@1
|
2988 class="cmtt-8"> </span><span
|
Chris@1
|
2989 class="cmtt-8"> entry</span><span
|
Chris@1
|
2990 class="cmtt-8"> 6:</span><span
|
Chris@1
|
2991 class="cmtt-8"> length</span><span
|
Chris@1
|
2992 class="cmtt-8"> 3</span><span
|
Chris@1
|
2993 class="cmtt-8"> codeword</span><span
|
Chris@1
|
2994 class="cmtt-8"> 110</span>
|
Chris@1
|
2995 <br class="fancyvrb" /><a
|
Chris@1
|
2996 id="x1-52032r8"></a><span
|
Chris@1
|
2997 class="cmr-6">8</span><span
|
Chris@1
|
2998 class="cmtt-8"> </span><span
|
Chris@1
|
2999 class="cmtt-8"> entry</span><span
|
Chris@1
|
3000 class="cmtt-8"> 7:</span><span
|
Chris@1
|
3001 class="cmtt-8"> length</span><span
|
Chris@1
|
3002 class="cmtt-8"> 3</span><span
|
Chris@1
|
3003 class="cmtt-8"> codeword</span><span
|
Chris@1
|
3004 class="cmtt-8"> 111</span>
|
Chris@1
|
3005 </div>
|
Chris@1
|
3006
|
Chris@1
|
3007
|
Chris@1
|
3008
|
Chris@1
|
3009 <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a
|
Chris@1
|
3010 id="x1-530003.2.1"></a><span
|
Chris@1
|
3011 class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
|
Chris@1
|
3012 be read and used bit by bit from left to right, thus the codeword ’001’ is the bit string ’zero, zero,
|
Chris@1
|
3013 one’. When determining ’lowest possible value’ in the assignment definition above, the leftmost
|
Chris@1
|
3014 bit is the MSb.
|
Chris@1
|
3015 <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
|
Chris@1
|
3016 numbers equivalent to the leaves numbered left-to-right:
|
Chris@1
|
3017 <div class="center"
|
Chris@1
|
3018 >
|
Chris@1
|
3019 <!--l. 247--><p class="noindent" >
|
Chris@1
|
3020
|
Chris@1
|
3021 <!--l. 248--><p class="noindent" ><img
|
Chris@1
|
3022 src="hufftree.png" alt="PIC"
|
Chris@1
|
3023 >
|
Chris@1
|
3024 <br /> <div class="caption"
|
Chris@1
|
3025 ><span class="id">Figure 4: </span><span
|
Chris@1
|
3026 class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
|
Chris@1
|
3027 </div>
|
Chris@1
|
3028 <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
|
Chris@1
|
3029 possible position.
|
Chris@1
|
3030 <!--l. 256--><p class="noindent" >Note that it’s possible to underspecify or overspecify a Huffman tree via the length list.
|
Chris@1
|
3031 In the above example, if codeword seven were eliminated, it’s clear that the tree is
|
Chris@1
|
3032 unfinished:
|
Chris@1
|
3033 <div class="center"
|
Chris@1
|
3034 >
|
Chris@1
|
3035 <!--l. 260--><p class="noindent" >
|
Chris@1
|
3036
|
Chris@1
|
3037 <!--l. 261--><p class="noindent" ><img
|
Chris@1
|
3038 src="hufftree-under.png" alt="PIC"
|
Chris@1
|
3039 >
|
Chris@1
|
3040 <br /> <div class="caption"
|
Chris@1
|
3041 ><span class="id">Figure 5: </span><span
|
Chris@1
|
3042 class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
|
Chris@1
|
3043 </div>
|
Chris@1
|
3044 <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it’s clear that the tree is fully populated and a ninth
|
Chris@1
|
3045 codeword is impossible. Both underspecified and overspecified trees are an error condition
|
Chris@1
|
3046 rendering the stream undecodable. Take special care that a codebook with a single used
|
Chris@1
|
3047 entry is handled properly; it consists of a single codework of zero bits and ’reading’
|
Chris@1
|
3048 a value out of such a codebook always returns the single used value and sinks zero
|
Chris@1
|
3049 bits.
|
Chris@1
|
3050 <!--l. 274--><p class="noindent" >Codebook entries marked ’unused’ are simply skipped in the assigning process. They have no
|
Chris@1
|
3051 codeword and do not appear in the decision tree, thus it’s impossible for any bit pattern read
|
Chris@1
|
3052 from the stream to decode to that entry number.
|
Chris@1
|
3053
|
Chris@1
|
3054
|
Chris@1
|
3055
|
Chris@1
|
3056 <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3057 id="x1-540003.2.1"></a><span
|
Chris@1
|
3058 class="cmbx-12">VQ lookup table vector representation</span></span>
|
Chris@1
|
3059 Unpacking the VQ lookup table vectors relies on the following values:
|
Chris@1
|
3060 <div class="fancyvrb" id="fancyvrb17">
|
Chris@1
|
3061 <a
|
Chris@1
|
3062 id="x1-54002r1"></a><span
|
Chris@1
|
3063 class="cmr-6">1</span><span
|
Chris@1
|
3064 class="cmtt-8"> </span><span
|
Chris@1
|
3065 class="cmtt-8"> the</span><span
|
Chris@1
|
3066 class="cmtt-8"> [codebook\_multiplicands]</span><span
|
Chris@1
|
3067 class="cmtt-8"> array</span>
|
Chris@1
|
3068 <br class="fancyvrb" /><a
|
Chris@1
|
3069 id="x1-54004r2"></a><span
|
Chris@1
|
3070 class="cmr-6">2</span><span
|
Chris@1
|
3071 class="cmtt-8"> </span><span
|
Chris@1
|
3072 class="cmtt-8"> [codebook\_minimum\_value]</span>
|
Chris@1
|
3073 <br class="fancyvrb" /><a
|
Chris@1
|
3074 id="x1-54006r3"></a><span
|
Chris@1
|
3075 class="cmr-6">3</span><span
|
Chris@1
|
3076 class="cmtt-8"> </span><span
|
Chris@1
|
3077 class="cmtt-8"> [codebook\_delta\_value]</span>
|
Chris@1
|
3078 <br class="fancyvrb" /><a
|
Chris@1
|
3079 id="x1-54008r4"></a><span
|
Chris@1
|
3080 class="cmr-6">4</span><span
|
Chris@1
|
3081 class="cmtt-8"> </span><span
|
Chris@1
|
3082 class="cmtt-8"> [codebook\_sequence\_p]</span>
|
Chris@1
|
3083 <br class="fancyvrb" /><a
|
Chris@1
|
3084 id="x1-54010r5"></a><span
|
Chris@1
|
3085 class="cmr-6">5</span><span
|
Chris@1
|
3086 class="cmtt-8"> </span><span
|
Chris@1
|
3087 class="cmtt-8"> [codebook\_lookup\_type]</span>
|
Chris@1
|
3088 <br class="fancyvrb" /><a
|
Chris@1
|
3089 id="x1-54012r6"></a><span
|
Chris@1
|
3090 class="cmr-6">6</span><span
|
Chris@1
|
3091 class="cmtt-8"> </span><span
|
Chris@1
|
3092 class="cmtt-8"> [codebook\_entries]</span>
|
Chris@1
|
3093 <br class="fancyvrb" /><a
|
Chris@1
|
3094 id="x1-54014r7"></a><span
|
Chris@1
|
3095 class="cmr-6">7</span><span
|
Chris@1
|
3096 class="cmtt-8"> </span><span
|
Chris@1
|
3097 class="cmtt-8"> [codebook\_dimensions]</span>
|
Chris@1
|
3098 <br class="fancyvrb" /><a
|
Chris@1
|
3099 id="x1-54016r8"></a><span
|
Chris@1
|
3100 class="cmr-6">8</span><span
|
Chris@1
|
3101 class="cmtt-8"> </span><span
|
Chris@1
|
3102 class="cmtt-8"> [codebook\_lookup\_values]</span>
|
Chris@1
|
3103 </div>
|
Chris@1
|
3104 <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
|
Chris@1
|
3105 <span
|
Chris@1
|
3106 class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
|
Chris@1
|
3107 during audio packet decode in a VQ context.
|
Chris@1
|
3108 <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3109 id="x1-550003.2.1"></a><span
|
Chris@1
|
3110 class="cmbx-12">Vector value decode: Lookup type 1</span></span>
|
Chris@1
|
3111 Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
|
Chris@1
|
3112 scalar values. Calculate (unpack) the final values of a codebook entry vector from
|
Chris@1
|
3113 the entries in <span
|
Chris@1
|
3114 class="cmtt-12">[codebook_multiplicands] </span>as follows (<span
|
Chris@1
|
3115 class="cmtt-12">[value_vector] </span>is the output
|
Chris@1
|
3116 vector representing the vector of values for entry number <span
|
Chris@1
|
3117 class="cmtt-12">[lookup_offset] </span>in this
|
Chris@1
|
3118 codebook):
|
Chris@1
|
3119 <!--l. 311--><p class="noindent" >
|
Chris@1
|
3120 <div class="fancyvrb" id="fancyvrb18">
|
Chris@1
|
3121 <a
|
Chris@1
|
3122 id="x1-55002r1"></a><span
|
Chris@1
|
3123 class="cmr-6">1</span><span
|
Chris@1
|
3124 class="cmtt-8"> </span><span
|
Chris@1
|
3125 class="cmtt-8"> </span><span
|
Chris@1
|
3126 class="cmtt-8"> </span><span
|
Chris@1
|
3127 class="cmtt-8"> 1)</span><span
|
Chris@1
|
3128 class="cmtt-8"> [last]</span><span
|
Chris@1
|
3129 class="cmtt-8"> =</span><span
|
Chris@1
|
3130 class="cmtt-8"> 0;</span>
|
Chris@1
|
3131 <br class="fancyvrb" /><a
|
Chris@1
|
3132 id="x1-55004r2"></a><span
|
Chris@1
|
3133 class="cmr-6">2</span><span
|
Chris@1
|
3134 class="cmtt-8"> </span><span
|
Chris@1
|
3135 class="cmtt-8"> </span><span
|
Chris@1
|
3136 class="cmtt-8"> </span><span
|
Chris@1
|
3137 class="cmtt-8"> 2)</span><span
|
Chris@1
|
3138 class="cmtt-8"> [index_divisor]</span><span
|
Chris@1
|
3139 class="cmtt-8"> =</span><span
|
Chris@1
|
3140 class="cmtt-8"> 1;</span>
|
Chris@1
|
3141 <br class="fancyvrb" /><a
|
Chris@1
|
3142 id="x1-55006r3"></a><span
|
Chris@1
|
3143 class="cmr-6">3</span><span
|
Chris@1
|
3144 class="cmtt-8"> </span><span
|
Chris@1
|
3145 class="cmtt-8"> </span><span
|
Chris@1
|
3146 class="cmtt-8"> </span><span
|
Chris@1
|
3147 class="cmtt-8"> 3)</span><span
|
Chris@1
|
3148 class="cmtt-8"> iterate</span><span
|
Chris@1
|
3149 class="cmtt-8"> [i]</span><span
|
Chris@1
|
3150 class="cmtt-8"> over</span><span
|
Chris@1
|
3151 class="cmtt-8"> the</span><span
|
Chris@1
|
3152 class="cmtt-8"> range</span><span
|
Chris@1
|
3153 class="cmtt-8"> 0</span><span
|
Chris@1
|
3154 class="cmtt-8"> ...</span><span
|
Chris@1
|
3155 class="cmtt-8"> [codebook_dimensions]-1</span><span
|
Chris@1
|
3156 class="cmtt-8"> (once</span><span
|
Chris@1
|
3157 class="cmtt-8"> for</span><span
|
Chris@1
|
3158 class="cmtt-8"> each</span><span
|
Chris@1
|
3159 class="cmtt-8"> scalar</span><span
|
Chris@1
|
3160 class="cmtt-8"> value</span><span
|
Chris@1
|
3161 class="cmtt-8"> in</span><span
|
Chris@1
|
3162 class="cmtt-8"> the</span><span
|
Chris@1
|
3163 class="cmtt-8"> value</span><span
|
Chris@1
|
3164 class="cmtt-8"> vector)</span><span
|
Chris@1
|
3165 class="cmtt-8"> </span><span
|
Chris@1
|
3166 class="cmsy-8">{</span>
|
Chris@1
|
3167 <br class="fancyvrb" /><a
|
Chris@1
|
3168 id="x1-55008r4"></a><span
|
Chris@1
|
3169 class="cmr-6">4</span><span
|
Chris@1
|
3170 class="cmtt-8"> </span><span
|
Chris@1
|
3171 class="cmtt-8"> </span>
|
Chris@1
|
3172 <br class="fancyvrb" /><a
|
Chris@1
|
3173 id="x1-55010r5"></a><span
|
Chris@1
|
3174 class="cmr-6">5</span><span
|
Chris@1
|
3175 class="cmtt-8"> </span><span
|
Chris@1
|
3176 class="cmtt-8"> </span><span
|
Chris@1
|
3177 class="cmtt-8"> </span><span
|
Chris@1
|
3178 class="cmtt-8"> </span><span
|
Chris@1
|
3179 class="cmtt-8"> </span><span
|
Chris@1
|
3180 class="cmtt-8"> </span><span
|
Chris@1
|
3181 class="cmtt-8"> </span><span
|
Chris@1
|
3182 class="cmtt-8"> </span><span
|
Chris@1
|
3183 class="cmtt-8"> 4)</span><span
|
Chris@1
|
3184 class="cmtt-8"> [multiplicand_offset]</span><span
|
Chris@1
|
3185 class="cmtt-8"> =</span><span
|
Chris@1
|
3186 class="cmtt-8"> (</span><span
|
Chris@1
|
3187 class="cmtt-8"> [lookup_offset]</span><span
|
Chris@1
|
3188 class="cmtt-8"> divided</span><span
|
Chris@1
|
3189 class="cmtt-8"> by</span><span
|
Chris@1
|
3190 class="cmtt-8"> [index_divisor]</span><span
|
Chris@1
|
3191 class="cmtt-8"> using</span><span
|
Chris@1
|
3192 class="cmtt-8"> integer</span>
|
Chris@1
|
3193 <br class="fancyvrb" /><a
|
Chris@1
|
3194 id="x1-55012r6"></a><span
|
Chris@1
|
3195 class="cmr-6">6</span><span
|
Chris@1
|
3196 class="cmtt-8"> </span><span
|
Chris@1
|
3197 class="cmtt-8"> </span><span
|
Chris@1
|
3198 class="cmtt-8"> </span><span
|
Chris@1
|
3199 class="cmtt-8"> </span><span
|
Chris@1
|
3200 class="cmtt-8"> </span><span
|
Chris@1
|
3201 class="cmtt-8"> </span><span
|
Chris@1
|
3202 class="cmtt-8"> </span><span
|
Chris@1
|
3203 class="cmtt-8"> </span><span
|
Chris@1
|
3204 class="cmtt-8"> </span><span
|
Chris@1
|
3205 class="cmtt-8"> </span><span
|
Chris@1
|
3206 class="cmtt-8"> </span><span
|
Chris@1
|
3207 class="cmtt-8"> division</span><span
|
Chris@1
|
3208 class="cmtt-8"> )</span><span
|
Chris@1
|
3209 class="cmtt-8"> integer</span><span
|
Chris@1
|
3210 class="cmtt-8"> modulo</span><span
|
Chris@1
|
3211 class="cmtt-8"> [codebook_lookup_values]</span>
|
Chris@1
|
3212 <br class="fancyvrb" /><a
|
Chris@1
|
3213 id="x1-55014r7"></a><span
|
Chris@1
|
3214 class="cmr-6">7</span><span
|
Chris@1
|
3215 class="cmtt-8"> </span><span
|
Chris@1
|
3216 class="cmtt-8"> </span>
|
Chris@1
|
3217 <br class="fancyvrb" /><a
|
Chris@1
|
3218 id="x1-55016r8"></a><span
|
Chris@1
|
3219 class="cmr-6">8</span><span
|
Chris@1
|
3220 class="cmtt-8"> </span><span
|
Chris@1
|
3221 class="cmtt-8"> </span><span
|
Chris@1
|
3222 class="cmtt-8"> </span><span
|
Chris@1
|
3223 class="cmtt-8"> </span><span
|
Chris@1
|
3224 class="cmtt-8"> </span><span
|
Chris@1
|
3225 class="cmtt-8"> </span><span
|
Chris@1
|
3226 class="cmtt-8"> </span><span
|
Chris@1
|
3227 class="cmtt-8"> </span><span
|
Chris@1
|
3228 class="cmtt-8"> 5)</span><span
|
Chris@1
|
3229 class="cmtt-8"> vector</span><span
|
Chris@1
|
3230 class="cmtt-8"> [value_vector]</span><span
|
Chris@1
|
3231 class="cmtt-8"> element</span><span
|
Chris@1
|
3232 class="cmtt-8"> [i]</span><span
|
Chris@1
|
3233 class="cmtt-8"> =</span>
|
Chris@1
|
3234 <br class="fancyvrb" /><a
|
Chris@1
|
3235 id="x1-55018r9"></a><span
|
Chris@1
|
3236 class="cmr-6">9</span><span
|
Chris@1
|
3237 class="cmtt-8"> </span><span
|
Chris@1
|
3238 class="cmtt-8"> </span><span
|
Chris@1
|
3239 class="cmtt-8"> </span><span
|
Chris@1
|
3240 class="cmtt-8"> </span><span
|
Chris@1
|
3241 class="cmtt-8"> </span><span
|
Chris@1
|
3242 class="cmtt-8"> </span><span
|
Chris@1
|
3243 class="cmtt-8"> </span><span
|
Chris@1
|
3244 class="cmtt-8"> </span><span
|
Chris@1
|
3245 class="cmtt-8"> </span><span
|
Chris@1
|
3246 class="cmtt-8"> </span><span
|
Chris@1
|
3247 class="cmtt-8"> </span><span
|
Chris@1
|
3248 class="cmtt-8"> </span><span
|
Chris@1
|
3249 class="cmtt-8"> </span><span
|
Chris@1
|
3250 class="cmtt-8"> (</span><span
|
Chris@1
|
3251 class="cmtt-8"> [codebook_multiplicands]</span><span
|
Chris@1
|
3252 class="cmtt-8"> array</span><span
|
Chris@1
|
3253 class="cmtt-8"> element</span><span
|
Chris@1
|
3254 class="cmtt-8"> number</span><span
|
Chris@1
|
3255 class="cmtt-8"> [multiplicand_offset]</span><span
|
Chris@1
|
3256 class="cmtt-8"> )</span><span
|
Chris@1
|
3257 class="cmtt-8"> *</span>
|
Chris@1
|
3258 <br class="fancyvrb" /><a
|
Chris@1
|
3259 id="x1-55020r10"></a><span
|
Chris@1
|
3260 class="cmr-6">10</span><span
|
Chris@1
|
3261 class="cmtt-8"> </span><span
|
Chris@1
|
3262 class="cmtt-8"> </span><span
|
Chris@1
|
3263 class="cmtt-8"> </span><span
|
Chris@1
|
3264 class="cmtt-8"> </span><span
|
Chris@1
|
3265 class="cmtt-8"> </span><span
|
Chris@1
|
3266 class="cmtt-8"> </span><span
|
Chris@1
|
3267 class="cmtt-8"> </span><span
|
Chris@1
|
3268 class="cmtt-8"> </span><span
|
Chris@1
|
3269 class="cmtt-8"> </span><span
|
Chris@1
|
3270 class="cmtt-8"> </span><span
|
Chris@1
|
3271 class="cmtt-8"> </span><span
|
Chris@1
|
3272 class="cmtt-8"> </span><span
|
Chris@1
|
3273 class="cmtt-8"> </span><span
|
Chris@1
|
3274 class="cmtt-8"> [codebook_delta_value]</span><span
|
Chris@1
|
3275 class="cmtt-8"> +</span><span
|
Chris@1
|
3276 class="cmtt-8"> [codebook_minimum_value]</span><span
|
Chris@1
|
3277 class="cmtt-8"> +</span><span
|
Chris@1
|
3278 class="cmtt-8"> [last];</span>
|
Chris@1
|
3279 <br class="fancyvrb" /><a
|
Chris@1
|
3280 id="x1-55022r11"></a><span
|
Chris@1
|
3281 class="cmr-6">11</span><span
|
Chris@1
|
3282 class="cmtt-8"> </span><span
|
Chris@1
|
3283 class="cmtt-8"> </span>
|
Chris@1
|
3284 <br class="fancyvrb" /><a
|
Chris@1
|
3285 id="x1-55024r12"></a><span
|
Chris@1
|
3286 class="cmr-6">12</span><span
|
Chris@1
|
3287 class="cmtt-8"> </span><span
|
Chris@1
|
3288 class="cmtt-8"> </span><span
|
Chris@1
|
3289 class="cmtt-8"> </span><span
|
Chris@1
|
3290 class="cmtt-8"> </span><span
|
Chris@1
|
3291 class="cmtt-8"> </span><span
|
Chris@1
|
3292 class="cmtt-8"> </span><span
|
Chris@1
|
3293 class="cmtt-8"> </span><span
|
Chris@1
|
3294 class="cmtt-8"> </span><span
|
Chris@1
|
3295 class="cmtt-8"> 6)</span><span
|
Chris@1
|
3296 class="cmtt-8"> if</span><span
|
Chris@1
|
3297 class="cmtt-8"> (</span><span
|
Chris@1
|
3298 class="cmtt-8"> [codebook_sequence_p]</span><span
|
Chris@1
|
3299 class="cmtt-8"> is</span><span
|
Chris@1
|
3300 class="cmtt-8"> set</span><span
|
Chris@1
|
3301 class="cmtt-8"> )</span><span
|
Chris@1
|
3302 class="cmtt-8"> then</span><span
|
Chris@1
|
3303 class="cmtt-8"> set</span><span
|
Chris@1
|
3304 class="cmtt-8"> [last]</span><span
|
Chris@1
|
3305 class="cmtt-8"> =</span><span
|
Chris@1
|
3306 class="cmtt-8"> vector</span><span
|
Chris@1
|
3307 class="cmtt-8"> [value_vector]</span><span
|
Chris@1
|
3308 class="cmtt-8"> element</span><span
|
Chris@1
|
3309 class="cmtt-8"> [i]</span>
|
Chris@1
|
3310 <br class="fancyvrb" /><a
|
Chris@1
|
3311 id="x1-55026r13"></a><span
|
Chris@1
|
3312 class="cmr-6">13</span><span
|
Chris@1
|
3313 class="cmtt-8"> </span><span
|
Chris@1
|
3314 class="cmtt-8"> </span>
|
Chris@1
|
3315 <br class="fancyvrb" /><a
|
Chris@1
|
3316 id="x1-55028r14"></a><span
|
Chris@1
|
3317 class="cmr-6">14</span><span
|
Chris@1
|
3318 class="cmtt-8"> </span><span
|
Chris@1
|
3319 class="cmtt-8"> </span><span
|
Chris@1
|
3320 class="cmtt-8"> </span><span
|
Chris@1
|
3321 class="cmtt-8"> </span><span
|
Chris@1
|
3322 class="cmtt-8"> </span><span
|
Chris@1
|
3323 class="cmtt-8"> </span><span
|
Chris@1
|
3324 class="cmtt-8"> </span><span
|
Chris@1
|
3325 class="cmtt-8"> </span><span
|
Chris@1
|
3326 class="cmtt-8"> 7)</span><span
|
Chris@1
|
3327 class="cmtt-8"> [index_divisor]</span><span
|
Chris@1
|
3328 class="cmtt-8"> =</span><span
|
Chris@1
|
3329 class="cmtt-8"> [index_divisor]</span><span
|
Chris@1
|
3330 class="cmtt-8"> *</span><span
|
Chris@1
|
3331 class="cmtt-8"> [codebook_lookup_values]</span>
|
Chris@1
|
3332 <br class="fancyvrb" /><a
|
Chris@1
|
3333 id="x1-55030r15"></a><span
|
Chris@1
|
3334 class="cmr-6">15</span><span
|
Chris@1
|
3335 class="cmtt-8"> </span><span
|
Chris@1
|
3336 class="cmtt-8"> </span>
|
Chris@1
|
3337 <br class="fancyvrb" /><a
|
Chris@1
|
3338 id="x1-55032r16"></a><span
|
Chris@1
|
3339 class="cmr-6">16</span><span
|
Chris@1
|
3340 class="cmtt-8"> </span><span
|
Chris@1
|
3341 class="cmtt-8"> </span><span
|
Chris@1
|
3342 class="cmtt-8"> </span><span
|
Chris@1
|
3343 class="cmtt-8"> </span><span
|
Chris@1
|
3344 class="cmtt-8"> </span><span
|
Chris@1
|
3345 class="cmtt-8"> </span><span
|
Chris@1
|
3346 class="cmtt-8"> </span><span
|
Chris@1
|
3347 class="cmsy-8">}</span>
|
Chris@1
|
3348 <br class="fancyvrb" /><a
|
Chris@1
|
3349 id="x1-55034r17"></a><span
|
Chris@1
|
3350 class="cmr-6">17</span><span
|
Chris@1
|
3351 class="cmtt-8"> </span><span
|
Chris@1
|
3352 class="cmtt-8"> </span>
|
Chris@1
|
3353 <br class="fancyvrb" /><a
|
Chris@1
|
3354 id="x1-55036r18"></a><span
|
Chris@1
|
3355 class="cmr-6">18</span><span
|
Chris@1
|
3356 class="cmtt-8"> </span><span
|
Chris@1
|
3357 class="cmtt-8"> </span><span
|
Chris@1
|
3358 class="cmtt-8"> </span><span
|
Chris@1
|
3359 class="cmtt-8"> 8)</span><span
|
Chris@1
|
3360 class="cmtt-8"> vector</span><span
|
Chris@1
|
3361 class="cmtt-8"> calculation</span><span
|
Chris@1
|
3362 class="cmtt-8"> completed.</span>
|
Chris@1
|
3363 </div>
|
Chris@1
|
3364
|
Chris@1
|
3365
|
Chris@1
|
3366
|
Chris@1
|
3367 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3368 id="x1-560003.2.1"></a><span
|
Chris@1
|
3369 class="cmbx-12">Vector value decode: Lookup type 2</span></span>
|
Chris@1
|
3370 Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
|
Chris@1
|
3371 by the <span
|
Chris@1
|
3372 class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
|
Chris@1
|
3373 values of a codebook entry vector from the entries in <span
|
Chris@1
|
3374 class="cmtt-12">[codebook_multiplicands] </span>as follows
|
Chris@1
|
3375 (<span
|
Chris@1
|
3376 class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
|
Chris@1
|
3377 <span
|
Chris@1
|
3378 class="cmtt-12">[lookup_offset] </span>in this codebook):
|
Chris@1
|
3379 <!--l. 344--><p class="noindent" >
|
Chris@1
|
3380 <div class="fancyvrb" id="fancyvrb19">
|
Chris@1
|
3381 <a
|
Chris@1
|
3382 id="x1-56002r1"></a><span
|
Chris@1
|
3383 class="cmr-6">1</span><span
|
Chris@1
|
3384 class="cmtt-8"> </span><span
|
Chris@1
|
3385 class="cmtt-8"> </span><span
|
Chris@1
|
3386 class="cmtt-8"> </span><span
|
Chris@1
|
3387 class="cmtt-8"> 1)</span><span
|
Chris@1
|
3388 class="cmtt-8"> [last]</span><span
|
Chris@1
|
3389 class="cmtt-8"> =</span><span
|
Chris@1
|
3390 class="cmtt-8"> 0;</span>
|
Chris@1
|
3391 <br class="fancyvrb" /><a
|
Chris@1
|
3392 id="x1-56004r2"></a><span
|
Chris@1
|
3393 class="cmr-6">2</span><span
|
Chris@1
|
3394 class="cmtt-8"> </span><span
|
Chris@1
|
3395 class="cmtt-8"> </span><span
|
Chris@1
|
3396 class="cmtt-8"> </span><span
|
Chris@1
|
3397 class="cmtt-8"> 2)</span><span
|
Chris@1
|
3398 class="cmtt-8"> [multiplicand_offset]</span><span
|
Chris@1
|
3399 class="cmtt-8"> =</span><span
|
Chris@1
|
3400 class="cmtt-8"> [lookup_offset]</span><span
|
Chris@1
|
3401 class="cmtt-8"> *</span><span
|
Chris@1
|
3402 class="cmtt-8"> [codebook_dimensions]</span>
|
Chris@1
|
3403 <br class="fancyvrb" /><a
|
Chris@1
|
3404 id="x1-56006r3"></a><span
|
Chris@1
|
3405 class="cmr-6">3</span><span
|
Chris@1
|
3406 class="cmtt-8"> </span><span
|
Chris@1
|
3407 class="cmtt-8"> </span><span
|
Chris@1
|
3408 class="cmtt-8"> </span><span
|
Chris@1
|
3409 class="cmtt-8"> 3)</span><span
|
Chris@1
|
3410 class="cmtt-8"> iterate</span><span
|
Chris@1
|
3411 class="cmtt-8"> [i]</span><span
|
Chris@1
|
3412 class="cmtt-8"> over</span><span
|
Chris@1
|
3413 class="cmtt-8"> the</span><span
|
Chris@1
|
3414 class="cmtt-8"> range</span><span
|
Chris@1
|
3415 class="cmtt-8"> 0</span><span
|
Chris@1
|
3416 class="cmtt-8"> ...</span><span
|
Chris@1
|
3417 class="cmtt-8"> [codebook_dimensions]-1</span><span
|
Chris@1
|
3418 class="cmtt-8"> (once</span><span
|
Chris@1
|
3419 class="cmtt-8"> for</span><span
|
Chris@1
|
3420 class="cmtt-8"> each</span><span
|
Chris@1
|
3421 class="cmtt-8"> scalar</span><span
|
Chris@1
|
3422 class="cmtt-8"> value</span><span
|
Chris@1
|
3423 class="cmtt-8"> in</span><span
|
Chris@1
|
3424 class="cmtt-8"> the</span><span
|
Chris@1
|
3425 class="cmtt-8"> value</span><span
|
Chris@1
|
3426 class="cmtt-8"> vector)</span><span
|
Chris@1
|
3427 class="cmtt-8"> </span><span
|
Chris@1
|
3428 class="cmsy-8">{</span>
|
Chris@1
|
3429 <br class="fancyvrb" /><a
|
Chris@1
|
3430 id="x1-56008r4"></a><span
|
Chris@1
|
3431 class="cmr-6">4</span><span
|
Chris@1
|
3432 class="cmtt-8"> </span><span
|
Chris@1
|
3433 class="cmtt-8"> </span>
|
Chris@1
|
3434 <br class="fancyvrb" /><a
|
Chris@1
|
3435 id="x1-56010r5"></a><span
|
Chris@1
|
3436 class="cmr-6">5</span><span
|
Chris@1
|
3437 class="cmtt-8"> </span><span
|
Chris@1
|
3438 class="cmtt-8"> </span><span
|
Chris@1
|
3439 class="cmtt-8"> </span><span
|
Chris@1
|
3440 class="cmtt-8"> </span><span
|
Chris@1
|
3441 class="cmtt-8"> </span><span
|
Chris@1
|
3442 class="cmtt-8"> </span><span
|
Chris@1
|
3443 class="cmtt-8"> </span><span
|
Chris@1
|
3444 class="cmtt-8"> </span><span
|
Chris@1
|
3445 class="cmtt-8"> 4)</span><span
|
Chris@1
|
3446 class="cmtt-8"> vector</span><span
|
Chris@1
|
3447 class="cmtt-8"> [value_vector]</span><span
|
Chris@1
|
3448 class="cmtt-8"> element</span><span
|
Chris@1
|
3449 class="cmtt-8"> [i]</span><span
|
Chris@1
|
3450 class="cmtt-8"> =</span>
|
Chris@1
|
3451 <br class="fancyvrb" /><a
|
Chris@1
|
3452 id="x1-56012r6"></a><span
|
Chris@1
|
3453 class="cmr-6">6</span><span
|
Chris@1
|
3454 class="cmtt-8"> </span><span
|
Chris@1
|
3455 class="cmtt-8"> </span><span
|
Chris@1
|
3456 class="cmtt-8"> </span><span
|
Chris@1
|
3457 class="cmtt-8"> </span><span
|
Chris@1
|
3458 class="cmtt-8"> </span><span
|
Chris@1
|
3459 class="cmtt-8"> </span><span
|
Chris@1
|
3460 class="cmtt-8"> </span><span
|
Chris@1
|
3461 class="cmtt-8"> </span><span
|
Chris@1
|
3462 class="cmtt-8"> </span><span
|
Chris@1
|
3463 class="cmtt-8"> </span><span
|
Chris@1
|
3464 class="cmtt-8"> </span><span
|
Chris@1
|
3465 class="cmtt-8"> </span><span
|
Chris@1
|
3466 class="cmtt-8"> </span><span
|
Chris@1
|
3467 class="cmtt-8"> (</span><span
|
Chris@1
|
3468 class="cmtt-8"> [codebook_multiplicands]</span><span
|
Chris@1
|
3469 class="cmtt-8"> array</span><span
|
Chris@1
|
3470 class="cmtt-8"> element</span><span
|
Chris@1
|
3471 class="cmtt-8"> number</span><span
|
Chris@1
|
3472 class="cmtt-8"> [multiplicand_offset]</span><span
|
Chris@1
|
3473 class="cmtt-8"> )</span><span
|
Chris@1
|
3474 class="cmtt-8"> *</span>
|
Chris@1
|
3475 <br class="fancyvrb" /><a
|
Chris@1
|
3476 id="x1-56014r7"></a><span
|
Chris@1
|
3477 class="cmr-6">7</span><span
|
Chris@1
|
3478 class="cmtt-8"> </span><span
|
Chris@1
|
3479 class="cmtt-8"> </span><span
|
Chris@1
|
3480 class="cmtt-8"> </span><span
|
Chris@1
|
3481 class="cmtt-8"> </span><span
|
Chris@1
|
3482 class="cmtt-8"> </span><span
|
Chris@1
|
3483 class="cmtt-8"> </span><span
|
Chris@1
|
3484 class="cmtt-8"> </span><span
|
Chris@1
|
3485 class="cmtt-8"> </span><span
|
Chris@1
|
3486 class="cmtt-8"> </span><span
|
Chris@1
|
3487 class="cmtt-8"> </span><span
|
Chris@1
|
3488 class="cmtt-8"> </span><span
|
Chris@1
|
3489 class="cmtt-8"> </span><span
|
Chris@1
|
3490 class="cmtt-8"> </span><span
|
Chris@1
|
3491 class="cmtt-8"> [codebook_delta_value]</span><span
|
Chris@1
|
3492 class="cmtt-8"> +</span><span
|
Chris@1
|
3493 class="cmtt-8"> [codebook_minimum_value]</span><span
|
Chris@1
|
3494 class="cmtt-8"> +</span><span
|
Chris@1
|
3495 class="cmtt-8"> [last];</span>
|
Chris@1
|
3496 <br class="fancyvrb" /><a
|
Chris@1
|
3497 id="x1-56016r8"></a><span
|
Chris@1
|
3498 class="cmr-6">8</span><span
|
Chris@1
|
3499 class="cmtt-8"> </span><span
|
Chris@1
|
3500 class="cmtt-8"> </span>
|
Chris@1
|
3501 <br class="fancyvrb" /><a
|
Chris@1
|
3502 id="x1-56018r9"></a><span
|
Chris@1
|
3503 class="cmr-6">9</span><span
|
Chris@1
|
3504 class="cmtt-8"> </span><span
|
Chris@1
|
3505 class="cmtt-8"> </span><span
|
Chris@1
|
3506 class="cmtt-8"> </span><span
|
Chris@1
|
3507 class="cmtt-8"> </span><span
|
Chris@1
|
3508 class="cmtt-8"> </span><span
|
Chris@1
|
3509 class="cmtt-8"> </span><span
|
Chris@1
|
3510 class="cmtt-8"> </span><span
|
Chris@1
|
3511 class="cmtt-8"> </span><span
|
Chris@1
|
3512 class="cmtt-8"> 5)</span><span
|
Chris@1
|
3513 class="cmtt-8"> if</span><span
|
Chris@1
|
3514 class="cmtt-8"> (</span><span
|
Chris@1
|
3515 class="cmtt-8"> [codebook_sequence_p]</span><span
|
Chris@1
|
3516 class="cmtt-8"> is</span><span
|
Chris@1
|
3517 class="cmtt-8"> set</span><span
|
Chris@1
|
3518 class="cmtt-8"> )</span><span
|
Chris@1
|
3519 class="cmtt-8"> then</span><span
|
Chris@1
|
3520 class="cmtt-8"> set</span><span
|
Chris@1
|
3521 class="cmtt-8"> [last]</span><span
|
Chris@1
|
3522 class="cmtt-8"> =</span><span
|
Chris@1
|
3523 class="cmtt-8"> vector</span><span
|
Chris@1
|
3524 class="cmtt-8"> [value_vector]</span><span
|
Chris@1
|
3525 class="cmtt-8"> element</span><span
|
Chris@1
|
3526 class="cmtt-8"> [i]</span>
|
Chris@1
|
3527 <br class="fancyvrb" /><a
|
Chris@1
|
3528 id="x1-56020r10"></a><span
|
Chris@1
|
3529 class="cmr-6">10</span><span
|
Chris@1
|
3530 class="cmtt-8"> </span><span
|
Chris@1
|
3531 class="cmtt-8"> </span>
|
Chris@1
|
3532 <br class="fancyvrb" /><a
|
Chris@1
|
3533 id="x1-56022r11"></a><span
|
Chris@1
|
3534 class="cmr-6">11</span><span
|
Chris@1
|
3535 class="cmtt-8"> </span><span
|
Chris@1
|
3536 class="cmtt-8"> </span><span
|
Chris@1
|
3537 class="cmtt-8"> </span><span
|
Chris@1
|
3538 class="cmtt-8"> </span><span
|
Chris@1
|
3539 class="cmtt-8"> </span><span
|
Chris@1
|
3540 class="cmtt-8"> </span><span
|
Chris@1
|
3541 class="cmtt-8"> </span><span
|
Chris@1
|
3542 class="cmtt-8"> </span><span
|
Chris@1
|
3543 class="cmtt-8"> 6)</span><span
|
Chris@1
|
3544 class="cmtt-8"> increment</span><span
|
Chris@1
|
3545 class="cmtt-8"> [multiplicand_offset]</span>
|
Chris@1
|
3546 <br class="fancyvrb" /><a
|
Chris@1
|
3547 id="x1-56024r12"></a><span
|
Chris@1
|
3548 class="cmr-6">12</span><span
|
Chris@1
|
3549 class="cmtt-8"> </span><span
|
Chris@1
|
3550 class="cmtt-8"> </span>
|
Chris@1
|
3551 <br class="fancyvrb" /><a
|
Chris@1
|
3552 id="x1-56026r13"></a><span
|
Chris@1
|
3553 class="cmr-6">13</span><span
|
Chris@1
|
3554 class="cmtt-8"> </span><span
|
Chris@1
|
3555 class="cmtt-8"> </span><span
|
Chris@1
|
3556 class="cmtt-8"> </span><span
|
Chris@1
|
3557 class="cmtt-8"> </span><span
|
Chris@1
|
3558 class="cmtt-8"> </span><span
|
Chris@1
|
3559 class="cmtt-8"> </span><span
|
Chris@1
|
3560 class="cmtt-8"> </span><span
|
Chris@1
|
3561 class="cmsy-8">}</span>
|
Chris@1
|
3562 <br class="fancyvrb" /><a
|
Chris@1
|
3563 id="x1-56028r14"></a><span
|
Chris@1
|
3564 class="cmr-6">14</span><span
|
Chris@1
|
3565 class="cmtt-8"> </span><span
|
Chris@1
|
3566 class="cmtt-8"> </span>
|
Chris@1
|
3567 <br class="fancyvrb" /><a
|
Chris@1
|
3568 id="x1-56030r15"></a><span
|
Chris@1
|
3569 class="cmr-6">15</span><span
|
Chris@1
|
3570 class="cmtt-8"> </span><span
|
Chris@1
|
3571 class="cmtt-8"> </span><span
|
Chris@1
|
3572 class="cmtt-8"> </span><span
|
Chris@1
|
3573 class="cmtt-8"> 7)</span><span
|
Chris@1
|
3574 class="cmtt-8"> vector</span><span
|
Chris@1
|
3575 class="cmtt-8"> calculation</span><span
|
Chris@1
|
3576 class="cmtt-8"> completed.</span>
|
Chris@1
|
3577 </div>
|
Chris@1
|
3578 <!--l. 370--><p class="noindent" >
|
Chris@1
|
3579 <h4 class="subsectionHead"><span class="titlemark">3.3. </span> <a
|
Chris@1
|
3580 id="x1-570003.3"></a>Use of the codebook abstraction</h4>
|
Chris@1
|
3581 <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
|
Chris@1
|
3582 specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
|
Chris@1
|
3583 then returns that entry number to the decoder (when used in a scalar entropy coding context), or
|
Chris@1
|
3584 uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
|
Chris@1
|
3585 used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
|
Chris@1
|
3586 call to the codebook mechanism requests either a scalar entry number or a lookup
|
Chris@1
|
3587 vector.
|
Chris@1
|
3588 <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
|
Chris@1
|
3589 decode using a codebook of lookup type 0 in any context expecting a vector return
|
Chris@1
|
3590 value (even in a case where a vector of dimension one) is forbidden. If decoder setup
|
Chris@1
|
3591 or decode requests such an action, that is an error condition rendering the packet
|
Chris@1
|
3592
|
Chris@1
|
3593
|
Chris@1
|
3594
|
Chris@1
|
3595 undecodable.
|
Chris@1
|
3596 <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
|
Chris@1
|
3597 next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
|
Chris@1
|
3598 codeword in the codebook. This process can be though of as logically walking the
|
Chris@1
|
3599 Huffman decode tree by reading one bit at a time from the bitstream, and using the
|
Chris@1
|
3600 bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
|
Chris@1
|
3601 branch (right in the above examples). Walking the tree finishes when the decode process
|
Chris@1
|
3602 hits a leaf in the decision tree; the result is the entry number corresponding to that
|
Chris@1
|
3603 leaf. Reading past the end of a packet propagates the ’end-of-stream’ condition to the
|
Chris@1
|
3604 decoder.
|
Chris@1
|
3605 <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
|
Chris@1
|
3606 value.
|
Chris@1
|
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
|
Chris@1
|
3608 table. The value returned to the decoder is the vector of scalars corresponding to this
|
Chris@1
|
3609 offset.
|
Chris@1
|
3610
|
Chris@1
|
3611
|
Chris@1
|
3612
|
Chris@1
|
3613
|
Chris@1
|
3614
|
Chris@1
|
3615
|
Chris@1
|
3616 <h3 class="sectionHead"><span class="titlemark">4. </span> <a
|
Chris@1
|
3617 id="x1-580004"></a>Codec Setup and Packet Decode</h3>
|
Chris@1
|
3618 <!--l. 7--><p class="noindent" >
|
Chris@1
|
3619 <h4 class="subsectionHead"><span class="titlemark">4.1. </span> <a
|
Chris@1
|
3620 id="x1-590004.1"></a>Overview</h4>
|
Chris@1
|
3621 <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
|
Chris@1
|
3622 of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
|
Chris@1
|
3623 process, which is provided in <a
|
Chris@1
|
3624 href="#x1-20001">Section 1</a>, “<a
|
Chris@1
|
3625 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>”. <a
|
Chris@1
|
3626 href="#x1-360002">Section 2</a>,
|
Chris@1
|
3627 “<a
|
Chris@1
|
3628 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>” covers reading and writing bit fields from and to bitstream
|
Chris@1
|
3629 packets.
|
Chris@1
|
3630 <!--l. 17--><p class="noindent" >
|
Chris@1
|
3631 <h4 class="subsectionHead"><span class="titlemark">4.2. </span> <a
|
Chris@1
|
3632 id="x1-600004.2"></a>Header decode and decode setup</h4>
|
Chris@1
|
3633 <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
|
Chris@1
|
3634 identification header, the comments header, and the setup header. All are required for decode
|
Chris@1
|
3635 compliance. An end-of-packet condition during decoding the first or third header packet renders
|
Chris@1
|
3636 the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
|
Chris@1
|
3637 condition.
|
Chris@1
|
3638 <!--l. 26--><p class="noindent" >
|
Chris@1
|
3639 <h5 class="subsubsectionHead"><span class="titlemark">4.2.1. </span> <a
|
Chris@1
|
3640 id="x1-610004.2.1"></a>Common header decode</h5>
|
Chris@1
|
3641 <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields.
|
Chris@1
|
3642 <!--l. 31--><p class="noindent" >
|
Chris@1
|
3643 <div class="fancyvrb" id="fancyvrb20">
|
Chris@1
|
3644 <a
|
Chris@1
|
3645 id="x1-61002r1"></a><span
|
Chris@1
|
3646 class="cmr-6">1</span><span
|
Chris@1
|
3647 class="cmtt-8"> </span><span
|
Chris@1
|
3648 class="cmtt-8"> </span><span
|
Chris@1
|
3649 class="cmtt-8"> </span><span
|
Chris@1
|
3650 class="cmtt-8"> 1)</span><span
|
Chris@1
|
3651 class="cmtt-8"> [packet_type]</span><span
|
Chris@1
|
3652 class="cmtt-8"> :</span><span
|
Chris@1
|
3653 class="cmtt-8"> 8</span><span
|
Chris@1
|
3654 class="cmtt-8"> bit</span><span
|
Chris@1
|
3655 class="cmtt-8"> value</span>
|
Chris@1
|
3656 <br class="fancyvrb" /><a
|
Chris@1
|
3657 id="x1-61004r2"></a><span
|
Chris@1
|
3658 class="cmr-6">2</span><span
|
Chris@1
|
3659 class="cmtt-8"> </span><span
|
Chris@1
|
3660 class="cmtt-8"> </span><span
|
Chris@1
|
3661 class="cmtt-8"> </span><span
|
Chris@1
|
3662 class="cmtt-8"> 2)</span><span
|
Chris@1
|
3663 class="cmtt-8"> 0x76,</span><span
|
Chris@1
|
3664 class="cmtt-8"> 0x6f,</span><span
|
Chris@1
|
3665 class="cmtt-8"> 0x72,</span><span
|
Chris@1
|
3666 class="cmtt-8"> 0x62,</span><span
|
Chris@1
|
3667 class="cmtt-8"> 0x69,</span><span
|
Chris@1
|
3668 class="cmtt-8"> 0x73:</span><span
|
Chris@1
|
3669 class="cmtt-8"> the</span><span
|
Chris@1
|
3670 class="cmtt-8"> characters</span><span
|
Chris@1
|
3671 class="cmtt-8"> ’v’,’o’,’r’,’b’,’i’,’s’</span><span
|
Chris@1
|
3672 class="cmtt-8"> as</span><span
|
Chris@1
|
3673 class="cmtt-8"> six</span><span
|
Chris@1
|
3674 class="cmtt-8"> octets</span>
|
Chris@1
|
3675 </div>
|
Chris@1
|
3676
|
Chris@1
|
3677
|
Chris@1
|
3678
|
Chris@1
|
3679 <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
|
Chris@1
|
3680 header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
|
Chris@1
|
3681 single bit of ’0’ is an audio packet). The packets must occur in the order of identification,
|
Chris@1
|
3682 comment, setup.
|
Chris@1
|
3683 <!--l. 44--><p class="noindent" >
|
Chris@1
|
3684 <h5 class="subsubsectionHead"><span class="titlemark">4.2.2. </span> <a
|
Chris@1
|
3685 id="x1-620004.2.2"></a>Identification header</h5>
|
Chris@1
|
3686 <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
|
Chris@1
|
3687 definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
|
Chris@1
|
3688 stream. The identification header is coded as follows:
|
Chris@1
|
3689 <!--l. 51--><p class="noindent" >
|
Chris@1
|
3690 <div class="fancyvrb" id="fancyvrb21">
|
Chris@1
|
3691 <a
|
Chris@1
|
3692 id="x1-62002r1"></a><span
|
Chris@1
|
3693 class="cmr-6">1</span><span
|
Chris@1
|
3694 class="cmtt-8"> </span><span
|
Chris@1
|
3695 class="cmtt-8"> </span><span
|
Chris@1
|
3696 class="cmtt-8"> 1)</span><span
|
Chris@1
|
3697 class="cmtt-8"> [vorbis_version]</span><span
|
Chris@1
|
3698 class="cmtt-8"> =</span><span
|
Chris@1
|
3699 class="cmtt-8"> read</span><span
|
Chris@1
|
3700 class="cmtt-8"> 32</span><span
|
Chris@1
|
3701 class="cmtt-8"> bits</span><span
|
Chris@1
|
3702 class="cmtt-8"> as</span><span
|
Chris@1
|
3703 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
3704 class="cmtt-8"> integer</span>
|
Chris@1
|
3705 <br class="fancyvrb" /><a
|
Chris@1
|
3706 id="x1-62004r2"></a><span
|
Chris@1
|
3707 class="cmr-6">2</span><span
|
Chris@1
|
3708 class="cmtt-8"> </span><span
|
Chris@1
|
3709 class="cmtt-8"> </span><span
|
Chris@1
|
3710 class="cmtt-8"> 2)</span><span
|
Chris@1
|
3711 class="cmtt-8"> [audio_channels]</span><span
|
Chris@1
|
3712 class="cmtt-8"> =</span><span
|
Chris@1
|
3713 class="cmtt-8"> read</span><span
|
Chris@1
|
3714 class="cmtt-8"> 8</span><span
|
Chris@1
|
3715 class="cmtt-8"> bit</span><span
|
Chris@1
|
3716 class="cmtt-8"> integer</span><span
|
Chris@1
|
3717 class="cmtt-8"> as</span><span
|
Chris@1
|
3718 class="cmtt-8"> unsigned</span>
|
Chris@1
|
3719 <br class="fancyvrb" /><a
|
Chris@1
|
3720 id="x1-62006r3"></a><span
|
Chris@1
|
3721 class="cmr-6">3</span><span
|
Chris@1
|
3722 class="cmtt-8"> </span><span
|
Chris@1
|
3723 class="cmtt-8"> </span><span
|
Chris@1
|
3724 class="cmtt-8"> 3)</span><span
|
Chris@1
|
3725 class="cmtt-8"> [audio_sample_rate]</span><span
|
Chris@1
|
3726 class="cmtt-8"> =</span><span
|
Chris@1
|
3727 class="cmtt-8"> read</span><span
|
Chris@1
|
3728 class="cmtt-8"> 32</span><span
|
Chris@1
|
3729 class="cmtt-8"> bits</span><span
|
Chris@1
|
3730 class="cmtt-8"> as</span><span
|
Chris@1
|
3731 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
3732 class="cmtt-8"> integer</span>
|
Chris@1
|
3733 <br class="fancyvrb" /><a
|
Chris@1
|
3734 id="x1-62008r4"></a><span
|
Chris@1
|
3735 class="cmr-6">4</span><span
|
Chris@1
|
3736 class="cmtt-8"> </span><span
|
Chris@1
|
3737 class="cmtt-8"> </span><span
|
Chris@1
|
3738 class="cmtt-8"> 4)</span><span
|
Chris@1
|
3739 class="cmtt-8"> [bitrate_maximum]</span><span
|
Chris@1
|
3740 class="cmtt-8"> =</span><span
|
Chris@1
|
3741 class="cmtt-8"> read</span><span
|
Chris@1
|
3742 class="cmtt-8"> 32</span><span
|
Chris@1
|
3743 class="cmtt-8"> bits</span><span
|
Chris@1
|
3744 class="cmtt-8"> as</span><span
|
Chris@1
|
3745 class="cmtt-8"> signed</span><span
|
Chris@1
|
3746 class="cmtt-8"> integer</span>
|
Chris@1
|
3747 <br class="fancyvrb" /><a
|
Chris@1
|
3748 id="x1-62010r5"></a><span
|
Chris@1
|
3749 class="cmr-6">5</span><span
|
Chris@1
|
3750 class="cmtt-8"> </span><span
|
Chris@1
|
3751 class="cmtt-8"> </span><span
|
Chris@1
|
3752 class="cmtt-8"> 5)</span><span
|
Chris@1
|
3753 class="cmtt-8"> [bitrate_nominal]</span><span
|
Chris@1
|
3754 class="cmtt-8"> =</span><span
|
Chris@1
|
3755 class="cmtt-8"> read</span><span
|
Chris@1
|
3756 class="cmtt-8"> 32</span><span
|
Chris@1
|
3757 class="cmtt-8"> bits</span><span
|
Chris@1
|
3758 class="cmtt-8"> as</span><span
|
Chris@1
|
3759 class="cmtt-8"> signed</span><span
|
Chris@1
|
3760 class="cmtt-8"> integer</span>
|
Chris@1
|
3761 <br class="fancyvrb" /><a
|
Chris@1
|
3762 id="x1-62012r6"></a><span
|
Chris@1
|
3763 class="cmr-6">6</span><span
|
Chris@1
|
3764 class="cmtt-8"> </span><span
|
Chris@1
|
3765 class="cmtt-8"> </span><span
|
Chris@1
|
3766 class="cmtt-8"> 6)</span><span
|
Chris@1
|
3767 class="cmtt-8"> [bitrate_minimum]</span><span
|
Chris@1
|
3768 class="cmtt-8"> =</span><span
|
Chris@1
|
3769 class="cmtt-8"> read</span><span
|
Chris@1
|
3770 class="cmtt-8"> 32</span><span
|
Chris@1
|
3771 class="cmtt-8"> bits</span><span
|
Chris@1
|
3772 class="cmtt-8"> as</span><span
|
Chris@1
|
3773 class="cmtt-8"> signed</span><span
|
Chris@1
|
3774 class="cmtt-8"> integer</span>
|
Chris@1
|
3775 <br class="fancyvrb" /><a
|
Chris@1
|
3776 id="x1-62014r7"></a><span
|
Chris@1
|
3777 class="cmr-6">7</span><span
|
Chris@1
|
3778 class="cmtt-8"> </span><span
|
Chris@1
|
3779 class="cmtt-8"> </span><span
|
Chris@1
|
3780 class="cmtt-8"> 7)</span><span
|
Chris@1
|
3781 class="cmtt-8"> [blocksize_0]</span><span
|
Chris@1
|
3782 class="cmtt-8"> =</span><span
|
Chris@1
|
3783 class="cmtt-8"> 2</span><span
|
Chris@1
|
3784 class="cmtt-8"> exponent</span><span
|
Chris@1
|
3785 class="cmtt-8"> (read</span><span
|
Chris@1
|
3786 class="cmtt-8"> 4</span><span
|
Chris@1
|
3787 class="cmtt-8"> bits</span><span
|
Chris@1
|
3788 class="cmtt-8"> as</span><span
|
Chris@1
|
3789 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
3790 class="cmtt-8"> integer)</span>
|
Chris@1
|
3791 <br class="fancyvrb" /><a
|
Chris@1
|
3792 id="x1-62016r8"></a><span
|
Chris@1
|
3793 class="cmr-6">8</span><span
|
Chris@1
|
3794 class="cmtt-8"> </span><span
|
Chris@1
|
3795 class="cmtt-8"> </span><span
|
Chris@1
|
3796 class="cmtt-8"> 8)</span><span
|
Chris@1
|
3797 class="cmtt-8"> [blocksize_1]</span><span
|
Chris@1
|
3798 class="cmtt-8"> =</span><span
|
Chris@1
|
3799 class="cmtt-8"> 2</span><span
|
Chris@1
|
3800 class="cmtt-8"> exponent</span><span
|
Chris@1
|
3801 class="cmtt-8"> (read</span><span
|
Chris@1
|
3802 class="cmtt-8"> 4</span><span
|
Chris@1
|
3803 class="cmtt-8"> bits</span><span
|
Chris@1
|
3804 class="cmtt-8"> as</span><span
|
Chris@1
|
3805 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
3806 class="cmtt-8"> integer)</span>
|
Chris@1
|
3807 <br class="fancyvrb" /><a
|
Chris@1
|
3808 id="x1-62018r9"></a><span
|
Chris@1
|
3809 class="cmr-6">9</span><span
|
Chris@1
|
3810 class="cmtt-8"> </span><span
|
Chris@1
|
3811 class="cmtt-8"> </span><span
|
Chris@1
|
3812 class="cmtt-8"> 9)</span><span
|
Chris@1
|
3813 class="cmtt-8"> [framing_flag]</span><span
|
Chris@1
|
3814 class="cmtt-8"> =</span><span
|
Chris@1
|
3815 class="cmtt-8"> read</span><span
|
Chris@1
|
3816 class="cmtt-8"> one</span><span
|
Chris@1
|
3817 class="cmtt-8"> bit</span>
|
Chris@1
|
3818 </div>
|
Chris@1
|
3819 <!--l. 63--><p class="noindent" ><span
|
Chris@1
|
3820 class="cmtt-12">[vorbis_version] </span>is to read ’0’ in order to be compatible with this document. Both
|
Chris@1
|
3821 <span
|
Chris@1
|
3822 class="cmtt-12">[audio_channels] </span>and <span
|
Chris@1
|
3823 class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
|
Chris@1
|
3824 blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span
|
Chris@1
|
3825 class="cmtt-12">[blocksize_0]</span>
|
Chris@1
|
3826 must be less than or equal to <span
|
Chris@1
|
3827 class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
|
Chris@1
|
3828 any of these conditions renders a stream undecodable.
|
Chris@1
|
3829 <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
|
Chris@1
|
3830 considerably off in purely VBR streams. The fields are meaningful only when greater than
|
Chris@1
|
3831 zero.
|
Chris@1
|
3832 <ul class="itemize1">
|
Chris@1
|
3833 <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
|
Chris@1
|
3834 fixed-rate bitstream
|
Chris@1
|
3835 </li>
|
Chris@1
|
3836 <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
|
Chris@1
|
3837
|
Chris@1
|
3838
|
Chris@1
|
3839
|
Chris@1
|
3840 </li>
|
Chris@1
|
3841 <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
|
Chris@1
|
3842 </li>
|
Chris@1
|
3843 <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
|
Chris@1
|
3844 <!--l. 85--><p class="noindent" >
|
Chris@1
|
3845 <h5 class="subsubsectionHead"><span class="titlemark">4.2.3. </span> <a
|
Chris@1
|
3846 id="x1-630004.2.3"></a>Comment header</h5>
|
Chris@1
|
3847 <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a
|
Chris@1
|
3848 href="#x1-810005">Section 5</a>, “<a
|
Chris@1
|
3849 href="#x1-810005">comment field and
|
Chris@1
|
3850 header specification<!--tex4ht:ref: vorbis:spec:comment --></a>”.
|
Chris@1
|
3851 <!--l. 90--><p class="noindent" >
|
Chris@1
|
3852 <h5 class="subsubsectionHead"><span class="titlemark">4.2.4. </span> <a
|
Chris@1
|
3853 id="x1-640004.2.4"></a>Setup header</h5>
|
Chris@1
|
3854 <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
|
Chris@1
|
3855 <div class="center"
|
Chris@1
|
3856 >
|
Chris@1
|
3857 <!--l. 94--><p class="noindent" >
|
Chris@1
|
3858
|
Chris@1
|
3859 <!--l. 95--><p class="noindent" ><img
|
Chris@1
|
3860 src="components.png" alt="PIC"
|
Chris@1
|
3861 >
|
Chris@1
|
3862 <br /> <div class="caption"
|
Chris@1
|
3863 ><span class="id">Figure 6: </span><span
|
Chris@1
|
3864 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 -->
|
Chris@1
|
3865 </div>
|
Chris@1
|
3866 <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
|
Chris@1
|
3867 header contains, in order, the lists of codebook configurations, time-domain transform
|
Chris@1
|
3868 configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
|
Chris@1
|
3869 mapping configurations and mode configurations. It finishes with a framing bit of ’1’. Header
|
Chris@1
|
3870 decode proceeds in the following order:
|
Chris@1
|
3871 <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3872 id="x1-650004.2.4"></a><span
|
Chris@1
|
3873 class="cmbx-12">Codebooks</span></span>
|
Chris@1
|
3874
|
Chris@1
|
3875
|
Chris@1
|
3876
|
Chris@1
|
3877 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
3878 1. </dt><dd
|
Chris@1
|
3879 class="enumerate-enumitem"><span
|
Chris@1
|
3880 class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
|
Chris@1
|
3881 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3882 2. </dt><dd
|
Chris@1
|
3883 class="enumerate-enumitem">Decode <span
|
Chris@1
|
3884 class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a
|
Chris@1
|
3885 href="#x1-470003">Section 3</a>,
|
Chris@1
|
3886 “<a
|
Chris@1
|
3887 href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>”. Save each configuration, in order, in an array
|
Chris@1
|
3888 of codebook configurations <span
|
Chris@1
|
3889 class="cmtt-12">[vorbis_codebook_configurations]</span>.</dd></dl>
|
Chris@1
|
3890 <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3891 id="x1-660004.2.4"></a><span
|
Chris@1
|
3892 class="cmbx-12">Time domain transforms</span></span>
|
Chris@1
|
3893 These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
|
Chris@1
|
3894 be read to maintain bitstream sync.
|
Chris@1
|
3895 <!--l. 127--><p class="noindent" >
|
Chris@1
|
3896 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
3897 1. </dt><dd
|
Chris@1
|
3898 class="enumerate-enumitem"><span
|
Chris@1
|
3899 class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
|
Chris@1
|
3900 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3901 2. </dt><dd
|
Chris@1
|
3902 class="enumerate-enumitem">read <span
|
Chris@1
|
3903 class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
|
Chris@1
|
3904 nonzero, this is an error condition and the stream is undecodable.</dd></dl>
|
Chris@1
|
3905 <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3906 id="x1-670004.2.4"></a><span
|
Chris@1
|
3907 class="cmbx-12">Floors</span></span>
|
Chris@1
|
3908 Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
|
Chris@1
|
3909 type.
|
Chris@1
|
3910 <!--l. 139--><p class="noindent" >
|
Chris@1
|
3911 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
3912 1. </dt><dd
|
Chris@1
|
3913 class="enumerate-enumitem"><span
|
Chris@1
|
3914 class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
|
Chris@1
|
3915 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3916 2. </dt><dd
|
Chris@1
|
3917 class="enumerate-enumitem">For each <span
|
Chris@1
|
3918 class="cmtt-12">[i] </span>of <span
|
Chris@1
|
3919 class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
|
Chris@1
|
3920 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
3921 a) </dt><dd
|
Chris@1
|
3922 class="enumerate-enumitem">read the floor type: vector <span
|
Chris@1
|
3923 class="cmtt-12">[vorbis_floor_types] </span>element <span
|
Chris@1
|
3924 class="cmtt-12">[i] </span>= read 16 bits
|
Chris@1
|
3925 as unsigned integer
|
Chris@1
|
3926 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3927 b) </dt><dd
|
Chris@1
|
3928 class="enumerate-enumitem">If the floor type is zero, decode the floor configuration as defined in <a
|
Chris@1
|
3929 href="#x1-890006">Section 6</a>,
|
Chris@1
|
3930 “<a
|
Chris@1
|
3931 href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>”; save this configuration in slot <span
|
Chris@1
|
3932 class="cmtt-12">[i] </span>of the floor
|
Chris@1
|
3933 configuration array <span
|
Chris@1
|
3934 class="cmtt-12">[vorbis_floor_configurations]</span>.
|
Chris@1
|
3935
|
Chris@1
|
3936
|
Chris@1
|
3937
|
Chris@1
|
3938 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3939 c) </dt><dd
|
Chris@1
|
3940 class="enumerate-enumitem">If the floor type is one, decode the floor configuration as defined in <a
|
Chris@1
|
3941 href="#x1-950007">Section 7</a>,
|
Chris@1
|
3942 “<a
|
Chris@1
|
3943 href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>”; save this configuration in slot <span
|
Chris@1
|
3944 class="cmtt-12">[i] </span>of the floor
|
Chris@1
|
3945 configuration array <span
|
Chris@1
|
3946 class="cmtt-12">[vorbis_floor_configurations]</span>.
|
Chris@1
|
3947 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3948 d) </dt><dd
|
Chris@1
|
3949 class="enumerate-enumitem">If the the floor type is greater than one, this stream is undecodable; ERROR
|
Chris@1
|
3950 CONDITION</dd></dl>
|
Chris@1
|
3951 </dd></dl>
|
Chris@1
|
3952 <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3953 id="x1-680004.2.4"></a><span
|
Chris@1
|
3954 class="cmbx-12">Residues</span></span>
|
Chris@1
|
3955 Vorbis uses three residue types; header decode of each type is identical.
|
Chris@1
|
3956 <!--l. 163--><p class="noindent" >
|
Chris@1
|
3957 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
3958 1. </dt><dd
|
Chris@1
|
3959 class="enumerate-enumitem"><span
|
Chris@1
|
3960 class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
|
Chris@1
|
3961 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3962 2. </dt><dd
|
Chris@1
|
3963 class="enumerate-enumitem">For each of <span
|
Chris@1
|
3964 class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
|
Chris@1
|
3965 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
3966 a) </dt><dd
|
Chris@1
|
3967 class="enumerate-enumitem">read the residue type; vector <span
|
Chris@1
|
3968 class="cmtt-12">[vorbis_residue_types] </span>element <span
|
Chris@1
|
3969 class="cmtt-12">[i] </span>= read 16
|
Chris@1
|
3970 bits as unsigned integer
|
Chris@1
|
3971 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3972 b) </dt><dd
|
Chris@1
|
3973 class="enumerate-enumitem">If the residue type is zero, one or two, decode the residue configuration as defined
|
Chris@1
|
3974 in <a
|
Chris@1
|
3975 href="#x1-1020008">Section 8</a>, “<a
|
Chris@1
|
3976 href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>”; save this configuration in slot <span
|
Chris@1
|
3977 class="cmtt-12">[i] </span>of
|
Chris@1
|
3978 the residue configuration array <span
|
Chris@1
|
3979 class="cmtt-12">[vorbis_residue_configurations]</span>.
|
Chris@1
|
3980 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
3981 c) </dt><dd
|
Chris@1
|
3982 class="enumerate-enumitem">If the the residue type is greater than two, this stream is undecodable; ERROR
|
Chris@1
|
3983 CONDITION</dd></dl>
|
Chris@1
|
3984 </dd></dl>
|
Chris@1
|
3985 <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
3986 id="x1-690004.2.4"></a><span
|
Chris@1
|
3987 class="cmbx-12">Mappings</span></span>
|
Chris@1
|
3988 Mappings are used to set up specific pipelines for encoding multichannel audio with varying
|
Chris@1
|
3989 channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
|
Chris@1
|
3990 channel mappings.
|
Chris@1
|
3991
|
Chris@1
|
3992
|
Chris@1
|
3993
|
Chris@1
|
3994 <!--l. 188--><p class="noindent" >
|
Chris@1
|
3995 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
3996 1. </dt><dd
|
Chris@1
|
3997 class="enumerate-enumitem"><span
|
Chris@1
|
3998 class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
|
Chris@1
|
3999 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4000 2. </dt><dd
|
Chris@1
|
4001 class="enumerate-enumitem">For each <span
|
Chris@1
|
4002 class="cmtt-12">[i] </span>of <span
|
Chris@1
|
4003 class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
|
Chris@1
|
4004 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4005 a) </dt><dd
|
Chris@1
|
4006 class="enumerate-enumitem">read the mapping type: 16 bits as unsigned integer. There’s no reason to save
|
Chris@1
|
4007 the mapping type in Vorbis I.
|
Chris@1
|
4008 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4009 b) </dt><dd
|
Chris@1
|
4010 class="enumerate-enumitem">If the mapping type is nonzero, the stream is undecodable
|
Chris@1
|
4011 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4012 c) </dt><dd
|
Chris@1
|
4013 class="enumerate-enumitem">If the mapping type is zero:
|
Chris@1
|
4014 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4015 i. </dt><dd
|
Chris@1
|
4016 class="enumerate-enumitem">read 1 bit as a boolean flag
|
Chris@1
|
4017 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4018 A. </dt><dd
|
Chris@1
|
4019 class="enumerate-enumitem">if set, <span
|
Chris@1
|
4020 class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
|
Chris@1
|
4021 and add one
|
Chris@1
|
4022 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4023 B. </dt><dd
|
Chris@1
|
4024 class="enumerate-enumitem">if unset, <span
|
Chris@1
|
4025 class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</dd></dl>
|
Chris@1
|
4026 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4027 ii. </dt><dd
|
Chris@1
|
4028 class="enumerate-enumitem">read 1 bit as a boolean flag
|
Chris@1
|
4029 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4030 A. </dt><dd
|
Chris@1
|
4031 class="enumerate-enumitem">if set, square polar channel mapping is in use:
|
Chris@1
|
4032 <ul class="itemize1">
|
Chris@1
|
4033 <li class="itemize"><span
|
Chris@1
|
4034 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= read 8 bits as unsigned
|
Chris@1
|
4035 integer and add one
|
Chris@1
|
4036 </li>
|
Chris@1
|
4037 <li class="itemize">for <span
|
Chris@1
|
4038 class="cmtt-12">[j] </span>each of <span
|
Chris@1
|
4039 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
|
Chris@1
|
4040 <ul class="itemize2">
|
Chris@1
|
4041 <li class="itemize">vector <span
|
Chris@1
|
4042 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
|
Chris@1
|
4043 class="cmtt-12">[j]</span>= read
|
Chris@1
|
4044 <a
|
Chris@1
|
4045 href="#x1-1170009.2.1">ilog</a>(<span
|
Chris@1
|
4046 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
|
Chris@1
|
4047 </li>
|
Chris@1
|
4048 <li class="itemize">vector <span
|
Chris@1
|
4049 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
|
Chris@1
|
4050 class="cmtt-12">[j]</span>= read
|
Chris@1
|
4051 <a
|
Chris@1
|
4052 href="#x1-1170009.2.1">ilog</a>(<span
|
Chris@1
|
4053 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
|
Chris@1
|
4054 </li>
|
Chris@1
|
4055
|
Chris@1
|
4056
|
Chris@1
|
4057
|
Chris@1
|
4058 <li class="itemize">the numbers read in the above two steps are channel numbers
|
Chris@1
|
4059 representing the channel to treat as magnitude and the channel
|
Chris@1
|
4060 to treat as angle, respectively. If for any coupling step the
|
Chris@1
|
4061 angle channel number equals the magnitude channel number, the
|
Chris@1
|
4062 magnitude channel number is greater than <span
|
Chris@1
|
4063 class="cmtt-12">[audio_channels]</span>-1, or
|
Chris@1
|
4064 the angle channel is greater than <span
|
Chris@1
|
4065 class="cmtt-12">[audio_channels]</span>-1, the stream
|
Chris@1
|
4066 is undecodable.</li></ul>
|
Chris@1
|
4067 </li></ul>
|
Chris@1
|
4068 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4069 B. </dt><dd
|
Chris@1
|
4070 class="enumerate-enumitem">if unset, <span
|
Chris@1
|
4071 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</dd></dl>
|
Chris@1
|
4072 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4073 iii. </dt><dd
|
Chris@1
|
4074 class="enumerate-enumitem">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
|
Chris@1
|
4075 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4076 iv. </dt><dd
|
Chris@1
|
4077 class="enumerate-enumitem">if <span
|
Chris@1
|
4078 class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
|
Chris@1
|
4079 settings. For each <span
|
Chris@1
|
4080 class="cmtt-12">[j] </span>of <span
|
Chris@1
|
4081 class="cmtt-12">[audio_channels] </span>channels:
|
Chris@1
|
4082 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4083 A. </dt><dd
|
Chris@1
|
4084 class="enumerate-enumitem">vector <span
|
Chris@1
|
4085 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
|
Chris@1
|
4086 class="cmtt-12">[j] </span>= read 4 bits as unsigned
|
Chris@1
|
4087 integer
|
Chris@1
|
4088 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4089 B. </dt><dd
|
Chris@1
|
4090 class="enumerate-enumitem">if the value is greater than the highest numbered submap
|
Chris@1
|
4091 (<span
|
Chris@1
|
4092 class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
|
Chris@1
|
4093 the stream undecodable</dd></dl>
|
Chris@1
|
4094 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4095 v. </dt><dd
|
Chris@1
|
4096 class="enumerate-enumitem">for each submap <span
|
Chris@1
|
4097 class="cmtt-12">[j] </span>of <span
|
Chris@1
|
4098 class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
|
Chris@1
|
4099 residue numbers for use in decoding that submap:
|
Chris@1
|
4100 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4101 A. </dt><dd
|
Chris@1
|
4102 class="enumerate-enumitem">read and discard 8 bits (the unused time configuration placeholder)
|
Chris@1
|
4103 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4104 B. </dt><dd
|
Chris@1
|
4105 class="enumerate-enumitem">read 8 bits as unsigned integer for the floor number; save in vector
|
Chris@1
|
4106 <span
|
Chris@1
|
4107 class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span
|
Chris@1
|
4108 class="cmtt-12">[j]</span>
|
Chris@1
|
4109 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4110 C. </dt><dd
|
Chris@1
|
4111 class="enumerate-enumitem">verify the floor number is not greater than the highest number floor
|
Chris@1
|
4112 configured for the bitstream. If it is, the bitstream is undecodable
|
Chris@1
|
4113 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4114 D. </dt><dd
|
Chris@1
|
4115 class="enumerate-enumitem">read 8 bits as unsigned integer for the residue number; save in vector
|
Chris@1
|
4116 <span
|
Chris@1
|
4117 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
|
Chris@1
|
4118 class="cmtt-12">[j]</span>
|
Chris@1
|
4119
|
Chris@1
|
4120
|
Chris@1
|
4121
|
Chris@1
|
4122 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4123 E. </dt><dd
|
Chris@1
|
4124 class="enumerate-enumitem">verify the residue number is not greater than the highest number residue
|
Chris@1
|
4125 configured for the bitstream. If it is, the bitstream is undecodable</dd></dl>
|
Chris@1
|
4126 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4127 vi. </dt><dd
|
Chris@1
|
4128 class="enumerate-enumitem">save this mapping configuration in slot <span
|
Chris@1
|
4129 class="cmtt-12">[i] </span>of the mapping configuration array
|
Chris@1
|
4130 <span
|
Chris@1
|
4131 class="cmtt-12">[vorbis_mapping_configurations]</span>.</dd></dl>
|
Chris@1
|
4132 </dd></dl>
|
Chris@1
|
4133 </dd></dl>
|
Chris@1
|
4134 <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
4135 id="x1-700004.2.4"></a><span
|
Chris@1
|
4136 class="cmbx-12">Modes</span></span>
|
Chris@1
|
4137 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4138 1. </dt><dd
|
Chris@1
|
4139 class="enumerate-enumitem"><span
|
Chris@1
|
4140 class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
|
Chris@1
|
4141 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4142 2. </dt><dd
|
Chris@1
|
4143 class="enumerate-enumitem">For each of <span
|
Chris@1
|
4144 class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
|
Chris@1
|
4145 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4146 a) </dt><dd
|
Chris@1
|
4147 class="enumerate-enumitem"><span
|
Chris@1
|
4148 class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
|
Chris@1
|
4149 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4150 b) </dt><dd
|
Chris@1
|
4151 class="enumerate-enumitem"><span
|
Chris@1
|
4152 class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
|
Chris@1
|
4153 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4154 c) </dt><dd
|
Chris@1
|
4155 class="enumerate-enumitem"><span
|
Chris@1
|
4156 class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
|
Chris@1
|
4157 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4158 d) </dt><dd
|
Chris@1
|
4159 class="enumerate-enumitem"><span
|
Chris@1
|
4160 class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
|
Chris@1
|
4161 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4162 e) </dt><dd
|
Chris@1
|
4163 class="enumerate-enumitem">verify ranges; zero is the only legal value in
|
Chris@1
|
4164 Vorbis I for <span
|
Chris@1
|
4165 class="cmtt-12">[vorbis_mode_windowtype] </span>and <span
|
Chris@1
|
4166 class="cmtt-12">[vorbis_mode_transformtype]</span>.
|
Chris@1
|
4167 <span
|
Chris@1
|
4168 class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
|
Chris@1
|
4169 in use. Any illegal values render the stream undecodable.
|
Chris@1
|
4170 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4171 f) </dt><dd
|
Chris@1
|
4172 class="enumerate-enumitem">save this mode configuration in slot <span
|
Chris@1
|
4173 class="cmtt-12">[i] </span>of the mode configuration array
|
Chris@1
|
4174 <span
|
Chris@1
|
4175 class="cmtt-12">[vorbis_mode_configurations]</span>.</dd></dl>
|
Chris@1
|
4176 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4177 3. </dt><dd
|
Chris@1
|
4178 class="enumerate-enumitem">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
|
Chris@1
|
4179 decodable.</dd></dl>
|
Chris@1
|
4180
|
Chris@1
|
4181
|
Chris@1
|
4182
|
Chris@1
|
4183 <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
|
Chris@1
|
4184 <!--l. 277--><p class="noindent" >
|
Chris@1
|
4185 <h4 class="subsectionHead"><span class="titlemark">4.3. </span> <a
|
Chris@1
|
4186 id="x1-710004.3"></a>Audio packet decode and synthesis</h4>
|
Chris@1
|
4187 <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
|
Chris@1
|
4188 audio packet decode is to read and verify the packet type. <span
|
Chris@1
|
4189 class="cmti-12">A non-audio packet when audio is</span>
|
Chris@1
|
4190 <span
|
Chris@1
|
4191 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
|
Chris@1
|
4192 <span
|
Chris@1
|
4193 class="cmti-12">packet and not attempt decoding it to audio</span>.
|
Chris@1
|
4194 <!--l. 286--><p class="noindent" >
|
Chris@1
|
4195 <h5 class="subsubsectionHead"><span class="titlemark">4.3.1. </span> <a
|
Chris@1
|
4196 id="x1-720004.3.1"></a>packet type, mode and window decode</h5>
|
Chris@1
|
4197 <!--l. 289--><p class="noindent" >
|
Chris@1
|
4198 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4199 1. </dt><dd
|
Chris@1
|
4200 class="enumerate-enumitem">read 1 bit <span
|
Chris@1
|
4201 class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
|
Chris@1
|
4202 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4203 2. </dt><dd
|
Chris@1
|
4204 class="enumerate-enumitem">read <a
|
Chris@1
|
4205 href="#x1-1170009.2.1">ilog</a>([vorbis_mode_count]-1) bits <span
|
Chris@1
|
4206 class="cmtt-12">[mode_number]</span>
|
Chris@1
|
4207 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4208 3. </dt><dd
|
Chris@1
|
4209 class="enumerate-enumitem">decode blocksize <span
|
Chris@1
|
4210 class="cmtt-12">[n] </span>is equal to <span
|
Chris@1
|
4211 class="cmtt-12">[blocksize_0] </span>if <span
|
Chris@1
|
4212 class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
|
Chris@1
|
4213 else <span
|
Chris@1
|
4214 class="cmtt-12">[n] </span>is equal to <span
|
Chris@1
|
4215 class="cmtt-12">[blocksize_1]</span>.
|
Chris@1
|
4216 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4217 4. </dt><dd
|
Chris@1
|
4218 class="enumerate-enumitem">perform window selection and setup; this window is used later by the inverse
|
Chris@1
|
4219 MDCT:
|
Chris@1
|
4220 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4221 a) </dt><dd
|
Chris@1
|
4222 class="enumerate-enumitem">if this is a long window (the <span
|
Chris@1
|
4223 class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
|
Chris@1
|
4224 set):
|
Chris@1
|
4225 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4226 i. </dt><dd
|
Chris@1
|
4227 class="enumerate-enumitem">read 1 bit for <span
|
Chris@1
|
4228 class="cmtt-12">[previous_window_flag]</span>
|
Chris@1
|
4229 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4230 ii. </dt><dd
|
Chris@1
|
4231 class="enumerate-enumitem">read 1 bit for <span
|
Chris@1
|
4232 class="cmtt-12">[next_window_flag]</span>
|
Chris@1
|
4233
|
Chris@1
|
4234
|
Chris@1
|
4235
|
Chris@1
|
4236 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4237 iii. </dt><dd
|
Chris@1
|
4238 class="enumerate-enumitem">if <span
|
Chris@1
|
4239 class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
|
Chris@1
|
4240 be a hybrid window for lapping with a short block. See <a
|
Chris@1
|
4241 href="#paragraph.1" >paragraph <a
|
Chris@1
|
4242 href="#x1-260001.3.2">1.3.2</a></a>,
|
Chris@1
|
4243 “<a
|
Chris@1
|
4244 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>” for an illustration of
|
Chris@1
|
4245 overlapping dissimilar windows. Else, the left half window will have normal
|
Chris@1
|
4246 long shape.
|
Chris@1
|
4247 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4248 iv. </dt><dd
|
Chris@1
|
4249 class="enumerate-enumitem">if <span
|
Chris@1
|
4250 class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
|
Chris@1
|
4251 a hybrid window for lapping with a short block. See <a
|
Chris@1
|
4252 href="#x1-260001.3.2">paragraph 1.3.2</a>,
|
Chris@1
|
4253 “<a
|
Chris@1
|
4254 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>” for an illustration of
|
Chris@1
|
4255 overlapping dissimilar windows. Else, the left right window will have normal
|
Chris@1
|
4256 long shape.</dd></dl>
|
Chris@1
|
4257 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4258 b) </dt><dd
|
Chris@1
|
4259 class="enumerate-enumitem">if this is a short window, the window is always the same short-window
|
Chris@1
|
4260 shape.</dd></dl>
|
Chris@1
|
4261 </dd></dl>
|
Chris@1
|
4262 <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span
|
Chris@1
|
4263 class="cmmi-12">y </span>= sin(<img
|
Chris@1
|
4264 src="Vorbis_I_spec1x.png" alt="π2" class="frac" align="middle"> <span
|
Chris@1
|
4265 class="cmsy-10x-x-120">∗</span> sin <sup><span
|
Chris@1
|
4266 class="cmr-8">2</span></sup>((<span
|
Chris@1
|
4267 class="cmmi-12">x </span>+ 0<span
|
Chris@1
|
4268 class="cmmi-12">.</span>5)<span
|
Chris@1
|
4269 class="cmmi-12">∕n </span><span
|
Chris@1
|
4270 class="cmsy-10x-x-120">∗ </span><span
|
Chris@1
|
4271 class="cmmi-12">π</span>)), where <span
|
Chris@1
|
4272 class="cmmi-12">n </span>is window
|
Chris@1
|
4273 size and <span
|
Chris@1
|
4274 class="cmmi-12">x </span>ranges 0<span
|
Chris@1
|
4275 class="cmmi-12">…</span><span
|
Chris@1
|
4276 class="cmmi-12">n</span><span
|
Chris@1
|
4277 class="cmsy-10x-x-120">− </span>1, but dissimilar lapping requirements can affect overall shape. Window
|
Chris@1
|
4278 generation proceeds as follows:
|
Chris@1
|
4279 <!--l. 327--><p class="noindent" >
|
Chris@1
|
4280 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4281 1. </dt><dd
|
Chris@1
|
4282 class="enumerate-enumitem"><span
|
Chris@1
|
4283 class="cmtt-12">[window_center] </span>= <span
|
Chris@1
|
4284 class="cmtt-12">[n] </span>/ 2
|
Chris@1
|
4285 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4286 2. </dt><dd
|
Chris@1
|
4287 class="enumerate-enumitem">if (<span
|
Chris@1
|
4288 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
|
Chris@1
|
4289 class="cmtt-12">[previous_window_flag] </span>is not set)
|
Chris@1
|
4290 then
|
Chris@1
|
4291 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4292 a) </dt><dd
|
Chris@1
|
4293 class="enumerate-enumitem"><span
|
Chris@1
|
4294 class="cmtt-12">[left_window_start] </span>= <span
|
Chris@1
|
4295 class="cmtt-12">[n]</span>/4 - <span
|
Chris@1
|
4296 class="cmtt-12">[blocksize_0]</span>/4
|
Chris@1
|
4297 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4298 b) </dt><dd
|
Chris@1
|
4299 class="enumerate-enumitem"><span
|
Chris@1
|
4300 class="cmtt-12">[left_window_end] </span>= <span
|
Chris@1
|
4301 class="cmtt-12">[n]</span>/4 + <span
|
Chris@1
|
4302 class="cmtt-12">[blocksize_0]</span>/4
|
Chris@1
|
4303 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4304 c) </dt><dd
|
Chris@1
|
4305 class="enumerate-enumitem"><span
|
Chris@1
|
4306 class="cmtt-12">[left_n] </span>= <span
|
Chris@1
|
4307 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
|
Chris@1
|
4308 <!--l. 336--><p class="noindent" >else
|
Chris@1
|
4309 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4310 a) </dt><dd
|
Chris@1
|
4311 class="enumerate-enumitem"><span
|
Chris@1
|
4312 class="cmtt-12">[left_window_start] </span>= 0
|
Chris@1
|
4313 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4314 b) </dt><dd
|
Chris@1
|
4315 class="enumerate-enumitem"><span
|
Chris@1
|
4316 class="cmtt-12">[left_window_end] </span>= <span
|
Chris@1
|
4317 class="cmtt-12">[window_center]</span>
|
Chris@1
|
4318
|
Chris@1
|
4319
|
Chris@1
|
4320
|
Chris@1
|
4321 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4322 c) </dt><dd
|
Chris@1
|
4323 class="enumerate-enumitem"><span
|
Chris@1
|
4324 class="cmtt-12">[left_n] </span>= <span
|
Chris@1
|
4325 class="cmtt-12">[n]</span>/2</dd></dl>
|
Chris@1
|
4326 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4327 3. </dt><dd
|
Chris@1
|
4328 class="enumerate-enumitem">if (<span
|
Chris@1
|
4329 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
|
Chris@1
|
4330 class="cmtt-12">[next_window_flag] </span>is not set) then
|
Chris@1
|
4331 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4332 a) </dt><dd
|
Chris@1
|
4333 class="enumerate-enumitem"><span
|
Chris@1
|
4334 class="cmtt-12">[right_window_start] </span>= <span
|
Chris@1
|
4335 class="cmtt-12">[n]*3</span>/4 - <span
|
Chris@1
|
4336 class="cmtt-12">[blocksize_0]</span>/4
|
Chris@1
|
4337 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4338 b) </dt><dd
|
Chris@1
|
4339 class="enumerate-enumitem"><span
|
Chris@1
|
4340 class="cmtt-12">[right_window_end] </span>= <span
|
Chris@1
|
4341 class="cmtt-12">[n]*3</span>/4 + <span
|
Chris@1
|
4342 class="cmtt-12">[blocksize_0]</span>/4
|
Chris@1
|
4343 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4344 c) </dt><dd
|
Chris@1
|
4345 class="enumerate-enumitem"><span
|
Chris@1
|
4346 class="cmtt-12">[right_n] </span>= <span
|
Chris@1
|
4347 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
|
Chris@1
|
4348 <!--l. 352--><p class="noindent" >else
|
Chris@1
|
4349 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4350 a) </dt><dd
|
Chris@1
|
4351 class="enumerate-enumitem"><span
|
Chris@1
|
4352 class="cmtt-12">[right_window_start] </span>= <span
|
Chris@1
|
4353 class="cmtt-12">[window_center]</span>
|
Chris@1
|
4354 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4355 b) </dt><dd
|
Chris@1
|
4356 class="enumerate-enumitem"><span
|
Chris@1
|
4357 class="cmtt-12">[right_window_end] </span>= <span
|
Chris@1
|
4358 class="cmtt-12">[n]</span>
|
Chris@1
|
4359 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4360 c) </dt><dd
|
Chris@1
|
4361 class="enumerate-enumitem"><span
|
Chris@1
|
4362 class="cmtt-12">[right_n] </span>= <span
|
Chris@1
|
4363 class="cmtt-12">[n]</span>/2</dd></dl>
|
Chris@1
|
4364 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4365 4. </dt><dd
|
Chris@1
|
4366 class="enumerate-enumitem">window from range 0 ... <span
|
Chris@1
|
4367 class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
|
Chris@1
|
4368 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4369 5. </dt><dd
|
Chris@1
|
4370 class="enumerate-enumitem">for <span
|
Chris@1
|
4371 class="cmtt-12">[i] </span>in range <span
|
Chris@1
|
4372 class="cmtt-12">[left_window_start] </span>... <span
|
Chris@1
|
4373 class="cmtt-12">[left_window_end]</span>-1, window(<span
|
Chris@1
|
4374 class="cmtt-12">[i]</span>) =
|
Chris@1
|
4375 sin(<img
|
Chris@1
|
4376 src="Vorbis_I_spec2x.png" alt="π
|
Chris@1
|
4377 2" class="frac" align="middle"> <span
|
Chris@1
|
4378 class="cmsy-10x-x-120">∗</span> sin <sup><span
|
Chris@1
|
4379 class="cmr-8">2</span></sup>( (<span
|
Chris@1
|
4380 class="cmtt-12">[i]</span>-<span
|
Chris@1
|
4381 class="cmtt-12">[left_window_start]</span>+0.5) / <span
|
Chris@1
|
4382 class="cmtt-12">[left_n] </span><span
|
Chris@1
|
4383 class="cmsy-10x-x-120">∗</span><img
|
Chris@1
|
4384 src="Vorbis_I_spec3x.png" alt="π
|
Chris@1
|
4385 2" class="frac" align="middle">) )
|
Chris@1
|
4386 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4387 6. </dt><dd
|
Chris@1
|
4388 class="enumerate-enumitem">window from range <span
|
Chris@1
|
4389 class="cmtt-12">[left_window_end] </span>... <span
|
Chris@1
|
4390 class="cmtt-12">[right_window_start]</span>-1 inclusive is
|
Chris@1
|
4391 one
|
Chris@1
|
4392 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4393 7. </dt><dd
|
Chris@1
|
4394 class="enumerate-enumitem">for <span
|
Chris@1
|
4395 class="cmtt-12">[i] </span>in range <span
|
Chris@1
|
4396 class="cmtt-12">[right_window_start] </span>... <span
|
Chris@1
|
4397 class="cmtt-12">[right_window_end]</span>-1, window(<span
|
Chris@1
|
4398 class="cmtt-12">[i]</span>) =
|
Chris@1
|
4399 sin(<img
|
Chris@1
|
4400 src="Vorbis_I_spec4x.png" alt="π
|
Chris@1
|
4401 2" class="frac" align="middle"> <span
|
Chris@1
|
4402 class="cmsy-10x-x-120">∗</span> sin <sup><span
|
Chris@1
|
4403 class="cmr-8">2</span></sup>( (<span
|
Chris@1
|
4404 class="cmtt-12">[i]</span>-<span
|
Chris@1
|
4405 class="cmtt-12">[right_window_start]</span>+0.5) / <span
|
Chris@1
|
4406 class="cmtt-12">[right_n] </span><span
|
Chris@1
|
4407 class="cmsy-10x-x-120">∗</span><img
|
Chris@1
|
4408 src="Vorbis_I_spec5x.png" alt="π
|
Chris@1
|
4409 2" class="frac" align="middle"> + <img
|
Chris@1
|
4410 src="Vorbis_I_spec6x.png" alt="π
|
Chris@1
|
4411 2" class="frac" align="middle">) )
|
Chris@1
|
4412 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4413 8. </dt><dd
|
Chris@1
|
4414 class="enumerate-enumitem">window from range <span
|
Chris@1
|
4415 class="cmtt-12">[right_window_start] </span>... <span
|
Chris@1
|
4416 class="cmtt-12">[n]</span>-1 is zero</dd></dl>
|
Chris@1
|
4417 <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
|
Chris@1
|
4418 packet from the stream. An end of packet condition past this point is to be considered a possible
|
Chris@1
|
4419 nominal occurrence.
|
Chris@1
|
4420
|
Chris@1
|
4421
|
Chris@1
|
4422
|
Chris@1
|
4423 <!--l. 375--><p class="noindent" >
|
Chris@1
|
4424 <h5 class="subsubsectionHead"><span class="titlemark">4.3.2. </span> <a
|
Chris@1
|
4425 id="x1-730004.3.2"></a>floor curve decode</h5>
|
Chris@1
|
4426 <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span
|
Chris@1
|
4427 class="cmtt-12">[mode_number]</span>
|
Chris@1
|
4428 from configuration array <span
|
Chris@1
|
4429 class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
|
Chris@1
|
4430 <span
|
Chris@1
|
4431 class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
|
Chris@1
|
4432 array <span
|
Chris@1
|
4433 class="cmtt-12">[vorbis_mapping_configurations]</span>.
|
Chris@1
|
4434 <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
|
Chris@1
|
4435 <!--l. 386--><p class="noindent" >For each floor <span
|
Chris@1
|
4436 class="cmtt-12">[i] </span>of <span
|
Chris@1
|
4437 class="cmtt-12">[audio_channels]</span>
|
Chris@1
|
4438 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4439 1. </dt><dd
|
Chris@1
|
4440 class="enumerate-enumitem"><span
|
Chris@1
|
4441 class="cmtt-12">[submap_number] </span>= element <span
|
Chris@1
|
4442 class="cmtt-12">[i] </span>of vector [vorbis_mapping_mux]
|
Chris@1
|
4443 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4444 2. </dt><dd
|
Chris@1
|
4445 class="enumerate-enumitem"><span
|
Chris@1
|
4446 class="cmtt-12">[floor_number] </span>= element <span
|
Chris@1
|
4447 class="cmtt-12">[submap_number] </span>of vector [vorbis_submap_floor]
|
Chris@1
|
4448 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4449 3. </dt><dd
|
Chris@1
|
4450 class="enumerate-enumitem">if the floor type of this floor (vector
|
Chris@1
|
4451 <span
|
Chris@1
|
4452 class="cmtt-12">[vorbis_floor_types] </span>element <span
|
Chris@1
|
4453 class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
|
Chris@1
|
4454 channel <span
|
Chris@1
|
4455 class="cmtt-12">[i] </span>according to the <a
|
Chris@1
|
4456 href="#x1-930006.2.2">subsubsection 6.2.2</a>, “<a
|
Chris@1
|
4457 href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>”
|
Chris@1
|
4458 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4459 4. </dt><dd
|
Chris@1
|
4460 class="enumerate-enumitem">if the type of this floor is one then decode the floor for channel <span
|
Chris@1
|
4461 class="cmtt-12">[i] </span>according to the
|
Chris@1
|
4462 <a
|
Chris@1
|
4463 href="#x1-1000007.2.3">subsubsection 7.2.3</a>, “<a
|
Chris@1
|
4464 href="#x1-1000007.2.3">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>”
|
Chris@1
|
4465 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4466 5. </dt><dd
|
Chris@1
|
4467 class="enumerate-enumitem">save the needed decoded floor information for channel for later synthesis
|
Chris@1
|
4468 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4469 6. </dt><dd
|
Chris@1
|
4470 class="enumerate-enumitem">if the decoded floor returned ’unused’, set vector <span
|
Chris@1
|
4471 class="cmtt-12">[no_residue] </span>element <span
|
Chris@1
|
4472 class="cmtt-12">[i] </span>to true,
|
Chris@1
|
4473 else set vector <span
|
Chris@1
|
4474 class="cmtt-12">[no_residue] </span>element <span
|
Chris@1
|
4475 class="cmtt-12">[i] </span>to false</dd></dl>
|
Chris@1
|
4476 <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
|
Chris@1
|
4477 output vectors and skipping to the add/overlap output stage.
|
Chris@1
|
4478 <!--l. 412--><p class="noindent" >
|
Chris@1
|
4479 <h5 class="subsubsectionHead"><span class="titlemark">4.3.3. </span> <a
|
Chris@1
|
4480 id="x1-740004.3.3"></a>nonzero vector propagate</h5>
|
Chris@1
|
4481 <!--l. 414--><p class="noindent" >A possible result of floor decode is that a specific vector is marked ’unused’ which indicates that
|
Chris@1
|
4482 that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
|
Chris@1
|
4483 coded in the stream, save for one complication. If some vectors are used and some are not,
|
Chris@1
|
4484
|
Chris@1
|
4485
|
Chris@1
|
4486
|
Chris@1
|
4487 channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
|
Chris@1
|
4488 vectors.
|
Chris@1
|
4489 <!--l. 421--><p class="noindent" >for each <span
|
Chris@1
|
4490 class="cmtt-12">[i] </span>from 0 ... <span
|
Chris@1
|
4491 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
|
Chris@1
|
4492 <!--l. 424--><p class="noindent" >
|
Chris@1
|
4493 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4494 1. </dt><dd
|
Chris@1
|
4495 class="enumerate-enumitem">if either <span
|
Chris@1
|
4496 class="cmtt-12">[no_residue] </span>entry for channel (<span
|
Chris@1
|
4497 class="cmtt-12">[vorbis_mapping_magnitude] </span>element
|
Chris@1
|
4498 <span
|
Chris@1
|
4499 class="cmtt-12">[i]</span>) or channel (<span
|
Chris@1
|
4500 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
|
Chris@1
|
4501 class="cmtt-12">[i]</span>) are set to false, then both
|
Chris@1
|
4502 must be set to false. Note that an ’unused’ floor has no decoded floor information; it
|
Chris@1
|
4503 is important that this is remembered at floor curve synthesis time.</dd></dl>
|
Chris@1
|
4504 <!--l. 436--><p class="noindent" >
|
Chris@1
|
4505 <h5 class="subsubsectionHead"><span class="titlemark">4.3.4. </span> <a
|
Chris@1
|
4506 id="x1-750004.3.4"></a>residue decode</h5>
|
Chris@1
|
4507 <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
|
Chris@1
|
4508 order.
|
Chris@1
|
4509 <!--l. 441--><p class="noindent" >for each submap <span
|
Chris@1
|
4510 class="cmtt-12">[i] </span>in order from 0 ... <span
|
Chris@1
|
4511 class="cmtt-12">[vorbis_mapping_submaps]</span>-1
|
Chris@1
|
4512 <!--l. 444--><p class="noindent" >
|
Chris@1
|
4513 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4514 1. </dt><dd
|
Chris@1
|
4515 class="enumerate-enumitem"><span
|
Chris@1
|
4516 class="cmtt-12">[ch] </span>= 0
|
Chris@1
|
4517 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4518 2. </dt><dd
|
Chris@1
|
4519 class="enumerate-enumitem">for each channel <span
|
Chris@1
|
4520 class="cmtt-12">[j] </span>in order from 0 ... <span
|
Chris@1
|
4521 class="cmtt-12">[audio_channels] </span>- 1
|
Chris@1
|
4522 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4523 a) </dt><dd
|
Chris@1
|
4524 class="enumerate-enumitem">if channel <span
|
Chris@1
|
4525 class="cmtt-12">[j] </span>in submap <span
|
Chris@1
|
4526 class="cmtt-12">[i] </span>(vector <span
|
Chris@1
|
4527 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
|
Chris@1
|
4528 class="cmtt-12">[j] </span>is equal to
|
Chris@1
|
4529 <span
|
Chris@1
|
4530 class="cmtt-12">[i]</span>)
|
Chris@1
|
4531 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4532 i. </dt><dd
|
Chris@1
|
4533 class="enumerate-enumitem">if vector <span
|
Chris@1
|
4534 class="cmtt-12">[no_residue] </span>element <span
|
Chris@1
|
4535 class="cmtt-12">[j] </span>is true
|
Chris@1
|
4536 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4537 A. </dt><dd
|
Chris@1
|
4538 class="enumerate-enumitem">vector <span
|
Chris@1
|
4539 class="cmtt-12">[do_not_decode_flag] </span>element <span
|
Chris@1
|
4540 class="cmtt-12">[ch] </span>is set</dd></dl>
|
Chris@1
|
4541 <!--l. 453--><p class="noindent" >else
|
Chris@1
|
4542 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4543 A. </dt><dd
|
Chris@1
|
4544 class="enumerate-enumitem">vector <span
|
Chris@1
|
4545 class="cmtt-12">[do_not_decode_flag] </span>element <span
|
Chris@1
|
4546 class="cmtt-12">[ch] </span>is unset</dd></dl>
|
Chris@1
|
4547 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4548 ii. </dt><dd
|
Chris@1
|
4549 class="enumerate-enumitem">increment <span
|
Chris@1
|
4550 class="cmtt-12">[ch]</span></dd></dl>
|
Chris@1
|
4551
|
Chris@1
|
4552
|
Chris@1
|
4553
|
Chris@1
|
4554 </dd></dl>
|
Chris@1
|
4555 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4556 3. </dt><dd
|
Chris@1
|
4557 class="enumerate-enumitem"><span
|
Chris@1
|
4558 class="cmtt-12">[residue_number] </span>= vector <span
|
Chris@1
|
4559 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
|
Chris@1
|
4560 class="cmtt-12">[i]</span>
|
Chris@1
|
4561 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4562 4. </dt><dd
|
Chris@1
|
4563 class="enumerate-enumitem"><span
|
Chris@1
|
4564 class="cmtt-12">[residue_type] </span>= vector <span
|
Chris@1
|
4565 class="cmtt-12">[vorbis_residue_types] </span>element <span
|
Chris@1
|
4566 class="cmtt-12">[residue_number]</span>
|
Chris@1
|
4567 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4568 5. </dt><dd
|
Chris@1
|
4569 class="enumerate-enumitem">decode <span
|
Chris@1
|
4570 class="cmtt-12">[ch] </span>vectors using residue <span
|
Chris@1
|
4571 class="cmtt-12">[residue_number]</span>, according to type <span
|
Chris@1
|
4572 class="cmtt-12">[residue_type]</span>,
|
Chris@1
|
4573 also passing vector <span
|
Chris@1
|
4574 class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
|
Chris@1
|
4575 not be decoded. Correct per-vector decode length is <span
|
Chris@1
|
4576 class="cmtt-12">[n]</span>/2.
|
Chris@1
|
4577 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4578 6. </dt><dd
|
Chris@1
|
4579 class="enumerate-enumitem"><span
|
Chris@1
|
4580 class="cmtt-12">[ch] </span>= 0
|
Chris@1
|
4581 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4582 7. </dt><dd
|
Chris@1
|
4583 class="enumerate-enumitem">for each channel <span
|
Chris@1
|
4584 class="cmtt-12">[j] </span>in order from 0 ... <span
|
Chris@1
|
4585 class="cmtt-12">[audio_channels]</span>
|
Chris@1
|
4586 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4587 a) </dt><dd
|
Chris@1
|
4588 class="enumerate-enumitem">if channel <span
|
Chris@1
|
4589 class="cmtt-12">[j] </span>is in submap <span
|
Chris@1
|
4590 class="cmtt-12">[i] </span>(vector <span
|
Chris@1
|
4591 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
|
Chris@1
|
4592 class="cmtt-12">[j] </span>is equal
|
Chris@1
|
4593 to <span
|
Chris@1
|
4594 class="cmtt-12">[i]</span>)
|
Chris@1
|
4595 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4596 i. </dt><dd
|
Chris@1
|
4597 class="enumerate-enumitem">residue vector for channel <span
|
Chris@1
|
4598 class="cmtt-12">[j] </span>is set to decoded residue vector <span
|
Chris@1
|
4599 class="cmtt-12">[ch]</span>
|
Chris@1
|
4600 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4601 ii. </dt><dd
|
Chris@1
|
4602 class="enumerate-enumitem">increment <span
|
Chris@1
|
4603 class="cmtt-12">[ch]</span></dd></dl>
|
Chris@1
|
4604 </dd></dl>
|
Chris@1
|
4605 </dd></dl>
|
Chris@1
|
4606 <!--l. 480--><p class="noindent" >
|
Chris@1
|
4607 <h5 class="subsubsectionHead"><span class="titlemark">4.3.5. </span> <a
|
Chris@1
|
4608 id="x1-760004.3.5"></a>inverse coupling</h5>
|
Chris@1
|
4609 <!--l. 482--><p class="noindent" >for each <span
|
Chris@1
|
4610 class="cmtt-12">[i] </span>from <span
|
Chris@1
|
4611 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
|
Chris@1
|
4612 <!--l. 485--><p class="noindent" >
|
Chris@1
|
4613 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4614 1. </dt><dd
|
Chris@1
|
4615 class="enumerate-enumitem"><span
|
Chris@1
|
4616 class="cmtt-12">[magnitude_vector] </span>= the residue vector for channel (vector
|
Chris@1
|
4617 <span
|
Chris@1
|
4618 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
|
Chris@1
|
4619 class="cmtt-12">[i]</span>)
|
Chris@1
|
4620 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4621 2. </dt><dd
|
Chris@1
|
4622 class="enumerate-enumitem"><span
|
Chris@1
|
4623 class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span
|
Chris@1
|
4624 class="cmtt-12">[vorbis_mapping_angle]</span>
|
Chris@1
|
4625
|
Chris@1
|
4626
|
Chris@1
|
4627
|
Chris@1
|
4628 element <span
|
Chris@1
|
4629 class="cmtt-12">[i]</span>)
|
Chris@1
|
4630 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4631 3. </dt><dd
|
Chris@1
|
4632 class="enumerate-enumitem">for each scalar value <span
|
Chris@1
|
4633 class="cmtt-12">[M] </span>in vector <span
|
Chris@1
|
4634 class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
|
Chris@1
|
4635 <span
|
Chris@1
|
4636 class="cmtt-12">[A] </span>in vector <span
|
Chris@1
|
4637 class="cmtt-12">[angle_vector]</span>:
|
Chris@1
|
4638 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4639 a) </dt><dd
|
Chris@1
|
4640 class="enumerate-enumitem">if (<span
|
Chris@1
|
4641 class="cmtt-12">[M] </span>is greater than zero)
|
Chris@1
|
4642 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4643 i. </dt><dd
|
Chris@1
|
4644 class="enumerate-enumitem">if (<span
|
Chris@1
|
4645 class="cmtt-12">[A] </span>is greater than zero)
|
Chris@1
|
4646 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4647 A. </dt><dd
|
Chris@1
|
4648 class="enumerate-enumitem"><span
|
Chris@1
|
4649 class="cmtt-12">[new_M] </span>= <span
|
Chris@1
|
4650 class="cmtt-12">[M]</span>
|
Chris@1
|
4651 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4652 B. </dt><dd
|
Chris@1
|
4653 class="enumerate-enumitem"><span
|
Chris@1
|
4654 class="cmtt-12">[new_A] </span>= <span
|
Chris@1
|
4655 class="cmtt-12">[M]</span>-<span
|
Chris@1
|
4656 class="cmtt-12">[A]</span></dd></dl>
|
Chris@1
|
4657 <!--l. 498--><p class="noindent" >else
|
Chris@1
|
4658 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4659 A. </dt><dd
|
Chris@1
|
4660 class="enumerate-enumitem"><span
|
Chris@1
|
4661 class="cmtt-12">[new_A] </span>= <span
|
Chris@1
|
4662 class="cmtt-12">[M]</span>
|
Chris@1
|
4663 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4664 B. </dt><dd
|
Chris@1
|
4665 class="enumerate-enumitem"><span
|
Chris@1
|
4666 class="cmtt-12">[new_M] </span>= <span
|
Chris@1
|
4667 class="cmtt-12">[M]</span>+<span
|
Chris@1
|
4668 class="cmtt-12">[A]</span></dd></dl>
|
Chris@1
|
4669 </dd></dl>
|
Chris@1
|
4670 <!--l. 505--><p class="noindent" >else
|
Chris@1
|
4671 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4672 i. </dt><dd
|
Chris@1
|
4673 class="enumerate-enumitem">if (<span
|
Chris@1
|
4674 class="cmtt-12">[A] </span>is greater than zero)
|
Chris@1
|
4675 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4676 A. </dt><dd
|
Chris@1
|
4677 class="enumerate-enumitem"><span
|
Chris@1
|
4678 class="cmtt-12">[new_M] </span>= <span
|
Chris@1
|
4679 class="cmtt-12">[M]</span>
|
Chris@1
|
4680 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4681 B. </dt><dd
|
Chris@1
|
4682 class="enumerate-enumitem"><span
|
Chris@1
|
4683 class="cmtt-12">[new_A] </span>= <span
|
Chris@1
|
4684 class="cmtt-12">[M]</span>+<span
|
Chris@1
|
4685 class="cmtt-12">[A]</span></dd></dl>
|
Chris@1
|
4686 <!--l. 512--><p class="noindent" >else
|
Chris@1
|
4687 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
4688 A. </dt><dd
|
Chris@1
|
4689 class="enumerate-enumitem"><span
|
Chris@1
|
4690 class="cmtt-12">[new_A] </span>= <span
|
Chris@1
|
4691 class="cmtt-12">[M]</span>
|
Chris@1
|
4692 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4693 B. </dt><dd
|
Chris@1
|
4694 class="enumerate-enumitem"><span
|
Chris@1
|
4695 class="cmtt-12">[new_M] </span>= <span
|
Chris@1
|
4696 class="cmtt-12">[M]</span>-<span
|
Chris@1
|
4697 class="cmtt-12">[A]</span></dd></dl>
|
Chris@1
|
4698 </dd></dl>
|
Chris@1
|
4699 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4700 b) </dt><dd
|
Chris@1
|
4701 class="enumerate-enumitem">set scalar value <span
|
Chris@1
|
4702 class="cmtt-12">[M] </span>in vector <span
|
Chris@1
|
4703 class="cmtt-12">[magnitude_vector] </span>to <span
|
Chris@1
|
4704 class="cmtt-12">[new_M]</span>
|
Chris@1
|
4705
|
Chris@1
|
4706
|
Chris@1
|
4707
|
Chris@1
|
4708 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
4709 c) </dt><dd
|
Chris@1
|
4710 class="enumerate-enumitem">set scalar value <span
|
Chris@1
|
4711 class="cmtt-12">[A] </span>in vector <span
|
Chris@1
|
4712 class="cmtt-12">[angle_vector] </span>to <span
|
Chris@1
|
4713 class="cmtt-12">[new_A]</span></dd></dl>
|
Chris@1
|
4714 </dd></dl>
|
Chris@1
|
4715 <!--l. 529--><p class="noindent" >
|
Chris@1
|
4716 <h5 class="subsubsectionHead"><span class="titlemark">4.3.6. </span> <a
|
Chris@1
|
4717 id="x1-770004.3.6"></a>dot product</h5>
|
Chris@1
|
4718 <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
|
Chris@1
|
4719 packet type. Note that the vector synthesis length for floor computation is <span
|
Chris@1
|
4720 class="cmtt-12">[n]</span>/2.
|
Chris@1
|
4721 <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
|
Chris@1
|
4722 channel’s residue vector. The result is the dot product of the floor and residue vectors for
|
Chris@1
|
4723 each channel; the produced vectors are the length <span
|
Chris@1
|
4724 class="cmtt-12">[n]</span>/2 audio spectrum for each
|
Chris@1
|
4725 channel.
|
Chris@1
|
4726 <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
|
Chris@1
|
4727 implementation might be to assume that a 32 bit fixed-point representation for floor and
|
Chris@1
|
4728 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
|
Chris@1
|
4729 in all cases because it happens to mostly work with the current Xiph.Org reference
|
Chris@1
|
4730 encoder.
|
Chris@1
|
4731 <!--l. 550--><p class="noindent" >However, floor vector values can span <span
|
Chris@1
|
4732 class="cmsy-10x-x-120">∼</span>140dB (<span
|
Chris@1
|
4733 class="cmsy-10x-x-120">∼</span>24 bits unsigned), and the audio spectrum
|
Chris@1
|
4734 vector should represent a minimum of 120dB (<span
|
Chris@1
|
4735 class="cmsy-10x-x-120">∼</span>21 bits with sign), even when output is to a 16
|
Chris@1
|
4736 bit PCM device. For the residue vector to represent full scale if the floor is nailed
|
Chris@1
|
4737 to <span
|
Chris@1
|
4738 class="cmsy-10x-x-120">−</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
|
Chris@1
|
4739 full scale if the floor is nailed at 0dB, it must be able to represent <span
|
Chris@1
|
4740 class="cmsy-10x-x-120">−</span>140dB to +0dB.
|
Chris@1
|
4741 Thus, in order to handle full range dynamics, a residue vector may span <span
|
Chris@1
|
4742 class="cmsy-10x-x-120">−</span>140dB to
|
Chris@1
|
4743 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
|
Chris@1
|
4744 residue vector must be able to represent a 48 bit range and the dot product must
|
Chris@1
|
4745 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
|
Chris@1
|
4746 achieved using large (64 bit or larger) integers, or implementing a movable binary point
|
Chris@1
|
4747 representation.
|
Chris@1
|
4748 <!--l. 567--><p class="noindent" >
|
Chris@1
|
4749 <h5 class="subsubsectionHead"><span class="titlemark">4.3.7. </span> <a
|
Chris@1
|
4750 id="x1-780004.3.7"></a>inverse MDCT</h5>
|
Chris@1
|
4751 <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
|
Chris@1
|
4752
|
Chris@1
|
4753
|
Chris@1
|
4754
|
Chris@1
|
4755 inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
|
Chris@1
|
4756 available in <span class="cite">[<a
|
Chris@1
|
4757 href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
|
Chris@1
|
4758 earlier.
|
Chris@1
|
4759 <!--l. 576--><p class="noindent" >
|
Chris@1
|
4760 <h5 class="subsubsectionHead"><span class="titlemark">4.3.8. </span> <a
|
Chris@1
|
4761 id="x1-790004.3.8"></a>overlap_add</h5>
|
Chris@1
|
4762 <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
|
Chris@1
|
4763 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
|
Chris@1
|
4764 current window (as illustrated in <a
|
Chris@1
|
4765 href="#x1-260001.3.2">paragraph 1.3.2</a>, “<a
|
Chris@1
|
4766 href="#x1-260001.3.2">Window shape decode (long windows
|
Chris@1
|
4767 only)<!--tex4ht:ref: vorbis:spec:window --></a>”). The overlapped portion produced from overlapping the previous and current frame data
|
Chris@1
|
4768 is finished data to be returned by the decoder. This data spans from the center of
|
Chris@1
|
4769 the previous window to the center of the current window. In the case of same-sized
|
Chris@1
|
4770 windows, the amount of data to return is one-half block consisting of and only of the
|
Chris@1
|
4771 overlapped portions. When overlapping a short and long window, much of the returned
|
Chris@1
|
4772 range does not actually overlap. This does not damage transform orthogonality. Pay
|
Chris@1
|
4773 attention however to returning the correct data range; the amount of data to be returned
|
Chris@1
|
4774 is:
|
Chris@1
|
4775 <!--l. 592--><p class="noindent" >
|
Chris@1
|
4776 <div class="fancyvrb" id="fancyvrb22">
|
Chris@1
|
4777 <a
|
Chris@1
|
4778 id="x1-79002r1"></a><span
|
Chris@1
|
4779 class="cmr-6">1</span><span
|
Chris@1
|
4780 class="cmtt-8"> </span><span
|
Chris@1
|
4781 class="cmtt-8"> window\_blocksize(previous\_window)/4+window\_blocksize(current\_window)/4</span>
|
Chris@1
|
4782 </div>
|
Chris@1
|
4783 <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
|
Chris@1
|
4784 windowsize/2-1, inclusive) of the current window.
|
Chris@1
|
4785 <!--l. 599--><p class="noindent" >Data is not returned from the first frame; it must be used to ’prime’ the decode engine. The
|
Chris@1
|
4786 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
|
Chris@1
|
4787 PCM output offset is ’0’ (as no data has been returned yet).
|
Chris@1
|
4788 <!--l. 606--><p class="noindent" >
|
Chris@1
|
4789 <h5 class="subsubsectionHead"><span class="titlemark">4.3.9. </span> <a
|
Chris@1
|
4790 id="x1-800004.3.9"></a>output channel order</h5>
|
Chris@1
|
4791 <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
|
Chris@1
|
4792 implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
|
Chris@1
|
4793 specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
|
Chris@1
|
4794
|
Chris@1
|
4795
|
Chris@1
|
4796
|
Chris@1
|
4797 greater-than-eight channels remains ’left to the implementation’.
|
Chris@1
|
4798 <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a
|
Chris@1
|
4799 decoder to produce output with channels in any order. Any such decoder should explicitly
|
Chris@1
|
4800 document channel reordering behavior.
|
Chris@1
|
4801 <!--l. 620--><p class="noindent" >
|
Chris@1
|
4802 <dl class="description"><dt class="description">
|
Chris@1
|
4803 <span
|
Chris@1
|
4804 class="cmssbx-10x-x-120">one channel</span> </dt><dd
|
Chris@1
|
4805 class="description">the stream is monophonic
|
Chris@1
|
4806 </dd><dt class="description">
|
Chris@1
|
4807 <span
|
Chris@1
|
4808 class="cmssbx-10x-x-120">two channels</span> </dt><dd
|
Chris@1
|
4809 class="description">the stream is stereo. channel order: left, right
|
Chris@1
|
4810 </dd><dt class="description">
|
Chris@1
|
4811 <span
|
Chris@1
|
4812 class="cmssbx-10x-x-120">three channels</span> </dt><dd
|
Chris@1
|
4813 class="description">the stream is a 1d-surround encoding. channel order: left, center, right
|
Chris@1
|
4814 </dd><dt class="description">
|
Chris@1
|
4815 <span
|
Chris@1
|
4816 class="cmssbx-10x-x-120">four channels</span> </dt><dd
|
Chris@1
|
4817 class="description">the stream is quadraphonic surround. channel order: front left, front right,
|
Chris@1
|
4818 rear left, rear right
|
Chris@1
|
4819 </dd><dt class="description">
|
Chris@1
|
4820 <span
|
Chris@1
|
4821 class="cmssbx-10x-x-120">five channels</span> </dt><dd
|
Chris@1
|
4822 class="description">the stream is five-channel surround. channel order: front left, center, front
|
Chris@1
|
4823 right, rear left, rear right
|
Chris@1
|
4824 </dd><dt class="description">
|
Chris@1
|
4825 <span
|
Chris@1
|
4826 class="cmssbx-10x-x-120">six channels</span> </dt><dd
|
Chris@1
|
4827 class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear
|
Chris@1
|
4828 left, rear right, LFE
|
Chris@1
|
4829 </dd><dt class="description">
|
Chris@1
|
4830 <span
|
Chris@1
|
4831 class="cmssbx-10x-x-120">seven channels</span> </dt><dd
|
Chris@1
|
4832 class="description">the stream is 6.1 surround. channel order: front left, center, front right,
|
Chris@1
|
4833 side left, side right, rear center, LFE
|
Chris@1
|
4834 </dd><dt class="description">
|
Chris@1
|
4835 <span
|
Chris@1
|
4836 class="cmssbx-10x-x-120">eight channels</span> </dt><dd
|
Chris@1
|
4837 class="description">the stream is 7.1 surround. channel order: front left, center, front right,
|
Chris@1
|
4838 side left, side right, rear left, rear right, LFE
|
Chris@1
|
4839 </dd><dt class="description">
|
Chris@1
|
4840 <span
|
Chris@1
|
4841 class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd
|
Chris@1
|
4842 class="description">channel use and order is defined by the application
|
Chris@1
|
4843 </dd></dl>
|
Chris@1
|
4844 <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
|
Chris@1
|
4845 channel mappings (such as three and four channel <a
|
Chris@1
|
4846 href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
|
Chris@1
|
4847 mappings other than mapping 0.
|
Chris@1
|
4848
|
Chris@1
|
4849
|
Chris@1
|
4850
|
Chris@1
|
4851
|
Chris@1
|
4852
|
Chris@1
|
4853
|
Chris@1
|
4854 <h3 class="sectionHead"><span class="titlemark">5. </span> <a
|
Chris@1
|
4855 id="x1-810005"></a>comment field and header specification</h3>
|
Chris@1
|
4856 <!--l. 6--><p class="noindent" >
|
Chris@1
|
4857 <h4 class="subsectionHead"><span class="titlemark">5.1. </span> <a
|
Chris@1
|
4858 id="x1-820005.1"></a>Overview</h4>
|
Chris@1
|
4859 <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
|
Chris@1
|
4860 bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
|
Chris@1
|
4861 belongs in a separate logical bitstream (usually an XML stream type) that provides greater
|
Chris@1
|
4862 structure and machine parseability.
|
Chris@1
|
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
|
Chris@1
|
4864 a CDR. It should be a little information to remember the disc by and explain it to others; a
|
Chris@1
|
4865 short, to-the-point text note that need not only be a couple words, but isn’t going to be more
|
Chris@1
|
4866 than a short paragraph. The essentials, in other words, whatever they turn out to be,
|
Chris@1
|
4867 eg:
|
Chris@1
|
4868 <!--l. 21--><p class="noindent" >
|
Chris@1
|
4869 <div class="quote">
|
Chris@1
|
4870 <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span
|
Chris@1
|
4871 class="cmti-12">“I’m Still Around”</span>, opening
|
Chris@1
|
4872 for Moxy Früvous, 1997.</div>
|
Chris@1
|
4873 <!--l. 29--><p class="noindent" >
|
Chris@1
|
4874 <h4 class="subsectionHead"><span class="titlemark">5.2. </span> <a
|
Chris@1
|
4875 id="x1-830005.2"></a>Comment encoding</h4>
|
Chris@1
|
4876 <!--l. 31--><p class="noindent" >
|
Chris@1
|
4877 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1. </span> <a
|
Chris@1
|
4878 id="x1-840005.2.1"></a>Structure</h5>
|
Chris@1
|
4879 <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
|
Chris@1
|
4880 bounded to 2<sup><span
|
Chris@1
|
4881 class="cmr-8">32</span></sup> <span
|
Chris@1
|
4882 class="cmsy-10x-x-120">− </span>1 and the length of each vector is limited to 2<sup><span
|
Chris@1
|
4883 class="cmr-8">32</span></sup> <span
|
Chris@1
|
4884 class="cmsy-10x-x-120">− </span>1 bytes. The vector length is
|
Chris@1
|
4885
|
Chris@1
|
4886
|
Chris@1
|
4887
|
Chris@1
|
4888 encoded; the vector contents themselves are not null terminated. In addition to the vector list,
|
Chris@1
|
4889 there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
|
Chris@1
|
4890 example, the 1.0 release of libvorbis set the vendor string to “Xiph.Org libVorbis I
|
Chris@1
|
4891 20020717”.
|
Chris@1
|
4892 <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
|
Chris@1
|
4893 packing conventions of the vorbis codec. However, since data in the comment header
|
Chris@1
|
4894 is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
|
Chris@1
|
4895 integers.
|
Chris@1
|
4896 <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
|
Chris@1
|
4897 <!--l. 48--><p class="noindent" >
|
Chris@1
|
4898 <div class="fancyvrb" id="fancyvrb23">
|
Chris@1
|
4899 <a
|
Chris@1
|
4900 id="x1-84002r1"></a><span
|
Chris@1
|
4901 class="cmr-6">1</span><span
|
Chris@1
|
4902 class="cmtt-8"> </span><span
|
Chris@1
|
4903 class="cmtt-8"> </span><span
|
Chris@1
|
4904 class="cmtt-8"> </span><span
|
Chris@1
|
4905 class="cmtt-8"> 1)</span><span
|
Chris@1
|
4906 class="cmtt-8"> [vendor\_length]</span><span
|
Chris@1
|
4907 class="cmtt-8"> =</span><span
|
Chris@1
|
4908 class="cmtt-8"> read</span><span
|
Chris@1
|
4909 class="cmtt-8"> an</span><span
|
Chris@1
|
4910 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
4911 class="cmtt-8"> integer</span><span
|
Chris@1
|
4912 class="cmtt-8"> of</span><span
|
Chris@1
|
4913 class="cmtt-8"> 32</span><span
|
Chris@1
|
4914 class="cmtt-8"> bits</span>
|
Chris@1
|
4915 <br class="fancyvrb" /><a
|
Chris@1
|
4916 id="x1-84004r2"></a><span
|
Chris@1
|
4917 class="cmr-6">2</span><span
|
Chris@1
|
4918 class="cmtt-8"> </span><span
|
Chris@1
|
4919 class="cmtt-8"> </span><span
|
Chris@1
|
4920 class="cmtt-8"> </span><span
|
Chris@1
|
4921 class="cmtt-8"> 2)</span><span
|
Chris@1
|
4922 class="cmtt-8"> [vendor\_string]</span><span
|
Chris@1
|
4923 class="cmtt-8"> =</span><span
|
Chris@1
|
4924 class="cmtt-8"> read</span><span
|
Chris@1
|
4925 class="cmtt-8"> a</span><span
|
Chris@1
|
4926 class="cmtt-8"> UTF-8</span><span
|
Chris@1
|
4927 class="cmtt-8"> vector</span><span
|
Chris@1
|
4928 class="cmtt-8"> as</span><span
|
Chris@1
|
4929 class="cmtt-8"> [vendor\_length]</span><span
|
Chris@1
|
4930 class="cmtt-8"> octets</span>
|
Chris@1
|
4931 <br class="fancyvrb" /><a
|
Chris@1
|
4932 id="x1-84006r3"></a><span
|
Chris@1
|
4933 class="cmr-6">3</span><span
|
Chris@1
|
4934 class="cmtt-8"> </span><span
|
Chris@1
|
4935 class="cmtt-8"> </span><span
|
Chris@1
|
4936 class="cmtt-8"> </span><span
|
Chris@1
|
4937 class="cmtt-8"> 3)</span><span
|
Chris@1
|
4938 class="cmtt-8"> [user\_comment\_list\_length]</span><span
|
Chris@1
|
4939 class="cmtt-8"> =</span><span
|
Chris@1
|
4940 class="cmtt-8"> read</span><span
|
Chris@1
|
4941 class="cmtt-8"> an</span><span
|
Chris@1
|
4942 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
4943 class="cmtt-8"> integer</span><span
|
Chris@1
|
4944 class="cmtt-8"> of</span><span
|
Chris@1
|
4945 class="cmtt-8"> 32</span><span
|
Chris@1
|
4946 class="cmtt-8"> bits</span>
|
Chris@1
|
4947 <br class="fancyvrb" /><a
|
Chris@1
|
4948 id="x1-84008r4"></a><span
|
Chris@1
|
4949 class="cmr-6">4</span><span
|
Chris@1
|
4950 class="cmtt-8"> </span><span
|
Chris@1
|
4951 class="cmtt-8"> </span><span
|
Chris@1
|
4952 class="cmtt-8"> </span><span
|
Chris@1
|
4953 class="cmtt-8"> 4)</span><span
|
Chris@1
|
4954 class="cmtt-8"> iterate</span><span
|
Chris@1
|
4955 class="cmtt-8"> [user\_comment\_list\_length]</span><span
|
Chris@1
|
4956 class="cmtt-8"> times</span><span
|
Chris@1
|
4957 class="cmtt-8"> {</span>
|
Chris@1
|
4958 <br class="fancyvrb" /><a
|
Chris@1
|
4959 id="x1-84010r5"></a><span
|
Chris@1
|
4960 class="cmr-6">5</span><span
|
Chris@1
|
4961 class="cmtt-8"> </span><span
|
Chris@1
|
4962 class="cmtt-8"> </span><span
|
Chris@1
|
4963 class="cmtt-8"> </span><span
|
Chris@1
|
4964 class="cmtt-8"> </span><span
|
Chris@1
|
4965 class="cmtt-8"> </span><span
|
Chris@1
|
4966 class="cmtt-8"> </span><span
|
Chris@1
|
4967 class="cmtt-8"> </span><span
|
Chris@1
|
4968 class="cmtt-8"> </span><span
|
Chris@1
|
4969 class="cmtt-8"> 5)</span><span
|
Chris@1
|
4970 class="cmtt-8"> [length]</span><span
|
Chris@1
|
4971 class="cmtt-8"> =</span><span
|
Chris@1
|
4972 class="cmtt-8"> read</span><span
|
Chris@1
|
4973 class="cmtt-8"> an</span><span
|
Chris@1
|
4974 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
4975 class="cmtt-8"> integer</span><span
|
Chris@1
|
4976 class="cmtt-8"> of</span><span
|
Chris@1
|
4977 class="cmtt-8"> 32</span><span
|
Chris@1
|
4978 class="cmtt-8"> bits</span>
|
Chris@1
|
4979 <br class="fancyvrb" /><a
|
Chris@1
|
4980 id="x1-84012r6"></a><span
|
Chris@1
|
4981 class="cmr-6">6</span><span
|
Chris@1
|
4982 class="cmtt-8"> </span><span
|
Chris@1
|
4983 class="cmtt-8"> </span><span
|
Chris@1
|
4984 class="cmtt-8"> </span><span
|
Chris@1
|
4985 class="cmtt-8"> </span><span
|
Chris@1
|
4986 class="cmtt-8"> </span><span
|
Chris@1
|
4987 class="cmtt-8"> </span><span
|
Chris@1
|
4988 class="cmtt-8"> </span><span
|
Chris@1
|
4989 class="cmtt-8"> </span><span
|
Chris@1
|
4990 class="cmtt-8"> 6)</span><span
|
Chris@1
|
4991 class="cmtt-8"> this</span><span
|
Chris@1
|
4992 class="cmtt-8"> iteration’s</span><span
|
Chris@1
|
4993 class="cmtt-8"> user</span><span
|
Chris@1
|
4994 class="cmtt-8"> comment</span><span
|
Chris@1
|
4995 class="cmtt-8"> =</span><span
|
Chris@1
|
4996 class="cmtt-8"> read</span><span
|
Chris@1
|
4997 class="cmtt-8"> a</span><span
|
Chris@1
|
4998 class="cmtt-8"> UTF-8</span><span
|
Chris@1
|
4999 class="cmtt-8"> vector</span><span
|
Chris@1
|
5000 class="cmtt-8"> as</span><span
|
Chris@1
|
5001 class="cmtt-8"> [length]</span><span
|
Chris@1
|
5002 class="cmtt-8"> octets</span>
|
Chris@1
|
5003 <br class="fancyvrb" /><a
|
Chris@1
|
5004 id="x1-84014r7"></a><span
|
Chris@1
|
5005 class="cmr-6">7</span><span
|
Chris@1
|
5006 class="cmtt-8"> </span><span
|
Chris@1
|
5007 class="cmtt-8"> </span><span
|
Chris@1
|
5008 class="cmtt-8"> </span><span
|
Chris@1
|
5009 class="cmtt-8"> </span><span
|
Chris@1
|
5010 class="cmtt-8"> </span><span
|
Chris@1
|
5011 class="cmtt-8"> </span><span
|
Chris@1
|
5012 class="cmtt-8"> }</span>
|
Chris@1
|
5013 <br class="fancyvrb" /><a
|
Chris@1
|
5014 id="x1-84016r8"></a><span
|
Chris@1
|
5015 class="cmr-6">8</span><span
|
Chris@1
|
5016 class="cmtt-8"> </span><span
|
Chris@1
|
5017 class="cmtt-8"> </span><span
|
Chris@1
|
5018 class="cmtt-8"> </span><span
|
Chris@1
|
5019 class="cmtt-8"> 7)</span><span
|
Chris@1
|
5020 class="cmtt-8"> [framing\_bit]</span><span
|
Chris@1
|
5021 class="cmtt-8"> =</span><span
|
Chris@1
|
5022 class="cmtt-8"> read</span><span
|
Chris@1
|
5023 class="cmtt-8"> a</span><span
|
Chris@1
|
5024 class="cmtt-8"> single</span><span
|
Chris@1
|
5025 class="cmtt-8"> bit</span><span
|
Chris@1
|
5026 class="cmtt-8"> as</span><span
|
Chris@1
|
5027 class="cmtt-8"> boolean</span>
|
Chris@1
|
5028 <br class="fancyvrb" /><a
|
Chris@1
|
5029 id="x1-84018r9"></a><span
|
Chris@1
|
5030 class="cmr-6">9</span><span
|
Chris@1
|
5031 class="cmtt-8"> </span><span
|
Chris@1
|
5032 class="cmtt-8"> </span><span
|
Chris@1
|
5033 class="cmtt-8"> </span><span
|
Chris@1
|
5034 class="cmtt-8"> 8)</span><span
|
Chris@1
|
5035 class="cmtt-8"> if</span><span
|
Chris@1
|
5036 class="cmtt-8"> (</span><span
|
Chris@1
|
5037 class="cmtt-8"> [framing\_bit]</span><span
|
Chris@1
|
5038 class="cmtt-8"> unset</span><span
|
Chris@1
|
5039 class="cmtt-8"> or</span><span
|
Chris@1
|
5040 class="cmtt-8"> end-of-packet</span><span
|
Chris@1
|
5041 class="cmtt-8"> )</span><span
|
Chris@1
|
5042 class="cmtt-8"> then</span><span
|
Chris@1
|
5043 class="cmtt-8"> ERROR</span>
|
Chris@1
|
5044 <br class="fancyvrb" /><a
|
Chris@1
|
5045 id="x1-84020r10"></a><span
|
Chris@1
|
5046 class="cmr-6">10</span><span
|
Chris@1
|
5047 class="cmtt-8"> </span><span
|
Chris@1
|
5048 class="cmtt-8"> </span><span
|
Chris@1
|
5049 class="cmtt-8"> </span><span
|
Chris@1
|
5050 class="cmtt-8"> 9)</span><span
|
Chris@1
|
5051 class="cmtt-8"> done.</span>
|
Chris@1
|
5052 </div>
|
Chris@1
|
5053 <!--l. 64--><p class="noindent" >
|
Chris@1
|
5054 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2. </span> <a
|
Chris@1
|
5055 id="x1-850005.2.2"></a>Content vector format</h5>
|
Chris@1
|
5056 <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
|
Chris@1
|
5057 comment fields consist of a field name and a corresponding value and look like:
|
Chris@1
|
5058 <!--l. 70--><p class="noindent" >
|
Chris@1
|
5059 <div class="quote">
|
Chris@1
|
5060 <!--l. 71--><p class="noindent" >
|
Chris@1
|
5061 <div class="fancyvrb" id="fancyvrb24">
|
Chris@1
|
5062 <a
|
Chris@1
|
5063 id="x1-85002r1"></a><span
|
Chris@1
|
5064 class="cmr-6">1</span><span
|
Chris@1
|
5065 class="cmtt-8"> </span><span
|
Chris@1
|
5066 class="cmtt-8"> comment[0]="ARTIST=me";</span>
|
Chris@1
|
5067 <br class="fancyvrb" /><a
|
Chris@1
|
5068 id="x1-85004r2"></a><span
|
Chris@1
|
5069 class="cmr-6">2</span><span
|
Chris@1
|
5070 class="cmtt-8"> </span><span
|
Chris@1
|
5071 class="cmtt-8"> comment[1]="TITLE=the</span><span
|
Chris@1
|
5072 class="cmtt-8"> sound</span><span
|
Chris@1
|
5073 class="cmtt-8"> of</span><span
|
Chris@1
|
5074 class="cmtt-8"> Vorbis";</span>
|
Chris@1
|
5075 </div>
|
Chris@1
|
5076 </div>
|
Chris@1
|
5077
|
Chris@1
|
5078
|
Chris@1
|
5079
|
Chris@1
|
5080 <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (’=’)
|
Chris@1
|
5081 excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
|
Chris@1
|
5082 ASCII 0x61 through 0x7A inclusive (characters a-z).
|
Chris@1
|
5083 <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (’=’); this equals sign is used to
|
Chris@1
|
5084 terminate the field name.
|
Chris@1
|
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
|
Chris@1
|
5086 field.
|
Chris@1
|
5087 <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
5088 id="x1-860005.2.2"></a><span
|
Chris@1
|
5089 class="cmbx-12">Field names</span></span>
|
Chris@1
|
5090 Below is a proposed, minimal list of standard field names with a description of intended use. No
|
Chris@1
|
5091 single or group of field names is mandatory; a comment header may contain one, all or none of
|
Chris@1
|
5092 the names in this list.
|
Chris@1
|
5093 <!--l. 99--><p class="noindent" >
|
Chris@1
|
5094 <dl class="description"><dt class="description">
|
Chris@1
|
5095 <span
|
Chris@1
|
5096 class="cmssbx-10x-x-120">TITLE</span> </dt><dd
|
Chris@1
|
5097 class="description">Track/Work name
|
Chris@1
|
5098 </dd><dt class="description">
|
Chris@1
|
5099 <span
|
Chris@1
|
5100 class="cmssbx-10x-x-120">VERSION</span> </dt><dd
|
Chris@1
|
5101 class="description">The version field may be used to differentiate multiple versions of the same
|
Chris@1
|
5102 track title in a single collection. (e.g. remix info)
|
Chris@1
|
5103 </dd><dt class="description">
|
Chris@1
|
5104 <span
|
Chris@1
|
5105 class="cmssbx-10x-x-120">ALBUM</span> </dt><dd
|
Chris@1
|
5106 class="description">The collection name to which this track belongs
|
Chris@1
|
5107 </dd><dt class="description">
|
Chris@1
|
5108 <span
|
Chris@1
|
5109 class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd
|
Chris@1
|
5110 class="description">The track number of this piece if part of a specific larger collection or
|
Chris@1
|
5111 album
|
Chris@1
|
5112 </dd><dt class="description">
|
Chris@1
|
5113 <span
|
Chris@1
|
5114 class="cmssbx-10x-x-120">ARTIST</span> </dt><dd
|
Chris@1
|
5115 class="description">The artist generally considered responsible for the work. In popular music this is
|
Chris@1
|
5116 usually the performing band or singer. For classical music it would be the composer.
|
Chris@1
|
5117 For an audio book it would be the author of the original text.
|
Chris@1
|
5118 </dd><dt class="description">
|
Chris@1
|
5119 <span
|
Chris@1
|
5120 class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd
|
Chris@1
|
5121 class="description">The artist(s) who performed the work. In classical music this would be the
|
Chris@1
|
5122 conductor, orchestra, soloists. In an audio book it would be the actor who did the
|
Chris@1
|
5123 reading. In popular music this is typically the same as the ARTIST and is omitted.
|
Chris@1
|
5124 </dd><dt class="description">
|
Chris@1
|
5125 <span
|
Chris@1
|
5126 class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd
|
Chris@1
|
5127 class="description">Copyright attribution, e.g., ’2001 Nobody’s Band’ or ’1999 Jack Moffitt’
|
Chris@1
|
5128 </dd><dt class="description">
|
Chris@1
|
5129
|
Chris@1
|
5130
|
Chris@1
|
5131
|
Chris@1
|
5132 <span
|
Chris@1
|
5133 class="cmssbx-10x-x-120">LICENSE</span> </dt><dd
|
Chris@1
|
5134 class="description">License information, eg, ’All Rights Reserved’, ’Any Use Permitted’, a URL to
|
Chris@1
|
5135 a license such as a Creative
|
Chris@1
|
5136 Commons license (”www.creativecommons.org/blahblah/license.html”) or the EFF
|
Chris@1
|
5137 Open Audio License (’distributed under the terms of the Open Audio License. see
|
Chris@1
|
5138 http://www.eff.org/IP/Open_licenses/eff_oal.html for details’), etc.
|
Chris@1
|
5139 </dd><dt class="description">
|
Chris@1
|
5140 <span
|
Chris@1
|
5141 class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd
|
Chris@1
|
5142 class="description">Name of the organization producing the track (i.e. the ’record label’)
|
Chris@1
|
5143 </dd><dt class="description">
|
Chris@1
|
5144 <span
|
Chris@1
|
5145 class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd
|
Chris@1
|
5146 class="description">A short text description of the contents
|
Chris@1
|
5147 </dd><dt class="description">
|
Chris@1
|
5148 <span
|
Chris@1
|
5149 class="cmssbx-10x-x-120">GENRE</span> </dt><dd
|
Chris@1
|
5150 class="description">A short text indication of music genre
|
Chris@1
|
5151 </dd><dt class="description">
|
Chris@1
|
5152 <span
|
Chris@1
|
5153 class="cmssbx-10x-x-120">DATE</span> </dt><dd
|
Chris@1
|
5154 class="description">Date the track was recorded
|
Chris@1
|
5155 </dd><dt class="description">
|
Chris@1
|
5156 <span
|
Chris@1
|
5157 class="cmssbx-10x-x-120">LOCATION</span> </dt><dd
|
Chris@1
|
5158 class="description">Location where track was recorded
|
Chris@1
|
5159 </dd><dt class="description">
|
Chris@1
|
5160 <span
|
Chris@1
|
5161 class="cmssbx-10x-x-120">CONTACT</span> </dt><dd
|
Chris@1
|
5162 class="description">Contact information for the creators or distributors of the track. This could
|
Chris@1
|
5163 be a URL, an email address, the physical address of the producing label.
|
Chris@1
|
5164 </dd><dt class="description">
|
Chris@1
|
5165 <span
|
Chris@1
|
5166 class="cmssbx-10x-x-120">ISRC</span> </dt><dd
|
Chris@1
|
5167 class="description">International Standard Recording Code for the track; see <a
|
Chris@1
|
5168 href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
|
Chris@1
|
5169 more information on ISRC numbers.
|
Chris@1
|
5170 </dd></dl>
|
Chris@1
|
5171 <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a
|
Chris@1
|
5172 id="x1-870005.2.2"></a><span
|
Chris@1
|
5173 class="cmbx-12">Implications</span></span>
|
Chris@1
|
5174 Field names should not be ’internationalized’; this is a concession to simplicity not
|
Chris@1
|
5175 an attempt to exclude the majority of the world that doesn’t speak English. Field
|
Chris@1
|
5176 <span
|
Chris@1
|
5177 class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
|
Chris@1
|
5178 language.
|
Chris@1
|
5179 <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
|
Chris@1
|
5180 the field name is bounded in a known way. Thus we also have the length of the field
|
Chris@1
|
5181 contents.
|
Chris@1
|
5182 <!--l. 170--><p class="noindent" >Individual ’vendors’ may use non-standard field names within reason. The proper
|
Chris@1
|
5183 use of comment fields should be clear through context at this point. Abuse will be
|
Chris@1
|
5184 discouraged.
|
Chris@1
|
5185
|
Chris@1
|
5186
|
Chris@1
|
5187
|
Chris@1
|
5188 <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to ’nonstandard’ field names. Vendors should make some effort
|
Chris@1
|
5189 to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
|
Chris@1
|
5190 tags here to help with standardization.
|
Chris@1
|
5191 <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
|
Chris@1
|
5192 example, assume a track was recorded by three well know artists; the following is permissible,
|
Chris@1
|
5193 and encouraged:
|
Chris@1
|
5194 <!--l. 183--><p class="noindent" >
|
Chris@1
|
5195 <div class="quote">
|
Chris@1
|
5196 <!--l. 184--><p class="noindent" >
|
Chris@1
|
5197 <div class="fancyvrb" id="fancyvrb25">
|
Chris@1
|
5198 <a
|
Chris@1
|
5199 id="x1-87002r1"></a><span
|
Chris@1
|
5200 class="cmr-6">1</span><span
|
Chris@1
|
5201 class="cmtt-8"> </span><span
|
Chris@1
|
5202 class="cmtt-8"> ARTIST=Dizzy</span><span
|
Chris@1
|
5203 class="cmtt-8"> Gillespie</span>
|
Chris@1
|
5204 <br class="fancyvrb" /><a
|
Chris@1
|
5205 id="x1-87004r2"></a><span
|
Chris@1
|
5206 class="cmr-6">2</span><span
|
Chris@1
|
5207 class="cmtt-8"> </span><span
|
Chris@1
|
5208 class="cmtt-8"> ARTIST=Sonny</span><span
|
Chris@1
|
5209 class="cmtt-8"> Rollins</span>
|
Chris@1
|
5210 <br class="fancyvrb" /><a
|
Chris@1
|
5211 id="x1-87006r3"></a><span
|
Chris@1
|
5212 class="cmr-6">3</span><span
|
Chris@1
|
5213 class="cmtt-8"> </span><span
|
Chris@1
|
5214 class="cmtt-8"> ARTIST=Sonny</span><span
|
Chris@1
|
5215 class="cmtt-8"> Stitt</span>
|
Chris@1
|
5216 </div>
|
Chris@1
|
5217 </div>
|
Chris@1
|
5218 <!--l. 197--><p class="noindent" >
|
Chris@1
|
5219 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3. </span> <a
|
Chris@1
|
5220 id="x1-880005.2.3"></a>Encoding</h5>
|
Chris@1
|
5221 <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
|
Chris@1
|
5222 first bitstream header packet, it is not generally the only packet on the second page and may not
|
Chris@1
|
5223 be restricted to within the second bitstream page. The length of the comment header packet is
|
Chris@1
|
5224 (practically) unbounded. The comment header packet is not optional; it must be present in the
|
Chris@1
|
5225 bitstream even if it is effectively empty.
|
Chris@1
|
5226 <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg’s standard bitstream mapping which
|
Chris@1
|
5227 renders least-significant-bit of the word to be coded into the least significant available bit of the
|
Chris@1
|
5228 current bitstream octet first):
|
Chris@1
|
5229 <!--l. 213--><p class="noindent" >
|
Chris@1
|
5230 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
5231 1. </dt><dd
|
Chris@1
|
5232 class="enumerate-enumitem">Vendor string length (32 bit unsigned quantity specifying number of octets)
|
Chris@1
|
5233 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5234 2. </dt><dd
|
Chris@1
|
5235 class="enumerate-enumitem">Vendor string ([vendor string length] octets coded from beginning of string to end of
|
Chris@1
|
5236 string, not null terminated)
|
Chris@1
|
5237
|
Chris@1
|
5238
|
Chris@1
|
5239
|
Chris@1
|
5240 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5241 3. </dt><dd
|
Chris@1
|
5242 class="enumerate-enumitem">Number of comment fields (32 bit unsigned quantity specifying number of fields)
|
Chris@1
|
5243 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5244 4. </dt><dd
|
Chris@1
|
5245 class="enumerate-enumitem">Comment field 0 length (if [Number of comment fields] <span
|
Chris@1
|
5246 class="cmmi-12">> </span>0; 32 bit unsigned quantity
|
Chris@1
|
5247 specifying number of octets)
|
Chris@1
|
5248 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5249 5. </dt><dd
|
Chris@1
|
5250 class="enumerate-enumitem">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
|
Chris@1
|
5251 end of string, not null terminated)
|
Chris@1
|
5252 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5253 6. </dt><dd
|
Chris@1
|
5254 class="enumerate-enumitem">Comment field 1 length (if [Number of comment fields] <span
|
Chris@1
|
5255 class="cmmi-12">> </span>1...)...
|
Chris@1
|
5256 </dd></dl>
|
Chris@1
|
5257 <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
|
Chris@1
|
5258 in <span
|
Chris@1
|
5259 class="cmtt-12">vorbis/lib/info.c</span>, <span
|
Chris@1
|
5260 class="cmtt-12">_vorbis_pack_comment() </span>and <span
|
Chris@1
|
5261 class="cmtt-12">_vorbis_unpack_comment()</span>.
|
Chris@1
|
5262
|
Chris@1
|
5263
|
Chris@1
|
5264
|
Chris@1
|
5265
|
Chris@1
|
5266
|
Chris@1
|
5267
|
Chris@1
|
5268 <h3 class="sectionHead"><span class="titlemark">6. </span> <a
|
Chris@1
|
5269 id="x1-890006"></a>Floor type 0 setup and decode</h3>
|
Chris@1
|
5270 <!--l. 6--><p class="noindent" >
|
Chris@1
|
5271 <h4 class="subsectionHead"><span class="titlemark">6.1. </span> <a
|
Chris@1
|
5272 id="x1-900006.1"></a>Overview</h4>
|
Chris@1
|
5273 <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
|
Chris@1
|
5274 Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
|
Chris@1
|
5275 response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
|
Chris@1
|
5276 impulse response filter as would be used in linear predictive coding; LSP representation may be
|
Chris@1
|
5277 converted to LPC representation and vice-versa.
|
Chris@1
|
5278 <!--l. 18--><p class="noindent" >
|
Chris@1
|
5279 <h4 class="subsectionHead"><span class="titlemark">6.2. </span> <a
|
Chris@1
|
5280 id="x1-910006.2"></a>Floor 0 format</h4>
|
Chris@1
|
5281 <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
|
Chris@1
|
5282 coding/decoding the LSP filter coefficient values used by each frame.
|
Chris@1
|
5283 <!--l. 24--><p class="noindent" >
|
Chris@1
|
5284 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1. </span> <a
|
Chris@1
|
5285 id="x1-920006.2.1"></a>header decode</h5>
|
Chris@1
|
5286 <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
|
Chris@1
|
5287 packet). configuration decode proceeds as follows:
|
Chris@1
|
5288 <!--l. 30--><p class="noindent" >
|
Chris@1
|
5289 <div class="fancyvrb" id="fancyvrb26">
|
Chris@1
|
5290 <a
|
Chris@1
|
5291 id="x1-92002r1"></a><span
|
Chris@1
|
5292 class="cmr-6">1</span><span
|
Chris@1
|
5293 class="cmtt-8"> </span><span
|
Chris@1
|
5294 class="cmtt-8"> </span><span
|
Chris@1
|
5295 class="cmtt-8"> </span><span
|
Chris@1
|
5296 class="cmtt-8"> 1)</span><span
|
Chris@1
|
5297 class="cmtt-8"> [floor0_order]</span><span
|
Chris@1
|
5298 class="cmtt-8"> =</span><span
|
Chris@1
|
5299 class="cmtt-8"> read</span><span
|
Chris@1
|
5300 class="cmtt-8"> an</span><span
|
Chris@1
|
5301 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5302 class="cmtt-8"> integer</span><span
|
Chris@1
|
5303 class="cmtt-8"> of</span><span
|
Chris@1
|
5304 class="cmtt-8"> 8</span><span
|
Chris@1
|
5305 class="cmtt-8"> bits</span>
|
Chris@1
|
5306 <br class="fancyvrb" /><a
|
Chris@1
|
5307 id="x1-92004r2"></a><span
|
Chris@1
|
5308 class="cmr-6">2</span><span
|
Chris@1
|
5309 class="cmtt-8"> </span><span
|
Chris@1
|
5310 class="cmtt-8"> </span><span
|
Chris@1
|
5311 class="cmtt-8"> </span><span
|
Chris@1
|
5312 class="cmtt-8"> 2)</span><span
|
Chris@1
|
5313 class="cmtt-8"> [floor0_rate]</span><span
|
Chris@1
|
5314 class="cmtt-8"> =</span><span
|
Chris@1
|
5315 class="cmtt-8"> read</span><span
|
Chris@1
|
5316 class="cmtt-8"> an</span><span
|
Chris@1
|
5317 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5318 class="cmtt-8"> integer</span><span
|
Chris@1
|
5319 class="cmtt-8"> of</span><span
|
Chris@1
|
5320 class="cmtt-8"> 16</span><span
|
Chris@1
|
5321 class="cmtt-8"> bits</span>
|
Chris@1
|
5322 <br class="fancyvrb" /><a
|
Chris@1
|
5323 id="x1-92006r3"></a><span
|
Chris@1
|
5324 class="cmr-6">3</span><span
|
Chris@1
|
5325 class="cmtt-8"> </span><span
|
Chris@1
|
5326 class="cmtt-8"> </span><span
|
Chris@1
|
5327 class="cmtt-8"> </span><span
|
Chris@1
|
5328 class="cmtt-8"> 3)</span><span
|
Chris@1
|
5329 class="cmtt-8"> [floor0_bark_map_size]</span><span
|
Chris@1
|
5330 class="cmtt-8"> =</span><span
|
Chris@1
|
5331 class="cmtt-8"> read</span><span
|
Chris@1
|
5332 class="cmtt-8"> an</span><span
|
Chris@1
|
5333 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5334 class="cmtt-8"> integer</span><span
|
Chris@1
|
5335 class="cmtt-8"> of</span><span
|
Chris@1
|
5336 class="cmtt-8"> 16</span><span
|
Chris@1
|
5337 class="cmtt-8"> bits</span>
|
Chris@1
|
5338 <br class="fancyvrb" /><a
|
Chris@1
|
5339 id="x1-92008r4"></a><span
|
Chris@1
|
5340 class="cmr-6">4</span><span
|
Chris@1
|
5341 class="cmtt-8"> </span><span
|
Chris@1
|
5342 class="cmtt-8"> </span><span
|
Chris@1
|
5343 class="cmtt-8"> </span><span
|
Chris@1
|
5344 class="cmtt-8"> 4)</span><span
|
Chris@1
|
5345 class="cmtt-8"> [floor0_amplitude_bits]</span><span
|
Chris@1
|
5346 class="cmtt-8"> =</span><span
|
Chris@1
|
5347 class="cmtt-8"> read</span><span
|
Chris@1
|
5348 class="cmtt-8"> an</span><span
|
Chris@1
|
5349 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5350 class="cmtt-8"> integer</span><span
|
Chris@1
|
5351 class="cmtt-8"> of</span><span
|
Chris@1
|
5352 class="cmtt-8"> six</span><span
|
Chris@1
|
5353 class="cmtt-8"> bits</span>
|
Chris@1
|
5354 <br class="fancyvrb" /><a
|
Chris@1
|
5355 id="x1-92010r5"></a><span
|
Chris@1
|
5356 class="cmr-6">5</span><span
|
Chris@1
|
5357 class="cmtt-8"> </span><span
|
Chris@1
|
5358 class="cmtt-8"> </span><span
|
Chris@1
|
5359 class="cmtt-8"> </span><span
|
Chris@1
|
5360 class="cmtt-8"> 5)</span><span
|
Chris@1
|
5361 class="cmtt-8"> [floor0_amplitude_offset]</span><span
|
Chris@1
|
5362 class="cmtt-8"> =</span><span
|
Chris@1
|
5363 class="cmtt-8"> read</span><span
|
Chris@1
|
5364 class="cmtt-8"> an</span><span
|
Chris@1
|
5365 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5366 class="cmtt-8"> integer</span><span
|
Chris@1
|
5367 class="cmtt-8"> of</span><span
|
Chris@1
|
5368 class="cmtt-8"> eight</span><span
|
Chris@1
|
5369 class="cmtt-8"> bits</span>
|
Chris@1
|
5370 <br class="fancyvrb" /><a
|
Chris@1
|
5371 id="x1-92012r6"></a><span
|
Chris@1
|
5372 class="cmr-6">6</span><span
|
Chris@1
|
5373 class="cmtt-8"> </span><span
|
Chris@1
|
5374 class="cmtt-8"> </span><span
|
Chris@1
|
5375 class="cmtt-8"> </span><span
|
Chris@1
|
5376 class="cmtt-8"> 6)</span><span
|
Chris@1
|
5377 class="cmtt-8"> [floor0_number_of_books]</span><span
|
Chris@1
|
5378 class="cmtt-8"> =</span><span
|
Chris@1
|
5379 class="cmtt-8"> read</span><span
|
Chris@1
|
5380 class="cmtt-8"> an</span><span
|
Chris@1
|
5381 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5382 class="cmtt-8"> integer</span><span
|
Chris@1
|
5383 class="cmtt-8"> of</span><span
|
Chris@1
|
5384 class="cmtt-8"> four</span><span
|
Chris@1
|
5385 class="cmtt-8"> bits</span><span
|
Chris@1
|
5386 class="cmtt-8"> and</span><span
|
Chris@1
|
5387 class="cmtt-8"> add</span><span
|
Chris@1
|
5388 class="cmtt-8"> 1</span>
|
Chris@1
|
5389 <br class="fancyvrb" /><a
|
Chris@1
|
5390 id="x1-92014r7"></a><span
|
Chris@1
|
5391 class="cmr-6">7</span><span
|
Chris@1
|
5392 class="cmtt-8"> </span><span
|
Chris@1
|
5393 class="cmtt-8"> </span><span
|
Chris@1
|
5394 class="cmtt-8"> </span><span
|
Chris@1
|
5395 class="cmtt-8"> 7)</span><span
|
Chris@1
|
5396 class="cmtt-8"> array</span><span
|
Chris@1
|
5397 class="cmtt-8"> [floor0_book_list]</span><span
|
Chris@1
|
5398 class="cmtt-8"> =</span><span
|
Chris@1
|
5399 class="cmtt-8"> read</span><span
|
Chris@1
|
5400 class="cmtt-8"> a</span><span
|
Chris@1
|
5401 class="cmtt-8"> list</span><span
|
Chris@1
|
5402 class="cmtt-8"> of</span><span
|
Chris@1
|
5403 class="cmtt-8"> [floor0_number_of_books]</span><span
|
Chris@1
|
5404 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5405 class="cmtt-8"> integers</span><span
|
Chris@1
|
5406 class="cmtt-8"> of</span><span
|
Chris@1
|
5407 class="cmtt-8"> eight</span><span
|
Chris@1
|
5408 class="cmtt-8"> bits</span><span
|
Chris@1
|
5409 class="cmtt-8"> each;</span>
|
Chris@1
|
5410 </div>
|
Chris@1
|
5411
|
Chris@1
|
5412
|
Chris@1
|
5413
|
Chris@1
|
5414 <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
|
Chris@1
|
5415 In addition, any element of the array <span
|
Chris@1
|
5416 class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
|
Chris@1
|
5417 codebook number for this bitstream is an error condition that also renders the stream
|
Chris@1
|
5418 undecodable.
|
Chris@1
|
5419 <!--l. 48--><p class="noindent" >
|
Chris@1
|
5420 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2. </span> <a
|
Chris@1
|
5421 id="x1-930006.2.2"></a>packet decode</h5>
|
Chris@1
|
5422 <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
|
Chris@1
|
5423 amplitude and <span
|
Chris@1
|
5424 class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
|
Chris@1
|
5425 computing the floor curve, which is defined as the frequency response of the decoded LSP
|
Chris@1
|
5426 filter.
|
Chris@1
|
5427 <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
|
Chris@1
|
5428 <div class="fancyvrb" id="fancyvrb27">
|
Chris@1
|
5429 <a
|
Chris@1
|
5430 id="x1-93002r1"></a><span
|
Chris@1
|
5431 class="cmr-6">1</span><span
|
Chris@1
|
5432 class="cmtt-8"> </span><span
|
Chris@1
|
5433 class="cmtt-8"> </span><span
|
Chris@1
|
5434 class="cmtt-8"> </span><span
|
Chris@1
|
5435 class="cmtt-8"> 1)</span><span
|
Chris@1
|
5436 class="cmtt-8"> [amplitude]</span><span
|
Chris@1
|
5437 class="cmtt-8"> =</span><span
|
Chris@1
|
5438 class="cmtt-8"> read</span><span
|
Chris@1
|
5439 class="cmtt-8"> an</span><span
|
Chris@1
|
5440 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5441 class="cmtt-8"> integer</span><span
|
Chris@1
|
5442 class="cmtt-8"> of</span><span
|
Chris@1
|
5443 class="cmtt-8"> [floor0_amplitude_bits]</span><span
|
Chris@1
|
5444 class="cmtt-8"> bits</span>
|
Chris@1
|
5445 <br class="fancyvrb" /><a
|
Chris@1
|
5446 id="x1-93004r2"></a><span
|
Chris@1
|
5447 class="cmr-6">2</span><span
|
Chris@1
|
5448 class="cmtt-8"> </span><span
|
Chris@1
|
5449 class="cmtt-8"> </span><span
|
Chris@1
|
5450 class="cmtt-8"> </span><span
|
Chris@1
|
5451 class="cmtt-8"> 2)</span><span
|
Chris@1
|
5452 class="cmtt-8"> if</span><span
|
Chris@1
|
5453 class="cmtt-8"> (</span><span
|
Chris@1
|
5454 class="cmtt-8"> [amplitude]</span><span
|
Chris@1
|
5455 class="cmtt-8"> is</span><span
|
Chris@1
|
5456 class="cmtt-8"> greater</span><span
|
Chris@1
|
5457 class="cmtt-8"> than</span><span
|
Chris@1
|
5458 class="cmtt-8"> zero</span><span
|
Chris@1
|
5459 class="cmtt-8"> )</span><span
|
Chris@1
|
5460 class="cmtt-8"> </span><span
|
Chris@1
|
5461 class="cmsy-8">{</span>
|
Chris@1
|
5462 <br class="fancyvrb" /><a
|
Chris@1
|
5463 id="x1-93006r3"></a><span
|
Chris@1
|
5464 class="cmr-6">3</span><span
|
Chris@1
|
5465 class="cmtt-8"> </span><span
|
Chris@1
|
5466 class="cmtt-8"> </span><span
|
Chris@1
|
5467 class="cmtt-8"> </span><span
|
Chris@1
|
5468 class="cmtt-8"> </span><span
|
Chris@1
|
5469 class="cmtt-8"> </span><span
|
Chris@1
|
5470 class="cmtt-8"> </span><span
|
Chris@1
|
5471 class="cmtt-8"> </span><span
|
Chris@1
|
5472 class="cmtt-8"> </span><span
|
Chris@1
|
5473 class="cmtt-8"> 3)</span><span
|
Chris@1
|
5474 class="cmtt-8"> [coefficients]</span><span
|
Chris@1
|
5475 class="cmtt-8"> is</span><span
|
Chris@1
|
5476 class="cmtt-8"> an</span><span
|
Chris@1
|
5477 class="cmtt-8"> empty,</span><span
|
Chris@1
|
5478 class="cmtt-8"> zero</span><span
|
Chris@1
|
5479 class="cmtt-8"> length</span><span
|
Chris@1
|
5480 class="cmtt-8"> vector</span>
|
Chris@1
|
5481 <br class="fancyvrb" /><a
|
Chris@1
|
5482 id="x1-93008r4"></a><span
|
Chris@1
|
5483 class="cmr-6">4</span><span
|
Chris@1
|
5484 class="cmtt-8"> </span><span
|
Chris@1
|
5485 class="cmtt-8"> </span><span
|
Chris@1
|
5486 class="cmtt-8"> </span><span
|
Chris@1
|
5487 class="cmtt-8"> </span><span
|
Chris@1
|
5488 class="cmtt-8"> </span><span
|
Chris@1
|
5489 class="cmtt-8"> </span><span
|
Chris@1
|
5490 class="cmtt-8"> </span><span
|
Chris@1
|
5491 class="cmtt-8"> </span><span
|
Chris@1
|
5492 class="cmtt-8"> 4)</span><span
|
Chris@1
|
5493 class="cmtt-8"> [booknumber]</span><span
|
Chris@1
|
5494 class="cmtt-8"> =</span><span
|
Chris@1
|
5495 class="cmtt-8"> read</span><span
|
Chris@1
|
5496 class="cmtt-8"> an</span><span
|
Chris@1
|
5497 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
5498 class="cmtt-8"> integer</span><span
|
Chris@1
|
5499 class="cmtt-8"> of</span><span
|
Chris@1
|
5500 class="cmtt-8"> </span><a
|
Chris@1
|
5501 href="#x1-1170009.2.1"><span
|
Chris@1
|
5502 class="cmtt-8">ilog</span></a><span
|
Chris@1
|
5503 class="cmtt-8">(</span><span
|
Chris@1
|
5504 class="cmtt-8"> [floor0_number_of_books]</span><span
|
Chris@1
|
5505 class="cmtt-8"> )</span><span
|
Chris@1
|
5506 class="cmtt-8"> bits</span>
|
Chris@1
|
5507 <br class="fancyvrb" /><a
|
Chris@1
|
5508 id="x1-93010r5"></a><span
|
Chris@1
|
5509 class="cmr-6">5</span><span
|
Chris@1
|
5510 class="cmtt-8"> </span><span
|
Chris@1
|
5511 class="cmtt-8"> </span><span
|
Chris@1
|
5512 class="cmtt-8"> </span><span
|
Chris@1
|
5513 class="cmtt-8"> </span><span
|
Chris@1
|
5514 class="cmtt-8"> </span><span
|
Chris@1
|
5515 class="cmtt-8"> </span><span
|
Chris@1
|
5516 class="cmtt-8"> </span><span
|
Chris@1
|
5517 class="cmtt-8"> </span><span
|
Chris@1
|
5518 class="cmtt-8"> 5)</span><span
|
Chris@1
|
5519 class="cmtt-8"> if</span><span
|
Chris@1
|
5520 class="cmtt-8"> (</span><span
|
Chris@1
|
5521 class="cmtt-8"> [booknumber]</span><span
|
Chris@1
|
5522 class="cmtt-8"> is</span><span
|
Chris@1
|
5523 class="cmtt-8"> greater</span><span
|
Chris@1
|
5524 class="cmtt-8"> than</span><span
|
Chris@1
|
5525 class="cmtt-8"> the</span><span
|
Chris@1
|
5526 class="cmtt-8"> highest</span><span
|
Chris@1
|
5527 class="cmtt-8"> number</span><span
|
Chris@1
|
5528 class="cmtt-8"> decode</span><span
|
Chris@1
|
5529 class="cmtt-8"> codebook</span><span
|
Chris@1
|
5530 class="cmtt-8"> )</span><span
|
Chris@1
|
5531 class="cmtt-8"> then</span><span
|
Chris@1
|
5532 class="cmtt-8"> packet</span><span
|
Chris@1
|
5533 class="cmtt-8"> is</span><span
|
Chris@1
|
5534 class="cmtt-8"> undecodable</span>
|
Chris@1
|
5535 <br class="fancyvrb" /><a
|
Chris@1
|
5536 id="x1-93012r6"></a><span
|
Chris@1
|
5537 class="cmr-6">6</span><span
|
Chris@1
|
5538 class="cmtt-8"> </span><span
|
Chris@1
|
5539 class="cmtt-8"> </span><span
|
Chris@1
|
5540 class="cmtt-8"> </span><span
|
Chris@1
|
5541 class="cmtt-8"> </span><span
|
Chris@1
|
5542 class="cmtt-8"> </span><span
|
Chris@1
|
5543 class="cmtt-8"> </span><span
|
Chris@1
|
5544 class="cmtt-8"> </span><span
|
Chris@1
|
5545 class="cmtt-8"> </span><span
|
Chris@1
|
5546 class="cmtt-8"> 6)</span><span
|
Chris@1
|
5547 class="cmtt-8"> [last]</span><span
|
Chris@1
|
5548 class="cmtt-8"> =</span><span
|
Chris@1
|
5549 class="cmtt-8"> zero;</span>
|
Chris@1
|
5550 <br class="fancyvrb" /><a
|
Chris@1
|
5551 id="x1-93014r7"></a><span
|
Chris@1
|
5552 class="cmr-6">7</span><span
|
Chris@1
|
5553 class="cmtt-8"> </span><span
|
Chris@1
|
5554 class="cmtt-8"> </span><span
|
Chris@1
|
5555 class="cmtt-8"> </span><span
|
Chris@1
|
5556 class="cmtt-8"> </span><span
|
Chris@1
|
5557 class="cmtt-8"> </span><span
|
Chris@1
|
5558 class="cmtt-8"> </span><span
|
Chris@1
|
5559 class="cmtt-8"> </span><span
|
Chris@1
|
5560 class="cmtt-8"> </span><span
|
Chris@1
|
5561 class="cmtt-8"> 7)</span><span
|
Chris@1
|
5562 class="cmtt-8"> vector</span><span
|
Chris@1
|
5563 class="cmtt-8"> [temp_vector]</span><span
|
Chris@1
|
5564 class="cmtt-8"> =</span><span
|
Chris@1
|
5565 class="cmtt-8"> read</span><span
|
Chris@1
|
5566 class="cmtt-8"> vector</span><span
|
Chris@1
|
5567 class="cmtt-8"> from</span><span
|
Chris@1
|
5568 class="cmtt-8"> bitstream</span><span
|
Chris@1
|
5569 class="cmtt-8"> using</span><span
|
Chris@1
|
5570 class="cmtt-8"> codebook</span><span
|
Chris@1
|
5571 class="cmtt-8"> number</span><span
|
Chris@1
|
5572 class="cmtt-8"> [floor0_book_list]</span><span
|
Chris@1
|
5573 class="cmtt-8"> element</span><span
|
Chris@1
|
5574 class="cmtt-8"> [booknumber]</span><span
|
Chris@1
|
5575 class="cmtt-8"> in</span><span
|
Chris@1
|
5576 class="cmtt-8"> VQ</span><span
|
Chris@1
|
5577 class="cmtt-8"> context.</span>
|
Chris@1
|
5578 <br class="fancyvrb" /><a
|
Chris@1
|
5579 id="x1-93016r8"></a><span
|
Chris@1
|
5580 class="cmr-6">8</span><span
|
Chris@1
|
5581 class="cmtt-8"> </span><span
|
Chris@1
|
5582 class="cmtt-8"> </span><span
|
Chris@1
|
5583 class="cmtt-8"> </span><span
|
Chris@1
|
5584 class="cmtt-8"> </span><span
|
Chris@1
|
5585 class="cmtt-8"> </span><span
|
Chris@1
|
5586 class="cmtt-8"> </span><span
|
Chris@1
|
5587 class="cmtt-8"> </span><span
|
Chris@1
|
5588 class="cmtt-8"> </span><span
|
Chris@1
|
5589 class="cmtt-8"> 8)</span><span
|
Chris@1
|
5590 class="cmtt-8"> add</span><span
|
Chris@1
|
5591 class="cmtt-8"> the</span><span
|
Chris@1
|
5592 class="cmtt-8"> scalar</span><span
|
Chris@1
|
5593 class="cmtt-8"> value</span><span
|
Chris@1
|
5594 class="cmtt-8"> [last]</span><span
|
Chris@1
|
5595 class="cmtt-8"> to</span><span
|
Chris@1
|
5596 class="cmtt-8"> each</span><span
|
Chris@1
|
5597 class="cmtt-8"> scalar</span><span
|
Chris@1
|
5598 class="cmtt-8"> in</span><span
|
Chris@1
|
5599 class="cmtt-8"> vector</span><span
|
Chris@1
|
5600 class="cmtt-8"> [temp_vector]</span>
|
Chris@1
|
5601 <br class="fancyvrb" /><a
|
Chris@1
|
5602 id="x1-93018r9"></a><span
|
Chris@1
|
5603 class="cmr-6">9</span><span
|
Chris@1
|
5604 class="cmtt-8"> </span><span
|
Chris@1
|
5605 class="cmtt-8"> </span><span
|
Chris@1
|
5606 class="cmtt-8"> </span><span
|
Chris@1
|
5607 class="cmtt-8"> </span><span
|
Chris@1
|
5608 class="cmtt-8"> </span><span
|
Chris@1
|
5609 class="cmtt-8"> </span><span
|
Chris@1
|
5610 class="cmtt-8"> </span><span
|
Chris@1
|
5611 class="cmtt-8"> </span><span
|
Chris@1
|
5612 class="cmtt-8"> 9)</span><span
|
Chris@1
|
5613 class="cmtt-8"> [last]</span><span
|
Chris@1
|
5614 class="cmtt-8"> =</span><span
|
Chris@1
|
5615 class="cmtt-8"> the</span><span
|
Chris@1
|
5616 class="cmtt-8"> value</span><span
|
Chris@1
|
5617 class="cmtt-8"> of</span><span
|
Chris@1
|
5618 class="cmtt-8"> the</span><span
|
Chris@1
|
5619 class="cmtt-8"> last</span><span
|
Chris@1
|
5620 class="cmtt-8"> scalar</span><span
|
Chris@1
|
5621 class="cmtt-8"> in</span><span
|
Chris@1
|
5622 class="cmtt-8"> vector</span><span
|
Chris@1
|
5623 class="cmtt-8"> [temp_vector]</span>
|
Chris@1
|
5624 <br class="fancyvrb" /><a
|
Chris@1
|
5625 id="x1-93020r10"></a><span
|
Chris@1
|
5626 class="cmr-6">10</span><span
|
Chris@1
|
5627 class="cmtt-8"> </span><span
|
Chris@1
|
5628 class="cmtt-8"> </span><span
|
Chris@1
|
5629 class="cmtt-8"> </span><span
|
Chris@1
|
5630 class="cmtt-8"> </span><span
|
Chris@1
|
5631 class="cmtt-8"> </span><span
|
Chris@1
|
5632 class="cmtt-8"> </span><span
|
Chris@1
|
5633 class="cmtt-8"> </span><span
|
Chris@1
|
5634 class="cmtt-8"> 10)</span><span
|
Chris@1
|
5635 class="cmtt-8"> concatenate</span><span
|
Chris@1
|
5636 class="cmtt-8"> [temp_vector]</span><span
|
Chris@1
|
5637 class="cmtt-8"> onto</span><span
|
Chris@1
|
5638 class="cmtt-8"> the</span><span
|
Chris@1
|
5639 class="cmtt-8"> end</span><span
|
Chris@1
|
5640 class="cmtt-8"> of</span><span
|
Chris@1
|
5641 class="cmtt-8"> the</span><span
|
Chris@1
|
5642 class="cmtt-8"> [coefficients]</span><span
|
Chris@1
|
5643 class="cmtt-8"> vector</span>
|
Chris@1
|
5644 <br class="fancyvrb" /><a
|
Chris@1
|
5645 id="x1-93022r11"></a><span
|
Chris@1
|
5646 class="cmr-6">11</span><span
|
Chris@1
|
5647 class="cmtt-8"> </span><span
|
Chris@1
|
5648 class="cmtt-8"> </span><span
|
Chris@1
|
5649 class="cmtt-8"> </span><span
|
Chris@1
|
5650 class="cmtt-8"> </span><span
|
Chris@1
|
5651 class="cmtt-8"> </span><span
|
Chris@1
|
5652 class="cmtt-8"> </span><span
|
Chris@1
|
5653 class="cmtt-8"> </span><span
|
Chris@1
|
5654 class="cmtt-8"> 11)</span><span
|
Chris@1
|
5655 class="cmtt-8"> if</span><span
|
Chris@1
|
5656 class="cmtt-8"> (length</span><span
|
Chris@1
|
5657 class="cmtt-8"> of</span><span
|
Chris@1
|
5658 class="cmtt-8"> vector</span><span
|
Chris@1
|
5659 class="cmtt-8"> [coefficients]</span><span
|
Chris@1
|
5660 class="cmtt-8"> is</span><span
|
Chris@1
|
5661 class="cmtt-8"> less</span><span
|
Chris@1
|
5662 class="cmtt-8"> than</span><span
|
Chris@1
|
5663 class="cmtt-8"> [floor0_order],</span><span
|
Chris@1
|
5664 class="cmtt-8"> continue</span><span
|
Chris@1
|
5665 class="cmtt-8"> at</span><span
|
Chris@1
|
5666 class="cmtt-8"> step</span><span
|
Chris@1
|
5667 class="cmtt-8"> 6</span>
|
Chris@1
|
5668 <br class="fancyvrb" /><a
|
Chris@1
|
5669 id="x1-93024r12"></a><span
|
Chris@1
|
5670 class="cmr-6">12</span><span
|
Chris@1
|
5671 class="cmtt-8"> </span><span
|
Chris@1
|
5672 class="cmtt-8"> </span>
|
Chris@1
|
5673 <br class="fancyvrb" /><a
|
Chris@1
|
5674 id="x1-93026r13"></a><span
|
Chris@1
|
5675 class="cmr-6">13</span><span
|
Chris@1
|
5676 class="cmtt-8"> </span><span
|
Chris@1
|
5677 class="cmtt-8"> </span><span
|
Chris@1
|
5678 class="cmtt-8"> </span><span
|
Chris@1
|
5679 class="cmtt-8"> </span><span
|
Chris@1
|
5680 class="cmtt-8"> </span><span
|
Chris@1
|
5681 class="cmtt-8"> </span><span
|
Chris@1
|
5682 class="cmtt-8"> </span><span
|
Chris@1
|
5683 class="cmsy-8">}</span>
|
Chris@1
|
5684 <br class="fancyvrb" /><a
|
Chris@1
|
5685 id="x1-93028r14"></a><span
|
Chris@1
|
5686 class="cmr-6">14</span><span
|
Chris@1
|
5687 class="cmtt-8"> </span><span
|
Chris@1
|
5688 class="cmtt-8"> </span>
|
Chris@1
|
5689 <br class="fancyvrb" /><a
|
Chris@1
|
5690 id="x1-93030r15"></a><span
|
Chris@1
|
5691 class="cmr-6">15</span><span
|
Chris@1
|
5692 class="cmtt-8"> </span><span
|
Chris@1
|
5693 class="cmtt-8"> </span><span
|
Chris@1
|
5694 class="cmtt-8"> 12)</span><span
|
Chris@1
|
5695 class="cmtt-8"> done.</span>
|
Chris@1
|
5696 <br class="fancyvrb" /><a
|
Chris@1
|
5697 id="x1-93032r16"></a><span
|
Chris@1
|
5698 class="cmr-6">16</span><span
|
Chris@1
|
5699 class="cmtt-8"> </span><span
|
Chris@1
|
5700 class="cmtt-8"> </span>
|
Chris@1
|
5701 </div>
|
Chris@1
|
5702 <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
|
Chris@1
|
5703 <ul class="itemize1">
|
Chris@1
|
5704 <li class="itemize">An <span
|
Chris@1
|
5705 class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
|
Chris@1
|
5706 is unused in this frame (the output of the channel will be all-zeroes in synthesis).
|
Chris@1
|
5707 Several later stages of decode don’t occur for an unused channel.
|
Chris@1
|
5708 </li>
|
Chris@1
|
5709 <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
|
Chris@1
|
5710 if end-of-packet is reached during any read operation above, floor decode is to return
|
Chris@1
|
5711 ’unused’ status as if the <span
|
Chris@1
|
5712 class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
|
Chris@1
|
5713 </li>
|
Chris@1
|
5714 <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a
|
Chris@1
|
5715 href="#x1-1170009.2.1">ilog</a>(
|
Chris@1
|
5716
|
Chris@1
|
5717
|
Chris@1
|
5718
|
Chris@1
|
5719 <span
|
Chris@1
|
5720 class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
|
Chris@1
|
5721 and values greater than the maximum possible book value are reserved.
|
Chris@1
|
5722 </li>
|
Chris@1
|
5723 <li class="itemize">The number of scalars read into the vector <span
|
Chris@1
|
5724 class="cmtt-12">[coefficients] </span>may be greater
|
Chris@1
|
5725 than <span
|
Chris@1
|
5726 class="cmtt-12">[floor0_order]</span>, the number actually required for curve computation. For
|
Chris@1
|
5727 example, if the VQ codebook used for the floor currently being decoded has a
|
Chris@1
|
5728 <span
|
Chris@1
|
5729 class="cmtt-12">[codebook_dimensions] </span>value of three and <span
|
Chris@1
|
5730 class="cmtt-12">[floor0_order] </span>is ten, the only way to
|
Chris@1
|
5731 fill all the needed scalars in <span
|
Chris@1
|
5732 class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
|
Chris@1
|
5733 as four vectors of three scalars each. This is not an error condition, and care must
|
Chris@1
|
5734 be taken not to allow a buffer overflow in decode. The extra values are not used and
|
Chris@1
|
5735 may be ignored or discarded.</li></ul>
|
Chris@1
|
5736 <!--l. 104--><p class="noindent" >
|
Chris@1
|
5737 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3. </span> <a
|
Chris@1
|
5738 id="x1-940006.2.3"></a>curve computation</h5>
|
Chris@1
|
5739 <!--l. 106--><p class="noindent" >Given an <span
|
Chris@1
|
5740 class="cmtt-12">[amplitude] </span>integer and <span
|
Chris@1
|
5741 class="cmtt-12">[coefficients] </span>vector from packet decode as well as
|
Chris@1
|
5742 the [floor0_order], [floor0_rate], [floor0_bark_map_size], [floor0_amplitude_bits] and
|
Chris@1
|
5743 [floor0_amplitude_offset] values from floor setup, and an output vector size <span
|
Chris@1
|
5744 class="cmtt-12">[n] </span>specified by the
|
Chris@1
|
5745 decode process, we compute a floor output vector.
|
Chris@1
|
5746 <!--l. 113--><p class="noindent" >If the value <span
|
Chris@1
|
5747 class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span
|
Chris@1
|
5748 class="cmtt-12">[n] </span>vector with all-zero
|
Chris@1
|
5749 scalars. Otherwise, begin by assuming the following definitions for the given vector to be
|
Chris@1
|
5750 synthesized:
|
Chris@1
|
5751 <center class="par-math-display" >
|
Chris@1
|
5752 <img
|
Chris@1
|
5753 src="Vorbis_I_spec7x.png" alt=" {
|
Chris@1
|
5754 min (floor0_bark_map_size − 1,foobar ) for i ∈ [0,n − 1 ]
|
Chris@1
|
5755 mapi = − 1 for i = n
|
Chris@1
|
5756 " class="par-math-display" ></center>
|
Chris@1
|
5757 <!--l. 128--><p class="nopar" >
|
Chris@1
|
5758 <!--l. 130--><p class="noindent" >where
|
Chris@1
|
5759 <center class="par-math-display" >
|
Chris@1
|
5760 <img
|
Chris@1
|
5761 src="Vorbis_I_spec8x.png" alt=" ⌊ ⌋
|
Chris@1
|
5762 (floor0_rate ⋅ i) floor0_bark_map_size
|
Chris@1
|
5763 foobar = bark -------2n------- ⋅-bark(.5 ⋅ floor0_rate-)
|
Chris@1
|
5764 " class="par-math-display" ></center>
|
Chris@1
|
5765
|
Chris@1
|
5766
|
Chris@1
|
5767
|
Chris@1
|
5768 <!--l. 137--><p class="nopar" >
|
Chris@1
|
5769 <!--l. 139--><p class="noindent" >and
|
Chris@1
|
5770 <center class="par-math-display" >
|
Chris@1
|
5771 <img
|
Chris@1
|
5772 src="Vorbis_I_spec9x.png" alt=" 2
|
Chris@1
|
5773 bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x + .0001x )
|
Chris@1
|
5774 " class="par-math-display" ></center>
|
Chris@1
|
5775 <!--l. 143--><p class="nopar" >
|
Chris@1
|
5776 <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
|
Chris@1
|
5777 result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
|
Chris@1
|
5778 LSP curve <span
|
Chris@1
|
5779 class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
|
Chris@1
|
5780 step:
|
Chris@1
|
5781 <!--l. 151--><p class="noindent" >
|
Chris@1
|
5782 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
5783 1. </dt><dd
|
Chris@1
|
5784 class="enumerate-enumitem"><span
|
Chris@1
|
5785 class="cmtt-12">[i] </span>= 0
|
Chris@1
|
5786 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5787 2. </dt><dd
|
Chris@1
|
5788 class="enumerate-enumitem"><span
|
Chris@1
|
5789 class="cmtt-12">[</span><span
|
Chris@1
|
5790 class="cmmi-12">ω</span><span
|
Chris@1
|
5791 class="cmtt-12">] </span>= <span
|
Chris@1
|
5792 class="cmmi-12">π </span>* map element <span
|
Chris@1
|
5793 class="cmtt-12">[i] </span>/ <span
|
Chris@1
|
5794 class="cmtt-12">[floor0_bark_map_size]</span>
|
Chris@1
|
5795 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5796 3. </dt><dd
|
Chris@1
|
5797 class="enumerate-enumitem">if ( <span
|
Chris@1
|
5798 class="cmtt-12">[floor0_order] </span>is odd )
|
Chris@1
|
5799 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
5800 a) </dt><dd
|
Chris@1
|
5801 class="enumerate-enumitem">calculate <span
|
Chris@1
|
5802 class="cmtt-12">[p] </span>and <span
|
Chris@1
|
5803 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
|
Chris@1
|
5804 <center class="math-display" >
|
Chris@1
|
5805 <img
|
Chris@1
|
5806 src="Vorbis_I_spec10x.png" alt=" floor0_order−3
|
Chris@1
|
5807 2 ∏2 2
|
Chris@1
|
5808 p = (1 − cos ω) 4(cos([coefficients ]2j+1) − cosω )
|
Chris@1
|
5809 floor0_order−1 j=0
|
Chris@1
|
5810 1 ----∏2----
|
Chris@1
|
5811 q = -- 4(cos([coefficients ]2j) − cosω )2
|
Chris@1
|
5812 4 j=0
|
Chris@1
|
5813
|
Chris@1
|
5814
|
Chris@1
|
5815
|
Chris@1
|
5816 " class="math-display" ></center>
|
Chris@1
|
5817 </div>
|
Chris@1
|
5818 </dd></dl>
|
Chris@1
|
5819 <!--l. 162--><p class="noindent" >else <span
|
Chris@1
|
5820 class="cmtt-12">[floor0_order] </span>is even
|
Chris@1
|
5821 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
5822 b) </dt><dd
|
Chris@1
|
5823 class="enumerate-enumitem">calculate <span
|
Chris@1
|
5824 class="cmtt-12">[p] </span>and <span
|
Chris@1
|
5825 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
|
Chris@1
|
5826 <center class="math-display" >
|
Chris@1
|
5827 <img
|
Chris@1
|
5828 src="Vorbis_I_spec11x.png" alt=" floor0_order−2
|
Chris@1
|
5829 (1-−-cosω-) ∏2 2
|
Chris@1
|
5830 p = 2 4(cos([coefficients ]2j+1) − cosω)
|
Chris@1
|
5831 j=0
|
Chris@1
|
5832 floor0_∏o2rder−-2
|
Chris@1
|
5833 q = (1-+-cosω-) 4(cos([coefficients ]2j) − cos ω)2
|
Chris@1
|
5834 2 j=0
|
Chris@1
|
5835 " class="math-display" ></center>
|
Chris@1
|
5836 </div>
|
Chris@1
|
5837 </dd></dl>
|
Chris@1
|
5838 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5839 4. </dt><dd
|
Chris@1
|
5840 class="enumerate-enumitem">calculate <span
|
Chris@1
|
5841 class="cmtt-12">[linear_floor_value] </span>according to:
|
Chris@1
|
5842 <center class="math-display" >
|
Chris@1
|
5843 <img
|
Chris@1
|
5844 src="Vorbis_I_spec12x.png" alt=" ( ( ))
|
Chris@1
|
5845 exp .11512925 amplitude---⋅ floor0_amplitute_√offset---− floor0_amplitude_offset
|
Chris@1
|
5846 (2floor0_amplitude_bits − 1) p + q
|
Chris@1
|
5847 " class="math-display" ></center>
|
Chris@1
|
5848 <!--l. 177--><p class="nopar" >
|
Chris@1
|
5849 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5850 5. </dt><dd
|
Chris@1
|
5851 class="enumerate-enumitem"><span
|
Chris@1
|
5852 class="cmtt-12">[iteration_condition] </span>= map element <span
|
Chris@1
|
5853 class="cmtt-12">[i]</span>
|
Chris@1
|
5854
|
Chris@1
|
5855
|
Chris@1
|
5856
|
Chris@1
|
5857 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5858 6. </dt><dd
|
Chris@1
|
5859 class="enumerate-enumitem"><span
|
Chris@1
|
5860 class="cmtt-12">[output] </span>element <span
|
Chris@1
|
5861 class="cmtt-12">[i] </span>= <span
|
Chris@1
|
5862 class="cmtt-12">[linear_floor_value]</span>
|
Chris@1
|
5863 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5864 7. </dt><dd
|
Chris@1
|
5865 class="enumerate-enumitem">increment <span
|
Chris@1
|
5866 class="cmtt-12">[i]</span>
|
Chris@1
|
5867 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5868 8. </dt><dd
|
Chris@1
|
5869 class="enumerate-enumitem">if ( map element <span
|
Chris@1
|
5870 class="cmtt-12">[i] </span>is equal to <span
|
Chris@1
|
5871 class="cmtt-12">[iteration_condition] </span>) continue at step
|
Chris@1
|
5872 5
|
Chris@1
|
5873 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5874 9. </dt><dd
|
Chris@1
|
5875 class="enumerate-enumitem">if ( <span
|
Chris@1
|
5876 class="cmtt-12">[i] </span>is less than <span
|
Chris@1
|
5877 class="cmtt-12">[n] </span>) continue at step 2
|
Chris@1
|
5878 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
5879 10. </dt><dd
|
Chris@1
|
5880 class="enumerate-enumitem">done</dd></dl>
|
Chris@1
|
5881
|
Chris@1
|
5882
|
Chris@1
|
5883
|
Chris@1
|
5884
|
Chris@1
|
5885
|
Chris@1
|
5886
|
Chris@1
|
5887 <h3 class="sectionHead"><span class="titlemark">7. </span> <a
|
Chris@1
|
5888 id="x1-950007"></a>Floor type 1 setup and decode</h3>
|
Chris@1
|
5889 <!--l. 6--><p class="noindent" >
|
Chris@1
|
5890 <h4 class="subsectionHead"><span class="titlemark">7.1. </span> <a
|
Chris@1
|
5891 id="x1-960007.1"></a>Overview</h4>
|
Chris@1
|
5892 <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
|
Chris@1
|
5893 curve. The representation plots this curve mechanically on a linear frequency axis and a
|
Chris@1
|
5894 logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham’s
|
Chris@1
|
5895 algorithm.
|
Chris@1
|
5896 <!--l. 16--><p class="noindent" >
|
Chris@1
|
5897 <h4 class="subsectionHead"><span class="titlemark">7.2. </span> <a
|
Chris@1
|
5898 id="x1-970007.2"></a>Floor 1 format</h4>
|
Chris@1
|
5899 <!--l. 18--><p class="noindent" >
|
Chris@1
|
5900 <h5 class="subsubsectionHead"><span class="titlemark">7.2.1. </span> <a
|
Chris@1
|
5901 id="x1-980007.2.1"></a>model</h5>
|
Chris@1
|
5902 <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
|
Chris@1
|
5903 floor curve using iterative prediction in a process roughly equivalent to the following simplified
|
Chris@1
|
5904 description:
|
Chris@1
|
5905 <ul class="itemize1">
|
Chris@1
|
5906 <li class="itemize">the first line segment (base case) is a logical line spanning from x˙0,y˙0 to x˙1,y˙1
|
Chris@1
|
5907 where in the base case x˙0=0 and x˙1=[n], the full range of the spectral floor to be
|
Chris@1
|
5908 computed.
|
Chris@1
|
5909 </li>
|
Chris@1
|
5910 <li class="itemize">the induction step chooses a point x˙new within an existing logical line segment and
|
Chris@1
|
5911 produces a y˙new value at that point computed from the existing line’s y value at
|
Chris@1
|
5912 x˙new (as plotted by the line) and a difference value decoded from the bitstream
|
Chris@1
|
5913 packet.
|
Chris@1
|
5914
|
Chris@1
|
5915
|
Chris@1
|
5916
|
Chris@1
|
5917 </li>
|
Chris@1
|
5918 <li class="itemize">floor computation produces two new line segments, one running from x˙0,y˙0 to
|
Chris@1
|
5919 x˙new,y˙new and from x˙new,y˙new to x˙1,y˙1. This step is performed logically even if
|
Chris@1
|
5920 y˙new represents no change to the amplitude value at x˙new so that later refinement
|
Chris@1
|
5921 is additionally bounded at x˙new.
|
Chris@1
|
5922 </li>
|
Chris@1
|
5923 <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
|
Chris@1
|
5924 at floor 1 initialization time. Computation is completed at the end of the x value list.
|
Chris@1
|
5925 </li></ul>
|
Chris@1
|
5926 <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
|
Chris@1
|
5927 representing typical configuration:
|
Chris@1
|
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
|
Chris@1
|
5929 in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
|
Chris@1
|
5930 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
|
Chris@1
|
5931 example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
|
Chris@1
|
5932 way, beginning with the first line:
|
Chris@1
|
5933 <div class="center"
|
Chris@1
|
5934 >
|
Chris@1
|
5935 <!--l. 59--><p class="noindent" >
|
Chris@1
|
5936
|
Chris@1
|
5937 <!--l. 60--><p class="noindent" ><img
|
Chris@1
|
5938 src="floor1-1.png" alt="PIC"
|
Chris@1
|
5939 >
|
Chris@1
|
5940 <br /> <div class="caption"
|
Chris@1
|
5941 ><span class="id">Figure 7: </span><span
|
Chris@1
|
5942 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 -->
|
Chris@1
|
5943 </div>
|
Chris@1
|
5944 <!--l. 64--><p class="noindent" >We now draw new logical lines to reflect the correction to new˙Y, and iterate for X positions 32
|
Chris@1
|
5945 and 96:
|
Chris@1
|
5946 <div class="center"
|
Chris@1
|
5947 >
|
Chris@1
|
5948 <!--l. 67--><p class="noindent" >
|
Chris@1
|
5949
|
Chris@1
|
5950 <!--l. 68--><p class="noindent" ><img
|
Chris@1
|
5951 src="floor1-2.png" alt="PIC"
|
Chris@1
|
5952 >
|
Chris@1
|
5953 <br /> <div class="caption"
|
Chris@1
|
5954 ><span class="id">Figure 8: </span><span
|
Chris@1
|
5955 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 -->
|
Chris@1
|
5956 </div>
|
Chris@1
|
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
|
Chris@1
|
5958 further refinement. From here on, the pattern should be clear; we complete the floor computation
|
Chris@1
|
5959 as follows:
|
Chris@1
|
5960
|
Chris@1
|
5961
|
Chris@1
|
5962
|
Chris@1
|
5963 <div class="center"
|
Chris@1
|
5964 >
|
Chris@1
|
5965 <!--l. 76--><p class="noindent" >
|
Chris@1
|
5966
|
Chris@1
|
5967 <!--l. 77--><p class="noindent" ><img
|
Chris@1
|
5968 src="floor1-3.png" alt="PIC"
|
Chris@1
|
5969 >
|
Chris@1
|
5970 <br /> <div class="caption"
|
Chris@1
|
5971 ><span class="id">Figure 9: </span><span
|
Chris@1
|
5972 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 -->
|
Chris@1
|
5973 </div>
|
Chris@1
|
5974 <div class="center"
|
Chris@1
|
5975 >
|
Chris@1
|
5976 <!--l. 81--><p class="noindent" >
|
Chris@1
|
5977
|
Chris@1
|
5978 <!--l. 82--><p class="noindent" ><img
|
Chris@1
|
5979 src="floor1-4.png" alt="PIC"
|
Chris@1
|
5980 >
|
Chris@1
|
5981 <br /> <div class="caption"
|
Chris@1
|
5982 ><span class="id">Figure 10: </span><span
|
Chris@1
|
5983 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 -->
|
Chris@1
|
5984 </div>
|
Chris@1
|
5985 <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
|
Chris@1
|
5986 decode, as described later. The actual algorithm splits Y value computation and line plotting
|
Chris@1
|
5987 into two steps with modifications to the above algorithm to eliminate noise accumulation
|
Chris@1
|
5988 through integer roundoff/truncation.
|
Chris@1
|
5989 <!--l. 94--><p class="noindent" >
|
Chris@1
|
5990 <h5 class="subsubsectionHead"><span class="titlemark">7.2.2. </span> <a
|
Chris@1
|
5991 id="x1-990007.2.2"></a>header decode</h5>
|
Chris@1
|
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
|
Chris@1
|
5993 during packet decode and synthesis). This list is split into partitions, and each partition is
|
Chris@1
|
5994 assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
|
Chris@1
|
5995 partition or partition class.
|
Chris@1
|
5996 <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
|
Chris@1
|
5997 the partition class encodes at once), a ’subclass’ value representing the number of
|
Chris@1
|
5998 alternate entropy books the partition class may use in representing Y values, the list of
|
Chris@1
|
5999 [subclass] books and a master book used to encode which alternate books were chosen
|
Chris@1
|
6000 for representation in a given packet. The master/subclass mechanism is meant to be
|
Chris@1
|
6001 used as a flexible representation cascade while still using codebooks only in a scalar
|
Chris@1
|
6002 context.
|
Chris@1
|
6003
|
Chris@1
|
6004
|
Chris@1
|
6005
|
Chris@1
|
6006 <!--l. 112--><p class="noindent" >
|
Chris@1
|
6007 <div class="fancyvrb" id="fancyvrb28">
|
Chris@1
|
6008 <a
|
Chris@1
|
6009 id="x1-99002r1"></a><span
|
Chris@1
|
6010 class="cmr-6">1</span><span
|
Chris@1
|
6011 class="cmtt-8"> </span><span
|
Chris@1
|
6012 class="cmtt-8"> </span>
|
Chris@1
|
6013 <br class="fancyvrb" /><a
|
Chris@1
|
6014 id="x1-99004r2"></a><span
|
Chris@1
|
6015 class="cmr-6">2</span><span
|
Chris@1
|
6016 class="cmtt-8"> </span><span
|
Chris@1
|
6017 class="cmtt-8"> </span><span
|
Chris@1
|
6018 class="cmtt-8"> </span><span
|
Chris@1
|
6019 class="cmtt-8"> 1)</span><span
|
Chris@1
|
6020 class="cmtt-8"> [floor1_partitions]</span><span
|
Chris@1
|
6021 class="cmtt-8"> =</span><span
|
Chris@1
|
6022 class="cmtt-8"> read</span><span
|
Chris@1
|
6023 class="cmtt-8"> 5</span><span
|
Chris@1
|
6024 class="cmtt-8"> bits</span><span
|
Chris@1
|
6025 class="cmtt-8"> as</span><span
|
Chris@1
|
6026 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6027 class="cmtt-8"> integer</span>
|
Chris@1
|
6028 <br class="fancyvrb" /><a
|
Chris@1
|
6029 id="x1-99006r3"></a><span
|
Chris@1
|
6030 class="cmr-6">3</span><span
|
Chris@1
|
6031 class="cmtt-8"> </span><span
|
Chris@1
|
6032 class="cmtt-8"> </span><span
|
Chris@1
|
6033 class="cmtt-8"> </span><span
|
Chris@1
|
6034 class="cmtt-8"> 2)</span><span
|
Chris@1
|
6035 class="cmtt-8"> [maximum_class]</span><span
|
Chris@1
|
6036 class="cmtt-8"> =</span><span
|
Chris@1
|
6037 class="cmtt-8"> -1</span>
|
Chris@1
|
6038 <br class="fancyvrb" /><a
|
Chris@1
|
6039 id="x1-99008r4"></a><span
|
Chris@1
|
6040 class="cmr-6">4</span><span
|
Chris@1
|
6041 class="cmtt-8"> </span><span
|
Chris@1
|
6042 class="cmtt-8"> </span><span
|
Chris@1
|
6043 class="cmtt-8"> </span><span
|
Chris@1
|
6044 class="cmtt-8"> 3)</span><span
|
Chris@1
|
6045 class="cmtt-8"> iterate</span><span
|
Chris@1
|
6046 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6047 class="cmtt-8"> over</span><span
|
Chris@1
|
6048 class="cmtt-8"> the</span><span
|
Chris@1
|
6049 class="cmtt-8"> range</span><span
|
Chris@1
|
6050 class="cmtt-8"> 0</span><span
|
Chris@1
|
6051 class="cmtt-8"> ...</span><span
|
Chris@1
|
6052 class="cmtt-8"> [floor1_partitions]-1</span><span
|
Chris@1
|
6053 class="cmtt-8"> </span><span
|
Chris@1
|
6054 class="cmsy-8">{</span>
|
Chris@1
|
6055 <br class="fancyvrb" /><a
|
Chris@1
|
6056 id="x1-99010r5"></a><span
|
Chris@1
|
6057 class="cmr-6">5</span><span
|
Chris@1
|
6058 class="cmtt-8"> </span><span
|
Chris@1
|
6059 class="cmtt-8"> </span>
|
Chris@1
|
6060 <br class="fancyvrb" /><a
|
Chris@1
|
6061 id="x1-99012r6"></a><span
|
Chris@1
|
6062 class="cmr-6">6</span><span
|
Chris@1
|
6063 class="cmtt-8"> </span><span
|
Chris@1
|
6064 class="cmtt-8"> </span><span
|
Chris@1
|
6065 class="cmtt-8"> </span><span
|
Chris@1
|
6066 class="cmtt-8"> </span><span
|
Chris@1
|
6067 class="cmtt-8"> </span><span
|
Chris@1
|
6068 class="cmtt-8"> </span><span
|
Chris@1
|
6069 class="cmtt-8"> </span><span
|
Chris@1
|
6070 class="cmtt-8"> </span><span
|
Chris@1
|
6071 class="cmtt-8"> </span><span
|
Chris@1
|
6072 class="cmtt-8"> 4)</span><span
|
Chris@1
|
6073 class="cmtt-8"> vector</span><span
|
Chris@1
|
6074 class="cmtt-8"> [floor1_partition_class_list]</span><span
|
Chris@1
|
6075 class="cmtt-8"> element</span><span
|
Chris@1
|
6076 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6077 class="cmtt-8"> =</span><span
|
Chris@1
|
6078 class="cmtt-8"> read</span><span
|
Chris@1
|
6079 class="cmtt-8"> 4</span><span
|
Chris@1
|
6080 class="cmtt-8"> bits</span><span
|
Chris@1
|
6081 class="cmtt-8"> as</span><span
|
Chris@1
|
6082 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6083 class="cmtt-8"> integer</span>
|
Chris@1
|
6084 <br class="fancyvrb" /><a
|
Chris@1
|
6085 id="x1-99014r7"></a><span
|
Chris@1
|
6086 class="cmr-6">7</span><span
|
Chris@1
|
6087 class="cmtt-8"> </span><span
|
Chris@1
|
6088 class="cmtt-8"> </span>
|
Chris@1
|
6089 <br class="fancyvrb" /><a
|
Chris@1
|
6090 id="x1-99016r8"></a><span
|
Chris@1
|
6091 class="cmr-6">8</span><span
|
Chris@1
|
6092 class="cmtt-8"> </span><span
|
Chris@1
|
6093 class="cmtt-8"> </span><span
|
Chris@1
|
6094 class="cmtt-8"> </span><span
|
Chris@1
|
6095 class="cmtt-8"> </span><span
|
Chris@1
|
6096 class="cmtt-8"> </span><span
|
Chris@1
|
6097 class="cmtt-8"> </span><span
|
Chris@1
|
6098 class="cmtt-8"> </span><span
|
Chris@1
|
6099 class="cmsy-8">}</span>
|
Chris@1
|
6100 <br class="fancyvrb" /><a
|
Chris@1
|
6101 id="x1-99018r9"></a><span
|
Chris@1
|
6102 class="cmr-6">9</span><span
|
Chris@1
|
6103 class="cmtt-8"> </span><span
|
Chris@1
|
6104 class="cmtt-8"> </span>
|
Chris@1
|
6105 <br class="fancyvrb" /><a
|
Chris@1
|
6106 id="x1-99020r10"></a><span
|
Chris@1
|
6107 class="cmr-6">10</span><span
|
Chris@1
|
6108 class="cmtt-8"> </span><span
|
Chris@1
|
6109 class="cmtt-8"> </span><span
|
Chris@1
|
6110 class="cmtt-8"> </span><span
|
Chris@1
|
6111 class="cmtt-8"> 5)</span><span
|
Chris@1
|
6112 class="cmtt-8"> [maximum_class]</span><span
|
Chris@1
|
6113 class="cmtt-8"> =</span><span
|
Chris@1
|
6114 class="cmtt-8"> largest</span><span
|
Chris@1
|
6115 class="cmtt-8"> integer</span><span
|
Chris@1
|
6116 class="cmtt-8"> scalar</span><span
|
Chris@1
|
6117 class="cmtt-8"> value</span><span
|
Chris@1
|
6118 class="cmtt-8"> in</span><span
|
Chris@1
|
6119 class="cmtt-8"> vector</span><span
|
Chris@1
|
6120 class="cmtt-8"> [floor1_partition_class_list]</span>
|
Chris@1
|
6121 <br class="fancyvrb" /><a
|
Chris@1
|
6122 id="x1-99022r11"></a><span
|
Chris@1
|
6123 class="cmr-6">11</span><span
|
Chris@1
|
6124 class="cmtt-8"> </span><span
|
Chris@1
|
6125 class="cmtt-8"> </span><span
|
Chris@1
|
6126 class="cmtt-8"> </span><span
|
Chris@1
|
6127 class="cmtt-8"> 6)</span><span
|
Chris@1
|
6128 class="cmtt-8"> iterate</span><span
|
Chris@1
|
6129 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6130 class="cmtt-8"> over</span><span
|
Chris@1
|
6131 class="cmtt-8"> the</span><span
|
Chris@1
|
6132 class="cmtt-8"> range</span><span
|
Chris@1
|
6133 class="cmtt-8"> 0</span><span
|
Chris@1
|
6134 class="cmtt-8"> ...</span><span
|
Chris@1
|
6135 class="cmtt-8"> [maximum_class]</span><span
|
Chris@1
|
6136 class="cmtt-8"> </span><span
|
Chris@1
|
6137 class="cmsy-8">{</span>
|
Chris@1
|
6138 <br class="fancyvrb" /><a
|
Chris@1
|
6139 id="x1-99024r12"></a><span
|
Chris@1
|
6140 class="cmr-6">12</span><span
|
Chris@1
|
6141 class="cmtt-8"> </span><span
|
Chris@1
|
6142 class="cmtt-8"> </span>
|
Chris@1
|
6143 <br class="fancyvrb" /><a
|
Chris@1
|
6144 id="x1-99026r13"></a><span
|
Chris@1
|
6145 class="cmr-6">13</span><span
|
Chris@1
|
6146 class="cmtt-8"> </span><span
|
Chris@1
|
6147 class="cmtt-8"> </span><span
|
Chris@1
|
6148 class="cmtt-8"> </span><span
|
Chris@1
|
6149 class="cmtt-8"> </span><span
|
Chris@1
|
6150 class="cmtt-8"> </span><span
|
Chris@1
|
6151 class="cmtt-8"> </span><span
|
Chris@1
|
6152 class="cmtt-8"> </span><span
|
Chris@1
|
6153 class="cmtt-8"> </span><span
|
Chris@1
|
6154 class="cmtt-8"> </span><span
|
Chris@1
|
6155 class="cmtt-8"> 7)</span><span
|
Chris@1
|
6156 class="cmtt-8"> vector</span><span
|
Chris@1
|
6157 class="cmtt-8"> [floor1_class_dimensions]</span><span
|
Chris@1
|
6158 class="cmtt-8"> element</span><span
|
Chris@1
|
6159 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6160 class="cmtt-8"> =</span><span
|
Chris@1
|
6161 class="cmtt-8"> read</span><span
|
Chris@1
|
6162 class="cmtt-8"> 3</span><span
|
Chris@1
|
6163 class="cmtt-8"> bits</span><span
|
Chris@1
|
6164 class="cmtt-8"> as</span><span
|
Chris@1
|
6165 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6166 class="cmtt-8"> integer</span><span
|
Chris@1
|
6167 class="cmtt-8"> and</span><span
|
Chris@1
|
6168 class="cmtt-8"> add</span><span
|
Chris@1
|
6169 class="cmtt-8"> 1</span>
|
Chris@1
|
6170 <br class="fancyvrb" /><a
|
Chris@1
|
6171 id="x1-99028r14"></a><span
|
Chris@1
|
6172 class="cmr-6">14</span><span
|
Chris@1
|
6173 class="cmtt-8"> </span><span
|
Chris@1
|
6174 class="cmtt-8">  8)</span><span
|
Chris@1
|
6175 class="cmtt-8"> vector</span><span
|
Chris@1
|
6176 class="cmtt-8"> [floor1_class_subclasses]</span><span
|
Chris@1
|
6177 class="cmtt-8"> element</span><span
|
Chris@1
|
6178 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6179 class="cmtt-8"> =</span><span
|
Chris@1
|
6180 class="cmtt-8"> read</span><span
|
Chris@1
|
6181 class="cmtt-8"> 2</span><span
|
Chris@1
|
6182 class="cmtt-8"> bits</span><span
|
Chris@1
|
6183 class="cmtt-8"> as</span><span
|
Chris@1
|
6184 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6185 class="cmtt-8"> integer</span>
|
Chris@1
|
6186 <br class="fancyvrb" /><a
|
Chris@1
|
6187 id="x1-99030r15"></a><span
|
Chris@1
|
6188 class="cmr-6">15</span><span
|
Chris@1
|
6189 class="cmtt-8"> </span><span
|
Chris@1
|
6190 class="cmtt-8"> </span><span
|
Chris@1
|
6191 class="cmtt-8"> </span><span
|
Chris@1
|
6192 class="cmtt-8"> </span><span
|
Chris@1
|
6193 class="cmtt-8"> </span><span
|
Chris@1
|
6194 class="cmtt-8"> </span><span
|
Chris@1
|
6195 class="cmtt-8"> </span><span
|
Chris@1
|
6196 class="cmtt-8"> </span><span
|
Chris@1
|
6197 class="cmtt-8"> </span><span
|
Chris@1
|
6198 class="cmtt-8"> 9)</span><span
|
Chris@1
|
6199 class="cmtt-8"> if</span><span
|
Chris@1
|
6200 class="cmtt-8"> (</span><span
|
Chris@1
|
6201 class="cmtt-8"> vector</span><span
|
Chris@1
|
6202 class="cmtt-8"> [floor1_class_subclasses]</span><span
|
Chris@1
|
6203 class="cmtt-8"> element</span><span
|
Chris@1
|
6204 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6205 class="cmtt-8"> is</span><span
|
Chris@1
|
6206 class="cmtt-8"> nonzero</span><span
|
Chris@1
|
6207 class="cmtt-8"> )</span><span
|
Chris@1
|
6208 class="cmtt-8"> </span><span
|
Chris@1
|
6209 class="cmsy-8">{</span>
|
Chris@1
|
6210 <br class="fancyvrb" /><a
|
Chris@1
|
6211 id="x1-99032r16"></a><span
|
Chris@1
|
6212 class="cmr-6">16</span><span
|
Chris@1
|
6213 class="cmtt-8"> </span><span
|
Chris@1
|
6214 class="cmtt-8"> </span>
|
Chris@1
|
6215 <br class="fancyvrb" /><a
|
Chris@1
|
6216 id="x1-99034r17"></a><span
|
Chris@1
|
6217 class="cmr-6">17</span><span
|
Chris@1
|
6218 class="cmtt-8"> </span><span
|
Chris@1
|
6219 class="cmtt-8"> </span><span
|
Chris@1
|
6220 class="cmtt-8"> </span><span
|
Chris@1
|
6221 class="cmtt-8"> </span><span
|
Chris@1
|
6222 class="cmtt-8"> </span><span
|
Chris@1
|
6223 class="cmtt-8"> </span><span
|
Chris@1
|
6224 class="cmtt-8"> </span><span
|
Chris@1
|
6225 class="cmtt-8"> </span><span
|
Chris@1
|
6226 class="cmtt-8"> </span><span
|
Chris@1
|
6227 class="cmtt-8"> </span><span
|
Chris@1
|
6228 class="cmtt-8"> </span><span
|
Chris@1
|
6229 class="cmtt-8"> </span><span
|
Chris@1
|
6230 class="cmtt-8"> </span><span
|
Chris@1
|
6231 class="cmtt-8"> </span><span
|
Chris@1
|
6232 class="cmtt-8"> 10)</span><span
|
Chris@1
|
6233 class="cmtt-8"> vector</span><span
|
Chris@1
|
6234 class="cmtt-8"> [floor1_class_masterbooks]</span><span
|
Chris@1
|
6235 class="cmtt-8"> element</span><span
|
Chris@1
|
6236 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6237 class="cmtt-8"> =</span><span
|
Chris@1
|
6238 class="cmtt-8"> read</span><span
|
Chris@1
|
6239 class="cmtt-8"> 8</span><span
|
Chris@1
|
6240 class="cmtt-8"> bits</span><span
|
Chris@1
|
6241 class="cmtt-8"> as</span><span
|
Chris@1
|
6242 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6243 class="cmtt-8"> integer</span>
|
Chris@1
|
6244 <br class="fancyvrb" /><a
|
Chris@1
|
6245 id="x1-99036r18"></a><span
|
Chris@1
|
6246 class="cmr-6">18</span><span
|
Chris@1
|
6247 class="cmtt-8"> </span><span
|
Chris@1
|
6248 class="cmtt-8"> </span>
|
Chris@1
|
6249 <br class="fancyvrb" /><a
|
Chris@1
|
6250 id="x1-99038r19"></a><span
|
Chris@1
|
6251 class="cmr-6">19</span><span
|
Chris@1
|
6252 class="cmtt-8"> </span><span
|
Chris@1
|
6253 class="cmtt-8"> </span><span
|
Chris@1
|
6254 class="cmtt-8"> </span><span
|
Chris@1
|
6255 class="cmtt-8"> </span><span
|
Chris@1
|
6256 class="cmtt-8"> </span><span
|
Chris@1
|
6257 class="cmtt-8"> </span><span
|
Chris@1
|
6258 class="cmtt-8"> </span><span
|
Chris@1
|
6259 class="cmtt-8"> </span><span
|
Chris@1
|
6260 class="cmtt-8"> </span><span
|
Chris@1
|
6261 class="cmtt-8"> </span><span
|
Chris@1
|
6262 class="cmtt-8"> </span><span
|
Chris@1
|
6263 class="cmtt-8"> </span><span
|
Chris@1
|
6264 class="cmtt-8"> </span><span
|
Chris@1
|
6265 class="cmsy-8">}</span>
|
Chris@1
|
6266 <br class="fancyvrb" /><a
|
Chris@1
|
6267 id="x1-99040r20"></a><span
|
Chris@1
|
6268 class="cmr-6">20</span><span
|
Chris@1
|
6269 class="cmtt-8"> </span><span
|
Chris@1
|
6270 class="cmtt-8"> </span>
|
Chris@1
|
6271 <br class="fancyvrb" /><a
|
Chris@1
|
6272 id="x1-99042r21"></a><span
|
Chris@1
|
6273 class="cmr-6">21</span><span
|
Chris@1
|
6274 class="cmtt-8"> </span><span
|
Chris@1
|
6275 class="cmtt-8"> </span><span
|
Chris@1
|
6276 class="cmtt-8"> </span><span
|
Chris@1
|
6277 class="cmtt-8"> </span><span
|
Chris@1
|
6278 class="cmtt-8"> </span><span
|
Chris@1
|
6279 class="cmtt-8"> </span><span
|
Chris@1
|
6280 class="cmtt-8"> </span><span
|
Chris@1
|
6281 class="cmtt-8"> </span><span
|
Chris@1
|
6282 class="cmtt-8"> 11)</span><span
|
Chris@1
|
6283 class="cmtt-8"> iterate</span><span
|
Chris@1
|
6284 class="cmtt-8"> [j]</span><span
|
Chris@1
|
6285 class="cmtt-8"> over</span><span
|
Chris@1
|
6286 class="cmtt-8"> the</span><span
|
Chris@1
|
6287 class="cmtt-8"> range</span><span
|
Chris@1
|
6288 class="cmtt-8"> 0</span><span
|
Chris@1
|
6289 class="cmtt-8"> ...</span><span
|
Chris@1
|
6290 class="cmtt-8"> (2</span><span
|
Chris@1
|
6291 class="cmtt-8"> exponent</span><span
|
Chris@1
|
6292 class="cmtt-8"> [floor1_class_subclasses]</span><span
|
Chris@1
|
6293 class="cmtt-8"> element</span><span
|
Chris@1
|
6294 class="cmtt-8"> [i])</span><span
|
Chris@1
|
6295 class="cmtt-8"> -</span><span
|
Chris@1
|
6296 class="cmtt-8"> 1</span><span
|
Chris@1
|
6297 class="cmtt-8"> </span><span
|
Chris@1
|
6298 class="cmsy-8">{</span>
|
Chris@1
|
6299 <br class="fancyvrb" /><a
|
Chris@1
|
6300 id="x1-99044r22"></a><span
|
Chris@1
|
6301 class="cmr-6">22</span><span
|
Chris@1
|
6302 class="cmtt-8"> </span><span
|
Chris@1
|
6303 class="cmtt-8"> </span>
|
Chris@1
|
6304 <br class="fancyvrb" /><a
|
Chris@1
|
6305 id="x1-99046r23"></a><span
|
Chris@1
|
6306 class="cmr-6">23</span><span
|
Chris@1
|
6307 class="cmtt-8"> </span><span
|
Chris@1
|
6308 class="cmtt-8"> </span><span
|
Chris@1
|
6309 class="cmtt-8"> </span><span
|
Chris@1
|
6310 class="cmtt-8"> </span><span
|
Chris@1
|
6311 class="cmtt-8"> </span><span
|
Chris@1
|
6312 class="cmtt-8"> </span><span
|
Chris@1
|
6313 class="cmtt-8"> </span><span
|
Chris@1
|
6314 class="cmtt-8"> </span><span
|
Chris@1
|
6315 class="cmtt-8"> </span><span
|
Chris@1
|
6316 class="cmtt-8"> </span><span
|
Chris@1
|
6317 class="cmtt-8"> </span><span
|
Chris@1
|
6318 class="cmtt-8"> </span><span
|
Chris@1
|
6319 class="cmtt-8"> </span><span
|
Chris@1
|
6320 class="cmtt-8"> </span><span
|
Chris@1
|
6321 class="cmtt-8"> 12)</span><span
|
Chris@1
|
6322 class="cmtt-8"> array</span><span
|
Chris@1
|
6323 class="cmtt-8"> [floor1_subclass_books]</span><span
|
Chris@1
|
6324 class="cmtt-8"> element</span><span
|
Chris@1
|
6325 class="cmtt-8"> [i],[j]</span><span
|
Chris@1
|
6326 class="cmtt-8"> =</span>
|
Chris@1
|
6327 <br class="fancyvrb" /><a
|
Chris@1
|
6328 id="x1-99048r24"></a><span
|
Chris@1
|
6329 class="cmr-6">24</span><span
|
Chris@1
|
6330 class="cmtt-8"> </span><span
|
Chris@1
|
6331 class="cmtt-8"> </span><span
|
Chris@1
|
6332 class="cmtt-8"> </span><span
|
Chris@1
|
6333 class="cmtt-8"> </span><span
|
Chris@1
|
6334 class="cmtt-8"> </span><span
|
Chris@1
|
6335 class="cmtt-8"> </span><span
|
Chris@1
|
6336 class="cmtt-8"> </span><span
|
Chris@1
|
6337 class="cmtt-8"> </span><span
|
Chris@1
|
6338 class="cmtt-8"> </span><span
|
Chris@1
|
6339 class="cmtt-8"> </span><span
|
Chris@1
|
6340 class="cmtt-8"> </span><span
|
Chris@1
|
6341 class="cmtt-8"> </span><span
|
Chris@1
|
6342 class="cmtt-8"> </span><span
|
Chris@1
|
6343 class="cmtt-8"> </span><span
|
Chris@1
|
6344 class="cmtt-8"> </span><span
|
Chris@1
|
6345 class="cmtt-8"> </span><span
|
Chris@1
|
6346 class="cmtt-8"> </span><span
|
Chris@1
|
6347 class="cmtt-8"> </span><span
|
Chris@1
|
6348 class="cmtt-8"> read</span><span
|
Chris@1
|
6349 class="cmtt-8"> 8</span><span
|
Chris@1
|
6350 class="cmtt-8"> bits</span><span
|
Chris@1
|
6351 class="cmtt-8"> as</span><span
|
Chris@1
|
6352 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6353 class="cmtt-8"> integer</span><span
|
Chris@1
|
6354 class="cmtt-8"> and</span><span
|
Chris@1
|
6355 class="cmtt-8"> subtract</span><span
|
Chris@1
|
6356 class="cmtt-8"> one</span>
|
Chris@1
|
6357 <br class="fancyvrb" /><a
|
Chris@1
|
6358 id="x1-99050r25"></a><span
|
Chris@1
|
6359 class="cmr-6">25</span><span
|
Chris@1
|
6360 class="cmtt-8"> </span><span
|
Chris@1
|
6361 class="cmtt-8"> </span><span
|
Chris@1
|
6362 class="cmtt-8"> </span><span
|
Chris@1
|
6363 class="cmtt-8"> </span><span
|
Chris@1
|
6364 class="cmtt-8"> </span><span
|
Chris@1
|
6365 class="cmtt-8"> </span><span
|
Chris@1
|
6366 class="cmtt-8"> </span><span
|
Chris@1
|
6367 class="cmtt-8"> </span><span
|
Chris@1
|
6368 class="cmtt-8"> </span><span
|
Chris@1
|
6369 class="cmtt-8"> </span><span
|
Chris@1
|
6370 class="cmtt-8"> </span><span
|
Chris@1
|
6371 class="cmtt-8"> </span><span
|
Chris@1
|
6372 class="cmtt-8"> </span><span
|
Chris@1
|
6373 class="cmsy-8">}</span>
|
Chris@1
|
6374 <br class="fancyvrb" /><a
|
Chris@1
|
6375 id="x1-99052r26"></a><span
|
Chris@1
|
6376 class="cmr-6">26</span><span
|
Chris@1
|
6377 class="cmtt-8"> </span><span
|
Chris@1
|
6378 class="cmtt-8"> </span><span
|
Chris@1
|
6379 class="cmtt-8"> </span><span
|
Chris@1
|
6380 class="cmtt-8"> </span><span
|
Chris@1
|
6381 class="cmtt-8"> </span><span
|
Chris@1
|
6382 class="cmtt-8"> </span><span
|
Chris@1
|
6383 class="cmtt-8"> </span><span
|
Chris@1
|
6384 class="cmtt-8"> </span><span
|
Chris@1
|
6385 class="cmsy-8">}</span>
|
Chris@1
|
6386 <br class="fancyvrb" /><a
|
Chris@1
|
6387 id="x1-99054r27"></a><span
|
Chris@1
|
6388 class="cmr-6">27</span><span
|
Chris@1
|
6389 class="cmtt-8"> </span><span
|
Chris@1
|
6390 class="cmtt-8"> </span>
|
Chris@1
|
6391 <br class="fancyvrb" /><a
|
Chris@1
|
6392 id="x1-99056r28"></a><span
|
Chris@1
|
6393 class="cmr-6">28</span><span
|
Chris@1
|
6394 class="cmtt-8"> </span><span
|
Chris@1
|
6395 class="cmtt-8"> </span><span
|
Chris@1
|
6396 class="cmtt-8"> 13)</span><span
|
Chris@1
|
6397 class="cmtt-8"> [floor1_multiplier]</span><span
|
Chris@1
|
6398 class="cmtt-8"> =</span><span
|
Chris@1
|
6399 class="cmtt-8"> read</span><span
|
Chris@1
|
6400 class="cmtt-8"> 2</span><span
|
Chris@1
|
6401 class="cmtt-8"> bits</span><span
|
Chris@1
|
6402 class="cmtt-8"> as</span><span
|
Chris@1
|
6403 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6404 class="cmtt-8"> integer</span><span
|
Chris@1
|
6405 class="cmtt-8"> and</span><span
|
Chris@1
|
6406 class="cmtt-8"> add</span><span
|
Chris@1
|
6407 class="cmtt-8"> one</span>
|
Chris@1
|
6408 <br class="fancyvrb" /><a
|
Chris@1
|
6409 id="x1-99058r29"></a><span
|
Chris@1
|
6410 class="cmr-6">29</span><span
|
Chris@1
|
6411 class="cmtt-8"> </span><span
|
Chris@1
|
6412 class="cmtt-8"> </span><span
|
Chris@1
|
6413 class="cmtt-8"> 14)</span><span
|
Chris@1
|
6414 class="cmtt-8"> [rangebits]</span><span
|
Chris@1
|
6415 class="cmtt-8"> =</span><span
|
Chris@1
|
6416 class="cmtt-8"> read</span><span
|
Chris@1
|
6417 class="cmtt-8"> 4</span><span
|
Chris@1
|
6418 class="cmtt-8"> bits</span><span
|
Chris@1
|
6419 class="cmtt-8"> as</span><span
|
Chris@1
|
6420 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6421 class="cmtt-8"> integer</span>
|
Chris@1
|
6422 <br class="fancyvrb" /><a
|
Chris@1
|
6423 id="x1-99060r30"></a><span
|
Chris@1
|
6424 class="cmr-6">30</span><span
|
Chris@1
|
6425 class="cmtt-8"> </span><span
|
Chris@1
|
6426 class="cmtt-8"> </span><span
|
Chris@1
|
6427 class="cmtt-8"> 15)</span><span
|
Chris@1
|
6428 class="cmtt-8"> vector</span><span
|
Chris@1
|
6429 class="cmtt-8"> [floor1_X_list]</span><span
|
Chris@1
|
6430 class="cmtt-8"> element</span><span
|
Chris@1
|
6431 class="cmtt-8"> [0]</span><span
|
Chris@1
|
6432 class="cmtt-8"> =</span><span
|
Chris@1
|
6433 class="cmtt-8"> 0</span>
|
Chris@1
|
6434 <br class="fancyvrb" /><a
|
Chris@1
|
6435 id="x1-99062r31"></a><span
|
Chris@1
|
6436 class="cmr-6">31</span><span
|
Chris@1
|
6437 class="cmtt-8"> </span><span
|
Chris@1
|
6438 class="cmtt-8"> </span><span
|
Chris@1
|
6439 class="cmtt-8"> 16)</span><span
|
Chris@1
|
6440 class="cmtt-8"> vector</span><span
|
Chris@1
|
6441 class="cmtt-8"> [floor1_X_list]</span><span
|
Chris@1
|
6442 class="cmtt-8"> element</span><span
|
Chris@1
|
6443 class="cmtt-8"> [1]</span><span
|
Chris@1
|
6444 class="cmtt-8"> =</span><span
|
Chris@1
|
6445 class="cmtt-8"> 2</span><span
|
Chris@1
|
6446 class="cmtt-8"> exponent</span><span
|
Chris@1
|
6447 class="cmtt-8"> [rangebits];</span>
|
Chris@1
|
6448 <br class="fancyvrb" /><a
|
Chris@1
|
6449 id="x1-99064r32"></a><span
|
Chris@1
|
6450 class="cmr-6">32</span><span
|
Chris@1
|
6451 class="cmtt-8"> </span><span
|
Chris@1
|
6452 class="cmtt-8"> </span><span
|
Chris@1
|
6453 class="cmtt-8"> 17)</span><span
|
Chris@1
|
6454 class="cmtt-8"> [floor1_values]</span><span
|
Chris@1
|
6455 class="cmtt-8"> =</span><span
|
Chris@1
|
6456 class="cmtt-8"> 2</span>
|
Chris@1
|
6457 <br class="fancyvrb" /><a
|
Chris@1
|
6458 id="x1-99066r33"></a><span
|
Chris@1
|
6459 class="cmr-6">33</span><span
|
Chris@1
|
6460 class="cmtt-8"> </span><span
|
Chris@1
|
6461 class="cmtt-8"> </span><span
|
Chris@1
|
6462 class="cmtt-8"> 18)</span><span
|
Chris@1
|
6463 class="cmtt-8"> iterate</span><span
|
Chris@1
|
6464 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6465 class="cmtt-8"> over</span><span
|
Chris@1
|
6466 class="cmtt-8"> the</span><span
|
Chris@1
|
6467 class="cmtt-8"> range</span><span
|
Chris@1
|
6468 class="cmtt-8"> 0</span><span
|
Chris@1
|
6469 class="cmtt-8"> ...</span><span
|
Chris@1
|
6470 class="cmtt-8"> [floor1_partitions]-1</span><span
|
Chris@1
|
6471 class="cmtt-8"> </span><span
|
Chris@1
|
6472 class="cmsy-8">{</span>
|
Chris@1
|
6473 <br class="fancyvrb" /><a
|
Chris@1
|
6474 id="x1-99068r34"></a><span
|
Chris@1
|
6475 class="cmr-6">34</span><span
|
Chris@1
|
6476 class="cmtt-8"> </span><span
|
Chris@1
|
6477 class="cmtt-8"> </span>
|
Chris@1
|
6478 <br class="fancyvrb" /><a
|
Chris@1
|
6479 id="x1-99070r35"></a><span
|
Chris@1
|
6480 class="cmr-6">35</span><span
|
Chris@1
|
6481 class="cmtt-8"> </span><span
|
Chris@1
|
6482 class="cmtt-8"> </span><span
|
Chris@1
|
6483 class="cmtt-8"> </span><span
|
Chris@1
|
6484 class="cmtt-8"> </span><span
|
Chris@1
|
6485 class="cmtt-8"> </span><span
|
Chris@1
|
6486 class="cmtt-8"> </span><span
|
Chris@1
|
6487 class="cmtt-8"> </span><span
|
Chris@1
|
6488 class="cmtt-8"> </span><span
|
Chris@1
|
6489 class="cmtt-8"> 19)</span><span
|
Chris@1
|
6490 class="cmtt-8"> [current_class_number]</span><span
|
Chris@1
|
6491 class="cmtt-8"> =</span><span
|
Chris@1
|
6492 class="cmtt-8"> vector</span><span
|
Chris@1
|
6493 class="cmtt-8"> [floor1_partition_class_list]</span><span
|
Chris@1
|
6494 class="cmtt-8"> element</span><span
|
Chris@1
|
6495 class="cmtt-8"> [i]</span>
|
Chris@1
|
6496 <br class="fancyvrb" /><a
|
Chris@1
|
6497 id="x1-99072r36"></a><span
|
Chris@1
|
6498 class="cmr-6">36</span><span
|
Chris@1
|
6499 class="cmtt-8"> </span><span
|
Chris@1
|
6500 class="cmtt-8"> </span><span
|
Chris@1
|
6501 class="cmtt-8"> </span><span
|
Chris@1
|
6502 class="cmtt-8"> </span><span
|
Chris@1
|
6503 class="cmtt-8"> </span><span
|
Chris@1
|
6504 class="cmtt-8"> </span><span
|
Chris@1
|
6505 class="cmtt-8"> </span><span
|
Chris@1
|
6506 class="cmtt-8"> </span><span
|
Chris@1
|
6507 class="cmtt-8"> 20)</span><span
|
Chris@1
|
6508 class="cmtt-8"> iterate</span><span
|
Chris@1
|
6509 class="cmtt-8"> [j]</span><span
|
Chris@1
|
6510 class="cmtt-8"> over</span><span
|
Chris@1
|
6511 class="cmtt-8"> the</span><span
|
Chris@1
|
6512 class="cmtt-8"> range</span><span
|
Chris@1
|
6513 class="cmtt-8"> 0</span><span
|
Chris@1
|
6514 class="cmtt-8"> ...</span><span
|
Chris@1
|
6515 class="cmtt-8"> ([floor1_class_dimensions]</span><span
|
Chris@1
|
6516 class="cmtt-8"> element</span><span
|
Chris@1
|
6517 class="cmtt-8"> [current_class_number])-1</span><span
|
Chris@1
|
6518 class="cmtt-8"> </span><span
|
Chris@1
|
6519 class="cmsy-8">{</span>
|
Chris@1
|
6520 <br class="fancyvrb" /><a
|
Chris@1
|
6521 id="x1-99074r37"></a><span
|
Chris@1
|
6522 class="cmr-6">37</span><span
|
Chris@1
|
6523 class="cmtt-8"> </span><span
|
Chris@1
|
6524 class="cmtt-8"> </span><span
|
Chris@1
|
6525 class="cmtt-8"> </span><span
|
Chris@1
|
6526 class="cmtt-8"> </span><span
|
Chris@1
|
6527 class="cmtt-8"> </span><span
|
Chris@1
|
6528 class="cmtt-8"> </span><span
|
Chris@1
|
6529 class="cmtt-8"> </span><span
|
Chris@1
|
6530 class="cmtt-8"> </span><span
|
Chris@1
|
6531 class="cmtt-8"> </span><span
|
Chris@1
|
6532 class="cmtt-8"> </span><span
|
Chris@1
|
6533 class="cmtt-8"> </span><span
|
Chris@1
|
6534 class="cmtt-8"> </span><span
|
Chris@1
|
6535 class="cmtt-8"> </span><span
|
Chris@1
|
6536 class="cmtt-8"> </span><span
|
Chris@1
|
6537 class="cmtt-8"> 21)</span><span
|
Chris@1
|
6538 class="cmtt-8"> vector</span><span
|
Chris@1
|
6539 class="cmtt-8"> [floor1_X_list]</span><span
|
Chris@1
|
6540 class="cmtt-8"> element</span><span
|
Chris@1
|
6541 class="cmtt-8"> ([floor1_values])</span><span
|
Chris@1
|
6542 class="cmtt-8"> =</span>
|
Chris@1
|
6543 <br class="fancyvrb" /><a
|
Chris@1
|
6544 id="x1-99076r38"></a><span
|
Chris@1
|
6545 class="cmr-6">38</span><span
|
Chris@1
|
6546 class="cmtt-8"> </span><span
|
Chris@1
|
6547 class="cmtt-8"> </span><span
|
Chris@1
|
6548 class="cmtt-8"> </span><span
|
Chris@1
|
6549 class="cmtt-8"> </span><span
|
Chris@1
|
6550 class="cmtt-8"> </span><span
|
Chris@1
|
6551 class="cmtt-8"> </span><span
|
Chris@1
|
6552 class="cmtt-8"> </span><span
|
Chris@1
|
6553 class="cmtt-8"> </span><span
|
Chris@1
|
6554 class="cmtt-8"> </span><span
|
Chris@1
|
6555 class="cmtt-8"> </span><span
|
Chris@1
|
6556 class="cmtt-8"> </span><span
|
Chris@1
|
6557 class="cmtt-8"> </span><span
|
Chris@1
|
6558 class="cmtt-8"> </span><span
|
Chris@1
|
6559 class="cmtt-8"> </span><span
|
Chris@1
|
6560 class="cmtt-8"> </span><span
|
Chris@1
|
6561 class="cmtt-8"> </span><span
|
Chris@1
|
6562 class="cmtt-8"> </span><span
|
Chris@1
|
6563 class="cmtt-8"> </span><span
|
Chris@1
|
6564 class="cmtt-8"> read</span><span
|
Chris@1
|
6565 class="cmtt-8"> [rangebits]</span><span
|
Chris@1
|
6566 class="cmtt-8"> bits</span><span
|
Chris@1
|
6567 class="cmtt-8"> as</span><span
|
Chris@1
|
6568 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6569 class="cmtt-8"> integer</span>
|
Chris@1
|
6570 <br class="fancyvrb" /><a
|
Chris@1
|
6571 id="x1-99078r39"></a><span
|
Chris@1
|
6572 class="cmr-6">39</span><span
|
Chris@1
|
6573 class="cmtt-8"> </span><span
|
Chris@1
|
6574 class="cmtt-8"> </span><span
|
Chris@1
|
6575 class="cmtt-8"> </span><span
|
Chris@1
|
6576 class="cmtt-8"> </span><span
|
Chris@1
|
6577 class="cmtt-8"> </span><span
|
Chris@1
|
6578 class="cmtt-8"> </span><span
|
Chris@1
|
6579 class="cmtt-8"> </span><span
|
Chris@1
|
6580 class="cmtt-8"> </span><span
|
Chris@1
|
6581 class="cmtt-8"> </span><span
|
Chris@1
|
6582 class="cmtt-8"> </span><span
|
Chris@1
|
6583 class="cmtt-8"> </span><span
|
Chris@1
|
6584 class="cmtt-8"> </span><span
|
Chris@1
|
6585 class="cmtt-8"> </span><span
|
Chris@1
|
6586 class="cmtt-8"> </span><span
|
Chris@1
|
6587 class="cmtt-8"> 22)</span><span
|
Chris@1
|
6588 class="cmtt-8"> increment</span><span
|
Chris@1
|
6589 class="cmtt-8"> [floor1_values]</span><span
|
Chris@1
|
6590 class="cmtt-8"> by</span><span
|
Chris@1
|
6591 class="cmtt-8"> one</span>
|
Chris@1
|
6592 <br class="fancyvrb" /><a
|
Chris@1
|
6593 id="x1-99080r40"></a><span
|
Chris@1
|
6594 class="cmr-6">40</span><span
|
Chris@1
|
6595 class="cmtt-8"> </span><span
|
Chris@1
|
6596 class="cmtt-8"> </span><span
|
Chris@1
|
6597 class="cmtt-8"> </span><span
|
Chris@1
|
6598 class="cmtt-8"> </span><span
|
Chris@1
|
6599 class="cmtt-8"> </span><span
|
Chris@1
|
6600 class="cmtt-8"> </span><span
|
Chris@1
|
6601 class="cmtt-8"> </span><span
|
Chris@1
|
6602 class="cmtt-8"> </span><span
|
Chris@1
|
6603 class="cmtt-8"> </span><span
|
Chris@1
|
6604 class="cmtt-8"> </span><span
|
Chris@1
|
6605 class="cmtt-8"> </span><span
|
Chris@1
|
6606 class="cmtt-8"> </span><span
|
Chris@1
|
6607 class="cmtt-8"> </span><span
|
Chris@1
|
6608 class="cmsy-8">}</span>
|
Chris@1
|
6609 <br class="fancyvrb" /><a
|
Chris@1
|
6610 id="x1-99082r41"></a><span
|
Chris@1
|
6611 class="cmr-6">41</span><span
|
Chris@1
|
6612 class="cmtt-8"> </span><span
|
Chris@1
|
6613 class="cmtt-8"> </span><span
|
Chris@1
|
6614 class="cmtt-8"> </span><span
|
Chris@1
|
6615 class="cmtt-8"> </span><span
|
Chris@1
|
6616 class="cmtt-8"> </span><span
|
Chris@1
|
6617 class="cmtt-8"> </span><span
|
Chris@1
|
6618 class="cmtt-8"> </span><span
|
Chris@1
|
6619 class="cmsy-8">}</span>
|
Chris@1
|
6620 <br class="fancyvrb" /><a
|
Chris@1
|
6621 id="x1-99084r42"></a><span
|
Chris@1
|
6622 class="cmr-6">42</span><span
|
Chris@1
|
6623 class="cmtt-8"> </span><span
|
Chris@1
|
6624 class="cmtt-8"> </span>
|
Chris@1
|
6625 <br class="fancyvrb" /><a
|
Chris@1
|
6626 id="x1-99086r43"></a><span
|
Chris@1
|
6627 class="cmr-6">43</span><span
|
Chris@1
|
6628 class="cmtt-8"> </span><span
|
Chris@1
|
6629 class="cmtt-8"> </span><span
|
Chris@1
|
6630 class="cmtt-8"> 23)</span><span
|
Chris@1
|
6631 class="cmtt-8"> done</span>
|
Chris@1
|
6632 </div>
|
Chris@1
|
6633 <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
|
Chris@1
|
6634 setup renders a stream undecodable. In addition, a <span
|
Chris@1
|
6635 class="cmtt-12">[floor1_class_masterbooks] </span>or
|
Chris@1
|
6636 <span
|
Chris@1
|
6637 class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
|
Chris@1
|
6638 configured in this stream is an error condition that renders the stream undecodable. Vector
|
Chris@1
|
6639 [floor1_x_list] is limited to a maximum length of 65 elements; a setup indicating more than 65
|
Chris@1
|
6640 total elements (including elements 0 and 1 set prior to the read loop) renders the stream
|
Chris@1
|
6641 undecodable. All vector [floor1_x_list] element values must be unique within the vector; a
|
Chris@1
|
6642 non-unique value renders the stream undecodable.
|
Chris@1
|
6643
|
Chris@1
|
6644
|
Chris@1
|
6645
|
Chris@1
|
6646 <!--l. 170--><p class="noindent" >
|
Chris@1
|
6647 <h5 class="subsubsectionHead"><span class="titlemark">7.2.3. </span> <a
|
Chris@1
|
6648 id="x1-1000007.2.3"></a>packet decode</h5>
|
Chris@1
|
6649 <!--l. 172--><p class="noindent" >Packet decode begins by checking the <span
|
Chris@1
|
6650 class="cmtt-12">[nonzero] </span>flag:
|
Chris@1
|
6651 <!--l. 174--><p class="noindent" >
|
Chris@1
|
6652 <div class="fancyvrb" id="fancyvrb29">
|
Chris@1
|
6653 <a
|
Chris@1
|
6654 id="x1-100002r1"></a><span
|
Chris@1
|
6655 class="cmr-6">1</span><span
|
Chris@1
|
6656 class="cmtt-8"> </span><span
|
Chris@1
|
6657 class="cmtt-8"> </span><span
|
Chris@1
|
6658 class="cmtt-8"> </span><span
|
Chris@1
|
6659 class="cmtt-8"> 1)</span><span
|
Chris@1
|
6660 class="cmtt-8"> [nonzero]</span><span
|
Chris@1
|
6661 class="cmtt-8"> =</span><span
|
Chris@1
|
6662 class="cmtt-8"> read</span><span
|
Chris@1
|
6663 class="cmtt-8"> 1</span><span
|
Chris@1
|
6664 class="cmtt-8"> bit</span><span
|
Chris@1
|
6665 class="cmtt-8"> as</span><span
|
Chris@1
|
6666 class="cmtt-8"> boolean</span>
|
Chris@1
|
6667 </div>
|
Chris@1
|
6668 <!--l. 178--><p class="noindent" >If <span
|
Chris@1
|
6669 class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
|
Chris@1
|
6670 Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
|
Chris@1
|
6671 this frame. (A return status of ’unused’ is different from decoding a floor that has all
|
Chris@1
|
6672 points set to minimum representation amplitude, which happens to be approximately
|
Chris@1
|
6673 -140dB).
|
Chris@1
|
6674 <!--l. 186--><p class="noindent" >Assuming <span
|
Chris@1
|
6675 class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
|
Chris@1
|
6676 <!--l. 188--><p class="noindent" >
|
Chris@1
|
6677 <div class="fancyvrb" id="fancyvrb30">
|
Chris@1
|
6678 <a
|
Chris@1
|
6679 id="x1-100004r1"></a><span
|
Chris@1
|
6680 class="cmr-6">1</span><span
|
Chris@1
|
6681 class="cmtt-8"> </span><span
|
Chris@1
|
6682 class="cmtt-8"> </span><span
|
Chris@1
|
6683 class="cmtt-8"> </span><span
|
Chris@1
|
6684 class="cmtt-8"> 1)</span><span
|
Chris@1
|
6685 class="cmtt-8"> [range]</span><span
|
Chris@1
|
6686 class="cmtt-8"> =</span><span
|
Chris@1
|
6687 class="cmtt-8"> vector</span><span
|
Chris@1
|
6688 class="cmtt-8"> </span><span
|
Chris@1
|
6689 class="cmsy-8">{</span><span
|
Chris@1
|
6690 class="cmtt-8"> 256,</span><span
|
Chris@1
|
6691 class="cmtt-8"> 128,</span><span
|
Chris@1
|
6692 class="cmtt-8"> 86,</span><span
|
Chris@1
|
6693 class="cmtt-8"> 64</span><span
|
Chris@1
|
6694 class="cmtt-8"> </span><span
|
Chris@1
|
6695 class="cmsy-8">}</span><span
|
Chris@1
|
6696 class="cmtt-8"> element</span><span
|
Chris@1
|
6697 class="cmtt-8"> ([floor1_multiplier]-1)</span>
|
Chris@1
|
6698 <br class="fancyvrb" /><a
|
Chris@1
|
6699 id="x1-100006r2"></a><span
|
Chris@1
|
6700 class="cmr-6">2</span><span
|
Chris@1
|
6701 class="cmtt-8"> </span><span
|
Chris@1
|
6702 class="cmtt-8"> </span><span
|
Chris@1
|
6703 class="cmtt-8"> </span><span
|
Chris@1
|
6704 class="cmtt-8"> 2)</span><span
|
Chris@1
|
6705 class="cmtt-8"> vector</span><span
|
Chris@1
|
6706 class="cmtt-8"> [floor1_Y]</span><span
|
Chris@1
|
6707 class="cmtt-8"> element</span><span
|
Chris@1
|
6708 class="cmtt-8"> [0]</span><span
|
Chris@1
|
6709 class="cmtt-8"> =</span><span
|
Chris@1
|
6710 class="cmtt-8"> read</span><span
|
Chris@1
|
6711 class="cmtt-8"> </span><a
|
Chris@1
|
6712 href="#x1-1170009.2.1"><span
|
Chris@1
|
6713 class="cmtt-8">ilog</span></a><span
|
Chris@1
|
6714 class="cmtt-8">([range]-1)</span><span
|
Chris@1
|
6715 class="cmtt-8"> bits</span><span
|
Chris@1
|
6716 class="cmtt-8"> as</span><span
|
Chris@1
|
6717 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6718 class="cmtt-8"> integer</span>
|
Chris@1
|
6719 <br class="fancyvrb" /><a
|
Chris@1
|
6720 id="x1-100008r3"></a><span
|
Chris@1
|
6721 class="cmr-6">3</span><span
|
Chris@1
|
6722 class="cmtt-8"> </span><span
|
Chris@1
|
6723 class="cmtt-8"> </span><span
|
Chris@1
|
6724 class="cmtt-8"> </span><span
|
Chris@1
|
6725 class="cmtt-8"> 3)</span><span
|
Chris@1
|
6726 class="cmtt-8"> vector</span><span
|
Chris@1
|
6727 class="cmtt-8"> [floor1_Y]</span><span
|
Chris@1
|
6728 class="cmtt-8"> element</span><span
|
Chris@1
|
6729 class="cmtt-8"> [1]</span><span
|
Chris@1
|
6730 class="cmtt-8"> =</span><span
|
Chris@1
|
6731 class="cmtt-8"> read</span><span
|
Chris@1
|
6732 class="cmtt-8"> </span><a
|
Chris@1
|
6733 href="#x1-1170009.2.1"><span
|
Chris@1
|
6734 class="cmtt-8">ilog</span></a><span
|
Chris@1
|
6735 class="cmtt-8">([range]-1)</span><span
|
Chris@1
|
6736 class="cmtt-8"> bits</span><span
|
Chris@1
|
6737 class="cmtt-8"> as</span><span
|
Chris@1
|
6738 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
6739 class="cmtt-8"> integer</span>
|
Chris@1
|
6740 <br class="fancyvrb" /><a
|
Chris@1
|
6741 id="x1-100010r4"></a><span
|
Chris@1
|
6742 class="cmr-6">4</span><span
|
Chris@1
|
6743 class="cmtt-8"> </span><span
|
Chris@1
|
6744 class="cmtt-8"> </span><span
|
Chris@1
|
6745 class="cmtt-8"> </span><span
|
Chris@1
|
6746 class="cmtt-8"> 4)</span><span
|
Chris@1
|
6747 class="cmtt-8"> [offset]</span><span
|
Chris@1
|
6748 class="cmtt-8"> =</span><span
|
Chris@1
|
6749 class="cmtt-8"> 2;</span>
|
Chris@1
|
6750 <br class="fancyvrb" /><a
|
Chris@1
|
6751 id="x1-100012r5"></a><span
|
Chris@1
|
6752 class="cmr-6">5</span><span
|
Chris@1
|
6753 class="cmtt-8"> </span><span
|
Chris@1
|
6754 class="cmtt-8"> </span><span
|
Chris@1
|
6755 class="cmtt-8"> </span><span
|
Chris@1
|
6756 class="cmtt-8"> 5)</span><span
|
Chris@1
|
6757 class="cmtt-8"> iterate</span><span
|
Chris@1
|
6758 class="cmtt-8"> [i]</span><span
|
Chris@1
|
6759 class="cmtt-8"> over</span><span
|
Chris@1
|
6760 class="cmtt-8"> the</span><span
|
Chris@1
|
6761 class="cmtt-8"> range</span><span
|
Chris@1
|
6762 class="cmtt-8"> 0</span><span
|
Chris@1
|
6763 class="cmtt-8"> ...</span><span
|
Chris@1
|
6764 class="cmtt-8"> [floor1_partitions]-1</span><span
|
Chris@1
|
6765 class="cmtt-8"> </span><span
|
Chris@1
|
6766 class="cmsy-8">{</span>
|
Chris@1
|
6767 <br class="fancyvrb" /><a
|
Chris@1
|
6768 id="x1-100014r6"></a><span
|
Chris@1
|
6769 class="cmr-6">6</span><span
|
Chris@1
|
6770 class="cmtt-8"> </span><span
|
Chris@1
|
6771 class="cmtt-8"> </span>
|
Chris@1
|
6772 <br class="fancyvrb" /><a
|
Chris@1
|
6773 id="x1-100016r7"></a><span
|
Chris@1
|
6774 class="cmr-6">7</span><span
|
Chris@1
|
6775 class="cmtt-8"> </span><span
|
Chris@1
|
6776 class="cmtt-8"> </span><span
|
Chris@1
|
6777 class="cmtt-8"> </span><span
|
Chris@1
|
6778 class="cmtt-8"> </span><span
|
Chris@1
|
6779 class="cmtt-8"> </span><span
|
Chris@1
|
6780 class="cmtt-8"> </span><span
|
Chris@1
|
6781 class="cmtt-8"> </span><span
|
Chris@1
|
6782 class="cmtt-8"> </span><span
|
Chris@1
|
6783 class="cmtt-8"> 6)</span><span
|
Chris@1
|
6784 class="cmtt-8"> [class]</span><span
|
Chris@1
|
6785 class="cmtt-8"> =</span><span
|
Chris@1
|
6786 class="cmtt-8"> vector</span><span
|
Chris@1
|
6787 class="cmtt-8"> [floor1_partition_class]</span><span
|
Chris@1
|
6788 class="cmtt-8"> </span><span
|
Chris@1
|
6789 class="cmtt-8"> element</span><span
|
Chris@1
|
6790 class="cmtt-8"> [i]</span>
|
Chris@1
|
6791 <br class="fancyvrb" /><a
|
Chris@1
|
6792 id="x1-100018r8"></a><span
|
Chris@1
|
6793 class="cmr-6">8</span><span
|
Chris@1
|
6794 class="cmtt-8"> </span><span
|
Chris@1
|
6795 class="cmtt-8"> </span><span
|
Chris@1
|
6796 class="cmtt-8"> </span><span
|
Chris@1
|
6797 class="cmtt-8"> </span><span
|
Chris@1
|
6798 class="cmtt-8"> </span><span
|
Chris@1
|
6799 class="cmtt-8"> </span><span
|
Chris@1
|
6800 class="cmtt-8"> </span><span
|
Chris@1
|
6801 class="cmtt-8"> </span><span
|
Chris@1
|
6802 class="cmtt-8"> 7)</span><span
|
Chris@1
|
6803 class="cmtt-8"> [cdim]</span><span
|
Chris@1
|
6804 class="cmtt-8"> </span><span
|
Chris@1
|
6805 class="cmtt-8"> =</span><span
|
Chris@1
|
6806 class="cmtt-8"> vector</span><span
|
Chris@1
|
6807 class="cmtt-8"> [floor1_class_dimensions]</span><span
|
Chris@1
|
6808 class="cmtt-8"> element</span><span
|
Chris@1
|
6809 class="cmtt-8"> [class]</span>
|
Chris@1
|
6810 <br class="fancyvrb" /><a
|
Chris@1
|
6811 id="x1-100020r9"></a><span
|
Chris@1
|
6812 class="cmr-6">9</span><span
|
Chris@1
|
6813 class="cmtt-8"> </span><span
|
Chris@1
|
6814 class="cmtt-8"> </span><span
|
Chris@1
|
6815 class="cmtt-8"> </span><span
|
Chris@1
|
6816 class="cmtt-8"> </span><span
|
Chris@1
|
6817 class="cmtt-8"> </span><span
|
Chris@1
|
6818 class="cmtt-8"> </span><span
|
Chris@1
|
6819 class="cmtt-8"> </span><span
|
Chris@1
|
6820 class="cmtt-8"> </span><span
|
Chris@1
|
6821 class="cmtt-8"> 8)</span><span
|
Chris@1
|
6822 class="cmtt-8"> [cbits]</span><span
|
Chris@1
|
6823 class="cmtt-8"> =</span><span
|
Chris@1
|
6824 class="cmtt-8"> vector</span><span
|
Chris@1
|
6825 class="cmtt-8"> [floor1_class_subclasses]</span><span
|
Chris@1
|
6826 class="cmtt-8"> element</span><span
|
Chris@1
|
6827 class="cmtt-8"> [class]</span>
|
Chris@1
|
6828 <br class="fancyvrb" /><a
|
Chris@1
|
6829 id="x1-100022r10"></a><span
|
Chris@1
|
6830 class="cmr-6">10</span><span
|
Chris@1
|
6831 class="cmtt-8"> </span><span
|
Chris@1
|
6832 class="cmtt-8"> </span><span
|
Chris@1
|
6833 class="cmtt-8"> </span><span
|
Chris@1
|
6834 class="cmtt-8"> </span><span
|
Chris@1
|
6835 class="cmtt-8"> </span><span
|
Chris@1
|
6836 class="cmtt-8"> </span><span
|
Chris@1
|
6837 class="cmtt-8"> </span><span
|
Chris@1
|
6838 class="cmtt-8"> </span><span
|
Chris@1
|
6839 class="cmtt-8"> 9)</span><span
|
Chris@1
|
6840 class="cmtt-8"> [csub]</span><span
|
Chris@1
|
6841 class="cmtt-8"> </span><span
|
Chris@1
|
6842 class="cmtt-8"> =</span><span
|
Chris@1
|
6843 class="cmtt-8"> (2</span><span
|
Chris@1
|
6844 class="cmtt-8"> exponent</span><span
|
Chris@1
|
6845 class="cmtt-8"> [cbits])-1</span>
|
Chris@1
|
6846 <br class="fancyvrb" /><a
|
Chris@1
|
6847 id="x1-100024r11"></a><span
|
Chris@1
|
6848 class="cmr-6">11</span><span
|
Chris@1
|
6849 class="cmtt-8"> </span><span
|
Chris@1
|
6850 class="cmtt-8"> </span><span
|
Chris@1
|
6851 class="cmtt-8"> </span><span
|
Chris@1
|
6852 class="cmtt-8"> </span><span
|
Chris@1
|
6853 class="cmtt-8"> </span><span
|
Chris@1
|
6854 class="cmtt-8"> </span><span
|
Chris@1
|
6855 class="cmtt-8"> </span><span
|
Chris@1
|
6856 class="cmtt-8"> 10)</span><span
|
Chris@1
|
6857 class="cmtt-8"> [cval]</span><span
|
Chris@1
|
6858 class="cmtt-8"> </span><span
|
Chris@1
|
6859 class="cmtt-8"> =</span><span
|
Chris@1
|
6860 class="cmtt-8"> 0</span>
|
Chris@1
|
6861 <br class="fancyvrb" /><a
|
Chris@1
|
6862 id="x1-100026r12"></a><span
|
Chris@1
|
6863 class="cmr-6">12</span><span
|
Chris@1
|
6864 class="cmtt-8"> </span><span
|
Chris@1
|
6865 class="cmtt-8"> </span><span
|
Chris@1
|
6866 class="cmtt-8"> </span><span
|
Chris@1
|
6867 class="cmtt-8"> </span><span
|
Chris@1
|
6868 class="cmtt-8"> </span><span
|
Chris@1
|
6869 class="cmtt-8"> </span><span
|
Chris@1
|
6870 class="cmtt-8"> </span><span
|
Chris@1
|
6871 class="cmtt-8"> 11)</span><span
|
Chris@1
|
6872 class="cmtt-8"> if</span><span
|
Chris@1
|
6873 class="cmtt-8"> (</span><span
|
Chris@1
|
6874 class="cmtt-8"> [cbits]</span><span
|
Chris@1
|
6875 class="cmtt-8"> is</span><span
|
Chris@1
|
6876 class="cmtt-8"> greater</span><span
|
Chris@1
|
6877 class="cmtt-8"> than</span><span
|
Chris@1
|
6878 class="cmtt-8"> zero</span><span
|
Chris@1
|
6879 class="cmtt-8"> )</span><span
|
Chris@1
|
6880 class="cmtt-8"> </span><span
|
Chris@1
|
6881 class="cmsy-8">{</span>
|
Chris@1
|
6882 <br class="fancyvrb" /><a
|
Chris@1
|
6883 id="x1-100028r13"></a><span
|
Chris@1
|
6884 class="cmr-6">13</span><span
|
Chris@1
|
6885 class="cmtt-8"> </span><span
|
Chris@1
|
6886 class="cmtt-8"> </span>
|
Chris@1
|
6887 <br class="fancyvrb" /><a
|
Chris@1
|
6888 id="x1-100030r14"></a><span
|
Chris@1
|
6889 class="cmr-6">14</span><span
|
Chris@1
|
6890 class="cmtt-8"> </span><span
|
Chris@1
|
6891 class="cmtt-8"> </span><span
|
Chris@1
|
6892 class="cmtt-8"> </span><span
|
Chris@1
|
6893 class="cmtt-8"> </span><span
|
Chris@1
|
6894 class="cmtt-8"> </span><span
|
Chris@1
|
6895 class="cmtt-8"> </span><span
|
Chris@1
|
6896 class="cmtt-8"> </span><span
|
Chris@1
|
6897 class="cmtt-8"> </span><span
|
Chris@1
|
6898 class="cmtt-8"> </span><span
|
Chris@1
|
6899 class="cmtt-8"> </span><span
|
Chris@1
|
6900 class="cmtt-8"> </span><span
|
Chris@1
|
6901 class="cmtt-8"> </span><span
|
Chris@1
|
6902 class="cmtt-8"> </span><span
|
Chris@1
|
6903 class="cmtt-8"> </span><span
|
Chris@1
|
6904 class="cmtt-8"> 12)</span><span
|
Chris@1
|
6905 class="cmtt-8"> [cval]</span><span
|
Chris@1
|
6906 class="cmtt-8"> =</span><span
|
Chris@1
|
6907 class="cmtt-8"> read</span><span
|
Chris@1
|
6908 class="cmtt-8"> from</span><span
|
Chris@1
|
6909 class="cmtt-8"> packet</span><span
|
Chris@1
|
6910 class="cmtt-8"> using</span><span
|
Chris@1
|
6911 class="cmtt-8"> codebook</span><span
|
Chris@1
|
6912 class="cmtt-8"> number</span>
|
Chris@1
|
6913 <br class="fancyvrb" /><a
|
Chris@1
|
6914 id="x1-100032r15"></a><span
|
Chris@1
|
6915 class="cmr-6">15</span><span
|
Chris@1
|
6916 class="cmtt-8"> </span><span
|
Chris@1
|
6917 class="cmtt-8"> </span><span
|
Chris@1
|
6918 class="cmtt-8"> </span><span
|
Chris@1
|
6919 class="cmtt-8"> </span><span
|
Chris@1
|
6920 class="cmtt-8"> </span><span
|
Chris@1
|
6921 class="cmtt-8"> </span><span
|
Chris@1
|
6922 class="cmtt-8"> </span><span
|
Chris@1
|
6923 class="cmtt-8"> </span><span
|
Chris@1
|
6924 class="cmtt-8"> </span><span
|
Chris@1
|
6925 class="cmtt-8"> </span><span
|
Chris@1
|
6926 class="cmtt-8"> </span><span
|
Chris@1
|
6927 class="cmtt-8"> </span><span
|
Chris@1
|
6928 class="cmtt-8"> </span><span
|
Chris@1
|
6929 class="cmtt-8"> </span><span
|
Chris@1
|
6930 class="cmtt-8"> </span><span
|
Chris@1
|
6931 class="cmtt-8"> </span><span
|
Chris@1
|
6932 class="cmtt-8"> </span><span
|
Chris@1
|
6933 class="cmtt-8"> </span><span
|
Chris@1
|
6934 class="cmtt-8"> (vector</span><span
|
Chris@1
|
6935 class="cmtt-8"> [floor1_class_masterbooks]</span><span
|
Chris@1
|
6936 class="cmtt-8"> element</span><span
|
Chris@1
|
6937 class="cmtt-8"> [class])</span><span
|
Chris@1
|
6938 class="cmtt-8"> in</span><span
|
Chris@1
|
6939 class="cmtt-8"> scalar</span><span
|
Chris@1
|
6940 class="cmtt-8"> context</span>
|
Chris@1
|
6941 <br class="fancyvrb" /><a
|
Chris@1
|
6942 id="x1-100034r16"></a><span
|
Chris@1
|
6943 class="cmr-6">16</span><span
|
Chris@1
|
6944 class="cmtt-8"> </span><span
|
Chris@1
|
6945 class="cmtt-8"> </span><span
|
Chris@1
|
6946 class="cmtt-8"> </span><span
|
Chris@1
|
6947 class="cmtt-8"> </span><span
|
Chris@1
|
6948 class="cmtt-8"> </span><span
|
Chris@1
|
6949 class="cmtt-8"> </span><span
|
Chris@1
|
6950 class="cmtt-8"> </span><span
|
Chris@1
|
6951 class="cmtt-8"> </span><span
|
Chris@1
|
6952 class="cmtt-8"> </span><span
|
Chris@1
|
6953 class="cmtt-8"> </span><span
|
Chris@1
|
6954 class="cmtt-8"> </span><span
|
Chris@1
|
6955 class="cmtt-8"> </span><span
|
Chris@1
|
6956 class="cmsy-8">}</span>
|
Chris@1
|
6957 <br class="fancyvrb" /><a
|
Chris@1
|
6958 id="x1-100036r17"></a><span
|
Chris@1
|
6959 class="cmr-6">17</span><span
|
Chris@1
|
6960 class="cmtt-8"> </span><span
|
Chris@1
|
6961 class="cmtt-8"> </span>
|
Chris@1
|
6962 <br class="fancyvrb" /><a
|
Chris@1
|
6963 id="x1-100038r18"></a><span
|
Chris@1
|
6964 class="cmr-6">18</span><span
|
Chris@1
|
6965 class="cmtt-8"> </span><span
|
Chris@1
|
6966 class="cmtt-8"> </span><span
|
Chris@1
|
6967 class="cmtt-8"> </span><span
|
Chris@1
|
6968 class="cmtt-8"> </span><span
|
Chris@1
|
6969 class="cmtt-8"> </span><span
|
Chris@1
|
6970 class="cmtt-8"> </span><span
|
Chris@1
|
6971 class="cmtt-8"> </span><span
|
Chris@1
|
6972 class="cmtt-8"> 13)</span><span
|
Chris@1
|
6973 class="cmtt-8"> iterate</span><span
|
Chris@1
|
6974 class="cmtt-8"> [j]</span><span
|
Chris@1
|
6975 class="cmtt-8"> over</span><span
|
Chris@1
|
6976 class="cmtt-8"> the</span><span
|
Chris@1
|
6977 class="cmtt-8"> range</span><span
|
Chris@1
|
6978 class="cmtt-8"> 0</span><span
|
Chris@1
|
6979 class="cmtt-8"> ...</span><span
|
Chris@1
|
6980 class="cmtt-8"> [cdim]-1</span><span
|
Chris@1
|
6981 class="cmtt-8"> </span><span
|
Chris@1
|
6982 class="cmsy-8">{</span>
|
Chris@1
|
6983 <br class="fancyvrb" /><a
|
Chris@1
|
6984 id="x1-100040r19"></a><span
|
Chris@1
|
6985 class="cmr-6">19</span><span
|
Chris@1
|
6986 class="cmtt-8"> </span><span
|
Chris@1
|
6987 class="cmtt-8"> </span>
|
Chris@1
|
6988 <br class="fancyvrb" /><a
|
Chris@1
|
6989 id="x1-100042r20"></a><span
|
Chris@1
|
6990 class="cmr-6">20</span><span
|
Chris@1
|
6991 class="cmtt-8"> </span><span
|
Chris@1
|
6992 class="cmtt-8"> </span><span
|
Chris@1
|
6993 class="cmtt-8"> </span><span
|
Chris@1
|
6994 class="cmtt-8"> </span><span
|
Chris@1
|
6995 class="cmtt-8"> </span><span
|
Chris@1
|
6996 class="cmtt-8"> </span><span
|
Chris@1
|
6997 class="cmtt-8"> </span><span
|
Chris@1
|
6998 class="cmtt-8"> </span><span
|
Chris@1
|
6999 class="cmtt-8"> </span><span
|
Chris@1
|
7000 class="cmtt-8"> </span><span
|
Chris@1
|
7001 class="cmtt-8"> </span><span
|
Chris@1
|
7002 class="cmtt-8"> </span><span
|
Chris@1
|
7003 class="cmtt-8"> </span><span
|
Chris@1
|
7004 class="cmtt-8"> </span><span
|
Chris@1
|
7005 class="cmtt-8"> 14)</span><span
|
Chris@1
|
7006 class="cmtt-8"> [book]</span><span
|
Chris@1
|
7007 class="cmtt-8"> =</span><span
|
Chris@1
|
7008 class="cmtt-8"> array</span><span
|
Chris@1
|
7009 class="cmtt-8"> [floor1_subclass_books]</span><span
|
Chris@1
|
7010 class="cmtt-8"> element</span><span
|
Chris@1
|
7011 class="cmtt-8"> [class],([cval]</span><span
|
Chris@1
|
7012 class="cmtt-8"> bitwise</span><span
|
Chris@1
|
7013 class="cmtt-8"> AND</span><span
|
Chris@1
|
7014 class="cmtt-8"> [csub])</span>
|
Chris@1
|
7015 <br class="fancyvrb" /><a
|
Chris@1
|
7016 id="x1-100044r21"></a><span
|
Chris@1
|
7017 class="cmr-6">21</span><span
|
Chris@1
|
7018 class="cmtt-8"> </span><span
|
Chris@1
|
7019 class="cmtt-8"> </span><span
|
Chris@1
|
7020 class="cmtt-8"> </span><span
|
Chris@1
|
7021 class="cmtt-8"> </span><span
|
Chris@1
|
7022 class="cmtt-8"> </span><span
|
Chris@1
|
7023 class="cmtt-8"> </span><span
|
Chris@1
|
7024 class="cmtt-8"> </span><span
|
Chris@1
|
7025 class="cmtt-8"> </span><span
|
Chris@1
|
7026 class="cmtt-8"> </span><span
|
Chris@1
|
7027 class="cmtt-8"> </span><span
|
Chris@1
|
7028 class="cmtt-8"> </span><span
|
Chris@1
|
7029 class="cmtt-8"> </span><span
|
Chris@1
|
7030 class="cmtt-8"> </span><span
|
Chris@1
|
7031 class="cmtt-8"> </span><span
|
Chris@1
|
7032 class="cmtt-8"> 15)</span><span
|
Chris@1
|
7033 class="cmtt-8"> [cval]</span><span
|
Chris@1
|
7034 class="cmtt-8"> =</span><span
|
Chris@1
|
7035 class="cmtt-8"> [cval]</span><span
|
Chris@1
|
7036 class="cmtt-8"> right</span><span
|
Chris@1
|
7037 class="cmtt-8"> shifted</span><span
|
Chris@1
|
7038 class="cmtt-8"> [cbits]</span><span
|
Chris@1
|
7039 class="cmtt-8"> bits</span>
|
Chris@1
|
7040 <br class="fancyvrb" /><a
|
Chris@1
|
7041 id="x1-100046r22"></a><span
|
Chris@1
|
7042 class="cmr-6">22</span><span
|
Chris@1
|
7043 class="cmtt-8"> </span><span
|
Chris@1
|
7044 class="cmtt-8">  </span><span
|
Chris@1
|
7045 class="cmtt-8"> </span><span
|
Chris@1
|
7046 class="cmtt-8"> </span><span
|
Chris@1
|
7047 class="cmtt-8"> </span><span
|
Chris@1
|
7048 class="cmtt-8"> </span><span
|
Chris@1
|
7049 class="cmtt-8"> 16)</span><span
|
Chris@1
|
7050 class="cmtt-8"> if</span><span
|
Chris@1
|
7051 class="cmtt-8"> (</span><span
|
Chris@1
|
7052 class="cmtt-8"> [book]</span><span
|
Chris@1
|
7053 class="cmtt-8"> is</span><span
|
Chris@1
|
7054 class="cmtt-8"> not</span><span
|
Chris@1
|
7055 class="cmtt-8"> less</span><span
|
Chris@1
|
7056 class="cmtt-8"> than</span><span
|
Chris@1
|
7057 class="cmtt-8"> zero</span><span
|
Chris@1
|
7058 class="cmtt-8"> )</span><span
|
Chris@1
|
7059 class="cmtt-8"> </span><span
|
Chris@1
|
7060 class="cmsy-8">{</span>
|
Chris@1
|
7061 <br class="fancyvrb" /><a
|
Chris@1
|
7062 id="x1-100048r23"></a><span
|
Chris@1
|
7063 class="cmr-6">23</span><span
|
Chris@1
|
7064 class="cmtt-8"> </span><span
|
Chris@1
|
7065 class="cmtt-8"> </span>
|
Chris@1
|
7066 <br class="fancyvrb" /><a
|
Chris@1
|
7067 id="x1-100050r24"></a><span
|
Chris@1
|
7068 class="cmr-6">24</span><span
|
Chris@1
|
7069 class="cmtt-8"> </span><span
|
Chris@1
|
7070 class="cmtt-8">  </span><span
|
Chris@1
|
7071 class="cmtt-8"> </span><span
|
Chris@1
|
7072 class="cmtt-8"> </span><span
|
Chris@1
|
7073 class="cmtt-8"> </span><span
|
Chris@1
|
7074 class="cmtt-8"> </span><span
|
Chris@1
|
7075 class="cmtt-8"> </span><span
|
Chris@1
|
7076 class="cmtt-8"> </span><span
|
Chris@1
|
7077 class="cmtt-8"> </span><span
|
Chris@1
|
7078 class="cmtt-8"> </span><span
|
Chris@1
|
7079 class="cmtt-8"> </span><span
|
Chris@1
|
7080 class="cmtt-8"> </span><span
|
Chris@1
|
7081 class="cmtt-8"> 17)</span><span
|
Chris@1
|
7082 class="cmtt-8"> vector</span><span
|
Chris@1
|
7083 class="cmtt-8"> [floor1_Y]</span><span
|
Chris@1
|
7084 class="cmtt-8"> element</span><span
|
Chris@1
|
7085 class="cmtt-8"> ([j]+[offset])</span><span
|
Chris@1
|
7086 class="cmtt-8"> =</span><span
|
Chris@1
|
7087 class="cmtt-8"> read</span><span
|
Chris@1
|
7088 class="cmtt-8"> from</span><span
|
Chris@1
|
7089 class="cmtt-8"> packet</span><span
|
Chris@1
|
7090 class="cmtt-8"> using</span><span
|
Chris@1
|
7091 class="cmtt-8"> codebook</span>
|
Chris@1
|
7092 <br class="fancyvrb" /><a
|
Chris@1
|
7093 id="x1-100052r25"></a><span
|
Chris@1
|
7094 class="cmr-6">25</span><span
|
Chris@1
|
7095 class="cmtt-8"> </span><span
|
Chris@1
|
7096 class="cmtt-8"> </span><span
|
Chris@1
|
7097 class="cmtt-8"> </span><span
|
Chris@1
|
7098 class="cmtt-8"> </span><span
|
Chris@1
|
7099 class="cmtt-8"> </span><span
|
Chris@1
|
7100 class="cmtt-8"> </span><span
|
Chris@1
|
7101 class="cmtt-8"> </span><span
|
Chris@1
|
7102 class="cmtt-8"> </span><span
|
Chris@1
|
7103 class="cmtt-8"> </span><span
|
Chris@1
|
7104 class="cmtt-8"> </span><span
|
Chris@1
|
7105 class="cmtt-8"> </span><span
|
Chris@1
|
7106 class="cmtt-8"> </span><span
|
Chris@1
|
7107 class="cmtt-8"> </span><span
|
Chris@1
|
7108 class="cmtt-8"> </span><span
|
Chris@1
|
7109 class="cmtt-8"> </span><span
|
Chris@1
|
7110 class="cmtt-8"> </span><span
|
Chris@1
|
7111 class="cmtt-8"> </span><span
|
Chris@1
|
7112 class="cmtt-8"> </span><span
|
Chris@1
|
7113 class="cmtt-8"> </span><span
|
Chris@1
|
7114 class="cmtt-8"> </span><span
|
Chris@1
|
7115 class="cmtt-8"> </span><span
|
Chris@1
|
7116 class="cmtt-8"> </span><span
|
Chris@1
|
7117 class="cmtt-8"> </span><span
|
Chris@1
|
7118 class="cmtt-8"> </span><span
|
Chris@1
|
7119 class="cmtt-8"> [book]</span><span
|
Chris@1
|
7120 class="cmtt-8"> in</span><span
|
Chris@1
|
7121 class="cmtt-8"> scalar</span><span
|
Chris@1
|
7122 class="cmtt-8"> context</span>
|
Chris@1
|
7123 <br class="fancyvrb" /><a
|
Chris@1
|
7124 id="x1-100054r26"></a><span
|
Chris@1
|
7125 class="cmr-6">26</span><span
|
Chris@1
|
7126 class="cmtt-8"> </span><span
|
Chris@1
|
7127 class="cmtt-8"> </span>
|
Chris@1
|
7128 <br class="fancyvrb" /><a
|
Chris@1
|
7129 id="x1-100056r27"></a><span
|
Chris@1
|
7130 class="cmr-6">27</span><span
|
Chris@1
|
7131 class="cmtt-8"> </span><span
|
Chris@1
|
7132 class="cmtt-8"> </span><span
|
Chris@1
|
7133 class="cmtt-8"> </span><span
|
Chris@1
|
7134 class="cmtt-8"> </span><span
|
Chris@1
|
7135 class="cmtt-8"> </span><span
|
Chris@1
|
7136 class="cmtt-8"> </span><span
|
Chris@1
|
7137 class="cmtt-8"> </span><span
|
Chris@1
|
7138 class="cmtt-8"> </span><span
|
Chris@1
|
7139 class="cmtt-8"> </span><span
|
Chris@1
|
7140 class="cmtt-8"> </span><span
|
Chris@1
|
7141 class="cmtt-8"> </span><span
|
Chris@1
|
7142 class="cmtt-8"> </span><span
|
Chris@1
|
7143 class="cmtt-8"> </span><span
|
Chris@1
|
7144 class="cmtt-8"> </span><span
|
Chris@1
|
7145 class="cmtt-8"> </span><span
|
Chris@1
|
7146 class="cmtt-8"> </span><span
|
Chris@1
|
7147 class="cmtt-8"> </span><span
|
Chris@1
|
7148 class="cmtt-8"> </span><span
|
Chris@1
|
7149 class="cmtt-8"> </span><span
|
Chris@1
|
7150 class="cmsy-8">}</span><span
|
Chris@1
|
7151 class="cmtt-8"> else</span><span
|
Chris@1
|
7152 class="cmtt-8"> [book]</span><span
|
Chris@1
|
7153 class="cmtt-8"> is</span><span
|
Chris@1
|
7154 class="cmtt-8"> less</span><span
|
Chris@1
|
7155 class="cmtt-8"> than</span><span
|
Chris@1
|
7156 class="cmtt-8"> zero</span><span
|
Chris@1
|
7157 class="cmtt-8"> </span><span
|
Chris@1
|
7158 class="cmsy-8">{</span>
|
Chris@1
|
7159 <br class="fancyvrb" /><a
|
Chris@1
|
7160 id="x1-100058r28"></a><span
|
Chris@1
|
7161 class="cmr-6">28</span><span
|
Chris@1
|
7162 class="cmtt-8"> </span><span
|
Chris@1
|
7163 class="cmtt-8"> </span>
|
Chris@1
|
7164 <br class="fancyvrb" /><a
|
Chris@1
|
7165 id="x1-100060r29"></a><span
|
Chris@1
|
7166 class="cmr-6">29</span><span
|
Chris@1
|
7167 class="cmtt-8"> </span><span
|
Chris@1
|
7168 class="cmtt-8">  </span><span
|
Chris@1
|
7169 class="cmtt-8"> </span><span
|
Chris@1
|
7170 class="cmtt-8"> </span><span
|
Chris@1
|
7171 class="cmtt-8"> </span><span
|
Chris@1
|
7172 class="cmtt-8"> </span><span
|
Chris@1
|
7173 class="cmtt-8"> </span><span
|
Chris@1
|
7174 class="cmtt-8"> </span><span
|
Chris@1
|
7175 class="cmtt-8"> </span><span
|
Chris@1
|
7176 class="cmtt-8"> </span><span
|
Chris@1
|
7177 class="cmtt-8"> </span><span
|
Chris@1
|
7178 class="cmtt-8"> </span><span
|
Chris@1
|
7179 class="cmtt-8"> 18)</span><span
|
Chris@1
|
7180 class="cmtt-8"> vector</span><span
|
Chris@1
|
7181 class="cmtt-8"> [floor1_Y]</span><span
|
Chris@1
|
7182 class="cmtt-8"> element</span><span
|
Chris@1
|
7183 class="cmtt-8"> ([j]+[offset])</span><span
|
Chris@1
|
7184 class="cmtt-8"> =</span><span
|
Chris@1
|
7185 class="cmtt-8"> 0</span>
|
Chris@1
|
7186 <br class="fancyvrb" /><a
|
Chris@1
|
7187 id="x1-100062r30"></a><span
|
Chris@1
|
7188 class="cmr-6">30</span><span
|
Chris@1
|
7189 class="cmtt-8"> </span><span
|
Chris@1
|
7190 class="cmtt-8"> </span>
|
Chris@1
|
7191 <br class="fancyvrb" /><a
|
Chris@1
|
7192 id="x1-100064r31"></a><span
|
Chris@1
|
7193 class="cmr-6">31</span><span
|
Chris@1
|
7194 class="cmtt-8"> </span><span
|
Chris@1
|
7195 class="cmtt-8"> </span><span
|
Chris@1
|
7196 class="cmtt-8"> </span><span
|
Chris@1
|
7197 class="cmtt-8"> </span><span
|
Chris@1
|
7198 class="cmtt-8"> </span><span
|
Chris@1
|
7199 class="cmtt-8"> </span><span
|
Chris@1
|
7200 class="cmtt-8"> </span><span
|
Chris@1
|
7201 class="cmtt-8"> </span><span
|
Chris@1
|
7202 class="cmtt-8"> </span><span
|
Chris@1
|
7203 class="cmtt-8"> </span><span
|
Chris@1
|
7204 class="cmtt-8"> </span><span
|
Chris@1
|
7205 class="cmtt-8"> </span><span
|
Chris@1
|
7206 class="cmtt-8"> </span><span
|
Chris@1
|
7207 class="cmtt-8"> </span><span
|
Chris@1
|
7208 class="cmtt-8"> </span><span
|
Chris@1
|
7209 class="cmtt-8"> </span><span
|
Chris@1
|
7210 class="cmtt-8"> </span><span
|
Chris@1
|
7211 class="cmtt-8"> </span><span
|
Chris@1
|
7212 class="cmtt-8"> </span><span
|
Chris@1
|
7213 class="cmsy-8">}</span>
|
Chris@1
|
7214 <br class="fancyvrb" /><a
|
Chris@1
|
7215 id="x1-100066r32"></a><span
|
Chris@1
|
7216 class="cmr-6">32</span><span
|
Chris@1
|
7217 class="cmtt-8"> </span><span
|
Chris@1
|
7218 class="cmtt-8"> </span><span
|
Chris@1
|
7219 class="cmtt-8"> </span><span
|
Chris@1
|
7220 class="cmtt-8"> </span><span
|
Chris@1
|
7221 class="cmtt-8"> </span><span
|
Chris@1
|
7222 class="cmtt-8"> </span><span
|
Chris@1
|
7223 class="cmtt-8"> </span><span
|
Chris@1
|
7224 class="cmtt-8"> </span><span
|
Chris@1
|
7225 class="cmtt-8"> </span><span
|
Chris@1
|
7226 class="cmtt-8"> </span><span
|
Chris@1
|
7227 class="cmtt-8"> </span><span
|
Chris@1
|
7228 class="cmtt-8"> </span><span
|
Chris@1
|
7229 class="cmsy-8">}</span>
|
Chris@1
|
7230 <br class="fancyvrb" /><a
|
Chris@1
|
7231 id="x1-100068r33"></a><span
|
Chris@1
|
7232 class="cmr-6">33</span><span
|
Chris@1
|
7233 class="cmtt-8"> </span><span
|
Chris@1
|
7234 class="cmtt-8"> </span>
|
Chris@1
|
7235 <br class="fancyvrb" /><a
|
Chris@1
|
7236 id="x1-100070r34"></a><span
|
Chris@1
|
7237 class="cmr-6">34</span><span
|
Chris@1
|
7238 class="cmtt-8"> </span><span
|
Chris@1
|
7239 class="cmtt-8"> </span><span
|
Chris@1
|
7240 class="cmtt-8"> </span><span
|
Chris@1
|
7241 class="cmtt-8"> </span><span
|
Chris@1
|
7242 class="cmtt-8"> </span><span
|
Chris@1
|
7243 class="cmtt-8"> </span><span
|
Chris@1
|
7244 class="cmtt-8"> </span><span
|
Chris@1
|
7245 class="cmtt-8"> 19)</span><span
|
Chris@1
|
7246 class="cmtt-8"> [offset]</span><span
|
Chris@1
|
7247 class="cmtt-8"> =</span><span
|
Chris@1
|
7248 class="cmtt-8"> [offset]</span><span
|
Chris@1
|
7249 class="cmtt-8"> +</span><span
|
Chris@1
|
7250 class="cmtt-8"> [cdim]</span>
|
Chris@1
|
7251
|
Chris@1
|
7252
|
Chris@1
|
7253
|
Chris@1
|
7254 <br class="fancyvrb" /><a
|
Chris@1
|
7255 id="x1-100072r35"></a><span
|
Chris@1
|
7256 class="cmr-6">35</span><span
|
Chris@1
|
7257 class="cmtt-8"> </span><span
|
Chris@1
|
7258 class="cmtt-8"> </span>
|
Chris@1
|
7259 <br class="fancyvrb" /><a
|
Chris@1
|
7260 id="x1-100074r36"></a><span
|
Chris@1
|
7261 class="cmr-6">36</span><span
|
Chris@1
|
7262 class="cmtt-8"> </span><span
|
Chris@1
|
7263 class="cmtt-8"> </span><span
|
Chris@1
|
7264 class="cmtt-8"> </span><span
|
Chris@1
|
7265 class="cmtt-8"> </span><span
|
Chris@1
|
7266 class="cmtt-8"> </span><span
|
Chris@1
|
7267 class="cmtt-8"> </span><span
|
Chris@1
|
7268 class="cmtt-8"> </span><span
|
Chris@1
|
7269 class="cmsy-8">}</span>
|
Chris@1
|
7270 <br class="fancyvrb" /><a
|
Chris@1
|
7271 id="x1-100076r37"></a><span
|
Chris@1
|
7272 class="cmr-6">37</span><span
|
Chris@1
|
7273 class="cmtt-8"> </span><span
|
Chris@1
|
7274 class="cmtt-8"> </span>
|
Chris@1
|
7275 <br class="fancyvrb" /><a
|
Chris@1
|
7276 id="x1-100078r38"></a><span
|
Chris@1
|
7277 class="cmr-6">38</span><span
|
Chris@1
|
7278 class="cmtt-8"> </span><span
|
Chris@1
|
7279 class="cmtt-8"> </span><span
|
Chris@1
|
7280 class="cmtt-8"> 20)</span><span
|
Chris@1
|
7281 class="cmtt-8"> done</span>
|
Chris@1
|
7282 </div>
|
Chris@1
|
7283 <!--l. 229--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
|
Chris@1
|
7284 end-of-packet is reached during any read operation above, floor decode is to return ’unused’
|
Chris@1
|
7285 status as if the <span
|
Chris@1
|
7286 class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
|
Chris@1
|
7287 <!--l. 235--><p class="noindent" >Vector <span
|
Chris@1
|
7288 class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
|
Chris@1
|
7289 <!--l. 240--><p class="noindent" >
|
Chris@1
|
7290 <h5 class="subsubsectionHead"><span class="titlemark">7.2.4. </span> <a
|
Chris@1
|
7291 id="x1-1010007.2.4"></a>curve computation</h5>
|
Chris@1
|
7292 <!--l. 242--><p class="noindent" >Curve computation is split into two logical steps; the first step derives final Y amplitude values
|
Chris@1
|
7293 from the encoded, wrapped difference values taken from the bitstream. The second step
|
Chris@1
|
7294 plots the curve lines. Also, although zero-difference values are used in the iterative
|
Chris@1
|
7295 prediction to find final Y values, these points are conditionally skipped during final
|
Chris@1
|
7296 line computation in step two. Skipping zero-difference values allows a smoother line
|
Chris@1
|
7297 fit.
|
Chris@1
|
7298 <!--l. 250--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
|
Chris@1
|
7299 implementors are warned to follow the details closely. Deviation from implementing a strictly
|
Chris@1
|
7300 equivalent algorithm can result in serious decoding errors.
|
Chris@1
|
7301 <!--l. 255--><p class="noindent" ><span
|
Chris@1
|
7302 class="cmti-12">Additional note: </span>Although <span
|
Chris@1
|
7303 class="cmtt-12">[floor1_final_Y] </span>values in the prediction loop and at the end of
|
Chris@1
|
7304 step 1 are inherently limited by the prediction algorithm to [0, <span
|
Chris@1
|
7305 class="cmtt-12">[range]</span>), it is possible to abuse
|
Chris@1
|
7306 the setup and codebook machinery to produce negative or over-range results. We suggest that
|
Chris@1
|
7307 decoder implementations guard the values in vector <span
|
Chris@1
|
7308 class="cmtt-12">[floor1_final_Y] </span>by clamping each
|
Chris@1
|
7309 element to [0, <span
|
Chris@1
|
7310 class="cmtt-12">[range]</span>) after step 1. Variants of this suggestion are acceptable as valid floor1
|
Chris@1
|
7311 setups cannot produce out of range values.
|
Chris@1
|
7312 <!--l. 266--><p class="noindent" >
|
Chris@1
|
7313 <dl class="description"><dt class="description">
|
Chris@1
|
7314 <span
|
Chris@1
|
7315 class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd
|
Chris@1
|
7316 class="description">
|
Chris@1
|
7317 <!--l. 268--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
|
Chris@1
|
7318 values, then apply to line prediction.
|
Chris@1
|
7319 <!--l. 271--><p class="noindent" >
|
Chris@1
|
7320 <div class="fancyvrb" id="fancyvrb31">
|
Chris@1
|
7321
|
Chris@1
|
7322
|
Chris@1
|
7323
|
Chris@1
|
7324 <a
|
Chris@1
|
7325 id="x1-101002r1"></a><span
|
Chris@1
|
7326 class="cmr-6">1</span><span
|
Chris@1
|
7327 class="cmtt-8"> </span><span
|
Chris@1
|
7328 class="cmtt-8"> </span><span
|
Chris@1
|
7329 class="cmtt-8"> </span><span
|
Chris@1
|
7330 class="cmtt-8"> 1)</span><span
|
Chris@1
|
7331 class="cmtt-8"> [range]</span><span
|
Chris@1
|
7332 class="cmtt-8"> =</span><span
|
Chris@1
|
7333 class="cmtt-8"> vector</span><span
|
Chris@1
|
7334 class="cmtt-8"> </span><span
|
Chris@1
|
7335 class="cmsy-8">{</span><span
|
Chris@1
|
7336 class="cmtt-8"> 256,</span><span
|
Chris@1
|
7337 class="cmtt-8"> 128,</span><span
|
Chris@1
|
7338 class="cmtt-8"> 86,</span><span
|
Chris@1
|
7339 class="cmtt-8"> 64</span><span
|
Chris@1
|
7340 class="cmtt-8"> </span><span
|
Chris@1
|
7341 class="cmsy-8">}</span><span
|
Chris@1
|
7342 class="cmtt-8"> element</span><span
|
Chris@1
|
7343 class="cmtt-8"> ([floor1_multiplier]-1)</span>
|
Chris@1
|
7344 <br class="fancyvrb" /><a
|
Chris@1
|
7345 id="x1-101004r2"></a><span
|
Chris@1
|
7346 class="cmr-6">2</span><span
|
Chris@1
|
7347 class="cmtt-8"> </span><span
|
Chris@1
|
7348 class="cmtt-8"> </span><span
|
Chris@1
|
7349 class="cmtt-8"> </span><span
|
Chris@1
|
7350 class="cmtt-8"> 2)</span><span
|
Chris@1
|
7351 class="cmtt-8"> vector</span><span
|
Chris@1
|
7352 class="cmtt-8"> [floor1_step2_flag]</span><span
|
Chris@1
|
7353 class="cmtt-8"> element</span><span
|
Chris@1
|
7354 class="cmtt-8"> [0]</span><span
|
Chris@1
|
7355 class="cmtt-8"> =</span><span
|
Chris@1
|
7356 class="cmtt-8"> set</span>
|
Chris@1
|
7357 <br class="fancyvrb" /><a
|
Chris@1
|
7358 id="x1-101006r3"></a><span
|
Chris@1
|
7359 class="cmr-6">3</span><span
|
Chris@1
|
7360 class="cmtt-8"> </span><span
|
Chris@1
|
7361 class="cmtt-8"> </span><span
|
Chris@1
|
7362 class="cmtt-8"> </span><span
|
Chris@1
|
7363 class="cmtt-8"> 3)</span><span
|
Chris@1
|
7364 class="cmtt-8"> vector</span><span
|
Chris@1
|
7365 class="cmtt-8"> [floor1_step2_flag]</span><span
|
Chris@1
|
7366 class="cmtt-8"> element</span><span
|
Chris@1
|
7367 class="cmtt-8"> [1]</span><span
|
Chris@1
|
7368 class="cmtt-8"> =</span><span
|
Chris@1
|
7369 class="cmtt-8"> set</span>
|
Chris@1
|
7370 <br class="fancyvrb" /><a
|
Chris@1
|
7371 id="x1-101008r4"></a><span
|
Chris@1
|
7372 class="cmr-6">4</span><span
|
Chris@1
|
7373 class="cmtt-8"> </span><span
|
Chris@1
|
7374 class="cmtt-8"> </span><span
|
Chris@1
|
7375 class="cmtt-8"> </span><span
|
Chris@1
|
7376 class="cmtt-8"> 4)</span><span
|
Chris@1
|
7377 class="cmtt-8"> vector</span><span
|
Chris@1
|
7378 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
7379 class="cmtt-8"> element</span><span
|
Chris@1
|
7380 class="cmtt-8"> [0]</span><span
|
Chris@1
|
7381 class="cmtt-8"> =</span><span
|
Chris@1
|
7382 class="cmtt-8"> vector</span><span
|
Chris@1
|
7383 class="cmtt-8"> [floor1_Y]</span><span
|
Chris@1
|
7384 class="cmtt-8"> element</span><span
|
Chris@1
|
7385 class="cmtt-8"> [0]</span>
|
Chris@1
|
7386 <br class="fancyvrb" /><a
|
Chris@1
|
7387 id="x1-101010r5"></a><span
|
Chris@1
|
7388 class="cmr-6">5</span><span
|
Chris@1
|
7389 class="cmtt-8"> </span><span
|
Chris@1
|
7390 class="cmtt-8"> </span><span
|
Chris@1
|
7391 class="cmtt-8"> </span><span
|
Chris@1
|
7392 class="cmtt-8"> 5)</span><span
|
Chris@1
|
7393 class="cmtt-8"> vector</span><span
|
Chris@1
|
7394 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
7395 class="cmtt-8"> element</span><span
|
Chris@1
|
7396 class="cmtt-8"> [1]</span><span
|
Chris@1
|
7397 class="cmtt-8"> =</span><span
|
Chris@1
|
7398 class="cmtt-8"> vector</span><span
|
Chris@1
|
7399 class="cmtt-8"> [floor1_Y]</span><span
|
Chris@1
|
7400 class="cmtt-8"> element</span><span
|
Chris@1
|
7401 class="cmtt-8"> [1]</span>
|
Chris@1
|
7402 <br class="fancyvrb" /><a
|
Chris@1
|
7403 id="x1-101012r6"></a><span
|
Chris@1
|
7404 class="cmr-6">6</span><span
|
Chris@1
|
7405 class="cmtt-8"> </span><span
|
Chris@1
|
7406 class="cmtt-8"> </span><span
|
Chris@1
|
7407 class="cmtt-8"> </span><span
|
Chris@1
|
7408 class="cmtt-8"> 6)</span><span
|
Chris@1
|
7409 class="cmtt-8"> iterate</span><span
|
Chris@1
|
7410 class="cmtt-8"> [i]</span><span
|
Chris@1
|
7411 class="cmtt-8"> over</span><span
|
Chris@1
|
7412 class="cmtt-8"> the</span><span
|
Chris@1
|
7413 class="cmtt-8"> range</span><span
|
Chris@1
|
7414 class="cmtt-8"> 2</span><span
|
Chris@1
|
7415 class="cmtt-8"> ...</span><span
|
Chris@1
|
7416 class="cmtt-8"> [floor1_values]-1</span><span
|
Chris@1
|
7417 class="cmtt-8"> </span><span
|
Chris@1
|
7418 class="cmsy-8">{</span>
|
Chris@1
|
7419 <br class="fancyvrb" /><a
|
Chris@1
|
7420 id="x1-101014r7"></a><span
|
Chris@1
|
7421 class="cmr-6">7</span><span
|
Chris@1
|
7422 class="cmtt-8"> </span><span
|
Chris@1
|
7423 class="cmtt-8"> </span>
|
Chris@1
|
7424 <br class="fancyvrb" /><a
|
Chris@1
|
7425 id="x1-101016r8"></a><span
|
Chris@1
|
7426 class="cmr-6">8</span><span
|
Chris@1
|
7427 class="cmtt-8"> </span><span
|
Chris@1
|
7428 class="cmtt-8"> </span><span
|
Chris@1
|
7429 class="cmtt-8"> </span><span
|
Chris@1
|
7430 class="cmtt-8"> </span><span
|
Chris@1
|
7431 class="cmtt-8"> </span><span
|
Chris@1
|
7432 class="cmtt-8"> </span><span
|
Chris@1
|
7433 class="cmtt-8"> </span><span
|
Chris@1
|
7434 class="cmtt-8"> </span><span
|
Chris@1
|
7435 class="cmtt-8"> 7)</span><span
|
Chris@1
|
7436 class="cmtt-8"> [low_neighbor_offset]</span><span
|
Chris@1
|
7437 class="cmtt-8"> =</span><span
|
Chris@1
|
7438 class="cmtt-8"> </span><a
|
Chris@1
|
7439 href="#x1-1200009.2.4"><span
|
Chris@1
|
7440 class="cmtt-8">low_neighbor</span></a><span
|
Chris@1
|
7441 class="cmtt-8">([floor1_X_list],[i])</span>
|
Chris@1
|
7442 <br class="fancyvrb" /><a
|
Chris@1
|
7443 id="x1-101018r9"></a><span
|
Chris@1
|
7444 class="cmr-6">9</span><span
|
Chris@1
|
7445 class="cmtt-8"> </span><span
|
Chris@1
|
7446 class="cmtt-8"> </span><span
|
Chris@1
|
7447 class="cmtt-8"> </span><span
|
Chris@1
|
7448 class="cmtt-8"> </span><span
|
Chris@1
|
7449 class="cmtt-8"> </span><span
|
Chris@1
|
7450 class="cmtt-8"> </span><span
|
Chris@1
|
7451 class="cmtt-8"> </span><span
|
Chris@1
|
7452 class="cmtt-8"> </span><span
|
Chris@1
|
7453 class="cmtt-8"> 8)</span><span
|
Chris@1
|
7454 class="cmtt-8"> [high_neighbor_offset]</span><span
|
Chris@1
|
7455 class="cmtt-8"> =</span><span
|
Chris@1
|
7456 class="cmtt-8"> </span><a
|
Chris@1
|
7457 href="#x1-1210009.2.5"><span
|
Chris@1
|
7458 class="cmtt-8">high_neighbor</span></a><span
|
Chris@1
|
7459 class="cmtt-8">([floor1_X_list],[i])</span>
|
Chris@1
|
7460 <br class="fancyvrb" /><a
|
Chris@1
|
7461 id="x1-101020r10"></a><span
|
Chris@1
|
7462 class="cmr-6">10</span><span
|
Chris@1
|
7463 class="cmtt-8"> </span><span
|
Chris@1
|
7464 class="cmtt-8"> </span>
|
Chris@1
|
7465 <br class="fancyvrb" /><a
|
Chris@1
|
7466 id="x1-101022r11"></a><span
|
Chris@1
|
7467 class="cmr-6">11</span><span
|
Chris@1
|
7468 class="cmtt-8"> </span><span
|
Chris@1
|
7469 class="cmtt-8"> </span><span
|
Chris@1
|
7470 class="cmtt-8"> </span><span
|
Chris@1
|
7471 class="cmtt-8"> </span><span
|
Chris@1
|
7472 class="cmtt-8"> </span><span
|
Chris@1
|
7473 class="cmtt-8"> </span><span
|
Chris@1
|
7474 class="cmtt-8"> </span><span
|
Chris@1
|
7475 class="cmtt-8"> </span><span
|
Chris@1
|
7476 class="cmtt-8"> 9)</span><span
|
Chris@1
|
7477 class="cmtt-8"> [predicted]</span><span
|
Chris@1
|
7478 class="cmtt-8"> =</span><span
|
Chris@1
|
7479 class="cmtt-8"> </span><a
|
Chris@1
|
7480 href="#x1-1220009.2.6"><span
|
Chris@1
|
7481 class="cmtt-8">render_point</span></a><span
|
Chris@1
|
7482 class="cmtt-8">(</span><span
|
Chris@1
|
7483 class="cmtt-8"> vector</span><span
|
Chris@1
|
7484 class="cmtt-8"> [floor1_X_list]</span><span
|
Chris@1
|
7485 class="cmtt-8"> element</span><span
|
Chris@1
|
7486 class="cmtt-8"> [low_neighbor_offset],</span>
|
Chris@1
|
7487 <br class="fancyvrb" /><a
|
Chris@1
|
7488 id="x1-101024r12"></a><span
|
Chris@1
|
7489 class="cmr-6">12</span><span
|
Chris@1
|
7490 class="cmtt-8"> </span><span
|
Chris@1
|
7491 class="cmtt-8">  </span><span
|
Chris@1
|
7492 class="cmtt-8"> </span><span
|
Chris@1
|
7493 class="cmtt-8"> </span><span
|
Chris@1
|
7494 class="cmtt-8"> </span><span
|
Chris@1
|
7495 class="cmtt-8"> </span><span
|
Chris@1
|
7496 class="cmtt-8"> </span><span
|
Chris@1
|
7497 class="cmtt-8"> vector</span><span
|
Chris@1
|
7498 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
7499 class="cmtt-8"> element</span><span
|
Chris@1
|
7500 class="cmtt-8"> [low_neighbor_offset],</span>
|
Chris@1
|
7501 <br class="fancyvrb" /><a
|
Chris@1
|
7502 id="x1-101026r13"></a><span
|
Chris@1
|
7503 class="cmr-6">13</span><span
|
Chris@1
|
7504 class="cmtt-8"> </span><span
|
Chris@1
|
7505 class="cmtt-8"> </span><span
|
Chris@1
|
7506 class="cmtt-8"> </span><span
|
Chris@1
|
7507 class="cmtt-8"> </span><span
|
Chris@1
|
7508 class="cmtt-8"> </span><span
|
Chris@1
|
7509 class="cmtt-8"> </span><span
|
Chris@1
|
7510 class="cmtt-8"> </span><span
|
Chris@1
|
7511 class="cmtt-8"> </span><span
|
Chris@1
|
7512 class="cmtt-8"> </span><span
|
Chris@1
|
7513 class="cmtt-8"> </span><span
|
Chris@1
|
7514 class="cmtt-8"> </span><span
|
Chris@1
|
7515 class="cmtt-8"> </span><span
|
Chris@1
|
7516 class="cmtt-8"> </span><span
|
Chris@1
|
7517 class="cmtt-8"> </span><span
|
Chris@1
|
7518 class="cmtt-8"> </span><span
|
Chris@1
|
7519 class="cmtt-8"> </span><span
|
Chris@1
|
7520 class="cmtt-8"> </span><span
|
Chris@1
|
7521 class="cmtt-8"> </span><span
|
Chris@1
|
7522 class="cmtt-8"> </span><span
|
Chris@1
|
7523 class="cmtt-8"> </span><span
|
Chris@1
|
7524 class="cmtt-8"> </span><span
|
Chris@1
|
7525 class="cmtt-8"> </span><span
|
Chris@1
|
7526 class="cmtt-8"> </span><span
|
Chris@1
|
7527 class="cmtt-8"> </span><span
|
Chris@1
|
7528 class="cmtt-8"> </span><span
|
Chris@1
|
7529 class="cmtt-8"> </span><span
|
Chris@1
|
7530 class="cmtt-8"> </span><span
|
Chris@1
|
7531 class="cmtt-8"> </span><span
|
Chris@1
|
7532 class="cmtt-8"> </span><span
|
Chris@1
|
7533 class="cmtt-8"> </span><span
|
Chris@1
|
7534 class="cmtt-8"> </span><span
|
Chris@1
|
7535 class="cmtt-8"> </span><span
|
Chris@1
|
7536 class="cmtt-8"> </span><span
|
Chris@1
|
7537 class="cmtt-8"> </span><span
|
Chris@1
|
7538 class="cmtt-8"> </span><span
|
Chris@1
|
7539 class="cmtt-8"> </span><span
|
Chris@1
|
7540 class="cmtt-8"> </span><span
|
Chris@1
|
7541 class="cmtt-8"> </span><span
|
Chris@1
|
7542 class="cmtt-8"> </span><span
|
Chris@1
|
7543 class="cmtt-8"> vector</span><span
|
Chris@1
|
7544 class="cmtt-8"> [floor1_X_list]</span><span
|
Chris@1
|
7545 class="cmtt-8"> element</span><span
|
Chris@1
|
7546 class="cmtt-8"> [high_neighbor_offset],</span>
|
Chris@1
|
7547 <br class="fancyvrb" /><a
|
Chris@1
|
7548 id="x1-101028r14"></a><span
|
Chris@1
|
7549 class="cmr-6">14</span><span
|
Chris@1
|
7550 class="cmtt-8"> </span><span
|
Chris@1
|
7551 class="cmtt-8">  </span><span
|
Chris@1
|
7552 class="cmtt-8"> </span><span
|
Chris@1
|
7553 class="cmtt-8"> </span><span
|
Chris@1
|
7554 class="cmtt-8"> </span><span
|
Chris@1
|
7555 class="cmtt-8"> </span><span
|
Chris@1
|
7556 class="cmtt-8"> </span><span
|
Chris@1
|
7557 class="cmtt-8"> vector</span><span
|
Chris@1
|
7558 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
7559 class="cmtt-8"> element</span><span
|
Chris@1
|
7560 class="cmtt-8"> [high_neighbor_offset],</span>
|
Chris@1
|
7561 <br class="fancyvrb" /><a
|
Chris@1
|
7562 id="x1-101030r15"></a><span
|
Chris@1
|
7563 class="cmr-6">15</span><span
|
Chris@1
|
7564 class="cmtt-8"> </span><span
|
Chris@1
|
7565 class="cmtt-8"> </span><span
|
Chris@1
|
7566 class="cmtt-8"> </span><span
|
Chris@1
|
7567 class="cmtt-8"> </span><span
|
Chris@1
|
7568 class="cmtt-8"> </span><span
|
Chris@1
|
7569 class="cmtt-8"> </span><span
|
Chris@1
|
7570 class="cmtt-8"> </span><span
|
Chris@1
|
7571 class="cmtt-8"> </span><span
|
Chris@1
|
7572 class="cmtt-8"> </span><span
|
Chris@1
|
7573 class="cmtt-8"> </span><span
|
Chris@1
|
7574 class="cmtt-8"> </span><span
|
Chris@1
|
7575 class="cmtt-8"> </span><span
|
Chris@1
|
7576 class="cmtt-8"> </span><span
|
Chris@1
|
7577 class="cmtt-8"> </span><span
|
Chris@1
|
7578 class="cmtt-8"> </span><span
|
Chris@1
|
7579 class="cmtt-8"> </span><span
|
Chris@1
|
7580 class="cmtt-8"> </span><span
|
Chris@1
|
7581 class="cmtt-8"> </span><span
|
Chris@1
|
7582 class="cmtt-8"> </span><span
|
Chris@1
|
7583 class="cmtt-8"> </span><span
|
Chris@1
|
7584 class="cmtt-8"> </span><span
|
Chris@1
|
7585 class="cmtt-8"> </span><span
|
Chris@1
|
7586 class="cmtt-8"> </span><span
|
Chris@1
|
7587 class="cmtt-8"> </span><span
|
Chris@1
|
7588 class="cmtt-8"> </span><span
|
Chris@1
|
7589 class="cmtt-8"> </span><span
|
Chris@1
|
7590 class="cmtt-8"> </span><span
|
Chris@1
|
7591 class="cmtt-8"> </span><span
|
Chris@1
|
7592 class="cmtt-8"> </span><span
|
Chris@1
|
7593 class="cmtt-8"> </span><span
|
Chris@1
|
7594 class="cmtt-8"> </span><span
|
Chris@1
|
7595 class="cmtt-8"> </span><span
|
Chris@1
|
7596 class="cmtt-8"> </span><span
|
Chris@1
|
7597 class="cmtt-8"> </span><span
|
Chris@1
|
7598 class="cmtt-8"> </span><span
|
Chris@1
|
7599 class="cmtt-8"> </span><span
|
Chris@1
|
7600 class="cmtt-8"> </span><span
|
Chris@1
|
7601 class="cmtt-8"> </span><span
|
Chris@1
|
7602 class="cmtt-8"> </span><span
|
Chris@1
|
7603 class="cmtt-8"> vector</span><span
|
Chris@1
|
7604 class="cmtt-8"> [floor1_X_list]</span><span
|
Chris@1
|
7605 class="cmtt-8"> element</span><span
|
Chris@1
|
7606 class="cmtt-8"> [i]</span><span
|
Chris@1
|
7607 class="cmtt-8"> )</span>
|
Chris@1
|
7608 <br class="fancyvrb" /><a
|
Chris@1
|
7609 id="x1-101032r16"></a><span
|
Chris@1
|
7610 class="cmr-6">16</span><span
|
Chris@1
|
7611 class="cmtt-8"> </span><span
|
Chris@1
|
7612 class="cmtt-8"> </span>
|
Chris@1
|
7613 <br class="fancyvrb" /><a
|
Chris@1
|
7614 id="x1-101034r17"></a><span
|
Chris@1
|
7615 class="cmr-6">17</span><span
|
Chris@1
|
7616 class="cmtt-8"> </span><span
|
Chris@1
|
7617 class="cmtt-8"> </span><span
|
Chris@1
|
7618 class="cmtt-8"> </span><span
|
Chris@1
|
7619 class="cmtt-8"> </span><span
|
Chris@1
|
7620 class="cmtt-8"> </span><span
|
Chris@1
|
7621 class="cmtt-8"> </span><span
|
Chris@1
|
7622 class="cmtt-8"> </span><span
|
Chris@1
|
7623 class="cmtt-8"> 10)</span><span
|
Chris@1
|
7624 class="cmtt-8"> [val]</span><span
|
Chris@1
|
7625 class="cmtt-8"> =</span><span
|
Chris@1
|
7626 class="cmtt-8"> vector</span><span
|
Chris@1
|
7627 class="cmtt-8"> [floor1_Y]</span><span
|
Chris@1
|
7628 class="cmtt-8"> element</span><span
|
Chris@1
|
7629 class="cmtt-8"> [i]</span>
|
Chris@1
|
7630 <br class="fancyvrb" /><a
|
Chris@1
|
7631 id="x1-101036r18"></a><span
|
Chris@1
|
7632 class="cmr-6">18</span><span
|
Chris@1
|
7633 class="cmtt-8"> </span><span
|
Chris@1
|
7634 class="cmtt-8"> </span><span
|
Chris@1
|
7635 class="cmtt-8"> </span><span
|
Chris@1
|
7636 class="cmtt-8"> </span><span
|
Chris@1
|
7637 class="cmtt-8"> </span><span
|
Chris@1
|
7638 class="cmtt-8"> </span><span
|
Chris@1
|
7639 class="cmtt-8"> </span><span
|
Chris@1
|
7640 class="cmtt-8"> 11)</span><span
|
Chris@1
|
7641 class="cmtt-8"> [highroom]</span><span
|
Chris@1
|
7642 class="cmtt-8"> =</span><span
|
Chris@1
|
7643 class="cmtt-8"> [range]</span><span
|
Chris@1
|
7644 class="cmtt-8"> -</span><span
|
Chris@1
|
7645 class="cmtt-8"> [predicted]</span>
|
Chris@1
|
7646 <br class="fancyvrb" /><a
|
Chris@1
|
7647 id="x1-101038r19"></a><span
|
Chris@1
|
7648 class="cmr-6">19</span><span
|
Chris@1
|
7649 class="cmtt-8"> </span><span
|
Chris@1
|
7650 class="cmtt-8"> </span><span
|
Chris@1
|
7651 class="cmtt-8"> </span><span
|
Chris@1
|
7652 class="cmtt-8"> </span><span
|
Chris@1
|
7653 class="cmtt-8"> </span><span
|
Chris@1
|
7654 class="cmtt-8"> </span><span
|
Chris@1
|
7655 class="cmtt-8"> </span><span
|
Chris@1
|
7656 class="cmtt-8"> 12)</span><span
|
Chris@1
|
7657 class="cmtt-8"> [lowroom]</span><span
|
Chris@1
|
7658 class="cmtt-8"> </span><span
|
Chris@1
|
7659 class="cmtt-8"> =</span><span
|
Chris@1
|
7660 class="cmtt-8"> [predicted]</span>
|
Chris@1
|
7661 <br class="fancyvrb" /><a
|
Chris@1
|
7662 id="x1-101040r20"></a><span
|
Chris@1
|
7663 class="cmr-6">20</span><span
|
Chris@1
|
7664 class="cmtt-8"> </span><span
|
Chris@1
|
7665 class="cmtt-8"> </span><span
|
Chris@1
|
7666 class="cmtt-8"> </span><span
|
Chris@1
|
7667 class="cmtt-8"> </span><span
|
Chris@1
|
7668 class="cmtt-8"> </span><span
|
Chris@1
|
7669 class="cmtt-8"> </span><span
|
Chris@1
|
7670 class="cmtt-8"> </span><span
|
Chris@1
|
7671 class="cmtt-8"> 13)</span><span
|
Chris@1
|
7672 class="cmtt-8"> if</span><span
|
Chris@1
|
7673 class="cmtt-8"> (</span><span
|
Chris@1
|
7674 class="cmtt-8"> [highroom]</span><span
|
Chris@1
|
7675 class="cmtt-8"> is</span><span
|
Chris@1
|
7676 class="cmtt-8"> less</span><span
|
Chris@1
|
7677 class="cmtt-8"> than</span><span
|
Chris@1
|
7678 class="cmtt-8"> [lowroom]</span><span
|
Chris@1
|
7679 class="cmtt-8"> )</span><span
|
Chris@1
|
7680 class="cmtt-8"> </span><span
|
Chris@1
|
7681 class="cmsy-8">{</span>
|
Chris@1
|
7682 <br class="fancyvrb" /><a
|
Chris@1
|
7683 id="x1-101042r21"></a><span
|
Chris@1
|
7684 class="cmr-6">21</span><span
|
Chris@1
|
7685 class="cmtt-8"> </span><span
|
Chris@1
|
7686 class="cmtt-8"> </span>
|
Chris@1
|
7687 <br class="fancyvrb" /><a
|
Chris@1
|
7688 id="x1-101044r22"></a><span
|
Chris@1
|
7689 class="cmr-6">22</span><span
|
Chris@1
|
7690 class="cmtt-8"> </span><span
|
Chris@1
|
7691 class="cmtt-8"> </span><span
|
Chris@1
|
7692 class="cmtt-8"> </span><span
|
Chris@1
|
7693 class="cmtt-8"> </span><span
|
Chris@1
|
7694 class="cmtt-8"> </span><span
|
Chris@1
|
7695 class="cmtt-8"> </span><span
|
Chris@1
|
7696 class="cmtt-8"> </span><span
|
Chris@1
|
7697 class="cmtt-8"> </span><span
|
Chris@1
|
7698 class="cmtt-8"> </span><span
|
Chris@1
|
7699 class="cmtt-8"> </span><span
|
Chris@1
|
7700 class="cmtt-8"> </span><span
|
Chris@1
|
7701 class="cmtt-8"> </span><span
|
Chris@1
|
7702 class="cmtt-8"> </span><span
|
Chris@1
|
7703 class="cmtt-8"> 14)</span><span
|
Chris@1
|
7704 class="cmtt-8"> [room]</span><span
|
Chris@1
|
7705 class="cmtt-8"> =</span><span
|
Chris@1
|
7706 class="cmtt-8"> [highroom]</span><span
|
Chris@1
|
7707 class="cmtt-8"> *</span><span
|
Chris@1
|
7708 class="cmtt-8"> 2</span>
|
Chris@1
|
7709 <br class="fancyvrb" /><a
|
Chris@1
|
7710 id="x1-101046r23"></a><span
|
Chris@1
|
7711 class="cmr-6">23</span><span
|
Chris@1
|
7712 class="cmtt-8"> </span><span
|
Chris@1
|
7713 class="cmtt-8"> </span>
|
Chris@1
|
7714 <br class="fancyvrb" /><a
|
Chris@1
|
7715 id="x1-101048r24"></a><span
|
Chris@1
|
7716 class="cmr-6">24</span><span
|
Chris@1
|
7717 class="cmtt-8"> </span><span
|
Chris@1
|
7718 class="cmtt-8"> </span><span
|
Chris@1
|
7719 class="cmtt-8"> </span><span
|
Chris@1
|
7720 class="cmtt-8"> </span><span
|
Chris@1
|
7721 class="cmtt-8"> </span><span
|
Chris@1
|
7722 class="cmtt-8"> </span><span
|
Chris@1
|
7723 class="cmtt-8"> </span><span
|
Chris@1
|
7724 class="cmtt-8"> </span><span
|
Chris@1
|
7725 class="cmtt-8"> </span><span
|
Chris@1
|
7726 class="cmtt-8"> </span><span
|
Chris@1
|
7727 class="cmtt-8"> </span><span
|
Chris@1
|
7728 class="cmtt-8"> </span><span
|
Chris@1
|
7729 class="cmsy-8">}</span><span
|
Chris@1
|
7730 class="cmtt-8"> else</span><span
|
Chris@1
|
7731 class="cmtt-8"> [highroom]</span><span
|
Chris@1
|
7732 class="cmtt-8"> is</span><span
|
Chris@1
|
7733 class="cmtt-8"> not</span><span
|
Chris@1
|
7734 class="cmtt-8"> less</span><span
|
Chris@1
|
7735 class="cmtt-8"> than</span><span
|
Chris@1
|
7736 class="cmtt-8"> [lowroom]</span><span
|
Chris@1
|
7737 class="cmtt-8"> </span><span
|
Chris@1
|
7738 class="cmsy-8">{</span>
|
Chris@1
|
7739 <br class="fancyvrb" /><a
|
Chris@1
|
7740 id="x1-101050r25"></a><span
|
Chris@1
|
7741 class="cmr-6">25</span><span
|
Chris@1
|
7742 class="cmtt-8"> </span><span
|
Chris@1
|
7743 class="cmtt-8"> </span>
|
Chris@1
|
7744 <br class="fancyvrb" /><a
|
Chris@1
|
7745 id="x1-101052r26"></a><span
|
Chris@1
|
7746 class="cmr-6">26</span><span
|
Chris@1
|
7747 class="cmtt-8"> </span><span
|
Chris@1
|
7748 class="cmtt-8"> </span><span
|
Chris@1
|
7749 class="cmtt-8"> </span><span
|
Chris@1
|
7750 class="cmtt-8"> </span><span
|
Chris@1
|
7751 class="cmtt-8"> </span><span
|
Chris@1
|
7752 class="cmtt-8"> </span><span
|
Chris@1
|
7753 class="cmtt-8"> </span><span
|
Chris@1
|
7754 class="cmtt-8"> </span><span
|
Chris@1
|
7755 class="cmtt-8"> </span><span
|
Chris@1
|
7756 class="cmtt-8"> </span><span
|
Chris@1
|
7757 class="cmtt-8"> </span><span
|
Chris@1
|
7758 class="cmtt-8"> </span><span
|
Chris@1
|
7759 class="cmtt-8"> </span><span
|
Chris@1
|
7760 class="cmtt-8"> 15)</span><span
|
Chris@1
|
7761 class="cmtt-8"> [room]</span><span
|
Chris@1
|
7762 class="cmtt-8"> =</span><span
|
Chris@1
|
7763 class="cmtt-8"> [lowroom]</span><span
|
Chris@1
|
7764 class="cmtt-8"> *</span><span
|
Chris@1
|
7765 class="cmtt-8"> 2</span>
|
Chris@1
|
7766 <br class="fancyvrb" /><a
|
Chris@1
|
7767 id="x1-101054r27"></a><span
|
Chris@1
|
7768 class="cmr-6">27</span><span
|
Chris@1
|
7769 class="cmtt-8"> </span><span
|
Chris@1
|
7770 class="cmtt-8"> </span>
|
Chris@1
|
7771 <br class="fancyvrb" /><a
|
Chris@1
|
7772 id="x1-101056r28"></a><span
|
Chris@1
|
7773 class="cmr-6">28</span><span
|
Chris@1
|
7774 class="cmtt-8"> </span><span
|
Chris@1
|
7775 class="cmtt-8"> </span><span
|
Chris@1
|
7776 class="cmtt-8"> </span><span
|
Chris@1
|
7777 class="cmtt-8"> </span><span
|
Chris@1
|
7778 class="cmtt-8"> </span><span
|
Chris@1
|
7779 class="cmtt-8"> </span><span
|
Chris@1
|
7780 class="cmtt-8"> </span><span
|
Chris@1
|
7781 class="cmtt-8"> </span><span
|
Chris@1
|
7782 class="cmtt-8"> </span><span
|
Chris@1
|
7783 class="cmtt-8"> </span><span
|
Chris@1
|
7784 class="cmtt-8"> </span><span
|
Chris@1
|
7785 class="cmtt-8"> </span><span
|
Chris@1
|
7786 class="cmsy-8">}</span>
|
Chris@1
|
7787 <br class="fancyvrb" /><a
|
Chris@1
|
7788 id="x1-101058r29"></a><span
|
Chris@1
|
7789 class="cmr-6">29</span><span
|
Chris@1
|
7790 class="cmtt-8"> </span><span
|
Chris@1
|
7791 class="cmtt-8"> </span>
|
Chris@1
|
7792 <br class="fancyvrb" /><a
|
Chris@1
|
7793 id="x1-101060r30"></a><span
|
Chris@1
|
7794 class="cmr-6">30</span><span
|
Chris@1
|
7795 class="cmtt-8"> </span><span
|
Chris@1
|
7796 class="cmtt-8"> </span><span
|
Chris@1
|
7797 class="cmtt-8"> </span><span
|
Chris@1
|
7798 class="cmtt-8"> </span><span
|
Chris@1
|
7799 class="cmtt-8"> </span><span
|
Chris@1
|
7800 class="cmtt-8"> </span><span
|
Chris@1
|
7801 class="cmtt-8"> </span><span
|
Chris@1
|
7802 class="cmtt-8"> 16)</span><span
|
Chris@1
|
7803 class="cmtt-8"> if</span><span
|
Chris@1
|
7804 class="cmtt-8"> (</span><span
|
Chris@1
|
7805 class="cmtt-8"> [val]</span><span
|
Chris@1
|
7806 class="cmtt-8"> is</span><span
|
Chris@1
|
7807 class="cmtt-8"> nonzero</span><span
|
Chris@1
|
7808 class="cmtt-8"> )</span><span
|
Chris@1
|
7809 class="cmtt-8"> </span><span
|
Chris@1
|
7810 class="cmsy-8">{</span>
|
Chris@1
|
7811 <br class="fancyvrb" /><a
|
Chris@1
|
7812 id="x1-101062r31"></a><span
|
Chris@1
|
7813 class="cmr-6">31</span><span
|
Chris@1
|
7814 class="cmtt-8"> </span><span
|
Chris@1
|
7815 class="cmtt-8"> </span>
|
Chris@1
|
7816 <br class="fancyvrb" /><a
|
Chris@1
|
7817 id="x1-101064r32"></a><span
|
Chris@1
|
7818 class="cmr-6">32</span><span
|
Chris@1
|
7819 class="cmtt-8"> </span><span
|
Chris@1
|
7820 class="cmtt-8"> </span><span
|
Chris@1
|
7821 class="cmtt-8"> </span><span
|
Chris@1
|
7822 class="cmtt-8"> </span><span
|
Chris@1
|
7823 class="cmtt-8"> </span><span
|
Chris@1
|
7824 class="cmtt-8"> </span><span
|
Chris@1
|
7825 class="cmtt-8"> </span><span
|
Chris@1
|
7826 class="cmtt-8"> </span><span
|
Chris@1
|
7827 class="cmtt-8"> </span><span
|
Chris@1
|
7828 class="cmtt-8"> </span><span
|
Chris@1
|
7829 class="cmtt-8"> </span><span
|
Chris@1
|
7830 class="cmtt-8"> </span><span
|
Chris@1
|
7831 class="cmtt-8"> </span><span
|
Chris@1
|
7832 class="cmtt-8"> 17)</span><span
|
Chris@1
|
7833 class="cmtt-8"> vector</span><span
|
Chris@1
|
7834 class="cmtt-8"> [floor1_step2_flag]</span><span
|
Chris@1
|
7835 class="cmtt-8"> element</span><span
|
Chris@1
|
7836 class="cmtt-8"> [low_neighbor_offset]</span><span
|
Chris@1
|
7837 class="cmtt-8"> =</span><span
|
Chris@1
|
7838 class="cmtt-8"> set</span>
|
Chris@1
|
7839 <br class="fancyvrb" /><a
|
Chris@1
|
7840 id="x1-101066r33"></a><span
|
Chris@1
|
7841 class="cmr-6">33</span><span
|
Chris@1
|
7842 class="cmtt-8"> </span><span
|
Chris@1
|
7843 class="cmtt-8"> </span><span
|
Chris@1
|
7844 class="cmtt-8"> </span><span
|
Chris@1
|
7845 class="cmtt-8"> </span><span
|
Chris@1
|
7846 class="cmtt-8"> </span><span
|
Chris@1
|
7847 class="cmtt-8"> </span><span
|
Chris@1
|
7848 class="cmtt-8"> </span><span
|
Chris@1
|
7849 class="cmtt-8"> </span><span
|
Chris@1
|
7850 class="cmtt-8"> </span><span
|
Chris@1
|
7851 class="cmtt-8"> </span><span
|
Chris@1
|
7852 class="cmtt-8"> </span><span
|
Chris@1
|
7853 class="cmtt-8"> </span><span
|
Chris@1
|
7854 class="cmtt-8"> </span><span
|
Chris@1
|
7855 class="cmtt-8"> 18)</span><span
|
Chris@1
|
7856 class="cmtt-8"> vector</span><span
|
Chris@1
|
7857 class="cmtt-8"> [floor1_step2_flag]</span><span
|
Chris@1
|
7858 class="cmtt-8"> element</span><span
|
Chris@1
|
7859 class="cmtt-8"> [high_neighbor_offset]</span><span
|
Chris@1
|
7860 class="cmtt-8"> =</span><span
|
Chris@1
|
7861 class="cmtt-8"> set</span>
|
Chris@1
|
7862 <br class="fancyvrb" /><a
|
Chris@1
|
7863 id="x1-101068r34"></a><span
|
Chris@1
|
7864 class="cmr-6">34</span><span
|
Chris@1
|
7865 class="cmtt-8"> </span><span
|
Chris@1
|
7866 class="cmtt-8"> </span><span
|
Chris@1
|
7867 class="cmtt-8"> </span><span
|
Chris@1
|
7868 class="cmtt-8"> </span><span
|
Chris@1
|
7869 class="cmtt-8"> </span><span
|
Chris@1
|
7870 class="cmtt-8"> </span><span
|
Chris@1
|
7871 class="cmtt-8"> </span><span
|
Chris@1
|
7872 class="cmtt-8"> </span><span
|
Chris@1
|
7873 class="cmtt-8"> </span><span
|
Chris@1
|
7874 class="cmtt-8"> </span><span
|
Chris@1
|
7875 class="cmtt-8"> </span><span
|
Chris@1
|
7876 class="cmtt-8"> </span><span
|
Chris@1
|
7877 class="cmtt-8"> </span><span
|
Chris@1
|
7878 class="cmtt-8"> 19)</span><span
|
Chris@1
|
7879 class="cmtt-8"> vector</span><span
|
Chris@1
|
7880 class="cmtt-8"> [floor1_step2_flag]</span><span
|
Chris@1
|
7881 class="cmtt-8"> element</span><span
|
Chris@1
|
7882 class="cmtt-8"> [i]</span><span
|
Chris@1
|
7883 class="cmtt-8"> =</span><span
|
Chris@1
|
7884 class="cmtt-8"> set</span>
|
Chris@1
|
7885 <br class="fancyvrb" /><a
|
Chris@1
|
7886 id="x1-101070r35"></a><span
|
Chris@1
|
7887 class="cmr-6">35</span><span
|
Chris@1
|
7888 class="cmtt-8"> </span><span
|
Chris@1
|
7889 class="cmtt-8"> </span><span
|
Chris@1
|
7890 class="cmtt-8"> </span><span
|
Chris@1
|
7891 class="cmtt-8"> </span><span
|
Chris@1
|
7892 class="cmtt-8"> </span><span
|
Chris@1
|
7893 class="cmtt-8"> </span><span
|
Chris@1
|
7894 class="cmtt-8"> </span><span
|
Chris@1
|
7895 class="cmtt-8"> </span><span
|
Chris@1
|
7896 class="cmtt-8"> </span><span
|
Chris@1
|
7897 class="cmtt-8"> </span><span
|
Chris@1
|
7898 class="cmtt-8"> </span><span
|
Chris@1
|
7899 class="cmtt-8"> </span><span
|
Chris@1
|
7900 class="cmtt-8"> </span><span
|
Chris@1
|
7901 class="cmtt-8"> 20)</span><span
|
Chris@1
|
7902 class="cmtt-8"> if</span><span
|
Chris@1
|
7903 class="cmtt-8"> (</span><span
|
Chris@1
|
7904 class="cmtt-8"> [val]</span><span
|
Chris@1
|
7905 class="cmtt-8"> is</span><span
|
Chris@1
|
7906 class="cmtt-8"> greater</span><span
|
Chris@1
|
7907 class="cmtt-8"> than</span><span
|
Chris@1
|
7908 class="cmtt-8"> or</span><span
|
Chris@1
|
7909 class="cmtt-8"> equal</span><span
|
Chris@1
|
7910 class="cmtt-8"> to</span><span
|
Chris@1
|
7911 class="cmtt-8"> [room]</span><span
|
Chris@1
|
7912 class="cmtt-8"> )</span><span
|
Chris@1
|
7913 class="cmtt-8"> </span><span
|
Chris@1
|
7914 class="cmsy-8">{</span>
|
Chris@1
|
7915 <br class="fancyvrb" /><a
|
Chris@1
|
7916 id="x1-101072r36"></a><span
|
Chris@1
|
7917 class="cmr-6">36</span><span
|
Chris@1
|
7918 class="cmtt-8"> </span><span
|
Chris@1
|
7919 class="cmtt-8"> </span>
|
Chris@1
|
7920 <br class="fancyvrb" /><a
|
Chris@1
|
7921 id="x1-101074r37"></a><span
|
Chris@1
|
7922 class="cmr-6">37</span><span
|
Chris@1
|
7923 class="cmtt-8"> </span><span
|
Chris@1
|
7924 class="cmtt-8"> </span><span
|
Chris@1
|
7925 class="cmtt-8"> </span><span
|
Chris@1
|
7926 class="cmtt-8"> </span><span
|
Chris@1
|
7927 class="cmtt-8"> </span><span
|
Chris@1
|
7928 class="cmtt-8"> </span><span
|
Chris@1
|
7929 class="cmtt-8"> </span><span
|
Chris@1
|
7930 class="cmtt-8"> </span><span
|
Chris@1
|
7931 class="cmtt-8"> </span><span
|
Chris@1
|
7932 class="cmtt-8"> </span><span
|
Chris@1
|
7933 class="cmtt-8"> </span><span
|
Chris@1
|
7934 class="cmtt-8"> </span><span
|
Chris@1
|
7935 class="cmtt-8"> </span><span
|
Chris@1
|
7936 class="cmtt-8"> </span><span
|
Chris@1
|
7937 class="cmtt-8"> </span><span
|
Chris@1
|
7938 class="cmtt-8"> </span><span
|
Chris@1
|
7939 class="cmtt-8"> </span><span
|
Chris@1
|
7940 class="cmtt-8"> </span><span
|
Chris@1
|
7941 class="cmtt-8"> </span><span
|
Chris@1
|
7942 class="cmtt-8"> 21)</span><span
|
Chris@1
|
7943 class="cmtt-8"> if</span><span
|
Chris@1
|
7944 class="cmtt-8"> (</span><span
|
Chris@1
|
7945 class="cmtt-8"> [highroom]</span><span
|
Chris@1
|
7946 class="cmtt-8"> is</span><span
|
Chris@1
|
7947 class="cmtt-8"> greater</span><span
|
Chris@1
|
7948 class="cmtt-8"> than</span><span
|
Chris@1
|
7949 class="cmtt-8"> [lowroom]</span><span
|
Chris@1
|
7950 class="cmtt-8"> )</span><span
|
Chris@1
|
7951 class="cmtt-8"> </span><span
|
Chris@1
|
7952 class="cmsy-8">{</span>
|
Chris@1
|
7953 <br class="fancyvrb" /><a
|
Chris@1
|
7954 id="x1-101076r38"></a><span
|
Chris@1
|
7955 class="cmr-6">38</span><span
|
Chris@1
|
7956 class="cmtt-8"> </span><span
|
Chris@1
|
7957 class="cmtt-8"> </span>
|
Chris@1
|
7958 <br class="fancyvrb" /><a
|
Chris@1
|
7959 id="x1-101078r39"></a><span
|
Chris@1
|
7960 class="cmr-6">39</span><span
|
Chris@1
|
7961 class="cmtt-8"> </span><span
|
Chris@1
|
7962 class="cmtt-8"> </span><span
|
Chris@1
|
7963 class="cmtt-8"> </span><span
|
Chris@1
|
7964 class="cmtt-8"> </span><span
|
Chris@1
|
7965 class="cmtt-8"> </span><span
|
Chris@1
|
7966 class="cmtt-8"> </span><span
|
Chris@1
|
7967 class="cmtt-8"> </span><span
|
Chris@1
|
7968 class="cmtt-8"> </span><span
|
Chris@1
|
7969 class="cmtt-8"> </span><span
|
Chris@1
|
7970 class="cmtt-8"> </span><span
|
Chris@1
|
7971 class="cmtt-8"> </span><span
|
Chris@1
|
7972 class="cmtt-8"> </span><span
|
Chris@1
|
7973 class="cmtt-8"> </span><span
|
Chris@1
|
7974 class="cmtt-8"> </span><span
|
Chris@1
|
7975 class="cmtt-8"> </span><span
|
Chris@1
|
7976 class="cmtt-8"> </span><span
|
Chris@1
|
7977 class="cmtt-8"> </span><span
|
Chris@1
|
7978 class="cmtt-8"> </span><span
|
Chris@1
|
7979 class="cmtt-8"> </span><span
|
Chris@1
|
7980 class="cmtt-8"> </span><span
|
Chris@1
|
7981 class="cmtt-8"> </span><span
|
Chris@1
|
7982 class="cmtt-8"> </span><span
|
Chris@1
|
7983 class="cmtt-8"> </span><span
|
Chris@1
|
7984 class="cmtt-8"> </span><span
|
Chris@1
|
7985 class="cmtt-8"> </span><span
|
Chris@1
|
7986 class="cmtt-8"> 22)</span><span
|
Chris@1
|
7987 class="cmtt-8"> vector</span><span
|
Chris@1
|
7988 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
7989 class="cmtt-8"> element</span><span
|
Chris@1
|
7990 class="cmtt-8"> [i]</span><span
|
Chris@1
|
7991 class="cmtt-8"> =</span><span
|
Chris@1
|
7992 class="cmtt-8"> [val]</span><span
|
Chris@1
|
7993 class="cmtt-8"> -</span><span
|
Chris@1
|
7994 class="cmtt-8"> [lowroom]</span><span
|
Chris@1
|
7995 class="cmtt-8"> +</span><span
|
Chris@1
|
7996 class="cmtt-8"> [predicted]</span>
|
Chris@1
|
7997 <br class="fancyvrb" /><a
|
Chris@1
|
7998 id="x1-101080r40"></a><span
|
Chris@1
|
7999 class="cmr-6">40</span><span
|
Chris@1
|
8000 class="cmtt-8"> </span><span
|
Chris@1
|
8001 class="cmtt-8"> </span>
|
Chris@1
|
8002 <br class="fancyvrb" /><a
|
Chris@1
|
8003 id="x1-101082r41"></a><span
|
Chris@1
|
8004 class="cmr-6">41</span><span
|
Chris@1
|
8005 class="cmtt-8"> </span><span
|
Chris@1
|
8006 class="cmtt-8">  </span><span
|
Chris@1
|
8007 class="cmtt-8"> </span><span
|
Chris@1
|
8008 class="cmtt-8"> </span><span
|
Chris@1
|
8009 class="cmtt-8"> </span><span
|
Chris@1
|
8010 class="cmtt-8"> </span><span
|
Chris@1
|
8011 class="cmtt-8"> </span><span
|
Chris@1
|
8012 class="cmtt-8"> </span><span
|
Chris@1
|
8013 class="cmsy-8">}</span><span
|
Chris@1
|
8014 class="cmtt-8"> else</span><span
|
Chris@1
|
8015 class="cmtt-8"> [highroom]</span><span
|
Chris@1
|
8016 class="cmtt-8"> is</span><span
|
Chris@1
|
8017 class="cmtt-8"> not</span><span
|
Chris@1
|
8018 class="cmtt-8"> greater</span><span
|
Chris@1
|
8019 class="cmtt-8"> than</span><span
|
Chris@1
|
8020 class="cmtt-8"> [lowroom]</span><span
|
Chris@1
|
8021 class="cmtt-8"> </span><span
|
Chris@1
|
8022 class="cmsy-8">{</span>
|
Chris@1
|
8023 <br class="fancyvrb" /><a
|
Chris@1
|
8024 id="x1-101084r42"></a><span
|
Chris@1
|
8025 class="cmr-6">42</span><span
|
Chris@1
|
8026 class="cmtt-8"> </span><span
|
Chris@1
|
8027 class="cmtt-8"> </span>
|
Chris@1
|
8028 <br class="fancyvrb" /><a
|
Chris@1
|
8029 id="x1-101086r43"></a><span
|
Chris@1
|
8030 class="cmr-6">43</span><span
|
Chris@1
|
8031 class="cmtt-8"> </span><span
|
Chris@1
|
8032 class="cmtt-8"> </span><span
|
Chris@1
|
8033 class="cmtt-8"> </span><span
|
Chris@1
|
8034 class="cmtt-8"> </span><span
|
Chris@1
|
8035 class="cmtt-8"> </span><span
|
Chris@1
|
8036 class="cmtt-8"> </span><span
|
Chris@1
|
8037 class="cmtt-8"> </span><span
|
Chris@1
|
8038 class="cmtt-8"> </span><span
|
Chris@1
|
8039 class="cmtt-8"> </span><span
|
Chris@1
|
8040 class="cmtt-8"> </span><span
|
Chris@1
|
8041 class="cmtt-8"> </span><span
|
Chris@1
|
8042 class="cmtt-8"> </span><span
|
Chris@1
|
8043 class="cmtt-8"> </span><span
|
Chris@1
|
8044 class="cmtt-8"> </span><span
|
Chris@1
|
8045 class="cmtt-8"> </span><span
|
Chris@1
|
8046 class="cmtt-8"> </span><span
|
Chris@1
|
8047 class="cmtt-8"> </span><span
|
Chris@1
|
8048 class="cmtt-8"> </span><span
|
Chris@1
|
8049 class="cmtt-8"> </span><span
|
Chris@1
|
8050 class="cmtt-8"> </span><span
|
Chris@1
|
8051 class="cmtt-8"> </span><span
|
Chris@1
|
8052 class="cmtt-8"> </span><span
|
Chris@1
|
8053 class="cmtt-8"> </span><span
|
Chris@1
|
8054 class="cmtt-8"> </span><span
|
Chris@1
|
8055 class="cmtt-8"> </span><span
|
Chris@1
|
8056 class="cmtt-8"> 23)</span><span
|
Chris@1
|
8057 class="cmtt-8"> vector</span><span
|
Chris@1
|
8058 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
8059 class="cmtt-8"> element</span><span
|
Chris@1
|
8060 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8061 class="cmtt-8"> =</span><span
|
Chris@1
|
8062 class="cmtt-8"> [predicted]</span><span
|
Chris@1
|
8063 class="cmtt-8"> -</span><span
|
Chris@1
|
8064 class="cmtt-8"> [val]</span><span
|
Chris@1
|
8065 class="cmtt-8"> +</span><span
|
Chris@1
|
8066 class="cmtt-8"> [highroom]</span><span
|
Chris@1
|
8067 class="cmtt-8"> -</span><span
|
Chris@1
|
8068 class="cmtt-8"> 1</span>
|
Chris@1
|
8069 <br class="fancyvrb" /><a
|
Chris@1
|
8070 id="x1-101088r44"></a><span
|
Chris@1
|
8071 class="cmr-6">44</span><span
|
Chris@1
|
8072 class="cmtt-8"> </span><span
|
Chris@1
|
8073 class="cmtt-8"> </span>
|
Chris@1
|
8074 <br class="fancyvrb" /><a
|
Chris@1
|
8075 id="x1-101090r45"></a><span
|
Chris@1
|
8076 class="cmr-6">45</span><span
|
Chris@1
|
8077 class="cmtt-8"> </span><span
|
Chris@1
|
8078 class="cmtt-8"> </span><span
|
Chris@1
|
8079 class="cmtt-8"> </span><span
|
Chris@1
|
8080 class="cmtt-8"> </span><span
|
Chris@1
|
8081 class="cmtt-8"> </span><span
|
Chris@1
|
8082 class="cmtt-8"> </span><span
|
Chris@1
|
8083 class="cmtt-8"> </span><span
|
Chris@1
|
8084 class="cmtt-8"> </span><span
|
Chris@1
|
8085 class="cmtt-8"> </span><span
|
Chris@1
|
8086 class="cmtt-8"> </span><span
|
Chris@1
|
8087 class="cmtt-8"> </span><span
|
Chris@1
|
8088 class="cmtt-8"> </span><span
|
Chris@1
|
8089 class="cmtt-8"> </span><span
|
Chris@1
|
8090 class="cmtt-8"> </span><span
|
Chris@1
|
8091 class="cmtt-8"> </span><span
|
Chris@1
|
8092 class="cmtt-8"> </span><span
|
Chris@1
|
8093 class="cmtt-8"> </span><span
|
Chris@1
|
8094 class="cmtt-8"> </span><span
|
Chris@1
|
8095 class="cmtt-8"> </span><span
|
Chris@1
|
8096 class="cmtt-8"> </span><span
|
Chris@1
|
8097 class="cmtt-8"> </span><span
|
Chris@1
|
8098 class="cmtt-8"> </span><span
|
Chris@1
|
8099 class="cmtt-8"> </span><span
|
Chris@1
|
8100 class="cmtt-8"> </span><span
|
Chris@1
|
8101 class="cmsy-8">}</span>
|
Chris@1
|
8102 <br class="fancyvrb" /><a
|
Chris@1
|
8103 id="x1-101092r46"></a><span
|
Chris@1
|
8104 class="cmr-6">46</span><span
|
Chris@1
|
8105 class="cmtt-8"> </span><span
|
Chris@1
|
8106 class="cmtt-8"> </span>
|
Chris@1
|
8107 <br class="fancyvrb" /><a
|
Chris@1
|
8108 id="x1-101094r47"></a><span
|
Chris@1
|
8109 class="cmr-6">47</span><span
|
Chris@1
|
8110 class="cmtt-8"> </span><span
|
Chris@1
|
8111 class="cmtt-8"> </span><span
|
Chris@1
|
8112 class="cmtt-8"> </span><span
|
Chris@1
|
8113 class="cmtt-8"> </span><span
|
Chris@1
|
8114 class="cmtt-8"> </span><span
|
Chris@1
|
8115 class="cmtt-8"> </span><span
|
Chris@1
|
8116 class="cmtt-8"> </span><span
|
Chris@1
|
8117 class="cmtt-8"> </span><span
|
Chris@1
|
8118 class="cmtt-8"> </span><span
|
Chris@1
|
8119 class="cmtt-8"> </span><span
|
Chris@1
|
8120 class="cmtt-8"> </span><span
|
Chris@1
|
8121 class="cmtt-8"> </span><span
|
Chris@1
|
8122 class="cmtt-8"> </span><span
|
Chris@1
|
8123 class="cmtt-8"> </span><span
|
Chris@1
|
8124 class="cmtt-8"> </span><span
|
Chris@1
|
8125 class="cmtt-8"> </span><span
|
Chris@1
|
8126 class="cmtt-8"> </span><span
|
Chris@1
|
8127 class="cmtt-8"> </span><span
|
Chris@1
|
8128 class="cmsy-8">}</span><span
|
Chris@1
|
8129 class="cmtt-8"> else</span><span
|
Chris@1
|
8130 class="cmtt-8"> [val]</span><span
|
Chris@1
|
8131 class="cmtt-8"> is</span><span
|
Chris@1
|
8132 class="cmtt-8"> less</span><span
|
Chris@1
|
8133 class="cmtt-8"> than</span><span
|
Chris@1
|
8134 class="cmtt-8"> [room]</span><span
|
Chris@1
|
8135 class="cmtt-8"> </span><span
|
Chris@1
|
8136 class="cmsy-8">{</span>
|
Chris@1
|
8137 <br class="fancyvrb" /><a
|
Chris@1
|
8138 id="x1-101096r48"></a><span
|
Chris@1
|
8139 class="cmr-6">48</span><span
|
Chris@1
|
8140 class="cmtt-8"> </span><span
|
Chris@1
|
8141 class="cmtt-8"> </span>
|
Chris@1
|
8142 <br class="fancyvrb" /><a
|
Chris@1
|
8143 id="x1-101098r49"></a><span
|
Chris@1
|
8144 class="cmr-6">49</span><span
|
Chris@1
|
8145 class="cmtt-8"> </span><span
|
Chris@1
|
8146 class="cmtt-8"> </span><span
|
Chris@1
|
8147 class="cmtt-8"> </span><span
|
Chris@1
|
8148 class="cmtt-8"> </span><span
|
Chris@1
|
8149 class="cmtt-8"> </span><span
|
Chris@1
|
8150 class="cmtt-8"> </span><span
|
Chris@1
|
8151 class="cmtt-8"> </span><span
|
Chris@1
|
8152 class="cmtt-8"> </span><span
|
Chris@1
|
8153 class="cmtt-8"> </span><span
|
Chris@1
|
8154 class="cmtt-8"> </span><span
|
Chris@1
|
8155 class="cmtt-8"> </span><span
|
Chris@1
|
8156 class="cmtt-8"> </span><span
|
Chris@1
|
8157 class="cmtt-8"> </span><span
|
Chris@1
|
8158 class="cmtt-8"> </span><span
|
Chris@1
|
8159 class="cmtt-8"> </span><span
|
Chris@1
|
8160 class="cmtt-8"> </span><span
|
Chris@1
|
8161 class="cmtt-8"> </span><span
|
Chris@1
|
8162 class="cmtt-8"> </span><span
|
Chris@1
|
8163 class="cmtt-8"> </span><span
|
Chris@1
|
8164 class="cmtt-8"> </span><span
|
Chris@1
|
8165 class="cmtt-8"> </span><span
|
Chris@1
|
8166 class="cmtt-8"> 24)</span><span
|
Chris@1
|
8167 class="cmtt-8"> if</span><span
|
Chris@1
|
8168 class="cmtt-8"> ([val]</span><span
|
Chris@1
|
8169 class="cmtt-8"> is</span><span
|
Chris@1
|
8170 class="cmtt-8"> odd)</span><span
|
Chris@1
|
8171 class="cmtt-8"> </span><span
|
Chris@1
|
8172 class="cmsy-8">{</span>
|
Chris@1
|
8173 <br class="fancyvrb" /><a
|
Chris@1
|
8174 id="x1-101100r50"></a><span
|
Chris@1
|
8175 class="cmr-6">50</span><span
|
Chris@1
|
8176 class="cmtt-8"> </span><span
|
Chris@1
|
8177 class="cmtt-8"> </span>
|
Chris@1
|
8178 <br class="fancyvrb" /><a
|
Chris@1
|
8179 id="x1-101102r51"></a><span
|
Chris@1
|
8180 class="cmr-6">51</span><span
|
Chris@1
|
8181 class="cmtt-8"> </span><span
|
Chris@1
|
8182 class="cmtt-8"> </span><span
|
Chris@1
|
8183 class="cmtt-8"> </span><span
|
Chris@1
|
8184 class="cmtt-8"> </span><span
|
Chris@1
|
8185 class="cmtt-8"> </span><span
|
Chris@1
|
8186 class="cmtt-8"> </span><span
|
Chris@1
|
8187 class="cmtt-8"> </span><span
|
Chris@1
|
8188 class="cmtt-8"> </span><span
|
Chris@1
|
8189 class="cmtt-8"> </span><span
|
Chris@1
|
8190 class="cmtt-8"> </span><span
|
Chris@1
|
8191 class="cmtt-8"> </span><span
|
Chris@1
|
8192 class="cmtt-8"> </span><span
|
Chris@1
|
8193 class="cmtt-8"> </span><span
|
Chris@1
|
8194 class="cmtt-8"> </span><span
|
Chris@1
|
8195 class="cmtt-8"> </span><span
|
Chris@1
|
8196 class="cmtt-8"> </span><span
|
Chris@1
|
8197 class="cmtt-8"> </span><span
|
Chris@1
|
8198 class="cmtt-8"> </span><span
|
Chris@1
|
8199 class="cmtt-8"> </span><span
|
Chris@1
|
8200 class="cmtt-8"> </span><span
|
Chris@1
|
8201 class="cmtt-8"> </span><span
|
Chris@1
|
8202 class="cmtt-8"> </span><span
|
Chris@1
|
8203 class="cmtt-8"> </span><span
|
Chris@1
|
8204 class="cmtt-8"> </span><span
|
Chris@1
|
8205 class="cmtt-8"> </span><span
|
Chris@1
|
8206 class="cmtt-8"> 25)</span><span
|
Chris@1
|
8207 class="cmtt-8"> vector</span><span
|
Chris@1
|
8208 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
8209 class="cmtt-8"> element</span><span
|
Chris@1
|
8210 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8211 class="cmtt-8"> =</span>
|
Chris@1
|
8212 <br class="fancyvrb" /><a
|
Chris@1
|
8213 id="x1-101104r52"></a><span
|
Chris@1
|
8214 class="cmr-6">52</span><span
|
Chris@1
|
8215 class="cmtt-8"> </span><span
|
Chris@1
|
8216 class="cmtt-8"> </span><span
|
Chris@1
|
8217 class="cmtt-8"> </span><span
|
Chris@1
|
8218 class="cmtt-8"> </span><span
|
Chris@1
|
8219 class="cmtt-8"> </span><span
|
Chris@1
|
8220 class="cmtt-8"> </span><span
|
Chris@1
|
8221 class="cmtt-8"> </span><span
|
Chris@1
|
8222 class="cmtt-8"> </span><span
|
Chris@1
|
8223 class="cmtt-8"> </span><span
|
Chris@1
|
8224 class="cmtt-8"> </span><span
|
Chris@1
|
8225 class="cmtt-8"> </span><span
|
Chris@1
|
8226 class="cmtt-8"> </span><span
|
Chris@1
|
8227 class="cmtt-8"> </span><span
|
Chris@1
|
8228 class="cmtt-8"> </span><span
|
Chris@1
|
8229 class="cmtt-8"> </span><span
|
Chris@1
|
8230 class="cmtt-8"> </span><span
|
Chris@1
|
8231 class="cmtt-8"> </span><span
|
Chris@1
|
8232 class="cmtt-8"> </span><span
|
Chris@1
|
8233 class="cmtt-8"> </span><span
|
Chris@1
|
8234 class="cmtt-8"> </span><span
|
Chris@1
|
8235 class="cmtt-8"> </span><span
|
Chris@1
|
8236 class="cmtt-8"> </span><span
|
Chris@1
|
8237 class="cmtt-8"> </span><span
|
Chris@1
|
8238 class="cmtt-8"> </span><span
|
Chris@1
|
8239 class="cmtt-8"> </span><span
|
Chris@1
|
8240 class="cmtt-8"> </span><span
|
Chris@1
|
8241 class="cmtt-8"> </span><span
|
Chris@1
|
8242 class="cmtt-8"> </span><span
|
Chris@1
|
8243 class="cmtt-8"> </span><span
|
Chris@1
|
8244 class="cmtt-8"> [predicted]</span><span
|
Chris@1
|
8245 class="cmtt-8"> -</span><span
|
Chris@1
|
8246 class="cmtt-8"> (([val]</span><span
|
Chris@1
|
8247 class="cmtt-8"> +</span><span
|
Chris@1
|
8248 class="cmtt-8"> 1)</span><span
|
Chris@1
|
8249 class="cmtt-8"> divided</span><span
|
Chris@1
|
8250 class="cmtt-8"> by</span><span
|
Chris@1
|
8251 class="cmtt-8"> </span><span
|
Chris@1
|
8252 class="cmtt-8"> 2</span><span
|
Chris@1
|
8253 class="cmtt-8"> using</span><span
|
Chris@1
|
8254 class="cmtt-8"> integer</span><span
|
Chris@1
|
8255 class="cmtt-8"> division)</span>
|
Chris@1
|
8256 <br class="fancyvrb" /><a
|
Chris@1
|
8257 id="x1-101106r53"></a><span
|
Chris@1
|
8258 class="cmr-6">53</span><span
|
Chris@1
|
8259 class="cmtt-8"> </span><span
|
Chris@1
|
8260 class="cmtt-8"> </span>
|
Chris@1
|
8261 <br class="fancyvrb" /><a
|
Chris@1
|
8262 id="x1-101108r54"></a><span
|
Chris@1
|
8263 class="cmr-6">54</span><span
|
Chris@1
|
8264 class="cmtt-8"> </span><span
|
Chris@1
|
8265 class="cmtt-8"> </span><span
|
Chris@1
|
8266 class="cmtt-8"> </span><span
|
Chris@1
|
8267 class="cmtt-8"> </span><span
|
Chris@1
|
8268 class="cmtt-8"> </span><span
|
Chris@1
|
8269 class="cmtt-8"> </span><span
|
Chris@1
|
8270 class="cmtt-8"> </span><span
|
Chris@1
|
8271 class="cmtt-8"> </span><span
|
Chris@1
|
8272 class="cmtt-8"> </span><span
|
Chris@1
|
8273 class="cmtt-8"> </span><span
|
Chris@1
|
8274 class="cmtt-8"> </span><span
|
Chris@1
|
8275 class="cmtt-8"> </span><span
|
Chris@1
|
8276 class="cmtt-8"> </span><span
|
Chris@1
|
8277 class="cmtt-8"> </span><span
|
Chris@1
|
8278 class="cmtt-8"> </span><span
|
Chris@1
|
8279 class="cmtt-8"> </span><span
|
Chris@1
|
8280 class="cmtt-8"> </span><span
|
Chris@1
|
8281 class="cmtt-8"> </span><span
|
Chris@1
|
8282 class="cmtt-8"> </span><span
|
Chris@1
|
8283 class="cmtt-8"> </span><span
|
Chris@1
|
8284 class="cmtt-8"> </span><span
|
Chris@1
|
8285 class="cmtt-8"> </span><span
|
Chris@1
|
8286 class="cmtt-8"> </span><span
|
Chris@1
|
8287 class="cmtt-8"> </span><span
|
Chris@1
|
8288 class="cmsy-8">}</span><span
|
Chris@1
|
8289 class="cmtt-8"> else</span><span
|
Chris@1
|
8290 class="cmtt-8"> [val]</span><span
|
Chris@1
|
8291 class="cmtt-8"> is</span><span
|
Chris@1
|
8292 class="cmtt-8"> even</span><span
|
Chris@1
|
8293 class="cmtt-8"> </span><span
|
Chris@1
|
8294 class="cmsy-8">{</span>
|
Chris@1
|
8295 <br class="fancyvrb" /><a
|
Chris@1
|
8296 id="x1-101110r55"></a><span
|
Chris@1
|
8297 class="cmr-6">55</span><span
|
Chris@1
|
8298 class="cmtt-8"> </span><span
|
Chris@1
|
8299 class="cmtt-8"> </span>
|
Chris@1
|
8300 <br class="fancyvrb" /><a
|
Chris@1
|
8301 id="x1-101112r56"></a><span
|
Chris@1
|
8302 class="cmr-6">56</span><span
|
Chris@1
|
8303 class="cmtt-8"> </span><span
|
Chris@1
|
8304 class="cmtt-8"> </span><span
|
Chris@1
|
8305 class="cmtt-8"> </span><span
|
Chris@1
|
8306 class="cmtt-8"> </span><span
|
Chris@1
|
8307 class="cmtt-8"> </span><span
|
Chris@1
|
8308 class="cmtt-8"> </span><span
|
Chris@1
|
8309 class="cmtt-8"> </span><span
|
Chris@1
|
8310 class="cmtt-8"> </span><span
|
Chris@1
|
8311 class="cmtt-8"> </span><span
|
Chris@1
|
8312 class="cmtt-8"> </span><span
|
Chris@1
|
8313 class="cmtt-8"> </span><span
|
Chris@1
|
8314 class="cmtt-8"> </span><span
|
Chris@1
|
8315 class="cmtt-8"> </span><span
|
Chris@1
|
8316 class="cmtt-8"> </span><span
|
Chris@1
|
8317 class="cmtt-8"> </span><span
|
Chris@1
|
8318 class="cmtt-8"> </span><span
|
Chris@1
|
8319 class="cmtt-8"> </span><span
|
Chris@1
|
8320 class="cmtt-8"> </span><span
|
Chris@1
|
8321 class="cmtt-8"> </span><span
|
Chris@1
|
8322 class="cmtt-8"> </span><span
|
Chris@1
|
8323 class="cmtt-8"> </span><span
|
Chris@1
|
8324 class="cmtt-8"> </span><span
|
Chris@1
|
8325 class="cmtt-8"> </span><span
|
Chris@1
|
8326 class="cmtt-8"> </span><span
|
Chris@1
|
8327 class="cmtt-8"> </span><span
|
Chris@1
|
8328 class="cmtt-8"> 26)</span><span
|
Chris@1
|
8329 class="cmtt-8"> vector</span><span
|
Chris@1
|
8330 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
8331 class="cmtt-8"> element</span><span
|
Chris@1
|
8332 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8333 class="cmtt-8"> =</span>
|
Chris@1
|
8334 <br class="fancyvrb" /><a
|
Chris@1
|
8335 id="x1-101114r57"></a><span
|
Chris@1
|
8336 class="cmr-6">57</span><span
|
Chris@1
|
8337 class="cmtt-8"> </span><span
|
Chris@1
|
8338 class="cmtt-8"> </span><span
|
Chris@1
|
8339 class="cmtt-8"> </span><span
|
Chris@1
|
8340 class="cmtt-8"> </span><span
|
Chris@1
|
8341 class="cmtt-8"> </span><span
|
Chris@1
|
8342 class="cmtt-8"> </span><span
|
Chris@1
|
8343 class="cmtt-8"> </span><span
|
Chris@1
|
8344 class="cmtt-8"> </span><span
|
Chris@1
|
8345 class="cmtt-8"> </span><span
|
Chris@1
|
8346 class="cmtt-8"> </span><span
|
Chris@1
|
8347 class="cmtt-8"> </span><span
|
Chris@1
|
8348 class="cmtt-8"> </span><span
|
Chris@1
|
8349 class="cmtt-8"> </span><span
|
Chris@1
|
8350 class="cmtt-8"> </span><span
|
Chris@1
|
8351 class="cmtt-8"> </span><span
|
Chris@1
|
8352 class="cmtt-8"> </span><span
|
Chris@1
|
8353 class="cmtt-8"> </span><span
|
Chris@1
|
8354 class="cmtt-8"> </span><span
|
Chris@1
|
8355 class="cmtt-8"> </span><span
|
Chris@1
|
8356 class="cmtt-8"> </span><span
|
Chris@1
|
8357 class="cmtt-8"> </span><span
|
Chris@1
|
8358 class="cmtt-8"> </span><span
|
Chris@1
|
8359 class="cmtt-8"> </span><span
|
Chris@1
|
8360 class="cmtt-8"> </span><span
|
Chris@1
|
8361 class="cmtt-8"> </span><span
|
Chris@1
|
8362 class="cmtt-8"> </span><span
|
Chris@1
|
8363 class="cmtt-8"> </span><span
|
Chris@1
|
8364 class="cmtt-8"> </span><span
|
Chris@1
|
8365 class="cmtt-8"> </span><span
|
Chris@1
|
8366 class="cmtt-8"> [predicted]</span><span
|
Chris@1
|
8367 class="cmtt-8"> +</span><span
|
Chris@1
|
8368 class="cmtt-8"> ([val]</span><span
|
Chris@1
|
8369 class="cmtt-8"> /</span><span
|
Chris@1
|
8370 class="cmtt-8"> 2</span><span
|
Chris@1
|
8371 class="cmtt-8"> using</span><span
|
Chris@1
|
8372 class="cmtt-8"> integer</span><span
|
Chris@1
|
8373 class="cmtt-8"> division)</span>
|
Chris@1
|
8374 <br class="fancyvrb" /><a
|
Chris@1
|
8375 id="x1-101116r58"></a><span
|
Chris@1
|
8376 class="cmr-6">58</span><span
|
Chris@1
|
8377 class="cmtt-8"> </span><span
|
Chris@1
|
8378 class="cmtt-8"> </span>
|
Chris@1
|
8379 <br class="fancyvrb" /><a
|
Chris@1
|
8380 id="x1-101118r59"></a><span
|
Chris@1
|
8381 class="cmr-6">59</span><span
|
Chris@1
|
8382 class="cmtt-8"> </span><span
|
Chris@1
|
8383 class="cmtt-8"> </span><span
|
Chris@1
|
8384 class="cmtt-8"> </span><span
|
Chris@1
|
8385 class="cmtt-8"> </span><span
|
Chris@1
|
8386 class="cmtt-8"> </span><span
|
Chris@1
|
8387 class="cmtt-8"> </span><span
|
Chris@1
|
8388 class="cmtt-8"> </span><span
|
Chris@1
|
8389 class="cmtt-8"> </span><span
|
Chris@1
|
8390 class="cmtt-8"> </span><span
|
Chris@1
|
8391 class="cmtt-8"> </span><span
|
Chris@1
|
8392 class="cmtt-8"> </span><span
|
Chris@1
|
8393 class="cmtt-8"> </span><span
|
Chris@1
|
8394 class="cmtt-8"> </span><span
|
Chris@1
|
8395 class="cmtt-8"> </span><span
|
Chris@1
|
8396 class="cmtt-8"> </span><span
|
Chris@1
|
8397 class="cmtt-8"> </span><span
|
Chris@1
|
8398 class="cmtt-8"> </span><span
|
Chris@1
|
8399 class="cmtt-8"> </span><span
|
Chris@1
|
8400 class="cmtt-8"> </span><span
|
Chris@1
|
8401 class="cmtt-8"> </span><span
|
Chris@1
|
8402 class="cmtt-8"> </span><span
|
Chris@1
|
8403 class="cmtt-8"> </span><span
|
Chris@1
|
8404 class="cmtt-8"> </span><span
|
Chris@1
|
8405 class="cmtt-8"> </span><span
|
Chris@1
|
8406 class="cmsy-8">}</span>
|
Chris@1
|
8407 <br class="fancyvrb" /><a
|
Chris@1
|
8408 id="x1-101120r60"></a><span
|
Chris@1
|
8409 class="cmr-6">60</span><span
|
Chris@1
|
8410 class="cmtt-8"> </span><span
|
Chris@1
|
8411 class="cmtt-8"> </span>
|
Chris@1
|
8412 <br class="fancyvrb" /><a
|
Chris@1
|
8413 id="x1-101122r61"></a><span
|
Chris@1
|
8414 class="cmr-6">61</span><span
|
Chris@1
|
8415 class="cmtt-8"> </span><span
|
Chris@1
|
8416 class="cmtt-8"> </span><span
|
Chris@1
|
8417 class="cmtt-8"> </span><span
|
Chris@1
|
8418 class="cmtt-8"> </span><span
|
Chris@1
|
8419 class="cmtt-8"> </span><span
|
Chris@1
|
8420 class="cmtt-8"> </span><span
|
Chris@1
|
8421 class="cmtt-8"> </span><span
|
Chris@1
|
8422 class="cmtt-8"> </span><span
|
Chris@1
|
8423 class="cmtt-8"> </span><span
|
Chris@1
|
8424 class="cmtt-8"> </span><span
|
Chris@1
|
8425 class="cmtt-8"> </span><span
|
Chris@1
|
8426 class="cmtt-8"> </span><span
|
Chris@1
|
8427 class="cmtt-8"> </span><span
|
Chris@1
|
8428 class="cmtt-8"> </span><span
|
Chris@1
|
8429 class="cmtt-8"> </span><span
|
Chris@1
|
8430 class="cmtt-8"> </span><span
|
Chris@1
|
8431 class="cmtt-8"> </span><span
|
Chris@1
|
8432 class="cmtt-8"> </span><span
|
Chris@1
|
8433 class="cmsy-8">}</span>
|
Chris@1
|
8434 <br class="fancyvrb" /><a
|
Chris@1
|
8435 id="x1-101124r62"></a><span
|
Chris@1
|
8436 class="cmr-6">62</span><span
|
Chris@1
|
8437 class="cmtt-8"> </span><span
|
Chris@1
|
8438 class="cmtt-8"> </span>
|
Chris@1
|
8439 <br class="fancyvrb" /><a
|
Chris@1
|
8440 id="x1-101126r63"></a><span
|
Chris@1
|
8441 class="cmr-6">63</span><span
|
Chris@1
|
8442 class="cmtt-8"> </span><span
|
Chris@1
|
8443 class="cmtt-8"> </span><span
|
Chris@1
|
8444 class="cmtt-8"> </span><span
|
Chris@1
|
8445 class="cmtt-8"> </span><span
|
Chris@1
|
8446 class="cmtt-8"> </span><span
|
Chris@1
|
8447 class="cmtt-8"> </span><span
|
Chris@1
|
8448 class="cmtt-8"> </span><span
|
Chris@1
|
8449 class="cmtt-8"> </span><span
|
Chris@1
|
8450 class="cmtt-8"> </span><span
|
Chris@1
|
8451 class="cmtt-8"> </span><span
|
Chris@1
|
8452 class="cmtt-8"> </span><span
|
Chris@1
|
8453 class="cmtt-8"> </span><span
|
Chris@1
|
8454 class="cmsy-8">}</span><span
|
Chris@1
|
8455 class="cmtt-8"> else</span><span
|
Chris@1
|
8456 class="cmtt-8"> [val]</span><span
|
Chris@1
|
8457 class="cmtt-8"> is</span><span
|
Chris@1
|
8458 class="cmtt-8"> zero</span><span
|
Chris@1
|
8459 class="cmtt-8"> </span><span
|
Chris@1
|
8460 class="cmsy-8">{</span>
|
Chris@1
|
8461 <br class="fancyvrb" /><a
|
Chris@1
|
8462 id="x1-101128r64"></a><span
|
Chris@1
|
8463 class="cmr-6">64</span><span
|
Chris@1
|
8464 class="cmtt-8"> </span><span
|
Chris@1
|
8465 class="cmtt-8"> </span>
|
Chris@1
|
8466 <br class="fancyvrb" /><a
|
Chris@1
|
8467 id="x1-101130r65"></a><span
|
Chris@1
|
8468 class="cmr-6">65</span><span
|
Chris@1
|
8469 class="cmtt-8"> </span><span
|
Chris@1
|
8470 class="cmtt-8"> </span><span
|
Chris@1
|
8471 class="cmtt-8"> </span><span
|
Chris@1
|
8472 class="cmtt-8"> </span><span
|
Chris@1
|
8473 class="cmtt-8"> </span><span
|
Chris@1
|
8474 class="cmtt-8"> </span><span
|
Chris@1
|
8475 class="cmtt-8"> </span><span
|
Chris@1
|
8476 class="cmtt-8"> </span><span
|
Chris@1
|
8477 class="cmtt-8"> </span><span
|
Chris@1
|
8478 class="cmtt-8"> </span><span
|
Chris@1
|
8479 class="cmtt-8"> </span><span
|
Chris@1
|
8480 class="cmtt-8"> </span><span
|
Chris@1
|
8481 class="cmtt-8"> </span><span
|
Chris@1
|
8482 class="cmtt-8"> 27)</span><span
|
Chris@1
|
8483 class="cmtt-8"> vector</span><span
|
Chris@1
|
8484 class="cmtt-8"> [floor1_step2_flag]</span><span
|
Chris@1
|
8485 class="cmtt-8"> element</span><span
|
Chris@1
|
8486 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8487 class="cmtt-8"> =</span><span
|
Chris@1
|
8488 class="cmtt-8"> unset</span>
|
Chris@1
|
8489
|
Chris@1
|
8490
|
Chris@1
|
8491
|
Chris@1
|
8492 <br class="fancyvrb" /><a
|
Chris@1
|
8493 id="x1-101132r66"></a><span
|
Chris@1
|
8494 class="cmr-6">66</span><span
|
Chris@1
|
8495 class="cmtt-8"> </span><span
|
Chris@1
|
8496 class="cmtt-8"> </span><span
|
Chris@1
|
8497 class="cmtt-8"> </span><span
|
Chris@1
|
8498 class="cmtt-8"> </span><span
|
Chris@1
|
8499 class="cmtt-8"> </span><span
|
Chris@1
|
8500 class="cmtt-8"> </span><span
|
Chris@1
|
8501 class="cmtt-8"> </span><span
|
Chris@1
|
8502 class="cmtt-8"> </span><span
|
Chris@1
|
8503 class="cmtt-8"> </span><span
|
Chris@1
|
8504 class="cmtt-8"> </span><span
|
Chris@1
|
8505 class="cmtt-8"> </span><span
|
Chris@1
|
8506 class="cmtt-8"> </span><span
|
Chris@1
|
8507 class="cmtt-8"> </span><span
|
Chris@1
|
8508 class="cmtt-8"> 28)</span><span
|
Chris@1
|
8509 class="cmtt-8"> vector</span><span
|
Chris@1
|
8510 class="cmtt-8"> [floor1_final_Y]</span><span
|
Chris@1
|
8511 class="cmtt-8"> element</span><span
|
Chris@1
|
8512 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8513 class="cmtt-8"> =</span><span
|
Chris@1
|
8514 class="cmtt-8"> [predicted]</span>
|
Chris@1
|
8515 <br class="fancyvrb" /><a
|
Chris@1
|
8516 id="x1-101134r67"></a><span
|
Chris@1
|
8517 class="cmr-6">67</span><span
|
Chris@1
|
8518 class="cmtt-8"> </span><span
|
Chris@1
|
8519 class="cmtt-8"> </span>
|
Chris@1
|
8520 <br class="fancyvrb" /><a
|
Chris@1
|
8521 id="x1-101136r68"></a><span
|
Chris@1
|
8522 class="cmr-6">68</span><span
|
Chris@1
|
8523 class="cmtt-8"> </span><span
|
Chris@1
|
8524 class="cmtt-8"> </span><span
|
Chris@1
|
8525 class="cmtt-8"> </span><span
|
Chris@1
|
8526 class="cmtt-8"> </span><span
|
Chris@1
|
8527 class="cmtt-8"> </span><span
|
Chris@1
|
8528 class="cmtt-8"> </span><span
|
Chris@1
|
8529 class="cmtt-8"> </span><span
|
Chris@1
|
8530 class="cmtt-8"> </span><span
|
Chris@1
|
8531 class="cmtt-8"> </span><span
|
Chris@1
|
8532 class="cmtt-8"> </span><span
|
Chris@1
|
8533 class="cmtt-8"> </span><span
|
Chris@1
|
8534 class="cmtt-8"> </span><span
|
Chris@1
|
8535 class="cmsy-8">}</span>
|
Chris@1
|
8536 <br class="fancyvrb" /><a
|
Chris@1
|
8537 id="x1-101138r69"></a><span
|
Chris@1
|
8538 class="cmr-6">69</span><span
|
Chris@1
|
8539 class="cmtt-8"> </span><span
|
Chris@1
|
8540 class="cmtt-8"> </span>
|
Chris@1
|
8541 <br class="fancyvrb" /><a
|
Chris@1
|
8542 id="x1-101140r70"></a><span
|
Chris@1
|
8543 class="cmr-6">70</span><span
|
Chris@1
|
8544 class="cmtt-8"> </span><span
|
Chris@1
|
8545 class="cmtt-8"> </span><span
|
Chris@1
|
8546 class="cmtt-8"> </span><span
|
Chris@1
|
8547 class="cmtt-8"> </span><span
|
Chris@1
|
8548 class="cmtt-8"> </span><span
|
Chris@1
|
8549 class="cmtt-8"> </span><span
|
Chris@1
|
8550 class="cmtt-8"> </span><span
|
Chris@1
|
8551 class="cmsy-8">}</span>
|
Chris@1
|
8552 <br class="fancyvrb" /><a
|
Chris@1
|
8553 id="x1-101142r71"></a><span
|
Chris@1
|
8554 class="cmr-6">71</span><span
|
Chris@1
|
8555 class="cmtt-8"> </span><span
|
Chris@1
|
8556 class="cmtt-8"> </span>
|
Chris@1
|
8557 <br class="fancyvrb" /><a
|
Chris@1
|
8558 id="x1-101144r72"></a><span
|
Chris@1
|
8559 class="cmr-6">72</span><span
|
Chris@1
|
8560 class="cmtt-8"> </span><span
|
Chris@1
|
8561 class="cmtt-8"> </span><span
|
Chris@1
|
8562 class="cmtt-8"> 29)</span><span
|
Chris@1
|
8563 class="cmtt-8"> done</span>
|
Chris@1
|
8564 <br class="fancyvrb" /><a
|
Chris@1
|
8565 id="x1-101146r73"></a><span
|
Chris@1
|
8566 class="cmr-6">73</span><span
|
Chris@1
|
8567 class="cmtt-8"> </span><span
|
Chris@1
|
8568 class="cmtt-8"> </span>
|
Chris@1
|
8569 </div>
|
Chris@1
|
8570 </dd><dt class="description">
|
Chris@1
|
8571 <span
|
Chris@1
|
8572 class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd
|
Chris@1
|
8573 class="description">
|
Chris@1
|
8574 <!--l. 351--><p class="noindent" >Curve synthesis generates a return vector <span
|
Chris@1
|
8575 class="cmtt-12">[floor] </span>of length <span
|
Chris@1
|
8576 class="cmtt-12">[n] </span>(where <span
|
Chris@1
|
8577 class="cmtt-12">[n] </span>is provided by
|
Chris@1
|
8578 the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
|
Chris@1
|
8579 <span
|
Chris@1
|
8580 class="cmtt-12">[floor1_X_list]</span>, <span
|
Chris@1
|
8581 class="cmtt-12">[floor1_final_Y] </span>and <span
|
Chris@1
|
8582 class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
|
Chris@1
|
8583 [floor1_multiplier] and [floor1_values] values.
|
Chris@1
|
8584 <!--l. 358--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
|
Chris@1
|
8585 class="cmtt-12">[floor1_X_list]</span>, <span
|
Chris@1
|
8586 class="cmtt-12">[floor1_final_Y] </span>and
|
Chris@1
|
8587 <span
|
Chris@1
|
8588 class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span
|
Chris@1
|
8589 class="cmtt-12">[floor1_X_list]’</span>, <span
|
Chris@1
|
8590 class="cmtt-12">[floor1_final_Y]’</span>
|
Chris@1
|
8591 and <span
|
Chris@1
|
8592 class="cmtt-12">[floor1_step2_flag]’ </span>according to ascending sort order of the values in
|
Chris@1
|
8593 <span
|
Chris@1
|
8594 class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span
|
Chris@1
|
8595 class="cmtt-12">[floor1_X_list] </span>and then apply the same
|
Chris@1
|
8596 permutation to elements of the other two vectors so that the X, Y and step2_flag values
|
Chris@1
|
8597 still match.
|
Chris@1
|
8598 <!--l. 368--><p class="noindent" >Then compute the final curve in one pass:
|
Chris@1
|
8599 <!--l. 370--><p class="noindent" >
|
Chris@1
|
8600 <div class="fancyvrb" id="fancyvrb32">
|
Chris@1
|
8601 <a
|
Chris@1
|
8602 id="x1-101148r1"></a><span
|
Chris@1
|
8603 class="cmr-6">1</span><span
|
Chris@1
|
8604 class="cmtt-8"> </span><span
|
Chris@1
|
8605 class="cmtt-8"> </span><span
|
Chris@1
|
8606 class="cmtt-8"> </span><span
|
Chris@1
|
8607 class="cmtt-8"> 1)</span><span
|
Chris@1
|
8608 class="cmtt-8"> [hx]</span><span
|
Chris@1
|
8609 class="cmtt-8"> =</span><span
|
Chris@1
|
8610 class="cmtt-8"> 0</span>
|
Chris@1
|
8611 <br class="fancyvrb" /><a
|
Chris@1
|
8612 id="x1-101150r2"></a><span
|
Chris@1
|
8613 class="cmr-6">2</span><span
|
Chris@1
|
8614 class="cmtt-8"> </span><span
|
Chris@1
|
8615 class="cmtt-8"> </span><span
|
Chris@1
|
8616 class="cmtt-8"> </span><span
|
Chris@1
|
8617 class="cmtt-8"> 2)</span><span
|
Chris@1
|
8618 class="cmtt-8"> [lx]</span><span
|
Chris@1
|
8619 class="cmtt-8"> =</span><span
|
Chris@1
|
8620 class="cmtt-8"> 0</span>
|
Chris@1
|
8621 <br class="fancyvrb" /><a
|
Chris@1
|
8622 id="x1-101152r3"></a><span
|
Chris@1
|
8623 class="cmr-6">3</span><span
|
Chris@1
|
8624 class="cmtt-8"> </span><span
|
Chris@1
|
8625 class="cmtt-8"> </span><span
|
Chris@1
|
8626 class="cmtt-8"> </span><span
|
Chris@1
|
8627 class="cmtt-8"> 3)</span><span
|
Chris@1
|
8628 class="cmtt-8"> [ly]</span><span
|
Chris@1
|
8629 class="cmtt-8"> =</span><span
|
Chris@1
|
8630 class="cmtt-8"> vector</span><span
|
Chris@1
|
8631 class="cmtt-8"> [floor1_final_Y]’</span><span
|
Chris@1
|
8632 class="cmtt-8"> element</span><span
|
Chris@1
|
8633 class="cmtt-8"> [0]</span><span
|
Chris@1
|
8634 class="cmtt-8"> *</span><span
|
Chris@1
|
8635 class="cmtt-8"> [floor1_multiplier]</span>
|
Chris@1
|
8636 <br class="fancyvrb" /><a
|
Chris@1
|
8637 id="x1-101154r4"></a><span
|
Chris@1
|
8638 class="cmr-6">4</span><span
|
Chris@1
|
8639 class="cmtt-8"> </span><span
|
Chris@1
|
8640 class="cmtt-8"> </span><span
|
Chris@1
|
8641 class="cmtt-8"> </span><span
|
Chris@1
|
8642 class="cmtt-8"> 4)</span><span
|
Chris@1
|
8643 class="cmtt-8"> iterate</span><span
|
Chris@1
|
8644 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8645 class="cmtt-8"> over</span><span
|
Chris@1
|
8646 class="cmtt-8"> the</span><span
|
Chris@1
|
8647 class="cmtt-8"> range</span><span
|
Chris@1
|
8648 class="cmtt-8"> 1</span><span
|
Chris@1
|
8649 class="cmtt-8"> ...</span><span
|
Chris@1
|
8650 class="cmtt-8"> [floor1_values]-1</span><span
|
Chris@1
|
8651 class="cmtt-8"> </span><span
|
Chris@1
|
8652 class="cmsy-8">{</span>
|
Chris@1
|
8653 <br class="fancyvrb" /><a
|
Chris@1
|
8654 id="x1-101156r5"></a><span
|
Chris@1
|
8655 class="cmr-6">5</span><span
|
Chris@1
|
8656 class="cmtt-8"> </span><span
|
Chris@1
|
8657 class="cmtt-8"> </span>
|
Chris@1
|
8658 <br class="fancyvrb" /><a
|
Chris@1
|
8659 id="x1-101158r6"></a><span
|
Chris@1
|
8660 class="cmr-6">6</span><span
|
Chris@1
|
8661 class="cmtt-8"> </span><span
|
Chris@1
|
8662 class="cmtt-8"> </span><span
|
Chris@1
|
8663 class="cmtt-8"> </span><span
|
Chris@1
|
8664 class="cmtt-8"> </span><span
|
Chris@1
|
8665 class="cmtt-8"> </span><span
|
Chris@1
|
8666 class="cmtt-8"> </span><span
|
Chris@1
|
8667 class="cmtt-8"> </span><span
|
Chris@1
|
8668 class="cmtt-8"> </span><span
|
Chris@1
|
8669 class="cmtt-8"> 5)</span><span
|
Chris@1
|
8670 class="cmtt-8"> if</span><span
|
Chris@1
|
8671 class="cmtt-8"> (</span><span
|
Chris@1
|
8672 class="cmtt-8"> [floor1_step2_flag]’</span><span
|
Chris@1
|
8673 class="cmtt-8"> element</span><span
|
Chris@1
|
8674 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8675 class="cmtt-8"> is</span><span
|
Chris@1
|
8676 class="cmtt-8"> set</span><span
|
Chris@1
|
8677 class="cmtt-8"> )</span><span
|
Chris@1
|
8678 class="cmtt-8"> </span><span
|
Chris@1
|
8679 class="cmsy-8">{</span>
|
Chris@1
|
8680 <br class="fancyvrb" /><a
|
Chris@1
|
8681 id="x1-101160r7"></a><span
|
Chris@1
|
8682 class="cmr-6">7</span><span
|
Chris@1
|
8683 class="cmtt-8"> </span><span
|
Chris@1
|
8684 class="cmtt-8"> </span>
|
Chris@1
|
8685 <br class="fancyvrb" /><a
|
Chris@1
|
8686 id="x1-101162r8"></a><span
|
Chris@1
|
8687 class="cmr-6">8</span><span
|
Chris@1
|
8688 class="cmtt-8"> </span><span
|
Chris@1
|
8689 class="cmtt-8"> </span><span
|
Chris@1
|
8690 class="cmtt-8"> </span><span
|
Chris@1
|
8691 class="cmtt-8"> </span><span
|
Chris@1
|
8692 class="cmtt-8"> </span><span
|
Chris@1
|
8693 class="cmtt-8"> </span><span
|
Chris@1
|
8694 class="cmtt-8"> </span><span
|
Chris@1
|
8695 class="cmtt-8"> </span><span
|
Chris@1
|
8696 class="cmtt-8"> </span><span
|
Chris@1
|
8697 class="cmtt-8"> </span><span
|
Chris@1
|
8698 class="cmtt-8"> </span><span
|
Chris@1
|
8699 class="cmtt-8"> </span><span
|
Chris@1
|
8700 class="cmtt-8"> </span><span
|
Chris@1
|
8701 class="cmtt-8"> </span><span
|
Chris@1
|
8702 class="cmtt-8"> 6)</span><span
|
Chris@1
|
8703 class="cmtt-8"> [hy]</span><span
|
Chris@1
|
8704 class="cmtt-8"> =</span><span
|
Chris@1
|
8705 class="cmtt-8"> [floor1_final_Y]’</span><span
|
Chris@1
|
8706 class="cmtt-8"> element</span><span
|
Chris@1
|
8707 class="cmtt-8"> [i]</span><span
|
Chris@1
|
8708 class="cmtt-8"> *</span><span
|
Chris@1
|
8709 class="cmtt-8"> [floor1_multiplier]</span>
|
Chris@1
|
8710 <br class="fancyvrb" /><a
|
Chris@1
|
8711 id="x1-101164r9"></a><span
|
Chris@1
|
8712 class="cmr-6">9</span><span
|
Chris@1
|
8713 class="cmtt-8"> </span><span
|
Chris@1
|
8714 class="cmtt-8"> </span><span
|
Chris@1
|
8715 class="cmtt-8">  </span><span
|
Chris@1
|
8716 class="cmtt-8"> </span><span
|
Chris@1
|
8717 class="cmtt-8"> </span><span
|
Chris@1
|
8718 class="cmtt-8"> </span><span
|
Chris@1
|
8719 class="cmtt-8"> </span><span
|
Chris@1
|
8720 class="cmtt-8"> 7)</span><span
|
Chris@1
|
8721 class="cmtt-8"> [hx]</span><span
|
Chris@1
|
8722 class="cmtt-8"> =</span><span
|
Chris@1
|
8723 class="cmtt-8"> [floor1_X_list]’</span><span
|
Chris@1
|
8724 class="cmtt-8"> element</span><span
|
Chris@1
|
8725 class="cmtt-8"> [i]</span>
|
Chris@1
|
8726 <br class="fancyvrb" /><a
|
Chris@1
|
8727 id="x1-101166r10"></a><span
|
Chris@1
|
8728 class="cmr-6">10</span><span
|
Chris@1
|
8729 class="cmtt-8"> </span><span
|
Chris@1
|
8730 class="cmtt-8"> </span><span
|
Chris@1
|
8731 class="cmtt-8"> </span><span
|
Chris@1
|
8732 class="cmtt-8"> </span><span
|
Chris@1
|
8733 class="cmtt-8"> </span><span
|
Chris@1
|
8734 class="cmtt-8"> </span><span
|
Chris@1
|
8735 class="cmtt-8"> </span><span
|
Chris@1
|
8736 class="cmtt-8"> </span><span
|
Chris@1
|
8737 class="cmtt-8"> </span><span
|
Chris@1
|
8738 class="cmtt-8"> </span><span
|
Chris@1
|
8739 class="cmtt-8"> </span><span
|
Chris@1
|
8740 class="cmtt-8"> </span><span
|
Chris@1
|
8741 class="cmtt-8"> </span><span
|
Chris@1
|
8742 class="cmtt-8"> </span><span
|
Chris@1
|
8743 class="cmtt-8"> 8)</span><span
|
Chris@1
|
8744 class="cmtt-8"> </span><a
|
Chris@1
|
8745 href="#x1-1230009.2.7"><span
|
Chris@1
|
8746 class="cmtt-8">render_line</span></a><span
|
Chris@1
|
8747 class="cmtt-8">(</span><span
|
Chris@1
|
8748 class="cmtt-8"> [lx],</span><span
|
Chris@1
|
8749 class="cmtt-8"> [ly],</span><span
|
Chris@1
|
8750 class="cmtt-8"> [hx],</span><span
|
Chris@1
|
8751 class="cmtt-8"> [hy],</span><span
|
Chris@1
|
8752 class="cmtt-8"> [floor]</span><span
|
Chris@1
|
8753 class="cmtt-8"> )</span>
|
Chris@1
|
8754 <br class="fancyvrb" /><a
|
Chris@1
|
8755 id="x1-101168r11"></a><span
|
Chris@1
|
8756 class="cmr-6">11</span><span
|
Chris@1
|
8757 class="cmtt-8"> </span><span
|
Chris@1
|
8758 class="cmtt-8"> </span><span
|
Chris@1
|
8759 class="cmtt-8"> </span><span
|
Chris@1
|
8760 class="cmtt-8"> </span><span
|
Chris@1
|
8761 class="cmtt-8"> </span><span
|
Chris@1
|
8762 class="cmtt-8"> </span><span
|
Chris@1
|
8763 class="cmtt-8"> </span><span
|
Chris@1
|
8764 class="cmtt-8"> </span><span
|
Chris@1
|
8765 class="cmtt-8"> </span><span
|
Chris@1
|
8766 class="cmtt-8"> </span><span
|
Chris@1
|
8767 class="cmtt-8"> </span><span
|
Chris@1
|
8768 class="cmtt-8"> </span><span
|
Chris@1
|
8769 class="cmtt-8"> </span><span
|
Chris@1
|
8770 class="cmtt-8"> </span><span
|
Chris@1
|
8771 class="cmtt-8"> 9)</span><span
|
Chris@1
|
8772 class="cmtt-8"> [lx]</span><span
|
Chris@1
|
8773 class="cmtt-8"> =</span><span
|
Chris@1
|
8774 class="cmtt-8"> [hx]</span>
|
Chris@1
|
8775 <br class="fancyvrb" /><a
|
Chris@1
|
8776 id="x1-101170r12"></a><span
|
Chris@1
|
8777 class="cmr-6">12</span><span
|
Chris@1
|
8778 class="cmtt-8"> </span><span
|
Chris@1
|
8779 class="cmtt-8">  </span><span
|
Chris@1
|
8780 class="cmtt-8"> </span><span
|
Chris@1
|
8781 class="cmtt-8"> </span><span
|
Chris@1
|
8782 class="cmtt-8"> </span><span
|
Chris@1
|
8783 class="cmtt-8"> 10)</span><span
|
Chris@1
|
8784 class="cmtt-8"> [ly]</span><span
|
Chris@1
|
8785 class="cmtt-8"> =</span><span
|
Chris@1
|
8786 class="cmtt-8"> [hy]</span>
|
Chris@1
|
8787 <br class="fancyvrb" /><a
|
Chris@1
|
8788 id="x1-101172r13"></a><span
|
Chris@1
|
8789 class="cmr-6">13</span><span
|
Chris@1
|
8790 class="cmtt-8"> </span><span
|
Chris@1
|
8791 class="cmtt-8"> </span><span
|
Chris@1
|
8792 class="cmtt-8"> </span><span
|
Chris@1
|
8793 class="cmtt-8"> </span><span
|
Chris@1
|
8794 class="cmtt-8"> </span><span
|
Chris@1
|
8795 class="cmtt-8"> </span><span
|
Chris@1
|
8796 class="cmtt-8"> </span><span
|
Chris@1
|
8797 class="cmtt-8"> </span><span
|
Chris@1
|
8798 class="cmtt-8"> </span><span
|
Chris@1
|
8799 class="cmtt-8"> </span><span
|
Chris@1
|
8800 class="cmtt-8"> </span><span
|
Chris@1
|
8801 class="cmtt-8"> </span><span
|
Chris@1
|
8802 class="cmsy-8">}</span>
|
Chris@1
|
8803 <br class="fancyvrb" /><a
|
Chris@1
|
8804 id="x1-101174r14"></a><span
|
Chris@1
|
8805 class="cmr-6">14</span><span
|
Chris@1
|
8806 class="cmtt-8"> </span><span
|
Chris@1
|
8807 class="cmtt-8"> </span><span
|
Chris@1
|
8808 class="cmtt-8"> </span><span
|
Chris@1
|
8809 class="cmtt-8"> </span><span
|
Chris@1
|
8810 class="cmtt-8"> </span><span
|
Chris@1
|
8811 class="cmtt-8"> </span><span
|
Chris@1
|
8812 class="cmtt-8"> </span><span
|
Chris@1
|
8813 class="cmsy-8">}</span>
|
Chris@1
|
8814 <br class="fancyvrb" /><a
|
Chris@1
|
8815 id="x1-101176r15"></a><span
|
Chris@1
|
8816 class="cmr-6">15</span><span
|
Chris@1
|
8817 class="cmtt-8"> </span><span
|
Chris@1
|
8818 class="cmtt-8"> </span>
|
Chris@1
|
8819 <br class="fancyvrb" /><a
|
Chris@1
|
8820 id="x1-101178r16"></a><span
|
Chris@1
|
8821 class="cmr-6">16</span><span
|
Chris@1
|
8822 class="cmtt-8"> </span><span
|
Chris@1
|
8823 class="cmtt-8"> </span><span
|
Chris@1
|
8824 class="cmtt-8"> 11)</span><span
|
Chris@1
|
8825 class="cmtt-8"> if</span><span
|
Chris@1
|
8826 class="cmtt-8"> (</span><span
|
Chris@1
|
8827 class="cmtt-8"> [hx]</span><span
|
Chris@1
|
8828 class="cmtt-8"> is</span><span
|
Chris@1
|
8829 class="cmtt-8"> less</span><span
|
Chris@1
|
8830 class="cmtt-8"> than</span><span
|
Chris@1
|
8831 class="cmtt-8"> [n]</span><span
|
Chris@1
|
8832 class="cmtt-8"> )</span><span
|
Chris@1
|
8833 class="cmtt-8"> </span><span
|
Chris@1
|
8834 class="cmsy-8">{</span>
|
Chris@1
|
8835 <br class="fancyvrb" /><a
|
Chris@1
|
8836 id="x1-101180r17"></a><span
|
Chris@1
|
8837 class="cmr-6">17</span><span
|
Chris@1
|
8838 class="cmtt-8"> </span><span
|
Chris@1
|
8839 class="cmtt-8"> </span>
|
Chris@1
|
8840 <br class="fancyvrb" /><a
|
Chris@1
|
8841 id="x1-101182r18"></a><span
|
Chris@1
|
8842 class="cmr-6">18</span><span
|
Chris@1
|
8843 class="cmtt-8"> </span><span
|
Chris@1
|
8844 class="cmtt-8"> </span><span
|
Chris@1
|
8845 class="cmtt-8"> </span><span
|
Chris@1
|
8846 class="cmtt-8"> </span><span
|
Chris@1
|
8847 class="cmtt-8"> </span><span
|
Chris@1
|
8848 class="cmtt-8"> </span><span
|
Chris@1
|
8849 class="cmtt-8"> </span><span
|
Chris@1
|
8850 class="cmtt-8"> </span><span
|
Chris@1
|
8851 class="cmtt-8"> </span><span
|
Chris@1
|
8852 class="cmtt-8"> 12)</span><span
|
Chris@1
|
8853 class="cmtt-8"> </span><a
|
Chris@1
|
8854 href="#x1-1230009.2.7"><span
|
Chris@1
|
8855 class="cmtt-8">render_line</span></a><span
|
Chris@1
|
8856 class="cmtt-8">(</span><span
|
Chris@1
|
8857 class="cmtt-8"> [hx],</span><span
|
Chris@1
|
8858 class="cmtt-8"> [hy],</span><span
|
Chris@1
|
8859 class="cmtt-8"> [n],</span><span
|
Chris@1
|
8860 class="cmtt-8"> [hy],</span><span
|
Chris@1
|
8861 class="cmtt-8"> [floor]</span><span
|
Chris@1
|
8862 class="cmtt-8"> )</span>
|
Chris@1
|
8863 <br class="fancyvrb" /><a
|
Chris@1
|
8864 id="x1-101184r19"></a><span
|
Chris@1
|
8865 class="cmr-6">19</span><span
|
Chris@1
|
8866 class="cmtt-8"> </span><span
|
Chris@1
|
8867 class="cmtt-8"> </span>
|
Chris@1
|
8868 <br class="fancyvrb" /><a
|
Chris@1
|
8869 id="x1-101186r20"></a><span
|
Chris@1
|
8870 class="cmr-6">20</span><span
|
Chris@1
|
8871 class="cmtt-8"> </span><span
|
Chris@1
|
8872 class="cmtt-8"> </span><span
|
Chris@1
|
8873 class="cmtt-8"> </span><span
|
Chris@1
|
8874 class="cmtt-8"> </span><span
|
Chris@1
|
8875 class="cmtt-8"> </span><span
|
Chris@1
|
8876 class="cmtt-8"> </span><span
|
Chris@1
|
8877 class="cmtt-8"> </span><span
|
Chris@1
|
8878 class="cmsy-8">}</span>
|
Chris@1
|
8879 <br class="fancyvrb" /><a
|
Chris@1
|
8880 id="x1-101188r21"></a><span
|
Chris@1
|
8881 class="cmr-6">21</span><span
|
Chris@1
|
8882 class="cmtt-8"> </span><span
|
Chris@1
|
8883 class="cmtt-8"> </span>
|
Chris@1
|
8884 <br class="fancyvrb" /><a
|
Chris@1
|
8885 id="x1-101190r22"></a><span
|
Chris@1
|
8886 class="cmr-6">22</span><span
|
Chris@1
|
8887 class="cmtt-8"> </span><span
|
Chris@1
|
8888 class="cmtt-8"> </span><span
|
Chris@1
|
8889 class="cmtt-8"> 13)</span><span
|
Chris@1
|
8890 class="cmtt-8"> if</span><span
|
Chris@1
|
8891 class="cmtt-8"> (</span><span
|
Chris@1
|
8892 class="cmtt-8"> [hx]</span><span
|
Chris@1
|
8893 class="cmtt-8"> is</span><span
|
Chris@1
|
8894 class="cmtt-8"> greater</span><span
|
Chris@1
|
8895 class="cmtt-8"> than</span><span
|
Chris@1
|
8896 class="cmtt-8"> [n]</span><span
|
Chris@1
|
8897 class="cmtt-8"> )</span><span
|
Chris@1
|
8898 class="cmtt-8"> </span><span
|
Chris@1
|
8899 class="cmsy-8">{</span>
|
Chris@1
|
8900 <br class="fancyvrb" /><a
|
Chris@1
|
8901 id="x1-101192r23"></a><span
|
Chris@1
|
8902 class="cmr-6">23</span><span
|
Chris@1
|
8903 class="cmtt-8"> </span><span
|
Chris@1
|
8904 class="cmtt-8"> </span>
|
Chris@1
|
8905 <br class="fancyvrb" /><a
|
Chris@1
|
8906 id="x1-101194r24"></a><span
|
Chris@1
|
8907 class="cmr-6">24</span><span
|
Chris@1
|
8908 class="cmtt-8"> </span><span
|
Chris@1
|
8909 class="cmtt-8"> </span><span
|
Chris@1
|
8910 class="cmtt-8"> </span><span
|
Chris@1
|
8911 class="cmtt-8"> </span><span
|
Chris@1
|
8912 class="cmtt-8"> </span><span
|
Chris@1
|
8913 class="cmtt-8"> </span><span
|
Chris@1
|
8914 class="cmtt-8"> </span><span
|
Chris@1
|
8915 class="cmtt-8"> </span><span
|
Chris@1
|
8916 class="cmtt-8"> </span><span
|
Chris@1
|
8917 class="cmtt-8"> </span><span
|
Chris@1
|
8918 class="cmtt-8"> </span><span
|
Chris@1
|
8919 class="cmtt-8"> </span><span
|
Chris@1
|
8920 class="cmtt-8"> </span><span
|
Chris@1
|
8921 class="cmtt-8"> 14)</span><span
|
Chris@1
|
8922 class="cmtt-8"> truncate</span><span
|
Chris@1
|
8923 class="cmtt-8"> vector</span><span
|
Chris@1
|
8924 class="cmtt-8"> [floor]</span><span
|
Chris@1
|
8925 class="cmtt-8"> to</span><span
|
Chris@1
|
8926 class="cmtt-8"> [n]</span><span
|
Chris@1
|
8927 class="cmtt-8"> elements</span>
|
Chris@1
|
8928 <br class="fancyvrb" /><a
|
Chris@1
|
8929 id="x1-101196r25"></a><span
|
Chris@1
|
8930 class="cmr-6">25</span><span
|
Chris@1
|
8931 class="cmtt-8"> </span><span
|
Chris@1
|
8932 class="cmtt-8"> </span>
|
Chris@1
|
8933 <br class="fancyvrb" /><a
|
Chris@1
|
8934 id="x1-101198r26"></a><span
|
Chris@1
|
8935 class="cmr-6">26</span><span
|
Chris@1
|
8936 class="cmtt-8"> </span><span
|
Chris@1
|
8937 class="cmtt-8"> </span><span
|
Chris@1
|
8938 class="cmtt-8"> </span><span
|
Chris@1
|
8939 class="cmtt-8"> </span><span
|
Chris@1
|
8940 class="cmtt-8"> </span><span
|
Chris@1
|
8941 class="cmtt-8"> </span><span
|
Chris@1
|
8942 class="cmtt-8"> </span><span
|
Chris@1
|
8943 class="cmsy-8">}</span>
|
Chris@1
|
8944 <br class="fancyvrb" /><a
|
Chris@1
|
8945 id="x1-101200r27"></a><span
|
Chris@1
|
8946 class="cmr-6">27</span><span
|
Chris@1
|
8947 class="cmtt-8"> </span><span
|
Chris@1
|
8948 class="cmtt-8"> </span>
|
Chris@1
|
8949
|
Chris@1
|
8950
|
Chris@1
|
8951
|
Chris@1
|
8952 <br class="fancyvrb" /><a
|
Chris@1
|
8953 id="x1-101202r28"></a><span
|
Chris@1
|
8954 class="cmr-6">28</span><span
|
Chris@1
|
8955 class="cmtt-8"> </span><span
|
Chris@1
|
8956 class="cmtt-8"> </span><span
|
Chris@1
|
8957 class="cmtt-8"> 15)</span><span
|
Chris@1
|
8958 class="cmtt-8"> for</span><span
|
Chris@1
|
8959 class="cmtt-8"> each</span><span
|
Chris@1
|
8960 class="cmtt-8"> scalar</span><span
|
Chris@1
|
8961 class="cmtt-8"> in</span><span
|
Chris@1
|
8962 class="cmtt-8"> vector</span><span
|
Chris@1
|
8963 class="cmtt-8"> [floor],</span><span
|
Chris@1
|
8964 class="cmtt-8"> perform</span><span
|
Chris@1
|
8965 class="cmtt-8"> a</span><span
|
Chris@1
|
8966 class="cmtt-8"> lookup</span><span
|
Chris@1
|
8967 class="cmtt-8"> substitution</span><span
|
Chris@1
|
8968 class="cmtt-8"> using</span>
|
Chris@1
|
8969 <br class="fancyvrb" /><a
|
Chris@1
|
8970 id="x1-101204r29"></a><span
|
Chris@1
|
8971 class="cmr-6">29</span><span
|
Chris@1
|
8972 class="cmtt-8"> </span><span
|
Chris@1
|
8973 class="cmtt-8"> </span><span
|
Chris@1
|
8974 class="cmtt-8"> </span><span
|
Chris@1
|
8975 class="cmtt-8"> </span><span
|
Chris@1
|
8976 class="cmtt-8"> </span><span
|
Chris@1
|
8977 class="cmtt-8"> </span><span
|
Chris@1
|
8978 class="cmtt-8"> the</span><span
|
Chris@1
|
8979 class="cmtt-8"> scalar</span><span
|
Chris@1
|
8980 class="cmtt-8"> value</span><span
|
Chris@1
|
8981 class="cmtt-8"> from</span><span
|
Chris@1
|
8982 class="cmtt-8"> [floor]</span><span
|
Chris@1
|
8983 class="cmtt-8"> as</span><span
|
Chris@1
|
8984 class="cmtt-8"> an</span><span
|
Chris@1
|
8985 class="cmtt-8"> offset</span><span
|
Chris@1
|
8986 class="cmtt-8"> into</span><span
|
Chris@1
|
8987 class="cmtt-8"> the</span><span
|
Chris@1
|
8988 class="cmtt-8"> vector</span><span
|
Chris@1
|
8989 class="cmtt-8"> </span><a
|
Chris@1
|
8990 href="#x1-12500010.1"><span
|
Chris@1
|
8991 class="cmtt-8">[floor1_inverse_dB_static_table]</span></a>
|
Chris@1
|
8992 <br class="fancyvrb" /><a
|
Chris@1
|
8993 id="x1-101206r30"></a><span
|
Chris@1
|
8994 class="cmr-6">30</span><span
|
Chris@1
|
8995 class="cmtt-8"> </span><span
|
Chris@1
|
8996 class="cmtt-8"> </span>
|
Chris@1
|
8997 <br class="fancyvrb" /><a
|
Chris@1
|
8998 id="x1-101208r31"></a><span
|
Chris@1
|
8999 class="cmr-6">31</span><span
|
Chris@1
|
9000 class="cmtt-8"> </span><span
|
Chris@1
|
9001 class="cmtt-8"> </span><span
|
Chris@1
|
9002 class="cmtt-8"> 16)</span><span
|
Chris@1
|
9003 class="cmtt-8"> done</span>
|
Chris@1
|
9004 <br class="fancyvrb" /><a
|
Chris@1
|
9005 id="x1-101210r32"></a><span
|
Chris@1
|
9006 class="cmr-6">32</span><span
|
Chris@1
|
9007 class="cmtt-8"> </span><span
|
Chris@1
|
9008 class="cmtt-8"> </span>
|
Chris@1
|
9009 </div>
|
Chris@1
|
9010 </dd></dl>
|
Chris@1
|
9011
|
Chris@1
|
9012
|
Chris@1
|
9013
|
Chris@1
|
9014 <h3 class="sectionHead"><span class="titlemark">8. </span> <a
|
Chris@1
|
9015 id="x1-1020008"></a>Residue setup and decode</h3>
|
Chris@1
|
9016 <!--l. 6--><p class="noindent" >
|
Chris@1
|
9017 <h4 class="subsectionHead"><span class="titlemark">8.1. </span> <a
|
Chris@1
|
9018 id="x1-1030008.1"></a>Overview</h4>
|
Chris@1
|
9019 <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
|
Chris@1
|
9020 after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
|
Chris@1
|
9021 may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
|
Chris@1
|
9022 coupling. The exact semantic content of the vector does not matter to the residue
|
Chris@1
|
9023 abstraction.
|
Chris@1
|
9024 <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
|
Chris@1
|
9025 bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
|
Chris@1
|
9026 different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
|
Chris@1
|
9027 abstraction.
|
Chris@1
|
9028 <!--l. 23--><p class="noindent" >
|
Chris@1
|
9029 <h4 class="subsectionHead"><span class="titlemark">8.2. </span> <a
|
Chris@1
|
9030 id="x1-1040008.2"></a>Residue format</h4>
|
Chris@1
|
9031 <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
|
Chris@1
|
9032 chunk, encodes the chunk classifications and finally encodes the chunks themselves
|
Chris@1
|
9033 using the the specific VQ arrangement defined for each selected classification. The
|
Chris@1
|
9034 exact interleaving and partitioning vary by residue encoding number, however the
|
Chris@1
|
9035 high-level process used to classify and encode the residue vector is the same in all three
|
Chris@1
|
9036 variants.
|
Chris@1
|
9037 <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
|
Chris@1
|
9038 the moment exactly how a partition is encoded and simply trusting that it is, is as
|
Chris@1
|
9039 follows:
|
Chris@1
|
9040 <ul class="itemize1">
|
Chris@1
|
9041 <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
|
Chris@1
|
9042 specified. If we have a vector size of <span
|
Chris@1
|
9043 class="cmti-12">n</span>, a partition size <span
|
Chris@1
|
9044 class="cmti-12">residue</span><span
|
Chris@1
|
9045 class="cmti-12">_partition</span><span
|
Chris@1
|
9046 class="cmti-12">_size</span>,
|
Chris@1
|
9047 and a total of <span
|
Chris@1
|
9048 class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded
|
Chris@1
|
9049
|
Chris@1
|
9050
|
Chris@1
|
9051
|
Chris@1
|
9052 is <span
|
Chris@1
|
9053 class="cmti-12">n</span>/<span
|
Chris@1
|
9054 class="cmti-12">residue</span><span
|
Chris@1
|
9055 class="cmti-12">_partition</span><span
|
Chris@1
|
9056 class="cmti-12">_size</span>*<span
|
Chris@1
|
9057 class="cmti-12">ch</span>. It is important to note that the integer division
|
Chris@1
|
9058 truncates. In the below example, we assume an example <span
|
Chris@1
|
9059 class="cmti-12">residue</span><span
|
Chris@1
|
9060 class="cmti-12">_partition</span><span
|
Chris@1
|
9061 class="cmti-12">_size </span>of 8.
|
Chris@1
|
9062 </li>
|
Chris@1
|
9063 <li class="itemize">Each partition in each vector has a classification number that specifies which of
|
Chris@1
|
9064 multiple configured VQ codebook setups are used to decode that partition. The
|
Chris@1
|
9065 classification numbers of each partition can be thought of as forming a vector in
|
Chris@1
|
9066 their own right, as in the illustration below. Just as the residue vectors are coded
|
Chris@1
|
9067 in grouped partitions to increase encoding efficiency, the classification vector is also
|
Chris@1
|
9068 partitioned into chunks. The integer elements of each scalar in a classification chunk
|
Chris@1
|
9069 are built into a single scalar that represents the classification numbers in that chunk.
|
Chris@1
|
9070 In the below example, the classification codeword encodes two classification numbers.
|
Chris@1
|
9071 </li>
|
Chris@1
|
9072 <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
|
Chris@1
|
9073 the residue vector, but more often efficient codebook design dictates that each vector
|
Chris@1
|
9074 is encoded as the additive sum of several passes through the residue vector using
|
Chris@1
|
9075 more than one VQ codebook. Thus, each residue value potentially accumulates values
|
Chris@1
|
9076 from multiple decode passes. The classification value associated with a partition is
|
Chris@1
|
9077 the same in each pass, thus the classification codeword is coded only in the first pass.
|
Chris@1
|
9078 </li></ul>
|
Chris@1
|
9079 <div class="center"
|
Chris@1
|
9080 >
|
Chris@1
|
9081 <!--l. 70--><p class="noindent" >
|
Chris@1
|
9082
|
Chris@1
|
9083 <!--l. 71--><p class="noindent" ><img
|
Chris@1
|
9084 src="residue-pack.png" alt="PIC"
|
Chris@1
|
9085 >
|
Chris@1
|
9086 <br /> <div class="caption"
|
Chris@1
|
9087 ><span class="id">Figure 11: </span><span
|
Chris@1
|
9088 class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 -->
|
Chris@1
|
9089 </div>
|
Chris@1
|
9090 <!--l. 77--><p class="noindent" >
|
Chris@1
|
9091 <h4 class="subsectionHead"><span class="titlemark">8.3. </span> <a
|
Chris@1
|
9092 id="x1-1050008.3"></a>residue 0</h4>
|
Chris@1
|
9093 <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
|
Chris@1
|
9094 partition encoding (visually treated as a black box–or cyan box or brown box–in the above
|
Chris@1
|
9095 figure).
|
Chris@1
|
9096 <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
|
Chris@1
|
9097
|
Chris@1
|
9098
|
Chris@1
|
9099
|
Chris@1
|
9100 encode a partition in a specific pass. The dimension of the codebook need not be the same in
|
Chris@1
|
9101 multiple passes, however the partition size must be an even multiple of the codebook
|
Chris@1
|
9102 dimension.
|
Chris@1
|
9103 <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
|
Chris@1
|
9104 codebook sizes of 8, 4, 2 and 1:
|
Chris@1
|
9105 <!--l. 92--><p class="noindent" >
|
Chris@1
|
9106 <div class="fancyvrb" id="fancyvrb33">
|
Chris@1
|
9107 <a
|
Chris@1
|
9108 id="x1-105002r1"></a><span
|
Chris@1
|
9109 class="cmr-6">1</span><span
|
Chris@1
|
9110 class="cmtt-8"> </span><span
|
Chris@1
|
9111 class="cmtt-8"> </span>
|
Chris@1
|
9112 <br class="fancyvrb" /><a
|
Chris@1
|
9113 id="x1-105004r2"></a><span
|
Chris@1
|
9114 class="cmr-6">2</span><span
|
Chris@1
|
9115 class="cmtt-8"> </span><span
|
Chris@1
|
9116 class="cmtt-8"> </span><span
|
Chris@1
|
9117 class="cmtt-8"> </span><span
|
Chris@1
|
9118 class="cmtt-8"> </span><span
|
Chris@1
|
9119 class="cmtt-8"> </span><span
|
Chris@1
|
9120 class="cmtt-8"> </span><span
|
Chris@1
|
9121 class="cmtt-8"> </span><span
|
Chris@1
|
9122 class="cmtt-8"> </span><span
|
Chris@1
|
9123 class="cmtt-8"> </span><span
|
Chris@1
|
9124 class="cmtt-8"> </span><span
|
Chris@1
|
9125 class="cmtt-8"> </span><span
|
Chris@1
|
9126 class="cmtt-8"> </span><span
|
Chris@1
|
9127 class="cmtt-8"> </span><span
|
Chris@1
|
9128 class="cmtt-8"> original</span><span
|
Chris@1
|
9129 class="cmtt-8"> residue</span><span
|
Chris@1
|
9130 class="cmtt-8"> vector:</span><span
|
Chris@1
|
9131 class="cmtt-8"> [</span><span
|
Chris@1
|
9132 class="cmtt-8"> 0</span><span
|
Chris@1
|
9133 class="cmtt-8"> 1</span><span
|
Chris@1
|
9134 class="cmtt-8"> 2</span><span
|
Chris@1
|
9135 class="cmtt-8"> 3</span><span
|
Chris@1
|
9136 class="cmtt-8"> 4</span><span
|
Chris@1
|
9137 class="cmtt-8"> 5</span><span
|
Chris@1
|
9138 class="cmtt-8"> 6</span><span
|
Chris@1
|
9139 class="cmtt-8"> 7</span><span
|
Chris@1
|
9140 class="cmtt-8"> ]</span>
|
Chris@1
|
9141 <br class="fancyvrb" /><a
|
Chris@1
|
9142 id="x1-105006r3"></a><span
|
Chris@1
|
9143 class="cmr-6">3</span><span
|
Chris@1
|
9144 class="cmtt-8"> </span><span
|
Chris@1
|
9145 class="cmtt-8"> </span>
|
Chris@1
|
9146 <br class="fancyvrb" /><a
|
Chris@1
|
9147 id="x1-105008r4"></a><span
|
Chris@1
|
9148 class="cmr-6">4</span><span
|
Chris@1
|
9149 class="cmtt-8"> </span><span
|
Chris@1
|
9150 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9151 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9152 class="cmtt-8"> =</span><span
|
Chris@1
|
9153 class="cmtt-8"> 8</span><span
|
Chris@1
|
9154 class="cmtt-8"> </span><span
|
Chris@1
|
9155 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9156 class="cmtt-8"> as:</span><span
|
Chris@1
|
9157 class="cmtt-8"> [</span><span
|
Chris@1
|
9158 class="cmtt-8"> 0</span><span
|
Chris@1
|
9159 class="cmtt-8"> 1</span><span
|
Chris@1
|
9160 class="cmtt-8"> 2</span><span
|
Chris@1
|
9161 class="cmtt-8"> 3</span><span
|
Chris@1
|
9162 class="cmtt-8"> 4</span><span
|
Chris@1
|
9163 class="cmtt-8"> 5</span><span
|
Chris@1
|
9164 class="cmtt-8"> 6</span><span
|
Chris@1
|
9165 class="cmtt-8"> 7</span><span
|
Chris@1
|
9166 class="cmtt-8"> ]</span>
|
Chris@1
|
9167 <br class="fancyvrb" /><a
|
Chris@1
|
9168 id="x1-105010r5"></a><span
|
Chris@1
|
9169 class="cmr-6">5</span><span
|
Chris@1
|
9170 class="cmtt-8"> </span><span
|
Chris@1
|
9171 class="cmtt-8"> </span>
|
Chris@1
|
9172 <br class="fancyvrb" /><a
|
Chris@1
|
9173 id="x1-105012r6"></a><span
|
Chris@1
|
9174 class="cmr-6">6</span><span
|
Chris@1
|
9175 class="cmtt-8"> </span><span
|
Chris@1
|
9176 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9177 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9178 class="cmtt-8"> =</span><span
|
Chris@1
|
9179 class="cmtt-8"> 4</span><span
|
Chris@1
|
9180 class="cmtt-8"> </span><span
|
Chris@1
|
9181 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9182 class="cmtt-8"> as:</span><span
|
Chris@1
|
9183 class="cmtt-8"> [</span><span
|
Chris@1
|
9184 class="cmtt-8"> 0</span><span
|
Chris@1
|
9185 class="cmtt-8"> 2</span><span
|
Chris@1
|
9186 class="cmtt-8"> 4</span><span
|
Chris@1
|
9187 class="cmtt-8"> 6</span><span
|
Chris@1
|
9188 class="cmtt-8"> ],</span><span
|
Chris@1
|
9189 class="cmtt-8"> [</span><span
|
Chris@1
|
9190 class="cmtt-8"> 1</span><span
|
Chris@1
|
9191 class="cmtt-8"> 3</span><span
|
Chris@1
|
9192 class="cmtt-8"> 5</span><span
|
Chris@1
|
9193 class="cmtt-8"> 7</span><span
|
Chris@1
|
9194 class="cmtt-8"> ]</span>
|
Chris@1
|
9195 <br class="fancyvrb" /><a
|
Chris@1
|
9196 id="x1-105014r7"></a><span
|
Chris@1
|
9197 class="cmr-6">7</span><span
|
Chris@1
|
9198 class="cmtt-8"> </span><span
|
Chris@1
|
9199 class="cmtt-8"> </span>
|
Chris@1
|
9200 <br class="fancyvrb" /><a
|
Chris@1
|
9201 id="x1-105016r8"></a><span
|
Chris@1
|
9202 class="cmr-6">8</span><span
|
Chris@1
|
9203 class="cmtt-8"> </span><span
|
Chris@1
|
9204 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9205 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9206 class="cmtt-8"> =</span><span
|
Chris@1
|
9207 class="cmtt-8"> 2</span><span
|
Chris@1
|
9208 class="cmtt-8"> </span><span
|
Chris@1
|
9209 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9210 class="cmtt-8"> as:</span><span
|
Chris@1
|
9211 class="cmtt-8"> [</span><span
|
Chris@1
|
9212 class="cmtt-8"> 0</span><span
|
Chris@1
|
9213 class="cmtt-8"> 4</span><span
|
Chris@1
|
9214 class="cmtt-8"> ],</span><span
|
Chris@1
|
9215 class="cmtt-8"> [</span><span
|
Chris@1
|
9216 class="cmtt-8"> 1</span><span
|
Chris@1
|
9217 class="cmtt-8"> 5</span><span
|
Chris@1
|
9218 class="cmtt-8"> ],</span><span
|
Chris@1
|
9219 class="cmtt-8"> [</span><span
|
Chris@1
|
9220 class="cmtt-8"> 2</span><span
|
Chris@1
|
9221 class="cmtt-8"> 6</span><span
|
Chris@1
|
9222 class="cmtt-8"> ],</span><span
|
Chris@1
|
9223 class="cmtt-8"> [</span><span
|
Chris@1
|
9224 class="cmtt-8"> 3</span><span
|
Chris@1
|
9225 class="cmtt-8"> 7</span><span
|
Chris@1
|
9226 class="cmtt-8"> ]</span>
|
Chris@1
|
9227 <br class="fancyvrb" /><a
|
Chris@1
|
9228 id="x1-105018r9"></a><span
|
Chris@1
|
9229 class="cmr-6">9</span><span
|
Chris@1
|
9230 class="cmtt-8"> </span><span
|
Chris@1
|
9231 class="cmtt-8"> </span>
|
Chris@1
|
9232 <br class="fancyvrb" /><a
|
Chris@1
|
9233 id="x1-105020r10"></a><span
|
Chris@1
|
9234 class="cmr-6">10</span><span
|
Chris@1
|
9235 class="cmtt-8"> </span><span
|
Chris@1
|
9236 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9237 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9238 class="cmtt-8"> =</span><span
|
Chris@1
|
9239 class="cmtt-8"> 1</span><span
|
Chris@1
|
9240 class="cmtt-8"> </span><span
|
Chris@1
|
9241 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9242 class="cmtt-8"> as:</span><span
|
Chris@1
|
9243 class="cmtt-8"> [</span><span
|
Chris@1
|
9244 class="cmtt-8"> 0</span><span
|
Chris@1
|
9245 class="cmtt-8"> ],</span><span
|
Chris@1
|
9246 class="cmtt-8"> [</span><span
|
Chris@1
|
9247 class="cmtt-8"> 1</span><span
|
Chris@1
|
9248 class="cmtt-8"> ],</span><span
|
Chris@1
|
9249 class="cmtt-8"> [</span><span
|
Chris@1
|
9250 class="cmtt-8"> 2</span><span
|
Chris@1
|
9251 class="cmtt-8"> ],</span><span
|
Chris@1
|
9252 class="cmtt-8"> [</span><span
|
Chris@1
|
9253 class="cmtt-8"> 3</span><span
|
Chris@1
|
9254 class="cmtt-8"> ],</span><span
|
Chris@1
|
9255 class="cmtt-8"> [</span><span
|
Chris@1
|
9256 class="cmtt-8"> 4</span><span
|
Chris@1
|
9257 class="cmtt-8"> ],</span><span
|
Chris@1
|
9258 class="cmtt-8"> [</span><span
|
Chris@1
|
9259 class="cmtt-8"> 5</span><span
|
Chris@1
|
9260 class="cmtt-8"> ],</span><span
|
Chris@1
|
9261 class="cmtt-8"> [</span><span
|
Chris@1
|
9262 class="cmtt-8"> 6</span><span
|
Chris@1
|
9263 class="cmtt-8"> ],</span><span
|
Chris@1
|
9264 class="cmtt-8"> [</span><span
|
Chris@1
|
9265 class="cmtt-8"> 7</span><span
|
Chris@1
|
9266 class="cmtt-8"> ]</span>
|
Chris@1
|
9267 <br class="fancyvrb" /><a
|
Chris@1
|
9268 id="x1-105022r11"></a><span
|
Chris@1
|
9269 class="cmr-6">11</span><span
|
Chris@1
|
9270 class="cmtt-8"> </span><span
|
Chris@1
|
9271 class="cmtt-8"> </span>
|
Chris@1
|
9272 </div>
|
Chris@1
|
9273 <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
|
Chris@1
|
9274 restricted to a power of two.
|
Chris@1
|
9275 <!--l. 111--><p class="noindent" >
|
Chris@1
|
9276 <h4 class="subsectionHead"><span class="titlemark">8.4. </span> <a
|
Chris@1
|
9277 id="x1-1060008.4"></a>residue 1</h4>
|
Chris@1
|
9278 <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
|
Chris@1
|
9279 with residue 0, however, partition length must be an integer multiple of the codebook dimension,
|
Chris@1
|
9280 although dimension may vary from pass to pass.
|
Chris@1
|
9281 <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
|
Chris@1
|
9282 codebook sizes of 8, 4, 2 and 1:
|
Chris@1
|
9283 <!--l. 121--><p class="noindent" >
|
Chris@1
|
9284 <div class="fancyvrb" id="fancyvrb34">
|
Chris@1
|
9285 <a
|
Chris@1
|
9286 id="x1-106002r1"></a><span
|
Chris@1
|
9287 class="cmr-6">1</span><span
|
Chris@1
|
9288 class="cmtt-8"> </span><span
|
Chris@1
|
9289 class="cmtt-8"> </span>
|
Chris@1
|
9290 <br class="fancyvrb" /><a
|
Chris@1
|
9291 id="x1-106004r2"></a><span
|
Chris@1
|
9292 class="cmr-6">2</span><span
|
Chris@1
|
9293 class="cmtt-8"> </span><span
|
Chris@1
|
9294 class="cmtt-8"> </span><span
|
Chris@1
|
9295 class="cmtt-8"> </span><span
|
Chris@1
|
9296 class="cmtt-8"> </span><span
|
Chris@1
|
9297 class="cmtt-8"> </span><span
|
Chris@1
|
9298 class="cmtt-8"> </span><span
|
Chris@1
|
9299 class="cmtt-8"> </span><span
|
Chris@1
|
9300 class="cmtt-8"> </span><span
|
Chris@1
|
9301 class="cmtt-8"> </span><span
|
Chris@1
|
9302 class="cmtt-8"> </span><span
|
Chris@1
|
9303 class="cmtt-8"> </span><span
|
Chris@1
|
9304 class="cmtt-8"> </span><span
|
Chris@1
|
9305 class="cmtt-8"> </span><span
|
Chris@1
|
9306 class="cmtt-8"> original</span><span
|
Chris@1
|
9307 class="cmtt-8"> residue</span><span
|
Chris@1
|
9308 class="cmtt-8"> vector:</span><span
|
Chris@1
|
9309 class="cmtt-8"> [</span><span
|
Chris@1
|
9310 class="cmtt-8"> 0</span><span
|
Chris@1
|
9311 class="cmtt-8"> 1</span><span
|
Chris@1
|
9312 class="cmtt-8"> 2</span><span
|
Chris@1
|
9313 class="cmtt-8"> 3</span><span
|
Chris@1
|
9314 class="cmtt-8"> 4</span><span
|
Chris@1
|
9315 class="cmtt-8"> 5</span><span
|
Chris@1
|
9316 class="cmtt-8"> 6</span><span
|
Chris@1
|
9317 class="cmtt-8"> 7</span><span
|
Chris@1
|
9318 class="cmtt-8"> ]</span>
|
Chris@1
|
9319 <br class="fancyvrb" /><a
|
Chris@1
|
9320 id="x1-106006r3"></a><span
|
Chris@1
|
9321 class="cmr-6">3</span><span
|
Chris@1
|
9322 class="cmtt-8"> </span><span
|
Chris@1
|
9323 class="cmtt-8"> </span>
|
Chris@1
|
9324 <br class="fancyvrb" /><a
|
Chris@1
|
9325 id="x1-106008r4"></a><span
|
Chris@1
|
9326 class="cmr-6">4</span><span
|
Chris@1
|
9327 class="cmtt-8"> </span><span
|
Chris@1
|
9328 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9329 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9330 class="cmtt-8"> =</span><span
|
Chris@1
|
9331 class="cmtt-8"> 8</span><span
|
Chris@1
|
9332 class="cmtt-8"> </span><span
|
Chris@1
|
9333 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9334 class="cmtt-8"> as:</span><span
|
Chris@1
|
9335 class="cmtt-8"> [</span><span
|
Chris@1
|
9336 class="cmtt-8"> 0</span><span
|
Chris@1
|
9337 class="cmtt-8"> 1</span><span
|
Chris@1
|
9338 class="cmtt-8"> 2</span><span
|
Chris@1
|
9339 class="cmtt-8"> 3</span><span
|
Chris@1
|
9340 class="cmtt-8"> 4</span><span
|
Chris@1
|
9341 class="cmtt-8"> 5</span><span
|
Chris@1
|
9342 class="cmtt-8"> 6</span><span
|
Chris@1
|
9343 class="cmtt-8"> 7</span><span
|
Chris@1
|
9344 class="cmtt-8"> ]</span>
|
Chris@1
|
9345 <br class="fancyvrb" /><a
|
Chris@1
|
9346 id="x1-106010r5"></a><span
|
Chris@1
|
9347 class="cmr-6">5</span><span
|
Chris@1
|
9348 class="cmtt-8"> </span><span
|
Chris@1
|
9349 class="cmtt-8"> </span>
|
Chris@1
|
9350 <br class="fancyvrb" /><a
|
Chris@1
|
9351 id="x1-106012r6"></a><span
|
Chris@1
|
9352 class="cmr-6">6</span><span
|
Chris@1
|
9353 class="cmtt-8"> </span><span
|
Chris@1
|
9354 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9355 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9356 class="cmtt-8"> =</span><span
|
Chris@1
|
9357 class="cmtt-8"> 4</span><span
|
Chris@1
|
9358 class="cmtt-8"> </span><span
|
Chris@1
|
9359 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9360 class="cmtt-8"> as:</span><span
|
Chris@1
|
9361 class="cmtt-8"> [</span><span
|
Chris@1
|
9362 class="cmtt-8"> 0</span><span
|
Chris@1
|
9363 class="cmtt-8"> 1</span><span
|
Chris@1
|
9364 class="cmtt-8"> 2</span><span
|
Chris@1
|
9365 class="cmtt-8"> 3</span><span
|
Chris@1
|
9366 class="cmtt-8"> ],</span><span
|
Chris@1
|
9367 class="cmtt-8"> [</span><span
|
Chris@1
|
9368 class="cmtt-8"> 4</span><span
|
Chris@1
|
9369 class="cmtt-8"> 5</span><span
|
Chris@1
|
9370 class="cmtt-8"> 6</span><span
|
Chris@1
|
9371 class="cmtt-8"> 7</span><span
|
Chris@1
|
9372 class="cmtt-8"> ]</span>
|
Chris@1
|
9373 <br class="fancyvrb" /><a
|
Chris@1
|
9374 id="x1-106014r7"></a><span
|
Chris@1
|
9375 class="cmr-6">7</span><span
|
Chris@1
|
9376 class="cmtt-8"> </span><span
|
Chris@1
|
9377 class="cmtt-8"> </span>
|
Chris@1
|
9378 <br class="fancyvrb" /><a
|
Chris@1
|
9379 id="x1-106016r8"></a><span
|
Chris@1
|
9380 class="cmr-6">8</span><span
|
Chris@1
|
9381 class="cmtt-8"> </span><span
|
Chris@1
|
9382 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9383 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9384 class="cmtt-8"> =</span><span
|
Chris@1
|
9385 class="cmtt-8"> 2</span><span
|
Chris@1
|
9386 class="cmtt-8"> </span><span
|
Chris@1
|
9387 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9388 class="cmtt-8"> as:</span><span
|
Chris@1
|
9389 class="cmtt-8"> [</span><span
|
Chris@1
|
9390 class="cmtt-8"> 0</span><span
|
Chris@1
|
9391 class="cmtt-8"> 1</span><span
|
Chris@1
|
9392 class="cmtt-8"> ],</span><span
|
Chris@1
|
9393 class="cmtt-8"> [</span><span
|
Chris@1
|
9394 class="cmtt-8"> 2</span><span
|
Chris@1
|
9395 class="cmtt-8"> 3</span><span
|
Chris@1
|
9396 class="cmtt-8"> ],</span><span
|
Chris@1
|
9397 class="cmtt-8"> [</span><span
|
Chris@1
|
9398 class="cmtt-8"> 4</span><span
|
Chris@1
|
9399 class="cmtt-8"> 5</span><span
|
Chris@1
|
9400 class="cmtt-8"> ],</span><span
|
Chris@1
|
9401 class="cmtt-8"> [</span><span
|
Chris@1
|
9402 class="cmtt-8"> 6</span><span
|
Chris@1
|
9403 class="cmtt-8"> 7</span><span
|
Chris@1
|
9404 class="cmtt-8"> ]</span>
|
Chris@1
|
9405 <br class="fancyvrb" /><a
|
Chris@1
|
9406 id="x1-106018r9"></a><span
|
Chris@1
|
9407 class="cmr-6">9</span><span
|
Chris@1
|
9408 class="cmtt-8"> </span><span
|
Chris@1
|
9409 class="cmtt-8"> </span>
|
Chris@1
|
9410 <br class="fancyvrb" /><a
|
Chris@1
|
9411 id="x1-106020r10"></a><span
|
Chris@1
|
9412 class="cmr-6">10</span><span
|
Chris@1
|
9413 class="cmtt-8"> </span><span
|
Chris@1
|
9414 class="cmtt-8"> codebook</span><span
|
Chris@1
|
9415 class="cmtt-8"> dimensions</span><span
|
Chris@1
|
9416 class="cmtt-8"> =</span><span
|
Chris@1
|
9417 class="cmtt-8"> 1</span><span
|
Chris@1
|
9418 class="cmtt-8"> </span><span
|
Chris@1
|
9419 class="cmtt-8"> encoded</span><span
|
Chris@1
|
9420 class="cmtt-8"> as:</span><span
|
Chris@1
|
9421 class="cmtt-8"> [</span><span
|
Chris@1
|
9422 class="cmtt-8"> 0</span><span
|
Chris@1
|
9423 class="cmtt-8"> ],</span><span
|
Chris@1
|
9424 class="cmtt-8"> [</span><span
|
Chris@1
|
9425 class="cmtt-8"> 1</span><span
|
Chris@1
|
9426 class="cmtt-8"> ],</span><span
|
Chris@1
|
9427 class="cmtt-8"> [</span><span
|
Chris@1
|
9428 class="cmtt-8"> 2</span><span
|
Chris@1
|
9429 class="cmtt-8"> ],</span><span
|
Chris@1
|
9430 class="cmtt-8"> [</span><span
|
Chris@1
|
9431 class="cmtt-8"> 3</span><span
|
Chris@1
|
9432 class="cmtt-8"> ],</span><span
|
Chris@1
|
9433 class="cmtt-8"> [</span><span
|
Chris@1
|
9434 class="cmtt-8"> 4</span><span
|
Chris@1
|
9435 class="cmtt-8"> ],</span><span
|
Chris@1
|
9436 class="cmtt-8"> [</span><span
|
Chris@1
|
9437 class="cmtt-8"> 5</span><span
|
Chris@1
|
9438 class="cmtt-8"> ],</span><span
|
Chris@1
|
9439 class="cmtt-8"> [</span><span
|
Chris@1
|
9440 class="cmtt-8"> 6</span><span
|
Chris@1
|
9441 class="cmtt-8"> ],</span><span
|
Chris@1
|
9442 class="cmtt-8"> [</span><span
|
Chris@1
|
9443 class="cmtt-8"> 7</span><span
|
Chris@1
|
9444 class="cmtt-8"> ]</span>
|
Chris@1
|
9445 <br class="fancyvrb" /><a
|
Chris@1
|
9446 id="x1-106022r11"></a><span
|
Chris@1
|
9447 class="cmr-6">11</span><span
|
Chris@1
|
9448 class="cmtt-8"> </span><span
|
Chris@1
|
9449 class="cmtt-8"> </span>
|
Chris@1
|
9450
|
Chris@1
|
9451
|
Chris@1
|
9452
|
Chris@1
|
9453 </div>
|
Chris@1
|
9454 <!--l. 137--><p class="noindent" >
|
Chris@1
|
9455 <h4 class="subsectionHead"><span class="titlemark">8.5. </span> <a
|
Chris@1
|
9456 id="x1-1070008.5"></a>residue 2</h4>
|
Chris@1
|
9457 <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
|
Chris@1
|
9458 passed-in vectors as in residue type 1, the <span
|
Chris@1
|
9459 class="cmti-12">ch </span>passed in vectors of length <span
|
Chris@1
|
9460 class="cmti-12">n </span>are first interleaved
|
Chris@1
|
9461 and flattened into a single vector of length <span
|
Chris@1
|
9462 class="cmti-12">ch</span>*<span
|
Chris@1
|
9463 class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
|
Chris@1
|
9464 is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
|
Chris@1
|
9465 residue type 1 and type 2 are equivalent.
|
Chris@1
|
9466 <div class="center"
|
Chris@1
|
9467 >
|
Chris@1
|
9468 <!--l. 147--><p class="noindent" >
|
Chris@1
|
9469
|
Chris@1
|
9470 <!--l. 148--><p class="noindent" ><img
|
Chris@1
|
9471 src="residue2.png" alt="PIC"
|
Chris@1
|
9472 >
|
Chris@1
|
9473 <br /> <div class="caption"
|
Chris@1
|
9474 ><span class="id">Figure 12: </span><span
|
Chris@1
|
9475 class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 -->
|
Chris@1
|
9476 </div>
|
Chris@1
|
9477 <!--l. 153--><p class="noindent" >
|
Chris@1
|
9478 <h4 class="subsectionHead"><span class="titlemark">8.6. </span> <a
|
Chris@1
|
9479 id="x1-1080008.6"></a>Residue decode</h4>
|
Chris@1
|
9480 <!--l. 155--><p class="noindent" >
|
Chris@1
|
9481 <h5 class="subsubsectionHead"><span class="titlemark">8.6.1. </span> <a
|
Chris@1
|
9482 id="x1-1090008.6.1"></a>header decode</h5>
|
Chris@1
|
9483 <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
|
Chris@1
|
9484 <div class="fancyvrb" id="fancyvrb35">
|
Chris@1
|
9485 <a
|
Chris@1
|
9486 id="x1-109002r1"></a><span
|
Chris@1
|
9487 class="cmr-6">1</span><span
|
Chris@1
|
9488 class="cmtt-8"> </span><span
|
Chris@1
|
9489 class="cmtt-8"> </span><span
|
Chris@1
|
9490 class="cmtt-8"> </span><span
|
Chris@1
|
9491 class="cmtt-8"> 1)</span><span
|
Chris@1
|
9492 class="cmtt-8"> [residue\_begin]</span><span
|
Chris@1
|
9493 class="cmtt-8"> =</span><span
|
Chris@1
|
9494 class="cmtt-8"> read</span><span
|
Chris@1
|
9495 class="cmtt-8"> 24</span><span
|
Chris@1
|
9496 class="cmtt-8"> bits</span><span
|
Chris@1
|
9497 class="cmtt-8"> as</span><span
|
Chris@1
|
9498 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9499 class="cmtt-8"> integer</span>
|
Chris@1
|
9500 <br class="fancyvrb" /><a
|
Chris@1
|
9501 id="x1-109004r2"></a><span
|
Chris@1
|
9502 class="cmr-6">2</span><span
|
Chris@1
|
9503 class="cmtt-8"> </span><span
|
Chris@1
|
9504 class="cmtt-8"> </span><span
|
Chris@1
|
9505 class="cmtt-8"> </span><span
|
Chris@1
|
9506 class="cmtt-8"> 2)</span><span
|
Chris@1
|
9507 class="cmtt-8"> [residue\_end]</span><span
|
Chris@1
|
9508 class="cmtt-8"> =</span><span
|
Chris@1
|
9509 class="cmtt-8"> read</span><span
|
Chris@1
|
9510 class="cmtt-8"> 24</span><span
|
Chris@1
|
9511 class="cmtt-8"> bits</span><span
|
Chris@1
|
9512 class="cmtt-8"> as</span><span
|
Chris@1
|
9513 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9514 class="cmtt-8"> integer</span>
|
Chris@1
|
9515 <br class="fancyvrb" /><a
|
Chris@1
|
9516 id="x1-109006r3"></a><span
|
Chris@1
|
9517 class="cmr-6">3</span><span
|
Chris@1
|
9518 class="cmtt-8"> </span><span
|
Chris@1
|
9519 class="cmtt-8"> </span><span
|
Chris@1
|
9520 class="cmtt-8"> </span><span
|
Chris@1
|
9521 class="cmtt-8"> 3)</span><span
|
Chris@1
|
9522 class="cmtt-8"> [residue\_partition\_size]</span><span
|
Chris@1
|
9523 class="cmtt-8"> =</span><span
|
Chris@1
|
9524 class="cmtt-8"> read</span><span
|
Chris@1
|
9525 class="cmtt-8"> 24</span><span
|
Chris@1
|
9526 class="cmtt-8"> bits</span><span
|
Chris@1
|
9527 class="cmtt-8"> as</span><span
|
Chris@1
|
9528 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9529 class="cmtt-8"> integer</span><span
|
Chris@1
|
9530 class="cmtt-8"> and</span><span
|
Chris@1
|
9531 class="cmtt-8"> add</span><span
|
Chris@1
|
9532 class="cmtt-8"> one</span>
|
Chris@1
|
9533 <br class="fancyvrb" /><a
|
Chris@1
|
9534 id="x1-109008r4"></a><span
|
Chris@1
|
9535 class="cmr-6">4</span><span
|
Chris@1
|
9536 class="cmtt-8"> </span><span
|
Chris@1
|
9537 class="cmtt-8"> </span><span
|
Chris@1
|
9538 class="cmtt-8"> </span><span
|
Chris@1
|
9539 class="cmtt-8"> 4)</span><span
|
Chris@1
|
9540 class="cmtt-8"> [residue\_classifications]</span><span
|
Chris@1
|
9541 class="cmtt-8"> =</span><span
|
Chris@1
|
9542 class="cmtt-8"> read</span><span
|
Chris@1
|
9543 class="cmtt-8"> 6</span><span
|
Chris@1
|
9544 class="cmtt-8"> bits</span><span
|
Chris@1
|
9545 class="cmtt-8"> as</span><span
|
Chris@1
|
9546 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9547 class="cmtt-8"> integer</span><span
|
Chris@1
|
9548 class="cmtt-8"> and</span><span
|
Chris@1
|
9549 class="cmtt-8"> add</span><span
|
Chris@1
|
9550 class="cmtt-8"> one</span>
|
Chris@1
|
9551
|
Chris@1
|
9552
|
Chris@1
|
9553
|
Chris@1
|
9554 <br class="fancyvrb" /><a
|
Chris@1
|
9555 id="x1-109010r5"></a><span
|
Chris@1
|
9556 class="cmr-6">5</span><span
|
Chris@1
|
9557 class="cmtt-8"> </span><span
|
Chris@1
|
9558 class="cmtt-8"> </span><span
|
Chris@1
|
9559 class="cmtt-8"> </span><span
|
Chris@1
|
9560 class="cmtt-8"> 5)</span><span
|
Chris@1
|
9561 class="cmtt-8"> [residue\_classbook]</span><span
|
Chris@1
|
9562 class="cmtt-8"> =</span><span
|
Chris@1
|
9563 class="cmtt-8"> read</span><span
|
Chris@1
|
9564 class="cmtt-8"> 8</span><span
|
Chris@1
|
9565 class="cmtt-8"> bits</span><span
|
Chris@1
|
9566 class="cmtt-8"> as</span><span
|
Chris@1
|
9567 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9568 class="cmtt-8"> integer</span>
|
Chris@1
|
9569 </div>
|
Chris@1
|
9570 <!--l. 166--><p class="noindent" ><span
|
Chris@1
|
9571 class="cmtt-12">[residue_begin] </span>and <span
|
Chris@1
|
9572 class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
|
Chris@1
|
9573 actually coded; it implements akin to a bandpass where, for coding purposes, the vector
|
Chris@1
|
9574 effectively begins at element <span
|
Chris@1
|
9575 class="cmtt-12">[residue_begin] </span>and ends at <span
|
Chris@1
|
9576 class="cmtt-12">[residue_end]</span>. Preceding and
|
Chris@1
|
9577 following values in the unpacked vectors are zeroed. Note that for residue type 2, these
|
Chris@1
|
9578 values as well as <span
|
Chris@1
|
9579 class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
|
Chris@1
|
9580 individual vectors before interleave. <span
|
Chris@1
|
9581 class="cmtt-12">[residue_partition_size] </span>is as explained above,
|
Chris@1
|
9582 <span
|
Chris@1
|
9583 class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
|
Chris@1
|
9584 belong and <span
|
Chris@1
|
9585 class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
|
Chris@1
|
9586 codewords. The number of dimensions in book <span
|
Chris@1
|
9587 class="cmtt-12">[residue_classbook] </span>determines how
|
Chris@1
|
9588 many classification values are grouped into a single classification codeword. Note that
|
Chris@1
|
9589 the number of entries and dimensions in book <span
|
Chris@1
|
9590 class="cmtt-12">[residue_classbook]</span>, along with
|
Chris@1
|
9591 <span
|
Chris@1
|
9592 class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
|
Chris@1
|
9593 codewords. If <span
|
Chris@1
|
9594 class="cmtt-12">[residue_classifications]</span>ˆ<span
|
Chris@1
|
9595 class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
|
Chris@1
|
9596 <span
|
Chris@1
|
9597 class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
|
Chris@1
|
9598 <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
|
Chris@1
|
9599 passes.
|
Chris@1
|
9600 <!--l. 193--><p class="noindent" >
|
Chris@1
|
9601 <div class="fancyvrb" id="fancyvrb36">
|
Chris@1
|
9602 <a
|
Chris@1
|
9603 id="x1-109012r1"></a><span
|
Chris@1
|
9604 class="cmr-6">1</span><span
|
Chris@1
|
9605 class="cmtt-8"> </span><span
|
Chris@1
|
9606 class="cmtt-8"> </span><span
|
Chris@1
|
9607 class="cmtt-8"> </span><span
|
Chris@1
|
9608 class="cmtt-8"> 1)</span><span
|
Chris@1
|
9609 class="cmtt-8"> iterate</span><span
|
Chris@1
|
9610 class="cmtt-8"> [i]</span><span
|
Chris@1
|
9611 class="cmtt-8"> over</span><span
|
Chris@1
|
9612 class="cmtt-8"> the</span><span
|
Chris@1
|
9613 class="cmtt-8"> range</span><span
|
Chris@1
|
9614 class="cmtt-8"> 0</span><span
|
Chris@1
|
9615 class="cmtt-8"> ...</span><span
|
Chris@1
|
9616 class="cmtt-8"> [residue\_classifications]-1</span><span
|
Chris@1
|
9617 class="cmtt-8"> {</span>
|
Chris@1
|
9618 <br class="fancyvrb" /><a
|
Chris@1
|
9619 id="x1-109014r2"></a><span
|
Chris@1
|
9620 class="cmr-6">2</span><span
|
Chris@1
|
9621 class="cmtt-8"> </span><span
|
Chris@1
|
9622 class="cmtt-8"> </span>
|
Chris@1
|
9623 <br class="fancyvrb" /><a
|
Chris@1
|
9624 id="x1-109016r3"></a><span
|
Chris@1
|
9625 class="cmr-6">3</span><span
|
Chris@1
|
9626 class="cmtt-8"> </span><span
|
Chris@1
|
9627 class="cmtt-8"> </span><span
|
Chris@1
|
9628 class="cmtt-8"> </span><span
|
Chris@1
|
9629 class="cmtt-8"> </span><span
|
Chris@1
|
9630 class="cmtt-8"> </span><span
|
Chris@1
|
9631 class="cmtt-8"> </span><span
|
Chris@1
|
9632 class="cmtt-8"> </span><span
|
Chris@1
|
9633 class="cmtt-8"> </span><span
|
Chris@1
|
9634 class="cmtt-8"> 2)</span><span
|
Chris@1
|
9635 class="cmtt-8"> [high\_bits]</span><span
|
Chris@1
|
9636 class="cmtt-8"> =</span><span
|
Chris@1
|
9637 class="cmtt-8"> 0</span>
|
Chris@1
|
9638 <br class="fancyvrb" /><a
|
Chris@1
|
9639 id="x1-109018r4"></a><span
|
Chris@1
|
9640 class="cmr-6">4</span><span
|
Chris@1
|
9641 class="cmtt-8"> </span><span
|
Chris@1
|
9642 class="cmtt-8"> </span><span
|
Chris@1
|
9643 class="cmtt-8"> </span><span
|
Chris@1
|
9644 class="cmtt-8"> </span><span
|
Chris@1
|
9645 class="cmtt-8"> </span><span
|
Chris@1
|
9646 class="cmtt-8"> </span><span
|
Chris@1
|
9647 class="cmtt-8"> </span><span
|
Chris@1
|
9648 class="cmtt-8"> </span><span
|
Chris@1
|
9649 class="cmtt-8"> 3)</span><span
|
Chris@1
|
9650 class="cmtt-8"> [low\_bits]</span><span
|
Chris@1
|
9651 class="cmtt-8"> =</span><span
|
Chris@1
|
9652 class="cmtt-8"> read</span><span
|
Chris@1
|
9653 class="cmtt-8"> 3</span><span
|
Chris@1
|
9654 class="cmtt-8"> bits</span><span
|
Chris@1
|
9655 class="cmtt-8"> as</span><span
|
Chris@1
|
9656 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9657 class="cmtt-8"> integer</span>
|
Chris@1
|
9658 <br class="fancyvrb" /><a
|
Chris@1
|
9659 id="x1-109020r5"></a><span
|
Chris@1
|
9660 class="cmr-6">5</span><span
|
Chris@1
|
9661 class="cmtt-8"> </span><span
|
Chris@1
|
9662 class="cmtt-8"> </span><span
|
Chris@1
|
9663 class="cmtt-8"> </span><span
|
Chris@1
|
9664 class="cmtt-8"> </span><span
|
Chris@1
|
9665 class="cmtt-8"> </span><span
|
Chris@1
|
9666 class="cmtt-8"> </span><span
|
Chris@1
|
9667 class="cmtt-8"> </span><span
|
Chris@1
|
9668 class="cmtt-8"> </span><span
|
Chris@1
|
9669 class="cmtt-8"> 4)</span><span
|
Chris@1
|
9670 class="cmtt-8"> [bitflag]</span><span
|
Chris@1
|
9671 class="cmtt-8"> =</span><span
|
Chris@1
|
9672 class="cmtt-8"> read</span><span
|
Chris@1
|
9673 class="cmtt-8"> one</span><span
|
Chris@1
|
9674 class="cmtt-8"> bit</span><span
|
Chris@1
|
9675 class="cmtt-8"> as</span><span
|
Chris@1
|
9676 class="cmtt-8"> boolean</span>
|
Chris@1
|
9677 <br class="fancyvrb" /><a
|
Chris@1
|
9678 id="x1-109022r6"></a><span
|
Chris@1
|
9679 class="cmr-6">6</span><span
|
Chris@1
|
9680 class="cmtt-8"> </span><span
|
Chris@1
|
9681 class="cmtt-8"> </span><span
|
Chris@1
|
9682 class="cmtt-8"> </span><span
|
Chris@1
|
9683 class="cmtt-8"> </span><span
|
Chris@1
|
9684 class="cmtt-8"> </span><span
|
Chris@1
|
9685 class="cmtt-8"> </span><span
|
Chris@1
|
9686 class="cmtt-8"> </span><span
|
Chris@1
|
9687 class="cmtt-8"> </span><span
|
Chris@1
|
9688 class="cmtt-8"> 5)</span><span
|
Chris@1
|
9689 class="cmtt-8"> if</span><span
|
Chris@1
|
9690 class="cmtt-8"> (</span><span
|
Chris@1
|
9691 class="cmtt-8"> [bitflag]</span><span
|
Chris@1
|
9692 class="cmtt-8"> is</span><span
|
Chris@1
|
9693 class="cmtt-8"> set</span><span
|
Chris@1
|
9694 class="cmtt-8"> )</span><span
|
Chris@1
|
9695 class="cmtt-8"> then</span><span
|
Chris@1
|
9696 class="cmtt-8"> [high\_bits]</span><span
|
Chris@1
|
9697 class="cmtt-8"> =</span><span
|
Chris@1
|
9698 class="cmtt-8"> read</span><span
|
Chris@1
|
9699 class="cmtt-8"> five</span><span
|
Chris@1
|
9700 class="cmtt-8"> bits</span><span
|
Chris@1
|
9701 class="cmtt-8"> as</span><span
|
Chris@1
|
9702 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9703 class="cmtt-8"> integer</span>
|
Chris@1
|
9704 <br class="fancyvrb" /><a
|
Chris@1
|
9705 id="x1-109024r7"></a><span
|
Chris@1
|
9706 class="cmr-6">7</span><span
|
Chris@1
|
9707 class="cmtt-8"> </span><span
|
Chris@1
|
9708 class="cmtt-8"> </span><span
|
Chris@1
|
9709 class="cmtt-8"> </span><span
|
Chris@1
|
9710 class="cmtt-8"> </span><span
|
Chris@1
|
9711 class="cmtt-8"> </span><span
|
Chris@1
|
9712 class="cmtt-8"> </span><span
|
Chris@1
|
9713 class="cmtt-8"> </span><span
|
Chris@1
|
9714 class="cmtt-8"> </span><span
|
Chris@1
|
9715 class="cmtt-8"> 6)</span><span
|
Chris@1
|
9716 class="cmtt-8"> vector</span><span
|
Chris@1
|
9717 class="cmtt-8"> [residue\_cascade]</span><span
|
Chris@1
|
9718 class="cmtt-8"> element</span><span
|
Chris@1
|
9719 class="cmtt-8"> [i]</span><span
|
Chris@1
|
9720 class="cmtt-8"> =</span><span
|
Chris@1
|
9721 class="cmtt-8"> [high\_bits]</span><span
|
Chris@1
|
9722 class="cmtt-8"> *</span><span
|
Chris@1
|
9723 class="cmtt-8"> 8</span><span
|
Chris@1
|
9724 class="cmtt-8"> +</span><span
|
Chris@1
|
9725 class="cmtt-8"> [low\_bits]</span>
|
Chris@1
|
9726 <br class="fancyvrb" /><a
|
Chris@1
|
9727 id="x1-109026r8"></a><span
|
Chris@1
|
9728 class="cmr-6">8</span><span
|
Chris@1
|
9729 class="cmtt-8"> </span><span
|
Chris@1
|
9730 class="cmtt-8"> </span><span
|
Chris@1
|
9731 class="cmtt-8"> </span><span
|
Chris@1
|
9732 class="cmtt-8"> </span><span
|
Chris@1
|
9733 class="cmtt-8"> </span><span
|
Chris@1
|
9734 class="cmtt-8"> </span><span
|
Chris@1
|
9735 class="cmtt-8"> }</span>
|
Chris@1
|
9736 <br class="fancyvrb" /><a
|
Chris@1
|
9737 id="x1-109028r9"></a><span
|
Chris@1
|
9738 class="cmr-6">9</span><span
|
Chris@1
|
9739 class="cmtt-8"> </span><span
|
Chris@1
|
9740 class="cmtt-8"> </span><span
|
Chris@1
|
9741 class="cmtt-8"> </span><span
|
Chris@1
|
9742 class="cmtt-8"> 7)</span><span
|
Chris@1
|
9743 class="cmtt-8"> done</span>
|
Chris@1
|
9744 </div>
|
Chris@1
|
9745 <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
|
Chris@1
|
9746 bitmap. We loop over the possible codebook classifications and the maximum possible number of
|
Chris@1
|
9747 encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
|
Chris@1
|
9748 bits):
|
Chris@1
|
9749 <!--l. 211--><p class="noindent" >
|
Chris@1
|
9750 <div class="fancyvrb" id="fancyvrb37">
|
Chris@1
|
9751 <a
|
Chris@1
|
9752 id="x1-109030r1"></a><span
|
Chris@1
|
9753 class="cmr-6">1</span><span
|
Chris@1
|
9754 class="cmtt-8"> </span><span
|
Chris@1
|
9755 class="cmtt-8"> </span><span
|
Chris@1
|
9756 class="cmtt-8"> </span><span
|
Chris@1
|
9757 class="cmtt-8"> 1)</span><span
|
Chris@1
|
9758 class="cmtt-8"> iterate</span><span
|
Chris@1
|
9759 class="cmtt-8"> [i]</span><span
|
Chris@1
|
9760 class="cmtt-8"> over</span><span
|
Chris@1
|
9761 class="cmtt-8"> the</span><span
|
Chris@1
|
9762 class="cmtt-8"> range</span><span
|
Chris@1
|
9763 class="cmtt-8"> 0</span><span
|
Chris@1
|
9764 class="cmtt-8"> ...</span><span
|
Chris@1
|
9765 class="cmtt-8"> [residue\_classifications]-1</span><span
|
Chris@1
|
9766 class="cmtt-8"> {</span>
|
Chris@1
|
9767 <br class="fancyvrb" /><a
|
Chris@1
|
9768 id="x1-109032r2"></a><span
|
Chris@1
|
9769 class="cmr-6">2</span><span
|
Chris@1
|
9770 class="cmtt-8"> </span><span
|
Chris@1
|
9771 class="cmtt-8"> </span>
|
Chris@1
|
9772 <br class="fancyvrb" /><a
|
Chris@1
|
9773 id="x1-109034r3"></a><span
|
Chris@1
|
9774 class="cmr-6">3</span><span
|
Chris@1
|
9775 class="cmtt-8"> </span><span
|
Chris@1
|
9776 class="cmtt-8"> </span><span
|
Chris@1
|
9777 class="cmtt-8"> </span><span
|
Chris@1
|
9778 class="cmtt-8"> </span><span
|
Chris@1
|
9779 class="cmtt-8"> </span><span
|
Chris@1
|
9780 class="cmtt-8"> </span><span
|
Chris@1
|
9781 class="cmtt-8"> </span><span
|
Chris@1
|
9782 class="cmtt-8"> </span><span
|
Chris@1
|
9783 class="cmtt-8"> 2)</span><span
|
Chris@1
|
9784 class="cmtt-8"> iterate</span><span
|
Chris@1
|
9785 class="cmtt-8"> [j]</span><span
|
Chris@1
|
9786 class="cmtt-8"> over</span><span
|
Chris@1
|
9787 class="cmtt-8"> the</span><span
|
Chris@1
|
9788 class="cmtt-8"> range</span><span
|
Chris@1
|
9789 class="cmtt-8"> 0</span><span
|
Chris@1
|
9790 class="cmtt-8"> ...</span><span
|
Chris@1
|
9791 class="cmtt-8"> 7</span><span
|
Chris@1
|
9792 class="cmtt-8"> {</span>
|
Chris@1
|
9793 <br class="fancyvrb" /><a
|
Chris@1
|
9794 id="x1-109036r4"></a><span
|
Chris@1
|
9795 class="cmr-6">4</span><span
|
Chris@1
|
9796 class="cmtt-8"> </span><span
|
Chris@1
|
9797 class="cmtt-8"> </span>
|
Chris@1
|
9798 <br class="fancyvrb" /><a
|
Chris@1
|
9799 id="x1-109038r5"></a><span
|
Chris@1
|
9800 class="cmr-6">5</span><span
|
Chris@1
|
9801 class="cmtt-8"> </span><span
|
Chris@1
|
9802 class="cmtt-8"> </span><span
|
Chris@1
|
9803 class="cmtt-8"> </span><span
|
Chris@1
|
9804 class="cmtt-8"> </span><span
|
Chris@1
|
9805 class="cmtt-8"> </span><span
|
Chris@1
|
9806 class="cmtt-8"> </span><span
|
Chris@1
|
9807 class="cmtt-8"> </span><span
|
Chris@1
|
9808 class="cmtt-8"> </span><span
|
Chris@1
|
9809 class="cmtt-8"> </span><span
|
Chris@1
|
9810 class="cmtt-8"> </span><span
|
Chris@1
|
9811 class="cmtt-8"> </span><span
|
Chris@1
|
9812 class="cmtt-8"> </span><span
|
Chris@1
|
9813 class="cmtt-8"> </span><span
|
Chris@1
|
9814 class="cmtt-8"> 3)</span><span
|
Chris@1
|
9815 class="cmtt-8"> if</span><span
|
Chris@1
|
9816 class="cmtt-8"> (</span><span
|
Chris@1
|
9817 class="cmtt-8"> vector</span><span
|
Chris@1
|
9818 class="cmtt-8"> [residue\_cascade]</span><span
|
Chris@1
|
9819 class="cmtt-8"> element</span><span
|
Chris@1
|
9820 class="cmtt-8"> [i]</span><span
|
Chris@1
|
9821 class="cmtt-8"> bit</span><span
|
Chris@1
|
9822 class="cmtt-8"> [j]</span><span
|
Chris@1
|
9823 class="cmtt-8"> is</span><span
|
Chris@1
|
9824 class="cmtt-8"> set</span><span
|
Chris@1
|
9825 class="cmtt-8"> )</span><span
|
Chris@1
|
9826 class="cmtt-8"> {</span>
|
Chris@1
|
9827 <br class="fancyvrb" /><a
|
Chris@1
|
9828 id="x1-109040r6"></a><span
|
Chris@1
|
9829 class="cmr-6">6</span><span
|
Chris@1
|
9830 class="cmtt-8"> </span><span
|
Chris@1
|
9831 class="cmtt-8"> </span>
|
Chris@1
|
9832 <br class="fancyvrb" /><a
|
Chris@1
|
9833 id="x1-109042r7"></a><span
|
Chris@1
|
9834 class="cmr-6">7</span><span
|
Chris@1
|
9835 class="cmtt-8"> </span><span
|
Chris@1
|
9836 class="cmtt-8"> </span><span
|
Chris@1
|
9837 class="cmtt-8"> </span><span
|
Chris@1
|
9838 class="cmtt-8"> </span><span
|
Chris@1
|
9839 class="cmtt-8"> </span><span
|
Chris@1
|
9840 class="cmtt-8"> </span><span
|
Chris@1
|
9841 class="cmtt-8"> </span><span
|
Chris@1
|
9842 class="cmtt-8"> </span><span
|
Chris@1
|
9843 class="cmtt-8"> </span><span
|
Chris@1
|
9844 class="cmtt-8"> </span><span
|
Chris@1
|
9845 class="cmtt-8"> </span><span
|
Chris@1
|
9846 class="cmtt-8"> </span><span
|
Chris@1
|
9847 class="cmtt-8"> </span><span
|
Chris@1
|
9848 class="cmtt-8"> </span><span
|
Chris@1
|
9849 class="cmtt-8"> </span><span
|
Chris@1
|
9850 class="cmtt-8"> </span><span
|
Chris@1
|
9851 class="cmtt-8"> </span><span
|
Chris@1
|
9852 class="cmtt-8"> </span><span
|
Chris@1
|
9853 class="cmtt-8"> 4)</span><span
|
Chris@1
|
9854 class="cmtt-8"> array</span><span
|
Chris@1
|
9855 class="cmtt-8"> [residue\_books]</span><span
|
Chris@1
|
9856 class="cmtt-8"> element</span><span
|
Chris@1
|
9857 class="cmtt-8"> [i][j]</span><span
|
Chris@1
|
9858 class="cmtt-8"> =</span><span
|
Chris@1
|
9859 class="cmtt-8"> read</span><span
|
Chris@1
|
9860 class="cmtt-8"> 8</span><span
|
Chris@1
|
9861 class="cmtt-8"> bits</span><span
|
Chris@1
|
9862 class="cmtt-8"> as</span><span
|
Chris@1
|
9863 class="cmtt-8"> unsigned</span><span
|
Chris@1
|
9864 class="cmtt-8"> integer</span>
|
Chris@1
|
9865 <br class="fancyvrb" /><a
|
Chris@1
|
9866 id="x1-109044r8"></a><span
|
Chris@1
|
9867 class="cmr-6">8</span><span
|
Chris@1
|
9868 class="cmtt-8"> </span><span
|
Chris@1
|
9869 class="cmtt-8"> </span>
|
Chris@1
|
9870 <br class="fancyvrb" /><a
|
Chris@1
|
9871 id="x1-109046r9"></a><span
|
Chris@1
|
9872 class="cmr-6">9</span><span
|
Chris@1
|
9873 class="cmtt-8"> </span><span
|
Chris@1
|
9874 class="cmtt-8"> </span><span
|
Chris@1
|
9875 class="cmtt-8"> </span><span
|
Chris@1
|
9876 class="cmtt-8"> </span><span
|
Chris@1
|
9877 class="cmtt-8"> </span><span
|
Chris@1
|
9878 class="cmtt-8"> </span><span
|
Chris@1
|
9879 class="cmtt-8"> </span><span
|
Chris@1
|
9880 class="cmtt-8"> </span><span
|
Chris@1
|
9881 class="cmtt-8"> </span><span
|
Chris@1
|
9882 class="cmtt-8"> </span><span
|
Chris@1
|
9883 class="cmtt-8"> </span><span
|
Chris@1
|
9884 class="cmtt-8"> </span><span
|
Chris@1
|
9885 class="cmtt-8"> </span><span
|
Chris@1
|
9886 class="cmtt-8"> </span><span
|
Chris@1
|
9887 class="cmtt-8"> </span><span
|
Chris@1
|
9888 class="cmtt-8"> </span><span
|
Chris@1
|
9889 class="cmtt-8"> }</span><span
|
Chris@1
|
9890 class="cmtt-8"> else</span><span
|
Chris@1
|
9891 class="cmtt-8"> {</span>
|
Chris@1
|
9892
|
Chris@1
|
9893
|
Chris@1
|
9894
|
Chris@1
|
9895 <br class="fancyvrb" /><a
|
Chris@1
|
9896 id="x1-109048r10"></a><span
|
Chris@1
|
9897 class="cmr-6">10</span><span
|
Chris@1
|
9898 class="cmtt-8"> </span><span
|
Chris@1
|
9899 class="cmtt-8"> </span>
|
Chris@1
|
9900 <br class="fancyvrb" /><a
|
Chris@1
|
9901 id="x1-109050r11"></a><span
|
Chris@1
|
9902 class="cmr-6">11</span><span
|
Chris@1
|
9903 class="cmtt-8"> </span><span
|
Chris@1
|
9904 class="cmtt-8"> </span><span
|
Chris@1
|
9905 class="cmtt-8"> </span><span
|
Chris@1
|
9906 class="cmtt-8"> </span><span
|
Chris@1
|
9907 class="cmtt-8"> </span><span
|
Chris@1
|
9908 class="cmtt-8"> </span><span
|
Chris@1
|
9909 class="cmtt-8"> </span><span
|
Chris@1
|
9910 class="cmtt-8"> </span><span
|
Chris@1
|
9911 class="cmtt-8"> </span><span
|
Chris@1
|
9912 class="cmtt-8"> </span><span
|
Chris@1
|
9913 class="cmtt-8"> </span><span
|
Chris@1
|
9914 class="cmtt-8"> </span><span
|
Chris@1
|
9915 class="cmtt-8"> </span><span
|
Chris@1
|
9916 class="cmtt-8"> </span><span
|
Chris@1
|
9917 class="cmtt-8"> </span><span
|
Chris@1
|
9918 class="cmtt-8"> </span><span
|
Chris@1
|
9919 class="cmtt-8"> </span><span
|
Chris@1
|
9920 class="cmtt-8"> </span><span
|
Chris@1
|
9921 class="cmtt-8"> 5)</span><span
|
Chris@1
|
9922 class="cmtt-8"> array</span><span
|
Chris@1
|
9923 class="cmtt-8"> [residue\_books]</span><span
|
Chris@1
|
9924 class="cmtt-8"> element</span><span
|
Chris@1
|
9925 class="cmtt-8"> [i][j]</span><span
|
Chris@1
|
9926 class="cmtt-8"> =</span><span
|
Chris@1
|
9927 class="cmtt-8"> unused</span>
|
Chris@1
|
9928 <br class="fancyvrb" /><a
|
Chris@1
|
9929 id="x1-109052r12"></a><span
|
Chris@1
|
9930 class="cmr-6">12</span><span
|
Chris@1
|
9931 class="cmtt-8"> </span><span
|
Chris@1
|
9932 class="cmtt-8"> </span>
|
Chris@1
|
9933 <br class="fancyvrb" /><a
|
Chris@1
|
9934 id="x1-109054r13"></a><span
|
Chris@1
|
9935 class="cmr-6">13</span><span
|
Chris@1
|
9936 class="cmtt-8"> </span><span
|
Chris@1
|
9937 class="cmtt-8"> </span><span
|
Chris@1
|
9938 class="cmtt-8"> </span><span
|
Chris@1
|
9939 class="cmtt-8"> </span><span
|
Chris@1
|
9940 class="cmtt-8"> </span><span
|
Chris@1
|
9941 class="cmtt-8"> </span><span
|
Chris@1
|
9942 class="cmtt-8"> </span><span
|
Chris@1
|
9943 class="cmtt-8"> </span><span
|
Chris@1
|
9944 class="cmtt-8"> </span><span
|
Chris@1
|
9945 class="cmtt-8"> </span><span
|
Chris@1
|
9946 class="cmtt-8"> </span><span
|
Chris@1
|
9947 class="cmtt-8"> </span><span
|
Chris@1
|
9948 class="cmtt-8"> </span><span
|
Chris@1
|
9949 class="cmtt-8"> </span><span
|
Chris@1
|
9950 class="cmtt-8"> </span><span
|
Chris@1
|
9951 class="cmtt-8"> </span><span
|
Chris@1
|
9952 class="cmtt-8"> }</span>
|
Chris@1
|
9953 <br class="fancyvrb" /><a
|
Chris@1
|
9954 id="x1-109056r14"></a><span
|
Chris@1
|
9955 class="cmr-6">14</span><span
|
Chris@1
|
9956 class="cmtt-8"> </span><span
|
Chris@1
|
9957 class="cmtt-8"> </span><span
|
Chris@1
|
9958 class="cmtt-8"> </span><span
|
Chris@1
|
9959 class="cmtt-8"> </span><span
|
Chris@1
|
9960 class="cmtt-8"> </span><span
|
Chris@1
|
9961 class="cmtt-8"> </span><span
|
Chris@1
|
9962 class="cmtt-8"> </span><span
|
Chris@1
|
9963 class="cmtt-8"> </span><span
|
Chris@1
|
9964 class="cmtt-8"> </span><span
|
Chris@1
|
9965 class="cmtt-8"> </span><span
|
Chris@1
|
9966 class="cmtt-8"> </span><span
|
Chris@1
|
9967 class="cmtt-8"> }</span>
|
Chris@1
|
9968 <br class="fancyvrb" /><a
|
Chris@1
|
9969 id="x1-109058r15"></a><span
|
Chris@1
|
9970 class="cmr-6">15</span><span
|
Chris@1
|
9971 class="cmtt-8"> </span><span
|
Chris@1
|
9972 class="cmtt-8"> </span><span
|
Chris@1
|
9973 class="cmtt-8"> </span><span
|
Chris@1
|
9974 class="cmtt-8"> </span><span
|
Chris@1
|
9975 class="cmtt-8"> </span><span
|
Chris@1
|
9976 class="cmtt-8"> </span><span
|
Chris@1
|
9977 class="cmtt-8"> </span><span
|
Chris@1
|
9978 class="cmtt-8"> }</span>
|
Chris@1
|
9979 <br class="fancyvrb" /><a
|
Chris@1
|
9980 id="x1-109060r16"></a><span
|
Chris@1
|
9981 class="cmr-6">16</span><span
|
Chris@1
|
9982 class="cmtt-8"> </span><span
|
Chris@1
|
9983 class="cmtt-8"> </span>
|
Chris@1
|
9984 <br class="fancyvrb" /><a
|
Chris@1
|
9985 id="x1-109062r17"></a><span
|
Chris@1
|
9986 class="cmr-6">17</span><span
|
Chris@1
|
9987 class="cmtt-8"> </span><span
|
Chris@1
|
9988 class="cmtt-8"> </span><span
|
Chris@1
|
9989 class="cmtt-8"> </span><span
|
Chris@1
|
9990 class="cmtt-8"> 6)</span><span
|
Chris@1
|
9991 class="cmtt-8"> done</span>
|
Chris@1
|
9992 </div>
|
Chris@1
|
9993 <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
|
Chris@1
|
9994 In addition, any codebook number greater than the maximum numbered codebook
|
Chris@1
|
9995 set up in this stream also renders the stream undecodable. All codebooks in array
|
Chris@1
|
9996 [residue_books] are required to have a value mapping. The presence of codebook in array
|
Chris@1
|
9997 [residue_books] without a value mapping (maptype equals zero) renders the stream
|
Chris@1
|
9998 undecodable.
|
Chris@1
|
9999 <!--l. 241--><p class="noindent" >
|
Chris@1
|
10000 <h5 class="subsubsectionHead"><span class="titlemark">8.6.2. </span> <a
|
Chris@1
|
10001 id="x1-1100008.6.2"></a>packet decode</h5>
|
Chris@1
|
10002 <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
|
Chris@1
|
10003 decode can be built out of the format 1 decode process. Thus we describe first the decode
|
Chris@1
|
10004 infrastructure identical to all three formats.
|
Chris@1
|
10005 <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
|
Chris@1
|
10006 vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
|
Chris@1
|
10007 decoded. If the passed in number of vectors is 3 and vector number 1 is marked ’do not decode’,
|
Chris@1
|
10008 decode skips vector 1 during the decode loop. However, even ’do not decode’ vectors are
|
Chris@1
|
10009 allocated and zeroed.
|
Chris@1
|
10010 <!--l. 255--><p class="noindent" >Depending on the values of <span
|
Chris@1
|
10011 class="cmtt-12">[residue_begin] </span>and <span
|
Chris@1
|
10012 class="cmtt-12">[residue_end]</span>, it is obvious that the
|
Chris@1
|
10013 encoded portion of a residue vector may be the entire possible residue vector or some other strict
|
Chris@1
|
10014 subset of the actual residue vector size with zero padding at either uncoded end. However, it is
|
Chris@1
|
10015 also possible to set <span
|
Chris@1
|
10016 class="cmtt-12">[residue_begin] </span>and <span
|
Chris@1
|
10017 class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
|
Chris@1
|
10018 beyond the maximum vector size. Before beginning residue decode, limit <span
|
Chris@1
|
10019 class="cmtt-12">[residue_begin]</span>
|
Chris@1
|
10020 and <span
|
Chris@1
|
10021 class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
|
Chris@1
|
10022 the number of vectors being encoded, <span
|
Chris@1
|
10023 class="cmtt-12">[ch] </span>is provided by the higher level decoding
|
Chris@1
|
10024 process.
|
Chris@1
|
10025 <!--l. 269--><p class="noindent" >
|
Chris@1
|
10026 <div class="fancyvrb" id="fancyvrb38">
|
Chris@1
|
10027 <a
|
Chris@1
|
10028 id="x1-110002r1"></a><span
|
Chris@1
|
10029 class="cmr-6">1</span><span
|
Chris@1
|
10030 class="cmtt-8"> </span><span
|
Chris@1
|
10031 class="cmtt-8"> </span><span
|
Chris@1
|
10032 class="cmtt-8"> </span><span
|
Chris@1
|
10033 class="cmtt-8"> 1)</span><span
|
Chris@1
|
10034 class="cmtt-8"> [actual\_size]</span><span
|
Chris@1
|
10035 class="cmtt-8"> =</span><span
|
Chris@1
|
10036 class="cmtt-8"> current</span><span
|
Chris@1
|
10037 class="cmtt-8"> blocksize/2;</span>
|
Chris@1
|
10038 <br class="fancyvrb" /><a
|
Chris@1
|
10039 id="x1-110004r2"></a><span
|
Chris@1
|
10040 class="cmr-6">2</span><span
|
Chris@1
|
10041 class="cmtt-8"> </span><span
|
Chris@1
|
10042 class="cmtt-8"> </span><span
|
Chris@1
|
10043 class="cmtt-8"> </span><span
|
Chris@1
|
10044 class="cmtt-8"> 2)</span><span
|
Chris@1
|
10045 class="cmtt-8"> if</span><span
|
Chris@1
|
10046 class="cmtt-8"> residue</span><span
|
Chris@1
|
10047 class="cmtt-8"> encoding</span><span
|
Chris@1
|
10048 class="cmtt-8"> is</span><span
|
Chris@1
|
10049 class="cmtt-8"> format</span><span
|
Chris@1
|
10050 class="cmtt-8"> 2</span>
|
Chris@1
|
10051 <br class="fancyvrb" /><a
|
Chris@1
|
10052 id="x1-110006r3"></a><span
|
Chris@1
|
10053 class="cmr-6">3</span><span
|
Chris@1
|
10054 class="cmtt-8"> </span><span
|
Chris@1
|
10055 class="cmtt-8"> </span><span
|
Chris@1
|
10056 class="cmtt-8"> </span><span
|
Chris@1
|
10057 class="cmtt-8"> </span><span
|
Chris@1
|
10058 class="cmtt-8"> </span><span
|
Chris@1
|
10059 class="cmtt-8"> </span><span
|
Chris@1
|
10060 class="cmtt-8"> </span><span
|
Chris@1
|
10061 class="cmtt-8"> </span><span
|
Chris@1
|
10062 class="cmtt-8"> 3)</span><span
|
Chris@1
|
10063 class="cmtt-8"> [actual\_size]</span><span
|
Chris@1
|
10064 class="cmtt-8"> =</span><span
|
Chris@1
|
10065 class="cmtt-8"> [actual\_size]</span><span
|
Chris@1
|
10066 class="cmtt-8"> *</span><span
|
Chris@1
|
10067 class="cmtt-8"> [ch];</span>
|
Chris@1
|
10068
|
Chris@1
|
10069
|
Chris@1
|
10070
|
Chris@1
|
10071 <br class="fancyvrb" /><a
|
Chris@1
|
10072 id="x1-110008r4"></a><span
|
Chris@1
|
10073 class="cmr-6">4</span><span
|
Chris@1
|
10074 class="cmtt-8"> </span><span
|
Chris@1
|
10075 class="cmtt-8"> </span><span
|
Chris@1
|
10076 class="cmtt-8"> </span><span
|
Chris@1
|
10077 class="cmtt-8"> 4)</span><span
|
Chris@1
|
10078 class="cmtt-8"> [limit\_residue\_begin]</span><span
|
Chris@1
|
10079 class="cmtt-8"> =</span><span
|
Chris@1
|
10080 class="cmtt-8"> maximum</span><span
|
Chris@1
|
10081 class="cmtt-8"> of</span><span
|
Chris@1
|
10082 class="cmtt-8"> ([residue\_begin],[actual\_size]);</span>
|
Chris@1
|
10083 <br class="fancyvrb" /><a
|
Chris@1
|
10084 id="x1-110010r5"></a><span
|
Chris@1
|
10085 class="cmr-6">5</span><span
|
Chris@1
|
10086 class="cmtt-8"> </span><span
|
Chris@1
|
10087 class="cmtt-8"> </span><span
|
Chris@1
|
10088 class="cmtt-8"> </span><span
|
Chris@1
|
10089 class="cmtt-8"> 5)</span><span
|
Chris@1
|
10090 class="cmtt-8"> [limit\_residue\_end]</span><span
|
Chris@1
|
10091 class="cmtt-8"> =</span><span
|
Chris@1
|
10092 class="cmtt-8"> maximum</span><span
|
Chris@1
|
10093 class="cmtt-8"> of</span><span
|
Chris@1
|
10094 class="cmtt-8"> ([residue\_end],[actual\_size]);</span>
|
Chris@1
|
10095 </div>
|
Chris@1
|
10096 <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
|
Chris@1
|
10097 <!--l. 280--><p class="noindent" >
|
Chris@1
|
10098 <div class="fancyvrb" id="fancyvrb39">
|
Chris@1
|
10099 <a
|
Chris@1
|
10100 id="x1-110012r1"></a><span
|
Chris@1
|
10101 class="cmr-6">1</span><span
|
Chris@1
|
10102 class="cmtt-8"> </span><span
|
Chris@1
|
10103 class="cmtt-8"> </span><span
|
Chris@1
|
10104 class="cmtt-8"> </span><span
|
Chris@1
|
10105 class="cmtt-8"> 1)</span><span
|
Chris@1
|
10106 class="cmtt-8"> [classwords\_per\_codeword]</span><span
|
Chris@1
|
10107 class="cmtt-8"> =</span><span
|
Chris@1
|
10108 class="cmtt-8"> [codebook\_dimensions]</span><span
|
Chris@1
|
10109 class="cmtt-8"> value</span><span
|
Chris@1
|
10110 class="cmtt-8"> of</span><span
|
Chris@1
|
10111 class="cmtt-8"> codebook</span><span
|
Chris@1
|
10112 class="cmtt-8"> [residue\_classbook]</span>
|
Chris@1
|
10113 <br class="fancyvrb" /><a
|
Chris@1
|
10114 id="x1-110014r2"></a><span
|
Chris@1
|
10115 class="cmr-6">2</span><span
|
Chris@1
|
10116 class="cmtt-8"> </span><span
|
Chris@1
|
10117 class="cmtt-8"> </span><span
|
Chris@1
|
10118 class="cmtt-8"> </span><span
|
Chris@1
|
10119 class="cmtt-8"> 2)</span><span
|
Chris@1
|
10120 class="cmtt-8"> [n\_to\_read]</span><span
|
Chris@1
|
10121 class="cmtt-8"> =</span><span
|
Chris@1
|
10122 class="cmtt-8"> [limit\_residue\_end]</span><span
|
Chris@1
|
10123 class="cmtt-8"> -</span><span
|
Chris@1
|
10124 class="cmtt-8"> [limit\_residue\_begin]</span>
|
Chris@1
|
10125 <br class="fancyvrb" /><a
|
Chris@1
|
10126 id="x1-110016r3"></a><span
|
Chris@1
|
10127 class="cmr-6">3</span><span
|
Chris@1
|
10128 class="cmtt-8"> </span><span
|
Chris@1
|
10129 class="cmtt-8"> </span><span
|
Chris@1
|
10130 class="cmtt-8"> </span><span
|
Chris@1
|
10131 class="cmtt-8"> 3)</span><span
|
Chris@1
|
10132 class="cmtt-8"> [partitions\_to\_read]</span><span
|
Chris@1
|
10133 class="cmtt-8"> =</span><span
|
Chris@1
|
10134 class="cmtt-8"> [n\_to\_read]</span><span
|
Chris@1
|
10135 class="cmtt-8"> /</span><span
|
Chris@1
|
10136 class="cmtt-8"> [residue\_partition\_size]</span>
|
Chris@1
|
10137 </div>
|
Chris@1
|
10138 <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
|
Chris@1
|
10139 <div class="fancyvrb" id="fancyvrb40">
|
Chris@1
|
10140 <a
|
Chris@1
|
10141 id="x1-110018r1"></a><span
|
Chris@1
|
10142 class="cmr-6">1</span><span
|
Chris@1
|
10143 class="cmtt-8"> </span><span
|
Chris@1
|
10144 class="cmtt-8"> </span><span
|
Chris@1
|
10145 class="cmtt-8"> </span><span
|
Chris@1
|
10146 class="cmtt-8"> 1)</span><span
|
Chris@1
|
10147 class="cmtt-8"> allocate</span><span
|
Chris@1
|
10148 class="cmtt-8"> and</span><span
|
Chris@1
|
10149 class="cmtt-8"> zero</span><span
|
Chris@1
|
10150 class="cmtt-8"> all</span><span
|
Chris@1
|
10151 class="cmtt-8"> vectors</span><span
|
Chris@1
|
10152 class="cmtt-8"> that</span><span
|
Chris@1
|
10153 class="cmtt-8"> will</span><span
|
Chris@1
|
10154 class="cmtt-8"> be</span><span
|
Chris@1
|
10155 class="cmtt-8"> returned.</span>
|
Chris@1
|
10156 <br class="fancyvrb" /><a
|
Chris@1
|
10157 id="x1-110020r2"></a><span
|
Chris@1
|
10158 class="cmr-6">2</span><span
|
Chris@1
|
10159 class="cmtt-8"> </span><span
|
Chris@1
|
10160 class="cmtt-8"> </span><span
|
Chris@1
|
10161 class="cmtt-8"> </span><span
|
Chris@1
|
10162 class="cmtt-8"> 2)</span><span
|
Chris@1
|
10163 class="cmtt-8"> if</span><span
|
Chris@1
|
10164 class="cmtt-8"> ([n\_to\_read]</span><span
|
Chris@1
|
10165 class="cmtt-8"> is</span><span
|
Chris@1
|
10166 class="cmtt-8"> zero),</span><span
|
Chris@1
|
10167 class="cmtt-8"> stop;</span><span
|
Chris@1
|
10168 class="cmtt-8"> there</span><span
|
Chris@1
|
10169 class="cmtt-8"> is</span><span
|
Chris@1
|
10170 class="cmtt-8"> no</span><span
|
Chris@1
|
10171 class="cmtt-8"> residue</span><span
|
Chris@1
|
10172 class="cmtt-8"> to</span><span
|
Chris@1
|
10173 class="cmtt-8"> decode.</span>
|
Chris@1
|
10174 <br class="fancyvrb" /><a
|
Chris@1
|
10175 id="x1-110022r3"></a><span
|
Chris@1
|
10176 class="cmr-6">3</span><span
|
Chris@1
|
10177 class="cmtt-8"> </span><span
|
Chris@1
|
10178 class="cmtt-8"> </span><span
|
Chris@1
|
10179 class="cmtt-8"> </span><span
|
Chris@1
|
10180 class="cmtt-8"> 3)</span><span
|
Chris@1
|
10181 class="cmtt-8"> iterate</span><span
|
Chris@1
|
10182 class="cmtt-8"> [pass]</span><span
|
Chris@1
|
10183 class="cmtt-8"> over</span><span
|
Chris@1
|
10184 class="cmtt-8"> the</span><span
|
Chris@1
|
10185 class="cmtt-8"> range</span><span
|
Chris@1
|
10186 class="cmtt-8"> 0</span><span
|
Chris@1
|
10187 class="cmtt-8"> ...</span><span
|
Chris@1
|
10188 class="cmtt-8"> 7</span><span
|
Chris@1
|
10189 class="cmtt-8"> {</span>
|
Chris@1
|
10190 <br class="fancyvrb" /><a
|
Chris@1
|
10191 id="x1-110024r4"></a><span
|
Chris@1
|
10192 class="cmr-6">4</span><span
|
Chris@1
|
10193 class="cmtt-8"> </span><span
|
Chris@1
|
10194 class="cmtt-8"> </span>
|
Chris@1
|
10195 <br class="fancyvrb" /><a
|
Chris@1
|
10196 id="x1-110026r5"></a><span
|
Chris@1
|
10197 class="cmr-6">5</span><span
|
Chris@1
|
10198 class="cmtt-8"> </span><span
|
Chris@1
|
10199 class="cmtt-8"> </span><span
|
Chris@1
|
10200 class="cmtt-8"> </span><span
|
Chris@1
|
10201 class="cmtt-8"> </span><span
|
Chris@1
|
10202 class="cmtt-8"> </span><span
|
Chris@1
|
10203 class="cmtt-8"> </span><span
|
Chris@1
|
10204 class="cmtt-8"> </span><span
|
Chris@1
|
10205 class="cmtt-8"> </span><span
|
Chris@1
|
10206 class="cmtt-8"> 4)</span><span
|
Chris@1
|
10207 class="cmtt-8"> [partition\_count]</span><span
|
Chris@1
|
10208 class="cmtt-8"> =</span><span
|
Chris@1
|
10209 class="cmtt-8"> 0</span>
|
Chris@1
|
10210 <br class="fancyvrb" /><a
|
Chris@1
|
10211 id="x1-110028r6"></a><span
|
Chris@1
|
10212 class="cmr-6">6</span><span
|
Chris@1
|
10213 class="cmtt-8"> </span><span
|
Chris@1
|
10214 class="cmtt-8"> </span>
|
Chris@1
|
10215 <br class="fancyvrb" /><a
|
Chris@1
|
10216 id="x1-110030r7"></a><span
|
Chris@1
|
10217 class="cmr-6">7</span><span
|
Chris@1
|
10218 class="cmtt-8"> </span><span
|
Chris@1
|
10219 class="cmtt-8"> </span><span
|
Chris@1
|
10220 class="cmtt-8"> </span><span
|
Chris@1
|
10221 class="cmtt-8"> </span><span
|
Chris@1
|
10222 class="cmtt-8"> </span><span
|
Chris@1
|
10223 class="cmtt-8"> </span><span
|
Chris@1
|
10224 class="cmtt-8"> </span><span
|
Chris@1
|
10225 class="cmtt-8"> </span><span
|
Chris@1
|
10226 class="cmtt-8"> 5)</span><span
|
Chris@1
|
10227 class="cmtt-8"> while</span><span
|
Chris@1
|
10228 class="cmtt-8"> [partition\_count]</span><span
|
Chris@1
|
10229 class="cmtt-8"> is</span><span
|
Chris@1
|
10230 class="cmtt-8"> less</span><span
|
Chris@1
|
10231 class="cmtt-8"> than</span><span
|
Chris@1
|
10232 class="cmtt-8"> [partitions\_to\_read]</span>
|
Chris@1
|
10233 <br class="fancyvrb" /><a
|
Chris@1
|
10234 id="x1-110032r8"></a><span
|
Chris@1
|
10235 class="cmr-6">8</span><span
|
Chris@1
|
10236 class="cmtt-8"> </span><span
|
Chris@1
|
10237 class="cmtt-8"> </span>
|
Chris@1
|
10238 <br class="fancyvrb" /><a
|
Chris@1
|
10239 id="x1-110034r9"></a><span
|
Chris@1
|
10240 class="cmr-6">9</span><span
|
Chris@1
|
10241 class="cmtt-8"> </span><span
|
Chris@1
|
10242 class="cmtt-8"> </span><span
|
Chris@1
|
10243 class="cmtt-8"> </span><span
|
Chris@1
|
10244 class="cmtt-8"> </span><span
|
Chris@1
|
10245 class="cmtt-8"> </span><span
|
Chris@1
|
10246 class="cmtt-8"> </span><span
|
Chris@1
|
10247 class="cmtt-8"> </span><span
|
Chris@1
|
10248 class="cmtt-8"> </span><span
|
Chris@1
|
10249 class="cmtt-8"> </span><span
|
Chris@1
|
10250 class="cmtt-8"> </span><span
|
Chris@1
|
10251 class="cmtt-8"> </span><span
|
Chris@1
|
10252 class="cmtt-8"> </span><span
|
Chris@1
|
10253 class="cmtt-8"> </span><span
|
Chris@1
|
10254 class="cmtt-8"> 6)</span><span
|
Chris@1
|
10255 class="cmtt-8"> if</span><span
|
Chris@1
|
10256 class="cmtt-8"> ([pass]</span><span
|
Chris@1
|
10257 class="cmtt-8"> is</span><span
|
Chris@1
|
10258 class="cmtt-8"> zero)</span><span
|
Chris@1
|
10259 class="cmtt-8"> {</span>
|
Chris@1
|
10260 <br class="fancyvrb" /><a
|
Chris@1
|
10261 id="x1-110036r10"></a><span
|
Chris@1
|
10262 class="cmr-6">10</span><span
|
Chris@1
|
10263 class="cmtt-8"> </span><span
|
Chris@1
|
10264 class="cmtt-8"> </span>
|
Chris@1
|
10265 <br class="fancyvrb" /><a
|
Chris@1
|
10266 id="x1-110038r11"></a><span
|
Chris@1
|
10267 class="cmr-6">11</span><span
|
Chris@1
|
10268 class="cmtt-8"> </span><span
|
Chris@1
|
10269 class="cmtt-8"> </span><span
|
Chris@1
|
10270 class="cmtt-8"> </span><span
|
Chris@1
|
10271 class="cmtt-8"> </span><span
|
Chris@1
|
10272 class="cmtt-8"> </span><span
|
Chris@1
|
10273 class="cmtt-8"> </span><span
|
Chris@1
|
10274 class="cmtt-8"> </span><span
|
Chris@1
|
10275 class="cmtt-8"> </span><span
|
Chris@1
|
10276 class="cmtt-8"> </span><span
|
Chris@1
|
10277 class="cmtt-8"> </span><span
|
Chris@1
|
10278 class="cmtt-8"> </span><span
|
Chris@1
|
10279 class="cmtt-8"> </span><span
|
Chris@1
|
10280 class="cmtt-8"> </span><span
|
Chris@1
|
10281 class="cmtt-8"> </span><span
|
Chris@1
|
10282 class="cmtt-8"> </span><span
|
Chris@1
|
10283 class="cmtt-8"> </span><span
|
Chris@1
|
10284 class="cmtt-8"> </span><span
|
Chris@1
|
10285 class="cmtt-8"> </span><span
|
Chris@1
|
10286 class="cmtt-8"> 7)</span><span
|
Chris@1
|
10287 class="cmtt-8"> iterate</span><span
|
Chris@1
|
10288 class="cmtt-8"> [j]</span><span
|
Chris@1
|
10289 class="cmtt-8"> over</span><span
|
Chris@1
|
10290 class="cmtt-8"> the</span><span
|
Chris@1
|
10291 class="cmtt-8"> range</span><span
|
Chris@1
|
10292 class="cmtt-8"> 0</span><span
|
Chris@1
|
10293 class="cmtt-8"> ..</span><span
|
Chris@1
|
10294 class="cmtt-8"> [ch]-1</span><span
|
Chris@1
|
10295 class="cmtt-8"> {</span>
|
Chris@1
|
10296 <br class="fancyvrb" /><a
|
Chris@1
|
10297 id="x1-110040r12"></a><span
|
Chris@1
|
10298 class="cmr-6">12</span><span
|
Chris@1
|
10299 class="cmtt-8"> </span><span
|
Chris@1
|
10300 class="cmtt-8"> </span>
|
Chris@1
|
10301 <br class="fancyvrb" /><a
|
Chris@1
|
10302 id="x1-110042r13"></a><span
|
Chris@1
|
10303 class="cmr-6">13</span><span
|
Chris@1
|
10304 class="cmtt-8"> </span><span
|
Chris@1
|
10305 class="cmtt-8"> </span><span
|
Chris@1
|
10306 class="cmtt-8"> </span><span
|
Chris@1
|
10307 class="cmtt-8"> </span><span
|
Chris@1
|
10308 class="cmtt-8"> </span><span
|
Chris@1
|
10309 class="cmtt-8"> </span><span
|
Chris@1
|
10310 class="cmtt-8"> </span><span
|
Chris@1
|
10311 class="cmtt-8"> </span><span
|
Chris@1
|
10312 class="cmtt-8"> </span><span
|
Chris@1
|
10313 class="cmtt-8"> </span><span
|
Chris@1
|
10314 class="cmtt-8"> </span><span
|
Chris@1
|
10315 class="cmtt-8"> </span><span
|
Chris@1
|
10316 class="cmtt-8"> </span><span
|
Chris@1
|
10317 class="cmtt-8"> </span><span
|
Chris@1
|
10318 class="cmtt-8"> </span><span
|
Chris@1
|
10319 class="cmtt-8"> </span><span
|
Chris@1
|
10320 class="cmtt-8"> </span><span
|
Chris@1
|
10321 class="cmtt-8"> </span><span
|
Chris@1
|
10322 class="cmtt-8"> </span><span
|
Chris@1
|
10323 class="cmtt-8"> </span><span
|
Chris@1
|
10324 class="cmtt-8"> </span><span
|
Chris@1
|
10325 class="cmtt-8"> </span><span
|
Chris@1
|
10326 class="cmtt-8"> </span><span
|
Chris@1
|
10327 class="cmtt-8"> 8)</span><span
|
Chris@1
|
10328 class="cmtt-8"> if</span><span
|
Chris@1
|
10329 class="cmtt-8"> vector</span><span
|
Chris@1
|
10330 class="cmtt-8"> [j]</span><span
|
Chris@1
|
10331 class="cmtt-8"> is</span><span
|
Chris@1
|
10332 class="cmtt-8"> not</span><span
|
Chris@1
|
10333 class="cmtt-8"> marked</span><span
|
Chris@1
|
10334 class="cmtt-8"> ’do</span><span
|
Chris@1
|
10335 class="cmtt-8"> not</span><span
|
Chris@1
|
10336 class="cmtt-8"> decode’</span><span
|
Chris@1
|
10337 class="cmtt-8"> {</span>
|
Chris@1
|
10338 <br class="fancyvrb" /><a
|
Chris@1
|
10339 id="x1-110044r14"></a><span
|
Chris@1
|
10340 class="cmr-6">14</span><span
|
Chris@1
|
10341 class="cmtt-8"> </span><span
|
Chris@1
|
10342 class="cmtt-8"> </span>
|
Chris@1
|
10343 <br class="fancyvrb" /><a
|
Chris@1
|
10344 id="x1-110046r15"></a><span
|
Chris@1
|
10345 class="cmr-6">15</span><span
|
Chris@1
|
10346 class="cmtt-8"> </span><span
|
Chris@1
|
10347 class="cmtt-8"> </span><span
|
Chris@1
|
10348 class="cmtt-8"> </span><span
|
Chris@1
|
10349 class="cmtt-8"> </span><span
|
Chris@1
|
10350 class="cmtt-8"> </span><span
|
Chris@1
|
10351 class="cmtt-8"> </span><span
|
Chris@1
|
10352 class="cmtt-8"> </span><span
|
Chris@1
|
10353 class="cmtt-8"> </span><span
|
Chris@1
|
10354 class="cmtt-8"> </span><span
|
Chris@1
|
10355 class="cmtt-8"> </span><span
|
Chris@1
|
10356 class="cmtt-8"> </span><span
|
Chris@1
|
10357 class="cmtt-8"> </span><span
|
Chris@1
|
10358 class="cmtt-8"> </span><span
|
Chris@1
|
10359 class="cmtt-8"> </span><span
|
Chris@1
|
10360 class="cmtt-8"> </span><span
|
Chris@1
|
10361 class="cmtt-8"> </span><span
|
Chris@1
|
10362 class="cmtt-8"> </span><span
|
Chris@1
|
10363 class="cmtt-8"> </span><span
|
Chris@1
|
10364 class="cmtt-8"> </span><span
|
Chris@1
|
10365 class="cmtt-8"> </span><span
|
Chris@1
|
10366 class="cmtt-8"> </span><span
|
Chris@1
|
10367 class="cmtt-8"> </span><span
|
Chris@1
|
10368 class="cmtt-8"> </span><span
|
Chris@1
|
10369 class="cmtt-8"> </span><span
|
Chris@1
|
10370 class="cmtt-8"> </span><span
|
Chris@1
|
10371 class="cmtt-8"> </span><span
|
Chris@1
|
10372 class="cmtt-8"> </span><span
|
Chris@1
|
10373 class="cmtt-8"> </span><span
|
Chris@1
|
10374 class="cmtt-8"> 9)</span><span
|
Chris@1
|
10375 class="cmtt-8"> [temp]</span><span
|
Chris@1
|
10376 class="cmtt-8"> =</span><span
|
Chris@1
|
10377 class="cmtt-8"> read</span><span
|
Chris@1
|
10378 class="cmtt-8"> from</span><span
|
Chris@1
|
10379 class="cmtt-8"> packet</span><span
|
Chris@1
|
10380 class="cmtt-8"> using</span><span
|
Chris@1
|
10381 class="cmtt-8"> codebook</span><span
|
Chris@1
|
10382 class="cmtt-8"> [residue\_classbook]</span><span
|
Chris@1
|
10383 class="cmtt-8"> in</span><span
|
Chris@1
|
10384 class="cmtt-8"> scalar</span><span
|
Chris@1
|
10385 class="cmtt-8"> context</span>
|
Chris@1
|
10386 <br class="fancyvrb" /><a
|
Chris@1
|
10387 id="x1-110048r16"></a><span
|
Chris@1
|
10388 class="cmr-6">16</span><span
|
Chris@1
|
10389 class="cmtt-8"> </span><span
|
Chris@1
|
10390 class="cmtt-8"> </span><span
|
Chris@1
|
10391 class="cmtt-8"> </span><span
|
Chris@1
|
10392 class="cmtt-8"> </span><span
|
Chris@1
|
10393 class="cmtt-8"> </span><span
|
Chris@1
|
10394 class="cmtt-8"> </span><span
|
Chris@1
|
10395 class="cmtt-8"> </span><span
|
Chris@1
|
10396 class="cmtt-8"> </span><span
|
Chris@1
|
10397 class="cmtt-8"> </span><span
|
Chris@1
|
10398 class="cmtt-8"> </span><span
|
Chris@1
|
10399 class="cmtt-8"> </span><span
|
Chris@1
|
10400 class="cmtt-8"> </span><span
|
Chris@1
|
10401 class="cmtt-8"> </span><span
|
Chris@1
|
10402 class="cmtt-8"> </span><span
|
Chris@1
|
10403 class="cmtt-8"> </span><span
|
Chris@1
|
10404 class="cmtt-8"> </span><span
|
Chris@1
|
10405 class="cmtt-8"> </span><span
|
Chris@1
|
10406 class="cmtt-8"> </span><span
|
Chris@1
|
10407 class="cmtt-8"> </span><span
|
Chris@1
|
10408 class="cmtt-8"> </span><span
|
Chris@1
|
10409 class="cmtt-8"> </span><span
|
Chris@1
|
10410 class="cmtt-8"> </span><span
|
Chris@1
|
10411 class="cmtt-8"> </span><span
|
Chris@1
|
10412 class="cmtt-8"> </span><span
|
Chris@1
|
10413 class="cmtt-8"> </span><span
|
Chris@1
|
10414 class="cmtt-8"> </span><span
|
Chris@1
|
10415 class="cmtt-8"> </span><span
|
Chris@1
|
10416 class="cmtt-8"> 10)</span><span
|
Chris@1
|
10417 class="cmtt-8"> iterate</span><span
|
Chris@1
|
10418 class="cmtt-8"> [i]</span><span
|
Chris@1
|
10419 class="cmtt-8"> descending</span><span
|
Chris@1
|
10420 class="cmtt-8"> over</span><span
|
Chris@1
|
10421 class="cmtt-8"> the</span><span
|
Chris@1
|
10422 class="cmtt-8"> range</span><span
|
Chris@1
|
10423 class="cmtt-8"> [classwords\_per\_codeword]-1</span><span
|
Chris@1
|
10424 class="cmtt-8"> ...</span><span
|
Chris@1
|
10425 class="cmtt-8"> 0</span><span
|
Chris@1
|
10426 class="cmtt-8"> {</span>
|
Chris@1
|
10427 <br class="fancyvrb" /><a
|
Chris@1
|
10428 id="x1-110050r17"></a><span
|
Chris@1
|
10429 class="cmr-6">17</span><span
|
Chris@1
|
10430 class="cmtt-8"> </span><span
|
Chris@1
|
10431 class="cmtt-8"> </span>
|
Chris@1
|
10432 <br class="fancyvrb" /><a
|
Chris@1
|
10433 id="x1-110052r18"></a><span
|
Chris@1
|
10434 class="cmr-6">18</span><span
|
Chris@1
|
10435 class="cmtt-8"> </span><span
|
Chris@1
|
10436 class="cmtt-8"> </span><span
|
Chris@1
|
10437 class="cmtt-8"> </span><span
|
Chris@1
|
10438 class="cmtt-8"> </span><span
|
Chris@1
|
10439 class="cmtt-8"> </span><span
|
Chris@1
|
10440 class="cmtt-8"> </span><span
|
Chris@1
|
10441 class="cmtt-8"> </span><span
|
Chris@1
|
10442 class="cmtt-8"> </span><span
|
Chris@1
|
10443 class="cmtt-8"> </span><span
|
Chris@1
|
10444 class="cmtt-8"> </span><span
|
Chris@1
|
10445 class="cmtt-8"> </span><span
|
Chris@1
|
10446 class="cmtt-8"> </span><span
|
Chris@1
|
10447 class="cmtt-8"> </span><span
|
Chris@1
|
10448 class="cmtt-8"> </span><span
|
Chris@1
|
10449 class="cmtt-8"> </span><span
|
Chris@1
|
10450 class="cmtt-8"> </span><span
|
Chris@1
|
10451 class="cmtt-8"> </span><span
|
Chris@1
|
10452 class="cmtt-8"> </span><span
|
Chris@1
|
10453 class="cmtt-8"> </span><span
|
Chris@1
|
10454 class="cmtt-8"> </span><span
|
Chris@1
|
10455 class="cmtt-8"> </span><span
|
Chris@1
|
10456 class="cmtt-8"> </span><span
|
Chris@1
|
10457 class="cmtt-8"> </span><span
|
Chris@1
|
10458 class="cmtt-8"> </span><span
|
Chris@1
|
10459 class="cmtt-8"> </span><span
|
Chris@1
|
10460 class="cmtt-8"> </span><span
|
Chris@1
|
10461 class="cmtt-8"> </span><span
|
Chris@1
|
10462 class="cmtt-8"> </span><span
|
Chris@1
|
10463 class="cmtt-8"> </span><span
|
Chris@1
|
10464 class="cmtt-8"> </span><span
|
Chris@1
|
10465 class="cmtt-8"> </span><span
|
Chris@1
|
10466 class="cmtt-8"> </span><span
|
Chris@1
|
10467 class="cmtt-8"> 11)</span><span
|
Chris@1
|
10468 class="cmtt-8"> array</span><span
|
Chris@1
|
10469 class="cmtt-8"> [classifications]</span><span
|
Chris@1
|
10470 class="cmtt-8"> element</span><span
|
Chris@1
|
10471 class="cmtt-8"> [j],([i]+[partition\_count])</span><span
|
Chris@1
|
10472 class="cmtt-8"> =</span>
|
Chris@1
|
10473 <br class="fancyvrb" /><a
|
Chris@1
|
10474 id="x1-110054r19"></a><span
|
Chris@1
|
10475 class="cmr-6">19</span><span
|
Chris@1
|
10476 class="cmtt-8"> </span><span
|
Chris@1
|
10477 class="cmtt-8"> </span><span
|
Chris@1
|
10478 class="cmtt-8"> </span><span
|
Chris@1
|
10479 class="cmtt-8"> </span><span
|
Chris@1
|
10480 class="cmtt-8"> </span><span
|
Chris@1
|
10481 class="cmtt-8"> </span><span
|
Chris@1
|
10482 class="cmtt-8"> </span><span
|
Chris@1
|
10483 class="cmtt-8"> </span><span
|
Chris@1
|
10484 class="cmtt-8"> </span><span
|
Chris@1
|
10485 class="cmtt-8"> </span><span
|
Chris@1
|
10486 class="cmtt-8"> </span><span
|
Chris@1
|
10487 class="cmtt-8"> </span><span
|
Chris@1
|
10488 class="cmtt-8"> </span><span
|
Chris@1
|
10489 class="cmtt-8"> </span><span
|
Chris@1
|
10490 class="cmtt-8"> </span><span
|
Chris@1
|
10491 class="cmtt-8"> </span><span
|
Chris@1
|
10492 class="cmtt-8"> </span><span
|
Chris@1
|
10493 class="cmtt-8"> </span><span
|
Chris@1
|
10494 class="cmtt-8"> </span><span
|
Chris@1
|
10495 class="cmtt-8"> </span><span
|
Chris@1
|
10496 class="cmtt-8"> </span><span
|
Chris@1
|
10497 class="cmtt-8"> </span><span
|
Chris@1
|
10498 class="cmtt-8"> </span><span
|
Chris@1
|
10499 class="cmtt-8"> </span><span
|
Chris@1
|
10500 class="cmtt-8"> </span><span
|
Chris@1
|
10501 class="cmtt-8"> </span><span
|
Chris@1
|
10502 class="cmtt-8"> </span><span
|
Chris@1
|
10503 class="cmtt-8"> </span><span
|
Chris@1
|
10504 class="cmtt-8"> </span><span
|
Chris@1
|
10505 class="cmtt-8"> </span><span
|
Chris@1
|
10506 class="cmtt-8"> </span><span
|
Chris@1
|
10507 class="cmtt-8"> </span><span
|
Chris@1
|
10508 class="cmtt-8"> </span><span
|
Chris@1
|
10509 class="cmtt-8"> </span><span
|
Chris@1
|
10510 class="cmtt-8"> </span><span
|
Chris@1
|
10511 class="cmtt-8"> </span><span
|
Chris@1
|
10512 class="cmtt-8"> [temp]</span><span
|
Chris@1
|
10513 class="cmtt-8"> integer</span><span
|
Chris@1
|
10514 class="cmtt-8"> modulo</span><span
|
Chris@1
|
10515 class="cmtt-8"> [residue\_classifications]</span>
|
Chris@1
|
10516 <br class="fancyvrb" /><a
|
Chris@1
|
10517 id="x1-110056r20"></a><span
|
Chris@1
|
10518 class="cmr-6">20</span><span
|
Chris@1
|
10519 class="cmtt-8"> </span><span
|
Chris@1
|
10520 class="cmtt-8"> </span><span
|
Chris@1
|
10521 class="cmtt-8"> </span><span
|
Chris@1
|
10522 class="cmtt-8"> </span><span
|
Chris@1
|
10523 class="cmtt-8"> </span><span
|
Chris@1
|
10524 class="cmtt-8"> </span><span
|
Chris@1
|
10525 class="cmtt-8"> </span><span
|
Chris@1
|
10526 class="cmtt-8"> </span><span
|
Chris@1
|
10527 class="cmtt-8"> </span><span
|
Chris@1
|
10528 class="cmtt-8"> </span><span
|
Chris@1
|
10529 class="cmtt-8"> </span><span
|
Chris@1
|
10530 class="cmtt-8"> </span><span
|
Chris@1
|
10531 class="cmtt-8"> </span><span
|
Chris@1
|
10532 class="cmtt-8"> </span><span
|
Chris@1
|
10533 class="cmtt-8"> </span><span
|
Chris@1
|
10534 class="cmtt-8"> </span><span
|
Chris@1
|
10535 class="cmtt-8"> </span><span
|
Chris@1
|
10536 class="cmtt-8"> </span><span
|
Chris@1
|
10537 class="cmtt-8"> </span><span
|
Chris@1
|
10538 class="cmtt-8"> </span><span
|
Chris@1
|
10539 class="cmtt-8"> </span><span
|
Chris@1
|
10540 class="cmtt-8"> </span><span
|
Chris@1
|
10541 class="cmtt-8"> </span><span
|
Chris@1
|
10542 class="cmtt-8"> </span><span
|
Chris@1
|
10543 class="cmtt-8"> </span><span
|
Chris@1
|
10544 class="cmtt-8"> </span><span
|
Chris@1
|
10545 class="cmtt-8"> </span><span
|
Chris@1
|
10546 class="cmtt-8"> </span><span
|
Chris@1
|
10547 class="cmtt-8"> </span><span
|
Chris@1
|
10548 class="cmtt-8"> </span><span
|
Chris@1
|
10549 class="cmtt-8"> </span><span
|
Chris@1
|
10550 class="cmtt-8"> </span><span
|
Chris@1
|
10551 class="cmtt-8"> 12)</span><span
|
Chris@1
|
10552 class="cmtt-8"> [temp]</span><span
|
Chris@1
|
10553 class="cmtt-8"> =</span><span
|
Chris@1
|
10554 class="cmtt-8"> [temp]</span><span
|
Chris@1
|
10555 class="cmtt-8"> /</span><span
|
Chris@1
|
10556 class="cmtt-8"> [residue\_classifications]</span><span
|
Chris@1
|
10557 class="cmtt-8"> using</span><span
|
Chris@1
|
10558 class="cmtt-8"> integer</span><span
|
Chris@1
|
10559 class="cmtt-8"> division</span>
|
Chris@1
|
10560 <br class="fancyvrb" /><a
|
Chris@1
|
10561 id="x1-110058r21"></a><span
|
Chris@1
|
10562 class="cmr-6">21</span><span
|
Chris@1
|
10563 class="cmtt-8"> </span><span
|
Chris@1
|
10564 class="cmtt-8"> </span>
|
Chris@1
|
10565 <br class="fancyvrb" /><a
|
Chris@1
|
10566 id="x1-110060r22"></a><span
|
Chris@1
|
10567 class="cmr-6">22</span><span
|
Chris@1
|
10568 class="cmtt-8"> </span><span
|
Chris@1
|
10569 class="cmtt-8"> </span><span
|
Chris@1
|
10570 class="cmtt-8"> </span><span
|
Chris@1
|
10571 class="cmtt-8"> </span><span
|
Chris@1
|
10572 class="cmtt-8"> </span><span
|
Chris@1
|
10573 class="cmtt-8"> </span><span
|
Chris@1
|
10574 class="cmtt-8"> </span><span
|
Chris@1
|
10575 class="cmtt-8"> </span><span
|
Chris@1
|
10576 class="cmtt-8"> </span><span
|
Chris@1
|
10577 class="cmtt-8"> </span><span
|
Chris@1
|
10578 class="cmtt-8"> </span><span
|
Chris@1
|
10579 class="cmtt-8"> </span><span
|
Chris@1
|
10580 class="cmtt-8"> </span><span
|
Chris@1
|
10581 class="cmtt-8"> </span><span
|
Chris@1
|
10582 class="cmtt-8"> </span><span
|
Chris@1
|
10583 class="cmtt-8"> </span><span
|
Chris@1
|
10584 class="cmtt-8"> </span><span
|
Chris@1
|
10585 class="cmtt-8"> </span><span
|
Chris@1
|
10586 class="cmtt-8"> </span><span
|
Chris@1
|
10587 class="cmtt-8"> </span><span
|
Chris@1
|
10588 class="cmtt-8"> </span><span
|
Chris@1
|
10589 class="cmtt-8"> </span><span
|
Chris@1
|
10590 class="cmtt-8"> </span><span
|
Chris@1
|
10591 class="cmtt-8"> </span><span
|
Chris@1
|
10592 class="cmtt-8"> </span><span
|
Chris@1
|
10593 class="cmtt-8"> </span><span
|
Chris@1
|
10594 class="cmtt-8"> </span><span
|
Chris@1
|
10595 class="cmtt-8"> </span><span
|
Chris@1
|
10596 class="cmtt-8"> </span><span
|
Chris@1
|
10597 class="cmtt-8"> </span><span
|
Chris@1
|
10598 class="cmtt-8"> </span><span
|
Chris@1
|
10599 class="cmtt-8"> }</span>
|
Chris@1
|
10600 <br class="fancyvrb" /><a
|
Chris@1
|
10601 id="x1-110062r23"></a><span
|
Chris@1
|
10602 class="cmr-6">23</span><span
|
Chris@1
|
10603 class="cmtt-8"> </span><span
|
Chris@1
|
10604 class="cmtt-8"> </span>
|
Chris@1
|
10605 <br class="fancyvrb" /><a
|
Chris@1
|
10606 id="x1-110064r24"></a><span
|
Chris@1
|
10607 class="cmr-6">24</span><span
|
Chris@1
|
10608 class="cmtt-8"> </span><span
|
Chris@1
|
10609 class="cmtt-8"> </span><span
|
Chris@1
|
10610 class="cmtt-8"> </span><span
|
Chris@1
|
10611 class="cmtt-8"> </span><span
|
Chris@1
|
10612 class="cmtt-8"> </span><span
|
Chris@1
|
10613 class="cmtt-8"> </span><span
|
Chris@1
|
10614 class="cmtt-8"> </span><span
|
Chris@1
|
10615 class="cmtt-8"> </span><span
|
Chris@1
|
10616 class="cmtt-8"> </span><span
|
Chris@1
|
10617 class="cmtt-8"> </span><span
|
Chris@1
|
10618 class="cmtt-8"> </span><span
|
Chris@1
|
10619 class="cmtt-8"> </span><span
|
Chris@1
|
10620 class="cmtt-8"> </span><span
|
Chris@1
|
10621 class="cmtt-8"> </span><span
|
Chris@1
|
10622 class="cmtt-8"> </span><span
|
Chris@1
|
10623 class="cmtt-8"> </span><span
|
Chris@1
|
10624 class="cmtt-8"> </span><span
|
Chris@1
|
10625 class="cmtt-8"> </span><span
|
Chris@1
|
10626 class="cmtt-8"> </span><span
|
Chris@1
|
10627 class="cmtt-8"> </span><span
|
Chris@1
|
10628 class="cmtt-8"> </span><span
|
Chris@1
|
10629 class="cmtt-8"> </span><span
|
Chris@1
|
10630 class="cmtt-8"> </span><span
|
Chris@1
|
10631 class="cmtt-8"> </span><span
|
Chris@1
|
10632 class="cmtt-8"> </span><span
|
Chris@1
|
10633 class="cmtt-8"> </span><span
|
Chris@1
|
10634 class="cmtt-8"> }</span>
|
Chris@1
|
10635 <br class="fancyvrb" /><a
|
Chris@1
|
10636 id="x1-110066r25"></a><span
|
Chris@1
|
10637 class="cmr-6">25</span><span
|
Chris@1
|
10638 class="cmtt-8"> </span><span
|
Chris@1
|
10639 class="cmtt-8"> </span>
|
Chris@1
|
10640 <br class="fancyvrb" /><a
|
Chris@1
|
10641 id="x1-110068r26"></a><span
|
Chris@1
|
10642 class="cmr-6">26</span><span
|
Chris@1
|
10643 class="cmtt-8"> </span><span
|
Chris@1
|
10644 class="cmtt-8"> </span><span
|
Chris@1
|
10645 class="cmtt-8"> </span><span
|
Chris@1
|
10646 class="cmtt-8"> </span><span
|
Chris@1
|
10647 class="cmtt-8"> </span><span
|
Chris@1
|
10648 class="cmtt-8"> </span><span
|
Chris@1
|
10649 class="cmtt-8"> </span><span
|
Chris@1
|
10650 class="cmtt-8"> </span><span
|
Chris@1
|
10651 class="cmtt-8"> </span><span
|
Chris@1
|
10652 class="cmtt-8"> </span><span
|
Chris@1
|
10653 class="cmtt-8"> </span><span
|
Chris@1
|
10654 class="cmtt-8"> </span><span
|
Chris@1
|
10655 class="cmtt-8"> </span><span
|
Chris@1
|
10656 class="cmtt-8"> </span><span
|
Chris@1
|
10657 class="cmtt-8"> </span><span
|
Chris@1
|
10658 class="cmtt-8"> </span><span
|
Chris@1
|
10659 class="cmtt-8"> </span><span
|
Chris@1
|
10660 class="cmtt-8"> </span><span
|
Chris@1
|
10661 class="cmtt-8"> </span><span
|
Chris@1
|
10662 class="cmtt-8"> </span><span
|
Chris@1
|
10663 class="cmtt-8"> </span><span
|
Chris@1
|
10664 class="cmtt-8"> }</span>
|
Chris@1
|
10665 <br class="fancyvrb" /><a
|
Chris@1
|
10666 id="x1-110070r27"></a><span
|
Chris@1
|
10667 class="cmr-6">27</span><span
|
Chris@1
|
10668 class="cmtt-8"> </span><span
|
Chris@1
|
10669 class="cmtt-8"> </span>
|
Chris@1
|
10670 <br class="fancyvrb" /><a
|
Chris@1
|
10671 id="x1-110072r28"></a><span
|
Chris@1
|
10672 class="cmr-6">28</span><span
|
Chris@1
|
10673 class="cmtt-8"> </span><span
|
Chris@1
|
10674 class="cmtt-8"> </span><span
|
Chris@1
|
10675 class="cmtt-8"> </span><span
|
Chris@1
|
10676 class="cmtt-8"> </span><span
|
Chris@1
|
10677 class="cmtt-8"> </span><span
|
Chris@1
|
10678 class="cmtt-8"> </span><span
|
Chris@1
|
10679 class="cmtt-8"> </span><span
|
Chris@1
|
10680 class="cmtt-8"> </span><span
|
Chris@1
|
10681 class="cmtt-8"> </span><span
|
Chris@1
|
10682 class="cmtt-8"> </span><span
|
Chris@1
|
10683 class="cmtt-8"> </span><span
|
Chris@1
|
10684 class="cmtt-8"> </span><span
|
Chris@1
|
10685 class="cmtt-8"> </span><span
|
Chris@1
|
10686 class="cmtt-8"> </span><span
|
Chris@1
|
10687 class="cmtt-8"> </span><span
|
Chris@1
|
10688 class="cmtt-8"> </span><span
|
Chris@1
|
10689 class="cmtt-8"> }</span>
|
Chris@1
|
10690 <br class="fancyvrb" /><a
|
Chris@1
|
10691 id="x1-110074r29"></a><span
|
Chris@1
|
10692 class="cmr-6">29</span><span
|
Chris@1
|
10693 class="cmtt-8"> </span><span
|
Chris@1
|
10694 class="cmtt-8"> </span>
|
Chris@1
|
10695 <br class="fancyvrb" /><a
|
Chris@1
|
10696 id="x1-110076r30"></a><span
|
Chris@1
|
10697 class="cmr-6">30</span><span
|
Chris@1
|
10698 class="cmtt-8"> </span><span
|
Chris@1
|
10699 class="cmtt-8"> </span><span
|
Chris@1
|
10700 class="cmtt-8"> </span><span
|
Chris@1
|
10701 class="cmtt-8"> </span><span
|
Chris@1
|
10702 class="cmtt-8"> </span><span
|
Chris@1
|
10703 class="cmtt-8"> </span><span
|
Chris@1
|
10704 class="cmtt-8"> </span><span
|
Chris@1
|
10705 class="cmtt-8"> </span><span
|
Chris@1
|
10706 class="cmtt-8"> </span><span
|
Chris@1
|
10707 class="cmtt-8"> </span><span
|
Chris@1
|
10708 class="cmtt-8"> </span><span
|
Chris@1
|
10709 class="cmtt-8"> </span><span
|
Chris@1
|
10710 class="cmtt-8"> 13)</span><span
|
Chris@1
|
10711 class="cmtt-8"> iterate</span><span
|
Chris@1
|
10712 class="cmtt-8"> [i]</span><span
|
Chris@1
|
10713 class="cmtt-8"> over</span><span
|
Chris@1
|
10714 class="cmtt-8"> the</span><span
|
Chris@1
|
10715 class="cmtt-8"> range</span><span
|
Chris@1
|
10716 class="cmtt-8"> 0</span><span
|
Chris@1
|
10717 class="cmtt-8"> ..</span><span
|
Chris@1
|
10718 class="cmtt-8"> ([classwords\_per\_codeword]</span><span
|
Chris@1
|
10719 class="cmtt-8"> -</span><span
|
Chris@1
|
10720 class="cmtt-8"> 1)</span><span
|
Chris@1
|
10721 class="cmtt-8"> while</span><span
|
Chris@1
|
10722 class="cmtt-8"> [partition\_count]</span>
|
Chris@1
|
10723 <br class="fancyvrb" /><a
|
Chris@1
|
10724 id="x1-110078r31"></a><span
|
Chris@1
|
10725 class="cmr-6">31</span><span
|
Chris@1
|
10726 class="cmtt-8"> </span><span
|
Chris@1
|
10727 class="cmtt-8"> </span><span
|
Chris@1
|
10728 class="cmtt-8"> </span><span
|
Chris@1
|
10729 class="cmtt-8"> </span><span
|
Chris@1
|
10730 class="cmtt-8"> </span><span
|
Chris@1
|
10731 class="cmtt-8"> </span><span
|
Chris@1
|
10732 class="cmtt-8"> </span><span
|
Chris@1
|
10733 class="cmtt-8"> </span><span
|
Chris@1
|
10734 class="cmtt-8"> </span><span
|
Chris@1
|
10735 class="cmtt-8"> </span><span
|
Chris@1
|
10736 class="cmtt-8"> </span><span
|
Chris@1
|
10737 class="cmtt-8"> </span><span
|
Chris@1
|
10738 class="cmtt-8"> </span><span
|
Chris@1
|
10739 class="cmtt-8"> </span><span
|
Chris@1
|
10740 class="cmtt-8"> </span><span
|
Chris@1
|
10741 class="cmtt-8"> </span><span
|
Chris@1
|
10742 class="cmtt-8"> is</span><span
|
Chris@1
|
10743 class="cmtt-8"> also</span><span
|
Chris@1
|
10744 class="cmtt-8"> less</span><span
|
Chris@1
|
10745 class="cmtt-8"> than</span><span
|
Chris@1
|
10746 class="cmtt-8"> [partitions\_to\_read]</span><span
|
Chris@1
|
10747 class="cmtt-8"> {</span>
|
Chris@1
|
10748 <br class="fancyvrb" /><a
|
Chris@1
|
10749 id="x1-110080r32"></a><span
|
Chris@1
|
10750 class="cmr-6">32</span><span
|
Chris@1
|
10751 class="cmtt-8"> </span><span
|
Chris@1
|
10752 class="cmtt-8"> </span>
|
Chris@1
|
10753 <br class="fancyvrb" /><a
|
Chris@1
|
10754 id="x1-110082r33"></a><span
|
Chris@1
|
10755 class="cmr-6">33</span><span
|
Chris@1
|
10756 class="cmtt-8"> </span><span
|
Chris@1
|
10757 class="cmtt-8"> </span><span
|
Chris@1
|
10758 class="cmtt-8"> </span><span
|
Chris@1
|
10759 class="cmtt-8"> </span><span
|
Chris@1
|
10760 class="cmtt-8"> </span><span
|
Chris@1
|
10761 class="cmtt-8"> </span><span
|
Chris@1
|
10762 class="cmtt-8"> </span><span
|
Chris@1
|
10763 class="cmtt-8"> </span><span
|
Chris@1
|
10764 class="cmtt-8"> </span><span
|
Chris@1
|
10765 class="cmtt-8"> </span><span
|
Chris@1
|
10766 class="cmtt-8"> </span><span
|
Chris@1
|
10767 class="cmtt-8"> </span><span
|
Chris@1
|
10768 class="cmtt-8"> </span><span
|
Chris@1
|
10769 class="cmtt-8"> </span><span
|
Chris@1
|
10770 class="cmtt-8"> </span><span
|
Chris@1
|
10771 class="cmtt-8"> </span><span
|
Chris@1
|
10772 class="cmtt-8"> </span><span
|
Chris@1
|
10773 class="cmtt-8"> </span><span
|
Chris@1
|
10774 class="cmtt-8"> 14)</span><span
|
Chris@1
|
10775 class="cmtt-8"> iterate</span><span
|
Chris@1
|
10776 class="cmtt-8"> [j]</span><span
|
Chris@1
|
10777 class="cmtt-8"> over</span><span
|
Chris@1
|
10778 class="cmtt-8"> the</span><span
|
Chris@1
|
10779 class="cmtt-8"> range</span><span
|
Chris@1
|
10780 class="cmtt-8"> 0</span><span
|
Chris@1
|
10781 class="cmtt-8"> ..</span><span
|
Chris@1
|
10782 class="cmtt-8"> [ch]-1</span><span
|
Chris@1
|
10783 class="cmtt-8"> {</span>
|
Chris@1
|
10784 <br class="fancyvrb" /><a
|
Chris@1
|
10785 id="x1-110084r34"></a><span
|
Chris@1
|
10786 class="cmr-6">34</span><span
|
Chris@1
|
10787 class="cmtt-8"> </span><span
|
Chris@1
|
10788 class="cmtt-8"> </span>
|
Chris@1
|
10789 <br class="fancyvrb" /><a
|
Chris@1
|
10790 id="x1-110086r35"></a><span
|
Chris@1
|
10791 class="cmr-6">35</span><span
|
Chris@1
|
10792 class="cmtt-8"> </span><span
|
Chris@1
|
10793 class="cmtt-8"> </span><span
|
Chris@1
|
10794 class="cmtt-8"> </span><span
|
Chris@1
|
10795 class="cmtt-8"> </span><span
|
Chris@1
|
10796 class="cmtt-8"> </span><span
|
Chris@1
|
10797 class="cmtt-8"> </span><span
|
Chris@1
|
10798 class="cmtt-8"> </span><span
|
Chris@1
|
10799 class="cmtt-8"> </span><span
|
Chris@1
|
10800 class="cmtt-8"> </span><span
|
Chris@1
|
10801 class="cmtt-8"> </span><span
|
Chris@1
|
10802 class="cmtt-8"> </span><span
|
Chris@1
|
10803 class="cmtt-8"> </span><span
|
Chris@1
|
10804 class="cmtt-8"> </span><span
|
Chris@1
|
10805 class="cmtt-8"> </span><span
|
Chris@1
|
10806 class="cmtt-8"> </span><span
|
Chris@1
|
10807 class="cmtt-8"> </span><span
|
Chris@1
|
10808 class="cmtt-8"> </span><span
|
Chris@1
|
10809 class="cmtt-8"> </span><span
|
Chris@1
|
10810 class="cmtt-8"> </span><span
|
Chris@1
|
10811 class="cmtt-8"> </span><span
|
Chris@1
|
10812 class="cmtt-8"> </span><span
|
Chris@1
|
10813 class="cmtt-8"> </span><span
|
Chris@1
|
10814 class="cmtt-8"> </span><span
|
Chris@1
|
10815 class="cmtt-8"> 15)</span><span
|
Chris@1
|
10816 class="cmtt-8"> if</span><span
|
Chris@1
|
10817 class="cmtt-8"> vector</span><span
|
Chris@1
|
10818 class="cmtt-8"> [j]</span><span
|
Chris@1
|
10819 class="cmtt-8"> is</span><span
|
Chris@1
|
10820 class="cmtt-8"> not</span><span
|
Chris@1
|
10821 class="cmtt-8"> marked</span><span
|
Chris@1
|
10822 class="cmtt-8"> ’do</span><span
|
Chris@1
|
10823 class="cmtt-8"> not</span><span
|
Chris@1
|
10824 class="cmtt-8"> decode’</span><span
|
Chris@1
|
10825 class="cmtt-8"> {</span>
|
Chris@1
|
10826 <br class="fancyvrb" /><a
|
Chris@1
|
10827 id="x1-110088r36"></a><span
|
Chris@1
|
10828 class="cmr-6">36</span><span
|
Chris@1
|
10829 class="cmtt-8"> </span><span
|
Chris@1
|
10830 class="cmtt-8"> </span>
|
Chris@1
|
10831 <br class="fancyvrb" /><a
|
Chris@1
|
10832 id="x1-110090r37"></a><span
|
Chris@1
|
10833 class="cmr-6">37</span><span
|
Chris@1
|
10834 class="cmtt-8"> </span><span
|
Chris@1
|
10835 class="cmtt-8"> </span><span
|
Chris@1
|
10836 class="cmtt-8"> </span><span
|
Chris@1
|
10837 class="cmtt-8"> </span><span
|
Chris@1
|
10838 class="cmtt-8"> </span><span
|
Chris@1
|
10839 class="cmtt-8"> </span><span
|
Chris@1
|
10840 class="cmtt-8"> </span><span
|
Chris@1
|
10841 class="cmtt-8"> </span><span
|
Chris@1
|
10842 class="cmtt-8"> </span><span
|
Chris@1
|
10843 class="cmtt-8"> </span><span
|
Chris@1
|
10844 class="cmtt-8"> </span><span
|
Chris@1
|
10845 class="cmtt-8"> </span><span
|
Chris@1
|
10846 class="cmtt-8"> </span><span
|
Chris@1
|
10847 class="cmtt-8"> </span><span
|
Chris@1
|
10848 class="cmtt-8"> </span><span
|
Chris@1
|
10849 class="cmtt-8"> </span><span
|
Chris@1
|
10850 class="cmtt-8"> </span><span
|
Chris@1
|
10851 class="cmtt-8"> </span><span
|
Chris@1
|
10852 class="cmtt-8"> </span><span
|
Chris@1
|
10853 class="cmtt-8"> </span><span
|
Chris@1
|
10854 class="cmtt-8"> </span><span
|
Chris@1
|
10855 class="cmtt-8"> </span><span
|
Chris@1
|
10856 class="cmtt-8"> </span><span
|
Chris@1
|
10857 class="cmtt-8"> </span><span
|
Chris@1
|
10858 class="cmtt-8"> </span><span
|
Chris@1
|
10859 class="cmtt-8"> </span><span
|
Chris@1
|
10860 class="cmtt-8"> </span><span
|
Chris@1
|
10861 class="cmtt-8"> </span><span
|
Chris@1
|
10862 class="cmtt-8"> 16)</span><span
|
Chris@1
|
10863 class="cmtt-8"> [vqclass]</span><span
|
Chris@1
|
10864 class="cmtt-8"> =</span><span
|
Chris@1
|
10865 class="cmtt-8"> array</span><span
|
Chris@1
|
10866 class="cmtt-8"> [classifications]</span><span
|
Chris@1
|
10867 class="cmtt-8"> element</span><span
|
Chris@1
|
10868 class="cmtt-8"> [j],[partition\_count]</span>
|
Chris@1
|
10869 <br class="fancyvrb" /><a
|
Chris@1
|
10870 id="x1-110092r38"></a><span
|
Chris@1
|
10871 class="cmr-6">38</span><span
|
Chris@1
|
10872 class="cmtt-8"> </span><span
|
Chris@1
|
10873 class="cmtt-8"> </span><span
|
Chris@1
|
10874 class="cmtt-8"> </span><span
|
Chris@1
|
10875 class="cmtt-8"> </span><span
|
Chris@1
|
10876 class="cmtt-8"> </span><span
|
Chris@1
|
10877 class="cmtt-8"> </span><span
|
Chris@1
|
10878 class="cmtt-8"> </span><span
|
Chris@1
|
10879 class="cmtt-8"> </span><span
|
Chris@1
|
10880 class="cmtt-8"> </span><span
|
Chris@1
|
10881 class="cmtt-8"> </span><span
|
Chris@1
|
10882 class="cmtt-8"> </span><span
|
Chris@1
|
10883 class="cmtt-8"> </span><span
|
Chris@1
|
10884 class="cmtt-8"> </span><span
|
Chris@1
|
10885 class="cmtt-8"> </span><span
|
Chris@1
|
10886 class="cmtt-8"> </span><span
|
Chris@1
|
10887 class="cmtt-8"> </span><span
|
Chris@1
|
10888 class="cmtt-8"> </span><span
|
Chris@1
|
10889 class="cmtt-8"> </span><span
|
Chris@1
|
10890 class="cmtt-8"> </span><span
|
Chris@1
|
10891 class="cmtt-8"> </span><span
|
Chris@1
|
10892 class="cmtt-8"> </span><span
|
Chris@1
|
10893 class="cmtt-8"> </span><span
|
Chris@1
|
10894 class="cmtt-8"> </span><span
|
Chris@1
|
10895 class="cmtt-8"> </span><span
|
Chris@1
|
10896 class="cmtt-8"> </span><span
|
Chris@1
|
10897 class="cmtt-8"> </span><span
|
Chris@1
|
10898 class="cmtt-8"> </span><span
|
Chris@1
|
10899 class="cmtt-8"> </span><span
|
Chris@1
|
10900 class="cmtt-8"> 17)</span><span
|
Chris@1
|
10901 class="cmtt-8"> [vqbook]</span><span
|
Chris@1
|
10902 class="cmtt-8"> =</span><span
|
Chris@1
|
10903 class="cmtt-8"> array</span><span
|
Chris@1
|
10904 class="cmtt-8"> [residue\_books]</span><span
|
Chris@1
|
10905 class="cmtt-8"> element</span><span
|
Chris@1
|
10906 class="cmtt-8"> [vqclass],[pass]</span>
|
Chris@1
|
10907 <br class="fancyvrb" /><a
|
Chris@1
|
10908 id="x1-110094r39"></a><span
|
Chris@1
|
10909 class="cmr-6">39</span><span
|
Chris@1
|
10910 class="cmtt-8"> </span><span
|
Chris@1
|
10911 class="cmtt-8"> </span><span
|
Chris@1
|
10912 class="cmtt-8"> </span><span
|
Chris@1
|
10913 class="cmtt-8"> </span><span
|
Chris@1
|
10914 class="cmtt-8"> </span><span
|
Chris@1
|
10915 class="cmtt-8"> </span><span
|
Chris@1
|
10916 class="cmtt-8"> </span><span
|
Chris@1
|
10917 class="cmtt-8"> </span><span
|
Chris@1
|
10918 class="cmtt-8"> </span><span
|
Chris@1
|
10919 class="cmtt-8"> </span><span
|
Chris@1
|
10920 class="cmtt-8"> </span><span
|
Chris@1
|
10921 class="cmtt-8"> </span><span
|
Chris@1
|
10922 class="cmtt-8"> </span><span
|
Chris@1
|
10923 class="cmtt-8"> </span><span
|
Chris@1
|
10924 class="cmtt-8"> </span><span
|
Chris@1
|
10925 class="cmtt-8"> </span><span
|
Chris@1
|
10926 class="cmtt-8"> </span><span
|
Chris@1
|
10927 class="cmtt-8"> </span><span
|
Chris@1
|
10928 class="cmtt-8"> </span><span
|
Chris@1
|
10929 class="cmtt-8"> </span><span
|
Chris@1
|
10930 class="cmtt-8"> </span><span
|
Chris@1
|
10931 class="cmtt-8"> </span><span
|
Chris@1
|
10932 class="cmtt-8"> </span><span
|
Chris@1
|
10933 class="cmtt-8"> </span><span
|
Chris@1
|
10934 class="cmtt-8"> </span><span
|
Chris@1
|
10935 class="cmtt-8"> </span><span
|
Chris@1
|
10936 class="cmtt-8"> </span><span
|
Chris@1
|
10937 class="cmtt-8"> </span><span
|
Chris@1
|
10938 class="cmtt-8"> 18)</span><span
|
Chris@1
|
10939 class="cmtt-8"> if</span><span
|
Chris@1
|
10940 class="cmtt-8"> ([vqbook]</span><span
|
Chris@1
|
10941 class="cmtt-8"> is</span><span
|
Chris@1
|
10942 class="cmtt-8"> not</span><span
|
Chris@1
|
10943 class="cmtt-8"> ’unused’)</span><span
|
Chris@1
|
10944 class="cmtt-8"> {</span>
|
Chris@1
|
10945 <br class="fancyvrb" /><a
|
Chris@1
|
10946 id="x1-110096r40"></a><span
|
Chris@1
|
10947 class="cmr-6">40</span><span
|
Chris@1
|
10948 class="cmtt-8"> </span><span
|
Chris@1
|
10949 class="cmtt-8"> </span>
|
Chris@1
|
10950 <br class="fancyvrb" /><a
|
Chris@1
|
10951 id="x1-110098r41"></a><span
|
Chris@1
|
10952 class="cmr-6">41</span><span
|
Chris@1
|
10953 class="cmtt-8"> </span><span
|
Chris@1
|
10954 class="cmtt-8"> </span><span
|
Chris@1
|
10955 class="cmtt-8"> </span><span
|
Chris@1
|
10956 class="cmtt-8"> </span><span
|
Chris@1
|
10957 class="cmtt-8"> </span><span
|
Chris@1
|
10958 class="cmtt-8"> </span><span
|
Chris@1
|
10959 class="cmtt-8"> </span><span
|
Chris@1
|
10960 class="cmtt-8"> </span><span
|
Chris@1
|
10961 class="cmtt-8"> </span><span
|
Chris@1
|
10962 class="cmtt-8"> </span><span
|
Chris@1
|
10963 class="cmtt-8"> </span><span
|
Chris@1
|
10964 class="cmtt-8"> </span><span
|
Chris@1
|
10965 class="cmtt-8"> </span><span
|
Chris@1
|
10966 class="cmtt-8"> </span><span
|
Chris@1
|
10967 class="cmtt-8"> </span><span
|
Chris@1
|
10968 class="cmtt-8"> </span><span
|
Chris@1
|
10969 class="cmtt-8"> </span><span
|
Chris@1
|
10970 class="cmtt-8"> </span><span
|
Chris@1
|
10971 class="cmtt-8"> </span><span
|
Chris@1
|
10972 class="cmtt-8"> </span><span
|
Chris@1
|
10973 class="cmtt-8"> </span><span
|
Chris@1
|
10974 class="cmtt-8"> </span><span
|
Chris@1
|
10975 class="cmtt-8"> </span><span
|
Chris@1
|
10976 class="cmtt-8"> </span><span
|
Chris@1
|
10977 class="cmtt-8"> </span><span
|
Chris@1
|
10978 class="cmtt-8"> </span><span
|
Chris@1
|
10979 class="cmtt-8"> </span><span
|
Chris@1
|
10980 class="cmtt-8"> </span><span
|
Chris@1
|
10981 class="cmtt-8"> </span><span
|
Chris@1
|
10982 class="cmtt-8"> </span><span
|
Chris@1
|
10983 class="cmtt-8"> </span><span
|
Chris@1
|
10984 class="cmtt-8"> </span><span
|
Chris@1
|
10985 class="cmtt-8"> </span><span
|
Chris@1
|
10986 class="cmtt-8"> 19)</span><span
|
Chris@1
|
10987 class="cmtt-8"> decode</span><span
|
Chris@1
|
10988 class="cmtt-8"> partition</span><span
|
Chris@1
|
10989 class="cmtt-8"> into</span><span
|
Chris@1
|
10990 class="cmtt-8"> output</span><span
|
Chris@1
|
10991 class="cmtt-8"> vector</span><span
|
Chris@1
|
10992 class="cmtt-8"> number</span><span
|
Chris@1
|
10993 class="cmtt-8"> [j],</span><span
|
Chris@1
|
10994 class="cmtt-8"> starting</span><span
|
Chris@1
|
10995 class="cmtt-8"> at</span><span
|
Chris@1
|
10996 class="cmtt-8"> scalar</span>
|
Chris@1
|
10997 <br class="fancyvrb" /><a
|
Chris@1
|
10998 id="x1-110100r42"></a><span
|
Chris@1
|
10999 class="cmr-6">42</span><span
|
Chris@1
|
11000 class="cmtt-8"> </span><span
|
Chris@1
|
11001 class="cmtt-8"> </span><span
|
Chris@1
|
11002 class="cmtt-8"> </span><span
|
Chris@1
|
11003 class="cmtt-8"> </span><span
|
Chris@1
|
11004 class="cmtt-8"> </span><span
|
Chris@1
|
11005 class="cmtt-8"> </span><span
|
Chris@1
|
11006 class="cmtt-8"> </span><span
|
Chris@1
|
11007 class="cmtt-8"> </span><span
|
Chris@1
|
11008 class="cmtt-8"> </span><span
|
Chris@1
|
11009 class="cmtt-8"> </span><span
|
Chris@1
|
11010 class="cmtt-8"> </span><span
|
Chris@1
|
11011 class="cmtt-8"> </span><span
|
Chris@1
|
11012 class="cmtt-8"> </span><span
|
Chris@1
|
11013 class="cmtt-8"> </span><span
|
Chris@1
|
11014 class="cmtt-8"> </span><span
|
Chris@1
|
11015 class="cmtt-8"> </span><span
|
Chris@1
|
11016 class="cmtt-8"> </span><span
|
Chris@1
|
11017 class="cmtt-8"> </span><span
|
Chris@1
|
11018 class="cmtt-8"> </span><span
|
Chris@1
|
11019 class="cmtt-8"> </span><span
|
Chris@1
|
11020 class="cmtt-8"> </span><span
|
Chris@1
|
11021 class="cmtt-8"> </span><span
|
Chris@1
|
11022 class="cmtt-8"> </span><span
|
Chris@1
|
11023 class="cmtt-8"> </span><span
|
Chris@1
|
11024 class="cmtt-8"> </span><span
|
Chris@1
|
11025 class="cmtt-8"> </span><span
|
Chris@1
|
11026 class="cmtt-8"> </span><span
|
Chris@1
|
11027 class="cmtt-8"> </span><span
|
Chris@1
|
11028 class="cmtt-8"> </span><span
|
Chris@1
|
11029 class="cmtt-8"> </span><span
|
Chris@1
|
11030 class="cmtt-8"> </span><span
|
Chris@1
|
11031 class="cmtt-8"> </span><span
|
Chris@1
|
11032 class="cmtt-8"> </span><span
|
Chris@1
|
11033 class="cmtt-8"> </span><span
|
Chris@1
|
11034 class="cmtt-8"> </span><span
|
Chris@1
|
11035 class="cmtt-8"> </span><span
|
Chris@1
|
11036 class="cmtt-8"> </span><span
|
Chris@1
|
11037 class="cmtt-8"> offset</span><span
|
Chris@1
|
11038 class="cmtt-8"> [limit\_residue\_begin]+[partition\_count]*[residue\_partition\_size]</span><span
|
Chris@1
|
11039 class="cmtt-8"> using</span>
|
Chris@1
|
11040 <br class="fancyvrb" /><a
|
Chris@1
|
11041 id="x1-110102r43"></a><span
|
Chris@1
|
11042 class="cmr-6">43</span><span
|
Chris@1
|
11043 class="cmtt-8"> </span><span
|
Chris@1
|
11044 class="cmtt-8"> </span><span
|
Chris@1
|
11045 class="cmtt-8"> </span><span
|
Chris@1
|
11046 class="cmtt-8"> </span><span
|
Chris@1
|
11047 class="cmtt-8"> </span><span
|
Chris@1
|
11048 class="cmtt-8"> </span><span
|
Chris@1
|
11049 class="cmtt-8"> </span><span
|
Chris@1
|
11050 class="cmtt-8"> </span><span
|
Chris@1
|
11051 class="cmtt-8"> </span><span
|
Chris@1
|
11052 class="cmtt-8"> </span><span
|
Chris@1
|
11053 class="cmtt-8"> </span><span
|
Chris@1
|
11054 class="cmtt-8"> </span><span
|
Chris@1
|
11055 class="cmtt-8"> </span><span
|
Chris@1
|
11056 class="cmtt-8"> </span><span
|
Chris@1
|
11057 class="cmtt-8"> </span><span
|
Chris@1
|
11058 class="cmtt-8"> </span><span
|
Chris@1
|
11059 class="cmtt-8"> </span><span
|
Chris@1
|
11060 class="cmtt-8"> </span><span
|
Chris@1
|
11061 class="cmtt-8"> </span><span
|
Chris@1
|
11062 class="cmtt-8"> </span><span
|
Chris@1
|
11063 class="cmtt-8"> </span><span
|
Chris@1
|
11064 class="cmtt-8"> </span><span
|
Chris@1
|
11065 class="cmtt-8"> </span><span
|
Chris@1
|
11066 class="cmtt-8"> </span><span
|
Chris@1
|
11067 class="cmtt-8"> </span><span
|
Chris@1
|
11068 class="cmtt-8"> </span><span
|
Chris@1
|
11069 class="cmtt-8"> </span><span
|
Chris@1
|
11070 class="cmtt-8"> </span><span
|
Chris@1
|
11071 class="cmtt-8"> </span><span
|
Chris@1
|
11072 class="cmtt-8"> </span><span
|
Chris@1
|
11073 class="cmtt-8"> </span><span
|
Chris@1
|
11074 class="cmtt-8"> </span><span
|
Chris@1
|
11075 class="cmtt-8"> </span><span
|
Chris@1
|
11076 class="cmtt-8"> </span><span
|
Chris@1
|
11077 class="cmtt-8"> </span><span
|
Chris@1
|
11078 class="cmtt-8"> </span><span
|
Chris@1
|
11079 class="cmtt-8"> </span><span
|
Chris@1
|
11080 class="cmtt-8"> codebook</span><span
|
Chris@1
|
11081 class="cmtt-8"> number</span><span
|
Chris@1
|
11082 class="cmtt-8"> [vqbook]</span><span
|
Chris@1
|
11083 class="cmtt-8"> in</span><span
|
Chris@1
|
11084 class="cmtt-8"> VQ</span><span
|
Chris@1
|
11085 class="cmtt-8"> context</span>
|
Chris@1
|
11086 <br class="fancyvrb" /><a
|
Chris@1
|
11087 id="x1-110104r44"></a><span
|
Chris@1
|
11088 class="cmr-6">44</span><span
|
Chris@1
|
11089 class="cmtt-8"> </span><span
|
Chris@1
|
11090 class="cmtt-8"> </span><span
|
Chris@1
|
11091 class="cmtt-8"> </span><span
|
Chris@1
|
11092 class="cmtt-8"> </span><span
|
Chris@1
|
11093 class="cmtt-8"> </span><span
|
Chris@1
|
11094 class="cmtt-8"> </span><span
|
Chris@1
|
11095 class="cmtt-8"> </span><span
|
Chris@1
|
11096 class="cmtt-8"> </span><span
|
Chris@1
|
11097 class="cmtt-8"> </span><span
|
Chris@1
|
11098 class="cmtt-8"> </span><span
|
Chris@1
|
11099 class="cmtt-8"> </span><span
|
Chris@1
|
11100 class="cmtt-8"> </span><span
|
Chris@1
|
11101 class="cmtt-8"> </span><span
|
Chris@1
|
11102 class="cmtt-8"> </span><span
|
Chris@1
|
11103 class="cmtt-8"> </span><span
|
Chris@1
|
11104 class="cmtt-8"> </span><span
|
Chris@1
|
11105 class="cmtt-8"> </span><span
|
Chris@1
|
11106 class="cmtt-8"> </span><span
|
Chris@1
|
11107 class="cmtt-8"> </span><span
|
Chris@1
|
11108 class="cmtt-8"> </span><span
|
Chris@1
|
11109 class="cmtt-8"> </span><span
|
Chris@1
|
11110 class="cmtt-8"> </span><span
|
Chris@1
|
11111 class="cmtt-8"> </span><span
|
Chris@1
|
11112 class="cmtt-8"> </span><span
|
Chris@1
|
11113 class="cmtt-8"> </span><span
|
Chris@1
|
11114 class="cmtt-8"> </span><span
|
Chris@1
|
11115 class="cmtt-8"> </span><span
|
Chris@1
|
11116 class="cmtt-8"> }</span>
|
Chris@1
|
11117
|
Chris@1
|
11118
|
Chris@1
|
11119
|
Chris@1
|
11120 <br class="fancyvrb" /><a
|
Chris@1
|
11121 id="x1-110106r45"></a><span
|
Chris@1
|
11122 class="cmr-6">45</span><span
|
Chris@1
|
11123 class="cmtt-8"> </span><span
|
Chris@1
|
11124 class="cmtt-8"> </span><span
|
Chris@1
|
11125 class="cmtt-8"> </span><span
|
Chris@1
|
11126 class="cmtt-8"> </span><span
|
Chris@1
|
11127 class="cmtt-8"> </span><span
|
Chris@1
|
11128 class="cmtt-8"> </span><span
|
Chris@1
|
11129 class="cmtt-8"> </span><span
|
Chris@1
|
11130 class="cmtt-8"> </span><span
|
Chris@1
|
11131 class="cmtt-8"> </span><span
|
Chris@1
|
11132 class="cmtt-8"> </span><span
|
Chris@1
|
11133 class="cmtt-8"> </span><span
|
Chris@1
|
11134 class="cmtt-8"> </span><span
|
Chris@1
|
11135 class="cmtt-8"> </span><span
|
Chris@1
|
11136 class="cmtt-8"> </span><span
|
Chris@1
|
11137 class="cmtt-8"> </span><span
|
Chris@1
|
11138 class="cmtt-8"> </span><span
|
Chris@1
|
11139 class="cmtt-8"> </span><span
|
Chris@1
|
11140 class="cmtt-8"> </span><span
|
Chris@1
|
11141 class="cmtt-8"> </span><span
|
Chris@1
|
11142 class="cmtt-8"> </span><span
|
Chris@1
|
11143 class="cmtt-8"> </span><span
|
Chris@1
|
11144 class="cmtt-8"> </span><span
|
Chris@1
|
11145 class="cmtt-8"> }</span>
|
Chris@1
|
11146 <br class="fancyvrb" /><a
|
Chris@1
|
11147 id="x1-110108r46"></a><span
|
Chris@1
|
11148 class="cmr-6">46</span><span
|
Chris@1
|
11149 class="cmtt-8"> </span><span
|
Chris@1
|
11150 class="cmtt-8"> </span>
|
Chris@1
|
11151 <br class="fancyvrb" /><a
|
Chris@1
|
11152 id="x1-110110r47"></a><span
|
Chris@1
|
11153 class="cmr-6">47</span><span
|
Chris@1
|
11154 class="cmtt-8"> </span><span
|
Chris@1
|
11155 class="cmtt-8"> </span><span
|
Chris@1
|
11156 class="cmtt-8"> </span><span
|
Chris@1
|
11157 class="cmtt-8"> </span><span
|
Chris@1
|
11158 class="cmtt-8"> </span><span
|
Chris@1
|
11159 class="cmtt-8"> </span><span
|
Chris@1
|
11160 class="cmtt-8"> </span><span
|
Chris@1
|
11161 class="cmtt-8"> </span><span
|
Chris@1
|
11162 class="cmtt-8"> </span><span
|
Chris@1
|
11163 class="cmtt-8"> </span><span
|
Chris@1
|
11164 class="cmtt-8"> </span><span
|
Chris@1
|
11165 class="cmtt-8"> </span><span
|
Chris@1
|
11166 class="cmtt-8"> </span><span
|
Chris@1
|
11167 class="cmtt-8"> </span><span
|
Chris@1
|
11168 class="cmtt-8"> </span><span
|
Chris@1
|
11169 class="cmtt-8"> </span><span
|
Chris@1
|
11170 class="cmtt-8"> </span><span
|
Chris@1
|
11171 class="cmtt-8"> </span><span
|
Chris@1
|
11172 class="cmtt-8"> 20)</span><span
|
Chris@1
|
11173 class="cmtt-8"> increment</span><span
|
Chris@1
|
11174 class="cmtt-8"> [partition\_count]</span><span
|
Chris@1
|
11175 class="cmtt-8"> by</span><span
|
Chris@1
|
11176 class="cmtt-8"> one</span>
|
Chris@1
|
11177 <br class="fancyvrb" /><a
|
Chris@1
|
11178 id="x1-110112r48"></a><span
|
Chris@1
|
11179 class="cmr-6">48</span><span
|
Chris@1
|
11180 class="cmtt-8"> </span><span
|
Chris@1
|
11181 class="cmtt-8"> </span>
|
Chris@1
|
11182 <br class="fancyvrb" /><a
|
Chris@1
|
11183 id="x1-110114r49"></a><span
|
Chris@1
|
11184 class="cmr-6">49</span><span
|
Chris@1
|
11185 class="cmtt-8"> </span><span
|
Chris@1
|
11186 class="cmtt-8"> </span><span
|
Chris@1
|
11187 class="cmtt-8"> </span><span
|
Chris@1
|
11188 class="cmtt-8"> </span><span
|
Chris@1
|
11189 class="cmtt-8"> </span><span
|
Chris@1
|
11190 class="cmtt-8"> </span><span
|
Chris@1
|
11191 class="cmtt-8"> </span><span
|
Chris@1
|
11192 class="cmtt-8"> </span><span
|
Chris@1
|
11193 class="cmtt-8"> </span><span
|
Chris@1
|
11194 class="cmtt-8"> </span><span
|
Chris@1
|
11195 class="cmtt-8"> </span><span
|
Chris@1
|
11196 class="cmtt-8"> </span><span
|
Chris@1
|
11197 class="cmtt-8"> </span><span
|
Chris@1
|
11198 class="cmtt-8"> </span><span
|
Chris@1
|
11199 class="cmtt-8"> </span><span
|
Chris@1
|
11200 class="cmtt-8"> </span><span
|
Chris@1
|
11201 class="cmtt-8"> }</span>
|
Chris@1
|
11202 <br class="fancyvrb" /><a
|
Chris@1
|
11203 id="x1-110116r50"></a><span
|
Chris@1
|
11204 class="cmr-6">50</span><span
|
Chris@1
|
11205 class="cmtt-8"> </span><span
|
Chris@1
|
11206 class="cmtt-8"> </span><span
|
Chris@1
|
11207 class="cmtt-8"> </span><span
|
Chris@1
|
11208 class="cmtt-8"> </span><span
|
Chris@1
|
11209 class="cmtt-8"> </span><span
|
Chris@1
|
11210 class="cmtt-8"> </span><span
|
Chris@1
|
11211 class="cmtt-8"> </span><span
|
Chris@1
|
11212 class="cmtt-8"> </span><span
|
Chris@1
|
11213 class="cmtt-8"> </span><span
|
Chris@1
|
11214 class="cmtt-8"> </span><span
|
Chris@1
|
11215 class="cmtt-8"> </span><span
|
Chris@1
|
11216 class="cmtt-8"> }</span>
|
Chris@1
|
11217 <br class="fancyvrb" /><a
|
Chris@1
|
11218 id="x1-110118r51"></a><span
|
Chris@1
|
11219 class="cmr-6">51</span><span
|
Chris@1
|
11220 class="cmtt-8"> </span><span
|
Chris@1
|
11221 class="cmtt-8"> </span><span
|
Chris@1
|
11222 class="cmtt-8"> </span><span
|
Chris@1
|
11223 class="cmtt-8"> </span><span
|
Chris@1
|
11224 class="cmtt-8"> </span><span
|
Chris@1
|
11225 class="cmtt-8"> </span><span
|
Chris@1
|
11226 class="cmtt-8"> }</span>
|
Chris@1
|
11227 <br class="fancyvrb" /><a
|
Chris@1
|
11228 id="x1-110120r52"></a><span
|
Chris@1
|
11229 class="cmr-6">52</span><span
|
Chris@1
|
11230 class="cmtt-8"> </span><span
|
Chris@1
|
11231 class="cmtt-8"> </span>
|
Chris@1
|
11232 <br class="fancyvrb" /><a
|
Chris@1
|
11233 id="x1-110122r53"></a><span
|
Chris@1
|
11234 class="cmr-6">53</span><span
|
Chris@1
|
11235 class="cmtt-8"> </span><span
|
Chris@1
|
11236 class="cmtt-8"> </span><span
|
Chris@1
|
11237 class="cmtt-8"> 21)</span><span
|
Chris@1
|
11238 class="cmtt-8"> done</span>
|
Chris@1
|
11239 <br class="fancyvrb" /><a
|
Chris@1
|
11240 id="x1-110124r54"></a><span
|
Chris@1
|
11241 class="cmr-6">54</span><span
|
Chris@1
|
11242 class="cmtt-8"> </span><span
|
Chris@1
|
11243 class="cmtt-8"> </span>
|
Chris@1
|
11244 </div>
|
Chris@1
|
11245 <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
|
Chris@1
|
11246 Decode returns the result of vector decode up to that point.
|
Chris@1
|
11247 <!--l. 350--><p class="noindent" >
|
Chris@1
|
11248 <h5 class="subsubsectionHead"><span class="titlemark">8.6.3. </span> <a
|
Chris@1
|
11249 id="x1-1110008.6.3"></a>format 0 specifics</h5>
|
Chris@1
|
11250 <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the ’Residue Format: residue 0’
|
Chris@1
|
11251 section. The following pseudocode presents the same algorithm. Assume:
|
Chris@1
|
11252 <ul class="itemize1">
|
Chris@1
|
11253 <li class="itemize"><span
|
Chris@1
|
11254 class="cmtt-12">[n] </span>is the value in <span
|
Chris@1
|
11255 class="cmtt-12">[residue_partition_size]</span>
|
Chris@1
|
11256 </li>
|
Chris@1
|
11257 <li class="itemize"><span
|
Chris@1
|
11258 class="cmtt-12">[v] </span>is the residue vector
|
Chris@1
|
11259 </li>
|
Chris@1
|
11260 <li class="itemize"><span
|
Chris@1
|
11261 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
|
Chris@1
|
11262 <!--l. 363--><p class="noindent" >
|
Chris@1
|
11263 <div class="fancyvrb" id="fancyvrb41">
|
Chris@1
|
11264 <a
|
Chris@1
|
11265 id="x1-111002r1"></a><span
|
Chris@1
|
11266 class="cmr-6">1</span><span
|
Chris@1
|
11267 class="cmtt-8"> </span><span
|
Chris@1
|
11268 class="cmtt-8"> </span><span
|
Chris@1
|
11269 class="cmtt-8"> 1)</span><span
|
Chris@1
|
11270 class="cmtt-8"> [step]</span><span
|
Chris@1
|
11271 class="cmtt-8"> =</span><span
|
Chris@1
|
11272 class="cmtt-8"> [n]</span><span
|
Chris@1
|
11273 class="cmtt-8"> /</span><span
|
Chris@1
|
11274 class="cmtt-8"> [codebook\_dimensions]</span>
|
Chris@1
|
11275 <br class="fancyvrb" /><a
|
Chris@1
|
11276 id="x1-111004r2"></a><span
|
Chris@1
|
11277 class="cmr-6">2</span><span
|
Chris@1
|
11278 class="cmtt-8"> </span><span
|
Chris@1
|
11279 class="cmtt-8"> </span><span
|
Chris@1
|
11280 class="cmtt-8"> 2)</span><span
|
Chris@1
|
11281 class="cmtt-8"> iterate</span><span
|
Chris@1
|
11282 class="cmtt-8"> [i]</span><span
|
Chris@1
|
11283 class="cmtt-8"> over</span><span
|
Chris@1
|
11284 class="cmtt-8"> the</span><span
|
Chris@1
|
11285 class="cmtt-8"> range</span><span
|
Chris@1
|
11286 class="cmtt-8"> 0</span><span
|
Chris@1
|
11287 class="cmtt-8"> ...</span><span
|
Chris@1
|
11288 class="cmtt-8"> [step]-1</span><span
|
Chris@1
|
11289 class="cmtt-8"> {</span>
|
Chris@1
|
11290 <br class="fancyvrb" /><a
|
Chris@1
|
11291 id="x1-111006r3"></a><span
|
Chris@1
|
11292 class="cmr-6">3</span><span
|
Chris@1
|
11293 class="cmtt-8"> </span><span
|
Chris@1
|
11294 class="cmtt-8"> </span>
|
Chris@1
|
11295 <br class="fancyvrb" /><a
|
Chris@1
|
11296 id="x1-111008r4"></a><span
|
Chris@1
|
11297 class="cmr-6">4</span><span
|
Chris@1
|
11298 class="cmtt-8"> </span><span
|
Chris@1
|
11299 class="cmtt-8"> </span><span
|
Chris@1
|
11300 class="cmtt-8"> </span><span
|
Chris@1
|
11301 class="cmtt-8"> </span><span
|
Chris@1
|
11302 class="cmtt-8"> </span><span
|
Chris@1
|
11303 class="cmtt-8"> </span><span
|
Chris@1
|
11304 class="cmtt-8"> </span><span
|
Chris@1
|
11305 class="cmtt-8"> 3)</span><span
|
Chris@1
|
11306 class="cmtt-8"> vector</span><span
|
Chris@1
|
11307 class="cmtt-8"> [entry\_temp]</span><span
|
Chris@1
|
11308 class="cmtt-8"> =</span><span
|
Chris@1
|
11309 class="cmtt-8"> read</span><span
|
Chris@1
|
11310 class="cmtt-8"> vector</span><span
|
Chris@1
|
11311 class="cmtt-8"> from</span><span
|
Chris@1
|
11312 class="cmtt-8"> packet</span><span
|
Chris@1
|
11313 class="cmtt-8"> using</span><span
|
Chris@1
|
11314 class="cmtt-8"> current</span><span
|
Chris@1
|
11315 class="cmtt-8"> codebook</span><span
|
Chris@1
|
11316 class="cmtt-8"> in</span><span
|
Chris@1
|
11317 class="cmtt-8"> VQ</span><span
|
Chris@1
|
11318 class="cmtt-8"> context</span>
|
Chris@1
|
11319 <br class="fancyvrb" /><a
|
Chris@1
|
11320 id="x1-111010r5"></a><span
|
Chris@1
|
11321 class="cmr-6">5</span><span
|
Chris@1
|
11322 class="cmtt-8"> </span><span
|
Chris@1
|
11323 class="cmtt-8"> </span><span
|
Chris@1
|
11324 class="cmtt-8"> </span><span
|
Chris@1
|
11325 class="cmtt-8"> </span><span
|
Chris@1
|
11326 class="cmtt-8"> </span><span
|
Chris@1
|
11327 class="cmtt-8"> </span><span
|
Chris@1
|
11328 class="cmtt-8"> </span><span
|
Chris@1
|
11329 class="cmtt-8"> 4)</span><span
|
Chris@1
|
11330 class="cmtt-8"> iterate</span><span
|
Chris@1
|
11331 class="cmtt-8"> [j]</span><span
|
Chris@1
|
11332 class="cmtt-8"> over</span><span
|
Chris@1
|
11333 class="cmtt-8"> the</span><span
|
Chris@1
|
11334 class="cmtt-8"> range</span><span
|
Chris@1
|
11335 class="cmtt-8"> 0</span><span
|
Chris@1
|
11336 class="cmtt-8"> ...</span><span
|
Chris@1
|
11337 class="cmtt-8"> [codebook\_dimensions]-1</span><span
|
Chris@1
|
11338 class="cmtt-8"> {</span>
|
Chris@1
|
11339 <br class="fancyvrb" /><a
|
Chris@1
|
11340 id="x1-111012r6"></a><span
|
Chris@1
|
11341 class="cmr-6">6</span><span
|
Chris@1
|
11342 class="cmtt-8"> </span><span
|
Chris@1
|
11343 class="cmtt-8"> </span>
|
Chris@1
|
11344 <br class="fancyvrb" /><a
|
Chris@1
|
11345 id="x1-111014r7"></a><span
|
Chris@1
|
11346 class="cmr-6">7</span><span
|
Chris@1
|
11347 class="cmtt-8"> </span><span
|
Chris@1
|
11348 class="cmtt-8"> </span><span
|
Chris@1
|
11349 class="cmtt-8"> </span><span
|
Chris@1
|
11350 class="cmtt-8"> </span><span
|
Chris@1
|
11351 class="cmtt-8"> </span><span
|
Chris@1
|
11352 class="cmtt-8"> </span><span
|
Chris@1
|
11353 class="cmtt-8"> </span><span
|
Chris@1
|
11354 class="cmtt-8"> </span><span
|
Chris@1
|
11355 class="cmtt-8"> </span><span
|
Chris@1
|
11356 class="cmtt-8"> </span><span
|
Chris@1
|
11357 class="cmtt-8"> </span><span
|
Chris@1
|
11358 class="cmtt-8"> </span><span
|
Chris@1
|
11359 class="cmtt-8"> 5)</span><span
|
Chris@1
|
11360 class="cmtt-8"> vector</span><span
|
Chris@1
|
11361 class="cmtt-8"> [v]</span><span
|
Chris@1
|
11362 class="cmtt-8"> element</span><span
|
Chris@1
|
11363 class="cmtt-8"> ([offset]+[i]+[j]*[step])</span><span
|
Chris@1
|
11364 class="cmtt-8"> =</span>
|
Chris@1
|
11365 <br class="fancyvrb" /><a
|
Chris@1
|
11366 id="x1-111016r8"></a><span
|
Chris@1
|
11367 class="cmr-6">8</span><span
|
Chris@1
|
11368 class="cmtt-8"> </span><span
|
Chris@1
|
11369 class="cmtt-8">  </span><span
|
Chris@1
|
11370 class="cmtt-8"> </span><span
|
Chris@1
|
11371 class="cmtt-8"> </span><span
|
Chris@1
|
11372 class="cmtt-8"> </span><span
|
Chris@1
|
11373 class="cmtt-8"> </span><span
|
Chris@1
|
11374 class="cmtt-8"> </span><span
|
Chris@1
|
11375 class="cmtt-8"> </span><span
|
Chris@1
|
11376 class="cmtt-8"> </span><span
|
Chris@1
|
11377 class="cmtt-8"> vector</span><span
|
Chris@1
|
11378 class="cmtt-8"> [v]</span><span
|
Chris@1
|
11379 class="cmtt-8"> element</span><span
|
Chris@1
|
11380 class="cmtt-8"> ([offset]+[i]+[j]*[step])</span><span
|
Chris@1
|
11381 class="cmtt-8"> +</span>
|
Chris@1
|
11382 <br class="fancyvrb" /><a
|
Chris@1
|
11383 id="x1-111018r9"></a><span
|
Chris@1
|
11384 class="cmr-6">9</span><span
|
Chris@1
|
11385 class="cmtt-8"> </span><span
|
Chris@1
|
11386 class="cmtt-8"> </span><span
|
Chris@1
|
11387 class="cmtt-8"> </span><span
|
Chris@1
|
11388 class="cmtt-8"> </span><span
|
Chris@1
|
11389 class="cmtt-8"> </span><span
|
Chris@1
|
11390 class="cmtt-8"> </span><span
|
Chris@1
|
11391 class="cmtt-8"> </span><span
|
Chris@1
|
11392 class="cmtt-8"> </span><span
|
Chris@1
|
11393 class="cmtt-8"> </span><span
|
Chris@1
|
11394 class="cmtt-8"> </span><span
|
Chris@1
|
11395 class="cmtt-8"> </span><span
|
Chris@1
|
11396 class="cmtt-8"> </span><span
|
Chris@1
|
11397 class="cmtt-8"> </span><span
|
Chris@1
|
11398 class="cmtt-8"> </span><span
|
Chris@1
|
11399 class="cmtt-8"> </span><span
|
Chris@1
|
11400 class="cmtt-8"> </span><span
|
Chris@1
|
11401 class="cmtt-8"> </span><span
|
Chris@1
|
11402 class="cmtt-8"> vector</span><span
|
Chris@1
|
11403 class="cmtt-8"> [entry\_temp]</span><span
|
Chris@1
|
11404 class="cmtt-8"> element</span><span
|
Chris@1
|
11405 class="cmtt-8"> [j]</span>
|
Chris@1
|
11406 <br class="fancyvrb" /><a
|
Chris@1
|
11407 id="x1-111020r10"></a><span
|
Chris@1
|
11408 class="cmr-6">10</span><span
|
Chris@1
|
11409 class="cmtt-8"> </span><span
|
Chris@1
|
11410 class="cmtt-8"> </span>
|
Chris@1
|
11411 <br class="fancyvrb" /><a
|
Chris@1
|
11412 id="x1-111022r11"></a><span
|
Chris@1
|
11413 class="cmr-6">11</span><span
|
Chris@1
|
11414 class="cmtt-8"> </span><span
|
Chris@1
|
11415 class="cmtt-8"> </span><span
|
Chris@1
|
11416 class="cmtt-8"> </span><span
|
Chris@1
|
11417 class="cmtt-8"> </span><span
|
Chris@1
|
11418 class="cmtt-8"> </span><span
|
Chris@1
|
11419 class="cmtt-8"> </span><span
|
Chris@1
|
11420 class="cmtt-8"> </span><span
|
Chris@1
|
11421 class="cmtt-8"> </span><span
|
Chris@1
|
11422 class="cmtt-8"> </span><span
|
Chris@1
|
11423 class="cmtt-8"> </span><span
|
Chris@1
|
11424 class="cmtt-8"> }</span>
|
Chris@1
|
11425 <br class="fancyvrb" /><a
|
Chris@1
|
11426 id="x1-111024r12"></a><span
|
Chris@1
|
11427 class="cmr-6">12</span><span
|
Chris@1
|
11428 class="cmtt-8"> </span><span
|
Chris@1
|
11429 class="cmtt-8"> </span>
|
Chris@1
|
11430 <br class="fancyvrb" /><a
|
Chris@1
|
11431 id="x1-111026r13"></a><span
|
Chris@1
|
11432 class="cmr-6">13</span><span
|
Chris@1
|
11433 class="cmtt-8"> </span><span
|
Chris@1
|
11434 class="cmtt-8"> </span><span
|
Chris@1
|
11435 class="cmtt-8"> </span><span
|
Chris@1
|
11436 class="cmtt-8"> </span><span
|
Chris@1
|
11437 class="cmtt-8"> </span><span
|
Chris@1
|
11438 class="cmtt-8"> }</span>
|
Chris@1
|
11439 <br class="fancyvrb" /><a
|
Chris@1
|
11440 id="x1-111028r14"></a><span
|
Chris@1
|
11441 class="cmr-6">14</span><span
|
Chris@1
|
11442 class="cmtt-8"> </span><span
|
Chris@1
|
11443 class="cmtt-8"> </span>
|
Chris@1
|
11444 <br class="fancyvrb" /><a
|
Chris@1
|
11445 id="x1-111030r15"></a><span
|
Chris@1
|
11446 class="cmr-6">15</span><span
|
Chris@1
|
11447 class="cmtt-8"> </span><span
|
Chris@1
|
11448 class="cmtt-8"> </span><span
|
Chris@1
|
11449 class="cmtt-8"> </span><span
|
Chris@1
|
11450 class="cmtt-8"> 6)</span><span
|
Chris@1
|
11451 class="cmtt-8"> done</span>
|
Chris@1
|
11452 <br class="fancyvrb" /><a
|
Chris@1
|
11453 id="x1-111032r16"></a><span
|
Chris@1
|
11454 class="cmr-6">16</span><span
|
Chris@1
|
11455 class="cmtt-8"> </span><span
|
Chris@1
|
11456 class="cmtt-8"> </span>
|
Chris@1
|
11457
|
Chris@1
|
11458
|
Chris@1
|
11459
|
Chris@1
|
11460 </div>
|
Chris@1
|
11461 <!--l. 384--><p class="noindent" >
|
Chris@1
|
11462 <h5 class="subsubsectionHead"><span class="titlemark">8.6.4. </span> <a
|
Chris@1
|
11463 id="x1-1120008.6.4"></a>format 1 specifics</h5>
|
Chris@1
|
11464 <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the ’Residue Format: residue 1’
|
Chris@1
|
11465 section. The following pseudocode presents the same algorithm. Assume:
|
Chris@1
|
11466 <ul class="itemize1">
|
Chris@1
|
11467 <li class="itemize"><span
|
Chris@1
|
11468 class="cmtt-12">[n] </span>is the value in <span
|
Chris@1
|
11469 class="cmtt-12">[residue_partition_size]</span>
|
Chris@1
|
11470 </li>
|
Chris@1
|
11471 <li class="itemize"><span
|
Chris@1
|
11472 class="cmtt-12">[v] </span>is the residue vector
|
Chris@1
|
11473 </li>
|
Chris@1
|
11474 <li class="itemize"><span
|
Chris@1
|
11475 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
|
Chris@1
|
11476 <!--l. 398--><p class="noindent" >
|
Chris@1
|
11477 <div class="fancyvrb" id="fancyvrb42">
|
Chris@1
|
11478 <a
|
Chris@1
|
11479 id="x1-112002r1"></a><span
|
Chris@1
|
11480 class="cmr-6">1</span><span
|
Chris@1
|
11481 class="cmtt-8"> </span><span
|
Chris@1
|
11482 class="cmtt-8"> </span><span
|
Chris@1
|
11483 class="cmtt-8"> 1)</span><span
|
Chris@1
|
11484 class="cmtt-8"> [i]</span><span
|
Chris@1
|
11485 class="cmtt-8"> =</span><span
|
Chris@1
|
11486 class="cmtt-8"> 0</span>
|
Chris@1
|
11487 <br class="fancyvrb" /><a
|
Chris@1
|
11488 id="x1-112004r2"></a><span
|
Chris@1
|
11489 class="cmr-6">2</span><span
|
Chris@1
|
11490 class="cmtt-8"> </span><span
|
Chris@1
|
11491 class="cmtt-8"> </span><span
|
Chris@1
|
11492 class="cmtt-8"> 2)</span><span
|
Chris@1
|
11493 class="cmtt-8"> vector</span><span
|
Chris@1
|
11494 class="cmtt-8"> [entry\_temp]</span><span
|
Chris@1
|
11495 class="cmtt-8"> =</span><span
|
Chris@1
|
11496 class="cmtt-8"> read</span><span
|
Chris@1
|
11497 class="cmtt-8"> vector</span><span
|
Chris@1
|
11498 class="cmtt-8"> from</span><span
|
Chris@1
|
11499 class="cmtt-8"> packet</span><span
|
Chris@1
|
11500 class="cmtt-8"> using</span><span
|
Chris@1
|
11501 class="cmtt-8"> current</span><span
|
Chris@1
|
11502 class="cmtt-8"> codebook</span><span
|
Chris@1
|
11503 class="cmtt-8"> in</span><span
|
Chris@1
|
11504 class="cmtt-8"> VQ</span><span
|
Chris@1
|
11505 class="cmtt-8"> context</span>
|
Chris@1
|
11506 <br class="fancyvrb" /><a
|
Chris@1
|
11507 id="x1-112006r3"></a><span
|
Chris@1
|
11508 class="cmr-6">3</span><span
|
Chris@1
|
11509 class="cmtt-8"> </span><span
|
Chris@1
|
11510 class="cmtt-8"> </span><span
|
Chris@1
|
11511 class="cmtt-8"> 3)</span><span
|
Chris@1
|
11512 class="cmtt-8"> iterate</span><span
|
Chris@1
|
11513 class="cmtt-8"> [j]</span><span
|
Chris@1
|
11514 class="cmtt-8"> over</span><span
|
Chris@1
|
11515 class="cmtt-8"> the</span><span
|
Chris@1
|
11516 class="cmtt-8"> range</span><span
|
Chris@1
|
11517 class="cmtt-8"> 0</span><span
|
Chris@1
|
11518 class="cmtt-8"> ...</span><span
|
Chris@1
|
11519 class="cmtt-8"> [codebook\_dimensions]-1</span><span
|
Chris@1
|
11520 class="cmtt-8"> {</span>
|
Chris@1
|
11521 <br class="fancyvrb" /><a
|
Chris@1
|
11522 id="x1-112008r4"></a><span
|
Chris@1
|
11523 class="cmr-6">4</span><span
|
Chris@1
|
11524 class="cmtt-8"> </span><span
|
Chris@1
|
11525 class="cmtt-8"> </span>
|
Chris@1
|
11526 <br class="fancyvrb" /><a
|
Chris@1
|
11527 id="x1-112010r5"></a><span
|
Chris@1
|
11528 class="cmr-6">5</span><span
|
Chris@1
|
11529 class="cmtt-8"> </span><span
|
Chris@1
|
11530 class="cmtt-8"> </span><span
|
Chris@1
|
11531 class="cmtt-8"> </span><span
|
Chris@1
|
11532 class="cmtt-8"> </span><span
|
Chris@1
|
11533 class="cmtt-8"> </span><span
|
Chris@1
|
11534 class="cmtt-8"> </span><span
|
Chris@1
|
11535 class="cmtt-8"> </span><span
|
Chris@1
|
11536 class="cmtt-8"> 4)</span><span
|
Chris@1
|
11537 class="cmtt-8"> vector</span><span
|
Chris@1
|
11538 class="cmtt-8"> [v]</span><span
|
Chris@1
|
11539 class="cmtt-8"> element</span><span
|
Chris@1
|
11540 class="cmtt-8"> ([offset]+[i])</span><span
|
Chris@1
|
11541 class="cmtt-8"> =</span>
|
Chris@1
|
11542 <br class="fancyvrb" /><a
|
Chris@1
|
11543 id="x1-112012r6"></a><span
|
Chris@1
|
11544 class="cmr-6">6</span><span
|
Chris@1
|
11545 class="cmtt-8"> </span><span
|
Chris@1
|
11546 class="cmtt-8">  </span><span
|
Chris@1
|
11547 class="cmtt-8"> </span><span
|
Chris@1
|
11548 class="cmtt-8"> vector</span><span
|
Chris@1
|
11549 class="cmtt-8"> [v]</span><span
|
Chris@1
|
11550 class="cmtt-8"> element</span><span
|
Chris@1
|
11551 class="cmtt-8"> ([offset]+[i])</span><span
|
Chris@1
|
11552 class="cmtt-8"> +</span>
|
Chris@1
|
11553 <br class="fancyvrb" /><a
|
Chris@1
|
11554 id="x1-112014r7"></a><span
|
Chris@1
|
11555 class="cmr-6">7</span><span
|
Chris@1
|
11556 class="cmtt-8"> </span><span
|
Chris@1
|
11557 class="cmtt-8"> </span><span
|
Chris@1
|
11558 class="cmtt-8"> </span><span
|
Chris@1
|
11559 class="cmtt-8"> </span><span
|
Chris@1
|
11560 class="cmtt-8"> </span><span
|
Chris@1
|
11561 class="cmtt-8"> </span><span
|
Chris@1
|
11562 class="cmtt-8"> </span><span
|
Chris@1
|
11563 class="cmtt-8"> </span><span
|
Chris@1
|
11564 class="cmtt-8"> </span><span
|
Chris@1
|
11565 class="cmtt-8"> </span><span
|
Chris@1
|
11566 class="cmtt-8"> </span><span
|
Chris@1
|
11567 class="cmtt-8"> vector</span><span
|
Chris@1
|
11568 class="cmtt-8"> [entry\_temp]</span><span
|
Chris@1
|
11569 class="cmtt-8"> element</span><span
|
Chris@1
|
11570 class="cmtt-8"> [j]</span>
|
Chris@1
|
11571 <br class="fancyvrb" /><a
|
Chris@1
|
11572 id="x1-112016r8"></a><span
|
Chris@1
|
11573 class="cmr-6">8</span><span
|
Chris@1
|
11574 class="cmtt-8"> </span><span
|
Chris@1
|
11575 class="cmtt-8"> </span><span
|
Chris@1
|
11576 class="cmtt-8"> </span><span
|
Chris@1
|
11577 class="cmtt-8"> </span><span
|
Chris@1
|
11578 class="cmtt-8"> </span><span
|
Chris@1
|
11579 class="cmtt-8"> </span><span
|
Chris@1
|
11580 class="cmtt-8"> </span><span
|
Chris@1
|
11581 class="cmtt-8"> 5)</span><span
|
Chris@1
|
11582 class="cmtt-8"> increment</span><span
|
Chris@1
|
11583 class="cmtt-8"> [i]</span>
|
Chris@1
|
11584 <br class="fancyvrb" /><a
|
Chris@1
|
11585 id="x1-112018r9"></a><span
|
Chris@1
|
11586 class="cmr-6">9</span><span
|
Chris@1
|
11587 class="cmtt-8"> </span><span
|
Chris@1
|
11588 class="cmtt-8"> </span>
|
Chris@1
|
11589 <br class="fancyvrb" /><a
|
Chris@1
|
11590 id="x1-112020r10"></a><span
|
Chris@1
|
11591 class="cmr-6">10</span><span
|
Chris@1
|
11592 class="cmtt-8"> </span><span
|
Chris@1
|
11593 class="cmtt-8"> </span><span
|
Chris@1
|
11594 class="cmtt-8"> </span><span
|
Chris@1
|
11595 class="cmtt-8"> </span><span
|
Chris@1
|
11596 class="cmtt-8"> </span><span
|
Chris@1
|
11597 class="cmtt-8"> }</span>
|
Chris@1
|
11598 <br class="fancyvrb" /><a
|
Chris@1
|
11599 id="x1-112022r11"></a><span
|
Chris@1
|
11600 class="cmr-6">11</span><span
|
Chris@1
|
11601 class="cmtt-8"> </span><span
|
Chris@1
|
11602 class="cmtt-8"> </span>
|
Chris@1
|
11603 <br class="fancyvrb" /><a
|
Chris@1
|
11604 id="x1-112024r12"></a><span
|
Chris@1
|
11605 class="cmr-6">12</span><span
|
Chris@1
|
11606 class="cmtt-8"> </span><span
|
Chris@1
|
11607 class="cmtt-8"> </span><span
|
Chris@1
|
11608 class="cmtt-8"> </span><span
|
Chris@1
|
11609 class="cmtt-8"> 6)</span><span
|
Chris@1
|
11610 class="cmtt-8"> if</span><span
|
Chris@1
|
11611 class="cmtt-8"> (</span><span
|
Chris@1
|
11612 class="cmtt-8"> [i]</span><span
|
Chris@1
|
11613 class="cmtt-8"> is</span><span
|
Chris@1
|
11614 class="cmtt-8"> less</span><span
|
Chris@1
|
11615 class="cmtt-8"> than</span><span
|
Chris@1
|
11616 class="cmtt-8"> [n]</span><span
|
Chris@1
|
11617 class="cmtt-8"> )</span><span
|
Chris@1
|
11618 class="cmtt-8"> continue</span><span
|
Chris@1
|
11619 class="cmtt-8"> at</span><span
|
Chris@1
|
11620 class="cmtt-8"> step</span><span
|
Chris@1
|
11621 class="cmtt-8"> 2</span>
|
Chris@1
|
11622 <br class="fancyvrb" /><a
|
Chris@1
|
11623 id="x1-112026r13"></a><span
|
Chris@1
|
11624 class="cmr-6">13</span><span
|
Chris@1
|
11625 class="cmtt-8"> </span><span
|
Chris@1
|
11626 class="cmtt-8"> </span><span
|
Chris@1
|
11627 class="cmtt-8"> </span><span
|
Chris@1
|
11628 class="cmtt-8"> 7)</span><span
|
Chris@1
|
11629 class="cmtt-8"> done</span>
|
Chris@1
|
11630 </div>
|
Chris@1
|
11631 <!--l. 416--><p class="noindent" >
|
Chris@1
|
11632 <h5 class="subsubsectionHead"><span class="titlemark">8.6.5. </span> <a
|
Chris@1
|
11633 id="x1-1130008.6.5"></a>format 2 specifics</h5>
|
Chris@1
|
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
|
Chris@1
|
11635 additional post-decode step after a normal format 1 decode.
|
Chris@1
|
11636
|
Chris@1
|
11637
|
Chris@1
|
11638
|
Chris@1
|
11639 <!--l. 421--><p class="noindent" >Format 2 handles ’do not decode’ vectors differently than residue 0 or 1; if all vectors are marked
|
Chris@1
|
11640 ’do not decode’, no decode occurrs. However, if at least one vector is to be decoded, all
|
Chris@1
|
11641 the vectors are decoded. We then request normal format 1 to decode a single vector
|
Chris@1
|
11642 representing all output channels, rather than a vector for each channel. After decode,
|
Chris@1
|
11643 deinterleave the vector into independent vectors, one for each output channel. That
|
Chris@1
|
11644 is:
|
Chris@1
|
11645 <!--l. 429--><p class="noindent" >
|
Chris@1
|
11646 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
|
Chris@1
|
11647 1. </dt><dd
|
Chris@1
|
11648 class="enumerate-enumitem">If all vectors 0 through <span
|
Chris@1
|
11649 class="cmti-12">ch</span>-1 are marked ’do not decode’, allocate and clear a single
|
Chris@1
|
11650 vector <span
|
Chris@1
|
11651 class="cmtt-12">[v]</span>of length <span
|
Chris@1
|
11652 class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
|
Chris@1
|
11653 step.
|
Chris@1
|
11654 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
11655 2. </dt><dd
|
Chris@1
|
11656 class="enumerate-enumitem">Rather than performing format 1 decode to produce <span
|
Chris@1
|
11657 class="cmti-12">ch </span>vectors of length <span
|
Chris@1
|
11658 class="cmti-12">n </span>each, call
|
Chris@1
|
11659 format 1 decode to produce a single vector <span
|
Chris@1
|
11660 class="cmtt-12">[v] </span>of length <span
|
Chris@1
|
11661 class="cmti-12">ch*n</span>.
|
Chris@1
|
11662 </dd><dt class="enumerate-enumitem">
|
Chris@1
|
11663 3. </dt><dd
|
Chris@1
|
11664 class="enumerate-enumitem">Post decode: Deinterleave the single vector <span
|
Chris@1
|
11665 class="cmtt-12">[v] </span>returned by format 1 decode as
|
Chris@1
|
11666 described above into <span
|
Chris@1
|
11667 class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
|
Chris@1
|
11668 to:
|
Chris@1
|
11669 <div class="fancyvrb" id="fancyvrb43">
|
Chris@1
|
11670 <a
|
Chris@1
|
11671 id="x1-113005r1"></a><span
|
Chris@1
|
11672 class="cmr-6">1</span><span
|
Chris@1
|
11673 class="cmtt-8"> </span><span
|
Chris@1
|
11674 class="cmtt-8"> </span><span
|
Chris@1
|
11675 class="cmtt-8"> </span><span
|
Chris@1
|
11676 class="cmtt-8"> 1)</span><span
|
Chris@1
|
11677 class="cmtt-8"> iterate</span><span
|
Chris@1
|
11678 class="cmtt-8"> [i]</span><span
|
Chris@1
|
11679 class="cmtt-8"> over</span><span
|
Chris@1
|
11680 class="cmtt-8"> the</span><span
|
Chris@1
|
11681 class="cmtt-8"> range</span><span
|
Chris@1
|
11682 class="cmtt-8"> 0</span><span
|
Chris@1
|
11683 class="cmtt-8"> ...</span><span
|
Chris@1
|
11684 class="cmtt-8"> [n]-1</span><span
|
Chris@1
|
11685 class="cmtt-8"> {</span>
|
Chris@1
|
11686 <br class="fancyvrb" /><a
|
Chris@1
|
11687 id="x1-113007r2"></a><span
|
Chris@1
|
11688 class="cmr-6">2</span><span
|
Chris@1
|
11689 class="cmtt-8"> </span><span
|
Chris@1
|
11690 class="cmtt-8"> </span>
|
Chris@1
|
11691 <br class="fancyvrb" /><a
|
Chris@1
|
11692 id="x1-113009r3"></a><span
|
Chris@1
|
11693 class="cmr-6">3</span><span
|
Chris@1
|
11694 class="cmtt-8"> </span><span
|
Chris@1
|
11695 class="cmtt-8"> </span><span
|
Chris@1
|
11696 class="cmtt-8"> </span><span
|
Chris@1
|
11697 class="cmtt-8"> </span><span
|
Chris@1
|
11698 class="cmtt-8"> </span><span
|
Chris@1
|
11699 class="cmtt-8"> </span><span
|
Chris@1
|
11700 class="cmtt-8"> </span><span
|
Chris@1
|
11701 class="cmtt-8"> </span><span
|
Chris@1
|
11702 class="cmtt-8"> 2)</span><span
|
Chris@1
|
11703 class="cmtt-8"> iterate</span><span
|
Chris@1
|
11704 class="cmtt-8"> [j]</span><span
|
Chris@1
|
11705 class="cmtt-8"> over</span><span
|
Chris@1
|
11706 class="cmtt-8"> the</span><span
|
Chris@1
|
11707 class="cmtt-8"> range</span><span
|
Chris@1
|
11708 class="cmtt-8"> 0</span><span
|
Chris@1
|
11709 class="cmtt-8"> ...</span><span
|
Chris@1
|
11710 class="cmtt-8"> [ch]-1</span><span
|
Chris@1
|
11711 class="cmtt-8"> {</span>
|
Chris@1
|
11712 <br class="fancyvrb" /><a
|
Chris@1
|
11713 id="x1-113011r4"></a><span
|
Chris@1
|
11714 class="cmr-6">4</span><span
|
Chris@1
|
11715 class="cmtt-8"> </span><span
|
Chris@1
|
11716 class="cmtt-8"> </span>
|
Chris@1
|
11717 <br class="fancyvrb" /><a
|
Chris@1
|
11718 id="x1-113013r5"></a><span
|
Chris@1
|
11719 class="cmr-6">5</span><span
|
Chris@1
|
11720 class="cmtt-8"> </span><span
|
Chris@1
|
11721 class="cmtt-8"> </span><span
|
Chris@1
|
11722 class="cmtt-8"> </span><span
|
Chris@1
|
11723 class="cmtt-8"> </span><span
|
Chris@1
|
11724 class="cmtt-8"> </span><span
|
Chris@1
|
11725 class="cmtt-8"> </span><span
|
Chris@1
|
11726 class="cmtt-8"> </span><span
|
Chris@1
|
11727 class="cmtt-8"> </span><span
|
Chris@1
|
11728 class="cmtt-8"> </span><span
|
Chris@1
|
11729 class="cmtt-8"> </span><span
|
Chris@1
|
11730 class="cmtt-8"> </span><span
|
Chris@1
|
11731 class="cmtt-8"> </span><span
|
Chris@1
|
11732 class="cmtt-8"> </span><span
|
Chris@1
|
11733 class="cmtt-8"> 3)</span><span
|
Chris@1
|
11734 class="cmtt-8"> output</span><span
|
Chris@1
|
11735 class="cmtt-8"> vector</span><span
|
Chris@1
|
11736 class="cmtt-8"> number</span><span
|
Chris@1
|
11737 class="cmtt-8"> [j]</span><span
|
Chris@1
|
11738 class="cmtt-8"> element</span><span
|
Chris@1
|
11739 class="cmtt-8"> [i]</span><span
|
Chris@1
|
11740 class="cmtt-8"> =</span><span
|
Chris@1
|
11741 class="cmtt-8"> vector</span><span
|
Chris@1
|
11742 class="cmtt-8"> [v]</span><span
|
Chris@1
|
11743 class="cmtt-8"> element</span><span
|
Chris@1
|
11744 class="cmtt-8"> ([i]</span><span
|
Chris@1
|
11745 class="cmtt-8"> *</span><span
|
Chris@1
|
11746 class="cmtt-8"> [ch]</span><span
|
Chris@1
|
11747 class="cmtt-8"> +</span><span
|
Chris@1
|
11748 class="cmtt-8"> [j])</span>
|
Chris@1
|
11749 <br class="fancyvrb" /><a
|
Chris@1
|
11750 id="x1-113015r6"></a><span
|
Chris@1
|
11751 class="cmr-6">6</span><span
|
Chris@1
|
11752 class="cmtt-8"> </span><span
|
Chris@1
|
11753 class="cmtt-8"> </span>
|
Chris@1
|
11754 <br class="fancyvrb" /><a
|
Chris@1
|
11755 id="x1-113017r7"></a><span
|
Chris@1
|
11756 class="cmr-6">7</span><span
|
Chris@1
|
11757 class="cmtt-8"> </span><span
|
Chris@1
|
11758 class="cmtt-8"> </span><span
|
Chris@1
|
11759 class="cmtt-8"> </span><span
|
Chris@1
|
11760 class="cmtt-8"> </span><span
|
Chris@1
|
11761 class="cmtt-8"> </span><span
|
Chris@1
|
11762 class="cmtt-8"> </span><span
|
Chris@1
|
11763 class="cmtt-8"> </span><span
|
Chris@1
|
11764 class="cmtt-8"> </span><span
|
Chris@1
|
11765 class="cmtt-8"> </span><span
|
Chris@1
|
11766 class="cmtt-8"> </span><span
|
Chris@1
|
11767 class="cmtt-8"> </span><span
|
Chris@1
|
11768 class="cmtt-8"> }</span>
|
Chris@1
|
11769 <br class="fancyvrb" /><a
|
Chris@1
|
11770 id="x1-113019r8"></a><span
|
Chris@1
|
11771 class="cmr-6">8</span><span
|
Chris@1
|
11772 class="cmtt-8"> </span><span
|
Chris@1
|
11773 class="cmtt-8"> </span><span
|
Chris@1
|
11774 class="cmtt-8"> </span><span
|
Chris@1
|
11775 class="cmtt-8"> </span><span
|
Chris@1
|
11776 class="cmtt-8"> </span><span
|
Chris@1
|
11777 class="cmtt-8"> </span><span
|
Chris@1
|
11778 class="cmtt-8"> }</span>
|
Chris@1
|
11779 <br class="fancyvrb" /><a
|
Chris@1
|
11780 id="x1-113021r9"></a><span
|
Chris@1
|
11781 class="cmr-6">9</span><span
|
Chris@1
|
11782 class="cmtt-8"> </span><span
|
Chris@1
|
11783 class="cmtt-8"> </span>
|
Chris@1
|
11784 <br class="fancyvrb" /><a
|
Chris@1
|
11785 id="x1-113023r10"></a><span
|
Chris@1
|
11786 class="cmr-6">10</span><span
|
Chris@1
|
11787 class="cmtt-8"> </span><span
|
Chris@1
|
11788 class="cmtt-8"> </span><span
|
Chris@1
|
11789 class="cmtt-8"> </span><span
|
Chris@1
|
11790 class="cmtt-8"> 4)</span><span
|
Chris@1
|
11791 class="cmtt-8"> done</span>
|
Chris@1
|
11792 </div>
|
Chris@1
|
11793 </dd></dl>
|
Chris@1
|
11794
|
Chris@1
|
11795
|
Chris@1
|
11796
|
Chris@1
|
11797
|
Chris@1
|
11798
|
Chris@1
|
11799
|
Chris@1
|
11800 <h3 class="sectionHead"><span class="titlemark">9. </span> <a
|
Chris@1
|
11801 id="x1-1140009"></a>Helper equations</h3>
|
Chris@1
|
11802 <!--l. 6--><p class="noindent" >
|
Chris@1
|
11803 <h4 class="subsectionHead"><span class="titlemark">9.1. </span> <a
|
Chris@1
|
11804 id="x1-1150009.1"></a>Overview</h4>
|
Chris@1
|
11805 <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
|
Chris@1
|
11806 cluttering up the main specification documents, they are defined here and referenced where
|
Chris@1
|
11807 appropriate.
|
Chris@1
|
11808 <!--l. 13--><p class="noindent" >
|
Chris@1
|
11809 <h4 class="subsectionHead"><span class="titlemark">9.2. </span> <a
|
Chris@1
|
11810 id="x1-1160009.2"></a>Functions</h4>
|
Chris@1
|
11811 <!--l. 15--><p class="noindent" >
|
Chris@1
|
11812 <h5 class="subsubsectionHead"><span class="titlemark">9.2.1. </span> <a
|
Chris@1
|
11813 id="x1-1170009.2.1"></a>ilog</h5>
|
Chris@1
|
11814 <!--l. 17--><p class="noindent" >The ”ilog(x)” function returns the position number (1 through n) of the highest set bit in the
|
Chris@1
|
11815 two’s complement integer value <span
|
Chris@1
|
11816 class="cmtt-12">[x]</span>. Values of <span
|
Chris@1
|
11817 class="cmtt-12">[x] </span>less than zero are defined to return
|
Chris@1
|
11818 zero.
|
Chris@1
|
11819 <!--l. 20--><p class="noindent" >
|
Chris@1
|
11820 <div class="fancyvrb" id="fancyvrb44">
|
Chris@1
|
11821 <a
|
Chris@1
|
11822 id="x1-117002r1"></a><span
|
Chris@1
|
11823 class="cmr-6">1</span><span
|
Chris@1
|
11824 class="cmtt-8"> </span><span
|
Chris@1
|
11825 class="cmtt-8"> </span><span
|
Chris@1
|
11826 class="cmtt-8"> </span><span
|
Chris@1
|
11827 class="cmtt-8"> 1)</span><span
|
Chris@1
|
11828 class="cmtt-8"> [return\_value]</span><span
|
Chris@1
|
11829 class="cmtt-8"> =</span><span
|
Chris@1
|
11830 class="cmtt-8"> 0;</span>
|
Chris@1
|
11831 <br class="fancyvrb" /><a
|
Chris@1
|
11832 id="x1-117004r2"></a><span
|
Chris@1
|
11833 class="cmr-6">2</span><span
|
Chris@1
|
11834 class="cmtt-8"> </span><span
|
Chris@1
|
11835 class="cmtt-8"> </span><span
|
Chris@1
|
11836 class="cmtt-8"> </span><span
|
Chris@1
|
11837 class="cmtt-8"> 2)</span><span
|
Chris@1
|
11838 class="cmtt-8"> if</span><span
|
Chris@1
|
11839 class="cmtt-8"> (</span><span
|
Chris@1
|
11840 class="cmtt-8"> [x]</span><span
|
Chris@1
|
11841 class="cmtt-8"> is</span><span
|
Chris@1
|
11842 class="cmtt-8"> greater</span><span
|
Chris@1
|
11843 class="cmtt-8"> than</span><span
|
Chris@1
|
11844 class="cmtt-8"> zero</span><span
|
Chris@1
|
11845 class="cmtt-8"> )</span><span
|
Chris@1
|
11846 class="cmtt-8"> {</span>
|
Chris@1
|
11847 <br class="fancyvrb" /><a
|
Chris@1
|
11848 id="x1-117006r3"></a><span
|
Chris@1
|
11849 class="cmr-6">3</span><span
|
Chris@1
|
11850 class="cmtt-8"> </span><span
|
Chris@1
|
11851 class="cmtt-8"> </span>
|
Chris@1
|
11852 <br class="fancyvrb" /><a
|
Chris@1
|
11853 id="x1-117008r4"></a><span
|
Chris@1
|
11854 class="cmr-6">4</span><span
|
Chris@1
|
11855 class="cmtt-8"> </span><span
|
Chris@1
|
11856 class="cmtt-8"> </span><span
|
Chris@1
|
11857 class="cmtt-8"> </span><span
|
Chris@1
|
11858 class="cmtt-8"> </span><span
|
Chris@1
|
11859 class="cmtt-8"> </span><span
|
Chris@1
|
11860 class="cmtt-8"> </span><span
|
Chris@1
|
11861 class="cmtt-8"> </span><span
|
Chris@1
|
11862 class="cmtt-8"> </span><span
|
Chris@1
|
11863 class="cmtt-8"> 3)</span><span
|
Chris@1
|
11864 class="cmtt-8"> increment</span><span
|
Chris@1
|
11865 class="cmtt-8"> [return\_value];</span>
|
Chris@1
|
11866 <br class="fancyvrb" /><a
|
Chris@1
|
11867 id="x1-117010r5"></a><span
|
Chris@1
|
11868 class="cmr-6">5</span><span
|
Chris@1
|
11869 class="cmtt-8"> </span><span
|
Chris@1
|
11870 class="cmtt-8"> </span><span
|
Chris@1
|
11871 class="cmtt-8"> </span><span
|
Chris@1
|
11872 class="cmtt-8"> </span><span
|
Chris@1
|
11873 class="cmtt-8"> </span><span
|
Chris@1
|
11874 class="cmtt-8"> </span><span
|
Chris@1
|
11875 class="cmtt-8"> </span><span
|
Chris@1
|
11876 class="cmtt-8"> </span><span
|
Chris@1
|
11877 class="cmtt-8"> 4)</span><span
|
Chris@1
|
11878 class="cmtt-8"> logical</span><span
|
Chris@1
|
11879 class="cmtt-8"> shift</span><span
|
Chris@1
|
11880 class="cmtt-8"> [x]</span><span
|
Chris@1
|
11881 class="cmtt-8"> one</span><span
|
Chris@1
|
11882 class="cmtt-8"> bit</span><span
|
Chris@1
|
11883 class="cmtt-8"> to</span><span
|
Chris@1
|
11884 class="cmtt-8"> the</span><span
|
Chris@1
|
11885 class="cmtt-8"> right,</span><span
|
Chris@1
|
11886 class="cmtt-8"> padding</span><span
|
Chris@1
|
11887 class="cmtt-8"> the</span><span
|
Chris@1
|
11888 class="cmtt-8"> MSb</span><span
|
Chris@1
|
11889 class="cmtt-8"> with</span><span
|
Chris@1
|
11890 class="cmtt-8"> zero</span>
|
Chris@1
|
11891 <br class="fancyvrb" /><a
|
Chris@1
|
11892 id="x1-117012r6"></a><span
|
Chris@1
|
11893 class="cmr-6">6</span><span
|
Chris@1
|
11894 class="cmtt-8"> </span><span
|
Chris@1
|
11895 class="cmtt-8"> </span><span
|
Chris@1
|
11896 class="cmtt-8"> </span><span
|
Chris@1
|
11897 class="cmtt-8"> </span><span
|
Chris@1
|
11898 class="cmtt-8"> </span><span
|
Chris@1
|
11899 class="cmtt-8"> </span><span
|
Chris@1
|
11900 class="cmtt-8"> </span><span
|
Chris@1
|
11901 class="cmtt-8"> </span><span
|
Chris@1
|
11902 class="cmtt-8"> 5)</span><span
|
Chris@1
|
11903 class="cmtt-8"> repeat</span><span
|
Chris@1
|
11904 class="cmtt-8"> at</span><span
|
Chris@1
|
11905 class="cmtt-8"> step</span><span
|
Chris@1
|
11906 class="cmtt-8"> 2)</span>
|
Chris@1
|
11907 <br class="fancyvrb" /><a
|
Chris@1
|
11908 id="x1-117014r7"></a><span
|
Chris@1
|
11909 class="cmr-6">7</span><span
|
Chris@1
|
11910 class="cmtt-8"> </span><span
|
Chris@1
|
11911 class="cmtt-8"> </span>
|
Chris@1
|
11912 <br class="fancyvrb" /><a
|
Chris@1
|
11913 id="x1-117016r8"></a><span
|
Chris@1
|
11914 class="cmr-6">8</span><span
|
Chris@1
|
11915 class="cmtt-8"> </span><span
|
Chris@1
|
11916 class="cmtt-8"> </span><span
|
Chris@1
|
11917 class="cmtt-8"> </span><span
|
Chris@1
|
11918 class="cmtt-8"> </span><span
|
Chris@1
|
11919 class="cmtt-8"> </span><span
|
Chris@1
|
11920 class="cmtt-8"> </span><span
|
Chris@1
|
11921 class="cmtt-8"> }</span>
|
Chris@1
|
11922 <br class="fancyvrb" /><a
|
Chris@1
|
11923 id="x1-117018r9"></a><span
|
Chris@1
|
11924 class="cmr-6">9</span><span
|
Chris@1
|
11925 class="cmtt-8"> </span><span
|
Chris@1
|
11926 class="cmtt-8"> </span>
|
Chris@1
|
11927 <br class="fancyvrb" /><a
|
Chris@1
|
11928 id="x1-117020r10"></a><span
|
Chris@1
|
11929 class="cmr-6">10</span><span
|
Chris@1
|
11930 class="cmtt-8"> </span><span
|
Chris@1
|
11931 class="cmtt-8"> </span><span
|
Chris@1
|
11932 class="cmtt-8"> </span><span
|
Chris@1
|
11933 class="cmtt-8"> </span><span
|
Chris@1
|
11934 class="cmtt-8"> 6)</span><span
|
Chris@1
|
11935 class="cmtt-8"> done</span>
|
Chris@1
|
11936 </div>
|
Chris@1
|
11937
|
Chris@1
|
11938
|
Chris@1
|
11939
|
Chris@1
|
11940 <!--l. 33--><p class="noindent" >Examples:
|
Chris@1
|
11941 <ul class="itemize1">
|
Chris@1
|
11942 <li class="itemize">ilog(0) = 0;
|
Chris@1
|
11943 </li>
|
Chris@1
|
11944 <li class="itemize">ilog(1) = 1;
|
Chris@1
|
11945 </li>
|
Chris@1
|
11946 <li class="itemize">ilog(2) = 2;
|
Chris@1
|
11947 </li>
|
Chris@1
|
11948 <li class="itemize">ilog(3) = 2;
|
Chris@1
|
11949 </li>
|
Chris@1
|
11950 <li class="itemize">ilog(4) = 3;
|
Chris@1
|
11951 </li>
|
Chris@1
|
11952 <li class="itemize">ilog(7) = 3;
|
Chris@1
|
11953 </li>
|
Chris@1
|
11954 <li class="itemize">ilog(negative number) = 0;</li></ul>
|
Chris@1
|
11955 <!--l. 48--><p class="noindent" >
|
Chris@1
|
11956 <h5 class="subsubsectionHead"><span class="titlemark">9.2.2. </span> <a
|
Chris@1
|
11957 id="x1-1180009.2.2"></a>float32_unpack</h5>
|
Chris@1
|
11958 <!--l. 50--><p class="noindent" >”float32_unpack(x)” is intended to translate the packed binary representation of a Vorbis
|
Chris@1
|
11959 codebook float value into the representation used by the decoder for floating point numbers. For
|
Chris@1
|
11960 purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
|
Chris@1
|
11961 number.
|
Chris@1
|
11962 <!--l. 56--><p class="noindent" >
|
Chris@1
|
11963 <div class="fancyvrb" id="fancyvrb45">
|
Chris@1
|
11964 <a
|
Chris@1
|
11965 id="x1-118002r1"></a><span
|
Chris@1
|
11966 class="cmr-6">1</span><span
|
Chris@1
|
11967 class="cmtt-8"> </span><span
|
Chris@1
|
11968 class="cmtt-8"> </span><span
|
Chris@1
|
11969 class="cmtt-8"> </span><span
|
Chris@1
|
11970 class="cmtt-8"> 1)</span><span
|
Chris@1
|
11971 class="cmtt-8"> [mantissa]</span><span
|
Chris@1
|
11972 class="cmtt-8"> =</span><span
|
Chris@1
|
11973 class="cmtt-8"> [x]</span><span
|
Chris@1
|
11974 class="cmtt-8"> bitwise</span><span
|
Chris@1
|
11975 class="cmtt-8"> AND</span><span
|
Chris@1
|
11976 class="cmtt-8"> 0x1fffff</span><span
|
Chris@1
|
11977 class="cmtt-8"> (unsigned</span><span
|
Chris@1
|
11978 class="cmtt-8"> result)</span>
|
Chris@1
|
11979 <br class="fancyvrb" /><a
|
Chris@1
|
11980 id="x1-118004r2"></a><span
|
Chris@1
|
11981 class="cmr-6">2</span><span
|
Chris@1
|
11982 class="cmtt-8"> </span><span
|
Chris@1
|
11983 class="cmtt-8"> </span><span
|
Chris@1
|
11984 class="cmtt-8"> </span><span
|
Chris@1
|
11985 class="cmtt-8"> 2)</span><span
|
Chris@1
|
11986 class="cmtt-8"> [sign]</span><span
|
Chris@1
|
11987 class="cmtt-8"> =</span><span
|
Chris@1
|
11988 class="cmtt-8"> [x]</span><span
|
Chris@1
|
11989 class="cmtt-8"> bitwise</span><span
|
Chris@1
|
11990 class="cmtt-8"> AND</span><span
|
Chris@1
|
11991 class="cmtt-8"> 0x80000000</span><span
|
Chris@1
|
11992 class="cmtt-8"> (unsigned</span><span
|
Chris@1
|
11993 class="cmtt-8"> result)</span>
|
Chris@1
|
11994 <br class="fancyvrb" /><a
|
Chris@1
|
11995 id="x1-118006r3"></a><span
|
Chris@1
|
11996 class="cmr-6">3</span><span
|
Chris@1
|
11997 class="cmtt-8"> </span><span
|
Chris@1
|
11998 class="cmtt-8"> </span><span
|
Chris@1
|
11999 class="cmtt-8"> </span><span
|
Chris@1
|
12000 class="cmtt-8"> 3)</span><span
|
Chris@1
|
12001 class="cmtt-8"> [exponent]</span><span
|
Chris@1
|
12002 class="cmtt-8"> =</span><span
|
Chris@1
|
12003 class="cmtt-8"> (</span><span
|
Chris@1
|
12004 class="cmtt-8"> [x]</span><span
|
Chris@1
|
12005 class="cmtt-8"> bitwise</span><span
|
Chris@1
|
12006 class="cmtt-8"> AND</span><span
|
Chris@1
|
12007 class="cmtt-8"> 0x7fe00000)</span><span
|
Chris@1
|
12008 class="cmtt-8"> shifted</span><span
|
Chris@1
|
12009 class="cmtt-8"> right</span><span
|
Chris@1
|
12010 class="cmtt-8"> 21</span><span
|
Chris@1
|
12011 class="cmtt-8"> bits</span><span
|
Chris@1
|
12012 class="cmtt-8"> (unsigned</span><span
|
Chris@1
|
12013 class="cmtt-8"> result)</span>
|
Chris@1
|
12014 <br class="fancyvrb" /><a
|
Chris@1
|
12015 id="x1-118008r4"></a><span
|
Chris@1
|
12016 class="cmr-6">4</span><span
|
Chris@1
|
12017 class="cmtt-8"> </span><span
|
Chris@1
|
12018 class="cmtt-8"> </span><span
|
Chris@1
|
12019 class="cmtt-8"> </span><span
|
Chris@1
|
12020 class="cmtt-8"> 4)</span><span
|
Chris@1
|
12021 class="cmtt-8"> if</span><span
|
Chris@1
|
12022 class="cmtt-8"> (</span><span
|
Chris@1
|
12023 class="cmtt-8"> [sign]</span><span
|
Chris@1
|
12024 class="cmtt-8"> is</span><span
|
Chris@1
|
12025 class="cmtt-8"> nonzero</span><span
|
Chris@1
|
12026 class="cmtt-8"> )</span><span
|
Chris@1
|
12027 class="cmtt-8"> then</span><span
|
Chris@1
|
12028 class="cmtt-8"> negate</span><span
|
Chris@1
|
12029 class="cmtt-8"> [mantissa]</span>
|
Chris@1
|
12030 <br class="fancyvrb" /><a
|
Chris@1
|
12031 id="x1-118010r5"></a><span
|
Chris@1
|
12032 class="cmr-6">5</span><span
|
Chris@1
|
12033 class="cmtt-8"> </span><span
|
Chris@1
|
12034 class="cmtt-8"> </span><span
|
Chris@1
|
12035 class="cmtt-8"> </span><span
|
Chris@1
|
12036 class="cmtt-8"> 5)</span><span
|
Chris@1
|
12037 class="cmtt-8"> return</span><span
|
Chris@1
|
12038 class="cmtt-8"> [mantissa]</span><span
|
Chris@1
|
12039 class="cmtt-8"> *</span><span
|
Chris@1
|
12040 class="cmtt-8"> (</span><span
|
Chris@1
|
12041 class="cmtt-8"> 2</span><span
|
Chris@1
|
12042 class="cmtt-8"> ^</span><span
|
Chris@1
|
12043 class="cmtt-8"> (</span><span
|
Chris@1
|
12044 class="cmtt-8"> [exponent]</span><span
|
Chris@1
|
12045 class="cmtt-8"> -</span><span
|
Chris@1
|
12046 class="cmtt-8"> 788</span><span
|
Chris@1
|
12047 class="cmtt-8"> )</span><span
|
Chris@1
|
12048 class="cmtt-8"> )</span>
|
Chris@1
|
12049 </div>
|
Chris@1
|
12050
|
Chris@1
|
12051
|
Chris@1
|
12052
|
Chris@1
|
12053 <!--l. 66--><p class="noindent" >
|
Chris@1
|
12054 <h5 class="subsubsectionHead"><span class="titlemark">9.2.3. </span> <a
|
Chris@1
|
12055 id="x1-1190009.2.3"></a>lookup1_values</h5>
|
Chris@1
|
12056 <!--l. 68--><p class="noindent" >”lookup1_values(codebook_entries,codebook_dimensions)” is used to compute the
|
Chris@1
|
12057 correct length of the value index for a codebook VQ lookup table of lookup type 1.
|
Chris@1
|
12058 The values on this list are permuted to construct the VQ vector lookup table of size
|
Chris@1
|
12059 <span
|
Chris@1
|
12060 class="cmtt-12">[codebook_entries]</span>.
|
Chris@1
|
12061 <!--l. 74--><p class="noindent" >The return value for this function is defined to be ’the greatest integer value for which
|
Chris@1
|
12062 <span
|
Chris@1
|
12063 class="cmtt-12">[return_value] </span>to the power of <span
|
Chris@1
|
12064 class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
|
Chris@1
|
12065 <span
|
Chris@1
|
12066 class="cmtt-12">[codebook_entries]</span>’.
|
Chris@1
|
12067 <!--l. 81--><p class="noindent" >
|
Chris@1
|
12068 <h5 class="subsubsectionHead"><span class="titlemark">9.2.4. </span> <a
|
Chris@1
|
12069 id="x1-1200009.2.4"></a>low_neighbor</h5>
|
Chris@1
|
12070 <!--l. 83--><p class="noindent" >”low_neighbor(v,x)” finds the position <span
|
Chris@1
|
12071 class="cmtt-12">n </span>in vector <span
|
Chris@1
|
12072 class="cmtt-12">[v] </span>of the greatest value scalar element for
|
Chris@1
|
12073 which <span
|
Chris@1
|
12074 class="cmtt-12">n </span>is less than <span
|
Chris@1
|
12075 class="cmtt-12">[x] </span>and vector <span
|
Chris@1
|
12076 class="cmtt-12">[v] </span>element <span
|
Chris@1
|
12077 class="cmtt-12">n </span>is less than vector <span
|
Chris@1
|
12078 class="cmtt-12">[v] </span>element
|
Chris@1
|
12079 <span
|
Chris@1
|
12080 class="cmtt-12">[x]</span>.
|
Chris@1
|
12081 <!--l. 88--><p class="noindent" >
|
Chris@1
|
12082 <h5 class="subsubsectionHead"><span class="titlemark">9.2.5. </span> <a
|
Chris@1
|
12083 id="x1-1210009.2.5"></a>high_neighbor</h5>
|
Chris@1
|
12084 <!--l. 90--><p class="noindent" >”high_neighbor(v,x)” finds the position <span
|
Chris@1
|
12085 class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
|
Chris@1
|
12086 which <span
|
Chris@1
|
12087 class="cmtt-12">n </span>is less than <span
|
Chris@1
|
12088 class="cmtt-12">[x] </span>and vector <span
|
Chris@1
|
12089 class="cmtt-12">[v] </span>element <span
|
Chris@1
|
12090 class="cmtt-12">n </span>is greater than vector <span
|
Chris@1
|
12091 class="cmtt-12">[v] </span>element
|
Chris@1
|
12092 <span
|
Chris@1
|
12093 class="cmtt-12">[x]</span>.
|
Chris@1
|
12094 <!--l. 97--><p class="noindent" >
|
Chris@1
|
12095 <h5 class="subsubsectionHead"><span class="titlemark">9.2.6. </span> <a
|
Chris@1
|
12096 id="x1-1220009.2.6"></a>render_point</h5>
|
Chris@1
|
12097 <!--l. 99--><p class="noindent" >”render_point(x0,y0,x1,y1,X)” is used to find the Y value at point X along the line specified by
|
Chris@1
|
12098 x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
|
Chris@1
|
12099 calculating intervening values along the line.
|
Chris@1
|
12100
|
Chris@1
|
12101
|
Chris@1
|
12102
|
Chris@1
|
12103 <!--l. 104--><p class="noindent" >
|
Chris@1
|
12104 <div class="fancyvrb" id="fancyvrb46">
|
Chris@1
|
12105 <a
|
Chris@1
|
12106 id="x1-122002r1"></a><span
|
Chris@1
|
12107 class="cmr-6">1</span><span
|
Chris@1
|
12108 class="cmtt-8"> </span><span
|
Chris@1
|
12109 class="cmtt-8"> </span><span
|
Chris@1
|
12110 class="cmtt-8"> </span><span
|
Chris@1
|
12111 class="cmtt-8"> 1)</span><span
|
Chris@1
|
12112 class="cmtt-8"> </span><span
|
Chris@1
|
12113 class="cmtt-8"> [dy]</span><span
|
Chris@1
|
12114 class="cmtt-8"> =</span><span
|
Chris@1
|
12115 class="cmtt-8"> [y1]</span><span
|
Chris@1
|
12116 class="cmtt-8"> -</span><span
|
Chris@1
|
12117 class="cmtt-8"> [y0]</span>
|
Chris@1
|
12118 <br class="fancyvrb" /><a
|
Chris@1
|
12119 id="x1-122004r2"></a><span
|
Chris@1
|
12120 class="cmr-6">2</span><span
|
Chris@1
|
12121 class="cmtt-8"> </span><span
|
Chris@1
|
12122 class="cmtt-8"> </span><span
|
Chris@1
|
12123 class="cmtt-8"> </span><span
|
Chris@1
|
12124 class="cmtt-8"> 2)</span><span
|
Chris@1
|
12125 class="cmtt-8"> [adx]</span><span
|
Chris@1
|
12126 class="cmtt-8"> =</span><span
|
Chris@1
|
12127 class="cmtt-8"> [x1]</span><span
|
Chris@1
|
12128 class="cmtt-8"> -</span><span
|
Chris@1
|
12129 class="cmtt-8"> [x0]</span>
|
Chris@1
|
12130 <br class="fancyvrb" /><a
|
Chris@1
|
12131 id="x1-122006r3"></a><span
|
Chris@1
|
12132 class="cmr-6">3</span><span
|
Chris@1
|
12133 class="cmtt-8"> </span><span
|
Chris@1
|
12134 class="cmtt-8"> </span><span
|
Chris@1
|
12135 class="cmtt-8"> </span><span
|
Chris@1
|
12136 class="cmtt-8"> 3)</span><span
|
Chris@1
|
12137 class="cmtt-8"> [ady]</span><span
|
Chris@1
|
12138 class="cmtt-8"> =</span><span
|
Chris@1
|
12139 class="cmtt-8"> absolute</span><span
|
Chris@1
|
12140 class="cmtt-8"> value</span><span
|
Chris@1
|
12141 class="cmtt-8"> of</span><span
|
Chris@1
|
12142 class="cmtt-8"> [dy]</span>
|
Chris@1
|
12143 <br class="fancyvrb" /><a
|
Chris@1
|
12144 id="x1-122008r4"></a><span
|
Chris@1
|
12145 class="cmr-6">4</span><span
|
Chris@1
|
12146 class="cmtt-8"> </span><span
|
Chris@1
|
12147 class="cmtt-8"> </span><span
|
Chris@1
|
12148 class="cmtt-8"> </span><span
|
Chris@1
|
12149 class="cmtt-8"> 4)</span><span
|
Chris@1
|
12150 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12151 class="cmtt-8"> =</span><span
|
Chris@1
|
12152 class="cmtt-8"> [ady]</span><span
|
Chris@1
|
12153 class="cmtt-8"> *</span><span
|
Chris@1
|
12154 class="cmtt-8"> ([X]</span><span
|
Chris@1
|
12155 class="cmtt-8"> -</span><span
|
Chris@1
|
12156 class="cmtt-8"> [x0])</span>
|
Chris@1
|
12157 <br class="fancyvrb" /><a
|
Chris@1
|
12158 id="x1-122010r5"></a><span
|
Chris@1
|
12159 class="cmr-6">5</span><span
|
Chris@1
|
12160 class="cmtt-8"> </span><span
|
Chris@1
|
12161 class="cmtt-8"> </span><span
|
Chris@1
|
12162 class="cmtt-8"> </span><span
|
Chris@1
|
12163 class="cmtt-8"> 5)</span><span
|
Chris@1
|
12164 class="cmtt-8"> [off]</span><span
|
Chris@1
|
12165 class="cmtt-8"> =</span><span
|
Chris@1
|
12166 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12167 class="cmtt-8"> /</span><span
|
Chris@1
|
12168 class="cmtt-8"> [adx]</span><span
|
Chris@1
|
12169 class="cmtt-8"> using</span><span
|
Chris@1
|
12170 class="cmtt-8"> integer</span><span
|
Chris@1
|
12171 class="cmtt-8"> division</span>
|
Chris@1
|
12172 <br class="fancyvrb" /><a
|
Chris@1
|
12173 id="x1-122012r6"></a><span
|
Chris@1
|
12174 class="cmr-6">6</span><span
|
Chris@1
|
12175 class="cmtt-8"> </span><span
|
Chris@1
|
12176 class="cmtt-8"> </span><span
|
Chris@1
|
12177 class="cmtt-8"> </span><span
|
Chris@1
|
12178 class="cmtt-8"> 6)</span><span
|
Chris@1
|
12179 class="cmtt-8"> if</span><span
|
Chris@1
|
12180 class="cmtt-8"> (</span><span
|
Chris@1
|
12181 class="cmtt-8"> [dy]</span><span
|
Chris@1
|
12182 class="cmtt-8"> is</span><span
|
Chris@1
|
12183 class="cmtt-8"> less</span><span
|
Chris@1
|
12184 class="cmtt-8"> than</span><span
|
Chris@1
|
12185 class="cmtt-8"> zero</span><span
|
Chris@1
|
12186 class="cmtt-8"> )</span><span
|
Chris@1
|
12187 class="cmtt-8"> {</span>
|
Chris@1
|
12188 <br class="fancyvrb" /><a
|
Chris@1
|
12189 id="x1-122014r7"></a><span
|
Chris@1
|
12190 class="cmr-6">7</span><span
|
Chris@1
|
12191 class="cmtt-8"> </span><span
|
Chris@1
|
12192 class="cmtt-8"> </span>
|
Chris@1
|
12193 <br class="fancyvrb" /><a
|
Chris@1
|
12194 id="x1-122016r8"></a><span
|
Chris@1
|
12195 class="cmr-6">8</span><span
|
Chris@1
|
12196 class="cmtt-8"> </span><span
|
Chris@1
|
12197 class="cmtt-8"> </span><span
|
Chris@1
|
12198 class="cmtt-8"> </span><span
|
Chris@1
|
12199 class="cmtt-8"> </span><span
|
Chris@1
|
12200 class="cmtt-8"> </span><span
|
Chris@1
|
12201 class="cmtt-8"> </span><span
|
Chris@1
|
12202 class="cmtt-8"> </span><span
|
Chris@1
|
12203 class="cmtt-8"> </span><span
|
Chris@1
|
12204 class="cmtt-8"> 7)</span><span
|
Chris@1
|
12205 class="cmtt-8"> [Y]</span><span
|
Chris@1
|
12206 class="cmtt-8"> =</span><span
|
Chris@1
|
12207 class="cmtt-8"> [y0]</span><span
|
Chris@1
|
12208 class="cmtt-8"> -</span><span
|
Chris@1
|
12209 class="cmtt-8"> [off]</span>
|
Chris@1
|
12210 <br class="fancyvrb" /><a
|
Chris@1
|
12211 id="x1-122018r9"></a><span
|
Chris@1
|
12212 class="cmr-6">9</span><span
|
Chris@1
|
12213 class="cmtt-8"> </span><span
|
Chris@1
|
12214 class="cmtt-8"> </span>
|
Chris@1
|
12215 <br class="fancyvrb" /><a
|
Chris@1
|
12216 id="x1-122020r10"></a><span
|
Chris@1
|
12217 class="cmr-6">10</span><span
|
Chris@1
|
12218 class="cmtt-8"> </span><span
|
Chris@1
|
12219 class="cmtt-8"> </span><span
|
Chris@1
|
12220 class="cmtt-8"> </span><span
|
Chris@1
|
12221 class="cmtt-8"> </span><span
|
Chris@1
|
12222 class="cmtt-8"> </span><span
|
Chris@1
|
12223 class="cmtt-8"> </span><span
|
Chris@1
|
12224 class="cmtt-8"> }</span><span
|
Chris@1
|
12225 class="cmtt-8"> else</span><span
|
Chris@1
|
12226 class="cmtt-8"> {</span>
|
Chris@1
|
12227 <br class="fancyvrb" /><a
|
Chris@1
|
12228 id="x1-122022r11"></a><span
|
Chris@1
|
12229 class="cmr-6">11</span><span
|
Chris@1
|
12230 class="cmtt-8"> </span><span
|
Chris@1
|
12231 class="cmtt-8"> </span>
|
Chris@1
|
12232 <br class="fancyvrb" /><a
|
Chris@1
|
12233 id="x1-122024r12"></a><span
|
Chris@1
|
12234 class="cmr-6">12</span><span
|
Chris@1
|
12235 class="cmtt-8"> </span><span
|
Chris@1
|
12236 class="cmtt-8"> </span><span
|
Chris@1
|
12237 class="cmtt-8"> </span><span
|
Chris@1
|
12238 class="cmtt-8"> </span><span
|
Chris@1
|
12239 class="cmtt-8"> </span><span
|
Chris@1
|
12240 class="cmtt-8"> </span><span
|
Chris@1
|
12241 class="cmtt-8"> </span><span
|
Chris@1
|
12242 class="cmtt-8"> </span><span
|
Chris@1
|
12243 class="cmtt-8"> 8)</span><span
|
Chris@1
|
12244 class="cmtt-8"> [Y]</span><span
|
Chris@1
|
12245 class="cmtt-8"> =</span><span
|
Chris@1
|
12246 class="cmtt-8"> [y0]</span><span
|
Chris@1
|
12247 class="cmtt-8"> +</span><span
|
Chris@1
|
12248 class="cmtt-8"> [off]</span>
|
Chris@1
|
12249 <br class="fancyvrb" /><a
|
Chris@1
|
12250 id="x1-122026r13"></a><span
|
Chris@1
|
12251 class="cmr-6">13</span><span
|
Chris@1
|
12252 class="cmtt-8"> </span><span
|
Chris@1
|
12253 class="cmtt-8"> </span>
|
Chris@1
|
12254 <br class="fancyvrb" /><a
|
Chris@1
|
12255 id="x1-122028r14"></a><span
|
Chris@1
|
12256 class="cmr-6">14</span><span
|
Chris@1
|
12257 class="cmtt-8"> </span><span
|
Chris@1
|
12258 class="cmtt-8"> </span><span
|
Chris@1
|
12259 class="cmtt-8"> </span><span
|
Chris@1
|
12260 class="cmtt-8"> </span><span
|
Chris@1
|
12261 class="cmtt-8"> </span><span
|
Chris@1
|
12262 class="cmtt-8"> </span><span
|
Chris@1
|
12263 class="cmtt-8"> }</span>
|
Chris@1
|
12264 <br class="fancyvrb" /><a
|
Chris@1
|
12265 id="x1-122030r15"></a><span
|
Chris@1
|
12266 class="cmr-6">15</span><span
|
Chris@1
|
12267 class="cmtt-8"> </span><span
|
Chris@1
|
12268 class="cmtt-8"> </span>
|
Chris@1
|
12269 <br class="fancyvrb" /><a
|
Chris@1
|
12270 id="x1-122032r16"></a><span
|
Chris@1
|
12271 class="cmr-6">16</span><span
|
Chris@1
|
12272 class="cmtt-8"> </span><span
|
Chris@1
|
12273 class="cmtt-8"> </span><span
|
Chris@1
|
12274 class="cmtt-8"> </span><span
|
Chris@1
|
12275 class="cmtt-8"> 9)</span><span
|
Chris@1
|
12276 class="cmtt-8"> done</span>
|
Chris@1
|
12277 </div>
|
Chris@1
|
12278 <!--l. 125--><p class="noindent" >
|
Chris@1
|
12279 <h5 class="subsubsectionHead"><span class="titlemark">9.2.7. </span> <a
|
Chris@1
|
12280 id="x1-1230009.2.7"></a>render_line</h5>
|
Chris@1
|
12281 <!--l. 127--><p class="noindent" >Floor decode type one uses the integer line drawing algorithm of ”render_line(x0, y0, x1, y1, v)”
|
Chris@1
|
12282 to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
|
Chris@1
|
12283 been relevant elsewhere, but here we must define integer division as rounding division of both
|
Chris@1
|
12284 positive and negative numbers toward zero.
|
Chris@1
|
12285 <!--l. 134--><p class="noindent" >
|
Chris@1
|
12286 <div class="fancyvrb" id="fancyvrb47">
|
Chris@1
|
12287 <a
|
Chris@1
|
12288 id="x1-123002r1"></a><span
|
Chris@1
|
12289 class="cmr-6">1</span><span
|
Chris@1
|
12290 class="cmtt-8"> </span><span
|
Chris@1
|
12291 class="cmtt-8"> </span><span
|
Chris@1
|
12292 class="cmtt-8"> </span><span
|
Chris@1
|
12293 class="cmtt-8"> 1)</span><span
|
Chris@1
|
12294 class="cmtt-8"> </span><span
|
Chris@1
|
12295 class="cmtt-8"> </span><span
|
Chris@1
|
12296 class="cmtt-8"> [dy]</span><span
|
Chris@1
|
12297 class="cmtt-8"> =</span><span
|
Chris@1
|
12298 class="cmtt-8"> [y1]</span><span
|
Chris@1
|
12299 class="cmtt-8"> -</span><span
|
Chris@1
|
12300 class="cmtt-8"> [y0]</span>
|
Chris@1
|
12301 <br class="fancyvrb" /><a
|
Chris@1
|
12302 id="x1-123004r2"></a><span
|
Chris@1
|
12303 class="cmr-6">2</span><span
|
Chris@1
|
12304 class="cmtt-8"> </span><span
|
Chris@1
|
12305 class="cmtt-8"> </span><span
|
Chris@1
|
12306 class="cmtt-8"> </span><span
|
Chris@1
|
12307 class="cmtt-8"> 2)</span><span
|
Chris@1
|
12308 class="cmtt-8"> </span><span
|
Chris@1
|
12309 class="cmtt-8"> [adx]</span><span
|
Chris@1
|
12310 class="cmtt-8"> =</span><span
|
Chris@1
|
12311 class="cmtt-8"> [x1]</span><span
|
Chris@1
|
12312 class="cmtt-8"> -</span><span
|
Chris@1
|
12313 class="cmtt-8"> [x0]</span>
|
Chris@1
|
12314 <br class="fancyvrb" /><a
|
Chris@1
|
12315 id="x1-123006r3"></a><span
|
Chris@1
|
12316 class="cmr-6">3</span><span
|
Chris@1
|
12317 class="cmtt-8"> </span><span
|
Chris@1
|
12318 class="cmtt-8"> </span><span
|
Chris@1
|
12319 class="cmtt-8"> </span><span
|
Chris@1
|
12320 class="cmtt-8"> 3)</span><span
|
Chris@1
|
12321 class="cmtt-8"> </span><span
|
Chris@1
|
12322 class="cmtt-8"> [ady]</span><span
|
Chris@1
|
12323 class="cmtt-8"> =</span><span
|
Chris@1
|
12324 class="cmtt-8"> absolute</span><span
|
Chris@1
|
12325 class="cmtt-8"> value</span><span
|
Chris@1
|
12326 class="cmtt-8"> of</span><span
|
Chris@1
|
12327 class="cmtt-8"> [dy]</span>
|
Chris@1
|
12328 <br class="fancyvrb" /><a
|
Chris@1
|
12329 id="x1-123008r4"></a><span
|
Chris@1
|
12330 class="cmr-6">4</span><span
|
Chris@1
|
12331 class="cmtt-8"> </span><span
|
Chris@1
|
12332 class="cmtt-8"> </span><span
|
Chris@1
|
12333 class="cmtt-8"> </span><span
|
Chris@1
|
12334 class="cmtt-8"> 4)</span><span
|
Chris@1
|
12335 class="cmtt-8"> [base]</span><span
|
Chris@1
|
12336 class="cmtt-8"> =</span><span
|
Chris@1
|
12337 class="cmtt-8"> [dy]</span><span
|
Chris@1
|
12338 class="cmtt-8"> /</span><span
|
Chris@1
|
12339 class="cmtt-8"> [adx]</span><span
|
Chris@1
|
12340 class="cmtt-8"> using</span><span
|
Chris@1
|
12341 class="cmtt-8"> integer</span><span
|
Chris@1
|
12342 class="cmtt-8"> division</span>
|
Chris@1
|
12343 <br class="fancyvrb" /><a
|
Chris@1
|
12344 id="x1-123010r5"></a><span
|
Chris@1
|
12345 class="cmr-6">5</span><span
|
Chris@1
|
12346 class="cmtt-8"> </span><span
|
Chris@1
|
12347 class="cmtt-8"> </span><span
|
Chris@1
|
12348 class="cmtt-8"> </span><span
|
Chris@1
|
12349 class="cmtt-8"> 5)</span><span
|
Chris@1
|
12350 class="cmtt-8"> </span><span
|
Chris@1
|
12351 class="cmtt-8"> </span><span
|
Chris@1
|
12352 class="cmtt-8"> </span><span
|
Chris@1
|
12353 class="cmtt-8"> [x]</span><span
|
Chris@1
|
12354 class="cmtt-8"> =</span><span
|
Chris@1
|
12355 class="cmtt-8"> [x0]</span>
|
Chris@1
|
12356 <br class="fancyvrb" /><a
|
Chris@1
|
12357 id="x1-123012r6"></a><span
|
Chris@1
|
12358 class="cmr-6">6</span><span
|
Chris@1
|
12359 class="cmtt-8"> </span><span
|
Chris@1
|
12360 class="cmtt-8"> </span><span
|
Chris@1
|
12361 class="cmtt-8"> </span><span
|
Chris@1
|
12362 class="cmtt-8"> 6)</span><span
|
Chris@1
|
12363 class="cmtt-8"> </span><span
|
Chris@1
|
12364 class="cmtt-8"> </span><span
|
Chris@1
|
12365 class="cmtt-8"> </span><span
|
Chris@1
|
12366 class="cmtt-8"> [y]</span><span
|
Chris@1
|
12367 class="cmtt-8"> =</span><span
|
Chris@1
|
12368 class="cmtt-8"> [y0]</span>
|
Chris@1
|
12369 <br class="fancyvrb" /><a
|
Chris@1
|
12370 id="x1-123014r7"></a><span
|
Chris@1
|
12371 class="cmr-6">7</span><span
|
Chris@1
|
12372 class="cmtt-8"> </span><span
|
Chris@1
|
12373 class="cmtt-8"> </span><span
|
Chris@1
|
12374 class="cmtt-8"> </span><span
|
Chris@1
|
12375 class="cmtt-8"> 7)</span><span
|
Chris@1
|
12376 class="cmtt-8"> </span><span
|
Chris@1
|
12377 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12378 class="cmtt-8"> =</span><span
|
Chris@1
|
12379 class="cmtt-8"> 0</span>
|
Chris@1
|
12380 <br class="fancyvrb" /><a
|
Chris@1
|
12381 id="x1-123016r8"></a><span
|
Chris@1
|
12382 class="cmr-6">8</span><span
|
Chris@1
|
12383 class="cmtt-8"> </span><span
|
Chris@1
|
12384 class="cmtt-8"> </span>
|
Chris@1
|
12385 <br class="fancyvrb" /><a
|
Chris@1
|
12386 id="x1-123018r9"></a><span
|
Chris@1
|
12387 class="cmr-6">9</span><span
|
Chris@1
|
12388 class="cmtt-8"> </span><span
|
Chris@1
|
12389 class="cmtt-8"> </span><span
|
Chris@1
|
12390 class="cmtt-8"> </span><span
|
Chris@1
|
12391 class="cmtt-8"> 8)</span><span
|
Chris@1
|
12392 class="cmtt-8"> if</span><span
|
Chris@1
|
12393 class="cmtt-8"> (</span><span
|
Chris@1
|
12394 class="cmtt-8"> [dy]</span><span
|
Chris@1
|
12395 class="cmtt-8"> is</span><span
|
Chris@1
|
12396 class="cmtt-8"> less</span><span
|
Chris@1
|
12397 class="cmtt-8"> than</span><span
|
Chris@1
|
12398 class="cmtt-8"> 0</span><span
|
Chris@1
|
12399 class="cmtt-8"> )</span><span
|
Chris@1
|
12400 class="cmtt-8"> {</span>
|
Chris@1
|
12401 <br class="fancyvrb" /><a
|
Chris@1
|
12402 id="x1-123020r10"></a><span
|
Chris@1
|
12403 class="cmr-6">10</span><span
|
Chris@1
|
12404 class="cmtt-8"> </span><span
|
Chris@1
|
12405 class="cmtt-8"> </span>
|
Chris@1
|
12406 <br class="fancyvrb" /><a
|
Chris@1
|
12407 id="x1-123022r11"></a><span
|
Chris@1
|
12408 class="cmr-6">11</span><span
|
Chris@1
|
12409 class="cmtt-8"> </span><span
|
Chris@1
|
12410 class="cmtt-8"> </span><span
|
Chris@1
|
12411 class="cmtt-8"> </span><span
|
Chris@1
|
12412 class="cmtt-8"> </span><span
|
Chris@1
|
12413 class="cmtt-8"> </span><span
|
Chris@1
|
12414 class="cmtt-8"> </span><span
|
Chris@1
|
12415 class="cmtt-8"> </span><span
|
Chris@1
|
12416 class="cmtt-8"> </span><span
|
Chris@1
|
12417 class="cmtt-8"> </span><span
|
Chris@1
|
12418 class="cmtt-8"> 9)</span><span
|
Chris@1
|
12419 class="cmtt-8"> [sy]</span><span
|
Chris@1
|
12420 class="cmtt-8"> =</span><span
|
Chris@1
|
12421 class="cmtt-8"> [base]</span><span
|
Chris@1
|
12422 class="cmtt-8"> -</span><span
|
Chris@1
|
12423 class="cmtt-8"> 1</span>
|
Chris@1
|
12424 <br class="fancyvrb" /><a
|
Chris@1
|
12425 id="x1-123024r12"></a><span
|
Chris@1
|
12426 class="cmr-6">12</span><span
|
Chris@1
|
12427 class="cmtt-8"> </span><span
|
Chris@1
|
12428 class="cmtt-8"> </span>
|
Chris@1
|
12429 <br class="fancyvrb" /><a
|
Chris@1
|
12430 id="x1-123026r13"></a><span
|
Chris@1
|
12431 class="cmr-6">13</span><span
|
Chris@1
|
12432 class="cmtt-8"> </span><span
|
Chris@1
|
12433 class="cmtt-8"> </span><span
|
Chris@1
|
12434 class="cmtt-8"> </span><span
|
Chris@1
|
12435 class="cmtt-8"> </span><span
|
Chris@1
|
12436 class="cmtt-8"> </span><span
|
Chris@1
|
12437 class="cmtt-8"> </span><span
|
Chris@1
|
12438 class="cmtt-8"> }</span><span
|
Chris@1
|
12439 class="cmtt-8"> else</span><span
|
Chris@1
|
12440 class="cmtt-8"> {</span>
|
Chris@1
|
12441 <br class="fancyvrb" /><a
|
Chris@1
|
12442 id="x1-123028r14"></a><span
|
Chris@1
|
12443 class="cmr-6">14</span><span
|
Chris@1
|
12444 class="cmtt-8"> </span><span
|
Chris@1
|
12445 class="cmtt-8"> </span>
|
Chris@1
|
12446 <br class="fancyvrb" /><a
|
Chris@1
|
12447 id="x1-123030r15"></a><span
|
Chris@1
|
12448 class="cmr-6">15</span><span
|
Chris@1
|
12449 class="cmtt-8"> </span><span
|
Chris@1
|
12450 class="cmtt-8"> </span><span
|
Chris@1
|
12451 class="cmtt-8"> </span><span
|
Chris@1
|
12452 class="cmtt-8"> </span><span
|
Chris@1
|
12453 class="cmtt-8"> </span><span
|
Chris@1
|
12454 class="cmtt-8"> </span><span
|
Chris@1
|
12455 class="cmtt-8"> </span><span
|
Chris@1
|
12456 class="cmtt-8"> </span><span
|
Chris@1
|
12457 class="cmtt-8"> 10)</span><span
|
Chris@1
|
12458 class="cmtt-8"> [sy]</span><span
|
Chris@1
|
12459 class="cmtt-8"> =</span><span
|
Chris@1
|
12460 class="cmtt-8"> [base]</span><span
|
Chris@1
|
12461 class="cmtt-8"> +</span><span
|
Chris@1
|
12462 class="cmtt-8"> 1</span>
|
Chris@1
|
12463 <br class="fancyvrb" /><a
|
Chris@1
|
12464 id="x1-123032r16"></a><span
|
Chris@1
|
12465 class="cmr-6">16</span><span
|
Chris@1
|
12466 class="cmtt-8"> </span><span
|
Chris@1
|
12467 class="cmtt-8"> </span>
|
Chris@1
|
12468 <br class="fancyvrb" /><a
|
Chris@1
|
12469 id="x1-123034r17"></a><span
|
Chris@1
|
12470 class="cmr-6">17</span><span
|
Chris@1
|
12471 class="cmtt-8"> </span><span
|
Chris@1
|
12472 class="cmtt-8"> </span><span
|
Chris@1
|
12473 class="cmtt-8"> </span><span
|
Chris@1
|
12474 class="cmtt-8"> </span><span
|
Chris@1
|
12475 class="cmtt-8"> </span><span
|
Chris@1
|
12476 class="cmtt-8"> </span><span
|
Chris@1
|
12477 class="cmtt-8"> }</span>
|
Chris@1
|
12478 <br class="fancyvrb" /><a
|
Chris@1
|
12479 id="x1-123036r18"></a><span
|
Chris@1
|
12480 class="cmr-6">18</span><span
|
Chris@1
|
12481 class="cmtt-8"> </span><span
|
Chris@1
|
12482 class="cmtt-8"> </span>
|
Chris@1
|
12483 <br class="fancyvrb" /><a
|
Chris@1
|
12484 id="x1-123038r19"></a><span
|
Chris@1
|
12485 class="cmr-6">19</span><span
|
Chris@1
|
12486 class="cmtt-8"> </span><span
|
Chris@1
|
12487 class="cmtt-8"> </span><span
|
Chris@1
|
12488 class="cmtt-8"> 11)</span><span
|
Chris@1
|
12489 class="cmtt-8"> [ady]</span><span
|
Chris@1
|
12490 class="cmtt-8"> =</span><span
|
Chris@1
|
12491 class="cmtt-8"> [ady]</span><span
|
Chris@1
|
12492 class="cmtt-8"> -</span><span
|
Chris@1
|
12493 class="cmtt-8"> (absolute</span><span
|
Chris@1
|
12494 class="cmtt-8"> value</span><span
|
Chris@1
|
12495 class="cmtt-8"> of</span><span
|
Chris@1
|
12496 class="cmtt-8"> [base])</span><span
|
Chris@1
|
12497 class="cmtt-8"> *</span><span
|
Chris@1
|
12498 class="cmtt-8"> [adx]</span>
|
Chris@1
|
12499 <br class="fancyvrb" /><a
|
Chris@1
|
12500 id="x1-123040r20"></a><span
|
Chris@1
|
12501 class="cmr-6">20</span><span
|
Chris@1
|
12502 class="cmtt-8"> </span><span
|
Chris@1
|
12503 class="cmtt-8"> </span><span
|
Chris@1
|
12504 class="cmtt-8"> 12)</span><span
|
Chris@1
|
12505 class="cmtt-8"> vector</span><span
|
Chris@1
|
12506 class="cmtt-8"> [v]</span><span
|
Chris@1
|
12507 class="cmtt-8"> element</span><span
|
Chris@1
|
12508 class="cmtt-8"> [x]</span><span
|
Chris@1
|
12509 class="cmtt-8"> =</span><span
|
Chris@1
|
12510 class="cmtt-8"> [y]</span>
|
Chris@1
|
12511 <br class="fancyvrb" /><a
|
Chris@1
|
12512 id="x1-123042r21"></a><span
|
Chris@1
|
12513 class="cmr-6">21</span><span
|
Chris@1
|
12514 class="cmtt-8"> </span><span
|
Chris@1
|
12515 class="cmtt-8"> </span>
|
Chris@1
|
12516 <br class="fancyvrb" /><a
|
Chris@1
|
12517 id="x1-123044r22"></a><span
|
Chris@1
|
12518 class="cmr-6">22</span><span
|
Chris@1
|
12519 class="cmtt-8"> </span><span
|
Chris@1
|
12520 class="cmtt-8"> </span><span
|
Chris@1
|
12521 class="cmtt-8"> 13)</span><span
|
Chris@1
|
12522 class="cmtt-8"> iterate</span><span
|
Chris@1
|
12523 class="cmtt-8"> [x]</span><span
|
Chris@1
|
12524 class="cmtt-8"> over</span><span
|
Chris@1
|
12525 class="cmtt-8"> the</span><span
|
Chris@1
|
12526 class="cmtt-8"> range</span><span
|
Chris@1
|
12527 class="cmtt-8"> [x0]+1</span><span
|
Chris@1
|
12528 class="cmtt-8"> ...</span><span
|
Chris@1
|
12529 class="cmtt-8"> [x1]-1</span><span
|
Chris@1
|
12530 class="cmtt-8"> {</span>
|
Chris@1
|
12531
|
Chris@1
|
12532
|
Chris@1
|
12533
|
Chris@1
|
12534 <br class="fancyvrb" /><a
|
Chris@1
|
12535 id="x1-123046r23"></a><span
|
Chris@1
|
12536 class="cmr-6">23</span><span
|
Chris@1
|
12537 class="cmtt-8"> </span><span
|
Chris@1
|
12538 class="cmtt-8"> </span>
|
Chris@1
|
12539 <br class="fancyvrb" /><a
|
Chris@1
|
12540 id="x1-123048r24"></a><span
|
Chris@1
|
12541 class="cmr-6">24</span><span
|
Chris@1
|
12542 class="cmtt-8"> </span><span
|
Chris@1
|
12543 class="cmtt-8"> </span><span
|
Chris@1
|
12544 class="cmtt-8"> </span><span
|
Chris@1
|
12545 class="cmtt-8"> </span><span
|
Chris@1
|
12546 class="cmtt-8"> </span><span
|
Chris@1
|
12547 class="cmtt-8"> </span><span
|
Chris@1
|
12548 class="cmtt-8"> </span><span
|
Chris@1
|
12549 class="cmtt-8"> </span><span
|
Chris@1
|
12550 class="cmtt-8"> 14)</span><span
|
Chris@1
|
12551 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12552 class="cmtt-8"> =</span><span
|
Chris@1
|
12553 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12554 class="cmtt-8"> +</span><span
|
Chris@1
|
12555 class="cmtt-8"> [ady];</span>
|
Chris@1
|
12556 <br class="fancyvrb" /><a
|
Chris@1
|
12557 id="x1-123050r25"></a><span
|
Chris@1
|
12558 class="cmr-6">25</span><span
|
Chris@1
|
12559 class="cmtt-8"> </span><span
|
Chris@1
|
12560 class="cmtt-8"> </span><span
|
Chris@1
|
12561 class="cmtt-8"> </span><span
|
Chris@1
|
12562 class="cmtt-8"> </span><span
|
Chris@1
|
12563 class="cmtt-8"> </span><span
|
Chris@1
|
12564 class="cmtt-8"> </span><span
|
Chris@1
|
12565 class="cmtt-8"> </span><span
|
Chris@1
|
12566 class="cmtt-8"> </span><span
|
Chris@1
|
12567 class="cmtt-8"> 15)</span><span
|
Chris@1
|
12568 class="cmtt-8"> if</span><span
|
Chris@1
|
12569 class="cmtt-8"> (</span><span
|
Chris@1
|
12570 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12571 class="cmtt-8"> >=</span><span
|
Chris@1
|
12572 class="cmtt-8"> [adx]</span><span
|
Chris@1
|
12573 class="cmtt-8"> )</span><span
|
Chris@1
|
12574 class="cmtt-8"> {</span>
|
Chris@1
|
12575 <br class="fancyvrb" /><a
|
Chris@1
|
12576 id="x1-123052r26"></a><span
|
Chris@1
|
12577 class="cmr-6">26</span><span
|
Chris@1
|
12578 class="cmtt-8"> </span><span
|
Chris@1
|
12579 class="cmtt-8"> </span>
|
Chris@1
|
12580 <br class="fancyvrb" /><a
|
Chris@1
|
12581 id="x1-123054r27"></a><span
|
Chris@1
|
12582 class="cmr-6">27</span><span
|
Chris@1
|
12583 class="cmtt-8"> </span><span
|
Chris@1
|
12584 class="cmtt-8"> </span><span
|
Chris@1
|
12585 class="cmtt-8"> </span><span
|
Chris@1
|
12586 class="cmtt-8"> </span><span
|
Chris@1
|
12587 class="cmtt-8"> </span><span
|
Chris@1
|
12588 class="cmtt-8"> </span><span
|
Chris@1
|
12589 class="cmtt-8"> </span><span
|
Chris@1
|
12590 class="cmtt-8"> </span><span
|
Chris@1
|
12591 class="cmtt-8"> </span><span
|
Chris@1
|
12592 class="cmtt-8"> </span><span
|
Chris@1
|
12593 class="cmtt-8"> </span><span
|
Chris@1
|
12594 class="cmtt-8"> </span><span
|
Chris@1
|
12595 class="cmtt-8"> </span><span
|
Chris@1
|
12596 class="cmtt-8"> </span><span
|
Chris@1
|
12597 class="cmtt-8"> 16)</span><span
|
Chris@1
|
12598 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12599 class="cmtt-8"> =</span><span
|
Chris@1
|
12600 class="cmtt-8"> [err]</span><span
|
Chris@1
|
12601 class="cmtt-8"> -</span><span
|
Chris@1
|
12602 class="cmtt-8"> [adx]</span>
|
Chris@1
|
12603 <br class="fancyvrb" /><a
|
Chris@1
|
12604 id="x1-123056r28"></a><span
|
Chris@1
|
12605 class="cmr-6">28</span><span
|
Chris@1
|
12606 class="cmtt-8"> </span><span
|
Chris@1
|
12607 class="cmtt-8"> </span><span
|
Chris@1
|
12608 class="cmtt-8"> </span><span
|
Chris@1
|
12609 class="cmtt-8"> </span><span
|
Chris@1
|
12610 class="cmtt-8"> </span><span
|
Chris@1
|
12611 class="cmtt-8"> </span><span
|
Chris@1
|
12612 class="cmtt-8"> </span><span
|
Chris@1
|
12613 class="cmtt-8"> </span><span
|
Chris@1
|
12614 class="cmtt-8"> </span><span
|
Chris@1
|
12615 class="cmtt-8"> </span><span
|
Chris@1
|
12616 class="cmtt-8"> </span><span
|
Chris@1
|
12617 class="cmtt-8"> </span><span
|
Chris@1
|
12618 class="cmtt-8"> </span><span
|
Chris@1
|
12619 class="cmtt-8"> </span><span
|
Chris@1
|
12620 class="cmtt-8"> 17)</span><span
|
Chris@1
|
12621 class="cmtt-8"> </span><span
|
Chris@1
|
12622 class="cmtt-8"> </span><span
|
Chris@1
|
12623 class="cmtt-8"> [y]</span><span
|
Chris@1
|
12624 class="cmtt-8"> =</span><span
|
Chris@1
|
12625 class="cmtt-8"> [y]</span><span
|
Chris@1
|
12626 class="cmtt-8"> +</span><span
|
Chris@1
|
12627 class="cmtt-8"> [sy]</span>
|
Chris@1
|
12628 <br class="fancyvrb" /><a
|
Chris@1
|
12629 id="x1-123058r29"></a><span
|
Chris@1
|
12630 class="cmr-6">29</span><span
|
Chris@1
|
12631 class="cmtt-8"> </span><span
|
Chris@1
|
12632 class="cmtt-8"> </span>
|
Chris@1
|
12633 <br class="fancyvrb" /><a
|
Chris@1
|
12634 id="x1-123060r30"></a><span
|
Chris@1
|
12635 class="cmr-6">30</span><span
|
Chris@1
|
12636 class="cmtt-8"> </span><span
|
Chris@1
|
12637 class="cmtt-8"> </span><span
|
Chris@1
|
12638 class="cmtt-8"> </span><span
|
Chris@1
|
12639 class="cmtt-8"> </span><span
|
Chris@1
|
12640 class="cmtt-8"> </span><span
|
Chris@1
|
12641 class="cmtt-8"> </span><span
|
Chris@1
|
12642 class="cmtt-8"> </span><span
|
Chris@1
|
12643 class="cmtt-8"> </span><span
|
Chris@1
|
12644 class="cmtt-8"> </span><span
|
Chris@1
|
12645 class="cmtt-8"> </span><span
|
Chris@1
|
12646 class="cmtt-8"> </span><span
|
Chris@1
|
12647 class="cmtt-8"> </span><span
|
Chris@1
|
12648 class="cmtt-8"> }</span><span
|
Chris@1
|
12649 class="cmtt-8"> else</span><span
|
Chris@1
|
12650 class="cmtt-8"> {</span>
|
Chris@1
|
12651 <br class="fancyvrb" /><a
|
Chris@1
|
12652 id="x1-123062r31"></a><span
|
Chris@1
|
12653 class="cmr-6">31</span><span
|
Chris@1
|
12654 class="cmtt-8"> </span><span
|
Chris@1
|
12655 class="cmtt-8"> </span>
|
Chris@1
|
12656 <br class="fancyvrb" /><a
|
Chris@1
|
12657 id="x1-123064r32"></a><span
|
Chris@1
|
12658 class="cmr-6">32</span><span
|
Chris@1
|
12659 class="cmtt-8"> </span><span
|
Chris@1
|
12660 class="cmtt-8"> </span><span
|
Chris@1
|
12661 class="cmtt-8"> </span><span
|
Chris@1
|
12662 class="cmtt-8"> </span><span
|
Chris@1
|
12663 class="cmtt-8"> </span><span
|
Chris@1
|
12664 class="cmtt-8"> </span><span
|
Chris@1
|
12665 class="cmtt-8"> </span><span
|
Chris@1
|
12666 class="cmtt-8"> </span><span
|
Chris@1
|
12667 class="cmtt-8"> </span><span
|
Chris@1
|
12668 class="cmtt-8"> </span><span
|
Chris@1
|
12669 class="cmtt-8"> </span><span
|
Chris@1
|
12670 class="cmtt-8"> </span><span
|
Chris@1
|
12671 class="cmtt-8"> </span><span
|
Chris@1
|
12672 class="cmtt-8"> </span><span
|
Chris@1
|
12673 class="cmtt-8"> 18)</span><span
|
Chris@1
|
12674 class="cmtt-8"> [y]</span><span
|
Chris@1
|
12675 class="cmtt-8"> =</span><span
|
Chris@1
|
12676 class="cmtt-8"> [y]</span><span
|
Chris@1
|
12677 class="cmtt-8"> +</span><span
|
Chris@1
|
12678 class="cmtt-8"> [base]</span>
|
Chris@1
|
12679 <br class="fancyvrb" /><a
|
Chris@1
|
12680 id="x1-123066r33"></a><span
|
Chris@1
|
12681 class="cmr-6">33</span><span
|
Chris@1
|
12682 class="cmtt-8"> </span><span
|
Chris@1
|
12683 class="cmtt-8"> </span>
|
Chris@1
|
12684 <br class="fancyvrb" /><a
|
Chris@1
|
12685 id="x1-123068r34"></a><span
|
Chris@1
|
12686 class="cmr-6">34</span><span
|
Chris@1
|
12687 class="cmtt-8"> </span><span
|
Chris@1
|
12688 class="cmtt-8"> </span><span
|
Chris@1
|
12689 class="cmtt-8"> </span><span
|
Chris@1
|
12690 class="cmtt-8"> </span><span
|
Chris@1
|
12691 class="cmtt-8"> </span><span
|
Chris@1
|
12692 class="cmtt-8"> </span><span
|
Chris@1
|
12693 class="cmtt-8"> </span><span
|
Chris@1
|
12694 class="cmtt-8"> </span><span
|
Chris@1
|
12695 class="cmtt-8"> </span><span
|
Chris@1
|
12696 class="cmtt-8"> </span><span
|
Chris@1
|
12697 class="cmtt-8"> </span><span
|
Chris@1
|
12698 class="cmtt-8"> </span><span
|
Chris@1
|
12699 class="cmtt-8"> }</span>
|
Chris@1
|
12700 <br class="fancyvrb" /><a
|
Chris@1
|
12701 id="x1-123070r35"></a><span
|
Chris@1
|
12702 class="cmr-6">35</span><span
|
Chris@1
|
12703 class="cmtt-8"> </span><span
|
Chris@1
|
12704 class="cmtt-8"> </span>
|
Chris@1
|
12705 <br class="fancyvrb" /><a
|
Chris@1
|
12706 id="x1-123072r36"></a><span
|
Chris@1
|
12707 class="cmr-6">36</span><span
|
Chris@1
|
12708 class="cmtt-8"> </span><span
|
Chris@1
|
12709 class="cmtt-8"> </span><span
|
Chris@1
|
12710 class="cmtt-8"> </span><span
|
Chris@1
|
12711 class="cmtt-8"> </span><span
|
Chris@1
|
12712 class="cmtt-8"> </span><span
|
Chris@1
|
12713 class="cmtt-8"> </span><span
|
Chris@1
|
12714 class="cmtt-8"> </span><span
|
Chris@1
|
12715 class="cmtt-8"> </span><span
|
Chris@1
|
12716 class="cmtt-8"> 19)</span><span
|
Chris@1
|
12717 class="cmtt-8"> vector</span><span
|
Chris@1
|
12718 class="cmtt-8"> [v]</span><span
|
Chris@1
|
12719 class="cmtt-8"> element</span><span
|
Chris@1
|
12720 class="cmtt-8"> [x]</span><span
|
Chris@1
|
12721 class="cmtt-8"> =</span><span
|
Chris@1
|
12722 class="cmtt-8"> [y]</span>
|
Chris@1
|
12723 <br class="fancyvrb" /><a
|
Chris@1
|
12724 id="x1-123074r37"></a><span
|
Chris@1
|
12725 class="cmr-6">37</span><span
|
Chris@1
|
12726 class="cmtt-8"> </span><span
|
Chris@1
|
12727 class="cmtt-8"> </span>
|
Chris@1
|
12728 <br class="fancyvrb" /><a
|
Chris@1
|
12729 id="x1-123076r38"></a><span
|
Chris@1
|
12730 class="cmr-6">38</span><span
|
Chris@1
|
12731 class="cmtt-8"> </span><span
|
Chris@1
|
12732 class="cmtt-8"> </span><span
|
Chris@1
|
12733 class="cmtt-8"> </span><span
|
Chris@1
|
12734 class="cmtt-8"> </span><span
|
Chris@1
|
12735 class="cmtt-8"> </span><span
|
Chris@1
|
12736 class="cmtt-8"> </span><span
|
Chris@1
|
12737 class="cmtt-8"> }</span>
|
Chris@1
|
12738 </div>
|
Chris@1
|
12739
|
Chris@1
|
12740
|
Chris@1
|
12741
|
Chris@1
|
12742
|
Chris@1
|
12743
|
Chris@1
|
12744
|
Chris@1
|
12745 <h3 class="sectionHead"><span class="titlemark">10. </span> <a
|
Chris@1
|
12746 id="x1-12400010"></a>Tables</h3>
|
Chris@1
|
12747 <!--l. 6--><p class="noindent" >
|
Chris@1
|
12748 <h4 class="subsectionHead"><span class="titlemark">10.1. </span> <a
|
Chris@1
|
12749 id="x1-12500010.1"></a>floor1_inverse_dB_table</h4>
|
Chris@1
|
12750 <!--l. 8--><p class="noindent" >The vector <span
|
Chris@1
|
12751 class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the
|
Chris@1
|
12752 following values (read left to right then top to bottom):
|
Chris@1
|
12753 <!--l. 12--><p class="noindent" >
|
Chris@1
|
12754 <div class="fancyvrb" id="fancyvrb48">
|
Chris@1
|
12755 <a
|
Chris@1
|
12756 id="x1-125002r1"></a><span
|
Chris@1
|
12757 class="cmr-6">1</span><span
|
Chris@1
|
12758 class="cmtt-8"> </span><span
|
Chris@1
|
12759 class="cmtt-8"> </span><span
|
Chris@1
|
12760 class="cmtt-8"> </span><span
|
Chris@1
|
12761 class="cmtt-8"> 1.0649863e-07,</span><span
|
Chris@1
|
12762 class="cmtt-8"> 1.1341951e-07,</span><span
|
Chris@1
|
12763 class="cmtt-8"> 1.2079015e-07,</span><span
|
Chris@1
|
12764 class="cmtt-8"> 1.2863978e-07,</span>
|
Chris@1
|
12765 <br class="fancyvrb" /><a
|
Chris@1
|
12766 id="x1-125004r2"></a><span
|
Chris@1
|
12767 class="cmr-6">2</span><span
|
Chris@1
|
12768 class="cmtt-8"> </span><span
|
Chris@1
|
12769 class="cmtt-8"> </span><span
|
Chris@1
|
12770 class="cmtt-8"> </span><span
|
Chris@1
|
12771 class="cmtt-8"> 1.3699951e-07,</span><span
|
Chris@1
|
12772 class="cmtt-8"> 1.4590251e-07,</span><span
|
Chris@1
|
12773 class="cmtt-8"> 1.5538408e-07,</span><span
|
Chris@1
|
12774 class="cmtt-8"> 1.6548181e-07,</span>
|
Chris@1
|
12775 <br class="fancyvrb" /><a
|
Chris@1
|
12776 id="x1-125006r3"></a><span
|
Chris@1
|
12777 class="cmr-6">3</span><span
|
Chris@1
|
12778 class="cmtt-8"> </span><span
|
Chris@1
|
12779 class="cmtt-8"> </span><span
|
Chris@1
|
12780 class="cmtt-8"> </span><span
|
Chris@1
|
12781 class="cmtt-8"> 1.7623575e-07,</span><span
|
Chris@1
|
12782 class="cmtt-8"> 1.8768855e-07,</span><span
|
Chris@1
|
12783 class="cmtt-8"> 1.9988561e-07,</span><span
|
Chris@1
|
12784 class="cmtt-8"> 2.1287530e-07,</span>
|
Chris@1
|
12785 <br class="fancyvrb" /><a
|
Chris@1
|
12786 id="x1-125008r4"></a><span
|
Chris@1
|
12787 class="cmr-6">4</span><span
|
Chris@1
|
12788 class="cmtt-8"> </span><span
|
Chris@1
|
12789 class="cmtt-8"> </span><span
|
Chris@1
|
12790 class="cmtt-8"> </span><span
|
Chris@1
|
12791 class="cmtt-8"> 2.2670913e-07,</span><span
|
Chris@1
|
12792 class="cmtt-8"> 2.4144197e-07,</span><span
|
Chris@1
|
12793 class="cmtt-8"> 2.5713223e-07,</span><span
|
Chris@1
|
12794 class="cmtt-8"> 2.7384213e-07,</span>
|
Chris@1
|
12795 <br class="fancyvrb" /><a
|
Chris@1
|
12796 id="x1-125010r5"></a><span
|
Chris@1
|
12797 class="cmr-6">5</span><span
|
Chris@1
|
12798 class="cmtt-8"> </span><span
|
Chris@1
|
12799 class="cmtt-8"> </span><span
|
Chris@1
|
12800 class="cmtt-8"> </span><span
|
Chris@1
|
12801 class="cmtt-8"> 2.9163793e-07,</span><span
|
Chris@1
|
12802 class="cmtt-8"> 3.1059021e-07,</span><span
|
Chris@1
|
12803 class="cmtt-8"> 3.3077411e-07,</span><span
|
Chris@1
|
12804 class="cmtt-8"> 3.5226968e-07,</span>
|
Chris@1
|
12805 <br class="fancyvrb" /><a
|
Chris@1
|
12806 id="x1-125012r6"></a><span
|
Chris@1
|
12807 class="cmr-6">6</span><span
|
Chris@1
|
12808 class="cmtt-8"> </span><span
|
Chris@1
|
12809 class="cmtt-8"> </span><span
|
Chris@1
|
12810 class="cmtt-8"> </span><span
|
Chris@1
|
12811 class="cmtt-8"> 3.7516214e-07,</span><span
|
Chris@1
|
12812 class="cmtt-8"> 3.9954229e-07,</span><span
|
Chris@1
|
12813 class="cmtt-8"> 4.2550680e-07,</span><span
|
Chris@1
|
12814 class="cmtt-8"> 4.5315863e-07,</span>
|
Chris@1
|
12815 <br class="fancyvrb" /><a
|
Chris@1
|
12816 id="x1-125014r7"></a><span
|
Chris@1
|
12817 class="cmr-6">7</span><span
|
Chris@1
|
12818 class="cmtt-8"> </span><span
|
Chris@1
|
12819 class="cmtt-8"> </span><span
|
Chris@1
|
12820 class="cmtt-8"> </span><span
|
Chris@1
|
12821 class="cmtt-8"> 4.8260743e-07,</span><span
|
Chris@1
|
12822 class="cmtt-8"> 5.1396998e-07,</span><span
|
Chris@1
|
12823 class="cmtt-8"> 5.4737065e-07,</span><span
|
Chris@1
|
12824 class="cmtt-8"> 5.8294187e-07,</span>
|
Chris@1
|
12825 <br class="fancyvrb" /><a
|
Chris@1
|
12826 id="x1-125016r8"></a><span
|
Chris@1
|
12827 class="cmr-6">8</span><span
|
Chris@1
|
12828 class="cmtt-8"> </span><span
|
Chris@1
|
12829 class="cmtt-8"> </span><span
|
Chris@1
|
12830 class="cmtt-8"> </span><span
|
Chris@1
|
12831 class="cmtt-8"> 6.2082472e-07,</span><span
|
Chris@1
|
12832 class="cmtt-8"> 6.6116941e-07,</span><span
|
Chris@1
|
12833 class="cmtt-8"> 7.0413592e-07,</span><span
|
Chris@1
|
12834 class="cmtt-8"> 7.4989464e-07,</span>
|
Chris@1
|
12835 <br class="fancyvrb" /><a
|
Chris@1
|
12836 id="x1-125018r9"></a><span
|
Chris@1
|
12837 class="cmr-6">9</span><span
|
Chris@1
|
12838 class="cmtt-8"> </span><span
|
Chris@1
|
12839 class="cmtt-8"> </span><span
|
Chris@1
|
12840 class="cmtt-8"> </span><span
|
Chris@1
|
12841 class="cmtt-8"> 7.9862701e-07,</span><span
|
Chris@1
|
12842 class="cmtt-8"> 8.5052630e-07,</span><span
|
Chris@1
|
12843 class="cmtt-8"> 9.0579828e-07,</span><span
|
Chris@1
|
12844 class="cmtt-8"> 9.6466216e-07,</span>
|
Chris@1
|
12845 <br class="fancyvrb" /><a
|
Chris@1
|
12846 id="x1-125020r10"></a><span
|
Chris@1
|
12847 class="cmr-6">10</span><span
|
Chris@1
|
12848 class="cmtt-8"> </span><span
|
Chris@1
|
12849 class="cmtt-8"> </span><span
|
Chris@1
|
12850 class="cmtt-8"> </span><span
|
Chris@1
|
12851 class="cmtt-8"> 1.0273513e-06,</span><span
|
Chris@1
|
12852 class="cmtt-8"> 1.0941144e-06,</span><span
|
Chris@1
|
12853 class="cmtt-8"> 1.1652161e-06,</span><span
|
Chris@1
|
12854 class="cmtt-8"> 1.2409384e-06,</span>
|
Chris@1
|
12855 <br class="fancyvrb" /><a
|
Chris@1
|
12856 id="x1-125022r11"></a><span
|
Chris@1
|
12857 class="cmr-6">11</span><span
|
Chris@1
|
12858 class="cmtt-8"> </span><span
|
Chris@1
|
12859 class="cmtt-8"> </span><span
|
Chris@1
|
12860 class="cmtt-8"> </span><span
|
Chris@1
|
12861 class="cmtt-8"> 1.3215816e-06,</span><span
|
Chris@1
|
12862 class="cmtt-8"> 1.4074654e-06,</span><span
|
Chris@1
|
12863 class="cmtt-8"> 1.4989305e-06,</span><span
|
Chris@1
|
12864 class="cmtt-8"> 1.5963394e-06,</span>
|
Chris@1
|
12865 <br class="fancyvrb" /><a
|
Chris@1
|
12866 id="x1-125024r12"></a><span
|
Chris@1
|
12867 class="cmr-6">12</span><span
|
Chris@1
|
12868 class="cmtt-8"> </span><span
|
Chris@1
|
12869 class="cmtt-8"> </span><span
|
Chris@1
|
12870 class="cmtt-8"> </span><span
|
Chris@1
|
12871 class="cmtt-8"> 1.7000785e-06,</span><span
|
Chris@1
|
12872 class="cmtt-8"> 1.8105592e-06,</span><span
|
Chris@1
|
12873 class="cmtt-8"> 1.9282195e-06,</span><span
|
Chris@1
|
12874 class="cmtt-8"> 2.0535261e-06,</span>
|
Chris@1
|
12875 <br class="fancyvrb" /><a
|
Chris@1
|
12876 id="x1-125026r13"></a><span
|
Chris@1
|
12877 class="cmr-6">13</span><span
|
Chris@1
|
12878 class="cmtt-8"> </span><span
|
Chris@1
|
12879 class="cmtt-8"> </span><span
|
Chris@1
|
12880 class="cmtt-8"> </span><span
|
Chris@1
|
12881 class="cmtt-8"> 2.1869758e-06,</span><span
|
Chris@1
|
12882 class="cmtt-8"> 2.3290978e-06,</span><span
|
Chris@1
|
12883 class="cmtt-8"> 2.4804557e-06,</span><span
|
Chris@1
|
12884 class="cmtt-8"> 2.6416497e-06,</span>
|
Chris@1
|
12885 <br class="fancyvrb" /><a
|
Chris@1
|
12886 id="x1-125028r14"></a><span
|
Chris@1
|
12887 class="cmr-6">14</span><span
|
Chris@1
|
12888 class="cmtt-8"> </span><span
|
Chris@1
|
12889 class="cmtt-8"> </span><span
|
Chris@1
|
12890 class="cmtt-8"> </span><span
|
Chris@1
|
12891 class="cmtt-8"> 2.8133190e-06,</span><span
|
Chris@1
|
12892 class="cmtt-8"> 2.9961443e-06,</span><span
|
Chris@1
|
12893 class="cmtt-8"> 3.1908506e-06,</span><span
|
Chris@1
|
12894 class="cmtt-8"> 3.3982101e-06,</span>
|
Chris@1
|
12895 <br class="fancyvrb" /><a
|
Chris@1
|
12896 id="x1-125030r15"></a><span
|
Chris@1
|
12897 class="cmr-6">15</span><span
|
Chris@1
|
12898 class="cmtt-8"> </span><span
|
Chris@1
|
12899 class="cmtt-8"> </span><span
|
Chris@1
|
12900 class="cmtt-8"> </span><span
|
Chris@1
|
12901 class="cmtt-8"> 3.6190449e-06,</span><span
|
Chris@1
|
12902 class="cmtt-8"> 3.8542308e-06,</span><span
|
Chris@1
|
12903 class="cmtt-8"> 4.1047004e-06,</span><span
|
Chris@1
|
12904 class="cmtt-8"> 4.3714470e-06,</span>
|
Chris@1
|
12905 <br class="fancyvrb" /><a
|
Chris@1
|
12906 id="x1-125032r16"></a><span
|
Chris@1
|
12907 class="cmr-6">16</span><span
|
Chris@1
|
12908 class="cmtt-8"> </span><span
|
Chris@1
|
12909 class="cmtt-8"> </span><span
|
Chris@1
|
12910 class="cmtt-8"> </span><span
|
Chris@1
|
12911 class="cmtt-8"> 4.6555282e-06,</span><span
|
Chris@1
|
12912 class="cmtt-8"> 4.9580707e-06,</span><span
|
Chris@1
|
12913 class="cmtt-8"> 5.2802740e-06,</span><span
|
Chris@1
|
12914 class="cmtt-8"> 5.6234160e-06,</span>
|
Chris@1
|
12915 <br class="fancyvrb" /><a
|
Chris@1
|
12916 id="x1-125034r17"></a><span
|
Chris@1
|
12917 class="cmr-6">17</span><span
|
Chris@1
|
12918 class="cmtt-8"> </span><span
|
Chris@1
|
12919 class="cmtt-8"> </span><span
|
Chris@1
|
12920 class="cmtt-8"> </span><span
|
Chris@1
|
12921 class="cmtt-8"> 5.9888572e-06,</span><span
|
Chris@1
|
12922 class="cmtt-8"> 6.3780469e-06,</span><span
|
Chris@1
|
12923 class="cmtt-8"> 6.7925283e-06,</span><span
|
Chris@1
|
12924 class="cmtt-8"> 7.2339451e-06,</span>
|
Chris@1
|
12925 <br class="fancyvrb" /><a
|
Chris@1
|
12926 id="x1-125036r18"></a><span
|
Chris@1
|
12927 class="cmr-6">18</span><span
|
Chris@1
|
12928 class="cmtt-8"> </span><span
|
Chris@1
|
12929 class="cmtt-8"> </span><span
|
Chris@1
|
12930 class="cmtt-8"> </span><span
|
Chris@1
|
12931 class="cmtt-8"> 7.7040476e-06,</span><span
|
Chris@1
|
12932 class="cmtt-8"> 8.2047000e-06,</span><span
|
Chris@1
|
12933 class="cmtt-8"> 8.7378876e-06,</span><span
|
Chris@1
|
12934 class="cmtt-8"> 9.3057248e-06,</span>
|
Chris@1
|
12935 <br class="fancyvrb" /><a
|
Chris@1
|
12936 id="x1-125038r19"></a><span
|
Chris@1
|
12937 class="cmr-6">19</span><span
|
Chris@1
|
12938 class="cmtt-8"> </span><span
|
Chris@1
|
12939 class="cmtt-8"> </span><span
|
Chris@1
|
12940 class="cmtt-8"> </span><span
|
Chris@1
|
12941 class="cmtt-8"> 9.9104632e-06,</span><span
|
Chris@1
|
12942 class="cmtt-8"> 1.0554501e-05,</span><span
|
Chris@1
|
12943 class="cmtt-8"> 1.1240392e-05,</span><span
|
Chris@1
|
12944 class="cmtt-8"> 1.1970856e-05,</span>
|
Chris@1
|
12945 <br class="fancyvrb" /><a
|
Chris@1
|
12946 id="x1-125040r20"></a><span
|
Chris@1
|
12947 class="cmr-6">20</span><span
|
Chris@1
|
12948 class="cmtt-8"> </span><span
|
Chris@1
|
12949 class="cmtt-8"> </span><span
|
Chris@1
|
12950 class="cmtt-8"> </span><span
|
Chris@1
|
12951 class="cmtt-8"> 1.2748789e-05,</span><span
|
Chris@1
|
12952 class="cmtt-8"> 1.3577278e-05,</span><span
|
Chris@1
|
12953 class="cmtt-8"> 1.4459606e-05,</span><span
|
Chris@1
|
12954 class="cmtt-8"> 1.5399272e-05,</span>
|
Chris@1
|
12955 <br class="fancyvrb" /><a
|
Chris@1
|
12956 id="x1-125042r21"></a><span
|
Chris@1
|
12957 class="cmr-6">21</span><span
|
Chris@1
|
12958 class="cmtt-8"> </span><span
|
Chris@1
|
12959 class="cmtt-8"> </span><span
|
Chris@1
|
12960 class="cmtt-8"> </span><span
|
Chris@1
|
12961 class="cmtt-8"> 1.6400004e-05,</span><span
|
Chris@1
|
12962 class="cmtt-8"> 1.7465768e-05,</span><span
|
Chris@1
|
12963 class="cmtt-8"> 1.8600792e-05,</span><span
|
Chris@1
|
12964 class="cmtt-8"> 1.9809576e-05,</span>
|
Chris@1
|
12965 <br class="fancyvrb" /><a
|
Chris@1
|
12966 id="x1-125044r22"></a><span
|
Chris@1
|
12967 class="cmr-6">22</span><span
|
Chris@1
|
12968 class="cmtt-8"> </span><span
|
Chris@1
|
12969 class="cmtt-8"> </span><span
|
Chris@1
|
12970 class="cmtt-8"> </span><span
|
Chris@1
|
12971 class="cmtt-8"> 2.1096914e-05,</span><span
|
Chris@1
|
12972 class="cmtt-8"> 2.2467911e-05,</span><span
|
Chris@1
|
12973 class="cmtt-8"> 2.3928002e-05,</span><span
|
Chris@1
|
12974 class="cmtt-8"> 2.5482978e-05,</span>
|
Chris@1
|
12975 <br class="fancyvrb" /><a
|
Chris@1
|
12976 id="x1-125046r23"></a><span
|
Chris@1
|
12977 class="cmr-6">23</span><span
|
Chris@1
|
12978 class="cmtt-8"> </span><span
|
Chris@1
|
12979 class="cmtt-8"> </span><span
|
Chris@1
|
12980 class="cmtt-8"> </span><span
|
Chris@1
|
12981 class="cmtt-8"> 2.7139006e-05,</span><span
|
Chris@1
|
12982 class="cmtt-8"> 2.8902651e-05,</span><span
|
Chris@1
|
12983 class="cmtt-8"> 3.0780908e-05,</span><span
|
Chris@1
|
12984 class="cmtt-8"> 3.2781225e-05,</span>
|
Chris@1
|
12985 <br class="fancyvrb" /><a
|
Chris@1
|
12986 id="x1-125048r24"></a><span
|
Chris@1
|
12987 class="cmr-6">24</span><span
|
Chris@1
|
12988 class="cmtt-8"> </span><span
|
Chris@1
|
12989 class="cmtt-8"> </span><span
|
Chris@1
|
12990 class="cmtt-8"> </span><span
|
Chris@1
|
12991 class="cmtt-8"> 3.4911534e-05,</span><span
|
Chris@1
|
12992 class="cmtt-8"> 3.7180282e-05,</span><span
|
Chris@1
|
12993 class="cmtt-8"> 3.9596466e-05,</span><span
|
Chris@1
|
12994 class="cmtt-8"> 4.2169667e-05,</span>
|
Chris@1
|
12995 <br class="fancyvrb" /><a
|
Chris@1
|
12996 id="x1-125050r25"></a><span
|
Chris@1
|
12997 class="cmr-6">25</span><span
|
Chris@1
|
12998 class="cmtt-8"> </span><span
|
Chris@1
|
12999 class="cmtt-8"> </span><span
|
Chris@1
|
13000 class="cmtt-8"> </span><span
|
Chris@1
|
13001 class="cmtt-8"> 4.4910090e-05,</span><span
|
Chris@1
|
13002 class="cmtt-8"> 4.7828601e-05,</span><span
|
Chris@1
|
13003 class="cmtt-8"> 5.0936773e-05,</span><span
|
Chris@1
|
13004 class="cmtt-8"> 5.4246931e-05,</span>
|
Chris@1
|
13005 <br class="fancyvrb" /><a
|
Chris@1
|
13006 id="x1-125052r26"></a><span
|
Chris@1
|
13007 class="cmr-6">26</span><span
|
Chris@1
|
13008 class="cmtt-8"> </span><span
|
Chris@1
|
13009 class="cmtt-8"> </span><span
|
Chris@1
|
13010 class="cmtt-8"> </span><span
|
Chris@1
|
13011 class="cmtt-8"> 5.7772202e-05,</span><span
|
Chris@1
|
13012 class="cmtt-8"> 6.1526565e-05,</span><span
|
Chris@1
|
13013 class="cmtt-8"> 6.5524908e-05,</span><span
|
Chris@1
|
13014 class="cmtt-8"> 6.9783085e-05,</span>
|
Chris@1
|
13015 <br class="fancyvrb" /><a
|
Chris@1
|
13016 id="x1-125054r27"></a><span
|
Chris@1
|
13017 class="cmr-6">27</span><span
|
Chris@1
|
13018 class="cmtt-8"> </span><span
|
Chris@1
|
13019 class="cmtt-8"> </span><span
|
Chris@1
|
13020 class="cmtt-8"> </span><span
|
Chris@1
|
13021 class="cmtt-8"> 7.4317983e-05,</span><span
|
Chris@1
|
13022 class="cmtt-8"> 7.9147585e-05,</span><span
|
Chris@1
|
13023 class="cmtt-8"> 8.4291040e-05,</span><span
|
Chris@1
|
13024 class="cmtt-8"> 8.9768747e-05,</span>
|
Chris@1
|
13025 <br class="fancyvrb" /><a
|
Chris@1
|
13026 id="x1-125056r28"></a><span
|
Chris@1
|
13027 class="cmr-6">28</span><span
|
Chris@1
|
13028 class="cmtt-8"> </span><span
|
Chris@1
|
13029 class="cmtt-8"> </span><span
|
Chris@1
|
13030 class="cmtt-8"> </span><span
|
Chris@1
|
13031 class="cmtt-8"> 9.5602426e-05,</span><span
|
Chris@1
|
13032 class="cmtt-8"> 0.00010181521,</span><span
|
Chris@1
|
13033 class="cmtt-8"> 0.00010843174,</span><span
|
Chris@1
|
13034 class="cmtt-8"> 0.00011547824,</span>
|
Chris@1
|
13035 <br class="fancyvrb" /><a
|
Chris@1
|
13036 id="x1-125058r29"></a><span
|
Chris@1
|
13037 class="cmr-6">29</span><span
|
Chris@1
|
13038 class="cmtt-8"> </span><span
|
Chris@1
|
13039 class="cmtt-8"> </span><span
|
Chris@1
|
13040 class="cmtt-8"> </span><span
|
Chris@1
|
13041 class="cmtt-8"> 0.00012298267,</span><span
|
Chris@1
|
13042 class="cmtt-8"> 0.00013097477,</span><span
|
Chris@1
|
13043 class="cmtt-8"> 0.00013948625,</span><span
|
Chris@1
|
13044 class="cmtt-8"> 0.00014855085,</span>
|
Chris@1
|
13045 <br class="fancyvrb" /><a
|
Chris@1
|
13046 id="x1-125060r30"></a><span
|
Chris@1
|
13047 class="cmr-6">30</span><span
|
Chris@1
|
13048 class="cmtt-8"> </span><span
|
Chris@1
|
13049 class="cmtt-8"> </span><span
|
Chris@1
|
13050 class="cmtt-8"> </span><span
|
Chris@1
|
13051 class="cmtt-8"> 0.00015820453,</span><span
|
Chris@1
|
13052 class="cmtt-8"> 0.00016848555,</span><span
|
Chris@1
|
13053 class="cmtt-8"> 0.00017943469,</span><span
|
Chris@1
|
13054 class="cmtt-8"> 0.00019109536,</span>
|
Chris@1
|
13055 <br class="fancyvrb" /><a
|
Chris@1
|
13056 id="x1-125062r31"></a><span
|
Chris@1
|
13057 class="cmr-6">31</span><span
|
Chris@1
|
13058 class="cmtt-8"> </span><span
|
Chris@1
|
13059 class="cmtt-8"> </span><span
|
Chris@1
|
13060 class="cmtt-8"> </span><span
|
Chris@1
|
13061 class="cmtt-8"> 0.00020351382,</span><span
|
Chris@1
|
13062 class="cmtt-8"> 0.00021673929,</span><span
|
Chris@1
|
13063 class="cmtt-8"> 0.00023082423,</span><span
|
Chris@1
|
13064 class="cmtt-8"> 0.00024582449,</span>
|
Chris@1
|
13065 <br class="fancyvrb" /><a
|
Chris@1
|
13066 id="x1-125064r32"></a><span
|
Chris@1
|
13067 class="cmr-6">32</span><span
|
Chris@1
|
13068 class="cmtt-8"> </span><span
|
Chris@1
|
13069 class="cmtt-8"> </span><span
|
Chris@1
|
13070 class="cmtt-8"> </span><span
|
Chris@1
|
13071 class="cmtt-8"> 0.00026179955,</span><span
|
Chris@1
|
13072 class="cmtt-8"> 0.00027881276,</span><span
|
Chris@1
|
13073 class="cmtt-8"> 0.00029693158,</span><span
|
Chris@1
|
13074 class="cmtt-8"> 0.00031622787,</span>
|
Chris@1
|
13075 <br class="fancyvrb" /><a
|
Chris@1
|
13076 id="x1-125066r33"></a><span
|
Chris@1
|
13077 class="cmr-6">33</span><span
|
Chris@1
|
13078 class="cmtt-8"> </span><span
|
Chris@1
|
13079 class="cmtt-8"> </span><span
|
Chris@1
|
13080 class="cmtt-8"> </span><span
|
Chris@1
|
13081 class="cmtt-8"> 0.00033677814,</span><span
|
Chris@1
|
13082 class="cmtt-8"> 0.00035866388,</span><span
|
Chris@1
|
13083 class="cmtt-8"> 0.00038197188,</span><span
|
Chris@1
|
13084 class="cmtt-8"> 0.00040679456,</span>
|
Chris@1
|
13085 <br class="fancyvrb" /><a
|
Chris@1
|
13086 id="x1-125068r34"></a><span
|
Chris@1
|
13087 class="cmr-6">34</span><span
|
Chris@1
|
13088 class="cmtt-8"> </span><span
|
Chris@1
|
13089 class="cmtt-8"> </span><span
|
Chris@1
|
13090 class="cmtt-8"> </span><span
|
Chris@1
|
13091 class="cmtt-8"> 0.00043323036,</span><span
|
Chris@1
|
13092 class="cmtt-8"> 0.00046138411,</span><span
|
Chris@1
|
13093 class="cmtt-8"> 0.00049136745,</span><span
|
Chris@1
|
13094 class="cmtt-8"> 0.00052329927,</span>
|
Chris@1
|
13095 <br class="fancyvrb" /><a
|
Chris@1
|
13096 id="x1-125070r35"></a><span
|
Chris@1
|
13097 class="cmr-6">35</span><span
|
Chris@1
|
13098 class="cmtt-8"> </span><span
|
Chris@1
|
13099 class="cmtt-8"> </span><span
|
Chris@1
|
13100 class="cmtt-8"> </span><span
|
Chris@1
|
13101 class="cmtt-8"> 0.00055730621,</span><span
|
Chris@1
|
13102 class="cmtt-8"> 0.00059352311,</span><span
|
Chris@1
|
13103 class="cmtt-8"> 0.00063209358,</span><span
|
Chris@1
|
13104 class="cmtt-8"> 0.00067317058,</span>
|
Chris@1
|
13105 <br class="fancyvrb" /><a
|
Chris@1
|
13106 id="x1-125072r36"></a><span
|
Chris@1
|
13107 class="cmr-6">36</span><span
|
Chris@1
|
13108 class="cmtt-8"> </span><span
|
Chris@1
|
13109 class="cmtt-8"> </span><span
|
Chris@1
|
13110 class="cmtt-8"> </span><span
|
Chris@1
|
13111 class="cmtt-8"> 0.00071691700,</span><span
|
Chris@1
|
13112 class="cmtt-8"> 0.00076350630,</span><span
|
Chris@1
|
13113 class="cmtt-8"> 0.00081312324,</span><span
|
Chris@1
|
13114 class="cmtt-8"> 0.00086596457,</span>
|
Chris@1
|
13115 <br class="fancyvrb" /><a
|
Chris@1
|
13116 id="x1-125074r37"></a><span
|
Chris@1
|
13117 class="cmr-6">37</span><span
|
Chris@1
|
13118 class="cmtt-8"> </span><span
|
Chris@1
|
13119 class="cmtt-8"> </span><span
|
Chris@1
|
13120 class="cmtt-8"> </span><span
|
Chris@1
|
13121 class="cmtt-8"> 0.00092223983,</span><span
|
Chris@1
|
13122 class="cmtt-8"> 0.00098217216,</span><span
|
Chris@1
|
13123 class="cmtt-8"> 0.0010459992,</span><span
|
Chris@1
|
13124 class="cmtt-8"> </span><span
|
Chris@1
|
13125 class="cmtt-8"> 0.0011139742,</span>
|
Chris@1
|
13126 <br class="fancyvrb" /><a
|
Chris@1
|
13127 id="x1-125076r38"></a><span
|
Chris@1
|
13128 class="cmr-6">38</span><span
|
Chris@1
|
13129 class="cmtt-8"> </span><span
|
Chris@1
|
13130 class="cmtt-8"> </span><span
|
Chris@1
|
13131 class="cmtt-8"> </span><span
|
Chris@1
|
13132 class="cmtt-8"> 0.0011863665,</span><span
|
Chris@1
|
13133 class="cmtt-8"> </span><span
|
Chris@1
|
13134 class="cmtt-8"> 0.0012634633,</span><span
|
Chris@1
|
13135 class="cmtt-8"> </span><span
|
Chris@1
|
13136 class="cmtt-8"> 0.0013455702,</span><span
|
Chris@1
|
13137 class="cmtt-8"> </span><span
|
Chris@1
|
13138 class="cmtt-8"> 0.0014330129,</span>
|
Chris@1
|
13139 <br class="fancyvrb" /><a
|
Chris@1
|
13140 id="x1-125078r39"></a><span
|
Chris@1
|
13141 class="cmr-6">39</span><span
|
Chris@1
|
13142 class="cmtt-8"> </span><span
|
Chris@1
|
13143 class="cmtt-8"> </span><span
|
Chris@1
|
13144 class="cmtt-8"> </span><span
|
Chris@1
|
13145 class="cmtt-8"> 0.0015261382,</span><span
|
Chris@1
|
13146 class="cmtt-8"> </span><span
|
Chris@1
|
13147 class="cmtt-8"> 0.0016253153,</span><span
|
Chris@1
|
13148 class="cmtt-8"> </span><span
|
Chris@1
|
13149 class="cmtt-8"> 0.0017309374,</span><span
|
Chris@1
|
13150 class="cmtt-8"> </span><span
|
Chris@1
|
13151 class="cmtt-8"> 0.0018434235,</span>
|
Chris@1
|
13152 <br class="fancyvrb" /><a
|
Chris@1
|
13153 id="x1-125080r40"></a><span
|
Chris@1
|
13154 class="cmr-6">40</span><span
|
Chris@1
|
13155 class="cmtt-8"> </span><span
|
Chris@1
|
13156 class="cmtt-8"> </span><span
|
Chris@1
|
13157 class="cmtt-8"> </span><span
|
Chris@1
|
13158 class="cmtt-8"> 0.0019632195,</span><span
|
Chris@1
|
13159 class="cmtt-8"> </span><span
|
Chris@1
|
13160 class="cmtt-8"> 0.0020908006,</span><span
|
Chris@1
|
13161 class="cmtt-8"> </span><span
|
Chris@1
|
13162 class="cmtt-8"> 0.0022266726,</span><span
|
Chris@1
|
13163 class="cmtt-8"> </span><span
|
Chris@1
|
13164 class="cmtt-8"> 0.0023713743,</span>
|
Chris@1
|
13165 <br class="fancyvrb" /><a
|
Chris@1
|
13166 id="x1-125082r41"></a><span
|
Chris@1
|
13167 class="cmr-6">41</span><span
|
Chris@1
|
13168 class="cmtt-8"> </span><span
|
Chris@1
|
13169 class="cmtt-8"> </span><span
|
Chris@1
|
13170 class="cmtt-8"> </span><span
|
Chris@1
|
13171 class="cmtt-8"> 0.0025254795,</span><span
|
Chris@1
|
13172 class="cmtt-8"> </span><span
|
Chris@1
|
13173 class="cmtt-8"> 0.0026895994,</span><span
|
Chris@1
|
13174 class="cmtt-8"> </span><span
|
Chris@1
|
13175 class="cmtt-8"> 0.0028643847,</span><span
|
Chris@1
|
13176 class="cmtt-8"> </span><span
|
Chris@1
|
13177 class="cmtt-8"> 0.0030505286,</span>
|
Chris@1
|
13178 <br class="fancyvrb" /><a
|
Chris@1
|
13179 id="x1-125084r42"></a><span
|
Chris@1
|
13180 class="cmr-6">42</span><span
|
Chris@1
|
13181 class="cmtt-8"> </span><span
|
Chris@1
|
13182 class="cmtt-8"> </span><span
|
Chris@1
|
13183 class="cmtt-8"> </span><span
|
Chris@1
|
13184 class="cmtt-8"> 0.0032487691,</span><span
|
Chris@1
|
13185 class="cmtt-8"> </span><span
|
Chris@1
|
13186 class="cmtt-8"> 0.0034598925,</span><span
|
Chris@1
|
13187 class="cmtt-8"> </span><span
|
Chris@1
|
13188 class="cmtt-8"> 0.0036847358,</span><span
|
Chris@1
|
13189 class="cmtt-8"> </span><span
|
Chris@1
|
13190 class="cmtt-8"> 0.0039241906,</span>
|
Chris@1
|
13191
|
Chris@1
|
13192
|
Chris@1
|
13193
|
Chris@1
|
13194 <br class="fancyvrb" /><a
|
Chris@1
|
13195 id="x1-125086r43"></a><span
|
Chris@1
|
13196 class="cmr-6">43</span><span
|
Chris@1
|
13197 class="cmtt-8"> </span><span
|
Chris@1
|
13198 class="cmtt-8"> </span><span
|
Chris@1
|
13199 class="cmtt-8"> </span><span
|
Chris@1
|
13200 class="cmtt-8"> 0.0041792066,</span><span
|
Chris@1
|
13201 class="cmtt-8"> </span><span
|
Chris@1
|
13202 class="cmtt-8"> 0.0044507950,</span><span
|
Chris@1
|
13203 class="cmtt-8"> </span><span
|
Chris@1
|
13204 class="cmtt-8"> 0.0047400328,</span><span
|
Chris@1
|
13205 class="cmtt-8"> </span><span
|
Chris@1
|
13206 class="cmtt-8"> 0.0050480668,</span>
|
Chris@1
|
13207 <br class="fancyvrb" /><a
|
Chris@1
|
13208 id="x1-125088r44"></a><span
|
Chris@1
|
13209 class="cmr-6">44</span><span
|
Chris@1
|
13210 class="cmtt-8"> </span><span
|
Chris@1
|
13211 class="cmtt-8"> </span><span
|
Chris@1
|
13212 class="cmtt-8"> </span><span
|
Chris@1
|
13213 class="cmtt-8"> 0.0053761186,</span><span
|
Chris@1
|
13214 class="cmtt-8"> </span><span
|
Chris@1
|
13215 class="cmtt-8"> 0.0057254891,</span><span
|
Chris@1
|
13216 class="cmtt-8"> </span><span
|
Chris@1
|
13217 class="cmtt-8"> 0.0060975636,</span><span
|
Chris@1
|
13218 class="cmtt-8"> </span><span
|
Chris@1
|
13219 class="cmtt-8"> 0.0064938176,</span>
|
Chris@1
|
13220 <br class="fancyvrb" /><a
|
Chris@1
|
13221 id="x1-125090r45"></a><span
|
Chris@1
|
13222 class="cmr-6">45</span><span
|
Chris@1
|
13223 class="cmtt-8"> </span><span
|
Chris@1
|
13224 class="cmtt-8"> </span><span
|
Chris@1
|
13225 class="cmtt-8"> </span><span
|
Chris@1
|
13226 class="cmtt-8"> 0.0069158225,</span><span
|
Chris@1
|
13227 class="cmtt-8"> </span><span
|
Chris@1
|
13228 class="cmtt-8"> 0.0073652516,</span><span
|
Chris@1
|
13229 class="cmtt-8"> </span><span
|
Chris@1
|
13230 class="cmtt-8"> 0.0078438871,</span><span
|
Chris@1
|
13231 class="cmtt-8"> </span><span
|
Chris@1
|
13232 class="cmtt-8"> 0.0083536271,</span>
|
Chris@1
|
13233 <br class="fancyvrb" /><a
|
Chris@1
|
13234 id="x1-125092r46"></a><span
|
Chris@1
|
13235 class="cmr-6">46</span><span
|
Chris@1
|
13236 class="cmtt-8"> </span><span
|
Chris@1
|
13237 class="cmtt-8"> </span><span
|
Chris@1
|
13238 class="cmtt-8"> </span><span
|
Chris@1
|
13239 class="cmtt-8"> 0.0088964928,</span><span
|
Chris@1
|
13240 class="cmtt-8"> </span><span
|
Chris@1
|
13241 class="cmtt-8"> 0.009474637,</span><span
|
Chris@1
|
13242 class="cmtt-8"> </span><span
|
Chris@1
|
13243 class="cmtt-8"> </span><span
|
Chris@1
|
13244 class="cmtt-8"> 0.010090352,</span><span
|
Chris@1
|
13245 class="cmtt-8"> </span><span
|
Chris@1
|
13246 class="cmtt-8"> </span><span
|
Chris@1
|
13247 class="cmtt-8"> 0.010746080,</span>
|
Chris@1
|
13248 <br class="fancyvrb" /><a
|
Chris@1
|
13249 id="x1-125094r47"></a><span
|
Chris@1
|
13250 class="cmr-6">47</span><span
|
Chris@1
|
13251 class="cmtt-8"> </span><span
|
Chris@1
|
13252 class="cmtt-8"> </span><span
|
Chris@1
|
13253 class="cmtt-8"> </span><span
|
Chris@1
|
13254 class="cmtt-8"> 0.011444421,</span><span
|
Chris@1
|
13255 class="cmtt-8"> </span><span
|
Chris@1
|
13256 class="cmtt-8"> </span><span
|
Chris@1
|
13257 class="cmtt-8"> 0.012188144,</span><span
|
Chris@1
|
13258 class="cmtt-8"> </span><span
|
Chris@1
|
13259 class="cmtt-8"> </span><span
|
Chris@1
|
13260 class="cmtt-8"> 0.012980198,</span><span
|
Chris@1
|
13261 class="cmtt-8"> </span><span
|
Chris@1
|
13262 class="cmtt-8"> </span><span
|
Chris@1
|
13263 class="cmtt-8"> 0.013823725,</span>
|
Chris@1
|
13264 <br class="fancyvrb" /><a
|
Chris@1
|
13265 id="x1-125096r48"></a><span
|
Chris@1
|
13266 class="cmr-6">48</span><span
|
Chris@1
|
13267 class="cmtt-8"> </span><span
|
Chris@1
|
13268 class="cmtt-8"> </span><span
|
Chris@1
|
13269 class="cmtt-8"> </span><span
|
Chris@1
|
13270 class="cmtt-8"> 0.014722068,</span><span
|
Chris@1
|
13271 class="cmtt-8"> </span><span
|
Chris@1
|
13272 class="cmtt-8"> </span><span
|
Chris@1
|
13273 class="cmtt-8"> 0.015678791,</span><span
|
Chris@1
|
13274 class="cmtt-8"> </span><span
|
Chris@1
|
13275 class="cmtt-8"> </span><span
|
Chris@1
|
13276 class="cmtt-8"> 0.016697687,</span><span
|
Chris@1
|
13277 class="cmtt-8"> </span><span
|
Chris@1
|
13278 class="cmtt-8"> </span><span
|
Chris@1
|
13279 class="cmtt-8"> 0.017782797,</span>
|
Chris@1
|
13280 <br class="fancyvrb" /><a
|
Chris@1
|
13281 id="x1-125098r49"></a><span
|
Chris@1
|
13282 class="cmr-6">49</span><span
|
Chris@1
|
13283 class="cmtt-8"> </span><span
|
Chris@1
|
13284 class="cmtt-8"> </span><span
|
Chris@1
|
13285 class="cmtt-8"> </span><span
|
Chris@1
|
13286 class="cmtt-8"> 0.018938423,</span><span
|
Chris@1
|
13287 class="cmtt-8"> </span><span
|
Chris@1
|
13288 class="cmtt-8"> </span><span
|
Chris@1
|
13289 class="cmtt-8"> 0.020169149,</span><span
|
Chris@1
|
13290 class="cmtt-8"> </span><span
|
Chris@1
|
13291 class="cmtt-8"> </span><span
|
Chris@1
|
13292 class="cmtt-8"> 0.021479854,</span><span
|
Chris@1
|
13293 class="cmtt-8"> </span><span
|
Chris@1
|
13294 class="cmtt-8"> </span><span
|
Chris@1
|
13295 class="cmtt-8"> 0.022875735,</span>
|
Chris@1
|
13296 <br class="fancyvrb" /><a
|
Chris@1
|
13297 id="x1-125100r50"></a><span
|
Chris@1
|
13298 class="cmr-6">50</span><span
|
Chris@1
|
13299 class="cmtt-8"> </span><span
|
Chris@1
|
13300 class="cmtt-8"> </span><span
|
Chris@1
|
13301 class="cmtt-8"> </span><span
|
Chris@1
|
13302 class="cmtt-8"> 0.024362330,</span><span
|
Chris@1
|
13303 class="cmtt-8"> </span><span
|
Chris@1
|
13304 class="cmtt-8"> </span><span
|
Chris@1
|
13305 class="cmtt-8"> 0.025945531,</span><span
|
Chris@1
|
13306 class="cmtt-8"> </span><span
|
Chris@1
|
13307 class="cmtt-8"> </span><span
|
Chris@1
|
13308 class="cmtt-8"> 0.027631618,</span><span
|
Chris@1
|
13309 class="cmtt-8"> </span><span
|
Chris@1
|
13310 class="cmtt-8"> </span><span
|
Chris@1
|
13311 class="cmtt-8"> 0.029427276,</span>
|
Chris@1
|
13312 <br class="fancyvrb" /><a
|
Chris@1
|
13313 id="x1-125102r51"></a><span
|
Chris@1
|
13314 class="cmr-6">51</span><span
|
Chris@1
|
13315 class="cmtt-8"> </span><span
|
Chris@1
|
13316 class="cmtt-8"> </span><span
|
Chris@1
|
13317 class="cmtt-8"> </span><span
|
Chris@1
|
13318 class="cmtt-8"> 0.031339626,</span><span
|
Chris@1
|
13319 class="cmtt-8"> </span><span
|
Chris@1
|
13320 class="cmtt-8"> </span><span
|
Chris@1
|
13321 class="cmtt-8"> 0.033376252,</span><span
|
Chris@1
|
13322 class="cmtt-8"> </span><span
|
Chris@1
|
13323 class="cmtt-8"> </span><span
|
Chris@1
|
13324 class="cmtt-8"> 0.035545228,</span><span
|
Chris@1
|
13325 class="cmtt-8"> </span><span
|
Chris@1
|
13326 class="cmtt-8"> </span><span
|
Chris@1
|
13327 class="cmtt-8"> 0.037855157,</span>
|
Chris@1
|
13328 <br class="fancyvrb" /><a
|
Chris@1
|
13329 id="x1-125104r52"></a><span
|
Chris@1
|
13330 class="cmr-6">52</span><span
|
Chris@1
|
13331 class="cmtt-8"> </span><span
|
Chris@1
|
13332 class="cmtt-8"> </span><span
|
Chris@1
|
13333 class="cmtt-8"> </span><span
|
Chris@1
|
13334 class="cmtt-8"> 0.040315199,</span><span
|
Chris@1
|
13335 class="cmtt-8"> </span><span
|
Chris@1
|
13336 class="cmtt-8"> </span><span
|
Chris@1
|
13337 class="cmtt-8"> 0.042935108,</span><span
|
Chris@1
|
13338 class="cmtt-8"> </span><span
|
Chris@1
|
13339 class="cmtt-8"> </span><span
|
Chris@1
|
13340 class="cmtt-8"> 0.045725273,</span><span
|
Chris@1
|
13341 class="cmtt-8"> </span><span
|
Chris@1
|
13342 class="cmtt-8"> </span><span
|
Chris@1
|
13343 class="cmtt-8"> 0.048696758,</span>
|
Chris@1
|
13344 <br class="fancyvrb" /><a
|
Chris@1
|
13345 id="x1-125106r53"></a><span
|
Chris@1
|
13346 class="cmr-6">53</span><span
|
Chris@1
|
13347 class="cmtt-8"> </span><span
|
Chris@1
|
13348 class="cmtt-8"> </span><span
|
Chris@1
|
13349 class="cmtt-8"> </span><span
|
Chris@1
|
13350 class="cmtt-8"> 0.051861348,</span><span
|
Chris@1
|
13351 class="cmtt-8"> </span><span
|
Chris@1
|
13352 class="cmtt-8"> </span><span
|
Chris@1
|
13353 class="cmtt-8"> 0.055231591,</span><span
|
Chris@1
|
13354 class="cmtt-8"> </span><span
|
Chris@1
|
13355 class="cmtt-8"> </span><span
|
Chris@1
|
13356 class="cmtt-8"> 0.058820850,</span><span
|
Chris@1
|
13357 class="cmtt-8"> </span><span
|
Chris@1
|
13358 class="cmtt-8"> </span><span
|
Chris@1
|
13359 class="cmtt-8"> 0.062643361,</span>
|
Chris@1
|
13360 <br class="fancyvrb" /><a
|
Chris@1
|
13361 id="x1-125108r54"></a><span
|
Chris@1
|
13362 class="cmr-6">54</span><span
|
Chris@1
|
13363 class="cmtt-8"> </span><span
|
Chris@1
|
13364 class="cmtt-8"> </span><span
|
Chris@1
|
13365 class="cmtt-8"> </span><span
|
Chris@1
|
13366 class="cmtt-8"> 0.066714279,</span><span
|
Chris@1
|
13367 class="cmtt-8"> </span><span
|
Chris@1
|
13368 class="cmtt-8"> </span><span
|
Chris@1
|
13369 class="cmtt-8"> 0.071049749,</span><span
|
Chris@1
|
13370 class="cmtt-8"> </span><span
|
Chris@1
|
13371 class="cmtt-8"> </span><span
|
Chris@1
|
13372 class="cmtt-8"> 0.075666962,</span><span
|
Chris@1
|
13373 class="cmtt-8"> </span><span
|
Chris@1
|
13374 class="cmtt-8"> </span><span
|
Chris@1
|
13375 class="cmtt-8"> 0.080584227,</span>
|
Chris@1
|
13376 <br class="fancyvrb" /><a
|
Chris@1
|
13377 id="x1-125110r55"></a><span
|
Chris@1
|
13378 class="cmr-6">55</span><span
|
Chris@1
|
13379 class="cmtt-8"> </span><span
|
Chris@1
|
13380 class="cmtt-8"> </span><span
|
Chris@1
|
13381 class="cmtt-8"> </span><span
|
Chris@1
|
13382 class="cmtt-8"> 0.085821044,</span><span
|
Chris@1
|
13383 class="cmtt-8"> </span><span
|
Chris@1
|
13384 class="cmtt-8"> </span><span
|
Chris@1
|
13385 class="cmtt-8"> 0.091398179,</span><span
|
Chris@1
|
13386 class="cmtt-8"> </span><span
|
Chris@1
|
13387 class="cmtt-8"> </span><span
|
Chris@1
|
13388 class="cmtt-8"> 0.097337747,</span><span
|
Chris@1
|
13389 class="cmtt-8"> </span><span
|
Chris@1
|
13390 class="cmtt-8"> </span><span
|
Chris@1
|
13391 class="cmtt-8"> 0.10366330,</span>
|
Chris@1
|
13392 <br class="fancyvrb" /><a
|
Chris@1
|
13393 id="x1-125112r56"></a><span
|
Chris@1
|
13394 class="cmr-6">56</span><span
|
Chris@1
|
13395 class="cmtt-8"> </span><span
|
Chris@1
|
13396 class="cmtt-8"> </span><span
|
Chris@1
|
13397 class="cmtt-8"> </span><span
|
Chris@1
|
13398 class="cmtt-8"> 0.11039993,</span><span
|
Chris@1
|
13399 class="cmtt-8"> </span><span
|
Chris@1
|
13400 class="cmtt-8"> </span><span
|
Chris@1
|
13401 class="cmtt-8"> </span><span
|
Chris@1
|
13402 class="cmtt-8"> 0.11757434,</span><span
|
Chris@1
|
13403 class="cmtt-8"> </span><span
|
Chris@1
|
13404 class="cmtt-8"> </span><span
|
Chris@1
|
13405 class="cmtt-8"> </span><span
|
Chris@1
|
13406 class="cmtt-8"> 0.12521498,</span><span
|
Chris@1
|
13407 class="cmtt-8"> </span><span
|
Chris@1
|
13408 class="cmtt-8"> </span><span
|
Chris@1
|
13409 class="cmtt-8"> </span><span
|
Chris@1
|
13410 class="cmtt-8"> 0.13335215,</span>
|
Chris@1
|
13411 <br class="fancyvrb" /><a
|
Chris@1
|
13412 id="x1-125114r57"></a><span
|
Chris@1
|
13413 class="cmr-6">57</span><span
|
Chris@1
|
13414 class="cmtt-8"> </span><span
|
Chris@1
|
13415 class="cmtt-8"> </span><span
|
Chris@1
|
13416 class="cmtt-8"> </span><span
|
Chris@1
|
13417 class="cmtt-8"> 0.14201813,</span><span
|
Chris@1
|
13418 class="cmtt-8"> </span><span
|
Chris@1
|
13419 class="cmtt-8"> </span><span
|
Chris@1
|
13420 class="cmtt-8"> </span><span
|
Chris@1
|
13421 class="cmtt-8"> 0.15124727,</span><span
|
Chris@1
|
13422 class="cmtt-8"> </span><span
|
Chris@1
|
13423 class="cmtt-8"> </span><span
|
Chris@1
|
13424 class="cmtt-8"> </span><span
|
Chris@1
|
13425 class="cmtt-8"> 0.16107617,</span><span
|
Chris@1
|
13426 class="cmtt-8"> </span><span
|
Chris@1
|
13427 class="cmtt-8"> </span><span
|
Chris@1
|
13428 class="cmtt-8"> </span><span
|
Chris@1
|
13429 class="cmtt-8"> 0.17154380,</span>
|
Chris@1
|
13430 <br class="fancyvrb" /><a
|
Chris@1
|
13431 id="x1-125116r58"></a><span
|
Chris@1
|
13432 class="cmr-6">58</span><span
|
Chris@1
|
13433 class="cmtt-8"> </span><span
|
Chris@1
|
13434 class="cmtt-8"> </span><span
|
Chris@1
|
13435 class="cmtt-8"> </span><span
|
Chris@1
|
13436 class="cmtt-8"> 0.18269168,</span><span
|
Chris@1
|
13437 class="cmtt-8"> </span><span
|
Chris@1
|
13438 class="cmtt-8"> </span><span
|
Chris@1
|
13439 class="cmtt-8"> </span><span
|
Chris@1
|
13440 class="cmtt-8"> 0.19456402,</span><span
|
Chris@1
|
13441 class="cmtt-8"> </span><span
|
Chris@1
|
13442 class="cmtt-8"> </span><span
|
Chris@1
|
13443 class="cmtt-8"> </span><span
|
Chris@1
|
13444 class="cmtt-8"> 0.20720788,</span><span
|
Chris@1
|
13445 class="cmtt-8"> </span><span
|
Chris@1
|
13446 class="cmtt-8"> </span><span
|
Chris@1
|
13447 class="cmtt-8"> </span><span
|
Chris@1
|
13448 class="cmtt-8"> 0.22067342,</span>
|
Chris@1
|
13449 <br class="fancyvrb" /><a
|
Chris@1
|
13450 id="x1-125118r59"></a><span
|
Chris@1
|
13451 class="cmr-6">59</span><span
|
Chris@1
|
13452 class="cmtt-8"> </span><span
|
Chris@1
|
13453 class="cmtt-8"> </span><span
|
Chris@1
|
13454 class="cmtt-8"> </span><span
|
Chris@1
|
13455 class="cmtt-8"> 0.23501402,</span><span
|
Chris@1
|
13456 class="cmtt-8"> </span><span
|
Chris@1
|
13457 class="cmtt-8"> </span><span
|
Chris@1
|
13458 class="cmtt-8"> </span><span
|
Chris@1
|
13459 class="cmtt-8"> 0.25028656,</span><span
|
Chris@1
|
13460 class="cmtt-8"> </span><span
|
Chris@1
|
13461 class="cmtt-8"> </span><span
|
Chris@1
|
13462 class="cmtt-8"> </span><span
|
Chris@1
|
13463 class="cmtt-8"> 0.26655159,</span><span
|
Chris@1
|
13464 class="cmtt-8"> </span><span
|
Chris@1
|
13465 class="cmtt-8"> </span><span
|
Chris@1
|
13466 class="cmtt-8"> </span><span
|
Chris@1
|
13467 class="cmtt-8"> 0.28387361,</span>
|
Chris@1
|
13468 <br class="fancyvrb" /><a
|
Chris@1
|
13469 id="x1-125120r60"></a><span
|
Chris@1
|
13470 class="cmr-6">60</span><span
|
Chris@1
|
13471 class="cmtt-8"> </span><span
|
Chris@1
|
13472 class="cmtt-8"> </span><span
|
Chris@1
|
13473 class="cmtt-8"> </span><span
|
Chris@1
|
13474 class="cmtt-8"> 0.30232132,</span><span
|
Chris@1
|
13475 class="cmtt-8"> </span><span
|
Chris@1
|
13476 class="cmtt-8"> </span><span
|
Chris@1
|
13477 class="cmtt-8"> </span><span
|
Chris@1
|
13478 class="cmtt-8"> 0.32196786,</span><span
|
Chris@1
|
13479 class="cmtt-8"> </span><span
|
Chris@1
|
13480 class="cmtt-8"> </span><span
|
Chris@1
|
13481 class="cmtt-8"> </span><span
|
Chris@1
|
13482 class="cmtt-8"> 0.34289114,</span><span
|
Chris@1
|
13483 class="cmtt-8"> </span><span
|
Chris@1
|
13484 class="cmtt-8"> </span><span
|
Chris@1
|
13485 class="cmtt-8"> </span><span
|
Chris@1
|
13486 class="cmtt-8"> 0.36517414,</span>
|
Chris@1
|
13487 <br class="fancyvrb" /><a
|
Chris@1
|
13488 id="x1-125122r61"></a><span
|
Chris@1
|
13489 class="cmr-6">61</span><span
|
Chris@1
|
13490 class="cmtt-8"> </span><span
|
Chris@1
|
13491 class="cmtt-8"> </span><span
|
Chris@1
|
13492 class="cmtt-8"> </span><span
|
Chris@1
|
13493 class="cmtt-8"> 0.38890521,</span><span
|
Chris@1
|
13494 class="cmtt-8"> </span><span
|
Chris@1
|
13495 class="cmtt-8"> </span><span
|
Chris@1
|
13496 class="cmtt-8"> </span><span
|
Chris@1
|
13497 class="cmtt-8"> 0.41417847,</span><span
|
Chris@1
|
13498 class="cmtt-8"> </span><span
|
Chris@1
|
13499 class="cmtt-8"> </span><span
|
Chris@1
|
13500 class="cmtt-8"> </span><span
|
Chris@1
|
13501 class="cmtt-8"> 0.44109412,</span><span
|
Chris@1
|
13502 class="cmtt-8"> </span><span
|
Chris@1
|
13503 class="cmtt-8"> </span><span
|
Chris@1
|
13504 class="cmtt-8"> </span><span
|
Chris@1
|
13505 class="cmtt-8"> 0.46975890,</span>
|
Chris@1
|
13506 <br class="fancyvrb" /><a
|
Chris@1
|
13507 id="x1-125124r62"></a><span
|
Chris@1
|
13508 class="cmr-6">62</span><span
|
Chris@1
|
13509 class="cmtt-8"> </span><span
|
Chris@1
|
13510 class="cmtt-8"> </span><span
|
Chris@1
|
13511 class="cmtt-8"> </span><span
|
Chris@1
|
13512 class="cmtt-8"> 0.50028648,</span><span
|
Chris@1
|
13513 class="cmtt-8"> </span><span
|
Chris@1
|
13514 class="cmtt-8"> </span><span
|
Chris@1
|
13515 class="cmtt-8"> </span><span
|
Chris@1
|
13516 class="cmtt-8"> 0.53279791,</span><span
|
Chris@1
|
13517 class="cmtt-8"> </span><span
|
Chris@1
|
13518 class="cmtt-8"> </span><span
|
Chris@1
|
13519 class="cmtt-8"> </span><span
|
Chris@1
|
13520 class="cmtt-8"> 0.56742212,</span><span
|
Chris@1
|
13521 class="cmtt-8"> </span><span
|
Chris@1
|
13522 class="cmtt-8"> </span><span
|
Chris@1
|
13523 class="cmtt-8"> </span><span
|
Chris@1
|
13524 class="cmtt-8"> 0.60429640,</span>
|
Chris@1
|
13525 <br class="fancyvrb" /><a
|
Chris@1
|
13526 id="x1-125126r63"></a><span
|
Chris@1
|
13527 class="cmr-6">63</span><span
|
Chris@1
|
13528 class="cmtt-8"> </span><span
|
Chris@1
|
13529 class="cmtt-8"> </span><span
|
Chris@1
|
13530 class="cmtt-8"> </span><span
|
Chris@1
|
13531 class="cmtt-8"> 0.64356699,</span><span
|
Chris@1
|
13532 class="cmtt-8"> </span><span
|
Chris@1
|
13533 class="cmtt-8"> </span><span
|
Chris@1
|
13534 class="cmtt-8"> </span><span
|
Chris@1
|
13535 class="cmtt-8"> 0.68538959,</span><span
|
Chris@1
|
13536 class="cmtt-8"> </span><span
|
Chris@1
|
13537 class="cmtt-8"> </span><span
|
Chris@1
|
13538 class="cmtt-8"> </span><span
|
Chris@1
|
13539 class="cmtt-8"> 0.72993007,</span><span
|
Chris@1
|
13540 class="cmtt-8"> </span><span
|
Chris@1
|
13541 class="cmtt-8"> </span><span
|
Chris@1
|
13542 class="cmtt-8"> </span><span
|
Chris@1
|
13543 class="cmtt-8"> 0.77736504,</span>
|
Chris@1
|
13544 <br class="fancyvrb" /><a
|
Chris@1
|
13545 id="x1-125128r64"></a><span
|
Chris@1
|
13546 class="cmr-6">64</span><span
|
Chris@1
|
13547 class="cmtt-8"> </span><span
|
Chris@1
|
13548 class="cmtt-8"> </span><span
|
Chris@1
|
13549 class="cmtt-8"> </span><span
|
Chris@1
|
13550 class="cmtt-8"> 0.82788260,</span><span
|
Chris@1
|
13551 class="cmtt-8"> </span><span
|
Chris@1
|
13552 class="cmtt-8"> </span><span
|
Chris@1
|
13553 class="cmtt-8"> </span><span
|
Chris@1
|
13554 class="cmtt-8"> 0.88168307,</span><span
|
Chris@1
|
13555 class="cmtt-8"> </span><span
|
Chris@1
|
13556 class="cmtt-8"> </span><span
|
Chris@1
|
13557 class="cmtt-8"> </span><span
|
Chris@1
|
13558 class="cmtt-8"> 0.9389798,</span><span
|
Chris@1
|
13559 class="cmtt-8"> </span><span
|
Chris@1
|
13560 class="cmtt-8"> </span><span
|
Chris@1
|
13561 class="cmtt-8"> </span><span
|
Chris@1
|
13562 class="cmtt-8"> </span><span
|
Chris@1
|
13563 class="cmtt-8"> 1.</span>
|
Chris@1
|
13564 </div>
|
Chris@1
|
13565
|
Chris@1
|
13566
|
Chris@1
|
13567
|
Chris@1
|
13568
|
Chris@1
|
13569
|
Chris@1
|
13570
|
Chris@1
|
13571 <h3 class="sectionHead"><span class="titlemark">A. </span> <a
|
Chris@1
|
13572 id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3>
|
Chris@1
|
13573 <!--l. 6--><p class="noindent" >
|
Chris@1
|
13574 <h4 class="subsectionHead"><span class="titlemark">A.1. </span> <a
|
Chris@1
|
13575 id="x1-127000A.1"></a>Overview</h4>
|
Chris@1
|
13576 <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
|
Chris@1
|
13577 compressed audio packet data into file form.
|
Chris@1
|
13578 <!--l. 12--><p class="noindent" >The <a
|
Chris@1
|
13579 href="#x1-20001">Section 1</a>, “<a
|
Chris@1
|
13580 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>” provides an overview of the construction of
|
Chris@1
|
13581 Vorbis audio packets.
|
Chris@1
|
13582 <!--l. 15--><p class="noindent" >The <a
|
Chris@1
|
13583 href="oggstream.html" >Ogg bitstream overview</a> and <a
|
Chris@1
|
13584 href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
|
Chris@1
|
13585 descriptions of Ogg transport streams. This specification document assumes a working
|
Chris@1
|
13586 knowledge of the concepts covered in these named backround documents. Please read them
|
Chris@1
|
13587 first.
|
Chris@1
|
13588 <!--l. 22--><p class="noindent" >
|
Chris@1
|
13589 <h5 class="subsubsectionHead"><span class="titlemark">A.1.1. </span> <a
|
Chris@1
|
13590 id="x1-128000A.1.1"></a>Restrictions</h5>
|
Chris@1
|
13591 <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
|
Chris@1
|
13592 streams in degenerate, unmultiplexed form only. That is:
|
Chris@1
|
13593 <ul class="itemize1">
|
Chris@1
|
13594 <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
|
Chris@1
|
13595 </li>
|
Chris@1
|
13596 <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
|
Chris@1
|
13597 (links).
|
Chris@1
|
13598 </li>
|
Chris@1
|
13599 <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
|
Chris@1
|
13600 per link)
|
Chris@1
|
13601 </li></ul>
|
Chris@1
|
13602
|
Chris@1
|
13603
|
Chris@1
|
13604
|
Chris@1
|
13605 <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
|
Chris@1
|
13606 types into a multi-stream Ogg file. At the time this document was written, Ogg was
|
Chris@1
|
13607 becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
|
Chris@1
|
13608 audio. However, a ’Vorbis I audio file’ is taken to imply Vorbis audio existing alone
|
Chris@1
|
13609 within a degenerate Ogg stream. A compliant ’Vorbis audio player’ is not required to
|
Chris@1
|
13610 implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
|
Chris@1
|
13611 stream (naturally, application authors are encouraged to support full multiplexed Ogg
|
Chris@1
|
13612 handling).
|
Chris@1
|
13613 <!--l. 55--><p class="noindent" >
|
Chris@1
|
13614 <h5 class="subsubsectionHead"><span class="titlemark">A.1.2. </span> <a
|
Chris@1
|
13615 id="x1-129000A.1.2"></a>MIME type</h5>
|
Chris@1
|
13616 <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
|
Chris@1
|
13617 applications should use <span
|
Chris@1
|
13618 class="cmtt-12">application/ogg</span>, while visual media should use <span
|
Chris@1
|
13619 class="cmtt-12">video/ogg</span>, and audio
|
Chris@1
|
13620 <span
|
Chris@1
|
13621 class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
|
Chris@1
|
13622 encapsulated Vorbis should use <span
|
Chris@1
|
13623 class="cmtt-12">audio/vorbis </span>+ <span
|
Chris@1
|
13624 class="cmtt-12">audio/vorbis-config</span>.
|
Chris@1
|
13625 <!--l. 65--><p class="noindent" >
|
Chris@1
|
13626 <h4 class="subsectionHead"><span class="titlemark">A.2. </span> <a
|
Chris@1
|
13627 id="x1-130000A.2"></a>Encapsulation</h4>
|
Chris@1
|
13628 <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
|
Chris@1
|
13629 <ul class="itemize1">
|
Chris@1
|
13630 <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
|
Chris@1
|
13631 as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
|
Chris@1
|
13632 results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
|
Chris@1
|
13633 stream.
|
Chris@1
|
13634 </li>
|
Chris@1
|
13635 <li class="itemize">This first page is marked ’beginning of stream’ in the page flags.
|
Chris@1
|
13636 </li>
|
Chris@1
|
13637 <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
|
Chris@1
|
13638 more pages beginning on the second page of the logical stream. However many pages
|
Chris@1
|
13639 they span, the third header packet finishes the page on which it ends. The next (first
|
Chris@1
|
13640 audio) packet must begin on a fresh page.
|
Chris@1
|
13641
|
Chris@1
|
13642
|
Chris@1
|
13643
|
Chris@1
|
13644 </li>
|
Chris@1
|
13645 <li class="itemize">The granule position of these first pages containing only headers is zero.
|
Chris@1
|
13646 </li>
|
Chris@1
|
13647 <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
|
Chris@1
|
13648 </li>
|
Chris@1
|
13649 <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
|
Chris@1
|
13650 </li>
|
Chris@1
|
13651 <li class="itemize">The last page is marked ’end of stream’ in the page flags.
|
Chris@1
|
13652 </li>
|
Chris@1
|
13653 <li class="itemize">Vorbis packets may span page boundaries.
|
Chris@1
|
13654 </li>
|
Chris@1
|
13655 <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
|
Chris@1
|
13656 samples (per channel; a stereo stream’s granule position does not increment at twice
|
Chris@1
|
13657 the speed of a mono stream).
|
Chris@1
|
13658 </li>
|
Chris@1
|
13659 <li class="itemize">The granule position of a page represents the end PCM sample position of the last
|
Chris@1
|
13660 packet <span
|
Chris@1
|
13661 class="cmti-12">completed </span>on that page. The ’last PCM sample’ is the last complete sample
|
Chris@1
|
13662 returned by decode, not an internal sample awaiting lapping with a subsequent block.
|
Chris@1
|
13663 A page that is entirely spanned by a single packet (that completes on a subsequent
|
Chris@1
|
13664 page) has no granule position, and the granule position is set to ’-1’.
|
Chris@1
|
13665 <!--l. 126--><p class="noindent" >Note that the last decoded (fully lapped) PCM sample from a packet is not
|
Chris@1
|
13666 necessarily the middle sample from that block. If, eg, the current Vorbis packet
|
Chris@1
|
13667 encodes a ”long block” and the next Vorbis packet encodes a ”short block”, the last
|
Chris@1
|
13668 decodable sample from the current packet be at position (3*long_block_length/4) -
|
Chris@1
|
13669 (short_block_length/4).
|
Chris@1
|
13670 </li>
|
Chris@1
|
13671 <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
|
Chris@1
|
13672 started at position zero. Although the granule position belongs to the last completed
|
Chris@1
|
13673 packet on the page and a valid granule position must be positive, by inference it may
|
Chris@1
|
13674 indicate that the PCM position of the beginning of audio is positive or negative.
|
Chris@1
|
13675 <ul class="itemize2">
|
Chris@1
|
13676 <li class="itemize">A positive starting value simply indicates that this stream begins at some
|
Chris@1
|
13677 positive time offset, potentially within a larger program. This is a common case
|
Chris@1
|
13678 when connecting to the middle of broadcast stream.
|
Chris@1
|
13679 </li>
|
Chris@1
|
13680 <li class="itemize">A negative value indicates that output samples preceeding time zero should be
|
Chris@1
|
13681
|
Chris@1
|
13682
|
Chris@1
|
13683
|
Chris@1
|
13684 discarded during decoding; this technique is used to allow sample-granularity
|
Chris@1
|
13685 editing of the stream start time of already-encoded Vorbis streams. The number
|
Chris@1
|
13686 of samples to be discarded must not exceed the overlap-add span of the first two
|
Chris@1
|
13687 audio packets.
|
Chris@1
|
13688 </li></ul>
|
Chris@1
|
13689 <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
|
Chris@1
|
13690 second finished audio packet must flush the page on which it appears and the
|
Chris@1
|
13691 third packet begin a fresh page. This allows the decoder to always be able to
|
Chris@1
|
13692 perform PCM position adjustments before needing to return any PCM data from
|
Chris@1
|
13693 synthesis, resulting in correct positioning information without any aditional seeking
|
Chris@1
|
13694 logic.
|
Chris@1
|
13695 <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a
|
Chris@1
|
13696 id="x1-131000A.2"></a><span
|
Chris@1
|
13697 class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
|
Chris@1
|
13698 incorrect positioning information for seeking operations at the very beginning of the
|
Chris@1
|
13699 stream.
|
Chris@1
|
13700 </li>
|
Chris@1
|
13701 <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
|
Chris@1
|
13702 final packet would normally return is used to end the stream on other than even frame
|
Chris@1
|
13703 boundaries. The difference between the actual available data returned and the
|
Chris@1
|
13704 declared amount indicates how many trailing samples to discard from the decoding
|
Chris@1
|
13705 process.
|
Chris@1
|
13706 </li></ul>
|
Chris@1
|
13707
|
Chris@1
|
13708
|
Chris@1
|
13709
|
Chris@1
|
13710 <h3 class="sectionHead"><span class="titlemark">B. </span> <a
|
Chris@1
|
13711 id="x1-132000B"></a>Vorbis encapsulation in RTP</h3>
|
Chris@1
|
13712 <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span
|
Chris@1
|
13713 class="cmti-12">“RTP Payload Format for Vorbis Encoded Audio” </span>for description of
|
Chris@1
|
13714 how to embed Vorbis audio in an RTP stream.
|
Chris@1
|
13715
|
Chris@1
|
13716
|
Chris@1
|
13717
|
Chris@1
|
13718
|
Chris@1
|
13719
|
Chris@1
|
13720
|
Chris@1
|
13721 <h3 class="likesectionHead"><a
|
Chris@1
|
13722 id="x1-133000B"></a>Colophon</h3>
|
Chris@1
|
13723 <!--l. 6--><p class="noindent" ><img
|
Chris@1
|
13724 src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics
|
Chris@1
|
13725 name="Vorbis_I_spec13x.png" src="xifish.pdf"
|
Chris@1
|
13726 -->
|
Chris@1
|
13727 <!--l. 10--><p class="noindent" >Ogg is a <a
|
Chris@1
|
13728 href="http://www.xiph.org/" >Xiph.Org Foundation</a> effort to protect essential tenets of Internet multimedia from
|
Chris@1
|
13729 corporate hostage-taking; Open Source is the net’s greatest tool to keep everyone honest. See
|
Chris@1
|
13730 <a
|
Chris@1
|
13731 href="http://www.xiph.org/about.html" >About the Xiph.Org Foundation</a> for details.
|
Chris@1
|
13732 <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
|
Chris@1
|
13733 Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.Org
|
Chris@1
|
13734 Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
|
Chris@1
|
13735 and certify specification compliance.
|
Chris@1
|
13736 <!--l. 23--><p class="noindent" >Xiph.Org’s Vorbis software CODEC implementation is distributed under a BSD-like license. This
|
Chris@1
|
13737 does not restrict third parties from distributing independent implementations of Vorbis software
|
Chris@1
|
13738 under other licenses.
|
Chris@1
|
13739 <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.Org Foundation and their logos are trademarks (tm) of the <a
|
Chris@1
|
13740 href="http://www.xiph.org/" >Xiph.Org
|
Chris@1
|
13741 Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.Org Foundation. All rights
|
Chris@1
|
13742 reserved.
|
Chris@1
|
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
|
Chris@1
|
13744 class="E">E</span>X</span></span>.
|
Chris@1
|
13745
|
Chris@1
|
13746
|
Chris@1
|
13747
|
Chris@1
|
13748 <h3 class="likesectionHead"><a
|
Chris@1
|
13749 id="x1-134000B"></a>References</h3>
|
Chris@1
|
13750 <!--l. 125--><p class="noindent" >
|
Chris@1
|
13751 <div class="thebibliography">
|
Chris@1
|
13752 <p class="bibitem" ><span class="biblabel">
|
Chris@1
|
13753 [1]<span class="bibsp">   </span></span><a
|
Chris@1
|
13754 id="XSporer/Brandenburg/Edler"></a>T. Sporer, K. Brandenburg and
|
Chris@1
|
13755 B. Edler, The use of multirate filter banks for coding of high quality digital audio,
|
Chris@1
|
13756 <a
|
Chris@1
|
13757 href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span
|
Chris@1
|
13758 class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
|
Chris@1
|
13759 </p>
|
Chris@1
|
13760 </div>
|
Chris@1
|
13761
|
Chris@1
|
13762 </body></html>
|
Chris@1
|
13763
|
Chris@1
|
13764
|
Chris@1
|
13765
|
Chris@1
|
13766
|