1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 2 "http://www.w3.org/TR/html4/loose.dtd"> 3 <html > 4 <head><title>Vorbis I specification</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 6 <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)"> 7 <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)"> 8 <!-- html --> 9 <meta name="src" content="Vorbis_I_spec.tex"> 10 <meta name="date" content="2010-02-03 17:32:00"> 11 <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css"> 12 </head><body 13 > 14 <div class="maketitle"> 15 16 17 18 19 20 21 22 <h2 class="titleHead">Vorbis I specification</h2> 23 <div class="author" ><span 24 class="cmr-17">Xiph.org Foundation</span></div> 25 <br /> 26 <div class="date" ><span 27 class="cmr-17">February 3, 2010</span></div> 28 </div> 29 <h3 class="likesectionHead"><a 30 id="x1-1000"></a>Contents</h3> 31 <div class="tableofcontents"> 32  <span class="sectionToc" >1 <a 33 href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span> 34 <br />  <span class="subsectionToc" >1.1 <a 35 href="#x1-30001.1" id="QQ2-1-3">Overview</a></span> 36 <br />   <span class="subsubsectionToc" >1.1.1 <a 37 href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span> 38 <br />   <span class="subsubsectionToc" >1.1.2 <a 39 href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span> 40 <br />   <span class="subsubsectionToc" >1.1.3 <a 41 href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span> 42 <br />   <span class="subsubsectionToc" >1.1.4 <a 43 href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span> 44 <br />   <span class="subsubsectionToc" >1.1.5 <a 45 href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span> 46 <br />   <span class="subsubsectionToc" >1.1.6 <a 47 href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span> 48 <br />  <span class="subsectionToc" >1.2 <a 49 href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span> 50 <br />   <span class="subsubsectionToc" >1.2.1 <a 51 href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span> 52 <br />   <span class="subsubsectionToc" >1.2.2 <a 53 href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span> 54 55 56 57 <br />   <span class="subsubsectionToc" >1.2.3 <a 58 href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span> 59 <br />   <span class="subsubsectionToc" >1.2.4 <a 60 href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span> 61 <br />   <span class="subsubsectionToc" >1.2.5 <a 62 href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span> 63 <br />   <span class="subsubsectionToc" >1.2.6 <a 64 href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span> 65 <br />  <span class="subsectionToc" >1.3 <a 66 href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span> 67 <br />   <span class="subsubsectionToc" >1.3.1 <a 68 href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span> 69 <br />   <span class="subsubsectionToc" >1.3.2 <a 70 href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span> 71 <br /> <span class="sectionToc" >2 <a 72 href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span> 73 <br />  <span class="subsectionToc" >2.1 <a 74 href="#x1-370002.1" id="QQ2-1-40">Overview</a></span> 75 <br />   <span class="subsubsectionToc" >2.1.1 <a 76 href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span> 77 <br />   <span class="subsubsectionToc" >2.1.2 <a 78 href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span> 79 <br />   <span class="subsubsectionToc" >2.1.3 <a 80 href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span> 81 <br />   <span class="subsubsectionToc" >2.1.4 <a 82 href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span> 83 <br />   <span class="subsubsectionToc" >2.1.5 <a 84 href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span> 85 <br />   <span class="subsubsectionToc" >2.1.6 <a 86 href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span> 87 <br />   <span class="subsubsectionToc" >2.1.7 <a 88 href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span> 89 <br />   <span class="subsubsectionToc" >2.1.8 <a 90 href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span> 91 <br />   <span class="subsubsectionToc" >2.1.9 <a 92 href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span> 93 <br /> <span class="sectionToc" >3 <a 94 href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span> 95 <br />  <span class="subsectionToc" >3.1 <a 96 href="#x1-480003.1" id="QQ2-1-51">Overview</a></span> 97 <br />   <span class="subsubsectionToc" >3.1.1 <a 98 href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span> 99 <br />  <span class="subsectionToc" >3.2 <a 100 href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span> 101 <br />   <span class="subsubsectionToc" >3.2.1 <a 102 href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span> 103 <br />  <span class="subsectionToc" >3.3 <a 104 href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span> 105 <br /> <span class="sectionToc" >4 <a 106 href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span> 107 <br />  <span class="subsectionToc" >4.1 <a 108 href="#x1-590004.1" id="QQ2-1-64">Overview</a></span> 109 <br />  <span class="subsectionToc" >4.2 <a 110 href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span> 111 <br />   <span class="subsubsectionToc" >4.2.1 <a 112 href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span> 113 <br />   <span class="subsubsectionToc" >4.2.2 <a 114 href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span> 115 116 117 118 <br />   <span class="subsubsectionToc" >4.2.3 <a 119 href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span> 120 <br />   <span class="subsubsectionToc" >4.2.4 <a 121 href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span> 122 <br />  <span class="subsectionToc" >4.3 <a 123 href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span> 124 <br />   <span class="subsubsectionToc" >4.3.1 <a 125 href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span> 126 <br />   <span class="subsubsectionToc" >4.3.2 <a 127 href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span> 128 <br />   <span class="subsubsectionToc" >4.3.3 <a 129 href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span> 130 <br />   <span class="subsubsectionToc" >4.3.4 <a 131 href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span> 132 <br />   <span class="subsubsectionToc" >4.3.5 <a 133 href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span> 134 <br />   <span class="subsubsectionToc" >4.3.6 <a 135 href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span> 136 <br />   <span class="subsubsectionToc" >4.3.7 <a 137 href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span> 138 <br />   <span class="subsubsectionToc" >4.3.8 <a 139 href="#x1-790004.3.8" id="QQ2-1-85">overlap˙add</a></span> 140 <br />   <span class="subsubsectionToc" >4.3.9 <a 141 href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span> 142 <br /> <span class="sectionToc" >5 <a 143 href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span> 144 <br />  <span class="subsectionToc" >5.1 <a 145 href="#x1-820005.1" id="QQ2-1-88">Overview</a></span> 146 <br />  <span class="subsectionToc" >5.2 <a 147 href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span> 148 <br />   <span class="subsubsectionToc" >5.2.1 <a 149 href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span> 150 <br />   <span class="subsubsectionToc" >5.2.2 <a 151 href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span> 152 <br />   <span class="subsubsectionToc" >5.2.3 <a 153 href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span> 154 <br /> <span class="sectionToc" >6 <a 155 href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span> 156 <br />  <span class="subsectionToc" >6.1 <a 157 href="#x1-900006.1" id="QQ2-1-96">Overview</a></span> 158 <br />  <span class="subsectionToc" >6.2 <a 159 href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span> 160 <br />   <span class="subsubsectionToc" >6.2.1 <a 161 href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span> 162 <br />   <span class="subsubsectionToc" >6.2.2 <a 163 href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span> 164 <br />   <span class="subsubsectionToc" >6.2.3 <a 165 href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span> 166 <br /> <span class="sectionToc" >7 <a 167 href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span> 168 <br />  <span class="subsectionToc" >7.1 <a 169 href="#x1-960007.1" id="QQ2-1-102">Overview</a></span> 170 <br />  <span class="subsectionToc" >7.2 <a 171 href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span> 172 <br />   <span class="subsubsectionToc" >7.2.1 <a 173 href="#x1-980007.2.1" id="QQ2-1-104">model</a></span> 174 <br />   <span class="subsubsectionToc" >7.2.2 <a 175 href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span> 176 177 178 179 <br /> <span class="sectionToc" >8 <a 180 href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span> 181 <br />  <span class="subsectionToc" >8.1 <a 182 href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span> 183 <br />  <span class="subsectionToc" >8.2 <a 184 href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span> 185 <br />  <span class="subsectionToc" >8.3 <a 186 href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span> 187 <br />  <span class="subsectionToc" >8.4 <a 188 href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span> 189 <br />  <span class="subsectionToc" >8.5 <a 190 href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span> 191 <br />  <span class="subsectionToc" >8.6 <a 192 href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span> 193 <br />   <span class="subsubsectionToc" >8.6.1 <a 194 href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span> 195 <br />   <span class="subsubsectionToc" >8.6.2 <a 196 href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span> 197 <br />   <span class="subsubsectionToc" >8.6.3 <a 198 href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span> 199 <br />   <span class="subsubsectionToc" >8.6.4 <a 200 href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span> 201 <br />   <span class="subsubsectionToc" >8.6.5 <a 202 href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span> 203 <br /> <span class="sectionToc" >9 <a 204 href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span> 205 <br />  <span class="subsectionToc" >9.1 <a 206 href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span> 207 <br />  <span class="subsectionToc" >9.2 <a 208 href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span> 209 <br />   <span class="subsubsectionToc" >9.2.1 <a 210 href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span> 211 <br />   <span class="subsubsectionToc" >9.2.2 <a 212 href="#x1-1180009.2.2" id="QQ2-1-130">float32˙unpack</a></span> 213 <br />   <span class="subsubsectionToc" >9.2.3 <a 214 href="#x1-1190009.2.3" id="QQ2-1-131">lookup1˙values</a></span> 215 <br />   <span class="subsubsectionToc" >9.2.4 <a 216 href="#x1-1200009.2.4" id="QQ2-1-132">low˙neighbor</a></span> 217 <br />   <span class="subsubsectionToc" >9.2.5 <a 218 href="#x1-1210009.2.5" id="QQ2-1-133">high˙neighbor</a></span> 219 <br />   <span class="subsubsectionToc" >9.2.6 <a 220 href="#x1-1220009.2.6" id="QQ2-1-134">render˙point</a></span> 221 <br />   <span class="subsubsectionToc" >9.2.7 <a 222 href="#x1-1230009.2.7" id="QQ2-1-135">render˙line</a></span> 223 <br /> <span class="sectionToc" >10 <a 224 href="#x1-12400010" id="QQ2-1-136">Tables</a></span> 225 <br />  <span class="subsectionToc" >10.1 <a 226 href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span> 227 <br /> <span class="sectionToc" >A <a 228 href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span> 229 <br />  <span class="subsectionToc" >A.1 <a 230 href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span> 231 <br />   <span class="subsubsectionToc" >A.1.1 <a 232 href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span> 233 <br />   <span class="subsubsectionToc" >A.1.2 <a 234 href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span> 235 <br />  <span class="subsectionToc" >A.2 <a 236 href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span> 237 238 239 240 <br /> <span class="sectionToc" >B <a 241 href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span> 242 </div> 243 244 245 246 <h3 class="sectionHead"><span class="titlemark">1 </span> <a 247 id="x1-20001"></a>Introduction and Description</h3> 248 <!--l. 6--><p class="noindent" > 249 <h4 class="subsectionHead"><span class="titlemark">1.1 </span> <a 250 id="x1-30001.1"></a>Overview</h4> 251 <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec’s construction. A bit-by-bit 252 specification appears beginning in <a 253 href="#x1-580004">Section 4</a>, “<a 254 href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>”. The later 255 sections assume a high-level understanding of the Vorbis decode process, which is provided 256 here. 257 <!--l. 15--><p class="noindent" > 258 <h5 class="subsubsectionHead"><span class="titlemark">1.1.1 </span> <a 259 id="x1-40001.1.1"></a>Application</h5> 260 <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder 261 flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At 262 the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same 263 league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT 264 rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower 265 and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel 266 representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255 267 discrete channels). 268 <!--l. 29--><p class="noindent" > 269 <h5 class="subsubsectionHead"><span class="titlemark">1.1.2 </span> <a 270 id="x1-50001.1.2"></a>Classification</h5> 271 <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete 272 Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in 273 Vorbis II to offer better transient response and reproduction using a transform better suited to 274 localized time events. 275 276 277 278 <!--l. 37--><p class="noindent" > 279 <h5 class="subsubsectionHead"><span class="titlemark">1.1.3 </span> <a 280 id="x1-60001.1.3"></a>Assumptions</h5> 281 <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple, 282 low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does 283 require more working memory as Vorbis has no static probability model; the vector codebooks 284 used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis 285 bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to 286 which they are pre-decoded into a cache is the dominant factor in decoder memory 287 usage. 288 <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it 289 is solely a method of accepting input audio, dividing it into individual frames and 290 compressing these frames into raw, unformatted ’packets’. The decoder then accepts 291 these raw packets in sequence, decodes them, synthesizes audio frames from them, and 292 reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form 293 variable bit rate (VBR) codec and packets have no minimum size, maximum size, or 294 fixed/expected size. Packets are designed that they may be truncated (or padded) 295 and remain decodable; this is not to be considered an error condition and is used 296 extensively in bitrate management in peeling. Both the transport mechanism and 297 decoder must allow that a packet may be any size, or end before or after packet decode 298 expects. 299 <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form 300 framing, sync, positioning and error correction in accordance with these design assumptions, such 301 as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this 302 document, we will assume that Vorbis is to be embedded in an Ogg stream specifically, 303 although this is by no means a requirement or fundamental assumption in the Vorbis 304 design. 305 <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a 306 href="#x1-126000A">Section A</a>, 307 “<a 308 href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>”. 309 <!--l. 77--><p class="noindent" > 310 <h5 class="subsubsectionHead"><span class="titlemark">1.1.4 </span> <a 311 id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5> 312 <!--l. 79--><p class="noindent" >Vorbis’ heritage is as a research CODEC and its current design reflects a desire to allow multiple 313 decades of continuous encoder improvement before running out of room within the codec 314 specification. For these reasons, configurable aspects of codec setup intentionally lean toward the 315 extreme of forward adaptive. 316 317 318 319 <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis 320 developer to keep in mind) is that the entire probability model of the codec, the Huffman and 321 VQ codebooks, is packed into the bitstream header along with extensive CODEC setup 322 parameters (often several hundred fields). This makes it impossible, as it would be with 323 MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin 324 decode at any frame in the stream without having previously fetched the codec setup 325 header. 326 <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a 327 id="x1-80001.1.4"></a><span 328 class="cmbx-12">Note:</span></span> Vorbis <span 329 class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec 330 has been initialized/setup with the setup headers. 331 <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream 332 headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less 333 is recommended (and Xiph.Org’s Vorbis encoder follows this suggestion). 334 <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is 335 an unusual design and thus causes some amount of complaint among engineers as this runs 336 against current design trends (and also points out limitations in some existing software/interface 337 designs, such as Windows’ ACM codec framework). However, we find that it does not 338 fundamentally limit Vorbis’ suitable application space. 339 <!--l. 115--><p class="noindent" > 340 <h5 class="subsubsectionHead"><span class="titlemark">1.1.5 </span> <a 341 id="x1-90001.1.5"></a>Format Specification</h5> 342 <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets 343 that are correctly decoded by the reference Vorbis decoder described below may be considered 344 a proper Vorbis encoder. A decoder must faithfully and completely implement the 345 specification defined below (except where noted) to be considered a proper Vorbis 346 decoder. 347 <!--l. 123--><p class="noindent" > 348 <h5 class="subsubsectionHead"><span class="titlemark">1.1.6 </span> <a 349 id="x1-100001.1.6"></a>Hardware Profile</h5> 350 351 352 353 <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an 354 embedded design. For this reason, embedded designs are allowed to deviate in limited ways from 355 the ‘full’ decode specification yet still be certified compliant. These optional omissions are 356 labelled in the spec where relevant. 357 <!--l. 131--><p class="noindent" > 358 <h4 class="subsectionHead"><span class="titlemark">1.2 </span> <a 359 id="x1-110001.2"></a>Decoder Configuration</h4> 360 <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that 361 perform specific functions in the decode pipeline. Each different component instance of a specific 362 type is semantically interchangeable; decoder configuration consists both of internal component 363 configuration, as well as arrangement of specific instances into a decode pipeline. Componentry 364 arrangement is roughly as follows: 365 <div class="center" 366 > 367 <!--l. 141--><p class="noindent" > 368 369 <!--l. 142--><p class="noindent" ><img 370 src="components.png" alt="PIC" 371 > 372 <br /> <div class="caption" 373 ><span class="id">Figure 1: </span><span 374 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 --> 375 </div> 376 <!--l. 146--><p class="noindent" > 377 <h5 class="subsubsectionHead"><span class="titlemark">1.2.1 </span> <a 378 id="x1-120001.2.1"></a>Global Config</h5> 379 <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis 380 version (always ’0’ in Vorbis I), bitrate hints, and the lists of component instances. All other 381 configuration is in the context of specific components. 382 <!--l. 152--><p class="noindent" > 383 <h5 class="subsubsectionHead"><span class="titlemark">1.2.2 </span> <a 384 id="x1-130001.2.2"></a>Mode</h5> 385 386 387 388 <!--l. 154--><p class="noindent" >Each Vorbis frame is coded according to a master ’mode’. A bitstream may use one or many 389 modes. 390 <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible 391 methods with the intention of choosing a method best suited to that frame. Different 392 modes are, e.g. how frame size is changed from frame to frame. The mode number of a 393 frame serves as a top level configuration switch for all other specific aspects of frame 394 decode. 395 <!--l. 164--><p class="noindent" >A ’mode’ configuration consists of a frame size setting, window type (always 0, the Vorbis 396 window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping 397 number. The mapping number specifies which mapping configuration instance to use for low-level 398 packet decode and synthesis. 399 <!--l. 171--><p class="noindent" > 400 <h5 class="subsubsectionHead"><span class="titlemark">1.2.3 </span> <a 401 id="x1-140001.2.3"></a>Mapping</h5> 402 <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of ’submaps’ that bundle sets 403 of channel vectors together for grouped encoding and decoding. These submaps are 404 not references to external components; the submap list is internal and specific to a 405 mapping. 406 <!--l. 178--><p class="noindent" >A ’submap’ is a configuration/grouping that applies to a subset of floor and residue vectors 407 within a mapping. The submap functions as a last layer of indirection such that specific special 408 floor or residue settings can be applied not only to all the vectors in a given mode, but also 409 specific vectors in a specific mode. Each submap specifies the proper floor and residue 410 instance number to use for decoding that submap’s spectral floor and spectral residue 411 vectors. 412 <!--l. 186--><p class="noindent" >As an example: 413 <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth 414 channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a 415 full-spectrum version of it as with the other channels. The submapping mechanism can be used 416 to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only 417 representation to the bass channel, thus saving space. In this example, channels 0-4 belong to 418 submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which 419 uses a bass-only representation. 420 421 422 423 <!--l. 199--><p class="noindent" > 424 <h5 class="subsubsectionHead"><span class="titlemark">1.2.4 </span> <a 425 id="x1-150001.2.4"></a>Floor</h5> 426 <!--l. 201--><p class="noindent" >Vorbis encodes a spectral ’floor’ vector for each PCM channel. This vector is a low-resolution 427 representation of the audio spectrum for the given channel in the current frame, generally used 428 akin to a whitening filter. It is named a ’floor’ because the Xiph.Org reference encoder has 429 historically used it as a unit-baseline for spectral resolution. 430 <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB 431 amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear 432 interpolated representation on a dB amplitude scale and linear frequency scale. The two floors 433 are semantically interchangeable in encoding/decoding. However, floor type 1 provides more 434 stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and 435 high bitrate modes. Floor 1 is also considerably less expensive to decode than floor 436 0. 437 <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis 438 encoder past Xiph.org’s own beta 4 makes use of floor 0. 439 <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy 440 coding to save space. For this reason, a floor configuration generally refers to multiple 441 codebooks in the codebook component list. Entropy coding is thus provided as an 442 abstraction, and each floor instance may choose from any and all available codebooks when 443 coding/decoding. 444 <!--l. 230--><p class="noindent" > 445 <h5 class="subsubsectionHead"><span class="titlemark">1.2.5 </span> <a 446 id="x1-160001.2.5"></a>Residue</h5> 447 <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been 448 subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector 449 quantization according to one of three specific packing/coding algorithms numbered 450 0 through 2. The packing algorithm details are configured by residue instance. As 451 with the floor components, the final VQ/entropy encoding is provided by external 452 codebook instances and each residue instance may choose from any and all available 453 codebooks. 454 <!--l. 241--><p class="noindent" > 455 456 457 458 <h5 class="subsubsectionHead"><span class="titlemark">1.2.6 </span> <a 459 id="x1-170001.2.6"></a>Codebooks</h5> 460 <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use 461 the entropy-decoded integer value as an offset into an index of output value vectors, returning 462 the indicated vector of values. 463 <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree 464 representation. This tree is tightly packed using one of several methods, depending on whether 465 codeword lengths are ordered or unordered, or the tree is sparse. 466 <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly, 467 the vector index is encoded as a single list of values of possible values that are then permuted 468 into a list of n-dimensional rows (lattice VQ). 469 <!--l. 260--><p class="noindent" > 470 <h4 class="subsectionHead"><span class="titlemark">1.3 </span> <a 471 id="x1-180001.3"></a>High-level Decode Process</h4> 472 <!--l. 262--><p class="noindent" > 473 <h5 class="subsubsectionHead"><span class="titlemark">1.3.1 </span> <a 474 id="x1-190001.3.1"></a>Decode Setup</h5> 475 <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the 476 stream to be decoded. Vorbis uses three header packets; all are required, in-order, by 477 this specification. Once set up, decode may begin at any audio packet belonging to 478 the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio 479 packets. 480 <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup 481 header. 482 <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a 483 id="x1-200001.3.1"></a><span 484 class="cmbx-12">Identification Header</span></span> 485 The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio 486 characteristics of the stream such as sample rate and number of channels. 487 488 489 490 <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a 491 id="x1-210001.3.1"></a><span 492 class="cmbx-12">Comment Header</span></span> 493 The comment header includes user text comments (“tags”) and a vendor string for the 494 application/library that produced the bitstream. The encoding and proper use of the comment 495 header is described in <a 496 href="#x1-810005">Section 5</a>, “<a 497 href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>”. 498 <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a 499 id="x1-220001.3.1"></a><span 500 class="cmbx-12">Setup Header</span></span> 501 The setup header includes extensive CODEC setup information as well as the complete VQ and 502 Huffman codebooks needed for decode. 503 <!--l. 289--><p class="noindent" > 504 <h5 class="subsubsectionHead"><span class="titlemark">1.3.2 </span> <a 505 id="x1-230001.3.2"></a>Decode Procedure</h5> 506 <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same. 507 <ol class="enumerate1" > 508 <li 509 class="enumerate" id="x1-23002x1">decode packet type flag 510 </li> 511 <li 512 class="enumerate" id="x1-23004x2">decode mode number 513 </li> 514 <li 515 class="enumerate" id="x1-23006x3">decode window shape (long windows only) 516 </li> 517 <li 518 class="enumerate" id="x1-23008x4">decode floor 519 </li> 520 <li 521 class="enumerate" id="x1-23010x5">decode residue into residue vectors 522 </li> 523 <li 524 class="enumerate" id="x1-23012x6">inverse channel coupling of residue vectors 525 </li> 526 <li 527 class="enumerate" id="x1-23014x7">generate floor curve from decoded floor data 528 </li> 529 <li 530 class="enumerate" id="x1-23016x8">compute dot product of floor and residue, producing audio spectrum vector 531 </li> 532 <li 533 class="enumerate" id="x1-23018x9">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis 534 I 535 536 537 538 </li> 539 <li 540 class="enumerate" id="x1-23020x10">overlap/add left-hand output of transform with right-hand output of previous frame 541 </li> 542 <li 543 class="enumerate" id="x1-23022x11">store right hand-data from transform of current frame for future lapping 544 </li> 545 <li 546 class="enumerate" id="x1-23024x12">if not first frame, return results of overlap/add as audio result of current frame</li></ol> 547 <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can 548 take advantage of symmetries in the MDCT to store the right-hand transform data of a partial 549 MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before 550 overlap/add with the next frame. This optimization produces entirely equivalent output and is 551 naturally perfectly legal. The decoder must be <span 552 class="cmti-12">entirely mathematically equivalent </span>to the 553 specification, it need not be a literal semantic implementation. 554 <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a 555 id="x1-240001.3.2"></a><span 556 class="cmbx-12">Packet type decode</span></span> 557 Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis 558 headers described above. The fourth packet type marks an audio packet. All other packet types 559 are reserved; packets marked with a reserved type should be ignored. 560 <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of 561 audio packet decode is to read and verify the packet type; <span 562 class="cmti-12">a non-audio packet when audio is</span> 563 <span 564 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span> 565 <span 566 class="cmti-12">packet and not attempt decoding it to audio</span>. 567 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a 568 id="x1-250001.3.2"></a><span 569 class="cmbx-12">Mode decode</span></span> 570 Vorbis allows an encoder to set up multiple, numbered packet ’modes’, as described earlier, all of 571 which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct 572 offset into the mode instance index. 573 <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a 574 id="x1-260001.3.2"></a><span 575 class="cmbx-12">Window shape decode (long windows only)</span></span> 576 Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I, 577 legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis 578 handles channels as independent vectors and these frame sizes are in samples per 579 channel. 580 581 582 583 <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next, 584 avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed 585 according to MDCT requirements, overlapped 50% with the output of the previous frame and 586 added. The window shape assures seamless reconstruction. 587 <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows: 588 <div class="center" 589 > 590 <!--l. 356--><p class="noindent" > 591 592 <!--l. 357--><p class="noindent" ><img 593 src="window1.png" alt="PIC" 594 > 595 <br /> <div class="caption" 596 ><span class="id">Figure 2: </span><span 597 class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 --> 598 </div> 599 <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows: 600 <div class="center" 601 > 602 <!--l. 364--><p class="noindent" > 603 604 <!--l. 365--><p class="noindent" ><img 605 src="window2.png" alt="PIC" 606 > 607 <br /> <div class="caption" 608 ><span class="id">Figure 3: </span><span 609 class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 --> 610 </div> 611 <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for 612 seamless lapping as above. It is possible to correctly infer window shape to be applied to the 613 current window from knowing the sizes of the current, previous and next window. It is legal for a 614 decoder to use this method. However, in the case of a long window (short windows require no 615 modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although 616 not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to 617 the point of lapping entirely independently of any other packet, allowing easier abstraction of 618 decode layers as well as allowing a greater level of easy parallelism in encode and 619 decode. 620 <!--l. 382--><p class="noindent" >A description of valid window functions for use with an inverse MDCT can be found in <span class="cite">[<a 621 href="#XSporer/Brandenburg/Edler">1</a>]</span>. 622 Vorbis windows all use the slope function 623 <center class="math-display" > 624 <img 625 src="Vorbis_I_spec0x.png" alt="y = sin (.5 ∗ π sin2((x + .5)∕n ∗ π)). 626 627 628 629 " class="math-display" ></center> 630 <!--l. 385--><p class="nopar" > 631 <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a 632 id="x1-270001.3.2"></a><span 633 class="cmbx-12">floor decode</span></span> 634 Each floor is encoded/decoded in channel order, however each floor belongs to a ’submap’ that 635 specifies which floor configuration to use. All floors are decoded before residue decode 636 begins. 637 <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a 638 id="x1-280001.3.2"></a><span 639 class="cmbx-12">residue decode</span></span> 640 Although the number of residue vectors equals the number of channels, channel coupling may 641 mean that the raw residue vectors extracted during decode do not map directly to specific 642 channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or 643 angle. The coupling relationships are described in the codec setup and may differ from frame to 644 frame, due to different mode numbers. 645 <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from 646 submap 0 through n-1. This differs from floors which are coded using a configuration provided by 647 submap number, but are coded individually in channel order. 648 <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a 649 id="x1-290001.3.2"></a><span 650 class="cmbx-12">inverse channel coupling</span></span> 651 A detailed discussion of stereo in the Vorbis codec can be found in the document 652 <a 653 href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo 654 coupling, but the stereo document also gives a good overview of the generic coupling 655 mechanism. 656 <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a 657 pair at a time in the order and using the vectors specified in the current mapping 658 configuration. The decoupling operation is the same for all pairs, converting square polar 659 representation (where one vector is magnitude and the second angle) back to Cartesian 660 representation. 661 <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors 662 represent the fine spectral detail of each output channel. 663 664 665 666 <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a 667 id="x1-300001.3.2"></a><span 668 class="cmbx-12">generate floor curve</span></span> 669 The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to 670 generate the output curve when the floor data is decoded from the raw packet, or it 671 can be generated after inverse coupling and applied to the spectral residue directly, 672 combining generation and the dot product into one step and eliminating some working 673 space. 674 <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied 675 (dot product) by the linear-range, linear-domain spectral residue. 676 <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a 677 id="x1-310001.3.2"></a><span 678 class="cmbx-12">compute floor/residue dot product</span></span> 679 This step is straightforward; for each output channel, the decoder multiplies the floor curve and 680 residue vectors element by element, producing the finished audio spectrum of each 681 channel. 682 <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point 683 implementation might be to assume that a 32 bit fixed-point representation for floor and 684 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth 685 in all cases because it happens to mostly work with the current Xiph.Org reference 686 encoder. 687 <!--l. 462--><p class="noindent" >However, floor vector values can span <span 688 class="cmsy-10x-x-120">∼</span>140dB (<span 689 class="cmsy-10x-x-120">∼</span>24 bits unsigned), and the audio spectrum 690 vector should represent a minimum of 120dB (<span 691 class="cmsy-10x-x-120">∼</span>21 bits with sign), even when output is to a 16 692 bit PCM device. For the residue vector to represent full scale if the floor is nailed 693 to <span 694 class="cmsy-10x-x-120">−</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach 695 full scale if the floor is nailed at 0dB, it must be able to represent <span 696 class="cmsy-10x-x-120">−</span>140dB to +0dB. 697 Thus, in order to handle full range dynamics, a residue vector may span <span 698 class="cmsy-10x-x-120">−</span>140dB to 699 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the 700 residue vector must be able to represent a 48 bit range and the dot product must 701 be able to handle an effective 48 bit times 24 bit multiplication. This range may be 702 achieved using large (64 bit or larger) integers, or implementing a movable binary point 703 representation. 704 <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a 705 id="x1-320001.3.2"></a><span 706 class="cmbx-12">inverse monolithic transform (MDCT)</span></span> 707 The audio spectrum is converted back into time domain PCM audio via an inverse Modified 708 Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in 709 <span class="cite">[<a 710 href="#XSporer/Brandenburg/Edler">1</a>]</span>. 711 <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be 712 713 714 715 lapped with surrounding frames using an appropriate window (such as the Vorbis window) before 716 the MDCT can be considered orthogonal. 717 <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a 718 id="x1-330001.3.2"></a><span 719 class="cmbx-12">overlap/add data</span></span> 720 Windowed MDCT output is overlapped and added with the right hand data of the previous 721 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the 722 current window (as illustrated in the window overlap diagram). At this point, the audio data 723 between the center of the previous frame and the center of the current frame is now finished and 724 ready to be returned. 725 <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a 726 id="x1-340001.3.2"></a><span 727 class="cmbx-12">cache right hand data</span></span> 728 The decoder must cache the right hand portion of the current frame to be lapped with the left 729 hand portion of the next frame. 730 <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a 731 id="x1-350001.3.2"></a><span 732 class="cmbx-12">return finished audio data</span></span> 733 The overlapped portion produced from overlapping the previous and current frame data 734 is finished data to be returned by the decoder. This data spans from the center of 735 the previous window to the center of the current window. In the case of same-sized 736 windows, the amount of data to return is one-half block consisting of and only of the 737 overlapped portions. When overlapping a short and long window, much of the returned 738 range is not actually overlap. This does not damage transform orthogonality. Pay 739 attention however to returning the correct data range; the amount of data to be returned 740 is: 741 <!--l. 519--><p class="noindent" > 742 <div class="fancyvrb" id="fancyvrb1"> 743 <a 744 id="x1-35002r1"></a><span 745 class="cmr-6">1</span><span 746 class="cmtt-8"> </span><span 747 class="cmtt-8"> window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span> 748 </div> 749 <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window. 750 <!--l. 526--><p class="noindent" >Data is not returned from the first frame; it must be used to ’prime’ the decode engine. The 751 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper 752 PCM output offset is ’0’ (as no data has been returned yet). 753 754 755 756 757 758 759 <h3 class="sectionHead"><span class="titlemark">2 </span> <a 760 id="x1-360002"></a>Bitpacking Convention</h3> 761 <!--l. 6--><p class="noindent" > 762 <h4 class="subsectionHead"><span class="titlemark">2.1 </span> <a 763 id="x1-370002.1"></a>Overview</h4> 764 <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary 765 integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the 766 encoder and then read one-by-one in the same monotonically increasing order by the decoder. 767 Most current binary storage arrangements group bits into a native word size of eight bits 768 (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis 769 bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual 770 representation in fixed-width words. 771 <!--l. 19--><p class="noindent" > 772 <h5 class="subsubsectionHead"><span class="titlemark">2.1.1 </span> <a 773 id="x1-380002.1.1"></a>octets, bytes and words</h5> 774 <!--l. 21--><p class="noindent" >In most contemporary architectures, a ’byte’ is synonymous with an ’octet’, that is, eight bits. 775 This has not always been the case; seven, ten, eleven and sixteen bit ’bytes’ have been used. 776 For purposes of the bitpacking convention, a byte implies the native, smallest integer 777 storage representation offered by a platform. On modern platforms, this is generally 778 assumed to be eight bits (not necessarily because of the processor but because of the 779 filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental 780 atom of storage). A ’word’ is an integer size that is a grouped multiple of this smallest 781 size. 782 <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a ’byte’ to be an octet (eight bits) and a word 783 to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis 784 bitpacking convention is still well defined for any native byte size; Vorbis uses the native 785 bit-width of a given storage system. This document assumes that a byte is one octet for purposes 786 of example. 787 <!--l. 39--><p class="noindent" > 788 789 790 791 <h5 class="subsubsectionHead"><span class="titlemark">2.1.2 </span> <a 792 id="x1-390002.1.2"></a>bit order</h5> 793 <!--l. 41--><p class="noindent" >A byte has a well-defined ’least significant’ bit (LSb), which is the only bit set when the byte is 794 storing the two’s complement integer value +1. A byte’s ’most significant’ bit (MSb) is at the 795 opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span 796 class="cmmi-12">n </span>(<span 797 class="cmmi-12">n </span>= 7 in an 798 octet) for the MSb. 799 <!--l. 50--><p class="noindent" > 800 <h5 class="subsubsectionHead"><span class="titlemark">2.1.3 </span> <a 801 id="x1-400002.1.3"></a>byte order</h5> 802 <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the 803 common ones are 3-2-1-0 (’big endian’ or ’most significant byte first’ in which the 804 highest-valued byte comes first), 0-1-2-3 (’little endian’ or ’least significant byte first’ in 805 which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (’mixed 806 endian’). 807 <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not 808 word, level, thus host word ordering is of a concern only during optimization when writing high 809 performance code that operates on a word of storage at a time rather than by byte. 810 Logically, bytes are always coded and decoded in order from byte zero through byte 811 <span 812 class="cmmi-12">n</span>. 813 <!--l. 68--><p class="noindent" > 814 <h5 class="subsubsectionHead"><span class="titlemark">2.1.4 </span> <a 815 id="x1-410002.1.4"></a>coding bits into byte sequences</h5> 816 <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits 817 wide, into packets. These integer fields are not aligned to the boundaries of the byte 818 representation; the next field is written at the bit position at which the previous field 819 ends. 820 <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical 821 bitstream first, followed by next least significant bit, etc, until the requested number of bits 822 have been coded. When packing the bits into bytes, the encoder begins by placing 823 the LSb of the integer to be written into the least significant unused bit position of 824 the destination byte, followed by the next-least significant bit of the source integer 825 and so on up to the requested number of bits. When all bits of the destination byte 826 have been filled, encoding continues by zeroing all bits of the next byte and writing 827 the next bit into the bit position 0 of that byte. Decoding follows the same process 828 829 830 831 as encoding, but by reading bits from the byte stream and reassembling them into 832 integers. 833 <!--l. 90--><p class="noindent" > 834 <h5 class="subsubsectionHead"><span class="titlemark">2.1.5 </span> <a 835 id="x1-420002.1.5"></a>signedness</h5> 836 <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder 837 given decode context. That is, the three bit binary pattern ’b111’ can be taken to represent 838 either ’seven’ as an unsigned integer, or ’-1’ as a signed, two’s complement integer. The 839 encoder and decoder are responsible for knowing if fields are to be treated as signed or 840 unsigned. 841 <!--l. 101--><p class="noindent" > 842 <h5 class="subsubsectionHead"><span class="titlemark">2.1.6 </span> <a 843 id="x1-430002.1.6"></a>coding example</h5> 844 <!--l. 103--><p class="noindent" >Code the 4 bit integer value ’12’ [b1100] into an empty bytestream. Bytestream result: 845 <!--l. 106--><p class="noindent" > 846 <div class="fancyvrb" id="fancyvrb2"> 847 <a 848 id="x1-43002r1"></a><span 849 class="cmr-6">1</span><span 850 class="cmtt-8"> </span><span 851 class="cmtt-8"> </span><span 852 class="cmtt-8"> </span><span 853 class="cmtt-8"> </span><span 854 class="cmtt-8"> </span><span 855 class="cmtt-8"> </span><span 856 class="cmtt-8"> </span><span 857 class="cmtt-8"> </span><span 858 class="cmtt-8"> </span><span 859 class="cmtt-8"> </span><span 860 class="cmtt-8"> </span><span 861 class="cmtt-8"> </span><span 862 class="cmtt-8"> </span><span 863 class="cmtt-8"> </span><span 864 class="cmtt-8"> </span><span 865 class="cmtt-8"> |</span> 866 <br class="fancyvrb" /><a 867 id="x1-43004r2"></a><span 868 class="cmr-6">2</span><span 869 class="cmtt-8"> </span><span 870 class="cmtt-8"> </span><span 871 class="cmtt-8"> </span><span 872 class="cmtt-8"> </span><span 873 class="cmtt-8"> </span><span 874 class="cmtt-8"> </span><span 875 class="cmtt-8"> </span><span 876 class="cmtt-8"> </span><span 877 class="cmtt-8"> </span><span 878 class="cmtt-8"> </span><span 879 class="cmtt-8"> </span><span 880 class="cmtt-8"> </span><span 881 class="cmtt-8"> </span><span 882 class="cmtt-8"> </span><span 883 class="cmtt-8"> </span><span 884 class="cmtt-8"> V</span> 885 <br class="fancyvrb" /><a 886 id="x1-43006r3"></a><span 887 class="cmr-6">3</span><span 888 class="cmtt-8"> </span><span 889 class="cmtt-8"> </span> 890 <br class="fancyvrb" /><a 891 id="x1-43008r4"></a><span 892 class="cmr-6">4</span><span 893 class="cmtt-8"> </span><span 894 class="cmtt-8"> </span><span 895 class="cmtt-8"> </span><span 896 class="cmtt-8"> </span><span 897 class="cmtt-8"> </span><span 898 class="cmtt-8"> </span><span 899 class="cmtt-8"> </span><span 900 class="cmtt-8"> </span><span 901 class="cmtt-8"> </span><span 902 class="cmtt-8"> 7</span><span 903 class="cmtt-8"> 6</span><span 904 class="cmtt-8"> 5</span><span 905 class="cmtt-8"> 4</span><span 906 class="cmtt-8"> 3</span><span 907 class="cmtt-8"> 2</span><span 908 class="cmtt-8"> 1</span><span 909 class="cmtt-8"> 0</span> 910 <br class="fancyvrb" /><a 911 id="x1-43010r5"></a><span 912 class="cmr-6">5</span><span 913 class="cmtt-8"> </span><span 914 class="cmtt-8"> byte</span><span 915 class="cmtt-8"> 0</span><span 916 class="cmtt-8"> [0</span><span 917 class="cmtt-8"> 0</span><span 918 class="cmtt-8"> 0</span><span 919 class="cmtt-8"> 0</span><span 920 class="cmtt-8"> 1</span><span 921 class="cmtt-8"> 1</span><span 922 class="cmtt-8"> 0</span><span 923 class="cmtt-8"> 0]</span><span 924 class="cmtt-8"> </span><span 925 class="cmtt-8"> <-</span> 926 <br class="fancyvrb" /><a 927 id="x1-43012r6"></a><span 928 class="cmr-6">6</span><span 929 class="cmtt-8"> </span><span 930 class="cmtt-8"> byte</span><span 931 class="cmtt-8"> 1</span><span 932 class="cmtt-8"> [</span><span 933 class="cmtt-8"> </span><span 934 class="cmtt-8"> </span><span 935 class="cmtt-8"> </span><span 936 class="cmtt-8"> </span><span 937 class="cmtt-8"> </span><span 938 class="cmtt-8"> </span><span 939 class="cmtt-8"> </span><span 940 class="cmtt-8"> </span><span 941 class="cmtt-8"> </span><span 942 class="cmtt-8"> </span><span 943 class="cmtt-8"> </span><span 944 class="cmtt-8"> </span><span 945 class="cmtt-8"> </span><span 946 class="cmtt-8"> </span><span 947 class="cmtt-8"> ]</span> 948 <br class="fancyvrb" /><a 949 id="x1-43014r7"></a><span 950 class="cmr-6">7</span><span 951 class="cmtt-8"> </span><span 952 class="cmtt-8"> byte</span><span 953 class="cmtt-8"> 2</span><span 954 class="cmtt-8"> [</span><span 955 class="cmtt-8"> </span><span 956 class="cmtt-8"> </span><span 957 class="cmtt-8"> </span><span 958 class="cmtt-8"> </span><span 959 class="cmtt-8"> </span><span 960 class="cmtt-8"> </span><span 961 class="cmtt-8"> </span><span 962 class="cmtt-8"> </span><span 963 class="cmtt-8"> </span><span 964 class="cmtt-8"> </span><span 965 class="cmtt-8"> </span><span 966 class="cmtt-8"> </span><span 967 class="cmtt-8"> </span><span 968 class="cmtt-8"> </span><span 969 class="cmtt-8"> ]</span> 970 <br class="fancyvrb" /><a 971 id="x1-43016r8"></a><span 972 class="cmr-6">8</span><span 973 class="cmtt-8"> </span><span 974 class="cmtt-8"> byte</span><span 975 class="cmtt-8"> 3</span><span 976 class="cmtt-8"> [</span><span 977 class="cmtt-8"> </span><span 978 class="cmtt-8"> </span><span 979 class="cmtt-8"> </span><span 980 class="cmtt-8"> </span><span 981 class="cmtt-8"> </span><span 982 class="cmtt-8"> </span><span 983 class="cmtt-8"> </span><span 984 class="cmtt-8"> </span><span 985 class="cmtt-8"> </span><span 986 class="cmtt-8"> </span><span 987 class="cmtt-8"> </span><span 988 class="cmtt-8"> </span><span 989 class="cmtt-8"> </span><span 990 class="cmtt-8"> </span><span 991 class="cmtt-8"> ]</span> 992 <br class="fancyvrb" /><a 993 id="x1-43018r9"></a><span 994 class="cmr-6">9</span><span 995 class="cmtt-8"> </span><span 996 class="cmtt-8"> </span><span 997 class="cmtt-8"> </span><span 998 class="cmtt-8"> </span><span 999 class="cmtt-8"> </span><span 1000 class="cmtt-8"> </span><span 1001 class="cmtt-8"> </span><span 1002 class="cmtt-8"> </span><span 1003 class="cmtt-8"> </span><span 1004 class="cmtt-8"> </span><span 1005 class="cmtt-8"> </span><span 1006 class="cmtt-8"> </span><span 1007 class="cmtt-8"> </span><span 1008 class="cmtt-8"> </span><span 1009 class="cmtt-8"> ...</span> 1010 <br class="fancyvrb" /><a 1011 id="x1-43020r10"></a><span 1012 class="cmr-6">10</span><span 1013 class="cmtt-8"> </span><span 1014 class="cmtt-8"> byte</span><span 1015 class="cmtt-8"> n</span><span 1016 class="cmtt-8"> [</span><span 1017 class="cmtt-8"> </span><span 1018 class="cmtt-8"> </span><span 1019 class="cmtt-8"> </span><span 1020 class="cmtt-8"> </span><span 1021 class="cmtt-8"> </span><span 1022 class="cmtt-8"> </span><span 1023 class="cmtt-8"> </span><span 1024 class="cmtt-8"> </span><span 1025 class="cmtt-8"> </span><span 1026 class="cmtt-8"> </span><span 1027 class="cmtt-8"> </span><span 1028 class="cmtt-8"> </span><span 1029 class="cmtt-8"> </span><span 1030 class="cmtt-8"> </span><span 1031 class="cmtt-8"> ]</span><span 1032 class="cmtt-8"> </span><span 1033 class="cmtt-8"> bytestream</span><span 1034 class="cmtt-8"> length</span><span 1035 class="cmtt-8"> ==</span><span 1036 class="cmtt-8"> 1</span><span 1037 class="cmtt-8"> byte</span> 1038 <br class="fancyvrb" /><a 1039 id="x1-43022r11"></a><span 1040 class="cmr-6">11</span><span 1041 class="cmtt-8"> </span><span 1042 class="cmtt-8"> </span> 1043 </div> 1044 <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value ’-1’ [b111]: 1045 <!--l. 123--><p class="noindent" > 1046 <div class="fancyvrb" id="fancyvrb3"> 1047 <a 1048 id="x1-43024r1"></a><span 1049 class="cmr-6">1</span><span 1050 class="cmtt-8"> </span><span 1051 class="cmtt-8"> </span><span 1052 class="cmtt-8"> </span><span 1053 class="cmtt-8"> </span><span 1054 class="cmtt-8"> </span><span 1055 class="cmtt-8"> </span><span 1056 class="cmtt-8"> </span><span 1057 class="cmtt-8"> </span><span 1058 class="cmtt-8"> </span><span 1059 class="cmtt-8"> |</span> 1060 <br class="fancyvrb" /><a 1061 id="x1-43026r2"></a><span 1062 class="cmr-6">2</span><span 1063 class="cmtt-8"> </span><span 1064 class="cmtt-8"> </span><span 1065 class="cmtt-8"> </span><span 1066 class="cmtt-8"> </span><span 1067 class="cmtt-8"> </span><span 1068 class="cmtt-8"> </span><span 1069 class="cmtt-8"> </span><span 1070 class="cmtt-8"> </span><span 1071 class="cmtt-8"> </span><span 1072 class="cmtt-8"> V</span> 1073 <br class="fancyvrb" /><a 1074 id="x1-43028r3"></a><span 1075 class="cmr-6">3</span><span 1076 class="cmtt-8"> </span><span 1077 class="cmtt-8"> </span> 1078 <br class="fancyvrb" /><a 1079 id="x1-43030r4"></a><span 1080 class="cmr-6">4</span><span 1081 class="cmtt-8"> </span><span 1082 class="cmtt-8"> </span><span 1083 class="cmtt-8"> </span><span 1084 class="cmtt-8"> </span><span 1085 class="cmtt-8"> </span><span 1086 class="cmtt-8"> </span><span 1087 class="cmtt-8"> </span><span 1088 class="cmtt-8"> </span><span 1089 class="cmtt-8"> </span><span 1090 class="cmtt-8"> 7</span><span 1091 class="cmtt-8"> 6</span><span 1092 class="cmtt-8"> 5</span><span 1093 class="cmtt-8"> 4</span><span 1094 class="cmtt-8"> 3</span><span 1095 class="cmtt-8"> 2</span><span 1096 class="cmtt-8"> 1</span><span 1097 class="cmtt-8"> 0</span> 1098 <br class="fancyvrb" /><a 1099 id="x1-43032r5"></a><span 1100 class="cmr-6">5</span><span 1101 class="cmtt-8"> </span><span 1102 class="cmtt-8"> byte</span><span 1103 class="cmtt-8"> 0</span><span 1104 class="cmtt-8"> [0</span><span 1105 class="cmtt-8"> 1</span><span 1106 class="cmtt-8"> 1</span><span 1107 class="cmtt-8"> 1</span><span 1108 class="cmtt-8"> 1</span><span 1109 class="cmtt-8"> 1</span><span 1110 class="cmtt-8"> 0</span><span 1111 class="cmtt-8"> 0]</span><span 1112 class="cmtt-8"> </span><span 1113 class="cmtt-8"> <-</span> 1114 <br class="fancyvrb" /><a 1115 id="x1-43034r6"></a><span 1116 class="cmr-6">6</span><span 1117 class="cmtt-8"> </span><span 1118 class="cmtt-8"> byte</span><span 1119 class="cmtt-8"> 1</span><span 1120 class="cmtt-8"> [</span><span 1121 class="cmtt-8"> </span><span 1122 class="cmtt-8"> </span><span 1123 class="cmtt-8"> </span><span 1124 class="cmtt-8"> </span><span 1125 class="cmtt-8"> </span><span 1126 class="cmtt-8"> </span><span 1127 class="cmtt-8"> </span><span 1128 class="cmtt-8"> </span><span 1129 class="cmtt-8"> </span><span 1130 class="cmtt-8"> </span><span 1131 class="cmtt-8"> </span><span 1132 class="cmtt-8"> </span><span 1133 class="cmtt-8"> </span><span 1134 class="cmtt-8"> </span><span 1135 class="cmtt-8"> ]</span> 1136 1137 1138 1139 <br class="fancyvrb" /><a 1140 id="x1-43036r7"></a><span 1141 class="cmr-6">7</span><span 1142 class="cmtt-8"> </span><span 1143 class="cmtt-8"> byte</span><span 1144 class="cmtt-8"> 2</span><span 1145 class="cmtt-8"> [</span><span 1146 class="cmtt-8"> </span><span 1147 class="cmtt-8"> </span><span 1148 class="cmtt-8"> </span><span 1149 class="cmtt-8"> </span><span 1150 class="cmtt-8"> </span><span 1151 class="cmtt-8"> </span><span 1152 class="cmtt-8"> </span><span 1153 class="cmtt-8"> </span><span 1154 class="cmtt-8"> </span><span 1155 class="cmtt-8"> </span><span 1156 class="cmtt-8"> </span><span 1157 class="cmtt-8"> </span><span 1158 class="cmtt-8"> </span><span 1159 class="cmtt-8"> </span><span 1160 class="cmtt-8"> ]</span> 1161 <br class="fancyvrb" /><a 1162 id="x1-43038r8"></a><span 1163 class="cmr-6">8</span><span 1164 class="cmtt-8"> </span><span 1165 class="cmtt-8"> byte</span><span 1166 class="cmtt-8"> 3</span><span 1167 class="cmtt-8"> [</span><span 1168 class="cmtt-8"> </span><span 1169 class="cmtt-8"> </span><span 1170 class="cmtt-8"> </span><span 1171 class="cmtt-8"> </span><span 1172 class="cmtt-8"> </span><span 1173 class="cmtt-8"> </span><span 1174 class="cmtt-8"> </span><span 1175 class="cmtt-8"> </span><span 1176 class="cmtt-8"> </span><span 1177 class="cmtt-8"> </span><span 1178 class="cmtt-8"> </span><span 1179 class="cmtt-8"> </span><span 1180 class="cmtt-8"> </span><span 1181 class="cmtt-8"> </span><span 1182 class="cmtt-8"> ]</span> 1183 <br class="fancyvrb" /><a 1184 id="x1-43040r9"></a><span 1185 class="cmr-6">9</span><span 1186 class="cmtt-8"> </span><span 1187 class="cmtt-8"> </span><span 1188 class="cmtt-8"> </span><span 1189 class="cmtt-8"> </span><span 1190 class="cmtt-8"> </span><span 1191 class="cmtt-8"> </span><span 1192 class="cmtt-8"> </span><span 1193 class="cmtt-8"> </span><span 1194 class="cmtt-8"> </span><span 1195 class="cmtt-8"> </span><span 1196 class="cmtt-8"> </span><span 1197 class="cmtt-8"> </span><span 1198 class="cmtt-8"> </span><span 1199 class="cmtt-8"> </span><span 1200 class="cmtt-8"> ...</span> 1201 <br class="fancyvrb" /><a 1202 id="x1-43042r10"></a><span 1203 class="cmr-6">10</span><span 1204 class="cmtt-8"> </span><span 1205 class="cmtt-8"> byte</span><span 1206 class="cmtt-8"> n</span><span 1207 class="cmtt-8"> [</span><span 1208 class="cmtt-8"> </span><span 1209 class="cmtt-8"> </span><span 1210 class="cmtt-8"> </span><span 1211 class="cmtt-8"> </span><span 1212 class="cmtt-8"> </span><span 1213 class="cmtt-8"> </span><span 1214 class="cmtt-8"> </span><span 1215 class="cmtt-8"> </span><span 1216 class="cmtt-8"> </span><span 1217 class="cmtt-8"> </span><span 1218 class="cmtt-8"> </span><span 1219 class="cmtt-8"> </span><span 1220 class="cmtt-8"> </span><span 1221 class="cmtt-8"> </span><span 1222 class="cmtt-8"> ]</span><span 1223 class="cmtt-8"> </span><span 1224 class="cmtt-8"> bytestream</span><span 1225 class="cmtt-8"> length</span><span 1226 class="cmtt-8"> ==</span><span 1227 class="cmtt-8"> 1</span><span 1228 class="cmtt-8"> byte</span> 1229 </div> 1230 <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value ’17’ [b0010001]: 1231 <!--l. 139--><p class="noindent" > 1232 <div class="fancyvrb" id="fancyvrb4"> 1233 <a 1234 id="x1-43044r1"></a><span 1235 class="cmr-6">1</span><span 1236 class="cmtt-8"> </span><span 1237 class="cmtt-8"> </span><span 1238 class="cmtt-8"> </span><span 1239 class="cmtt-8"> </span><span 1240 class="cmtt-8"> </span><span 1241 class="cmtt-8"> </span><span 1242 class="cmtt-8"> </span><span 1243 class="cmtt-8"> </span><span 1244 class="cmtt-8"> </span><span 1245 class="cmtt-8"> </span><span 1246 class="cmtt-8"> </span><span 1247 class="cmtt-8"> |</span> 1248 <br class="fancyvrb" /><a 1249 id="x1-43046r2"></a><span 1250 class="cmr-6">2</span><span 1251 class="cmtt-8"> </span><span 1252 class="cmtt-8"> </span><span 1253 class="cmtt-8"> </span><span 1254 class="cmtt-8"> </span><span 1255 class="cmtt-8"> </span><span 1256 class="cmtt-8"> </span><span 1257 class="cmtt-8"> </span><span 1258 class="cmtt-8"> </span><span 1259 class="cmtt-8"> </span><span 1260 class="cmtt-8"> </span><span 1261 class="cmtt-8"> </span><span 1262 class="cmtt-8"> V</span> 1263 <br class="fancyvrb" /><a 1264 id="x1-43048r3"></a><span 1265 class="cmr-6">3</span><span 1266 class="cmtt-8"> </span><span 1267 class="cmtt-8"> </span> 1268 <br class="fancyvrb" /><a 1269 id="x1-43050r4"></a><span 1270 class="cmr-6">4</span><span 1271 class="cmtt-8"> </span><span 1272 class="cmtt-8"> </span><span 1273 class="cmtt-8"> </span><span 1274 class="cmtt-8"> </span><span 1275 class="cmtt-8"> </span><span 1276 class="cmtt-8"> </span><span 1277 class="cmtt-8"> </span><span 1278 class="cmtt-8"> </span><span 1279 class="cmtt-8"> </span><span 1280 class="cmtt-8"> 7</span><span 1281 class="cmtt-8"> 6</span><span 1282 class="cmtt-8"> 5</span><span 1283 class="cmtt-8"> 4</span><span 1284 class="cmtt-8"> 3</span><span 1285 class="cmtt-8"> 2</span><span 1286 class="cmtt-8"> 1</span><span 1287 class="cmtt-8"> 0</span> 1288 <br class="fancyvrb" /><a 1289 id="x1-43052r5"></a><span 1290 class="cmr-6">5</span><span 1291 class="cmtt-8"> </span><span 1292 class="cmtt-8"> byte</span><span 1293 class="cmtt-8"> 0</span><span 1294 class="cmtt-8"> [1</span><span 1295 class="cmtt-8"> 1</span><span 1296 class="cmtt-8"> 1</span><span 1297 class="cmtt-8"> 1</span><span 1298 class="cmtt-8"> 1</span><span 1299 class="cmtt-8"> 1</span><span 1300 class="cmtt-8"> 0</span><span 1301 class="cmtt-8"> 0]</span> 1302 <br class="fancyvrb" /><a 1303 id="x1-43054r6"></a><span 1304 class="cmr-6">6</span><span 1305 class="cmtt-8"> </span><span 1306 class="cmtt-8"> byte</span><span 1307 class="cmtt-8"> 1</span><span 1308 class="cmtt-8"> [0</span><span 1309 class="cmtt-8"> 0</span><span 1310 class="cmtt-8"> 0</span><span 1311 class="cmtt-8"> 0</span><span 1312 class="cmtt-8"> 1</span><span 1313 class="cmtt-8"> 0</span><span 1314 class="cmtt-8"> 0</span><span 1315 class="cmtt-8"> 0]</span><span 1316 class="cmtt-8"> </span><span 1317 class="cmtt-8"> <-</span> 1318 <br class="fancyvrb" /><a 1319 id="x1-43056r7"></a><span 1320 class="cmr-6">7</span><span 1321 class="cmtt-8"> </span><span 1322 class="cmtt-8"> byte</span><span 1323 class="cmtt-8"> 2</span><span 1324 class="cmtt-8"> [</span><span 1325 class="cmtt-8"> </span><span 1326 class="cmtt-8"> </span><span 1327 class="cmtt-8"> </span><span 1328 class="cmtt-8"> </span><span 1329 class="cmtt-8"> </span><span 1330 class="cmtt-8"> </span><span 1331 class="cmtt-8"> </span><span 1332 class="cmtt-8"> </span><span 1333 class="cmtt-8"> </span><span 1334 class="cmtt-8"> </span><span 1335 class="cmtt-8"> </span><span 1336 class="cmtt-8"> </span><span 1337 class="cmtt-8"> </span><span 1338 class="cmtt-8"> </span><span 1339 class="cmtt-8"> ]</span> 1340 <br class="fancyvrb" /><a 1341 id="x1-43058r8"></a><span 1342 class="cmr-6">8</span><span 1343 class="cmtt-8"> </span><span 1344 class="cmtt-8"> byte</span><span 1345 class="cmtt-8"> 3</span><span 1346 class="cmtt-8"> [</span><span 1347 class="cmtt-8"> </span><span 1348 class="cmtt-8"> </span><span 1349 class="cmtt-8"> </span><span 1350 class="cmtt-8"> </span><span 1351 class="cmtt-8"> </span><span 1352 class="cmtt-8"> </span><span 1353 class="cmtt-8"> </span><span 1354 class="cmtt-8"> </span><span 1355 class="cmtt-8"> </span><span 1356 class="cmtt-8"> </span><span 1357 class="cmtt-8"> </span><span 1358 class="cmtt-8"> </span><span 1359 class="cmtt-8"> </span><span 1360 class="cmtt-8"> </span><span 1361 class="cmtt-8"> ]</span> 1362 <br class="fancyvrb" /><a 1363 id="x1-43060r9"></a><span 1364 class="cmr-6">9</span><span 1365 class="cmtt-8"> </span><span 1366 class="cmtt-8"> </span><span 1367 class="cmtt-8"> </span><span 1368 class="cmtt-8"> </span><span 1369 class="cmtt-8"> </span><span 1370 class="cmtt-8"> </span><span 1371 class="cmtt-8"> </span><span 1372 class="cmtt-8"> </span><span 1373 class="cmtt-8"> </span><span 1374 class="cmtt-8"> </span><span 1375 class="cmtt-8"> </span><span 1376 class="cmtt-8"> </span><span 1377 class="cmtt-8"> </span><span 1378 class="cmtt-8"> </span><span 1379 class="cmtt-8"> ...</span> 1380 <br class="fancyvrb" /><a 1381 id="x1-43062r10"></a><span 1382 class="cmr-6">10</span><span 1383 class="cmtt-8"> </span><span 1384 class="cmtt-8"> byte</span><span 1385 class="cmtt-8"> n</span><span 1386 class="cmtt-8"> [</span><span 1387 class="cmtt-8"> </span><span 1388 class="cmtt-8"> </span><span 1389 class="cmtt-8"> </span><span 1390 class="cmtt-8"> </span><span 1391 class="cmtt-8"> </span><span 1392 class="cmtt-8"> </span><span 1393 class="cmtt-8"> </span><span 1394 class="cmtt-8"> </span><span 1395 class="cmtt-8"> </span><span 1396 class="cmtt-8"> </span><span 1397 class="cmtt-8"> </span><span 1398 class="cmtt-8"> </span><span 1399 class="cmtt-8"> </span><span 1400 class="cmtt-8"> </span><span 1401 class="cmtt-8"> ]</span><span 1402 class="cmtt-8"> </span><span 1403 class="cmtt-8"> bytestream</span><span 1404 class="cmtt-8"> length</span><span 1405 class="cmtt-8"> ==</span><span 1406 class="cmtt-8"> 2</span><span 1407 class="cmtt-8"> bytes</span> 1408 <br class="fancyvrb" /><a 1409 id="x1-43064r11"></a><span 1410 class="cmr-6">11</span><span 1411 class="cmtt-8"> </span><span 1412 class="cmtt-8"> </span><span 1413 class="cmtt-8"> </span><span 1414 class="cmtt-8"> </span><span 1415 class="cmtt-8"> </span><span 1416 class="cmtt-8"> </span><span 1417 class="cmtt-8"> </span><span 1418 class="cmtt-8"> </span><span 1419 class="cmtt-8"> </span><span 1420 class="cmtt-8"> </span><span 1421 class="cmtt-8"> </span><span 1422 class="cmtt-8"> </span><span 1423 class="cmtt-8"> </span><span 1424 class="cmtt-8"> </span><span 1425 class="cmtt-8"> </span><span 1426 class="cmtt-8"> </span><span 1427 class="cmtt-8"> </span><span 1428 class="cmtt-8"> </span><span 1429 class="cmtt-8"> </span><span 1430 class="cmtt-8"> </span><span 1431 class="cmtt-8"> </span><span 1432 class="cmtt-8"> </span><span 1433 class="cmtt-8"> </span><span 1434 class="cmtt-8"> </span><span 1435 class="cmtt-8"> </span><span 1436 class="cmtt-8"> </span><span 1437 class="cmtt-8"> </span><span 1438 class="cmtt-8"> bit</span><span 1439 class="cmtt-8"> cursor</span><span 1440 class="cmtt-8"> ==</span><span 1441 class="cmtt-8"> 6</span> 1442 </div> 1443 <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value ’6969’ [b110 11001110 01]: 1444 <!--l. 156--><p class="noindent" > 1445 <div class="fancyvrb" id="fancyvrb5"> 1446 <a 1447 id="x1-43066r1"></a><span 1448 class="cmr-6">1</span><span 1449 class="cmtt-8"> </span><span 1450 class="cmtt-8"> </span><span 1451 class="cmtt-8"> </span><span 1452 class="cmtt-8"> </span><span 1453 class="cmtt-8"> </span><span 1454 class="cmtt-8"> </span><span 1455 class="cmtt-8"> </span><span 1456 class="cmtt-8"> </span><span 1457 class="cmtt-8"> </span><span 1458 class="cmtt-8"> </span><span 1459 class="cmtt-8"> </span><span 1460 class="cmtt-8"> </span><span 1461 class="cmtt-8"> </span><span 1462 class="cmtt-8"> </span><span 1463 class="cmtt-8"> </span><span 1464 class="cmtt-8"> </span><span 1465 class="cmtt-8"> </span><span 1466 class="cmtt-8"> |</span> 1467 <br class="fancyvrb" /><a 1468 id="x1-43068r2"></a><span 1469 class="cmr-6">2</span><span 1470 class="cmtt-8"> </span><span 1471 class="cmtt-8"> </span><span 1472 class="cmtt-8"> </span><span 1473 class="cmtt-8"> </span><span 1474 class="cmtt-8"> </span><span 1475 class="cmtt-8"> </span><span 1476 class="cmtt-8"> </span><span 1477 class="cmtt-8"> </span><span 1478 class="cmtt-8"> </span><span 1479 class="cmtt-8"> </span><span 1480 class="cmtt-8"> </span><span 1481 class="cmtt-8"> </span><span 1482 class="cmtt-8"> </span><span 1483 class="cmtt-8"> </span><span 1484 class="cmtt-8"> </span><span 1485 class="cmtt-8"> </span><span 1486 class="cmtt-8"> </span><span 1487 class="cmtt-8"> V</span> 1488 <br class="fancyvrb" /><a 1489 id="x1-43070r3"></a><span 1490 class="cmr-6">3</span><span 1491 class="cmtt-8"> </span><span 1492 class="cmtt-8"> </span> 1493 <br class="fancyvrb" /><a 1494 id="x1-43072r4"></a><span 1495 class="cmr-6">4</span><span 1496 class="cmtt-8"> </span><span 1497 class="cmtt-8"> </span><span 1498 class="cmtt-8"> </span><span 1499 class="cmtt-8"> </span><span 1500 class="cmtt-8"> </span><span 1501 class="cmtt-8"> </span><span 1502 class="cmtt-8"> </span><span 1503 class="cmtt-8"> </span><span 1504 class="cmtt-8"> </span><span 1505 class="cmtt-8"> 7</span><span 1506 class="cmtt-8"> 6</span><span 1507 class="cmtt-8"> 5</span><span 1508 class="cmtt-8"> 4</span><span 1509 class="cmtt-8"> 3</span><span 1510 class="cmtt-8"> 2</span><span 1511 class="cmtt-8"> 1</span><span 1512 class="cmtt-8"> 0</span> 1513 <br class="fancyvrb" /><a 1514 id="x1-43074r5"></a><span 1515 class="cmr-6">5</span><span 1516 class="cmtt-8"> </span><span 1517 class="cmtt-8"> byte</span><span 1518 class="cmtt-8"> 0</span><span 1519 class="cmtt-8"> [1</span><span 1520 class="cmtt-8"> 1</span><span 1521 class="cmtt-8"> 1</span><span 1522 class="cmtt-8"> 1</span><span 1523 class="cmtt-8"> 1</span><span 1524 class="cmtt-8"> 1</span><span 1525 class="cmtt-8"> 0</span><span 1526 class="cmtt-8"> 0]</span> 1527 <br class="fancyvrb" /><a 1528 id="x1-43076r6"></a><span 1529 class="cmr-6">6</span><span 1530 class="cmtt-8"> </span><span 1531 class="cmtt-8"> byte</span><span 1532 class="cmtt-8"> 1</span><span 1533 class="cmtt-8"> [0</span><span 1534 class="cmtt-8"> 1</span><span 1535 class="cmtt-8"> 0</span><span 1536 class="cmtt-8"> 0</span><span 1537 class="cmtt-8"> 1</span><span 1538 class="cmtt-8"> 0</span><span 1539 class="cmtt-8"> 0</span><span 1540 class="cmtt-8"> 0]</span> 1541 <br class="fancyvrb" /><a 1542 id="x1-43078r7"></a><span 1543 class="cmr-6">7</span><span 1544 class="cmtt-8"> </span><span 1545 class="cmtt-8"> byte</span><span 1546 class="cmtt-8"> 2</span><span 1547 class="cmtt-8"> [1</span><span 1548 class="cmtt-8"> 1</span><span 1549 class="cmtt-8"> 0</span><span 1550 class="cmtt-8"> 0</span><span 1551 class="cmtt-8"> 1</span><span 1552 class="cmtt-8"> 1</span><span 1553 class="cmtt-8"> 1</span><span 1554 class="cmtt-8"> 0]</span> 1555 <br class="fancyvrb" /><a 1556 id="x1-43080r8"></a><span 1557 class="cmr-6">8</span><span 1558 class="cmtt-8"> </span><span 1559 class="cmtt-8"> byte</span><span 1560 class="cmtt-8"> 3</span><span 1561 class="cmtt-8"> [0</span><span 1562 class="cmtt-8"> 0</span><span 1563 class="cmtt-8"> 0</span><span 1564 class="cmtt-8"> 0</span><span 1565 class="cmtt-8"> 0</span><span 1566 class="cmtt-8"> 1</span><span 1567 class="cmtt-8"> 1</span><span 1568 class="cmtt-8"> 0]</span><span 1569 class="cmtt-8"> </span><span 1570 class="cmtt-8"> <-</span> 1571 <br class="fancyvrb" /><a 1572 id="x1-43082r9"></a><span 1573 class="cmr-6">9</span><span 1574 class="cmtt-8"> </span><span 1575 class="cmtt-8"> </span><span 1576 class="cmtt-8"> </span><span 1577 class="cmtt-8"> </span><span 1578 class="cmtt-8"> </span><span 1579 class="cmtt-8"> </span><span 1580 class="cmtt-8"> </span><span 1581 class="cmtt-8"> </span><span 1582 class="cmtt-8"> </span><span 1583 class="cmtt-8"> </span><span 1584 class="cmtt-8"> </span><span 1585 class="cmtt-8"> </span><span 1586 class="cmtt-8"> </span><span 1587 class="cmtt-8"> </span><span 1588 class="cmtt-8"> ...</span> 1589 <br class="fancyvrb" /><a 1590 id="x1-43084r10"></a><span 1591 class="cmr-6">10</span><span 1592 class="cmtt-8"> </span><span 1593 class="cmtt-8"> byte</span><span 1594 class="cmtt-8"> n</span><span 1595 class="cmtt-8"> [</span><span 1596 class="cmtt-8"> </span><span 1597 class="cmtt-8"> </span><span 1598 class="cmtt-8"> </span><span 1599 class="cmtt-8"> </span><span 1600 class="cmtt-8"> </span><span 1601 class="cmtt-8"> </span><span 1602 class="cmtt-8"> </span><span 1603 class="cmtt-8"> </span><span 1604 class="cmtt-8"> </span><span 1605 class="cmtt-8"> </span><span 1606 class="cmtt-8"> </span><span 1607 class="cmtt-8"> </span><span 1608 class="cmtt-8"> </span><span 1609 class="cmtt-8"> </span><span 1610 class="cmtt-8"> ]</span><span 1611 class="cmtt-8"> </span><span 1612 class="cmtt-8"> bytestream</span><span 1613 class="cmtt-8"> length</span><span 1614 class="cmtt-8"> ==</span><span 1615 class="cmtt-8"> 4</span><span 1616 class="cmtt-8"> bytes</span> 1617 <br class="fancyvrb" /><a 1618 id="x1-43086r11"></a><span 1619 class="cmr-6">11</span><span 1620 class="cmtt-8"> </span><span 1621 class="cmtt-8"> </span> 1622 </div> 1623 <!--l. 173--><p class="noindent" > 1624 <h5 class="subsubsectionHead"><span class="titlemark">2.1.7 </span> <a 1625 id="x1-440002.1.7"></a>decoding example</h5> 1626 <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example: 1627 <!--l. 177--><p class="noindent" > 1628 <div class="fancyvrb" id="fancyvrb6"> 1629 1630 1631 1632 <a 1633 id="x1-44002r1"></a><span 1634 class="cmr-6">1</span><span 1635 class="cmtt-8"> </span><span 1636 class="cmtt-8"> </span><span 1637 class="cmtt-8"> </span><span 1638 class="cmtt-8"> </span><span 1639 class="cmtt-8"> </span><span 1640 class="cmtt-8"> </span><span 1641 class="cmtt-8"> </span><span 1642 class="cmtt-8"> </span><span 1643 class="cmtt-8"> </span><span 1644 class="cmtt-8"> </span><span 1645 class="cmtt-8"> </span><span 1646 class="cmtt-8"> </span><span 1647 class="cmtt-8"> </span><span 1648 class="cmtt-8"> </span><span 1649 class="cmtt-8"> </span><span 1650 class="cmtt-8"> </span><span 1651 class="cmtt-8"> </span><span 1652 class="cmtt-8"> </span><span 1653 class="cmtt-8"> </span><span 1654 class="cmtt-8"> </span><span 1655 class="cmtt-8"> </span><span 1656 class="cmtt-8"> </span><span 1657 class="cmtt-8"> </span><span 1658 class="cmtt-8"> |</span> 1659 <br class="fancyvrb" /><a 1660 id="x1-44004r2"></a><span 1661 class="cmr-6">2</span><span 1662 class="cmtt-8"> </span><span 1663 class="cmtt-8"> </span><span 1664 class="cmtt-8"> </span><span 1665 class="cmtt-8"> </span><span 1666 class="cmtt-8"> </span><span 1667 class="cmtt-8"> </span><span 1668 class="cmtt-8"> </span><span 1669 class="cmtt-8"> </span><span 1670 class="cmtt-8"> </span><span 1671 class="cmtt-8"> </span><span 1672 class="cmtt-8"> </span><span 1673 class="cmtt-8"> </span><span 1674 class="cmtt-8"> </span><span 1675 class="cmtt-8"> </span><span 1676 class="cmtt-8"> </span><span 1677 class="cmtt-8"> </span><span 1678 class="cmtt-8"> </span><span 1679 class="cmtt-8"> </span><span 1680 class="cmtt-8"> </span><span 1681 class="cmtt-8"> </span><span 1682 class="cmtt-8"> </span><span 1683 class="cmtt-8"> </span><span 1684 class="cmtt-8"> </span><span 1685 class="cmtt-8"> V</span> 1686 <br class="fancyvrb" /><a 1687 id="x1-44006r3"></a><span 1688 class="cmr-6">3</span><span 1689 class="cmtt-8"> </span><span 1690 class="cmtt-8"> </span> 1691 <br class="fancyvrb" /><a 1692 id="x1-44008r4"></a><span 1693 class="cmr-6">4</span><span 1694 class="cmtt-8"> </span><span 1695 class="cmtt-8"> </span><span 1696 class="cmtt-8"> </span><span 1697 class="cmtt-8"> </span><span 1698 class="cmtt-8"> </span><span 1699 class="cmtt-8"> </span><span 1700 class="cmtt-8"> </span><span 1701 class="cmtt-8"> </span><span 1702 class="cmtt-8"> </span><span 1703 class="cmtt-8"> 7</span><span 1704 class="cmtt-8"> 6</span><span 1705 class="cmtt-8"> 5</span><span 1706 class="cmtt-8"> 4</span><span 1707 class="cmtt-8"> 3</span><span 1708 class="cmtt-8"> 2</span><span 1709 class="cmtt-8"> 1</span><span 1710 class="cmtt-8"> 0</span> 1711 <br class="fancyvrb" /><a 1712 id="x1-44010r5"></a><span 1713 class="cmr-6">5</span><span 1714 class="cmtt-8"> </span><span 1715 class="cmtt-8"> byte</span><span 1716 class="cmtt-8"> 0</span><span 1717 class="cmtt-8"> [1</span><span 1718 class="cmtt-8"> 1</span><span 1719 class="cmtt-8"> 1</span><span 1720 class="cmtt-8"> 1</span><span 1721 class="cmtt-8"> 1</span><span 1722 class="cmtt-8"> 1</span><span 1723 class="cmtt-8"> 0</span><span 1724 class="cmtt-8"> 0]</span><span 1725 class="cmtt-8"> </span><span 1726 class="cmtt-8"> <-</span> 1727 <br class="fancyvrb" /><a 1728 id="x1-44012r6"></a><span 1729 class="cmr-6">6</span><span 1730 class="cmtt-8"> </span><span 1731 class="cmtt-8"> byte</span><span 1732 class="cmtt-8"> 1</span><span 1733 class="cmtt-8"> [0</span><span 1734 class="cmtt-8"> 1</span><span 1735 class="cmtt-8"> 0</span><span 1736 class="cmtt-8"> 0</span><span 1737 class="cmtt-8"> 1</span><span 1738 class="cmtt-8"> 0</span><span 1739 class="cmtt-8"> 0</span><span 1740 class="cmtt-8"> 0]</span> 1741 <br class="fancyvrb" /><a 1742 id="x1-44014r7"></a><span 1743 class="cmr-6">7</span><span 1744 class="cmtt-8"> </span><span 1745 class="cmtt-8"> byte</span><span 1746 class="cmtt-8"> 2</span><span 1747 class="cmtt-8"> [1</span><span 1748 class="cmtt-8"> 1</span><span 1749 class="cmtt-8"> 0</span><span 1750 class="cmtt-8"> 0</span><span 1751 class="cmtt-8"> 1</span><span 1752 class="cmtt-8"> 1</span><span 1753 class="cmtt-8"> 1</span><span 1754 class="cmtt-8"> 0]</span> 1755 <br class="fancyvrb" /><a 1756 id="x1-44016r8"></a><span 1757 class="cmr-6">8</span><span 1758 class="cmtt-8"> </span><span 1759 class="cmtt-8"> byte</span><span 1760 class="cmtt-8"> 3</span><span 1761 class="cmtt-8"> [0</span><span 1762 class="cmtt-8"> 0</span><span 1763 class="cmtt-8"> 0</span><span 1764 class="cmtt-8"> 0</span><span 1765 class="cmtt-8"> 0</span><span 1766 class="cmtt-8"> 1</span><span 1767 class="cmtt-8"> 1</span><span 1768 class="cmtt-8"> 0]</span><span 1769 class="cmtt-8"> </span><span 1770 class="cmtt-8"> bytestream</span><span 1771 class="cmtt-8"> length</span><span 1772 class="cmtt-8"> ==</span><span 1773 class="cmtt-8"> 4</span><span 1774 class="cmtt-8"> bytes</span> 1775 <br class="fancyvrb" /><a 1776 id="x1-44018r9"></a><span 1777 class="cmr-6">9</span><span 1778 class="cmtt-8"> </span><span 1779 class="cmtt-8"> </span> 1780 </div> 1781 <!--l. 190--><p class="noindent" >We read two, two-bit integer fields, resulting in the returned numbers ’b00’ and ’b11’. Two things 1782 are worth noting here: 1783 <ul class="itemize1"> 1784 <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading 1785 some other combination of bit-widths from the bitstream is well defined. There are 1786 no artificial alignment boundaries maintained in the bitstream. 1787 </li> 1788 <li class="itemize">The second value is the two-bit-wide integer ’b11’. This value may be interpreted 1789 either as the unsigned value ’3’, or the signed value ’-1’. Signedness is dependent on 1790 decode context.</li></ul> 1791 <!--l. 208--><p class="noindent" > 1792 <h5 class="subsubsectionHead"><span class="titlemark">2.1.8 </span> <a 1793 id="x1-450002.1.8"></a>end-of-packet alignment</h5> 1794 <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are 1795 embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream. 1796 Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often, 1797 the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space 1798 in the last byte of a packet. 1799 <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus, 1800 should this unused space be read, it will return binary zeroes. 1801 <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an ’end-of-packet’ condition. 1802 End-of-packet is not to be considered an error; it is merely a state indicating that there is 1803 insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a 1804 normal mode of operation, and as such, decoders must handle reading past the end of a packet as 1805 a typical mode of operation. Any further read operations after an ’end-of-packet’ condition shall 1806 also return ’end-of-packet’. 1807 1808 1809 1810 <!--l. 233--><p class="noindent" > 1811 <h5 class="subsubsectionHead"><span class="titlemark">2.1.9 </span> <a 1812 id="x1-460002.1.9"></a>reading zero bits</h5> 1813 <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value ’0’ and does not increment the stream cursor. 1814 Reading to the end of the packet (but not past, such that an ’end-of-packet’ condition has not 1815 triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an 1816 end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets ’end-of-packet’ 1817 shall also fail with ’end-of-packet’. 1818 1819 1820 1821 1822 1823 1824 <h3 class="sectionHead"><span class="titlemark">3 </span> <a 1825 id="x1-470003"></a>Probability Model and Codebooks</h3> 1826 <!--l. 6--><p class="noindent" > 1827 <h4 class="subsectionHead"><span class="titlemark">3.1 </span> <a 1828 id="x1-480003.1"></a>Overview</h4> 1829 <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured 1830 probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the 1831 bitstream itself in the third header, the codec setup header. This packed configuration consists of 1832 multiple ’codebooks’, each containing a specific Huffman-equivalent representation for decoding 1833 compressed codewords as well as an optional lookup table of output vector values to which a 1834 decoded Huffman value is applied as an offset, generating the final decoded output corresponding 1835 to a given compressed codeword. 1836 <!--l. 18--><p class="noindent" > 1837 <h5 class="subsubsectionHead"><span class="titlemark">3.1.1 </span> <a 1838 id="x1-490003.1.1"></a>Bitwise operation</h5> 1839 <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves 1840 and the codewords they decode are unrolled from a packet as a series of arbitrary-width values 1841 read from the stream according to <a 1842 href="#x1-360002">Section 2</a>, “<a 1843 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>”. 1844 <!--l. 27--><p class="noindent" > 1845 <h4 class="subsectionHead"><span class="titlemark">3.2 </span> <a 1846 id="x1-500003.2"></a>Packed codebook format</h4> 1847 <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system’s native byte width is 1848 eight bits. This is not universally true; see <a 1849 href="#x1-360002">Section 2</a>, “<a 1850 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>” for discussion 1851 relating to non-eight-bit bytes. 1852 1853 1854 1855 <!--l. 34--><p class="noindent" > 1856 <h5 class="subsubsectionHead"><span class="titlemark">3.2.1 </span> <a 1857 id="x1-510003.2.1"></a>codebook decode</h5> 1858 <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342: 1859 <!--l. 38--><p class="noindent" > 1860 <div class="fancyvrb" id="fancyvrb7"> 1861 <a 1862 id="x1-51002r1"></a><span 1863 class="cmr-6">1</span><span 1864 class="cmtt-8"> </span><span 1865 class="cmtt-8"> byte</span><span 1866 class="cmtt-8"> 0:</span><span 1867 class="cmtt-8"> [</span><span 1868 class="cmtt-8"> 0</span><span 1869 class="cmtt-8"> 1</span><span 1870 class="cmtt-8"> 0</span><span 1871 class="cmtt-8"> 0</span><span 1872 class="cmtt-8"> 0</span><span 1873 class="cmtt-8"> 0</span><span 1874 class="cmtt-8"> 1</span><span 1875 class="cmtt-8"> 0</span><span 1876 class="cmtt-8"> ]</span><span 1877 class="cmtt-8"> (0x42)</span> 1878 <br class="fancyvrb" /><a 1879 id="x1-51004r2"></a><span 1880 class="cmr-6">2</span><span 1881 class="cmtt-8"> </span><span 1882 class="cmtt-8"> byte</span><span 1883 class="cmtt-8"> 1:</span><span 1884 class="cmtt-8"> [</span><span 1885 class="cmtt-8"> 0</span><span 1886 class="cmtt-8"> 1</span><span 1887 class="cmtt-8"> 0</span><span 1888 class="cmtt-8"> 0</span><span 1889 class="cmtt-8"> 0</span><span 1890 class="cmtt-8"> 0</span><span 1891 class="cmtt-8"> 1</span><span 1892 class="cmtt-8"> 1</span><span 1893 class="cmtt-8"> ]</span><span 1894 class="cmtt-8"> (0x43)</span> 1895 <br class="fancyvrb" /><a 1896 id="x1-51006r3"></a><span 1897 class="cmr-6">3</span><span 1898 class="cmtt-8"> </span><span 1899 class="cmtt-8"> byte</span><span 1900 class="cmtt-8"> 2:</span><span 1901 class="cmtt-8"> [</span><span 1902 class="cmtt-8"> 0</span><span 1903 class="cmtt-8"> 1</span><span 1904 class="cmtt-8"> 0</span><span 1905 class="cmtt-8"> 1</span><span 1906 class="cmtt-8"> 0</span><span 1907 class="cmtt-8"> 1</span><span 1908 class="cmtt-8"> 1</span><span 1909 class="cmtt-8"> 0</span><span 1910 class="cmtt-8"> ]</span><span 1911 class="cmtt-8"> (0x56)</span> 1912 </div> 1913 <!--l. 44--><p class="noindent" >16 bit <span 1914 class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span 1915 class="cmtt-12">[codebook_entries] </span>fields: 1916 <!--l. 46--><p class="noindent" > 1917 <div class="fancyvrb" id="fancyvrb8"> 1918 <a 1919 id="x1-51008r1"></a><span 1920 class="cmr-6">1</span><span 1921 class="cmtt-8"> </span><span 1922 class="cmtt-8"> </span> 1923 <br class="fancyvrb" /><a 1924 id="x1-51010r2"></a><span 1925 class="cmr-6">2</span><span 1926 class="cmtt-8"> </span><span 1927 class="cmtt-8"> byte</span><span 1928 class="cmtt-8"> 3:</span><span 1929 class="cmtt-8"> [</span><span 1930 class="cmtt-8"> X</span><span 1931 class="cmtt-8"> X</span><span 1932 class="cmtt-8"> X</span><span 1933 class="cmtt-8"> X</span><span 1934 class="cmtt-8"> X</span><span 1935 class="cmtt-8"> X</span><span 1936 class="cmtt-8"> X</span><span 1937 class="cmtt-8"> X</span><span 1938 class="cmtt-8"> ]</span> 1939 <br class="fancyvrb" /><a 1940 id="x1-51012r3"></a><span 1941 class="cmr-6">3</span><span 1942 class="cmtt-8"> </span><span 1943 class="cmtt-8"> byte</span><span 1944 class="cmtt-8"> 4:</span><span 1945 class="cmtt-8"> [</span><span 1946 class="cmtt-8"> X</span><span 1947 class="cmtt-8"> X</span><span 1948 class="cmtt-8"> X</span><span 1949 class="cmtt-8"> X</span><span 1950 class="cmtt-8"> X</span><span 1951 class="cmtt-8"> X</span><span 1952 class="cmtt-8"> X</span><span 1953 class="cmtt-8"> X</span><span 1954 class="cmtt-8"> ]</span><span 1955 class="cmtt-8"> [codebook_dimensions]</span><span 1956 class="cmtt-8"> (16</span><span 1957 class="cmtt-8"> bit</span><span 1958 class="cmtt-8"> unsigned)</span> 1959 <br class="fancyvrb" /><a 1960 id="x1-51014r4"></a><span 1961 class="cmr-6">4</span><span 1962 class="cmtt-8"> </span><span 1963 class="cmtt-8"> </span> 1964 <br class="fancyvrb" /><a 1965 id="x1-51016r5"></a><span 1966 class="cmr-6">5</span><span 1967 class="cmtt-8"> </span><span 1968 class="cmtt-8"> byte</span><span 1969 class="cmtt-8"> 5:</span><span 1970 class="cmtt-8"> [</span><span 1971 class="cmtt-8"> X</span><span 1972 class="cmtt-8"> X</span><span 1973 class="cmtt-8"> X</span><span 1974 class="cmtt-8"> X</span><span 1975 class="cmtt-8"> X</span><span 1976 class="cmtt-8"> X</span><span 1977 class="cmtt-8"> X</span><span 1978 class="cmtt-8"> X</span><span 1979 class="cmtt-8"> ]</span> 1980 <br class="fancyvrb" /><a 1981 id="x1-51018r6"></a><span 1982 class="cmr-6">6</span><span 1983 class="cmtt-8"> </span><span 1984 class="cmtt-8"> byte</span><span 1985 class="cmtt-8"> 6:</span><span 1986 class="cmtt-8"> [</span><span 1987 class="cmtt-8"> X</span><span 1988 class="cmtt-8"> X</span><span 1989 class="cmtt-8"> X</span><span 1990 class="cmtt-8"> X</span><span 1991 class="cmtt-8"> X</span><span 1992 class="cmtt-8"> X</span><span 1993 class="cmtt-8"> X</span><span 1994 class="cmtt-8"> X</span><span 1995 class="cmtt-8"> ]</span> 1996 <br class="fancyvrb" /><a 1997 id="x1-51020r7"></a><span 1998 class="cmr-6">7</span><span 1999 class="cmtt-8"> </span><span 2000 class="cmtt-8"> byte</span><span 2001 class="cmtt-8"> 7:</span><span 2002 class="cmtt-8"> [</span><span 2003 class="cmtt-8"> X</span><span 2004 class="cmtt-8"> X</span><span 2005 class="cmtt-8"> X</span><span 2006 class="cmtt-8"> X</span><span 2007 class="cmtt-8"> X</span><span 2008 class="cmtt-8"> X</span><span 2009 class="cmtt-8"> X</span><span 2010 class="cmtt-8"> X</span><span 2011 class="cmtt-8"> ]</span><span 2012 class="cmtt-8"> [codebook_entries]</span><span 2013 class="cmtt-8"> (24</span><span 2014 class="cmtt-8"> bit</span><span 2015 class="cmtt-8"> unsigned)</span> 2016 <br class="fancyvrb" /><a 2017 id="x1-51022r8"></a><span 2018 class="cmr-6">8</span><span 2019 class="cmtt-8"> </span><span 2020 class="cmtt-8"> </span> 2021 </div> 2022 <!--l. 57--><p class="noindent" >Next is the <span 2023 class="cmtt-12">[ordered] </span>bit flag: 2024 <!--l. 59--><p class="noindent" > 2025 <div class="fancyvrb" id="fancyvrb9"> 2026 <a 2027 id="x1-51024r1"></a><span 2028 class="cmr-6">1</span><span 2029 class="cmtt-8"> </span><span 2030 class="cmtt-8"> </span> 2031 <br class="fancyvrb" /><a 2032 id="x1-51026r2"></a><span 2033 class="cmr-6">2</span><span 2034 class="cmtt-8"> </span><span 2035 class="cmtt-8"> byte</span><span 2036 class="cmtt-8"> 8:</span><span 2037 class="cmtt-8"> [</span><span 2038 class="cmtt-8"> </span><span 2039 class="cmtt-8"> </span><span 2040 class="cmtt-8"> </span><span 2041 class="cmtt-8"> </span><span 2042 class="cmtt-8"> </span><span 2043 class="cmtt-8"> </span><span 2044 class="cmtt-8"> </span><span 2045 class="cmtt-8"> </span><span 2046 class="cmtt-8"> </span><span 2047 class="cmtt-8"> </span><span 2048 class="cmtt-8"> </span><span 2049 class="cmtt-8"> </span><span 2050 class="cmtt-8"> </span><span 2051 class="cmtt-8"> </span><span 2052 class="cmtt-8"> X</span><span 2053 class="cmtt-8"> ]</span><span 2054 class="cmtt-8"> [ordered]</span><span 2055 class="cmtt-8"> (1</span><span 2056 class="cmtt-8"> bit)</span> 2057 <br class="fancyvrb" /><a 2058 id="x1-51028r3"></a><span 2059 class="cmr-6">3</span><span 2060 class="cmtt-8"> </span><span 2061 class="cmtt-8"> </span> 2062 </div> 2063 <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span 2064 class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length. 2065 We now read the list of codeword lengths and store these lengths in the array 2066 <span 2067 class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span 2068 class="cmtt-12">[ordered] </span>flag 2069 is set or unset. 2070 <ul class="itemize1"> 2071 <li class="itemize">If the <span 2072 class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder 2073 needs to read each codeword length one-by-one. 2074 <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span 2075 class="cmtt-12">[sparse] </span>flag. This flag determines 2076 whether or not the codebook contains unused entries that are not to be included in 2077 2078 2079 2080 the codeword decode tree: 2081 <!--l. 82--><p class="noindent" > 2082 <div class="fancyvrb" id="fancyvrb10"> 2083 <a 2084 id="x1-51030r1"></a><span 2085 class="cmr-6">1</span><span 2086 class="cmtt-8"> </span><span 2087 class="cmtt-8"> byte</span><span 2088 class="cmtt-8"> 8:</span><span 2089 class="cmtt-8"> [</span><span 2090 class="cmtt-8"> </span><span 2091 class="cmtt-8"> </span><span 2092 class="cmtt-8"> </span><span 2093 class="cmtt-8"> </span><span 2094 class="cmtt-8"> </span><span 2095 class="cmtt-8"> </span><span 2096 class="cmtt-8"> </span><span 2097 class="cmtt-8"> </span><span 2098 class="cmtt-8"> </span><span 2099 class="cmtt-8"> </span><span 2100 class="cmtt-8"> </span><span 2101 class="cmtt-8"> </span><span 2102 class="cmtt-8"> X</span><span 2103 class="cmtt-8"> 1</span><span 2104 class="cmtt-8"> ]</span><span 2105 class="cmtt-8"> [sparse]</span><span 2106 class="cmtt-8"> flag</span><span 2107 class="cmtt-8"> (1</span><span 2108 class="cmtt-8"> bit)</span> 2109 </div> 2110 <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span 2111 class="cmtt-12">[codebook_entries] </span>codebook entries: 2112 <!--l. 89--><p class="noindent" > 2113 <div class="fancyvrb" id="fancyvrb11"> 2114 <a 2115 id="x1-51032r1"></a><span 2116 class="cmr-6">1</span><span 2117 class="cmtt-8"> </span><span 2118 class="cmtt-8"> </span> 2119 <br class="fancyvrb" /><a 2120 id="x1-51034r2"></a><span 2121 class="cmr-6">2</span><span 2122 class="cmtt-8"> </span><span 2123 class="cmtt-8"> </span><span 2124 class="cmtt-8"> </span><span 2125 class="cmtt-8"> 1)</span><span 2126 class="cmtt-8"> if([sparse]</span><span 2127 class="cmtt-8"> is</span><span 2128 class="cmtt-8"> set)</span><span 2129 class="cmtt-8"> </span><span 2130 class="cmsy-8">{</span> 2131 <br class="fancyvrb" /><a 2132 id="x1-51036r3"></a><span 2133 class="cmr-6">3</span><span 2134 class="cmtt-8"> </span><span 2135 class="cmtt-8"> </span> 2136 <br class="fancyvrb" /><a 2137 id="x1-51038r4"></a><span 2138 class="cmr-6">4</span><span 2139 class="cmtt-8"> </span><span 2140 class="cmtt-8"> </span><span 2141 class="cmtt-8"> </span><span 2142 class="cmtt-8"> </span><span 2143 class="cmtt-8"> </span><span 2144 class="cmtt-8"> </span><span 2145 class="cmtt-8"> </span><span 2146 class="cmtt-8"> </span><span 2147 class="cmtt-8"> </span><span 2148 class="cmtt-8"> </span><span 2149 class="cmtt-8"> 2)</span><span 2150 class="cmtt-8"> [flag]</span><span 2151 class="cmtt-8"> =</span><span 2152 class="cmtt-8"> read</span><span 2153 class="cmtt-8"> one</span><span 2154 class="cmtt-8"> bit;</span> 2155 <br class="fancyvrb" /><a 2156 id="x1-51040r5"></a><span 2157 class="cmr-6">5</span><span 2158 class="cmtt-8"> </span><span 2159 class="cmtt-8"> </span><span 2160 class="cmtt-8"> </span><span 2161 class="cmtt-8"> </span><span 2162 class="cmtt-8"> </span><span 2163 class="cmtt-8"> </span><span 2164 class="cmtt-8"> </span><span 2165 class="cmtt-8"> </span><span 2166 class="cmtt-8"> </span><span 2167 class="cmtt-8"> </span><span 2168 class="cmtt-8"> 3)</span><span 2169 class="cmtt-8"> if([flag]</span><span 2170 class="cmtt-8"> is</span><span 2171 class="cmtt-8"> set)</span><span 2172 class="cmtt-8"> </span><span 2173 class="cmsy-8">{</span> 2174 <br class="fancyvrb" /><a 2175 id="x1-51042r6"></a><span 2176 class="cmr-6">6</span><span 2177 class="cmtt-8"> </span><span 2178 class="cmtt-8"> </span> 2179 <br class="fancyvrb" /><a 2180 id="x1-51044r7"></a><span 2181 class="cmr-6">7</span><span 2182 class="cmtt-8"> </span><span 2183 class="cmtt-8"> </span><span 2184 class="cmtt-8"> </span><span 2185 class="cmtt-8"> </span><span 2186 class="cmtt-8"> </span><span 2187 class="cmtt-8"> </span><span 2188 class="cmtt-8"> </span><span 2189 class="cmtt-8"> </span><span 2190 class="cmtt-8"> </span><span 2191 class="cmtt-8"> </span><span 2192 class="cmtt-8"> </span><span 2193 class="cmtt-8"> </span><span 2194 class="cmtt-8"> </span><span 2195 class="cmtt-8"> </span><span 2196 class="cmtt-8"> </span><span 2197 class="cmtt-8"> 4)</span><span 2198 class="cmtt-8"> [length]</span><span 2199 class="cmtt-8"> =</span><span 2200 class="cmtt-8"> read</span><span 2201 class="cmtt-8"> a</span><span 2202 class="cmtt-8"> five</span><span 2203 class="cmtt-8"> bit</span><span 2204 class="cmtt-8"> unsigned</span><span 2205 class="cmtt-8"> integer;</span> 2206 <br class="fancyvrb" /><a 2207 id="x1-51046r8"></a><span 2208 class="cmr-6">8</span><span 2209 class="cmtt-8"> </span><span 2210 class="cmtt-8"> </span><span 2211 class="cmtt-8"> </span><span 2212 class="cmtt-8"> </span><span 2213 class="cmtt-8"> </span><span 2214 class="cmtt-8"> </span><span 2215 class="cmtt-8"> </span><span 2216 class="cmtt-8"> </span><span 2217 class="cmtt-8"> </span><span 2218 class="cmtt-8"> </span><span 2219 class="cmtt-8"> </span><span 2220 class="cmtt-8"> </span><span 2221 class="cmtt-8"> </span><span 2222 class="cmtt-8"> </span><span 2223 class="cmtt-8"> </span><span 2224 class="cmtt-8"> 5)</span><span 2225 class="cmtt-8"> codeword</span><span 2226 class="cmtt-8"> length</span><span 2227 class="cmtt-8"> for</span><span 2228 class="cmtt-8"> this</span><span 2229 class="cmtt-8"> entry</span><span 2230 class="cmtt-8"> is</span><span 2231 class="cmtt-8"> [length]+1;</span> 2232 <br class="fancyvrb" /><a 2233 id="x1-51048r9"></a><span 2234 class="cmr-6">9</span><span 2235 class="cmtt-8"> </span><span 2236 class="cmtt-8"> </span> 2237 <br class="fancyvrb" /><a 2238 id="x1-51050r10"></a><span 2239 class="cmr-6">10</span><span 2240 class="cmtt-8"> </span><span 2241 class="cmtt-8"> </span><span 2242 class="cmtt-8"> </span><span 2243 class="cmtt-8"> </span><span 2244 class="cmtt-8"> </span><span 2245 class="cmtt-8"> </span><span 2246 class="cmtt-8"> </span><span 2247 class="cmtt-8"> </span><span 2248 class="cmtt-8"> </span><span 2249 class="cmtt-8"> </span><span 2250 class="cmtt-8"> </span><span 2251 class="cmtt-8"> </span><span 2252 class="cmtt-8"> </span><span 2253 class="cmtt-8"> </span><span 2254 class="cmsy-8">}</span><span 2255 class="cmtt-8"> else</span><span 2256 class="cmtt-8"> </span><span 2257 class="cmsy-8">{</span> 2258 <br class="fancyvrb" /><a 2259 id="x1-51052r11"></a><span 2260 class="cmr-6">11</span><span 2261 class="cmtt-8"> </span><span 2262 class="cmtt-8"> </span> 2263 <br class="fancyvrb" /><a 2264 id="x1-51054r12"></a><span 2265 class="cmr-6">12</span><span 2266 class="cmtt-8"> </span><span 2267 class="cmtt-8"> </span><span 2268 class="cmtt-8"> </span><span 2269 class="cmtt-8"> </span><span 2270 class="cmtt-8"> </span><span 2271 class="cmtt-8"> </span><span 2272 class="cmtt-8"> </span><span 2273 class="cmtt-8"> </span><span 2274 class="cmtt-8"> </span><span 2275 class="cmtt-8"> </span><span 2276 class="cmtt-8"> </span><span 2277 class="cmtt-8"> </span><span 2278 class="cmtt-8"> </span><span 2279 class="cmtt-8"> </span><span 2280 class="cmtt-8"> </span><span 2281 class="cmtt-8"> 6)</span><span 2282 class="cmtt-8"> this</span><span 2283 class="cmtt-8"> entry</span><span 2284 class="cmtt-8"> is</span><span 2285 class="cmtt-8"> unused.</span><span 2286 class="cmtt-8"> </span><span 2287 class="cmtt-8"> mark</span><span 2288 class="cmtt-8"> it</span><span 2289 class="cmtt-8"> as</span><span 2290 class="cmtt-8"> such.</span> 2291 <br class="fancyvrb" /><a 2292 id="x1-51056r13"></a><span 2293 class="cmr-6">13</span><span 2294 class="cmtt-8"> </span><span 2295 class="cmtt-8"> </span> 2296 <br class="fancyvrb" /><a 2297 id="x1-51058r14"></a><span 2298 class="cmr-6">14</span><span 2299 class="cmtt-8"> </span><span 2300 class="cmtt-8"> </span><span 2301 class="cmtt-8"> </span><span 2302 class="cmtt-8"> </span><span 2303 class="cmtt-8"> </span><span 2304 class="cmtt-8"> </span><span 2305 class="cmtt-8"> </span><span 2306 class="cmtt-8"> </span><span 2307 class="cmtt-8"> </span><span 2308 class="cmtt-8"> </span><span 2309 class="cmtt-8"> </span><span 2310 class="cmtt-8"> </span><span 2311 class="cmtt-8"> </span><span 2312 class="cmtt-8"> </span><span 2313 class="cmsy-8">}</span> 2314 <br class="fancyvrb" /><a 2315 id="x1-51060r15"></a><span 2316 class="cmr-6">15</span><span 2317 class="cmtt-8"> </span><span 2318 class="cmtt-8"> </span> 2319 <br class="fancyvrb" /><a 2320 id="x1-51062r16"></a><span 2321 class="cmr-6">16</span><span 2322 class="cmtt-8"> </span><span 2323 class="cmtt-8"> </span><span 2324 class="cmtt-8"> </span><span 2325 class="cmtt-8"> </span><span 2326 class="cmtt-8"> </span><span 2327 class="cmtt-8"> </span><span 2328 class="cmtt-8"> </span><span 2329 class="cmsy-8">}</span><span 2330 class="cmtt-8"> else</span><span 2331 class="cmtt-8"> the</span><span 2332 class="cmtt-8"> sparse</span><span 2333 class="cmtt-8"> flag</span><span 2334 class="cmtt-8"> is</span><span 2335 class="cmtt-8"> not</span><span 2336 class="cmtt-8"> set</span><span 2337 class="cmtt-8"> </span><span 2338 class="cmsy-8">{</span> 2339 <br class="fancyvrb" /><a 2340 id="x1-51064r17"></a><span 2341 class="cmr-6">17</span><span 2342 class="cmtt-8"> </span><span 2343 class="cmtt-8"> </span> 2344 <br class="fancyvrb" /><a 2345 id="x1-51066r18"></a><span 2346 class="cmr-6">18</span><span 2347 class="cmtt-8"> </span><span 2348 class="cmtt-8"> </span><span 2349 class="cmtt-8"> </span><span 2350 class="cmtt-8"> </span><span 2351 class="cmtt-8"> </span><span 2352 class="cmtt-8"> </span><span 2353 class="cmtt-8"> </span><span 2354 class="cmtt-8"> </span><span 2355 class="cmtt-8"> </span><span 2356 class="cmtt-8"> 7)</span><span 2357 class="cmtt-8"> [length]</span><span 2358 class="cmtt-8"> =</span><span 2359 class="cmtt-8"> read</span><span 2360 class="cmtt-8"> a</span><span 2361 class="cmtt-8"> five</span><span 2362 class="cmtt-8"> bit</span><span 2363 class="cmtt-8"> unsigned</span><span 2364 class="cmtt-8"> integer;</span> 2365 <br class="fancyvrb" /><a 2366 id="x1-51068r19"></a><span 2367 class="cmr-6">19</span><span 2368 class="cmtt-8"> </span><span 2369 class="cmtt-8"> </span><span 2370 class="cmtt-8"> </span><span 2371 class="cmtt-8"> </span><span 2372 class="cmtt-8"> </span><span 2373 class="cmtt-8"> </span><span 2374 class="cmtt-8"> </span><span 2375 class="cmtt-8"> </span><span 2376 class="cmtt-8"> </span><span 2377 class="cmtt-8"> 8)</span><span 2378 class="cmtt-8"> the</span><span 2379 class="cmtt-8"> codeword</span><span 2380 class="cmtt-8"> length</span><span 2381 class="cmtt-8"> for</span><span 2382 class="cmtt-8"> this</span><span 2383 class="cmtt-8"> entry</span><span 2384 class="cmtt-8"> is</span><span 2385 class="cmtt-8"> [length]+1;</span> 2386 <br class="fancyvrb" /><a 2387 id="x1-51070r20"></a><span 2388 class="cmr-6">20</span><span 2389 class="cmtt-8"> </span><span 2390 class="cmtt-8"> </span> 2391 <br class="fancyvrb" /><a 2392 id="x1-51072r21"></a><span 2393 class="cmr-6">21</span><span 2394 class="cmtt-8"> </span><span 2395 class="cmtt-8"> </span><span 2396 class="cmtt-8"> </span><span 2397 class="cmtt-8"> </span><span 2398 class="cmtt-8"> </span><span 2399 class="cmtt-8"> </span><span 2400 class="cmtt-8"> </span><span 2401 class="cmsy-8">}</span> 2402 <br class="fancyvrb" /><a 2403 id="x1-51074r22"></a><span 2404 class="cmr-6">22</span><span 2405 class="cmtt-8"> </span><span 2406 class="cmtt-8"> </span> 2407 </div> 2408 </li> 2409 <li class="itemize">If the <span 2410 class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in 2411 ascending length order. Rather than reading a length for every codeword, the 2412 encoder reads the number of codewords per length. That is, beginning at entry 2413 zero: 2414 <!--l. 120--><p class="noindent" > 2415 <div class="fancyvrb" id="fancyvrb12"> 2416 <a 2417 id="x1-51076r1"></a><span 2418 class="cmr-6">1</span><span 2419 class="cmtt-8"> </span><span 2420 class="cmtt-8"> </span><span 2421 class="cmtt-8"> </span><span 2422 class="cmtt-8"> 1)</span><span 2423 class="cmtt-8"> [current_entry]</span><span 2424 class="cmtt-8"> =</span><span 2425 class="cmtt-8"> 0;</span> 2426 <br class="fancyvrb" /><a 2427 id="x1-51078r2"></a><span 2428 class="cmr-6">2</span><span 2429 class="cmtt-8"> </span><span 2430 class="cmtt-8"> </span><span 2431 class="cmtt-8"> </span><span 2432 class="cmtt-8"> 2)</span><span 2433 class="cmtt-8"> [current_length]</span><span 2434 class="cmtt-8"> =</span><span 2435 class="cmtt-8"> read</span><span 2436 class="cmtt-8"> a</span><span 2437 class="cmtt-8"> five</span><span 2438 class="cmtt-8"> bit</span><span 2439 class="cmtt-8"> unsigned</span><span 2440 class="cmtt-8"> integer</span><span 2441 class="cmtt-8"> and</span><span 2442 class="cmtt-8"> add</span><span 2443 class="cmtt-8"> 1;</span> 2444 <br class="fancyvrb" /><a 2445 id="x1-51080r3"></a><span 2446 class="cmr-6">3</span><span 2447 class="cmtt-8"> </span><span 2448 class="cmtt-8"> </span><span 2449 class="cmtt-8"> </span><span 2450 class="cmtt-8"> 3)</span><span 2451 class="cmtt-8"> [number]</span><span 2452 class="cmtt-8"> =</span><span 2453 class="cmtt-8"> read</span><span 2454 class="cmtt-8"> </span><a 2455 href="#x1-1170009.2.1"><span 2456 class="cmtt-8">ilog</span></a><span 2457 class="cmtt-8">([codebook_entries]</span><span 2458 class="cmtt-8"> -</span><span 2459 class="cmtt-8"> [current_entry])</span><span 2460 class="cmtt-8"> bits</span><span 2461 class="cmtt-8"> as</span><span 2462 class="cmtt-8"> an</span><span 2463 class="cmtt-8"> unsigned</span><span 2464 class="cmtt-8"> integer</span> 2465 <br class="fancyvrb" /><a 2466 id="x1-51082r4"></a><span 2467 class="cmr-6">4</span><span 2468 class="cmtt-8"> </span><span 2469 class="cmtt-8"> </span><span 2470 class="cmtt-8"> </span><span 2471 class="cmtt-8"> 4)</span><span 2472 class="cmtt-8"> set</span><span 2473 class="cmtt-8"> the</span><span 2474 class="cmtt-8"> entries</span><span 2475 class="cmtt-8"> [current_entry]</span><span 2476 class="cmtt-8"> through</span><span 2477 class="cmtt-8"> [current_entry]+[number]-1,</span><span 2478 class="cmtt-8"> inclusive,</span> 2479 <br class="fancyvrb" /><a 2480 id="x1-51084r5"></a><span 2481 class="cmr-6">5</span><span 2482 class="cmtt-8"> </span><span 2483 class="cmtt-8"> </span><span 2484 class="cmtt-8"> </span><span 2485 class="cmtt-8"> </span><span 2486 class="cmtt-8"> </span><span 2487 class="cmtt-8"> of</span><span 2488 class="cmtt-8"> the</span><span 2489 class="cmtt-8"> [codebook_codeword_lengths]</span><span 2490 class="cmtt-8"> array</span><span 2491 class="cmtt-8"> to</span><span 2492 class="cmtt-8"> [current_length]</span> 2493 <br class="fancyvrb" /><a 2494 id="x1-51086r6"></a><span 2495 class="cmr-6">6</span><span 2496 class="cmtt-8"> </span><span 2497 class="cmtt-8"> </span><span 2498 class="cmtt-8"> </span><span 2499 class="cmtt-8"> 5)</span><span 2500 class="cmtt-8"> set</span><span 2501 class="cmtt-8"> [current_entry]</span><span 2502 class="cmtt-8"> to</span><span 2503 class="cmtt-8"> [number]</span><span 2504 class="cmtt-8"> +</span><span 2505 class="cmtt-8"> [current_entry]</span> 2506 <br class="fancyvrb" /><a 2507 id="x1-51088r7"></a><span 2508 class="cmr-6">7</span><span 2509 class="cmtt-8"> </span><span 2510 class="cmtt-8"> </span><span 2511 class="cmtt-8"> </span><span 2512 class="cmtt-8"> 6)</span><span 2513 class="cmtt-8"> increment</span><span 2514 class="cmtt-8"> [current_length]</span><span 2515 class="cmtt-8"> by</span><span 2516 class="cmtt-8"> 1</span> 2517 <br class="fancyvrb" /><a 2518 id="x1-51090r8"></a><span 2519 class="cmr-6">8</span><span 2520 class="cmtt-8"> </span><span 2521 class="cmtt-8"> </span><span 2522 class="cmtt-8"> </span><span 2523 class="cmtt-8"> 7)</span><span 2524 class="cmtt-8"> if</span><span 2525 class="cmtt-8"> [current_entry]</span><span 2526 class="cmtt-8"> is</span><span 2527 class="cmtt-8"> greater</span><span 2528 class="cmtt-8"> than</span><span 2529 class="cmtt-8"> [codebook_entries]</span><span 2530 class="cmtt-8"> ERROR</span><span 2531 class="cmtt-8"> CONDITION;</span> 2532 <br class="fancyvrb" /><a 2533 id="x1-51092r9"></a><span 2534 class="cmr-6">9</span><span 2535 class="cmtt-8"> </span><span 2536 class="cmtt-8"> </span><span 2537 class="cmtt-8"> </span><span 2538 class="cmtt-8"> </span><span 2539 class="cmtt-8"> </span><span 2540 class="cmtt-8"> the</span><span 2541 class="cmtt-8"> decoder</span><span 2542 class="cmtt-8"> will</span><span 2543 class="cmtt-8"> not</span><span 2544 class="cmtt-8"> be</span><span 2545 class="cmtt-8"> able</span><span 2546 class="cmtt-8"> to</span><span 2547 class="cmtt-8"> read</span><span 2548 class="cmtt-8"> this</span><span 2549 class="cmtt-8"> stream.</span> 2550 <br class="fancyvrb" /><a 2551 id="x1-51094r10"></a><span 2552 class="cmr-6">10</span><span 2553 class="cmtt-8"> </span><span 2554 class="cmtt-8"> </span><span 2555 class="cmtt-8"> </span><span 2556 class="cmtt-8"> 8)</span><span 2557 class="cmtt-8"> if</span><span 2558 class="cmtt-8"> [current_entry]</span><span 2559 class="cmtt-8"> is</span><span 2560 class="cmtt-8"> less</span><span 2561 class="cmtt-8"> than</span><span 2562 class="cmtt-8"> [codebook_entries],</span><span 2563 class="cmtt-8"> repeat</span><span 2564 class="cmtt-8"> process</span><span 2565 class="cmtt-8"> starting</span><span 2566 class="cmtt-8"> at</span><span 2567 class="cmtt-8"> 3)</span> 2568 <br class="fancyvrb" /><a 2569 id="x1-51096r11"></a><span 2570 class="cmr-6">11</span><span 2571 class="cmtt-8"> </span><span 2572 class="cmtt-8"> </span><span 2573 class="cmtt-8"> </span><span 2574 class="cmtt-8"> 9)</span><span 2575 class="cmtt-8"> done.</span> 2576 2577 2578 2579 </div> 2580 </li></ul> 2581 <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis 2582 I supports three lookup types: 2583 <ol class="enumerate1" > 2584 <li 2585 class="enumerate" id="x1-51098x1">No lookup 2586 </li> 2587 <li 2588 class="enumerate" id="x1-51100x2">Implicitly populated value mapping (lattice VQ) 2589 </li> 2590 <li 2591 class="enumerate" id="x1-51102x3">Explicitly populated value mapping (tessellated or ’foam’ VQ)</li></ol> 2592 <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer: 2593 <div class="fancyvrb" id="fancyvrb13"> 2594 <a 2595 id="x1-51104r1"></a><span 2596 class="cmr-6">1</span><span 2597 class="cmtt-8"> </span><span 2598 class="cmtt-8"> </span><span 2599 class="cmtt-8"> </span><span 2600 class="cmtt-8"> 1)</span><span 2601 class="cmtt-8"> [codebook_lookup_type]</span><span 2602 class="cmtt-8"> =</span><span 2603 class="cmtt-8"> read</span><span 2604 class="cmtt-8"> four</span><span 2605 class="cmtt-8"> bits</span><span 2606 class="cmtt-8"> as</span><span 2607 class="cmtt-8"> an</span><span 2608 class="cmtt-8"> unsigned</span><span 2609 class="cmtt-8"> integer</span> 2610 </div> 2611 <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span 2612 class="cmtt-12">[codebook_lookup_type]</span>: 2613 <ul class="itemize1"> 2614 <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode. 2615 </li> 2616 <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to 2617 be read. Lookup type one reads a list of values that are permuted in a set pattern to 2618 build a list of vectors, each vector of order <span 2619 class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup 2620 type two builds the same vector list, but reads each scalar for each vector explicitly, 2621 rather than building vectors from a smaller list of possible scalar values. Lookup 2622 decode proceeds as follows: 2623 <!--l. 168--><p class="noindent" > 2624 <div class="fancyvrb" id="fancyvrb14"> 2625 <a 2626 id="x1-51106r1"></a><span 2627 class="cmr-6">1</span><span 2628 class="cmtt-8"> </span><span 2629 class="cmtt-8"> </span><span 2630 class="cmtt-8"> </span><span 2631 class="cmtt-8"> 1)</span><span 2632 class="cmtt-8"> [codebook_minimum_value]</span><span 2633 class="cmtt-8"> =</span><span 2634 class="cmtt-8"> </span><a 2635 href="#x1-1180009.2.2"><span 2636 class="cmtt-8">float32_unpack</span></a><span 2637 class="cmtt-8">(</span><span 2638 class="cmtt-8"> read</span><span 2639 class="cmtt-8"> 32</span><span 2640 class="cmtt-8"> bits</span><span 2641 class="cmtt-8"> as</span><span 2642 class="cmtt-8"> an</span><span 2643 class="cmtt-8"> unsigned</span><span 2644 class="cmtt-8"> integer)</span> 2645 <br class="fancyvrb" /><a 2646 id="x1-51108r2"></a><span 2647 class="cmr-6">2</span><span 2648 class="cmtt-8"> </span><span 2649 class="cmtt-8"> </span><span 2650 class="cmtt-8"> </span><span 2651 class="cmtt-8"> 2)</span><span 2652 class="cmtt-8"> [codebook_delta_value]</span><span 2653 class="cmtt-8"> =</span><span 2654 class="cmtt-8"> </span><a 2655 href="#x1-1180009.2.2"><span 2656 class="cmtt-8">float32_unpack</span></a><span 2657 class="cmtt-8">(</span><span 2658 class="cmtt-8"> read</span><span 2659 class="cmtt-8"> 32</span><span 2660 class="cmtt-8"> bits</span><span 2661 class="cmtt-8"> as</span><span 2662 class="cmtt-8"> an</span><span 2663 class="cmtt-8"> unsigned</span><span 2664 class="cmtt-8"> integer)</span> 2665 <br class="fancyvrb" /><a 2666 id="x1-51110r3"></a><span 2667 class="cmr-6">3</span><span 2668 class="cmtt-8"> </span><span 2669 class="cmtt-8"> </span><span 2670 class="cmtt-8"> </span><span 2671 class="cmtt-8"> 3)</span><span 2672 class="cmtt-8"> [codebook_value_bits]</span><span 2673 class="cmtt-8"> =</span><span 2674 class="cmtt-8"> read</span><span 2675 class="cmtt-8"> 4</span><span 2676 class="cmtt-8"> bits</span><span 2677 class="cmtt-8"> as</span><span 2678 class="cmtt-8"> an</span><span 2679 class="cmtt-8"> unsigned</span><span 2680 class="cmtt-8"> integer</span><span 2681 class="cmtt-8"> and</span><span 2682 class="cmtt-8"> add</span><span 2683 class="cmtt-8"> 1</span> 2684 <br class="fancyvrb" /><a 2685 id="x1-51112r4"></a><span 2686 class="cmr-6">4</span><span 2687 class="cmtt-8"> </span><span 2688 class="cmtt-8"> </span><span 2689 class="cmtt-8"> </span><span 2690 class="cmtt-8"> 4)</span><span 2691 class="cmtt-8"> [codebook_sequence_p]</span><span 2692 class="cmtt-8"> =</span><span 2693 class="cmtt-8"> read</span><span 2694 class="cmtt-8"> 1</span><span 2695 class="cmtt-8"> bit</span><span 2696 class="cmtt-8"> as</span><span 2697 class="cmtt-8"> a</span><span 2698 class="cmtt-8"> boolean</span><span 2699 class="cmtt-8"> flag</span> 2700 <br class="fancyvrb" /><a 2701 id="x1-51114r5"></a><span 2702 class="cmr-6">5</span><span 2703 class="cmtt-8"> </span><span 2704 class="cmtt-8"> </span> 2705 <br class="fancyvrb" /><a 2706 id="x1-51116r6"></a><span 2707 class="cmr-6">6</span><span 2708 class="cmtt-8"> </span><span 2709 class="cmtt-8"> </span><span 2710 class="cmtt-8"> </span><span 2711 class="cmtt-8"> if</span><span 2712 class="cmtt-8"> (</span><span 2713 class="cmtt-8"> [codebook_lookup_type]</span><span 2714 class="cmtt-8"> is</span><span 2715 class="cmtt-8"> 1</span><span 2716 class="cmtt-8"> )</span><span 2717 class="cmtt-8"> </span><span 2718 class="cmsy-8">{</span> 2719 <br class="fancyvrb" /><a 2720 id="x1-51118r7"></a><span 2721 class="cmr-6">7</span><span 2722 class="cmtt-8"> </span><span 2723 class="cmtt-8"> </span> 2724 <br class="fancyvrb" /><a 2725 id="x1-51120r8"></a><span 2726 class="cmr-6">8</span><span 2727 class="cmtt-8"> </span><span 2728 class="cmtt-8"> </span><span 2729 class="cmtt-8"> </span><span 2730 class="cmtt-8"> </span><span 2731 class="cmtt-8"> </span><span 2732 class="cmtt-8"> </span><span 2733 class="cmtt-8"> 5)</span><span 2734 class="cmtt-8"> [codebook_lookup_values]</span><span 2735 class="cmtt-8"> =</span><span 2736 class="cmtt-8"> </span><a 2737 href="#x1-1190009.2.3"><span 2738 class="cmtt-8">lookup1_values</span></a><span 2739 class="cmtt-8">([codebook_entries],</span><span 2740 class="cmtt-8"> [codebook_dimensions]</span><span 2741 class="cmtt-8"> )</span> 2742 <br class="fancyvrb" /><a 2743 id="x1-51122r9"></a><span 2744 class="cmr-6">9</span><span 2745 class="cmtt-8"> </span><span 2746 class="cmtt-8"> </span> 2747 <br class="fancyvrb" /><a 2748 id="x1-51124r10"></a><span 2749 class="cmr-6">10</span><span 2750 class="cmtt-8"> </span><span 2751 class="cmtt-8"> </span><span 2752 class="cmtt-8"> </span><span 2753 class="cmtt-8"> </span><span 2754 class="cmsy-8">}</span><span 2755 class="cmtt-8"> else</span><span 2756 class="cmtt-8"> </span><span 2757 class="cmsy-8">{</span> 2758 <br class="fancyvrb" /><a 2759 id="x1-51126r11"></a><span 2760 class="cmr-6">11</span><span 2761 class="cmtt-8"> </span><span 2762 class="cmtt-8"> </span> 2763 <br class="fancyvrb" /><a 2764 id="x1-51128r12"></a><span 2765 class="cmr-6">12</span><span 2766 class="cmtt-8"> </span><span 2767 class="cmtt-8"> </span><span 2768 class="cmtt-8"> </span><span 2769 class="cmtt-8"> </span><span 2770 class="cmtt-8"> </span><span 2771 class="cmtt-8"> </span><span 2772 class="cmtt-8"> 6)</span><span 2773 class="cmtt-8"> [codebook_lookup_values]</span><span 2774 class="cmtt-8"> =</span><span 2775 class="cmtt-8"> [codebook_entries]</span><span 2776 class="cmtt-8"> *</span><span 2777 class="cmtt-8"> [codebook_dimensions]</span> 2778 <br class="fancyvrb" /><a 2779 id="x1-51130r13"></a><span 2780 class="cmr-6">13</span><span 2781 class="cmtt-8"> </span><span 2782 class="cmtt-8"> </span> 2783 <br class="fancyvrb" /><a 2784 id="x1-51132r14"></a><span 2785 class="cmr-6">14</span><span 2786 class="cmtt-8"> </span><span 2787 class="cmtt-8"> </span><span 2788 class="cmtt-8"> </span><span 2789 class="cmtt-8"> </span><span 2790 class="cmsy-8">}</span> 2791 <br class="fancyvrb" /><a 2792 id="x1-51134r15"></a><span 2793 class="cmr-6">15</span><span 2794 class="cmtt-8"> </span><span 2795 class="cmtt-8"> </span> 2796 <br class="fancyvrb" /><a 2797 id="x1-51136r16"></a><span 2798 class="cmr-6">16</span><span 2799 class="cmtt-8"> </span><span 2800 class="cmtt-8"> </span><span 2801 class="cmtt-8"> </span><span 2802 class="cmtt-8"> 7)</span><span 2803 class="cmtt-8"> read</span><span 2804 class="cmtt-8"> a</span><span 2805 class="cmtt-8"> total</span><span 2806 class="cmtt-8"> of</span><span 2807 class="cmtt-8"> [codebook_lookup_values]</span><span 2808 class="cmtt-8"> unsigned</span><span 2809 class="cmtt-8"> integers</span><span 2810 class="cmtt-8"> of</span><span 2811 class="cmtt-8"> [codebook_value_bits]</span><span 2812 class="cmtt-8"> each;</span> 2813 2814 2815 2816 <br class="fancyvrb" /><a 2817 id="x1-51138r17"></a><span 2818 class="cmr-6">17</span><span 2819 class="cmtt-8"> </span><span 2820 class="cmtt-8"> </span><span 2821 class="cmtt-8"> </span><span 2822 class="cmtt-8"> </span><span 2823 class="cmtt-8"> </span><span 2824 class="cmtt-8"> </span><span 2825 class="cmtt-8"> store</span><span 2826 class="cmtt-8"> these</span><span 2827 class="cmtt-8"> in</span><span 2828 class="cmtt-8"> order</span><span 2829 class="cmtt-8"> in</span><span 2830 class="cmtt-8"> the</span><span 2831 class="cmtt-8"> array</span><span 2832 class="cmtt-8"> [codebook_multiplicands]</span> 2833 </div> 2834 </li> 2835 <li class="itemize">A <span 2836 class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is 2837 not decodable by the specification in this document. 2838 </li></ul> 2839 <!--l. 195--><p class="noindent" >An ’end of packet’ during any read operation in the above steps is considered an error condition 2840 rendering the stream undecodable. 2841 <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a 2842 id="x1-520003.2.1"></a><span 2843 class="cmbx-12">Huffman decision tree representation</span></span> 2844 The <span 2845 class="cmtt-12">[codebook_codeword_lengths] </span>array and <span 2846 class="cmtt-12">[codebook_entries] </span>value uniquely define the 2847 Huffman decision tree used for entropy decoding. 2848 <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused 2849 codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword 2850 possible. Assume the following codeword length list: 2851 <!--l. 209--><p class="noindent" > 2852 <div class="fancyvrb" id="fancyvrb15"> 2853 <a 2854 id="x1-52002r1"></a><span 2855 class="cmr-6">1</span><span 2856 class="cmtt-8"> </span><span 2857 class="cmtt-8"> entry</span><span 2858 class="cmtt-8"> 0:</span><span 2859 class="cmtt-8"> length</span><span 2860 class="cmtt-8"> 2</span> 2861 <br class="fancyvrb" /><a 2862 id="x1-52004r2"></a><span 2863 class="cmr-6">2</span><span 2864 class="cmtt-8"> </span><span 2865 class="cmtt-8"> entry</span><span 2866 class="cmtt-8"> 1:</span><span 2867 class="cmtt-8"> length</span><span 2868 class="cmtt-8"> 4</span> 2869 <br class="fancyvrb" /><a 2870 id="x1-52006r3"></a><span 2871 class="cmr-6">3</span><span 2872 class="cmtt-8"> </span><span 2873 class="cmtt-8"> entry</span><span 2874 class="cmtt-8"> 2:</span><span 2875 class="cmtt-8"> length</span><span 2876 class="cmtt-8"> 4</span> 2877 <br class="fancyvrb" /><a 2878 id="x1-52008r4"></a><span 2879 class="cmr-6">4</span><span 2880 class="cmtt-8"> </span><span 2881 class="cmtt-8"> entry</span><span 2882 class="cmtt-8"> 3:</span><span 2883 class="cmtt-8"> length</span><span 2884 class="cmtt-8"> 4</span> 2885 <br class="fancyvrb" /><a 2886 id="x1-52010r5"></a><span 2887 class="cmr-6">5</span><span 2888 class="cmtt-8"> </span><span 2889 class="cmtt-8"> entry</span><span 2890 class="cmtt-8"> 4:</span><span 2891 class="cmtt-8"> length</span><span 2892 class="cmtt-8"> 4</span> 2893 <br class="fancyvrb" /><a 2894 id="x1-52012r6"></a><span 2895 class="cmr-6">6</span><span 2896 class="cmtt-8"> </span><span 2897 class="cmtt-8"> entry</span><span 2898 class="cmtt-8"> 5:</span><span 2899 class="cmtt-8"> length</span><span 2900 class="cmtt-8"> 2</span> 2901 <br class="fancyvrb" /><a 2902 id="x1-52014r7"></a><span 2903 class="cmr-6">7</span><span 2904 class="cmtt-8"> </span><span 2905 class="cmtt-8"> entry</span><span 2906 class="cmtt-8"> 6:</span><span 2907 class="cmtt-8"> length</span><span 2908 class="cmtt-8"> 3</span> 2909 <br class="fancyvrb" /><a 2910 id="x1-52016r8"></a><span 2911 class="cmr-6">8</span><span 2912 class="cmtt-8"> </span><span 2913 class="cmtt-8"> entry</span><span 2914 class="cmtt-8"> 7:</span><span 2915 class="cmtt-8"> length</span><span 2916 class="cmtt-8"> 3</span> 2917 </div> 2918 <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results 2919 in the following codeword list: 2920 <!--l. 223--><p class="noindent" > 2921 <div class="fancyvrb" id="fancyvrb16"> 2922 <a 2923 id="x1-52018r1"></a><span 2924 class="cmr-6">1</span><span 2925 class="cmtt-8"> </span><span 2926 class="cmtt-8"> entry</span><span 2927 class="cmtt-8"> 0:</span><span 2928 class="cmtt-8"> length</span><span 2929 class="cmtt-8"> 2</span><span 2930 class="cmtt-8"> codeword</span><span 2931 class="cmtt-8"> 00</span> 2932 <br class="fancyvrb" /><a 2933 id="x1-52020r2"></a><span 2934 class="cmr-6">2</span><span 2935 class="cmtt-8"> </span><span 2936 class="cmtt-8"> entry</span><span 2937 class="cmtt-8"> 1:</span><span 2938 class="cmtt-8"> length</span><span 2939 class="cmtt-8"> 4</span><span 2940 class="cmtt-8"> codeword</span><span 2941 class="cmtt-8"> 0100</span> 2942 <br class="fancyvrb" /><a 2943 id="x1-52022r3"></a><span 2944 class="cmr-6">3</span><span 2945 class="cmtt-8"> </span><span 2946 class="cmtt-8"> entry</span><span 2947 class="cmtt-8"> 2:</span><span 2948 class="cmtt-8"> length</span><span 2949 class="cmtt-8"> 4</span><span 2950 class="cmtt-8"> codeword</span><span 2951 class="cmtt-8"> 0101</span> 2952 <br class="fancyvrb" /><a 2953 id="x1-52024r4"></a><span 2954 class="cmr-6">4</span><span 2955 class="cmtt-8"> </span><span 2956 class="cmtt-8"> entry</span><span 2957 class="cmtt-8"> 3:</span><span 2958 class="cmtt-8"> length</span><span 2959 class="cmtt-8"> 4</span><span 2960 class="cmtt-8"> codeword</span><span 2961 class="cmtt-8"> 0110</span> 2962 <br class="fancyvrb" /><a 2963 id="x1-52026r5"></a><span 2964 class="cmr-6">5</span><span 2965 class="cmtt-8"> </span><span 2966 class="cmtt-8"> entry</span><span 2967 class="cmtt-8"> 4:</span><span 2968 class="cmtt-8"> length</span><span 2969 class="cmtt-8"> 4</span><span 2970 class="cmtt-8"> codeword</span><span 2971 class="cmtt-8"> 0111</span> 2972 <br class="fancyvrb" /><a 2973 id="x1-52028r6"></a><span 2974 class="cmr-6">6</span><span 2975 class="cmtt-8"> </span><span 2976 class="cmtt-8"> entry</span><span 2977 class="cmtt-8"> 5:</span><span 2978 class="cmtt-8"> length</span><span 2979 class="cmtt-8"> 2</span><span 2980 class="cmtt-8"> codeword</span><span 2981 class="cmtt-8"> 10</span> 2982 <br class="fancyvrb" /><a 2983 id="x1-52030r7"></a><span 2984 class="cmr-6">7</span><span 2985 class="cmtt-8"> </span><span 2986 class="cmtt-8"> entry</span><span 2987 class="cmtt-8"> 6:</span><span 2988 class="cmtt-8"> length</span><span 2989 class="cmtt-8"> 3</span><span 2990 class="cmtt-8"> codeword</span><span 2991 class="cmtt-8"> 110</span> 2992 <br class="fancyvrb" /><a 2993 id="x1-52032r8"></a><span 2994 class="cmr-6">8</span><span 2995 class="cmtt-8"> </span><span 2996 class="cmtt-8"> entry</span><span 2997 class="cmtt-8"> 7:</span><span 2998 class="cmtt-8"> length</span><span 2999 class="cmtt-8"> 3</span><span 3000 class="cmtt-8"> codeword</span><span 3001 class="cmtt-8"> 111</span> 3002 </div> 3003 3004 3005 3006 <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a 3007 id="x1-530003.2.1"></a><span 3008 class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to 3009 be read and used bit by bit from left to right, thus the codeword ’001’ is the bit string ’zero, zero, 3010 one’. When determining ’lowest possible value’ in the assignment definition above, the leftmost 3011 bit is the MSb. 3012 <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry 3013 numbers equivalent to the leaves numbered left-to-right: 3014 <div class="center" 3015 > 3016 <!--l. 247--><p class="noindent" > 3017 3018 <!--l. 248--><p class="noindent" ><img 3019 src="hufftree.png" alt="PIC" 3020 > 3021 <br /> <div class="caption" 3022 ><span class="id">Figure 4: </span><span 3023 class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 --> 3024 </div> 3025 <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost 3026 possible position. 3027 <!--l. 256--><p class="noindent" >Note that it’s possible to underspecify or overspecify a Huffman tree via the length list. 3028 In the above example, if codeword seven were eliminated, it’s clear that the tree is 3029 unfinished: 3030 <div class="center" 3031 > 3032 <!--l. 260--><p class="noindent" > 3033 3034 <!--l. 261--><p class="noindent" ><img 3035 src="hufftree-under.png" alt="PIC" 3036 > 3037 <br /> <div class="caption" 3038 ><span class="id">Figure 5: </span><span 3039 class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 --> 3040 </div> 3041 <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it’s clear that the tree is fully populated and a ninth 3042 codeword is impossible. Both underspecified and overspecified trees are an error condition 3043 rendering the stream undecodable. Take special care that a codebook with a single used 3044 entry is handled properly; it consists of a single codework of zero bits and ’reading’ 3045 a value out of such a codebook always returns the single used value and sinks zero 3046 bits. 3047 <!--l. 274--><p class="noindent" >Codebook entries marked ’unused’ are simply skipped in the assigning process. They have no 3048 codeword and do not appear in the decision tree, thus it’s impossible for any bit pattern read 3049 from the stream to decode to that entry number. 3050 3051 3052 3053 <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a 3054 id="x1-540003.2.1"></a><span 3055 class="cmbx-12">VQ lookup table vector representation</span></span> 3056 Unpacking the VQ lookup table vectors relies on the following values: 3057 <div class="fancyvrb" id="fancyvrb17"> 3058 <a 3059 id="x1-54002r1"></a><span 3060 class="cmr-6">1</span><span 3061 class="cmtt-8"> </span><span 3062 class="cmtt-8"> the</span><span 3063 class="cmtt-8"> [codebook_multiplicands]</span><span 3064 class="cmtt-8"> array</span> 3065 <br class="fancyvrb" /><a 3066 id="x1-54004r2"></a><span 3067 class="cmr-6">2</span><span 3068 class="cmtt-8"> </span><span 3069 class="cmtt-8"> [codebook_minimum_value]</span> 3070 <br class="fancyvrb" /><a 3071 id="x1-54006r3"></a><span 3072 class="cmr-6">3</span><span 3073 class="cmtt-8"> </span><span 3074 class="cmtt-8"> [codebook_delta_value]</span> 3075 <br class="fancyvrb" /><a 3076 id="x1-54008r4"></a><span 3077 class="cmr-6">4</span><span 3078 class="cmtt-8"> </span><span 3079 class="cmtt-8"> [codebook_sequence_p]</span> 3080 <br class="fancyvrb" /><a 3081 id="x1-54010r5"></a><span 3082 class="cmr-6">5</span><span 3083 class="cmtt-8"> </span><span 3084 class="cmtt-8"> [codebook_lookup_type]</span> 3085 <br class="fancyvrb" /><a 3086 id="x1-54012r6"></a><span 3087 class="cmr-6">6</span><span 3088 class="cmtt-8"> </span><span 3089 class="cmtt-8"> [codebook_entries]</span> 3090 <br class="fancyvrb" /><a 3091 id="x1-54014r7"></a><span 3092 class="cmr-6">7</span><span 3093 class="cmtt-8"> </span><span 3094 class="cmtt-8"> [codebook_dimensions]</span> 3095 <br class="fancyvrb" /><a 3096 id="x1-54016r8"></a><span 3097 class="cmr-6">8</span><span 3098 class="cmtt-8"> </span><span 3099 class="cmtt-8"> [codebook_lookup_values]</span> 3100 </div> 3101 <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to 3102 <span 3103 class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return 3104 during audio packet decode in a VQ context. 3105 <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a 3106 id="x1-550003.2.1"></a><span 3107 class="cmbx-12">Vector value decode: Lookup type 1</span></span> 3108 Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of 3109 scalar values. Calculate (unpack) the final values of a codebook entry vector from 3110 the entries in <span 3111 class="cmtt-12">[codebook_multiplicands] </span>as follows (<span 3112 class="cmtt-12">[value_vector] </span>is the output 3113 vector representing the vector of values for entry number <span 3114 class="cmtt-12">[lookup_offset] </span>in this 3115 codebook): 3116 <!--l. 311--><p class="noindent" > 3117 <div class="fancyvrb" id="fancyvrb18"> 3118 <a 3119 id="x1-55002r1"></a><span 3120 class="cmr-6">1</span><span 3121 class="cmtt-8"> </span><span 3122 class="cmtt-8"> </span><span 3123 class="cmtt-8"> </span><span 3124 class="cmtt-8"> 1)</span><span 3125 class="cmtt-8"> [last]</span><span 3126 class="cmtt-8"> =</span><span 3127 class="cmtt-8"> 0;</span> 3128 <br class="fancyvrb" /><a 3129 id="x1-55004r2"></a><span 3130 class="cmr-6">2</span><span 3131 class="cmtt-8"> </span><span 3132 class="cmtt-8"> </span><span 3133 class="cmtt-8"> </span><span 3134 class="cmtt-8"> 2)</span><span 3135 class="cmtt-8"> [index_divisor]</span><span 3136 class="cmtt-8"> =</span><span 3137 class="cmtt-8"> 1;</span> 3138 <br class="fancyvrb" /><a 3139 id="x1-55006r3"></a><span 3140 class="cmr-6">3</span><span 3141 class="cmtt-8"> </span><span 3142 class="cmtt-8"> </span><span 3143 class="cmtt-8"> </span><span 3144 class="cmtt-8"> 3)</span><span 3145 class="cmtt-8"> iterate</span><span 3146 class="cmtt-8"> [i]</span><span 3147 class="cmtt-8"> over</span><span 3148 class="cmtt-8"> the</span><span 3149 class="cmtt-8"> range</span><span 3150 class="cmtt-8"> 0</span><span 3151 class="cmtt-8"> ...</span><span 3152 class="cmtt-8"> [codebook_dimensions]-1</span><span 3153 class="cmtt-8"> (once</span><span 3154 class="cmtt-8"> for</span><span 3155 class="cmtt-8"> each</span><span 3156 class="cmtt-8"> scalar</span><span 3157 class="cmtt-8"> value</span><span 3158 class="cmtt-8"> in</span><span 3159 class="cmtt-8"> the</span><span 3160 class="cmtt-8"> value</span><span 3161 class="cmtt-8"> vector)</span><span 3162 class="cmtt-8"> </span><span 3163 class="cmsy-8">{</span> 3164 <br class="fancyvrb" /><a 3165 id="x1-55008r4"></a><span 3166 class="cmr-6">4</span><span 3167 class="cmtt-8"> </span><span 3168 class="cmtt-8"> </span> 3169 <br class="fancyvrb" /><a 3170 id="x1-55010r5"></a><span 3171 class="cmr-6">5</span><span 3172 class="cmtt-8"> </span><span 3173 class="cmtt-8"> </span><span 3174 class="cmtt-8"> </span><span 3175 class="cmtt-8"> </span><span 3176 class="cmtt-8"> </span><span 3177 class="cmtt-8"> </span><span 3178 class="cmtt-8"> </span><span 3179 class="cmtt-8"> </span><span 3180 class="cmtt-8"> 4)</span><span 3181 class="cmtt-8"> [multiplicand_offset]</span><span 3182 class="cmtt-8"> =</span><span 3183 class="cmtt-8"> (</span><span 3184 class="cmtt-8"> [lookup_offset]</span><span 3185 class="cmtt-8"> divided</span><span 3186 class="cmtt-8"> by</span><span 3187 class="cmtt-8"> [index_divisor]</span><span 3188 class="cmtt-8"> using</span><span 3189 class="cmtt-8"> integer</span> 3190 <br class="fancyvrb" /><a 3191 id="x1-55012r6"></a><span 3192 class="cmr-6">6</span><span 3193 class="cmtt-8"> </span><span 3194 class="cmtt-8"> </span><span 3195 class="cmtt-8"> </span><span 3196 class="cmtt-8"> </span><span 3197 class="cmtt-8"> </span><span 3198 class="cmtt-8"> </span><span 3199 class="cmtt-8"> </span><span 3200 class="cmtt-8"> </span><span 3201 class="cmtt-8"> </span><span 3202 class="cmtt-8"> </span><span 3203 class="cmtt-8"> </span><span 3204 class="cmtt-8"> division</span><span 3205 class="cmtt-8"> )</span><span 3206 class="cmtt-8"> integer</span><span 3207 class="cmtt-8"> modulo</span><span 3208 class="cmtt-8"> [codebook_lookup_values]</span> 3209 <br class="fancyvrb" /><a 3210 id="x1-55014r7"></a><span 3211 class="cmr-6">7</span><span 3212 class="cmtt-8"> </span><span 3213 class="cmtt-8"> </span> 3214 <br class="fancyvrb" /><a 3215 id="x1-55016r8"></a><span 3216 class="cmr-6">8</span><span 3217 class="cmtt-8"> </span><span 3218 class="cmtt-8"> </span><span 3219 class="cmtt-8"> </span><span 3220 class="cmtt-8"> </span><span 3221 class="cmtt-8"> </span><span 3222 class="cmtt-8"> </span><span 3223 class="cmtt-8"> </span><span 3224 class="cmtt-8"> </span><span 3225 class="cmtt-8"> 5)</span><span 3226 class="cmtt-8"> vector</span><span 3227 class="cmtt-8"> [value_vector]</span><span 3228 class="cmtt-8"> element</span><span 3229 class="cmtt-8"> [i]</span><span 3230 class="cmtt-8"> =</span> 3231 <br class="fancyvrb" /><a 3232 id="x1-55018r9"></a><span 3233 class="cmr-6">9</span><span 3234 class="cmtt-8"> </span><span 3235 class="cmtt-8"> </span><span 3236 class="cmtt-8"> </span><span 3237 class="cmtt-8"> </span><span 3238 class="cmtt-8"> </span><span 3239 class="cmtt-8"> </span><span 3240 class="cmtt-8"> </span><span 3241 class="cmtt-8"> </span><span 3242 class="cmtt-8"> </span><span 3243 class="cmtt-8"> </span><span 3244 class="cmtt-8"> </span><span 3245 class="cmtt-8"> </span><span 3246 class="cmtt-8"> </span><span 3247 class="cmtt-8"> (</span><span 3248 class="cmtt-8"> [codebook_multiplicands]</span><span 3249 class="cmtt-8"> array</span><span 3250 class="cmtt-8"> element</span><span 3251 class="cmtt-8"> number</span><span 3252 class="cmtt-8"> [multiplicand_offset]</span><span 3253 class="cmtt-8"> )</span><span 3254 class="cmtt-8"> *</span> 3255 <br class="fancyvrb" /><a 3256 id="x1-55020r10"></a><span 3257 class="cmr-6">10</span><span 3258 class="cmtt-8"> </span><span 3259 class="cmtt-8"> </span><span 3260 class="cmtt-8"> </span><span 3261 class="cmtt-8"> </span><span 3262 class="cmtt-8"> </span><span 3263 class="cmtt-8"> </span><span 3264 class="cmtt-8"> </span><span 3265 class="cmtt-8"> </span><span 3266 class="cmtt-8"> </span><span 3267 class="cmtt-8"> </span><span 3268 class="cmtt-8"> </span><span 3269 class="cmtt-8"> </span><span 3270 class="cmtt-8"> </span><span 3271 class="cmtt-8"> [codebook_delta_value]</span><span 3272 class="cmtt-8"> +</span><span 3273 class="cmtt-8"> [codebook_minimum_value]</span><span 3274 class="cmtt-8"> +</span><span 3275 class="cmtt-8"> [last];</span> 3276 <br class="fancyvrb" /><a 3277 id="x1-55022r11"></a><span 3278 class="cmr-6">11</span><span 3279 class="cmtt-8"> </span><span 3280 class="cmtt-8"> </span> 3281 <br class="fancyvrb" /><a 3282 id="x1-55024r12"></a><span 3283 class="cmr-6">12</span><span 3284 class="cmtt-8"> </span><span 3285 class="cmtt-8"> </span><span 3286 class="cmtt-8"> </span><span 3287 class="cmtt-8"> </span><span 3288 class="cmtt-8"> </span><span 3289 class="cmtt-8"> </span><span 3290 class="cmtt-8"> </span><span 3291 class="cmtt-8"> </span><span 3292 class="cmtt-8"> 6)</span><span 3293 class="cmtt-8"> if</span><span 3294 class="cmtt-8"> (</span><span 3295 class="cmtt-8"> [codebook_sequence_p]</span><span 3296 class="cmtt-8"> is</span><span 3297 class="cmtt-8"> set</span><span 3298 class="cmtt-8"> )</span><span 3299 class="cmtt-8"> then</span><span 3300 class="cmtt-8"> set</span><span 3301 class="cmtt-8"> [last]</span><span 3302 class="cmtt-8"> =</span><span 3303 class="cmtt-8"> vector</span><span 3304 class="cmtt-8"> [value_vector]</span><span 3305 class="cmtt-8"> element</span><span 3306 class="cmtt-8"> [i]</span> 3307 <br class="fancyvrb" /><a 3308 id="x1-55026r13"></a><span 3309 class="cmr-6">13</span><span 3310 class="cmtt-8"> </span><span 3311 class="cmtt-8"> </span> 3312 <br class="fancyvrb" /><a 3313 id="x1-55028r14"></a><span 3314 class="cmr-6">14</span><span 3315 class="cmtt-8"> </span><span 3316 class="cmtt-8"> </span><span 3317 class="cmtt-8"> </span><span 3318 class="cmtt-8"> </span><span 3319 class="cmtt-8"> </span><span 3320 class="cmtt-8"> </span><span 3321 class="cmtt-8"> </span><span 3322 class="cmtt-8"> </span><span 3323 class="cmtt-8"> 7)</span><span 3324 class="cmtt-8"> [index_divisor]</span><span 3325 class="cmtt-8"> =</span><span 3326 class="cmtt-8"> [index_divisor]</span><span 3327 class="cmtt-8"> *</span><span 3328 class="cmtt-8"> [codebook_lookup_values]</span> 3329 <br class="fancyvrb" /><a 3330 id="x1-55030r15"></a><span 3331 class="cmr-6">15</span><span 3332 class="cmtt-8"> </span><span 3333 class="cmtt-8"> </span> 3334 <br class="fancyvrb" /><a 3335 id="x1-55032r16"></a><span 3336 class="cmr-6">16</span><span 3337 class="cmtt-8"> </span><span 3338 class="cmtt-8"> </span><span 3339 class="cmtt-8"> </span><span 3340 class="cmtt-8"> </span><span 3341 class="cmtt-8"> </span><span 3342 class="cmtt-8"> </span><span 3343 class="cmtt-8"> </span><span 3344 class="cmsy-8">}</span> 3345 <br class="fancyvrb" /><a 3346 id="x1-55034r17"></a><span 3347 class="cmr-6">17</span><span 3348 class="cmtt-8"> </span><span 3349 class="cmtt-8"> </span> 3350 <br class="fancyvrb" /><a 3351 id="x1-55036r18"></a><span 3352 class="cmr-6">18</span><span 3353 class="cmtt-8"> </span><span 3354 class="cmtt-8"> </span><span 3355 class="cmtt-8"> </span><span 3356 class="cmtt-8"> 8)</span><span 3357 class="cmtt-8"> vector</span><span 3358 class="cmtt-8"> calculation</span><span 3359 class="cmtt-8"> completed.</span> 3360 </div> 3361 3362 3363 3364 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a 3365 id="x1-560003.2.1"></a><span 3366 class="cmbx-12">Vector value decode: Lookup type 2</span></span> 3367 Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set 3368 by the <span 3369 class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final 3370 values of a codebook entry vector from the entries in <span 3371 class="cmtt-12">[codebook_multiplicands] </span>as follows 3372 (<span 3373 class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number 3374 <span 3375 class="cmtt-12">[lookup_offset] </span>in this codebook): 3376 <!--l. 344--><p class="noindent" > 3377 <div class="fancyvrb" id="fancyvrb19"> 3378 <a 3379 id="x1-56002r1"></a><span 3380 class="cmr-6">1</span><span 3381 class="cmtt-8"> </span><span 3382 class="cmtt-8"> </span><span 3383 class="cmtt-8"> </span><span 3384 class="cmtt-8"> 1)</span><span 3385 class="cmtt-8"> [last]</span><span 3386 class="cmtt-8"> =</span><span 3387 class="cmtt-8"> 0;</span> 3388 <br class="fancyvrb" /><a 3389 id="x1-56004r2"></a><span 3390 class="cmr-6">2</span><span 3391 class="cmtt-8"> </span><span 3392 class="cmtt-8"> </span><span 3393 class="cmtt-8"> </span><span 3394 class="cmtt-8"> 2)</span><span 3395 class="cmtt-8"> [multiplicand_offset]</span><span 3396 class="cmtt-8"> =</span><span 3397 class="cmtt-8"> [lookup_offset]</span><span 3398 class="cmtt-8"> *</span><span 3399 class="cmtt-8"> [codebook_dimensions]</span> 3400 <br class="fancyvrb" /><a 3401 id="x1-56006r3"></a><span 3402 class="cmr-6">3</span><span 3403 class="cmtt-8"> </span><span 3404 class="cmtt-8"> </span><span 3405 class="cmtt-8"> </span><span 3406 class="cmtt-8"> 3)</span><span 3407 class="cmtt-8"> iterate</span><span 3408 class="cmtt-8"> [i]</span><span 3409 class="cmtt-8"> over</span><span 3410 class="cmtt-8"> the</span><span 3411 class="cmtt-8"> range</span><span 3412 class="cmtt-8"> 0</span><span 3413 class="cmtt-8"> ...</span><span 3414 class="cmtt-8"> [codebook_dimensions]-1</span><span 3415 class="cmtt-8"> (once</span><span 3416 class="cmtt-8"> for</span><span 3417 class="cmtt-8"> each</span><span 3418 class="cmtt-8"> scalar</span><span 3419 class="cmtt-8"> value</span><span 3420 class="cmtt-8"> in</span><span 3421 class="cmtt-8"> the</span><span 3422 class="cmtt-8"> value</span><span 3423 class="cmtt-8"> vector)</span><span 3424 class="cmtt-8"> </span><span 3425 class="cmsy-8">{</span> 3426 <br class="fancyvrb" /><a 3427 id="x1-56008r4"></a><span 3428 class="cmr-6">4</span><span 3429 class="cmtt-8"> </span><span 3430 class="cmtt-8"> </span> 3431 <br class="fancyvrb" /><a 3432 id="x1-56010r5"></a><span 3433 class="cmr-6">5</span><span 3434 class="cmtt-8"> </span><span 3435 class="cmtt-8"> </span><span 3436 class="cmtt-8"> </span><span 3437 class="cmtt-8"> </span><span 3438 class="cmtt-8"> </span><span 3439 class="cmtt-8"> </span><span 3440 class="cmtt-8"> </span><span 3441 class="cmtt-8"> </span><span 3442 class="cmtt-8"> 4)</span><span 3443 class="cmtt-8"> vector</span><span 3444 class="cmtt-8"> [value_vector]</span><span 3445 class="cmtt-8"> element</span><span 3446 class="cmtt-8"> [i]</span><span 3447 class="cmtt-8"> =</span> 3448 <br class="fancyvrb" /><a 3449 id="x1-56012r6"></a><span 3450 class="cmr-6">6</span><span 3451 class="cmtt-8"> </span><span 3452 class="cmtt-8"> </span><span 3453 class="cmtt-8"> </span><span 3454 class="cmtt-8"> </span><span 3455 class="cmtt-8"> </span><span 3456 class="cmtt-8"> </span><span 3457 class="cmtt-8"> </span><span 3458 class="cmtt-8"> </span><span 3459 class="cmtt-8"> </span><span 3460 class="cmtt-8"> </span><span 3461 class="cmtt-8"> </span><span 3462 class="cmtt-8"> </span><span 3463 class="cmtt-8"> </span><span 3464 class="cmtt-8"> (</span><span 3465 class="cmtt-8"> [codebook_multiplicands]</span><span 3466 class="cmtt-8"> array</span><span 3467 class="cmtt-8"> element</span><span 3468 class="cmtt-8"> number</span><span 3469 class="cmtt-8"> [multiplicand_offset]</span><span 3470 class="cmtt-8"> )</span><span 3471 class="cmtt-8"> *</span> 3472 <br class="fancyvrb" /><a 3473 id="x1-56014r7"></a><span 3474 class="cmr-6">7</span><span 3475 class="cmtt-8"> </span><span 3476 class="cmtt-8"> </span><span 3477 class="cmtt-8"> </span><span 3478 class="cmtt-8"> </span><span 3479 class="cmtt-8"> </span><span 3480 class="cmtt-8"> </span><span 3481 class="cmtt-8"> </span><span 3482 class="cmtt-8"> </span><span 3483 class="cmtt-8"> </span><span 3484 class="cmtt-8"> </span><span 3485 class="cmtt-8"> </span><span 3486 class="cmtt-8"> </span><span 3487 class="cmtt-8"> </span><span 3488 class="cmtt-8"> [codebook_delta_value]</span><span 3489 class="cmtt-8"> +</span><span 3490 class="cmtt-8"> [codebook_minimum_value]</span><span 3491 class="cmtt-8"> +</span><span 3492 class="cmtt-8"> [last];</span> 3493 <br class="fancyvrb" /><a 3494 id="x1-56016r8"></a><span 3495 class="cmr-6">8</span><span 3496 class="cmtt-8"> </span><span 3497 class="cmtt-8"> </span> 3498 <br class="fancyvrb" /><a 3499 id="x1-56018r9"></a><span 3500 class="cmr-6">9</span><span 3501 class="cmtt-8"> </span><span 3502 class="cmtt-8"> </span><span 3503 class="cmtt-8"> </span><span 3504 class="cmtt-8"> </span><span 3505 class="cmtt-8"> </span><span 3506 class="cmtt-8"> </span><span 3507 class="cmtt-8"> </span><span 3508 class="cmtt-8"> </span><span 3509 class="cmtt-8"> 5)</span><span 3510 class="cmtt-8"> if</span><span 3511 class="cmtt-8"> (</span><span 3512 class="cmtt-8"> [codebook_sequence_p]</span><span 3513 class="cmtt-8"> is</span><span 3514 class="cmtt-8"> set</span><span 3515 class="cmtt-8"> )</span><span 3516 class="cmtt-8"> then</span><span 3517 class="cmtt-8"> set</span><span 3518 class="cmtt-8"> [last]</span><span 3519 class="cmtt-8"> =</span><span 3520 class="cmtt-8"> vector</span><span 3521 class="cmtt-8"> [value_vector]</span><span 3522 class="cmtt-8"> element</span><span 3523 class="cmtt-8"> [i]</span> 3524 <br class="fancyvrb" /><a 3525 id="x1-56020r10"></a><span 3526 class="cmr-6">10</span><span 3527 class="cmtt-8"> </span><span 3528 class="cmtt-8"> </span> 3529 <br class="fancyvrb" /><a 3530 id="x1-56022r11"></a><span 3531 class="cmr-6">11</span><span 3532 class="cmtt-8"> </span><span 3533 class="cmtt-8"> </span><span 3534 class="cmtt-8"> </span><span 3535 class="cmtt-8"> </span><span 3536 class="cmtt-8"> </span><span 3537 class="cmtt-8"> </span><span 3538 class="cmtt-8"> </span><span 3539 class="cmtt-8"> </span><span 3540 class="cmtt-8"> 6)</span><span 3541 class="cmtt-8"> increment</span><span 3542 class="cmtt-8"> [multiplicand_offset]</span> 3543 <br class="fancyvrb" /><a 3544 id="x1-56024r12"></a><span 3545 class="cmr-6">12</span><span 3546 class="cmtt-8"> </span><span 3547 class="cmtt-8"> </span> 3548 <br class="fancyvrb" /><a 3549 id="x1-56026r13"></a><span 3550 class="cmr-6">13</span><span 3551 class="cmtt-8"> </span><span 3552 class="cmtt-8"> </span><span 3553 class="cmtt-8"> </span><span 3554 class="cmtt-8"> </span><span 3555 class="cmtt-8"> </span><span 3556 class="cmtt-8"> </span><span 3557 class="cmtt-8"> </span><span 3558 class="cmsy-8">}</span> 3559 <br class="fancyvrb" /><a 3560 id="x1-56028r14"></a><span 3561 class="cmr-6">14</span><span 3562 class="cmtt-8"> </span><span 3563 class="cmtt-8"> </span> 3564 <br class="fancyvrb" /><a 3565 id="x1-56030r15"></a><span 3566 class="cmr-6">15</span><span 3567 class="cmtt-8"> </span><span 3568 class="cmtt-8"> </span><span 3569 class="cmtt-8"> </span><span 3570 class="cmtt-8"> 7)</span><span 3571 class="cmtt-8"> vector</span><span 3572 class="cmtt-8"> calculation</span><span 3573 class="cmtt-8"> completed.</span> 3574 </div> 3575 <!--l. 370--><p class="noindent" > 3576 <h4 class="subsectionHead"><span class="titlemark">3.3 </span> <a 3577 id="x1-570003.3"></a>Use of the codebook abstraction</h4> 3578 <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a 3579 specific codebook reads a codeword from the bitstream, decoding it into an entry number, and 3580 then returns that entry number to the decoder (when used in a scalar entropy coding context), or 3581 uses that entry number as an offset into the VQ lookup table, returning a vector of values (when 3582 used in a context desiring a VQ value). Scalar or VQ context is always explicit; any 3583 call to the codebook mechanism requests either a scalar entry number or a lookup 3584 vector. 3585 <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting 3586 decode using a codebook of lookup type 0 in any context expecting a vector return 3587 value (even in a case where a vector of dimension one) is forbidden. If decoder setup 3588 or decode requests such an action, that is an error condition rendering the packet 3589 3590 3591 3592 undecodable. 3593 <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the 3594 next codeword in the bitstream. The decoder reads bits until the accumulated bits match a 3595 codeword in the codebook. This process can be though of as logically walking the 3596 Huffman decode tree by reading one bit at a time from the bitstream, and using the 3597 bit as a decision boolean to take the 0 branch (left in the above examples) or the 1 3598 branch (right in the above examples). Walking the tree finishes when the decode process 3599 hits a leaf in the decision tree; the result is the entry number corresponding to that 3600 leaf. Reading past the end of a packet propagates the ’end-of-stream’ condition to the 3601 decoder. 3602 <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return 3603 value. 3604 <!--l. 404--><p class="noindent" >When used in a VQ context, the codeword entry number is used as an offset into the VQ lookup 3605 table. The value returned to the decoder is the vector of scalars corresponding to this 3606 offset. 3607 3608 3609 3610 3611 3612 3613 <h3 class="sectionHead"><span class="titlemark">4 </span> <a 3614 id="x1-580004"></a>Codec Setup and Packet Decode</h3> 3615 <!--l. 7--><p class="noindent" > 3616 <h4 class="subsectionHead"><span class="titlemark">4.1 </span> <a 3617 id="x1-590004.1"></a>Overview</h4> 3618 <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification 3619 of Vorbis I. This document assumes a high-level understanding of the Vorbis decode 3620 process, which is provided in <a 3621 href="#x1-20001">Section 1</a>, “<a 3622 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>”. <a 3623 href="#x1-360002">Section 2</a>, 3624 “<a 3625 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>” covers reading and writing bit fields from and to bitstream 3626 packets. 3627 <!--l. 17--><p class="noindent" > 3628 <h4 class="subsectionHead"><span class="titlemark">4.2 </span> <a 3629 id="x1-600004.2"></a>Header decode and decode setup</h4> 3630 <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the 3631 identification header, the comments header, and the setup header. All are required for decode 3632 compliance. An end-of-packet condition during decoding the first or third header packet renders 3633 the stream undecodable. End-of-packet decoding the comment header is a non-fatal error 3634 condition. 3635 <!--l. 26--><p class="noindent" > 3636 <h5 class="subsubsectionHead"><span class="titlemark">4.2.1 </span> <a 3637 id="x1-610004.2.1"></a>Common header decode</h5> 3638 <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields. 3639 <!--l. 31--><p class="noindent" > 3640 <div class="fancyvrb" id="fancyvrb20"> 3641 <a 3642 id="x1-61002r1"></a><span 3643 class="cmr-6">1</span><span 3644 class="cmtt-8"> </span><span 3645 class="cmtt-8"> </span><span 3646 class="cmtt-8"> </span><span 3647 class="cmtt-8"> 1)</span><span 3648 class="cmtt-8"> [packet_type]</span><span 3649 class="cmtt-8"> :</span><span 3650 class="cmtt-8"> 8</span><span 3651 class="cmtt-8"> bit</span><span 3652 class="cmtt-8"> value</span> 3653 <br class="fancyvrb" /><a 3654 id="x1-61004r2"></a><span 3655 class="cmr-6">2</span><span 3656 class="cmtt-8"> </span><span 3657 class="cmtt-8"> </span><span 3658 class="cmtt-8"> </span><span 3659 class="cmtt-8"> 2)</span><span 3660 class="cmtt-8"> 0x76,</span><span 3661 class="cmtt-8"> 0x6f,</span><span 3662 class="cmtt-8"> 0x72,</span><span 3663 class="cmtt-8"> 0x62,</span><span 3664 class="cmtt-8"> 0x69,</span><span 3665 class="cmtt-8"> 0x73:</span><span 3666 class="cmtt-8"> the</span><span 3667 class="cmtt-8"> characters</span><span 3668 class="cmtt-8"> ’v’,’o’,’r’,’b’,’i’,’s’</span><span 3669 class="cmtt-8"> as</span><span 3670 class="cmtt-8"> six</span><span 3671 class="cmtt-8"> octets</span> 3672 </div> 3673 3674 3675 3676 <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment 3677 header type 3 and the setup header type 5 (these types are all odd as a packet with a leading 3678 single bit of ’0’ is an audio packet). The packets must occur in the order of identification, 3679 comment, setup. 3680 <!--l. 44--><p class="noindent" > 3681 <h5 class="subsubsectionHead"><span class="titlemark">4.2.2 </span> <a 3682 id="x1-620004.2.2"></a>Identification header</h5> 3683 <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream 3684 definitively as Vorbis, and provide a few externally relevant pieces of information about the audio 3685 stream. The identification header is coded as follows: 3686 <!--l. 51--><p class="noindent" > 3687 <div class="fancyvrb" id="fancyvrb21"> 3688 <a 3689 id="x1-62002r1"></a><span 3690 class="cmr-6">1</span><span 3691 class="cmtt-8"> </span><span 3692 class="cmtt-8"> </span><span 3693 class="cmtt-8"> 1)</span><span 3694 class="cmtt-8"> [vorbis_version]</span><span 3695 class="cmtt-8"> =</span><span 3696 class="cmtt-8"> read</span><span 3697 class="cmtt-8"> 32</span><span 3698 class="cmtt-8"> bits</span><span 3699 class="cmtt-8"> as</span><span 3700 class="cmtt-8"> unsigned</span><span 3701 class="cmtt-8"> integer</span> 3702 <br class="fancyvrb" /><a 3703 id="x1-62004r2"></a><span 3704 class="cmr-6">2</span><span 3705 class="cmtt-8"> </span><span 3706 class="cmtt-8"> </span><span 3707 class="cmtt-8"> 2)</span><span 3708 class="cmtt-8"> [audio_channels]</span><span 3709 class="cmtt-8"> =</span><span 3710 class="cmtt-8"> read</span><span 3711 class="cmtt-8"> 8</span><span 3712 class="cmtt-8"> bit</span><span 3713 class="cmtt-8"> integer</span><span 3714 class="cmtt-8"> as</span><span 3715 class="cmtt-8"> unsigned</span> 3716 <br class="fancyvrb" /><a 3717 id="x1-62006r3"></a><span 3718 class="cmr-6">3</span><span 3719 class="cmtt-8"> </span><span 3720 class="cmtt-8"> </span><span 3721 class="cmtt-8"> 3)</span><span 3722 class="cmtt-8"> [audio_sample_rate]</span><span 3723 class="cmtt-8"> =</span><span 3724 class="cmtt-8"> read</span><span 3725 class="cmtt-8"> 32</span><span 3726 class="cmtt-8"> bits</span><span 3727 class="cmtt-8"> as</span><span 3728 class="cmtt-8"> unsigned</span><span 3729 class="cmtt-8"> integer</span> 3730 <br class="fancyvrb" /><a 3731 id="x1-62008r4"></a><span 3732 class="cmr-6">4</span><span 3733 class="cmtt-8"> </span><span 3734 class="cmtt-8"> </span><span 3735 class="cmtt-8"> 4)</span><span 3736 class="cmtt-8"> [bitrate_maximum]</span><span 3737 class="cmtt-8"> =</span><span 3738 class="cmtt-8"> read</span><span 3739 class="cmtt-8"> 32</span><span 3740 class="cmtt-8"> bits</span><span 3741 class="cmtt-8"> as</span><span 3742 class="cmtt-8"> signed</span><span 3743 class="cmtt-8"> integer</span> 3744 <br class="fancyvrb" /><a 3745 id="x1-62010r5"></a><span 3746 class="cmr-6">5</span><span 3747 class="cmtt-8"> </span><span 3748 class="cmtt-8"> </span><span 3749 class="cmtt-8"> 5)</span><span 3750 class="cmtt-8"> [bitrate_nominal]</span><span 3751 class="cmtt-8"> =</span><span 3752 class="cmtt-8"> read</span><span 3753 class="cmtt-8"> 32</span><span 3754 class="cmtt-8"> bits</span><span 3755 class="cmtt-8"> as</span><span 3756 class="cmtt-8"> signed</span><span 3757 class="cmtt-8"> integer</span> 3758 <br class="fancyvrb" /><a 3759 id="x1-62012r6"></a><span 3760 class="cmr-6">6</span><span 3761 class="cmtt-8"> </span><span 3762 class="cmtt-8"> </span><span 3763 class="cmtt-8"> 6)</span><span 3764 class="cmtt-8"> [bitrate_minimum]</span><span 3765 class="cmtt-8"> =</span><span 3766 class="cmtt-8"> read</span><span 3767 class="cmtt-8"> 32</span><span 3768 class="cmtt-8"> bits</span><span 3769 class="cmtt-8"> as</span><span 3770 class="cmtt-8"> signed</span><span 3771 class="cmtt-8"> integer</span> 3772 <br class="fancyvrb" /><a 3773 id="x1-62014r7"></a><span 3774 class="cmr-6">7</span><span 3775 class="cmtt-8"> </span><span 3776 class="cmtt-8"> </span><span 3777 class="cmtt-8"> 7)</span><span 3778 class="cmtt-8"> [blocksize_0]</span><span 3779 class="cmtt-8"> =</span><span 3780 class="cmtt-8"> 2</span><span 3781 class="cmtt-8"> exponent</span><span 3782 class="cmtt-8"> (read</span><span 3783 class="cmtt-8"> 4</span><span 3784 class="cmtt-8"> bits</span><span 3785 class="cmtt-8"> as</span><span 3786 class="cmtt-8"> unsigned</span><span 3787 class="cmtt-8"> integer)</span> 3788 <br class="fancyvrb" /><a 3789 id="x1-62016r8"></a><span 3790 class="cmr-6">8</span><span 3791 class="cmtt-8"> </span><span 3792 class="cmtt-8"> </span><span 3793 class="cmtt-8"> 8)</span><span 3794 class="cmtt-8"> [blocksize_1]</span><span 3795 class="cmtt-8"> =</span><span 3796 class="cmtt-8"> 2</span><span 3797 class="cmtt-8"> exponent</span><span 3798 class="cmtt-8"> (read</span><span 3799 class="cmtt-8"> 4</span><span 3800 class="cmtt-8"> bits</span><span 3801 class="cmtt-8"> as</span><span 3802 class="cmtt-8"> unsigned</span><span 3803 class="cmtt-8"> integer)</span> 3804 <br class="fancyvrb" /><a 3805 id="x1-62018r9"></a><span 3806 class="cmr-6">9</span><span 3807 class="cmtt-8"> </span><span 3808 class="cmtt-8"> </span><span 3809 class="cmtt-8"> 9)</span><span 3810 class="cmtt-8"> [framing_flag]</span><span 3811 class="cmtt-8"> =</span><span 3812 class="cmtt-8"> read</span><span 3813 class="cmtt-8"> one</span><span 3814 class="cmtt-8"> bit</span> 3815 </div> 3816 <!--l. 63--><p class="noindent" ><span 3817 class="cmtt-12">[vorbis_version] </span>is to read ’0’ in order to be compatible with this document. Both 3818 <span 3819 class="cmtt-12">[audio_channels] </span>and <span 3820 class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final 3821 blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span 3822 class="cmtt-12">[blocksize_0]</span> 3823 must be less than or equal to <span 3824 class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet 3825 any of these conditions renders a stream undecodable. 3826 <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be 3827 considerably off in purely VBR streams. The fields are meaningful only when greater than 3828 zero. 3829 <ul class="itemize1"> 3830 <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly 3831 fixed-rate bitstream 3832 </li> 3833 <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate 3834 3835 3836 3837 </li> 3838 <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits 3839 </li> 3840 <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul> 3841 <!--l. 85--><p class="noindent" > 3842 <h5 class="subsubsectionHead"><span class="titlemark">4.2.3 </span> <a 3843 id="x1-630004.2.3"></a>Comment header</h5> 3844 <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a 3845 href="#x1-810005">Section 5</a>, “<a 3846 href="#x1-810005">comment field and 3847 header specification<!--tex4ht:ref: vorbis:spec:comment --></a>”. 3848 <!--l. 90--><p class="noindent" > 3849 <h5 class="subsubsectionHead"><span class="titlemark">4.2.4 </span> <a 3850 id="x1-640004.2.4"></a>Setup header</h5> 3851 <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree: 3852 <div class="center" 3853 > 3854 <!--l. 94--><p class="noindent" > 3855 3856 <!--l. 95--><p class="noindent" ><img 3857 src="components.png" alt="PIC" 3858 > 3859 <br /> <div class="caption" 3860 ><span class="id">Figure 6: </span><span 3861 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 --> 3862 </div> 3863 <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup 3864 header contains, in order, the lists of codebook configurations, time-domain transform 3865 configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel 3866 mapping configurations and mode configurations. It finishes with a framing bit of ’1’. Header 3867 decode proceeds in the following order: 3868 <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a 3869 id="x1-650004.2.4"></a><span 3870 class="cmbx-12">Codebooks</span></span> 3871 3872 3873 3874 <ol class="enumerate1" > 3875 <li 3876 class="enumerate" id="x1-65002x1"><span 3877 class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one 3878 </li> 3879 <li 3880 class="enumerate" id="x1-65004x2">Decode <span 3881 class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a 3882 href="#x1-470003">Section 3</a>, 3883 “<a 3884 href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>”. Save each configuration, in order, in an array 3885 of codebook configurations <span 3886 class="cmtt-12">[vorbis_codebook_configurations]</span>.</li></ol> 3887 <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a 3888 id="x1-660004.2.4"></a><span 3889 class="cmbx-12">Time domain transforms</span></span> 3890 These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must 3891 be read to maintain bitstream sync. 3892 <!--l. 126--><p class="noindent" > 3893 <ol class="enumerate1" > 3894 <li 3895 class="enumerate" id="x1-66002x1"><span 3896 class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one 3897 </li> 3898 <li 3899 class="enumerate" id="x1-66004x2">read <span 3900 class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is 3901 nonzero, this is an error condition and the stream is undecodable.</li></ol> 3902 <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a 3903 id="x1-670004.2.4"></a><span 3904 class="cmbx-12">Floors</span></span> 3905 Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate 3906 type. 3907 <!--l. 138--><p class="noindent" > 3908 <ol class="enumerate1" > 3909 <li 3910 class="enumerate" id="x1-67002x1"><span 3911 class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one 3912 </li> 3913 <li 3914 class="enumerate" id="x1-67004x2">For each <span 3915 class="cmtt-12">[i] </span>of <span 3916 class="cmtt-12">[vorbis_floor_count] </span>floor numbers: 3917 <ol class="enumerate2" > 3918 <li 3919 class="enumerate" id="x1-67006x1">read the floor type: vector <span 3920 class="cmtt-12">[vorbis_floor_types] </span>element <span 3921 class="cmtt-12">[i] </span>= read 16 bits 3922 as unsigned integer 3923 </li> 3924 <li 3925 class="enumerate" id="x1-67008x2">If the floor type is zero, decode the floor configuration as defined in <a 3926 href="#x1-890006">Section 6</a>, 3927 “<a 3928 href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>”; save this configuration in slot <span 3929 class="cmtt-12">[i] </span>of the floor 3930 configuration array <span 3931 class="cmtt-12">[vorbis_floor_configurations]</span>. 3932 3933 3934 3935 </li> 3936 <li 3937 class="enumerate" id="x1-67010x3">If the floor type is one, decode the floor configuration as defined in <a 3938 href="#x1-950007">Section 7</a>, 3939 “<a 3940 href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>”; save this configuration in slot <span 3941 class="cmtt-12">[i] </span>of the floor 3942 configuration array <span 3943 class="cmtt-12">[vorbis_floor_configurations]</span>. 3944 </li> 3945 <li 3946 class="enumerate" id="x1-67012x4">If the the floor type is greater than one, this stream is undecodable; ERROR 3947 CONDITION</li></ol> 3948 </li></ol> 3949 <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a 3950 id="x1-680004.2.4"></a><span 3951 class="cmbx-12">Residues</span></span> 3952 Vorbis uses three residue types; header decode of each type is identical. 3953 <!--l. 162--><p class="noindent" > 3954 <ol class="enumerate1" > 3955 <li 3956 class="enumerate" id="x1-68002x1"><span 3957 class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one 3958 </li> 3959 <li 3960 class="enumerate" id="x1-68004x2">For each of <span 3961 class="cmtt-12">[vorbis_residue_count] </span>residue numbers: 3962 <ol class="enumerate2" > 3963 <li 3964 class="enumerate" id="x1-68006x1">read the residue type; vector <span 3965 class="cmtt-12">[vorbis_residue_types] </span>element <span 3966 class="cmtt-12">[i] </span>= read 16 3967 bits as unsigned integer 3968 </li> 3969 <li 3970 class="enumerate" id="x1-68008x2">If the residue type is zero, one or two, decode the residue configuration as defined 3971 in <a 3972 href="#x1-1020008">Section 8</a>, “<a 3973 href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>”; save this configuration in slot <span 3974 class="cmtt-12">[i] </span>of 3975 the residue configuration array <span 3976 class="cmtt-12">[vorbis_residue_configurations]</span>. 3977 </li> 3978 <li 3979 class="enumerate" id="x1-68010x3">If the the residue type is greater than two, this stream is undecodable; ERROR 3980 CONDITION</li></ol> 3981 </li></ol> 3982 <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a 3983 id="x1-690004.2.4"></a><span 3984 class="cmbx-12">Mappings</span></span> 3985 Mappings are used to set up specific pipelines for encoding multichannel audio with varying 3986 channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM 3987 channel mappings. 3988 3989 3990 3991 <!--l. 187--><p class="noindent" > 3992 <ol class="enumerate1" > 3993 <li 3994 class="enumerate" id="x1-69002x1"><span 3995 class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one 3996 </li> 3997 <li 3998 class="enumerate" id="x1-69004x2">For each <span 3999 class="cmtt-12">[i] </span>of <span 4000 class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers: 4001 <ol class="enumerate2" > 4002 <li 4003 class="enumerate" id="x1-69006x1">read the mapping type: 16 bits as unsigned integer. There’s no reason to save 4004 the mapping type in Vorbis I. 4005 </li> 4006 <li 4007 class="enumerate" id="x1-69008x2">If the mapping type is nonzero, the stream is undecodable 4008 </li> 4009 <li 4010 class="enumerate" id="x1-69010x3">If the mapping type is zero: 4011 <ol class="enumerate3" > 4012 <li 4013 class="enumerate" id="x1-69012x1">read 1 bit as a boolean flag 4014 <ol class="enumerate4" > 4015 <li 4016 class="enumerate" id="x1-69014x1">if set, <span 4017 class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer 4018 and add one 4019 </li> 4020 <li 4021 class="enumerate" id="x1-69016x2">if unset, <span 4022 class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</li></ol> 4023 </li> 4024 <li 4025 class="enumerate" id="x1-69018x2">read 1 bit as a boolean flag 4026 <ol class="enumerate4" > 4027 <li 4028 class="enumerate" id="x1-69020x1">if set, square polar channel mapping is in use: 4029 <ul class="itemize1"> 4030 <li class="itemize"><span 4031 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= read 8 bits as unsigned 4032 integer and add one 4033 </li> 4034 <li class="itemize">for <span 4035 class="cmtt-12">[j] </span>each of <span 4036 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps: 4037 <ul class="itemize2"> 4038 <li class="itemize">vector <span 4039 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span 4040 class="cmtt-12">[j]</span>= read 4041 <a 4042 href="#x1-1170009.2.1">ilog</a>(<span 4043 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer 4044 </li> 4045 <li class="itemize">vector <span 4046 class="cmtt-12">[vorbis_mapping_angle] </span>element <span 4047 class="cmtt-12">[j]</span>= read 4048 <a 4049 href="#x1-1170009.2.1">ilog</a>(<span 4050 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer 4051 </li> 4052 4053 4054 4055 <li class="itemize">the numbers read in the above two steps are channel numbers 4056 representing the channel to treat as magnitude and the channel 4057 to treat as angle, respectively. If for any coupling step the 4058 angle channel number equals the magnitude channel number, the 4059 magnitude channel number is greater than <span 4060 class="cmtt-12">[audio_channels]</span>-1, or 4061 the angle channel is greater than <span 4062 class="cmtt-12">[audio_channels]</span>-1, the stream 4063 is undecodable.</li></ul> 4064 </li></ul> 4065 </li> 4066 <li 4067 class="enumerate" id="x1-69022x2">if unset, <span 4068 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</li></ol> 4069 </li> 4070 <li 4071 class="enumerate" id="x1-69024x3">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable 4072 </li> 4073 <li 4074 class="enumerate" id="x1-69026x4">if <span 4075 class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex 4076 settings. For each <span 4077 class="cmtt-12">[j] </span>of <span 4078 class="cmtt-12">[audio_channels] </span>channels: 4079 <ol class="enumerate4" > 4080 <li 4081 class="enumerate" id="x1-69028x1">vector <span 4082 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 4083 class="cmtt-12">[j] </span>= read 4 bits as unsigned 4084 integer 4085 </li> 4086 <li 4087 class="enumerate" id="x1-69030x2">if the value is greater than the highest numbered submap 4088 (<span 4089 class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering 4090 the stream undecodable</li></ol> 4091 </li> 4092 <li 4093 class="enumerate" id="x1-69032x5">for each submap <span 4094 class="cmtt-12">[j] </span>of <span 4095 class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and 4096 residue numbers for use in decoding that submap: 4097 <ol class="enumerate4" > 4098 <li 4099 class="enumerate" id="x1-69034x1">read and discard 8 bits (the unused time configuration placeholder) 4100 </li> 4101 <li 4102 class="enumerate" id="x1-69036x2">read 8 bits as unsigned integer for the floor number; save in vector 4103 <span 4104 class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span 4105 class="cmtt-12">[j]</span> 4106 </li> 4107 <li 4108 class="enumerate" id="x1-69038x3">verify the floor number is not greater than the highest number floor 4109 configured for the bitstream. If it is, the bitstream is undecodable 4110 </li> 4111 <li 4112 class="enumerate" id="x1-69040x4">read 8 bits as unsigned integer for the residue number; save in vector 4113 <span 4114 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span 4115 class="cmtt-12">[j]</span> 4116 4117 4118 4119 </li> 4120 <li 4121 class="enumerate" id="x1-69042x5">verify the residue number is not greater than the highest number residue 4122 configured for the bitstream. If it is, the bitstream is undecodable</li></ol> 4123 </li> 4124 <li 4125 class="enumerate" id="x1-69044x6">save this mapping configuration in slot <span 4126 class="cmtt-12">[i] </span>of the mapping configuration array 4127 <span 4128 class="cmtt-12">[vorbis_mapping_configurations]</span>.</li></ol> 4129 </li></ol> 4130 </li></ol> 4131 <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a 4132 id="x1-700004.2.4"></a><span 4133 class="cmbx-12">Modes</span></span> 4134 <ol class="enumerate1" > 4135 <li 4136 class="enumerate" id="x1-70002x1"><span 4137 class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one 4138 </li> 4139 <li 4140 class="enumerate" id="x1-70004x2">For each of <span 4141 class="cmtt-12">[vorbis_mode_count] </span>mode numbers: 4142 <ol class="enumerate2" > 4143 <li 4144 class="enumerate" id="x1-70006x1"><span 4145 class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit 4146 </li> 4147 <li 4148 class="enumerate" id="x1-70008x2"><span 4149 class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer 4150 </li> 4151 <li 4152 class="enumerate" id="x1-70010x3"><span 4153 class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer 4154 </li> 4155 <li 4156 class="enumerate" id="x1-70012x4"><span 4157 class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer 4158 </li> 4159 <li 4160 class="enumerate" id="x1-70014x5">verify ranges; zero is the only legal value in 4161 Vorbis I for <span 4162 class="cmtt-12">[vorbis_mode_windowtype] </span>and <span 4163 class="cmtt-12">[vorbis_mode_transformtype]</span>. 4164 <span 4165 class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping 4166 in use. Any illegal values render the stream undecodable. 4167 </li> 4168 <li 4169 class="enumerate" id="x1-70016x6">save this mode configuration in slot <span 4170 class="cmtt-12">[i] </span>of the mode configuration array 4171 <span 4172 class="cmtt-12">[vorbis_mode_configurations]</span>.</li></ol> 4173 </li> 4174 <li 4175 class="enumerate" id="x1-70018x3">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not 4176 decodable.</li></ol> 4177 4178 4179 4180 <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete. 4181 <!--l. 277--><p class="noindent" > 4182 <h4 class="subsectionHead"><span class="titlemark">4.3 </span> <a 4183 id="x1-710004.3"></a>Audio packet decode and synthesis</h4> 4184 <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of 4185 audio packet decode is to read and verify the packet type. <span 4186 class="cmti-12">A non-audio packet when audio is</span> 4187 <span 4188 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span> 4189 <span 4190 class="cmti-12">packet and not attempt decoding it to audio</span>. 4191 <!--l. 286--><p class="noindent" > 4192 <h5 class="subsubsectionHead"><span class="titlemark">4.3.1 </span> <a 4193 id="x1-720004.3.1"></a>packet type, mode and window decode</h5> 4194 <!--l. 288--><p class="noindent" > 4195 <ol class="enumerate1" > 4196 <li 4197 class="enumerate" id="x1-72002x1">read 1 bit <span 4198 class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio) 4199 </li> 4200 <li 4201 class="enumerate" id="x1-72004x2">read <a 4202 href="#x1-1170009.2.1">ilog</a>([vorbis˙mode˙count]-1) bits <span 4203 class="cmtt-12">[mode_number]</span> 4204 </li> 4205 <li 4206 class="enumerate" id="x1-72006x3">decode blocksize <span 4207 class="cmtt-12">[n] </span>is equal to <span 4208 class="cmtt-12">[blocksize_0] </span>if <span 4209 class="cmtt-12">[vorbis_mode_blockflag] </span>is 0, 4210 else <span 4211 class="cmtt-12">[n] </span>is equal to <span 4212 class="cmtt-12">[blocksize_1]</span>. 4213 </li> 4214 <li 4215 class="enumerate" id="x1-72008x4">perform window selection and setup; this window is used later by the inverse 4216 MDCT: 4217 <ol class="enumerate2" > 4218 <li 4219 class="enumerate" id="x1-72010x1">if this is a long window (the <span 4220 class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is 4221 set): 4222 <ol class="enumerate3" > 4223 <li 4224 class="enumerate" id="x1-72012x1">read 1 bit for <span 4225 class="cmtt-12">[previous_window_flag]</span> 4226 </li> 4227 <li 4228 class="enumerate" id="x1-72014x2">read 1 bit for <span 4229 class="cmtt-12">[next_window_flag]</span> 4230 4231 4232 4233 </li> 4234 <li 4235 class="enumerate" id="x1-72016x3">if <span 4236 class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will 4237 be a hybrid window for lapping with a short block. See <a 4238 href="#paragraph.1" >paragraph <a 4239 href="#x1-260001.3.2">1.3.2</a></a>, 4240 “<a 4241 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>” for an illustration of 4242 overlapping dissimilar windows. Else, the left half window will have normal 4243 long shape. 4244 </li> 4245 <li 4246 class="enumerate" id="x1-72018x4">if <span 4247 class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be 4248 a hybrid window for lapping with a short block. See <a 4249 href="#x1-260001.3.2">paragraph 1.3.2</a>, 4250 “<a 4251 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>” for an illustration of 4252 overlapping dissimilar windows. Else, the left right window will have normal 4253 long shape.</li></ol> 4254 </li> 4255 <li 4256 class="enumerate" id="x1-72020x2">if this is a short window, the window is always the same short-window 4257 shape.</li></ol> 4258 </li></ol> 4259 <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span 4260 class="cmmi-12">y </span>= sin(<img 4261 src="Vorbis_I_spec1x.png" alt="π2" class="frac" align="middle"> <span 4262 class="cmsy-10x-x-120">∗</span> sin <sup><span 4263 class="cmr-8">2</span></sup>((<span 4264 class="cmmi-12">x </span>+ 0<span 4265 class="cmmi-12">.</span>5)<span 4266 class="cmmi-12">∕n </span><span 4267 class="cmsy-10x-x-120">∗ </span><span 4268 class="cmmi-12">π</span>)), where <span 4269 class="cmmi-12">n </span>is window 4270 size and <span 4271 class="cmmi-12">x </span>ranges 0<span 4272 class="cmmi-12">…</span><span 4273 class="cmmi-12">n</span><span 4274 class="cmsy-10x-x-120">− </span>1, but dissimilar lapping requirements can affect overall shape. Window 4275 generation proceeds as follows: 4276 <!--l. 326--><p class="noindent" > 4277 <ol class="enumerate1" > 4278 <li 4279 class="enumerate" id="x1-72022x1"><span 4280 class="cmtt-12">[window_center] </span>= <span 4281 class="cmtt-12">[n] </span>/ 2 4282 </li> 4283 <li 4284 class="enumerate" id="x1-72024x2">if (<span 4285 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span 4286 class="cmtt-12">[previous_window_flag] </span>is not set) 4287 then 4288 <ol class="enumerate2" > 4289 <li 4290 class="enumerate" id="x1-72026x1"><span 4291 class="cmtt-12">[left_window_start] </span>= <span 4292 class="cmtt-12">[n]</span>/4 - <span 4293 class="cmtt-12">[blocksize_0]</span>/4 4294 </li> 4295 <li 4296 class="enumerate" id="x1-72028x2"><span 4297 class="cmtt-12">[left_window_end] </span>= <span 4298 class="cmtt-12">[n]</span>/4 + <span 4299 class="cmtt-12">[blocksize_0]</span>/4 4300 </li> 4301 <li 4302 class="enumerate" id="x1-72030x3"><span 4303 class="cmtt-12">[left_n] </span>= <span 4304 class="cmtt-12">[blocksize_0]</span>/2</li></ol> 4305 <!--l. 336--><p class="noindent" >else 4306 <ol class="enumerate2" > 4307 <li 4308 class="enumerate" id="x1-72032x1"><span 4309 class="cmtt-12">[left_window_start] </span>= 0 4310 </li> 4311 <li 4312 class="enumerate" id="x1-72034x2"><span 4313 class="cmtt-12">[left_window_end] </span>= <span 4314 class="cmtt-12">[window_center]</span> 4315 4316 4317 4318 </li> 4319 <li 4320 class="enumerate" id="x1-72036x3"><span 4321 class="cmtt-12">[left_n] </span>= <span 4322 class="cmtt-12">[n]</span>/2</li></ol> 4323 </li> 4324 <li 4325 class="enumerate" id="x1-72038x3">if (<span 4326 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span 4327 class="cmtt-12">[next_window_flag] </span>is not set) then 4328 <ol class="enumerate2" > 4329 <li 4330 class="enumerate" id="x1-72040x1"><span 4331 class="cmtt-12">[right_window_start] </span>= <span 4332 class="cmtt-12">[n]*3</span>/4 - <span 4333 class="cmtt-12">[blocksize_0]</span>/4 4334 </li> 4335 <li 4336 class="enumerate" id="x1-72042x2"><span 4337 class="cmtt-12">[right_window_end] </span>= <span 4338 class="cmtt-12">[n]*3</span>/4 + <span 4339 class="cmtt-12">[blocksize_0]</span>/4 4340 </li> 4341 <li 4342 class="enumerate" id="x1-72044x3"><span 4343 class="cmtt-12">[right_n] </span>= <span 4344 class="cmtt-12">[blocksize_0]</span>/2</li></ol> 4345 <!--l. 352--><p class="noindent" >else 4346 <ol class="enumerate2" > 4347 <li 4348 class="enumerate" id="x1-72046x1"><span 4349 class="cmtt-12">[right_window_start] </span>= <span 4350 class="cmtt-12">[window_center]</span> 4351 </li> 4352 <li 4353 class="enumerate" id="x1-72048x2"><span 4354 class="cmtt-12">[right_window_end] </span>= <span 4355 class="cmtt-12">[n]</span> 4356 </li> 4357 <li 4358 class="enumerate" id="x1-72050x3"><span 4359 class="cmtt-12">[right_n] </span>= <span 4360 class="cmtt-12">[n]</span>/2</li></ol> 4361 </li> 4362 <li 4363 class="enumerate" id="x1-72052x4">window from range 0 ... <span 4364 class="cmtt-12">[left_window_start]</span>-1 inclusive is zero 4365 </li> 4366 <li 4367 class="enumerate" id="x1-72054x5">for <span 4368 class="cmtt-12">[i] </span>in range <span 4369 class="cmtt-12">[left_window_start] </span>... <span 4370 class="cmtt-12">[left_window_end]</span>-1, window(<span 4371 class="cmtt-12">[i]</span>) = 4372 sin(<img 4373 src="Vorbis_I_spec2x.png" alt="π 4374 2" class="frac" align="middle"> <span 4375 class="cmsy-10x-x-120">∗</span> sin <sup><span 4376 class="cmr-8">2</span></sup>( (<span 4377 class="cmtt-12">[i]</span>-<span 4378 class="cmtt-12">[left_window_start]</span>+0.5) / <span 4379 class="cmtt-12">[left_n] </span><span 4380 class="cmsy-10x-x-120">∗</span><img 4381 src="Vorbis_I_spec3x.png" alt="π 4382 2" class="frac" align="middle">) ) 4383 </li> 4384 <li 4385 class="enumerate" id="x1-72056x6">window from range <span 4386 class="cmtt-12">[left_window_end] </span>... <span 4387 class="cmtt-12">[right_window_start]</span>-1 inclusive is 4388 one 4389 </li> 4390 <li 4391 class="enumerate" id="x1-72058x7">for <span 4392 class="cmtt-12">[i] </span>in range <span 4393 class="cmtt-12">[right_window_start] </span>... <span 4394 class="cmtt-12">[right_window_end]</span>-1, window(<span 4395 class="cmtt-12">[i]</span>) = 4396 sin(<img 4397 src="Vorbis_I_spec4x.png" alt="π 4398 2" class="frac" align="middle"> <span 4399 class="cmsy-10x-x-120">∗</span> sin <sup><span 4400 class="cmr-8">2</span></sup>( (<span 4401 class="cmtt-12">[i]</span>-<span 4402 class="cmtt-12">[right_window_start]</span>+0.5) / <span 4403 class="cmtt-12">[right_n] </span><span 4404 class="cmsy-10x-x-120">∗</span><img 4405 src="Vorbis_I_spec5x.png" alt="π 4406 2" class="frac" align="middle"> + <img 4407 src="Vorbis_I_spec6x.png" alt="π 4408 2" class="frac" align="middle">) ) 4409 </li> 4410 <li 4411 class="enumerate" id="x1-72060x8">window from range <span 4412 class="cmtt-12">[right_window_start] </span>... <span 4413 class="cmtt-12">[n]</span>-1 is zero</li></ol> 4414 <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this 4415 packet from the stream. An end of packet condition past this point is to be considered a possible 4416 nominal occurrence. 4417 4418 4419 4420 <!--l. 375--><p class="noindent" > 4421 <h5 class="subsubsectionHead"><span class="titlemark">4.3.2 </span> <a 4422 id="x1-730004.3.2"></a>floor curve decode</h5> 4423 <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span 4424 class="cmtt-12">[mode_number]</span> 4425 from configuration array <span 4426 class="cmtt-12">[vorbis_mode_configurations] </span>and the map number 4427 <span 4428 class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration 4429 array <span 4430 class="cmtt-12">[vorbis_mapping_configurations]</span>. 4431 <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order. 4432 <!--l. 386--><p class="noindent" >For each floor <span 4433 class="cmtt-12">[i] </span>of <span 4434 class="cmtt-12">[audio_channels]</span> 4435 <ol class="enumerate1" > 4436 <li 4437 class="enumerate" id="x1-73002x1"><span 4438 class="cmtt-12">[submap_number] </span>= element <span 4439 class="cmtt-12">[i] </span>of vector [vorbis˙mapping˙mux] 4440 </li> 4441 <li 4442 class="enumerate" id="x1-73004x2"><span 4443 class="cmtt-12">[floor_number] </span>= element <span 4444 class="cmtt-12">[submap_number] </span>of vector [vorbis˙submap˙floor] 4445 </li> 4446 <li 4447 class="enumerate" id="x1-73006x3">if the floor type of this floor (vector 4448 <span 4449 class="cmtt-12">[vorbis_floor_types] </span>element <span 4450 class="cmtt-12">[floor_number]</span>) is zero then decode the floor for 4451 channel <span 4452 class="cmtt-12">[i] </span>according to the <a 4453 href="#x1-930006.2.2">subsubsection 6.2.2</a>, “<a 4454 href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>” 4455 </li> 4456 <li 4457 class="enumerate" id="x1-73008x4">if the type of this floor is one then decode the floor for channel <span 4458 class="cmtt-12">[i] </span>according to the 4459 <a 4460 href="#x1-1000007.2.2">paragraph 7.2.2</a>, “<a 4461 href="#x1-1000007.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>” 4462 </li> 4463 <li 4464 class="enumerate" id="x1-73010x5">save the needed decoded floor information for channel for later synthesis 4465 </li> 4466 <li 4467 class="enumerate" id="x1-73012x6">if the decoded floor returned ’unused’, set vector <span 4468 class="cmtt-12">[no_residue] </span>element <span 4469 class="cmtt-12">[i] </span>to true, 4470 else set vector <span 4471 class="cmtt-12">[no_residue] </span>element <span 4472 class="cmtt-12">[i] </span>to false</li></ol> 4473 <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel 4474 output vectors and skipping to the add/overlap output stage. 4475 <!--l. 412--><p class="noindent" > 4476 <h5 class="subsubsectionHead"><span class="titlemark">4.3.3 </span> <a 4477 id="x1-740004.3.3"></a>nonzero vector propagate</h5> 4478 <!--l. 414--><p class="noindent" >A possible result of floor decode is that a specific vector is marked ’unused’ which indicates that 4479 that final output vector is all-zero values (and the floor is zero). The residue for that vector is not 4480 coded in the stream, save for one complication. If some vectors are used and some are not, 4481 4482 4483 4484 channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed 4485 vectors. 4486 <!--l. 421--><p class="noindent" >for each <span 4487 class="cmtt-12">[i] </span>from 0 ... <span 4488 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 4489 <!--l. 423--><p class="noindent" > 4490 <ol class="enumerate1" > 4491 <li 4492 class="enumerate" id="x1-74002x1">if either <span 4493 class="cmtt-12">[no_residue] </span>entry for channel (<span 4494 class="cmtt-12">[vorbis_mapping_magnitude] </span>element 4495 <span 4496 class="cmtt-12">[i]</span>) or channel (<span 4497 class="cmtt-12">[vorbis_mapping_angle] </span>element <span 4498 class="cmtt-12">[i]</span>) are set to false, then both 4499 must be set to false. Note that an ’unused’ floor has no decoded floor information; it 4500 is important that this is remembered at floor curve synthesis time.</li></ol> 4501 <!--l. 436--><p class="noindent" > 4502 <h5 class="subsubsectionHead"><span class="titlemark">4.3.4 </span> <a 4503 id="x1-750004.3.4"></a>residue decode</h5> 4504 <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap 4505 order. 4506 <!--l. 441--><p class="noindent" >for each submap <span 4507 class="cmtt-12">[i] </span>in order from 0 ... <span 4508 class="cmtt-12">[vorbis_mapping_submaps]</span>-1 4509 <!--l. 443--><p class="noindent" > 4510 <ol class="enumerate1" > 4511 <li 4512 class="enumerate" id="x1-75002x1"><span 4513 class="cmtt-12">[ch] </span>= 0 4514 </li> 4515 <li 4516 class="enumerate" id="x1-75004x2">for each channel <span 4517 class="cmtt-12">[j] </span>in order from 0 ... <span 4518 class="cmtt-12">[audio_channels] </span>- 1 4519 <ol class="enumerate2" > 4520 <li 4521 class="enumerate" id="x1-75006x1">if channel <span 4522 class="cmtt-12">[j] </span>in submap <span 4523 class="cmtt-12">[i] </span>(vector <span 4524 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 4525 class="cmtt-12">[j] </span>is equal to 4526 <span 4527 class="cmtt-12">[i]</span>) 4528 <ol class="enumerate3" > 4529 <li 4530 class="enumerate" id="x1-75008x1">if vector <span 4531 class="cmtt-12">[no_residue] </span>element <span 4532 class="cmtt-12">[j] </span>is true 4533 <ol class="enumerate4" > 4534 <li 4535 class="enumerate" id="x1-75010x1">vector <span 4536 class="cmtt-12">[do_not_decode_flag] </span>element <span 4537 class="cmtt-12">[ch] </span>is set</li></ol> 4538 <!--l. 453--><p class="noindent" >else 4539 <ol class="enumerate4" > 4540 <li 4541 class="enumerate" id="x1-75012x1">vector <span 4542 class="cmtt-12">[do_not_decode_flag] </span>element <span 4543 class="cmtt-12">[ch] </span>is unset</li></ol> 4544 </li> 4545 <li 4546 class="enumerate" id="x1-75014x2">increment <span 4547 class="cmtt-12">[ch]</span></li></ol> 4548 4549 4550 4551 </li></ol> 4552 </li> 4553 <li 4554 class="enumerate" id="x1-75016x3"><span 4555 class="cmtt-12">[residue_number] </span>= vector <span 4556 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span 4557 class="cmtt-12">[i]</span> 4558 </li> 4559 <li 4560 class="enumerate" id="x1-75018x4"><span 4561 class="cmtt-12">[residue_type] </span>= vector <span 4562 class="cmtt-12">[vorbis_residue_types] </span>element <span 4563 class="cmtt-12">[residue_number]</span> 4564 </li> 4565 <li 4566 class="enumerate" id="x1-75020x5">decode <span 4567 class="cmtt-12">[ch] </span>vectors using residue <span 4568 class="cmtt-12">[residue_number]</span>, according to type <span 4569 class="cmtt-12">[residue_type]</span>, 4570 also passing vector <span 4571 class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should 4572 not be decoded. Correct per-vector decode length is <span 4573 class="cmtt-12">[n]</span>/2. 4574 </li> 4575 <li 4576 class="enumerate" id="x1-75022x6"><span 4577 class="cmtt-12">[ch] </span>= 0 4578 </li> 4579 <li 4580 class="enumerate" id="x1-75024x7">for each channel <span 4581 class="cmtt-12">[j] </span>in order from 0 ... <span 4582 class="cmtt-12">[audio_channels]</span> 4583 <ol class="enumerate2" > 4584 <li 4585 class="enumerate" id="x1-75026x1">if channel <span 4586 class="cmtt-12">[j] </span>is in submap <span 4587 class="cmtt-12">[i] </span>(vector <span 4588 class="cmtt-12">[vorbis_mapping_mux] </span>element <span 4589 class="cmtt-12">[j] </span>is equal 4590 to <span 4591 class="cmtt-12">[i]</span>) 4592 <ol class="enumerate3" > 4593 <li 4594 class="enumerate" id="x1-75028x1">residue vector for channel <span 4595 class="cmtt-12">[j] </span>is set to decoded residue vector <span 4596 class="cmtt-12">[ch]</span> 4597 </li> 4598 <li 4599 class="enumerate" id="x1-75030x2">increment <span 4600 class="cmtt-12">[ch]</span></li></ol> 4601 </li></ol> 4602 </li></ol> 4603 <!--l. 480--><p class="noindent" > 4604 <h5 class="subsubsectionHead"><span class="titlemark">4.3.5 </span> <a 4605 id="x1-760004.3.5"></a>inverse coupling</h5> 4606 <!--l. 482--><p class="noindent" >for each <span 4607 class="cmtt-12">[i] </span>from <span 4608 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0 4609 <!--l. 484--><p class="noindent" > 4610 <ol class="enumerate1" > 4611 <li 4612 class="enumerate" id="x1-76002x1"><span 4613 class="cmtt-12">[magnitude_vector] </span>= the residue vector for channel (vector 4614 <span 4615 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span 4616 class="cmtt-12">[i]</span>) 4617 </li> 4618 <li 4619 class="enumerate" id="x1-76004x2"><span 4620 class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span 4621 class="cmtt-12">[vorbis_mapping_angle]</span> 4622 4623 4624 4625 element <span 4626 class="cmtt-12">[i]</span>) 4627 </li> 4628 <li 4629 class="enumerate" id="x1-76006x3">for each scalar value <span 4630 class="cmtt-12">[M] </span>in vector <span 4631 class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value 4632 <span 4633 class="cmtt-12">[A] </span>in vector <span 4634 class="cmtt-12">[angle_vector]</span>: 4635 <ol class="enumerate2" > 4636 <li 4637 class="enumerate" id="x1-76008x1">if (<span 4638 class="cmtt-12">[M] </span>is greater than zero) 4639 <ol class="enumerate3" > 4640 <li 4641 class="enumerate" id="x1-76010x1">if (<span 4642 class="cmtt-12">[A] </span>is greater than zero) 4643 <ol class="enumerate4" > 4644 <li 4645 class="enumerate" id="x1-76012x1"><span 4646 class="cmtt-12">[new_M] </span>= <span 4647 class="cmtt-12">[M]</span> 4648 </li> 4649 <li 4650 class="enumerate" id="x1-76014x2"><span 4651 class="cmtt-12">[new_A] </span>= <span 4652 class="cmtt-12">[M]</span>-<span 4653 class="cmtt-12">[A]</span></li></ol> 4654 <!--l. 498--><p class="noindent" >else 4655 <ol class="enumerate4" > 4656 <li 4657 class="enumerate" id="x1-76016x1"><span 4658 class="cmtt-12">[new_A] </span>= <span 4659 class="cmtt-12">[M]</span> 4660 </li> 4661 <li 4662 class="enumerate" id="x1-76018x2"><span 4663 class="cmtt-12">[new_M] </span>= <span 4664 class="cmtt-12">[M]</span>+<span 4665 class="cmtt-12">[A]</span></li></ol> 4666 </li></ol> 4667 <!--l. 505--><p class="noindent" >else 4668 <ol class="enumerate3" > 4669 <li 4670 class="enumerate" id="x1-76020x1">if (<span 4671 class="cmtt-12">[A] </span>is greater than zero) 4672 <ol class="enumerate4" > 4673 <li 4674 class="enumerate" id="x1-76022x1"><span 4675 class="cmtt-12">[new_M] </span>= <span 4676 class="cmtt-12">[M]</span> 4677 </li> 4678 <li 4679 class="enumerate" id="x1-76024x2"><span 4680 class="cmtt-12">[new_A] </span>= <span 4681 class="cmtt-12">[M]</span>+<span 4682 class="cmtt-12">[A]</span></li></ol> 4683 <!--l. 512--><p class="noindent" >else 4684 <ol class="enumerate4" > 4685 <li 4686 class="enumerate" id="x1-76026x1"><span 4687 class="cmtt-12">[new_A] </span>= <span 4688 class="cmtt-12">[M]</span> 4689 </li> 4690 <li 4691 class="enumerate" id="x1-76028x2"><span 4692 class="cmtt-12">[new_M] </span>= <span 4693 class="cmtt-12">[M]</span>-<span 4694 class="cmtt-12">[A]</span></li></ol> 4695 </li></ol> 4696 </li> 4697 <li 4698 class="enumerate" id="x1-76030x2">set scalar value <span 4699 class="cmtt-12">[M] </span>in vector <span 4700 class="cmtt-12">[magnitude_vector] </span>to <span 4701 class="cmtt-12">[new_M]</span> 4702 4703 4704 4705 </li> 4706 <li 4707 class="enumerate" id="x1-76032x3">set scalar value <span 4708 class="cmtt-12">[A] </span>in vector <span 4709 class="cmtt-12">[angle_vector] </span>to <span 4710 class="cmtt-12">[new_A]</span></li></ol> 4711 </li></ol> 4712 <!--l. 529--><p class="noindent" > 4713 <h5 class="subsubsectionHead"><span class="titlemark">4.3.6 </span> <a 4714 id="x1-770004.3.6"></a>dot product</h5> 4715 <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to 4716 packet type. Note that the vector synthesis length for floor computation is <span 4717 class="cmtt-12">[n]</span>/2. 4718 <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that 4719 channel’s residue vector. The result is the dot product of the floor and residue vectors for 4720 each channel; the produced vectors are the length <span 4721 class="cmtt-12">[n]</span>/2 audio spectrum for each 4722 channel. 4723 <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point 4724 implementation might be to assume that a 32 bit fixed-point representation for floor and 4725 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth 4726 in all cases because it happens to mostly work with the current Xiph.Org reference 4727 encoder. 4728 <!--l. 550--><p class="noindent" >However, floor vector values can span <span 4729 class="cmsy-10x-x-120">∼</span>140dB (<span 4730 class="cmsy-10x-x-120">∼</span>24 bits unsigned), and the audio spectrum 4731 vector should represent a minimum of 120dB (<span 4732 class="cmsy-10x-x-120">∼</span>21 bits with sign), even when output is to a 16 4733 bit PCM device. For the residue vector to represent full scale if the floor is nailed 4734 to <span 4735 class="cmsy-10x-x-120">−</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach 4736 full scale if the floor is nailed at 0dB, it must be able to represent <span 4737 class="cmsy-10x-x-120">−</span>140dB to +0dB. 4738 Thus, in order to handle full range dynamics, a residue vector may span <span 4739 class="cmsy-10x-x-120">−</span>140dB to 4740 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the 4741 residue vector must be able to represent a 48 bit range and the dot product must 4742 be able to handle an effective 48 bit times 24 bit multiplication. This range may be 4743 achieved using large (64 bit or larger) integers, or implementing a movable binary point 4744 representation. 4745 <!--l. 567--><p class="noindent" > 4746 <h5 class="subsubsectionHead"><span class="titlemark">4.3.7 </span> <a 4747 id="x1-780004.3.7"></a>inverse MDCT</h5> 4748 <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an 4749 4750 4751 4752 inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is 4753 available in <span class="cite">[<a 4754 href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described 4755 earlier. 4756 <!--l. 576--><p class="noindent" > 4757 <h5 class="subsubsectionHead"><span class="titlemark">4.3.8 </span> <a 4758 id="x1-790004.3.8"></a>overlap˙add</h5> 4759 <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous 4760 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the 4761 current window (as illustrated in <a 4762 href="#x1-260001.3.2">paragraph 1.3.2</a>, “<a 4763 href="#x1-260001.3.2">Window shape decode (long windows 4764 only)<!--tex4ht:ref: vorbis:spec:window --></a>”). The overlapped portion produced from overlapping the previous and current frame data 4765 is finished data to be returned by the decoder. This data spans from the center of 4766 the previous window to the center of the current window. In the case of same-sized 4767 windows, the amount of data to return is one-half block consisting of and only of the 4768 overlapped portions. When overlapping a short and long window, much of the returned 4769 range does not actually overlap. This does not damage transform orthogonality. Pay 4770 attention however to returning the correct data range; the amount of data to be returned 4771 is: 4772 <!--l. 592--><p class="noindent" > 4773 <div class="fancyvrb" id="fancyvrb22"> 4774 <a 4775 id="x1-79002r1"></a><span 4776 class="cmr-6">1</span><span 4777 class="cmtt-8"> </span><span 4778 class="cmtt-8"> window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span> 4779 </div> 4780 <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element 4781 windowsize/2-1, inclusive) of the current window. 4782 <!--l. 599--><p class="noindent" >Data is not returned from the first frame; it must be used to ’prime’ the decode engine. The 4783 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper 4784 PCM output offset is ’0’ (as no data has been returned yet). 4785 <!--l. 606--><p class="noindent" > 4786 <h5 class="subsubsectionHead"><span class="titlemark">4.3.9 </span> <a 4787 id="x1-800004.3.9"></a>output channel order</h5> 4788 <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is 4789 implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the 4790 specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for 4791 4792 4793 4794 greater-than-eight channels remains ’left to the implementation’. 4795 <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a 4796 decoder to produce output with channels in any order. Any such decoder should explicitly 4797 document channel reordering behavior. 4798 <!--l. 619--><p class="noindent" > 4799 <dl class="description"><dt class="description"> 4800 <span 4801 class="cmssbx-10x-x-120">one channel</span> </dt><dd 4802 class="description">the stream is monophonic 4803 </dd><dt class="description"> 4804 <span 4805 class="cmssbx-10x-x-120">two channels</span> </dt><dd 4806 class="description">the stream is stereo. channel order: left, right 4807 </dd><dt class="description"> 4808 <span 4809 class="cmssbx-10x-x-120">three channels</span> </dt><dd 4810 class="description">the stream is a 1d-surround encoding. channel order: left, center, right 4811 </dd><dt class="description"> 4812 <span 4813 class="cmssbx-10x-x-120">four channels</span> </dt><dd 4814 class="description">the stream is quadraphonic surround. channel order: front left, front right, 4815 rear left, rear right 4816 </dd><dt class="description"> 4817 <span 4818 class="cmssbx-10x-x-120">five channels</span> </dt><dd 4819 class="description">the stream is five-channel surround. channel order: front left, center, front 4820 right, rear left, rear right 4821 </dd><dt class="description"> 4822 <span 4823 class="cmssbx-10x-x-120">six channels</span> </dt><dd 4824 class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear 4825 left, rear right, LFE 4826 </dd><dt class="description"> 4827 <span 4828 class="cmssbx-10x-x-120">seven channels</span> </dt><dd 4829 class="description">the stream is 6.1 surround. channel order: front left, center, front right, 4830 side left, side right, rear center, LFE 4831 </dd><dt class="description"> 4832 <span 4833 class="cmssbx-10x-x-120">eight channels</span> </dt><dd 4834 class="description">the stream is 7.1 surround. channel order: front left, center, front right, 4835 side left, side right, rear left, rear right, LFE 4836 </dd><dt class="description"> 4837 <span 4838 class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd 4839 class="description">channel use and order is defined by the application 4840 </dd></dl> 4841 <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future 4842 channel mappings (such as three and four channel <a 4843 href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel 4844 mappings other than mapping 0. 4845 4846 4847 4848 4849 4850 4851 <h3 class="sectionHead"><span class="titlemark">5 </span> <a 4852 id="x1-810005"></a>comment field and header specification</h3> 4853 <!--l. 6--><p class="noindent" > 4854 <h4 class="subsectionHead"><span class="titlemark">5.1 </span> <a 4855 id="x1-820005.1"></a>Overview</h4> 4856 <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis 4857 bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata 4858 belongs in a separate logical bitstream (usually an XML stream type) that provides greater 4859 structure and machine parseability. 4860 <!--l. 14--><p class="noindent" >The comment field is meant to be used much like someone jotting a quick note on the bottom of 4861 a CDR. It should be a little information to remember the disc by and explain it to others; a 4862 short, to-the-point text note that need not only be a couple words, but isn’t going to be more 4863 than a short paragraph. The essentials, in other words, whatever they turn out to be, 4864 eg: 4865 <!--l. 21--><p class="noindent" > 4866 <div class="quote"> 4867 <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span 4868 class="cmti-12">“I’m Still Around”</span>, opening 4869 for Moxy Frvous, 1997.</div> 4870 <!--l. 29--><p class="noindent" > 4871 <h4 class="subsectionHead"><span class="titlemark">5.2 </span> <a 4872 id="x1-830005.2"></a>Comment encoding</h4> 4873 <!--l. 31--><p class="noindent" > 4874 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1 </span> <a 4875 id="x1-840005.2.1"></a>Structure</h5> 4876 <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is 4877 bounded to 2<sup><span 4878 class="cmr-8">32</span></sup> <span 4879 class="cmsy-10x-x-120">− </span>1 and the length of each vector is limited to 2<sup><span 4880 class="cmr-8">32</span></sup> <span 4881 class="cmsy-10x-x-120">− </span>1 bytes. The vector length is 4882 4883 4884 4885 encoded; the vector contents themselves are not null terminated. In addition to the vector list, 4886 there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For 4887 example, the 1.0 release of libvorbis set the vendor string to “Xiph.Org libVorbis I 4888 20020717”. 4889 <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit 4890 packing conventions of the vorbis codec. However, since data in the comment header 4891 is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned 4892 integers. 4893 <!--l. 46--><p class="noindent" >The comment header is decoded as follows: 4894 <!--l. 48--><p class="noindent" > 4895 <div class="fancyvrb" id="fancyvrb23"> 4896 <a 4897 id="x1-84002r1"></a><span 4898 class="cmr-6">1</span><span 4899 class="cmtt-8"> </span><span 4900 class="cmtt-8"> </span><span 4901 class="cmtt-8"> </span><span 4902 class="cmtt-8"> 1)</span><span 4903 class="cmtt-8"> [vendor_length]</span><span 4904 class="cmtt-8"> =</span><span 4905 class="cmtt-8"> read</span><span 4906 class="cmtt-8"> an</span><span 4907 class="cmtt-8"> unsigned</span><span 4908 class="cmtt-8"> integer</span><span 4909 class="cmtt-8"> of</span><span 4910 class="cmtt-8"> 32</span><span 4911 class="cmtt-8"> bits</span> 4912 <br class="fancyvrb" /><a 4913 id="x1-84004r2"></a><span 4914 class="cmr-6">2</span><span 4915 class="cmtt-8"> </span><span 4916 class="cmtt-8"> </span><span 4917 class="cmtt-8"> </span><span 4918 class="cmtt-8"> 2)</span><span 4919 class="cmtt-8"> [vendor_string]</span><span 4920 class="cmtt-8"> =</span><span 4921 class="cmtt-8"> read</span><span 4922 class="cmtt-8"> a</span><span 4923 class="cmtt-8"> UTF-8</span><span 4924 class="cmtt-8"> vector</span><span 4925 class="cmtt-8"> as</span><span 4926 class="cmtt-8"> [vendor_length]</span><span 4927 class="cmtt-8"> octets</span> 4928 <br class="fancyvrb" /><a 4929 id="x1-84006r3"></a><span 4930 class="cmr-6">3</span><span 4931 class="cmtt-8"> </span><span 4932 class="cmtt-8"> </span><span 4933 class="cmtt-8"> </span><span 4934 class="cmtt-8"> 3)</span><span 4935 class="cmtt-8"> [user_comment_list_length]</span><span 4936 class="cmtt-8"> =</span><span 4937 class="cmtt-8"> read</span><span 4938 class="cmtt-8"> an</span><span 4939 class="cmtt-8"> unsigned</span><span 4940 class="cmtt-8"> integer</span><span 4941 class="cmtt-8"> of</span><span 4942 class="cmtt-8"> 32</span><span 4943 class="cmtt-8"> bits</span> 4944 <br class="fancyvrb" /><a 4945 id="x1-84008r4"></a><span 4946 class="cmr-6">4</span><span 4947 class="cmtt-8"> </span><span 4948 class="cmtt-8"> </span><span 4949 class="cmtt-8"> </span><span 4950 class="cmtt-8"> 4)</span><span 4951 class="cmtt-8"> iterate</span><span 4952 class="cmtt-8"> [user_comment_list_length]</span><span 4953 class="cmtt-8"> times</span><span 4954 class="cmtt-8"> {</span> 4955 <br class="fancyvrb" /><a 4956 id="x1-84010r5"></a><span 4957 class="cmr-6">5</span><span 4958 class="cmtt-8"> </span><span 4959 class="cmtt-8"> </span><span 4960 class="cmtt-8"> </span><span 4961 class="cmtt-8"> </span><span 4962 class="cmtt-8"> </span><span 4963 class="cmtt-8"> </span><span 4964 class="cmtt-8"> </span><span 4965 class="cmtt-8"> </span><span 4966 class="cmtt-8"> 5)</span><span 4967 class="cmtt-8"> [length]</span><span 4968 class="cmtt-8"> =</span><span 4969 class="cmtt-8"> read</span><span 4970 class="cmtt-8"> an</span><span 4971 class="cmtt-8"> unsigned</span><span 4972 class="cmtt-8"> integer</span><span 4973 class="cmtt-8"> of</span><span 4974 class="cmtt-8"> 32</span><span 4975 class="cmtt-8"> bits</span> 4976 <br class="fancyvrb" /><a 4977 id="x1-84012r6"></a><span 4978 class="cmr-6">6</span><span 4979 class="cmtt-8"> </span><span 4980 class="cmtt-8"> </span><span 4981 class="cmtt-8"> </span><span 4982 class="cmtt-8"> </span><span 4983 class="cmtt-8"> </span><span 4984 class="cmtt-8"> </span><span 4985 class="cmtt-8"> </span><span 4986 class="cmtt-8"> </span><span 4987 class="cmtt-8"> 6)</span><span 4988 class="cmtt-8"> this</span><span 4989 class="cmtt-8"> iteration’s</span><span 4990 class="cmtt-8"> user</span><span 4991 class="cmtt-8"> comment</span><span 4992 class="cmtt-8"> =</span><span 4993 class="cmtt-8"> read</span><span 4994 class="cmtt-8"> a</span><span 4995 class="cmtt-8"> UTF-8</span><span 4996 class="cmtt-8"> vector</span><span 4997 class="cmtt-8"> as</span><span 4998 class="cmtt-8"> [length]</span><span 4999 class="cmtt-8"> octets</span> 5000 <br class="fancyvrb" /><a 5001 id="x1-84014r7"></a><span 5002 class="cmr-6">7</span><span 5003 class="cmtt-8"> </span><span 5004 class="cmtt-8"> </span><span 5005 class="cmtt-8"> </span><span 5006 class="cmtt-8"> </span><span 5007 class="cmtt-8"> </span><span 5008 class="cmtt-8"> </span><span 5009 class="cmtt-8"> }</span> 5010 <br class="fancyvrb" /><a 5011 id="x1-84016r8"></a><span 5012 class="cmr-6">8</span><span 5013 class="cmtt-8"> </span><span 5014 class="cmtt-8"> </span><span 5015 class="cmtt-8"> </span><span 5016 class="cmtt-8"> 7)</span><span 5017 class="cmtt-8"> [framing_bit]</span><span 5018 class="cmtt-8"> =</span><span 5019 class="cmtt-8"> read</span><span 5020 class="cmtt-8"> a</span><span 5021 class="cmtt-8"> single</span><span 5022 class="cmtt-8"> bit</span><span 5023 class="cmtt-8"> as</span><span 5024 class="cmtt-8"> boolean</span> 5025 <br class="fancyvrb" /><a 5026 id="x1-84018r9"></a><span 5027 class="cmr-6">9</span><span 5028 class="cmtt-8"> </span><span 5029 class="cmtt-8"> </span><span 5030 class="cmtt-8"> </span><span 5031 class="cmtt-8"> 8)</span><span 5032 class="cmtt-8"> if</span><span 5033 class="cmtt-8"> (</span><span 5034 class="cmtt-8"> [framing_bit]</span><span 5035 class="cmtt-8"> unset</span><span 5036 class="cmtt-8"> or</span><span 5037 class="cmtt-8"> end-of-packet</span><span 5038 class="cmtt-8"> )</span><span 5039 class="cmtt-8"> then</span><span 5040 class="cmtt-8"> ERROR</span> 5041 <br class="fancyvrb" /><a 5042 id="x1-84020r10"></a><span 5043 class="cmr-6">10</span><span 5044 class="cmtt-8"> </span><span 5045 class="cmtt-8"> </span><span 5046 class="cmtt-8"> </span><span 5047 class="cmtt-8"> 9)</span><span 5048 class="cmtt-8"> done.</span> 5049 </div> 5050 <!--l. 64--><p class="noindent" > 5051 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2 </span> <a 5052 id="x1-850005.2.2"></a>Content vector format</h5> 5053 <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is, 5054 comment fields consist of a field name and a corresponding value and look like: 5055 <!--l. 70--><p class="noindent" > 5056 <div class="quote"> 5057 <!--l. 71--><p class="noindent" > 5058 <div class="fancyvrb" id="fancyvrb24"> 5059 <a 5060 id="x1-85002r1"></a><span 5061 class="cmr-6">1</span><span 5062 class="cmtt-8"> </span><span 5063 class="cmtt-8"> comment[0]="ARTIST=me";</span> 5064 <br class="fancyvrb" /><a 5065 id="x1-85004r2"></a><span 5066 class="cmr-6">2</span><span 5067 class="cmtt-8"> </span><span 5068 class="cmtt-8"> comment[1]="TITLE=the</span><span 5069 class="cmtt-8"> sound</span><span 5070 class="cmtt-8"> of</span><span 5071 class="cmtt-8"> Vorbis";</span> 5072 </div> 5073 </div> 5074 5075 5076 5077 <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (’=’) 5078 excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to 5079 ASCII 0x61 through 0x7A inclusive (characters a-z). 5080 <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (’=’); this equals sign is used to 5081 terminate the field name. 5082 <!--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 5083 field. 5084 <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a 5085 id="x1-860005.2.2"></a><span 5086 class="cmbx-12">Field names</span></span> 5087 Below is a proposed, minimal list of standard field names with a description of intended use. No 5088 single or group of field names is mandatory; a comment header may contain one, all or none of 5089 the names in this list. 5090 <!--l. 98--><p class="noindent" > 5091 <dl class="description"><dt class="description"> 5092 <span 5093 class="cmssbx-10x-x-120">TITLE</span> </dt><dd 5094 class="description">Track/Work name 5095 </dd><dt class="description"> 5096 <span 5097 class="cmssbx-10x-x-120">VERSION</span> </dt><dd 5098 class="description">The version field may be used to differentiate multiple versions of the same 5099 track title in a single collection. (e.g. remix info) 5100 </dd><dt class="description"> 5101 <span 5102 class="cmssbx-10x-x-120">ALBUM</span> </dt><dd 5103 class="description">The collection name to which this track belongs 5104 </dd><dt class="description"> 5105 <span 5106 class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd 5107 class="description">The track number of this piece if part of a specific larger collection or 5108 album 5109 </dd><dt class="description"> 5110 <span 5111 class="cmssbx-10x-x-120">ARTIST</span> </dt><dd 5112 class="description">The artist generally considered responsible for the work. In popular music this is 5113 usually the performing band or singer. For classical music it would be the composer. 5114 For an audio book it would be the author of the original text. 5115 </dd><dt class="description"> 5116 <span 5117 class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd 5118 class="description">The artist(s) who performed the work. In classical music this would be the 5119 conductor, orchestra, soloists. In an audio book it would be the actor who did the 5120 reading. In popular music this is typically the same as the ARTIST and is omitted. 5121 </dd><dt class="description"> 5122 <span 5123 class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd 5124 class="description">Copyright attribution, e.g., ’2001 Nobody’s Band’ or ’1999 Jack Moffitt’ 5125 </dd><dt class="description"> 5126 5127 5128 5129 <span 5130 class="cmssbx-10x-x-120">LICENSE</span> </dt><dd 5131 class="description">License information, eg, ’All Rights Reserved’, ’Any Use Permitted’, a URL to 5132 a license such as a Creative 5133 Commons license (”www.creativecommons.org/blahblah/license.html”) or the EFF 5134 Open Audio License (’distributed under the terms of the Open Audio License. see 5135 http://www.eff.org/IP/Open˙licenses/eff˙oal.html for details’), etc. 5136 </dd><dt class="description"> 5137 <span 5138 class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd 5139 class="description">Name of the organization producing the track (i.e. the ’record label’) 5140 </dd><dt class="description"> 5141 <span 5142 class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd 5143 class="description">A short text description of the contents 5144 </dd><dt class="description"> 5145 <span 5146 class="cmssbx-10x-x-120">GENRE</span> </dt><dd 5147 class="description">A short text indication of music genre 5148 </dd><dt class="description"> 5149 <span 5150 class="cmssbx-10x-x-120">DATE</span> </dt><dd 5151 class="description">Date the track was recorded 5152 </dd><dt class="description"> 5153 <span 5154 class="cmssbx-10x-x-120">LOCATION</span> </dt><dd 5155 class="description">Location where track was recorded 5156 </dd><dt class="description"> 5157 <span 5158 class="cmssbx-10x-x-120">CONTACT</span> </dt><dd 5159 class="description">Contact information for the creators or distributors of the track. This could 5160 be a URL, an email address, the physical address of the producing label. 5161 </dd><dt class="description"> 5162 <span 5163 class="cmssbx-10x-x-120">ISRC</span> </dt><dd 5164 class="description">International Standard Recording Code for the track; see <a 5165 href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for 5166 more information on ISRC numbers. 5167 </dd></dl> 5168 <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a 5169 id="x1-870005.2.2"></a><span 5170 class="cmbx-12">Implications</span></span> 5171 Field names should not be ’internationalized’; this is a concession to simplicity not 5172 an attempt to exclude the majority of the world that doesn’t speak English. Field 5173 <span 5174 class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any 5175 language. 5176 <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that 5177 the field name is bounded in a known way. Thus we also have the length of the field 5178 contents. 5179 <!--l. 170--><p class="noindent" >Individual ’vendors’ may use non-standard field names within reason. The proper 5180 use of comment fields should be clear through context at this point. Abuse will be 5181 discouraged. 5182 5183 5184 5185 <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to ’nonstandard’ field names. Vendors should make some effort 5186 to avoid arbitrarily polluting the common namespace. We will generally collect the more useful 5187 tags here to help with standardization. 5188 <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an 5189 example, assume a track was recorded by three well know artists; the following is permissible, 5190 and encouraged: 5191 <!--l. 183--><p class="noindent" > 5192 <div class="quote"> 5193 <!--l. 184--><p class="noindent" > 5194 <div class="fancyvrb" id="fancyvrb25"> 5195 <a 5196 id="x1-87002r1"></a><span 5197 class="cmr-6">1</span><span 5198 class="cmtt-8"> </span><span 5199 class="cmtt-8"> ARTIST=Dizzy</span><span 5200 class="cmtt-8"> Gillespie</span> 5201 <br class="fancyvrb" /><a 5202 id="x1-87004r2"></a><span 5203 class="cmr-6">2</span><span 5204 class="cmtt-8"> </span><span 5205 class="cmtt-8"> ARTIST=Sonny</span><span 5206 class="cmtt-8"> Rollins</span> 5207 <br class="fancyvrb" /><a 5208 id="x1-87006r3"></a><span 5209 class="cmr-6">3</span><span 5210 class="cmtt-8"> </span><span 5211 class="cmtt-8"> ARTIST=Sonny</span><span 5212 class="cmtt-8"> Stitt</span> 5213 </div> 5214 </div> 5215 <!--l. 197--><p class="noindent" > 5216 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3 </span> <a 5217 id="x1-880005.2.3"></a>Encoding</h5> 5218 <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the 5219 first bitstream header packet, it is not generally the only packet on the second page and may not 5220 be restricted to within the second bitstream page. The length of the comment header packet is 5221 (practically) unbounded. The comment header packet is not optional; it must be present in the 5222 bitstream even if it is effectively empty. 5223 <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg’s standard bitstream mapping which 5224 renders least-significant-bit of the word to be coded into the least significant available bit of the 5225 current bitstream octet first): 5226 <!--l. 212--><p class="noindent" > 5227 <ol class="enumerate1" > 5228 <li 5229 class="enumerate" id="x1-88002x1">Vendor string length (32 bit unsigned quantity specifying number of octets) 5230 </li> 5231 <li 5232 class="enumerate" id="x1-88004x2">Vendor string ([vendor string length] octets coded from beginning of string to end of 5233 string, not null terminated) 5234 5235 5236 5237 </li> 5238 <li 5239 class="enumerate" id="x1-88006x3">Number of comment fields (32 bit unsigned quantity specifying number of fields) 5240 </li> 5241 <li 5242 class="enumerate" id="x1-88008x4">Comment field 0 length (if [Number of comment fields] <span 5243 class="cmmi-12">> </span>0; 32 bit unsigned quantity 5244 specifying number of octets) 5245 </li> 5246 <li 5247 class="enumerate" id="x1-88010x5">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to 5248 end of string, not null terminated) 5249 </li> 5250 <li 5251 class="enumerate" id="x1-88012x6">Comment field 1 length (if [Number of comment fields] <span 5252 class="cmmi-12">> </span>1...)... 5253 </li></ol> 5254 <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found 5255 in <span 5256 class="cmtt-12">vorbis/lib/info.c</span>, <span 5257 class="cmtt-12">_vorbis_pack_comment() </span>and <span 5258 class="cmtt-12">_vorbis_unpack_comment()</span>. 5259 5260 5261 5262 5263 5264 5265 <h3 class="sectionHead"><span class="titlemark">6 </span> <a 5266 id="x1-890006"></a>Floor type 0 setup and decode</h3> 5267 <!--l. 6--><p class="noindent" > 5268 <h4 class="subsectionHead"><span class="titlemark">6.1 </span> <a 5269 id="x1-900006.1"></a>Overview</h4> 5270 <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral 5271 Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency 5272 response of the LSP filter. This representation is equivalent to a traditional all-pole infinite 5273 impulse response filter as would be used in linear predictive coding; LSP representation may be 5274 converted to LPC representation and vice-versa. 5275 <!--l. 18--><p class="noindent" > 5276 <h4 class="subsectionHead"><span class="titlemark">6.2 </span> <a 5277 id="x1-910006.2"></a>Floor 0 format</h4> 5278 <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in 5279 coding/decoding the LSP filter coefficient values used by each frame. 5280 <!--l. 24--><p class="noindent" > 5281 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1 </span> <a 5282 id="x1-920006.2.1"></a>header decode</h5> 5283 <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third 5284 packet). configuration decode proceeds as follows: 5285 <!--l. 30--><p class="noindent" > 5286 <div class="fancyvrb" id="fancyvrb26"> 5287 <a 5288 id="x1-92002r1"></a><span 5289 class="cmr-6">1</span><span 5290 class="cmtt-8"> </span><span 5291 class="cmtt-8"> </span><span 5292 class="cmtt-8"> </span><span 5293 class="cmtt-8"> 1)</span><span 5294 class="cmtt-8"> [floor0_order]</span><span 5295 class="cmtt-8"> =</span><span 5296 class="cmtt-8"> read</span><span 5297 class="cmtt-8"> an</span><span 5298 class="cmtt-8"> unsigned</span><span 5299 class="cmtt-8"> integer</span><span 5300 class="cmtt-8"> of</span><span 5301 class="cmtt-8"> 8</span><span 5302 class="cmtt-8"> bits</span> 5303 <br class="fancyvrb" /><a 5304 id="x1-92004r2"></a><span 5305 class="cmr-6">2</span><span 5306 class="cmtt-8"> </span><span 5307 class="cmtt-8"> </span><span 5308 class="cmtt-8"> </span><span 5309 class="cmtt-8"> 2)</span><span 5310 class="cmtt-8"> [floor0_rate]</span><span 5311 class="cmtt-8"> =</span><span 5312 class="cmtt-8"> read</span><span 5313 class="cmtt-8"> an</span><span 5314 class="cmtt-8"> unsigned</span><span 5315 class="cmtt-8"> integer</span><span 5316 class="cmtt-8"> of</span><span 5317 class="cmtt-8"> 16</span><span 5318 class="cmtt-8"> bits</span> 5319 <br class="fancyvrb" /><a 5320 id="x1-92006r3"></a><span 5321 class="cmr-6">3</span><span 5322 class="cmtt-8"> </span><span 5323 class="cmtt-8"> </span><span 5324 class="cmtt-8"> </span><span 5325 class="cmtt-8"> 3)</span><span 5326 class="cmtt-8"> [floor0_bark_map_size]</span><span 5327 class="cmtt-8"> =</span><span 5328 class="cmtt-8"> read</span><span 5329 class="cmtt-8"> an</span><span 5330 class="cmtt-8"> unsigned</span><span 5331 class="cmtt-8"> integer</span><span 5332 class="cmtt-8"> of</span><span 5333 class="cmtt-8"> 16</span><span 5334 class="cmtt-8"> bits</span> 5335 <br class="fancyvrb" /><a 5336 id="x1-92008r4"></a><span 5337 class="cmr-6">4</span><span 5338 class="cmtt-8"> </span><span 5339 class="cmtt-8"> </span><span 5340 class="cmtt-8"> </span><span 5341 class="cmtt-8"> 4)</span><span 5342 class="cmtt-8"> [floor0_amplitude_bits]</span><span 5343 class="cmtt-8"> =</span><span 5344 class="cmtt-8"> read</span><span 5345 class="cmtt-8"> an</span><span 5346 class="cmtt-8"> unsigned</span><span 5347 class="cmtt-8"> integer</span><span 5348 class="cmtt-8"> of</span><span 5349 class="cmtt-8"> six</span><span 5350 class="cmtt-8"> bits</span> 5351 <br class="fancyvrb" /><a 5352 id="x1-92010r5"></a><span 5353 class="cmr-6">5</span><span 5354 class="cmtt-8"> </span><span 5355 class="cmtt-8"> </span><span 5356 class="cmtt-8"> </span><span 5357 class="cmtt-8"> 5)</span><span 5358 class="cmtt-8"> [floor0_amplitude_offset]</span><span 5359 class="cmtt-8"> =</span><span 5360 class="cmtt-8"> read</span><span 5361 class="cmtt-8"> an</span><span 5362 class="cmtt-8"> unsigned</span><span 5363 class="cmtt-8"> integer</span><span 5364 class="cmtt-8"> of</span><span 5365 class="cmtt-8"> eight</span><span 5366 class="cmtt-8"> bits</span> 5367 <br class="fancyvrb" /><a 5368 id="x1-92012r6"></a><span 5369 class="cmr-6">6</span><span 5370 class="cmtt-8"> </span><span 5371 class="cmtt-8"> </span><span 5372 class="cmtt-8"> </span><span 5373 class="cmtt-8"> 6)</span><span 5374 class="cmtt-8"> [floor0_number_of_books]</span><span 5375 class="cmtt-8"> =</span><span 5376 class="cmtt-8"> read</span><span 5377 class="cmtt-8"> an</span><span 5378 class="cmtt-8"> unsigned</span><span 5379 class="cmtt-8"> integer</span><span 5380 class="cmtt-8"> of</span><span 5381 class="cmtt-8"> four</span><span 5382 class="cmtt-8"> bits</span><span 5383 class="cmtt-8"> and</span><span 5384 class="cmtt-8"> add</span><span 5385 class="cmtt-8"> 1</span> 5386 <br class="fancyvrb" /><a 5387 id="x1-92014r7"></a><span 5388 class="cmr-6">7</span><span 5389 class="cmtt-8"> </span><span 5390 class="cmtt-8"> </span><span 5391 class="cmtt-8"> </span><span 5392 class="cmtt-8"> 7)</span><span 5393 class="cmtt-8"> array</span><span 5394 class="cmtt-8"> [floor0_book_list]</span><span 5395 class="cmtt-8"> =</span><span 5396 class="cmtt-8"> read</span><span 5397 class="cmtt-8"> a</span><span 5398 class="cmtt-8"> list</span><span 5399 class="cmtt-8"> of</span><span 5400 class="cmtt-8"> [floor0_number_of_books]</span><span 5401 class="cmtt-8"> unsigned</span><span 5402 class="cmtt-8"> integers</span><span 5403 class="cmtt-8"> of</span><span 5404 class="cmtt-8"> eight</span><span 5405 class="cmtt-8"> bits</span><span 5406 class="cmtt-8"> each;</span> 5407 </div> 5408 5409 5410 5411 <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable. 5412 In addition, any element of the array <span 5413 class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum 5414 codebook number for this bitstream is an error condition that also renders the stream 5415 undecodable. 5416 <!--l. 48--><p class="noindent" > 5417 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2 </span> <a 5418 id="x1-930006.2.2"></a>packet decode</h5> 5419 <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve 5420 amplitude and <span 5421 class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then 5422 computing the floor curve, which is defined as the frequency response of the decoded LSP 5423 filter. 5424 <!--l. 56--><p class="noindent" >Packet decode proceeds as follows: 5425 <div class="fancyvrb" id="fancyvrb27"> 5426 <a 5427 id="x1-93002r1"></a><span 5428 class="cmr-6">1</span><span 5429 class="cmtt-8"> </span><span 5430 class="cmtt-8"> </span><span 5431 class="cmtt-8"> </span><span 5432 class="cmtt-8"> 1)</span><span 5433 class="cmtt-8"> [amplitude]</span><span 5434 class="cmtt-8"> =</span><span 5435 class="cmtt-8"> read</span><span 5436 class="cmtt-8"> an</span><span 5437 class="cmtt-8"> unsigned</span><span 5438 class="cmtt-8"> integer</span><span 5439 class="cmtt-8"> of</span><span 5440 class="cmtt-8"> [floor0_amplitude_bits]</span><span 5441 class="cmtt-8"> bits</span> 5442 <br class="fancyvrb" /><a 5443 id="x1-93004r2"></a><span 5444 class="cmr-6">2</span><span 5445 class="cmtt-8"> </span><span 5446 class="cmtt-8"> </span><span 5447 class="cmtt-8"> </span><span 5448 class="cmtt-8"> 2)</span><span 5449 class="cmtt-8"> if</span><span 5450 class="cmtt-8"> (</span><span 5451 class="cmtt-8"> [amplitude]</span><span 5452 class="cmtt-8"> is</span><span 5453 class="cmtt-8"> greater</span><span 5454 class="cmtt-8"> than</span><span 5455 class="cmtt-8"> zero</span><span 5456 class="cmtt-8"> )</span><span 5457 class="cmtt-8"> </span><span 5458 class="cmsy-8">{</span> 5459 <br class="fancyvrb" /><a 5460 id="x1-93006r3"></a><span 5461 class="cmr-6">3</span><span 5462 class="cmtt-8"> </span><span 5463 class="cmtt-8"> </span><span 5464 class="cmtt-8"> </span><span 5465 class="cmtt-8"> </span><span 5466 class="cmtt-8"> </span><span 5467 class="cmtt-8"> </span><span 5468 class="cmtt-8"> </span><span 5469 class="cmtt-8"> </span><span 5470 class="cmtt-8"> 3)</span><span 5471 class="cmtt-8"> [coefficients]</span><span 5472 class="cmtt-8"> is</span><span 5473 class="cmtt-8"> an</span><span 5474 class="cmtt-8"> empty,</span><span 5475 class="cmtt-8"> zero</span><span 5476 class="cmtt-8"> length</span><span 5477 class="cmtt-8"> vector</span> 5478 <br class="fancyvrb" /><a 5479 id="x1-93008r4"></a><span 5480 class="cmr-6">4</span><span 5481 class="cmtt-8"> </span><span 5482 class="cmtt-8"> </span><span 5483 class="cmtt-8"> </span><span 5484 class="cmtt-8"> </span><span 5485 class="cmtt-8"> </span><span 5486 class="cmtt-8"> </span><span 5487 class="cmtt-8"> </span><span 5488 class="cmtt-8"> </span><span 5489 class="cmtt-8"> 4)</span><span 5490 class="cmtt-8"> [booknumber]</span><span 5491 class="cmtt-8"> =</span><span 5492 class="cmtt-8"> read</span><span 5493 class="cmtt-8"> an</span><span 5494 class="cmtt-8"> unsigned</span><span 5495 class="cmtt-8"> integer</span><span 5496 class="cmtt-8"> of</span><span 5497 class="cmtt-8"> </span><a 5498 href="#x1-1170009.2.1"><span 5499 class="cmtt-8">ilog</span></a><span 5500 class="cmtt-8">(</span><span 5501 class="cmtt-8"> [floor0_number_of_books]</span><span 5502 class="cmtt-8"> )</span><span 5503 class="cmtt-8"> bits</span> 5504 <br class="fancyvrb" /><a 5505 id="x1-93010r5"></a><span 5506 class="cmr-6">5</span><span 5507 class="cmtt-8"> </span><span 5508 class="cmtt-8"> </span><span 5509 class="cmtt-8"> </span><span 5510 class="cmtt-8"> </span><span 5511 class="cmtt-8"> </span><span 5512 class="cmtt-8"> </span><span 5513 class="cmtt-8"> </span><span 5514 class="cmtt-8"> </span><span 5515 class="cmtt-8"> 5)</span><span 5516 class="cmtt-8"> if</span><span 5517 class="cmtt-8"> (</span><span 5518 class="cmtt-8"> [booknumber]</span><span 5519 class="cmtt-8"> is</span><span 5520 class="cmtt-8"> greater</span><span 5521 class="cmtt-8"> than</span><span 5522 class="cmtt-8"> the</span><span 5523 class="cmtt-8"> highest</span><span 5524 class="cmtt-8"> number</span><span 5525 class="cmtt-8"> decode</span><span 5526 class="cmtt-8"> codebook</span><span 5527 class="cmtt-8"> )</span><span 5528 class="cmtt-8"> then</span><span 5529 class="cmtt-8"> packet</span><span 5530 class="cmtt-8"> is</span><span 5531 class="cmtt-8"> undecodable</span> 5532 <br class="fancyvrb" /><a 5533 id="x1-93012r6"></a><span 5534 class="cmr-6">6</span><span 5535 class="cmtt-8"> </span><span 5536 class="cmtt-8"> </span><span 5537 class="cmtt-8"> </span><span 5538 class="cmtt-8"> </span><span 5539 class="cmtt-8"> </span><span 5540 class="cmtt-8"> </span><span 5541 class="cmtt-8"> </span><span 5542 class="cmtt-8"> </span><span 5543 class="cmtt-8"> 6)</span><span 5544 class="cmtt-8"> [last]</span><span 5545 class="cmtt-8"> =</span><span 5546 class="cmtt-8"> zero;</span> 5547 <br class="fancyvrb" /><a 5548 id="x1-93014r7"></a><span 5549 class="cmr-6">7</span><span 5550 class="cmtt-8"> </span><span 5551 class="cmtt-8"> </span><span 5552 class="cmtt-8"> </span><span 5553 class="cmtt-8"> </span><span 5554 class="cmtt-8"> </span><span 5555 class="cmtt-8"> </span><span 5556 class="cmtt-8"> </span><span 5557 class="cmtt-8"> </span><span 5558 class="cmtt-8"> 7)</span><span 5559 class="cmtt-8"> vector</span><span 5560 class="cmtt-8"> [temp_vector]</span><span 5561 class="cmtt-8"> =</span><span 5562 class="cmtt-8"> read</span><span 5563 class="cmtt-8"> vector</span><span 5564 class="cmtt-8"> from</span><span 5565 class="cmtt-8"> bitstream</span><span 5566 class="cmtt-8"> using</span><span 5567 class="cmtt-8"> codebook</span><span 5568 class="cmtt-8"> number</span><span 5569 class="cmtt-8"> [floor0_book_list]</span><span 5570 class="cmtt-8"> element</span><span 5571 class="cmtt-8"> [booknumber]</span><span 5572 class="cmtt-8"> in</span><span 5573 class="cmtt-8"> VQ</span><span 5574 class="cmtt-8"> context.</span> 5575 <br class="fancyvrb" /><a 5576 id="x1-93016r8"></a><span 5577 class="cmr-6">8</span><span 5578 class="cmtt-8"> </span><span 5579 class="cmtt-8"> </span><span 5580 class="cmtt-8"> </span><span 5581 class="cmtt-8"> </span><span 5582 class="cmtt-8"> </span><span 5583 class="cmtt-8"> </span><span 5584 class="cmtt-8"> </span><span 5585 class="cmtt-8"> </span><span 5586 class="cmtt-8"> 8)</span><span 5587 class="cmtt-8"> add</span><span 5588 class="cmtt-8"> the</span><span 5589 class="cmtt-8"> scalar</span><span 5590 class="cmtt-8"> value</span><span 5591 class="cmtt-8"> [last]</span><span 5592 class="cmtt-8"> to</span><span 5593 class="cmtt-8"> each</span><span 5594 class="cmtt-8"> scalar</span><span 5595 class="cmtt-8"> in</span><span 5596 class="cmtt-8"> vector</span><span 5597 class="cmtt-8"> [temp_vector]</span> 5598 <br class="fancyvrb" /><a 5599 id="x1-93018r9"></a><span 5600 class="cmr-6">9</span><span 5601 class="cmtt-8"> </span><span 5602 class="cmtt-8"> </span><span 5603 class="cmtt-8"> </span><span 5604 class="cmtt-8"> </span><span 5605 class="cmtt-8"> </span><span 5606 class="cmtt-8"> </span><span 5607 class="cmtt-8"> </span><span 5608 class="cmtt-8"> </span><span 5609 class="cmtt-8"> 9)</span><span 5610 class="cmtt-8"> [last]</span><span 5611 class="cmtt-8"> =</span><span 5612 class="cmtt-8"> the</span><span 5613 class="cmtt-8"> value</span><span 5614 class="cmtt-8"> of</span><span 5615 class="cmtt-8"> the</span><span 5616 class="cmtt-8"> last</span><span 5617 class="cmtt-8"> scalar</span><span 5618 class="cmtt-8"> in</span><span 5619 class="cmtt-8"> vector</span><span 5620 class="cmtt-8"> [temp_vector]</span> 5621 <br class="fancyvrb" /><a 5622 id="x1-93020r10"></a><span 5623 class="cmr-6">10</span><span 5624 class="cmtt-8"> </span><span 5625 class="cmtt-8"> </span><span 5626 class="cmtt-8"> </span><span 5627 class="cmtt-8"> </span><span 5628 class="cmtt-8"> </span><span 5629 class="cmtt-8"> </span><span 5630 class="cmtt-8"> </span><span 5631 class="cmtt-8"> 10)</span><span 5632 class="cmtt-8"> concatenate</span><span 5633 class="cmtt-8"> [temp_vector]</span><span 5634 class="cmtt-8"> onto</span><span 5635 class="cmtt-8"> the</span><span 5636 class="cmtt-8"> end</span><span 5637 class="cmtt-8"> of</span><span 5638 class="cmtt-8"> the</span><span 5639 class="cmtt-8"> [coefficients]</span><span 5640 class="cmtt-8"> vector</span> 5641 <br class="fancyvrb" /><a 5642 id="x1-93022r11"></a><span 5643 class="cmr-6">11</span><span 5644 class="cmtt-8"> </span><span 5645 class="cmtt-8"> </span><span 5646 class="cmtt-8"> </span><span 5647 class="cmtt-8"> </span><span 5648 class="cmtt-8"> </span><span 5649 class="cmtt-8"> </span><span 5650 class="cmtt-8"> </span><span 5651 class="cmtt-8"> 11)</span><span 5652 class="cmtt-8"> if</span><span 5653 class="cmtt-8"> (length</span><span 5654 class="cmtt-8"> of</span><span 5655 class="cmtt-8"> vector</span><span 5656 class="cmtt-8"> [coefficients]</span><span 5657 class="cmtt-8"> is</span><span 5658 class="cmtt-8"> less</span><span 5659 class="cmtt-8"> than</span><span 5660 class="cmtt-8"> [floor0_order],</span><span 5661 class="cmtt-8"> continue</span><span 5662 class="cmtt-8"> at</span><span 5663 class="cmtt-8"> step</span><span 5664 class="cmtt-8"> 6</span> 5665 <br class="fancyvrb" /><a 5666 id="x1-93024r12"></a><span 5667 class="cmr-6">12</span><span 5668 class="cmtt-8"> </span><span 5669 class="cmtt-8"> </span> 5670 <br class="fancyvrb" /><a 5671 id="x1-93026r13"></a><span 5672 class="cmr-6">13</span><span 5673 class="cmtt-8"> </span><span 5674 class="cmtt-8"> </span><span 5675 class="cmtt-8"> </span><span 5676 class="cmtt-8"> </span><span 5677 class="cmtt-8"> </span><span 5678 class="cmtt-8"> </span><span 5679 class="cmtt-8"> </span><span 5680 class="cmsy-8">}</span> 5681 <br class="fancyvrb" /><a 5682 id="x1-93028r14"></a><span 5683 class="cmr-6">14</span><span 5684 class="cmtt-8"> </span><span 5685 class="cmtt-8"> </span> 5686 <br class="fancyvrb" /><a 5687 id="x1-93030r15"></a><span 5688 class="cmr-6">15</span><span 5689 class="cmtt-8"> </span><span 5690 class="cmtt-8"> </span><span 5691 class="cmtt-8"> 12)</span><span 5692 class="cmtt-8"> done.</span> 5693 <br class="fancyvrb" /><a 5694 id="x1-93032r16"></a><span 5695 class="cmr-6">16</span><span 5696 class="cmtt-8"> </span><span 5697 class="cmtt-8"> </span> 5698 </div> 5699 <!--l. 76--><p class="noindent" >Take note of the following properties of decode: 5700 <ul class="itemize1"> 5701 <li class="itemize">An <span 5702 class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel 5703 is unused in this frame (the output of the channel will be all-zeroes in synthesis). 5704 Several later stages of decode don’t occur for an unused channel. 5705 </li> 5706 <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence; 5707 if end-of-packet is reached during any read operation above, floor decode is to return 5708 ’unused’ status as if the <span 5709 class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode. 5710 </li> 5711 <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a 5712 href="#x1-1170009.2.1">ilog</a>( 5713 5714 5715 5716 <span 5717 class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct 5718 and values greater than the maximum possible book value are reserved. 5719 </li> 5720 <li class="itemize">The number of scalars read into the vector <span 5721 class="cmtt-12">[coefficients] </span>may be greater 5722 than <span 5723 class="cmtt-12">[floor0_order]</span>, the number actually required for curve computation. For 5724 example, if the VQ codebook used for the floor currently being decoded has a 5725 <span 5726 class="cmtt-12">[codebook_dimensions] </span>value of three and <span 5727 class="cmtt-12">[floor0_order] </span>is ten, the only way to 5728 fill all the needed scalars in <span 5729 class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars 5730 as four vectors of three scalars each. This is not an error condition, and care must 5731 be taken not to allow a buffer overflow in decode. The extra values are not used and 5732 may be ignored or discarded.</li></ul> 5733 <!--l. 104--><p class="noindent" > 5734 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3 </span> <a 5735 id="x1-940006.2.3"></a>curve computation</h5> 5736 <!--l. 106--><p class="noindent" >Given an <span 5737 class="cmtt-12">[amplitude] </span>integer and <span 5738 class="cmtt-12">[coefficients] </span>vector from packet decode as well 5739 as the [floor0˙order], [floor0˙rate], [floor0˙bark˙map˙size], [floor0˙amplitude˙bits] and 5740 [floor0˙amplitude˙offset] values from floor setup, and an output vector size <span 5741 class="cmtt-12">[n] </span>specified by the 5742 decode process, we compute a floor output vector. 5743 <!--l. 113--><p class="noindent" >If the value <span 5744 class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span 5745 class="cmtt-12">[n] </span>vector with all-zero 5746 scalars. Otherwise, begin by assuming the following definitions for the given vector to be 5747 synthesized: 5748 <center class="par-math-display" > 5749 <img 5750 src="Vorbis_I_spec7x.png" alt=" { 5751 min (floor0xbarkxmapxsize − 1,foobar ) for i ∈ [0,n − 1 ] 5752 mapi = − 1 for i = n 5753 " class="par-math-display" ></center> 5754 <!--l. 128--><p class="nopar" > 5755 <!--l. 130--><p class="noindent" >where 5756 <center class="par-math-display" > 5757 <img 5758 src="Vorbis_I_spec8x.png" alt=" ⌊ ⌋ 5759 (floor0xrate ⋅ i) floor0xbarkxmapxsize 5760 foobar = bark -------2n------- ⋅-bark(.5 ⋅ floor0xrate-) 5761 " class="par-math-display" ></center> 5762 5763 5764 5765 <!--l. 137--><p class="nopar" > 5766 <!--l. 139--><p class="noindent" >and 5767 <center class="par-math-display" > 5768 <img 5769 src="Vorbis_I_spec9x.png" alt=" 2 5770 bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x + .0001x ) 5771 " class="par-math-display" ></center> 5772 <!--l. 143--><p class="nopar" > 5773 <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the 5774 result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output 5775 LSP curve <span 5776 class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last 5777 step: 5778 <!--l. 150--><p class="noindent" > 5779 <ol class="enumerate1" > 5780 <li 5781 class="enumerate" id="x1-94002x1"><span 5782 class="cmtt-12">[i] </span>= 0 5783 </li> 5784 <li 5785 class="enumerate" id="x1-94004x2"><span 5786 class="cmtt-12">[</span><span 5787 class="cmmi-12">ω</span><span 5788 class="cmtt-12">] </span>= <span 5789 class="cmmi-12">π </span>* map element <span 5790 class="cmtt-12">[i] </span>/ <span 5791 class="cmtt-12">[floor0_bark_map_size]</span> 5792 </li> 5793 <li 5794 class="enumerate" id="x1-94006x3">if ( <span 5795 class="cmtt-12">[floor0_order] </span>is odd ) 5796 <ol class="enumerate2" > 5797 <li 5798 class="enumerate" id="x1-94008x1">calculate <span 5799 class="cmtt-12">[p] </span>and <span 5800 class="cmtt-12">[q] </span>according to: <div class="eqnarray"> 5801 <center class="math-display" > 5802 <img 5803 src="Vorbis_I_spec10x.png" alt=" floor0xorder−3 5804 2 ∏2 2 5805 p = (1 − cos ω) 4(cos([coefficients ]2j+1) − cosω ) 5806 j=0 5807 floor0x∏or2der−1 5808 q = 1- 4(cos([coefficients ]2j) − cosω )2 5809 4 j=0 5810 5811 5812 5813 " class="math-display" ></center> 5814 </div> 5815 </li></ol> 5816 <!--l. 162--><p class="noindent" >else <span 5817 class="cmtt-12">[floor0_order] </span>is even 5818 <ol class="enumerate2" > 5819 <li 5820 class="enumerate" id="x1-94011x1">calculate <span 5821 class="cmtt-12">[p] </span>and <span 5822 class="cmtt-12">[q] </span>according to: <div class="eqnarray"> 5823 <center class="math-display" > 5824 <img 5825 src="Vorbis_I_spec11x.png" alt=" floor0xorder−2 5826 (1 − cos2ω) ∏2 2 5827 p = -----2------ 4(cos([coefficients ]2j+1) − cosω ) 5828 j=0 5829 2 floor0xor2der−2 5830 q = (1 +-cos-ω)- ∏ 4(cos([coefficients ] ) − cosω )2 5831 2 j=0 2j 5832 " class="math-display" ></center> 5833 </div> 5834 </li></ol> 5835 </li> 5836 <li 5837 class="enumerate" id="x1-94014x4">calculate <span 5838 class="cmtt-12">[linear_floor_value] </span>according to: 5839 <center class="math-display" > 5840 <img 5841 src="Vorbis_I_spec12x.png" alt=" ( ( )) 5842 amplitude---⋅ floor0xamplitutexoffset--- 5843 exp .11512925 (2floor0xamplitudexbits − 1)√ p + q − floor0xamplitudexoffset 5844 " class="math-display" ></center> 5845 <!--l. 177--><p class="nopar" > 5846 </li> 5847 <li 5848 class="enumerate" id="x1-94016x5"><span 5849 class="cmtt-12">[iteration_condition] </span>= map element <span 5850 class="cmtt-12">[i]</span> 5851 5852 5853 5854 </li> 5855 <li 5856 class="enumerate" id="x1-94018x6"><span 5857 class="cmtt-12">[output] </span>element <span 5858 class="cmtt-12">[i] </span>= <span 5859 class="cmtt-12">[linear_floor_value]</span> 5860 </li> 5861 <li 5862 class="enumerate" id="x1-94020x7">increment <span 5863 class="cmtt-12">[i]</span> 5864 </li> 5865 <li 5866 class="enumerate" id="x1-94022x8">if ( map element <span 5867 class="cmtt-12">[i] </span>is equal to <span 5868 class="cmtt-12">[iteration_condition] </span>) continue at step 5869 5 5870 </li> 5871 <li 5872 class="enumerate" id="x1-94024x9">if ( <span 5873 class="cmtt-12">[i] </span>is less than <span 5874 class="cmtt-12">[n] </span>) continue at step 2 5875 </li> 5876 <li 5877 class="enumerate" id="x1-94026x10">done</li></ol> 5878 5879 5880 5881 5882 5883 5884 <h3 class="sectionHead"><span class="titlemark">7 </span> <a 5885 id="x1-950007"></a>Floor type 1 setup and decode</h3> 5886 <!--l. 6--><p class="noindent" > 5887 <h4 class="subsectionHead"><span class="titlemark">7.1 </span> <a 5888 id="x1-960007.1"></a>Overview</h4> 5889 <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope 5890 curve. The representation plots this curve mechanically on a linear frequency axis and a 5891 logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham’s 5892 algorithm. 5893 <!--l. 16--><p class="noindent" > 5894 <h4 class="subsectionHead"><span class="titlemark">7.2 </span> <a 5895 id="x1-970007.2"></a>Floor 1 format</h4> 5896 <!--l. 18--><p class="noindent" > 5897 <h5 class="subsubsectionHead"><span class="titlemark">7.2.1 </span> <a 5898 id="x1-980007.2.1"></a>model</h5> 5899 <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a 5900 floor curve using iterative prediction in a process roughly equivalent to the following simplified 5901 description: 5902 <ul class="itemize1"> 5903 <li class="itemize">the first line segment (base case) is a logical line spanning from x˙0,y˙0 to x˙1,y˙1 5904 where in the base case x˙0=0 and x˙1=[n], the full range of the spectral floor to be 5905 computed. 5906 </li> 5907 <li class="itemize">the induction step chooses a point x˙new within an existing logical line segment and 5908 produces a y˙new value at that point computed from the existing line’s y value at 5909 x˙new (as plotted by the line) and a difference value decoded from the bitstream 5910 packet. 5911 5912 5913 5914 </li> 5915 <li class="itemize">floor computation produces two new line segments, one running from x˙0,y˙0 to 5916 x˙new,y˙new and from x˙new,y˙new to x˙1,y˙1. This step is performed logically even if 5917 y˙new represents no change to the amplitude value at x˙new so that later refinement 5918 is additionally bounded at x˙new. 5919 </li> 5920 <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header 5921 at floor 1 initialization time. Computation is completed at the end of the x value list. 5922 </li></ul> 5923 <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than 5924 representing typical configuration: 5925 <!--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 5926 in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0, 5927 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an 5928 example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following 5929 way, beginning with the first line: 5930 <div class="center" 5931 > 5932 <!--l. 59--><p class="noindent" > 5933 5934 <!--l. 60--><p class="noindent" ><img 5935 src="floor1-1.png" alt="PIC" 5936 > 5937 <br /> <div class="caption" 5938 ><span class="id">Figure 7: </span><span 5939 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 --> 5940 </div> 5941 <!--l. 64--><p class="noindent" >We now draw new logical lines to reflect the correction to new˙Y, and iterate for X positions 32 5942 and 96: 5943 <div class="center" 5944 > 5945 <!--l. 67--><p class="noindent" > 5946 5947 <!--l. 68--><p class="noindent" ><img 5948 src="floor1-2.png" alt="PIC" 5949 > 5950 <br /> <div class="caption" 5951 ><span class="id">Figure 8: </span><span 5952 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 --> 5953 </div> 5954 <!--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 5955 further refinement. From here on, the pattern should be clear; we complete the floor computation 5956 as follows: 5957 5958 5959 5960 <div class="center" 5961 > 5962 <!--l. 76--><p class="noindent" > 5963 5964 <!--l. 77--><p class="noindent" ><img 5965 src="floor1-3.png" alt="PIC" 5966 > 5967 <br /> <div class="caption" 5968 ><span class="id">Figure 9: </span><span 5969 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 --> 5970 </div> 5971 <div class="center" 5972 > 5973 <!--l. 81--><p class="noindent" > 5974 5975 <!--l. 82--><p class="noindent" ><img 5976 src="floor1-4.png" alt="PIC" 5977 > 5978 <br /> <div class="caption" 5979 ><span class="id">Figure 10: </span><span 5980 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 --> 5981 </div> 5982 <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual 5983 decode, as described later. The actual algorithm splits Y value computation and line plotting 5984 into two steps with modifications to the above algorithm to eliminate noise accumulation 5985 through integer roundoff/truncation. 5986 <!--l. 94--><p class="noindent" > 5987 <h5 class="subsubsectionHead"><span class="titlemark">7.2.2 </span> <a 5988 id="x1-990007.2.2"></a>header decode</h5> 5989 <!--l. 96--><p class="noindent" >A list of floor X values is stored in the packet header in interleaved format (used in list order 5990 during packet decode and synthesis). This list is split into partitions, and each partition is 5991 assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit 5992 partition or partition class. 5993 <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which 5994 the partition class encodes at once), a ’subclass’ value representing the number of 5995 alternate entropy books the partition class may use in representing Y values, the list of 5996 [subclass] books and a master book used to encode which alternate books were chosen 5997 for representation in a given packet. The master/subclass mechanism is meant to be 5998 used as a flexible representation cascade while still using codebooks only in a scalar 5999 context. 6000 6001 6002 6003 <!--l. 112--><p class="noindent" > 6004 <div class="fancyvrb" id="fancyvrb28"> 6005 <a 6006 id="x1-99002r1"></a><span 6007 class="cmr-6">1</span><span 6008 class="cmtt-8"> </span><span 6009 class="cmtt-8"> </span> 6010 <br class="fancyvrb" /><a 6011 id="x1-99004r2"></a><span 6012 class="cmr-6">2</span><span 6013 class="cmtt-8"> </span><span 6014 class="cmtt-8"> </span><span 6015 class="cmtt-8"> </span><span 6016 class="cmtt-8"> 1)</span><span 6017 class="cmtt-8"> [floor1_partitions]</span><span 6018 class="cmtt-8"> =</span><span 6019 class="cmtt-8"> read</span><span 6020 class="cmtt-8"> 5</span><span 6021 class="cmtt-8"> bits</span><span 6022 class="cmtt-8"> as</span><span 6023 class="cmtt-8"> unsigned</span><span 6024 class="cmtt-8"> integer</span> 6025 <br class="fancyvrb" /><a 6026 id="x1-99006r3"></a><span 6027 class="cmr-6">3</span><span 6028 class="cmtt-8"> </span><span 6029 class="cmtt-8"> </span><span 6030 class="cmtt-8"> </span><span 6031 class="cmtt-8"> 2)</span><span 6032 class="cmtt-8"> [maximum_class]</span><span 6033 class="cmtt-8"> =</span><span 6034 class="cmtt-8"> -1</span> 6035 <br class="fancyvrb" /><a 6036 id="x1-99008r4"></a><span 6037 class="cmr-6">4</span><span 6038 class="cmtt-8"> </span><span 6039 class="cmtt-8"> </span><span 6040 class="cmtt-8"> </span><span 6041 class="cmtt-8"> 3)</span><span 6042 class="cmtt-8"> iterate</span><span 6043 class="cmtt-8"> [i]</span><span 6044 class="cmtt-8"> over</span><span 6045 class="cmtt-8"> the</span><span 6046 class="cmtt-8"> range</span><span 6047 class="cmtt-8"> 0</span><span 6048 class="cmtt-8"> ...</span><span 6049 class="cmtt-8"> [floor1_partitions]-1</span><span 6050 class="cmtt-8"> </span><span 6051 class="cmsy-8">{</span> 6052 <br class="fancyvrb" /><a 6053 id="x1-99010r5"></a><span 6054 class="cmr-6">5</span><span 6055 class="cmtt-8"> </span><span 6056 class="cmtt-8"> </span> 6057 <br class="fancyvrb" /><a 6058 id="x1-99012r6"></a><span 6059 class="cmr-6">6</span><span 6060 class="cmtt-8"> </span><span 6061 class="cmtt-8"> </span><span 6062 class="cmtt-8"> </span><span 6063 class="cmtt-8"> </span><span 6064 class="cmtt-8"> </span><span 6065 class="cmtt-8"> </span><span 6066 class="cmtt-8"> </span><span 6067 class="cmtt-8"> </span><span 6068 class="cmtt-8"> </span><span 6069 class="cmtt-8"> 4)</span><span 6070 class="cmtt-8"> vector</span><span 6071 class="cmtt-8"> [floor1_partition_class_list]</span><span 6072 class="cmtt-8"> element</span><span 6073 class="cmtt-8"> [i]</span><span 6074 class="cmtt-8"> =</span><span 6075 class="cmtt-8"> read</span><span 6076 class="cmtt-8"> 4</span><span 6077 class="cmtt-8"> bits</span><span 6078 class="cmtt-8"> as</span><span 6079 class="cmtt-8"> unsigned</span><span 6080 class="cmtt-8"> integer</span> 6081 <br class="fancyvrb" /><a 6082 id="x1-99014r7"></a><span 6083 class="cmr-6">7</span><span 6084 class="cmtt-8"> </span><span 6085 class="cmtt-8"> </span> 6086 <br class="fancyvrb" /><a 6087 id="x1-99016r8"></a><span 6088 class="cmr-6">8</span><span 6089 class="cmtt-8"> </span><span 6090 class="cmtt-8"> </span><span 6091 class="cmtt-8"> </span><span 6092 class="cmtt-8"> </span><span 6093 class="cmtt-8"> </span><span 6094 class="cmtt-8"> </span><span 6095 class="cmtt-8"> </span><span 6096 class="cmsy-8">}</span> 6097 <br class="fancyvrb" /><a 6098 id="x1-99018r9"></a><span 6099 class="cmr-6">9</span><span 6100 class="cmtt-8"> </span><span 6101 class="cmtt-8"> </span> 6102 <br class="fancyvrb" /><a 6103 id="x1-99020r10"></a><span 6104 class="cmr-6">10</span><span 6105 class="cmtt-8"> </span><span 6106 class="cmtt-8"> </span><span 6107 class="cmtt-8"> </span><span 6108 class="cmtt-8"> 5)</span><span 6109 class="cmtt-8"> [maximum_class]</span><span 6110 class="cmtt-8"> =</span><span 6111 class="cmtt-8"> largest</span><span 6112 class="cmtt-8"> integer</span><span 6113 class="cmtt-8"> scalar</span><span 6114 class="cmtt-8"> value</span><span 6115 class="cmtt-8"> in</span><span 6116 class="cmtt-8"> vector</span><span 6117 class="cmtt-8"> [floor1_partition_class_list]</span> 6118 <br class="fancyvrb" /><a 6119 id="x1-99022r11"></a><span 6120 class="cmr-6">11</span><span 6121 class="cmtt-8"> </span><span 6122 class="cmtt-8"> </span><span 6123 class="cmtt-8"> </span><span 6124 class="cmtt-8"> 6)</span><span 6125 class="cmtt-8"> iterate</span><span 6126 class="cmtt-8"> [i]</span><span 6127 class="cmtt-8"> over</span><span 6128 class="cmtt-8"> the</span><span 6129 class="cmtt-8"> range</span><span 6130 class="cmtt-8"> 0</span><span 6131 class="cmtt-8"> ...</span><span 6132 class="cmtt-8"> [maximum_class]</span><span 6133 class="cmtt-8"> </span><span 6134 class="cmsy-8">{</span> 6135 <br class="fancyvrb" /><a 6136 id="x1-99024r12"></a><span 6137 class="cmr-6">12</span><span 6138 class="cmtt-8"> </span><span 6139 class="cmtt-8"> </span> 6140 <br class="fancyvrb" /><a 6141 id="x1-99026r13"></a><span 6142 class="cmr-6">13</span><span 6143 class="cmtt-8"> </span><span 6144 class="cmtt-8"> </span><span 6145 class="cmtt-8"> </span><span 6146 class="cmtt-8"> </span><span 6147 class="cmtt-8"> </span><span 6148 class="cmtt-8"> </span><span 6149 class="cmtt-8"> </span><span 6150 class="cmtt-8"> </span><span 6151 class="cmtt-8"> </span><span 6152 class="cmtt-8"> 7)</span><span 6153 class="cmtt-8"> vector</span><span 6154 class="cmtt-8"> [floor1_class_dimensions]</span><span 6155 class="cmtt-8"> element</span><span 6156 class="cmtt-8"> [i]</span><span 6157 class="cmtt-8"> =</span><span 6158 class="cmtt-8"> read</span><span 6159 class="cmtt-8"> 3</span><span 6160 class="cmtt-8"> bits</span><span 6161 class="cmtt-8"> as</span><span 6162 class="cmtt-8"> unsigned</span><span 6163 class="cmtt-8"> integer</span><span 6164 class="cmtt-8"> and</span><span 6165 class="cmtt-8"> add</span><span 6166 class="cmtt-8"> 1</span> 6167 <br class="fancyvrb" /><a 6168 id="x1-99028r14"></a><span 6169 class="cmr-6">14</span><span 6170 class="cmtt-8"> </span><span 6171 class="cmtt-8">  8)</span><span 6172 class="cmtt-8"> vector</span><span 6173 class="cmtt-8"> [floor1_class_subclasses]</span><span 6174 class="cmtt-8"> element</span><span 6175 class="cmtt-8"> [i]</span><span 6176 class="cmtt-8"> =</span><span 6177 class="cmtt-8"> read</span><span 6178 class="cmtt-8"> 2</span><span 6179 class="cmtt-8"> bits</span><span 6180 class="cmtt-8"> as</span><span 6181 class="cmtt-8"> unsigned</span><span 6182 class="cmtt-8"> integer</span> 6183 <br class="fancyvrb" /><a 6184 id="x1-99030r15"></a><span 6185 class="cmr-6">15</span><span 6186 class="cmtt-8"> </span><span 6187 class="cmtt-8"> </span><span 6188 class="cmtt-8"> </span><span 6189 class="cmtt-8"> </span><span 6190 class="cmtt-8"> </span><span 6191 class="cmtt-8"> </span><span 6192 class="cmtt-8"> </span><span 6193 class="cmtt-8"> </span><span 6194 class="cmtt-8"> </span><span 6195 class="cmtt-8"> 9)</span><span 6196 class="cmtt-8"> if</span><span 6197 class="cmtt-8"> (</span><span 6198 class="cmtt-8"> vector</span><span 6199 class="cmtt-8"> [floor1_class_subclasses]</span><span 6200 class="cmtt-8"> element</span><span 6201 class="cmtt-8"> [i]</span><span 6202 class="cmtt-8"> is</span><span 6203 class="cmtt-8"> nonzero</span><span 6204 class="cmtt-8"> )</span><span 6205 class="cmtt-8"> </span><span 6206 class="cmsy-8">{</span> 6207 <br class="fancyvrb" /><a 6208 id="x1-99032r16"></a><span 6209 class="cmr-6">16</span><span 6210 class="cmtt-8"> </span><span 6211 class="cmtt-8"> </span> 6212 <br class="fancyvrb" /><a 6213 id="x1-99034r17"></a><span 6214 class="cmr-6">17</span><span 6215 class="cmtt-8"> </span><span 6216 class="cmtt-8"> </span><span 6217 class="cmtt-8"> </span><span 6218 class="cmtt-8"> </span><span 6219 class="cmtt-8"> </span><span 6220 class="cmtt-8"> </span><span 6221 class="cmtt-8"> </span><span 6222 class="cmtt-8"> </span><span 6223 class="cmtt-8"> </span><span 6224 class="cmtt-8"> </span><span 6225 class="cmtt-8"> </span><span 6226 class="cmtt-8"> </span><span 6227 class="cmtt-8"> </span><span 6228 class="cmtt-8"> </span><span 6229 class="cmtt-8"> 10)</span><span 6230 class="cmtt-8"> vector</span><span 6231 class="cmtt-8"> [floor1_class_masterbooks]</span><span 6232 class="cmtt-8"> element</span><span 6233 class="cmtt-8"> [i]</span><span 6234 class="cmtt-8"> =</span><span 6235 class="cmtt-8"> read</span><span 6236 class="cmtt-8"> 8</span><span 6237 class="cmtt-8"> bits</span><span 6238 class="cmtt-8"> as</span><span 6239 class="cmtt-8"> unsigned</span><span 6240 class="cmtt-8"> integer</span> 6241 <br class="fancyvrb" /><a 6242 id="x1-99036r18"></a><span 6243 class="cmr-6">18</span><span 6244 class="cmtt-8"> </span><span 6245 class="cmtt-8"> </span> 6246 <br class="fancyvrb" /><a 6247 id="x1-99038r19"></a><span 6248 class="cmr-6">19</span><span 6249 class="cmtt-8"> </span><span 6250 class="cmtt-8"> </span><span 6251 class="cmtt-8"> </span><span 6252 class="cmtt-8"> </span><span 6253 class="cmtt-8"> </span><span 6254 class="cmtt-8"> </span><span 6255 class="cmtt-8"> </span><span 6256 class="cmtt-8"> </span><span 6257 class="cmtt-8"> </span><span 6258 class="cmtt-8"> </span><span 6259 class="cmtt-8"> </span><span 6260 class="cmtt-8"> </span><span 6261 class="cmtt-8"> </span><span 6262 class="cmsy-8">}</span> 6263 <br class="fancyvrb" /><a 6264 id="x1-99040r20"></a><span 6265 class="cmr-6">20</span><span 6266 class="cmtt-8"> </span><span 6267 class="cmtt-8"> </span> 6268 <br class="fancyvrb" /><a 6269 id="x1-99042r21"></a><span 6270 class="cmr-6">21</span><span 6271 class="cmtt-8"> </span><span 6272 class="cmtt-8"> </span><span 6273 class="cmtt-8"> </span><span 6274 class="cmtt-8"> </span><span 6275 class="cmtt-8"> </span><span 6276 class="cmtt-8"> </span><span 6277 class="cmtt-8"> </span><span 6278 class="cmtt-8"> </span><span 6279 class="cmtt-8"> 11)</span><span 6280 class="cmtt-8"> iterate</span><span 6281 class="cmtt-8"> [j]</span><span 6282 class="cmtt-8"> over</span><span 6283 class="cmtt-8"> the</span><span 6284 class="cmtt-8"> range</span><span 6285 class="cmtt-8"> 0</span><span 6286 class="cmtt-8"> ...</span><span 6287 class="cmtt-8"> (2</span><span 6288 class="cmtt-8"> exponent</span><span 6289 class="cmtt-8"> [floor1_class_subclasses]</span><span 6290 class="cmtt-8"> element</span><span 6291 class="cmtt-8"> [i])</span><span 6292 class="cmtt-8"> -</span><span 6293 class="cmtt-8"> 1</span><span 6294 class="cmtt-8"> </span><span 6295 class="cmsy-8">{</span> 6296 <br class="fancyvrb" /><a 6297 id="x1-99044r22"></a><span 6298 class="cmr-6">22</span><span 6299 class="cmtt-8"> </span><span 6300 class="cmtt-8"> </span> 6301 <br class="fancyvrb" /><a 6302 id="x1-99046r23"></a><span 6303 class="cmr-6">23</span><span 6304 class="cmtt-8"> </span><span 6305 class="cmtt-8"> </span><span 6306 class="cmtt-8"> </span><span 6307 class="cmtt-8"> </span><span 6308 class="cmtt-8"> </span><span 6309 class="cmtt-8"> </span><span 6310 class="cmtt-8"> </span><span 6311 class="cmtt-8"> </span><span 6312 class="cmtt-8"> </span><span 6313 class="cmtt-8"> </span><span 6314 class="cmtt-8"> </span><span 6315 class="cmtt-8"> </span><span 6316 class="cmtt-8"> </span><span 6317 class="cmtt-8"> </span><span 6318 class="cmtt-8"> 12)</span><span 6319 class="cmtt-8"> array</span><span 6320 class="cmtt-8"> [floor1_subclass_books]</span><span 6321 class="cmtt-8"> element</span><span 6322 class="cmtt-8"> [i],[j]</span><span 6323 class="cmtt-8"> =</span> 6324 <br class="fancyvrb" /><a 6325 id="x1-99048r24"></a><span 6326 class="cmr-6">24</span><span 6327 class="cmtt-8"> </span><span 6328 class="cmtt-8"> </span><span 6329 class="cmtt-8"> </span><span 6330 class="cmtt-8"> </span><span 6331 class="cmtt-8"> </span><span 6332 class="cmtt-8"> </span><span 6333 class="cmtt-8"> </span><span 6334 class="cmtt-8"> </span><span 6335 class="cmtt-8"> </span><span 6336 class="cmtt-8"> </span><span 6337 class="cmtt-8"> </span><span 6338 class="cmtt-8"> </span><span 6339 class="cmtt-8"> </span><span 6340 class="cmtt-8"> </span><span 6341 class="cmtt-8"> </span><span 6342 class="cmtt-8"> </span><span 6343 class="cmtt-8"> </span><span 6344 class="cmtt-8"> </span><span 6345 class="cmtt-8"> read</span><span 6346 class="cmtt-8"> 8</span><span 6347 class="cmtt-8"> bits</span><span 6348 class="cmtt-8"> as</span><span 6349 class="cmtt-8"> unsigned</span><span 6350 class="cmtt-8"> integer</span><span 6351 class="cmtt-8"> and</span><span 6352 class="cmtt-8"> subtract</span><span 6353 class="cmtt-8"> one</span> 6354 <br class="fancyvrb" /><a 6355 id="x1-99050r25"></a><span 6356 class="cmr-6">25</span><span 6357 class="cmtt-8"> </span><span 6358 class="cmtt-8"> </span><span 6359 class="cmtt-8"> </span><span 6360 class="cmtt-8"> </span><span 6361 class="cmtt-8"> </span><span 6362 class="cmtt-8"> </span><span 6363 class="cmtt-8"> </span><span 6364 class="cmtt-8"> </span><span 6365 class="cmtt-8"> </span><span 6366 class="cmtt-8"> </span><span 6367 class="cmtt-8"> </span><span 6368 class="cmtt-8"> </span><span 6369 class="cmtt-8"> </span><span 6370 class="cmsy-8">}</span> 6371 <br class="fancyvrb" /><a 6372 id="x1-99052r26"></a><span 6373 class="cmr-6">26</span><span 6374 class="cmtt-8"> </span><span 6375 class="cmtt-8"> </span><span 6376 class="cmtt-8"> </span><span 6377 class="cmtt-8"> </span><span 6378 class="cmtt-8"> </span><span 6379 class="cmtt-8"> </span><span 6380 class="cmtt-8"> </span><span 6381 class="cmtt-8"> </span><span 6382 class="cmsy-8">}</span> 6383 <br class="fancyvrb" /><a 6384 id="x1-99054r27"></a><span 6385 class="cmr-6">27</span><span 6386 class="cmtt-8"> </span><span 6387 class="cmtt-8"> </span> 6388 <br class="fancyvrb" /><a 6389 id="x1-99056r28"></a><span 6390 class="cmr-6">28</span><span 6391 class="cmtt-8"> </span><span 6392 class="cmtt-8"> </span><span 6393 class="cmtt-8"> 13)</span><span 6394 class="cmtt-8"> [floor1_multiplier]</span><span 6395 class="cmtt-8"> =</span><span 6396 class="cmtt-8"> read</span><span 6397 class="cmtt-8"> 2</span><span 6398 class="cmtt-8"> bits</span><span 6399 class="cmtt-8"> as</span><span 6400 class="cmtt-8"> unsigned</span><span 6401 class="cmtt-8"> integer</span><span 6402 class="cmtt-8"> and</span><span 6403 class="cmtt-8"> add</span><span 6404 class="cmtt-8"> one</span> 6405 <br class="fancyvrb" /><a 6406 id="x1-99058r29"></a><span 6407 class="cmr-6">29</span><span 6408 class="cmtt-8"> </span><span 6409 class="cmtt-8"> </span><span 6410 class="cmtt-8"> 14)</span><span 6411 class="cmtt-8"> [rangebits]</span><span 6412 class="cmtt-8"> =</span><span 6413 class="cmtt-8"> read</span><span 6414 class="cmtt-8"> 4</span><span 6415 class="cmtt-8"> bits</span><span 6416 class="cmtt-8"> as</span><span 6417 class="cmtt-8"> unsigned</span><span 6418 class="cmtt-8"> integer</span> 6419 <br class="fancyvrb" /><a 6420 id="x1-99060r30"></a><span 6421 class="cmr-6">30</span><span 6422 class="cmtt-8"> </span><span 6423 class="cmtt-8"> </span><span 6424 class="cmtt-8"> 15)</span><span 6425 class="cmtt-8"> vector</span><span 6426 class="cmtt-8"> [floor1_X_list]</span><span 6427 class="cmtt-8"> element</span><span 6428 class="cmtt-8"> [0]</span><span 6429 class="cmtt-8"> =</span><span 6430 class="cmtt-8"> 0</span> 6431 <br class="fancyvrb" /><a 6432 id="x1-99062r31"></a><span 6433 class="cmr-6">31</span><span 6434 class="cmtt-8"> </span><span 6435 class="cmtt-8"> </span><span 6436 class="cmtt-8"> 16)</span><span 6437 class="cmtt-8"> vector</span><span 6438 class="cmtt-8"> [floor1_X_list]</span><span 6439 class="cmtt-8"> element</span><span 6440 class="cmtt-8"> [1]</span><span 6441 class="cmtt-8"> =</span><span 6442 class="cmtt-8"> 2</span><span 6443 class="cmtt-8"> exponent</span><span 6444 class="cmtt-8"> [rangebits];</span> 6445 <br class="fancyvrb" /><a 6446 id="x1-99064r32"></a><span 6447 class="cmr-6">32</span><span 6448 class="cmtt-8"> </span><span 6449 class="cmtt-8"> </span><span 6450 class="cmtt-8"> 17)</span><span 6451 class="cmtt-8"> [floor1_values]</span><span 6452 class="cmtt-8"> =</span><span 6453 class="cmtt-8"> 2</span> 6454 <br class="fancyvrb" /><a 6455 id="x1-99066r33"></a><span 6456 class="cmr-6">33</span><span 6457 class="cmtt-8"> </span><span 6458 class="cmtt-8"> </span><span 6459 class="cmtt-8"> 18)</span><span 6460 class="cmtt-8"> iterate</span><span 6461 class="cmtt-8"> [i]</span><span 6462 class="cmtt-8"> over</span><span 6463 class="cmtt-8"> the</span><span 6464 class="cmtt-8"> range</span><span 6465 class="cmtt-8"> 0</span><span 6466 class="cmtt-8"> ...</span><span 6467 class="cmtt-8"> [floor1_partitions]-1</span><span 6468 class="cmtt-8"> </span><span 6469 class="cmsy-8">{</span> 6470 <br class="fancyvrb" /><a 6471 id="x1-99068r34"></a><span 6472 class="cmr-6">34</span><span 6473 class="cmtt-8"> </span><span 6474 class="cmtt-8"> </span> 6475 <br class="fancyvrb" /><a 6476 id="x1-99070r35"></a><span 6477 class="cmr-6">35</span><span 6478 class="cmtt-8"> </span><span 6479 class="cmtt-8"> </span><span 6480 class="cmtt-8"> </span><span 6481 class="cmtt-8"> </span><span 6482 class="cmtt-8"> </span><span 6483 class="cmtt-8"> </span><span 6484 class="cmtt-8"> </span><span 6485 class="cmtt-8"> </span><span 6486 class="cmtt-8"> 19)</span><span 6487 class="cmtt-8"> [current_class_number]</span><span 6488 class="cmtt-8"> =</span><span 6489 class="cmtt-8"> vector</span><span 6490 class="cmtt-8"> [floor1_partition_class_list]</span><span 6491 class="cmtt-8"> element</span><span 6492 class="cmtt-8"> [i]</span> 6493 <br class="fancyvrb" /><a 6494 id="x1-99072r36"></a><span 6495 class="cmr-6">36</span><span 6496 class="cmtt-8"> </span><span 6497 class="cmtt-8"> </span><span 6498 class="cmtt-8"> </span><span 6499 class="cmtt-8"> </span><span 6500 class="cmtt-8"> </span><span 6501 class="cmtt-8"> </span><span 6502 class="cmtt-8"> </span><span 6503 class="cmtt-8"> </span><span 6504 class="cmtt-8"> 20)</span><span 6505 class="cmtt-8"> iterate</span><span 6506 class="cmtt-8"> [j]</span><span 6507 class="cmtt-8"> over</span><span 6508 class="cmtt-8"> the</span><span 6509 class="cmtt-8"> range</span><span 6510 class="cmtt-8"> 0</span><span 6511 class="cmtt-8"> ...</span><span 6512 class="cmtt-8"> ([floor1_class_dimensions]</span><span 6513 class="cmtt-8"> element</span><span 6514 class="cmtt-8"> [current_class_number])-1</span><span 6515 class="cmtt-8"> </span><span 6516 class="cmsy-8">{</span> 6517 <br class="fancyvrb" /><a 6518 id="x1-99074r37"></a><span 6519 class="cmr-6">37</span><span 6520 class="cmtt-8"> </span><span 6521 class="cmtt-8"> </span><span 6522 class="cmtt-8"> </span><span 6523 class="cmtt-8"> </span><span 6524 class="cmtt-8"> </span><span 6525 class="cmtt-8"> </span><span 6526 class="cmtt-8"> </span><span 6527 class="cmtt-8"> </span><span 6528 class="cmtt-8"> </span><span 6529 class="cmtt-8"> </span><span 6530 class="cmtt-8"> </span><span 6531 class="cmtt-8"> </span><span 6532 class="cmtt-8"> </span><span 6533 class="cmtt-8"> </span><span 6534 class="cmtt-8"> 21)</span><span 6535 class="cmtt-8"> vector</span><span 6536 class="cmtt-8"> [floor1_X_list]</span><span 6537 class="cmtt-8"> element</span><span 6538 class="cmtt-8"> ([floor1_values])</span><span 6539 class="cmtt-8"> =</span> 6540 <br class="fancyvrb" /><a 6541 id="x1-99076r38"></a><span 6542 class="cmr-6">38</span><span 6543 class="cmtt-8"> </span><span 6544 class="cmtt-8"> </span><span 6545 class="cmtt-8"> </span><span 6546 class="cmtt-8"> </span><span 6547 class="cmtt-8"> </span><span 6548 class="cmtt-8"> </span><span 6549 class="cmtt-8"> </span><span 6550 class="cmtt-8"> </span><span 6551 class="cmtt-8"> </span><span 6552 class="cmtt-8"> </span><span 6553 class="cmtt-8"> </span><span 6554 class="cmtt-8"> </span><span 6555 class="cmtt-8"> </span><span 6556 class="cmtt-8"> </span><span 6557 class="cmtt-8"> </span><span 6558 class="cmtt-8"> </span><span 6559 class="cmtt-8"> </span><span 6560 class="cmtt-8"> </span><span 6561 class="cmtt-8"> read</span><span 6562 class="cmtt-8"> [rangebits]</span><span 6563 class="cmtt-8"> bits</span><span 6564 class="cmtt-8"> as</span><span 6565 class="cmtt-8"> unsigned</span><span 6566 class="cmtt-8"> integer</span> 6567 <br class="fancyvrb" /><a 6568 id="x1-99078r39"></a><span 6569 class="cmr-6">39</span><span 6570 class="cmtt-8"> </span><span 6571 class="cmtt-8"> </span><span 6572 class="cmtt-8"> </span><span 6573 class="cmtt-8"> </span><span 6574 class="cmtt-8"> </span><span 6575 class="cmtt-8"> </span><span 6576 class="cmtt-8"> </span><span 6577 class="cmtt-8"> </span><span 6578 class="cmtt-8"> </span><span 6579 class="cmtt-8"> </span><span 6580 class="cmtt-8"> </span><span 6581 class="cmtt-8"> </span><span 6582 class="cmtt-8"> </span><span 6583 class="cmtt-8"> </span><span 6584 class="cmtt-8"> 22)</span><span 6585 class="cmtt-8"> increment</span><span 6586 class="cmtt-8"> [floor1_values]</span><span 6587 class="cmtt-8"> by</span><span 6588 class="cmtt-8"> one</span> 6589 <br class="fancyvrb" /><a 6590 id="x1-99080r40"></a><span 6591 class="cmr-6">40</span><span 6592 class="cmtt-8"> </span><span 6593 class="cmtt-8"> </span><span 6594 class="cmtt-8"> </span><span 6595 class="cmtt-8"> </span><span 6596 class="cmtt-8"> </span><span 6597 class="cmtt-8"> </span><span 6598 class="cmtt-8"> </span><span 6599 class="cmtt-8"> </span><span 6600 class="cmtt-8"> </span><span 6601 class="cmtt-8"> </span><span 6602 class="cmtt-8"> </span><span 6603 class="cmtt-8"> </span><span 6604 class="cmtt-8"> </span><span 6605 class="cmsy-8">}</span> 6606 <br class="fancyvrb" /><a 6607 id="x1-99082r41"></a><span 6608 class="cmr-6">41</span><span 6609 class="cmtt-8"> </span><span 6610 class="cmtt-8"> </span><span 6611 class="cmtt-8"> </span><span 6612 class="cmtt-8"> </span><span 6613 class="cmtt-8"> </span><span 6614 class="cmtt-8"> </span><span 6615 class="cmtt-8"> </span><span 6616 class="cmsy-8">}</span> 6617 <br class="fancyvrb" /><a 6618 id="x1-99084r42"></a><span 6619 class="cmr-6">42</span><span 6620 class="cmtt-8"> </span><span 6621 class="cmtt-8"> </span> 6622 <br class="fancyvrb" /><a 6623 id="x1-99086r43"></a><span 6624 class="cmr-6">43</span><span 6625 class="cmtt-8"> </span><span 6626 class="cmtt-8"> </span><span 6627 class="cmtt-8"> 23)</span><span 6628 class="cmtt-8"> done</span> 6629 </div> 6630 <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during 6631 setup renders a stream undecodable. In addition, a <span 6632 class="cmtt-12">[floor1_class_masterbooks] </span>or 6633 <span 6634 class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook 6635 configured in this stream is an error condition that renders the stream undecodable. All vector 6636 [floor1˙x˙list] element values must be unique within the vector; a non-unique value renders the 6637 stream undecodable. 6638 <!--l. 167--><p class="noindent" ><span class="paragraphHead"><a 6639 id="x1-1000007.2.2"></a><span 6640 class="cmbx-12">packet decode</span></span> 6641 6642 6643 6644 Packet decode begins by checking the <span 6645 class="cmtt-12">[nonzero] </span>flag: 6646 <!--l. 171--><p class="noindent" > 6647 <div class="fancyvrb" id="fancyvrb29"> 6648 <a 6649 id="x1-100002r1"></a><span 6650 class="cmr-6">1</span><span 6651 class="cmtt-8"> </span><span 6652 class="cmtt-8"> </span><span 6653 class="cmtt-8"> </span><span 6654 class="cmtt-8"> 1)</span><span 6655 class="cmtt-8"> [nonzero]</span><span 6656 class="cmtt-8"> =</span><span 6657 class="cmtt-8"> read</span><span 6658 class="cmtt-8"> 1</span><span 6659 class="cmtt-8"> bit</span><span 6660 class="cmtt-8"> as</span><span 6661 class="cmtt-8"> boolean</span> 6662 </div> 6663 <!--l. 175--><p class="noindent" >If <span 6664 class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame. 6665 Decode immediately returns a status indicating this floor curve (and thus this channel) is unused 6666 this frame. (A return status of ’unused’ is different from decoding a floor that has all 6667 points set to minimum representation amplitude, which happens to be approximately 6668 -140dB). 6669 <!--l. 183--><p class="noindent" >Assuming <span 6670 class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows: 6671 <!--l. 185--><p class="noindent" > 6672 <div class="fancyvrb" id="fancyvrb30"> 6673 <a 6674 id="x1-100004r1"></a><span 6675 class="cmr-6">1</span><span 6676 class="cmtt-8"> </span><span 6677 class="cmtt-8"> </span><span 6678 class="cmtt-8"> </span><span 6679 class="cmtt-8"> 1)</span><span 6680 class="cmtt-8"> [range]</span><span 6681 class="cmtt-8"> =</span><span 6682 class="cmtt-8"> vector</span><span 6683 class="cmtt-8"> </span><span 6684 class="cmsy-8">{</span><span 6685 class="cmtt-8"> 256,</span><span 6686 class="cmtt-8"> 128,</span><span 6687 class="cmtt-8"> 86,</span><span 6688 class="cmtt-8"> 64</span><span 6689 class="cmtt-8"> </span><span 6690 class="cmsy-8">}</span><span 6691 class="cmtt-8"> element</span><span 6692 class="cmtt-8"> ([floor1_multiplier]-1)</span> 6693 <br class="fancyvrb" /><a 6694 id="x1-100006r2"></a><span 6695 class="cmr-6">2</span><span 6696 class="cmtt-8"> </span><span 6697 class="cmtt-8"> </span><span 6698 class="cmtt-8"> </span><span 6699 class="cmtt-8"> 2)</span><span 6700 class="cmtt-8"> vector</span><span 6701 class="cmtt-8"> [floor1_Y]</span><span 6702 class="cmtt-8"> element</span><span 6703 class="cmtt-8"> [0]</span><span 6704 class="cmtt-8"> =</span><span 6705 class="cmtt-8"> read</span><span 6706 class="cmtt-8"> </span><a 6707 href="#x1-1170009.2.1"><span 6708 class="cmtt-8">ilog</span></a><span 6709 class="cmtt-8">([range]-1)</span><span 6710 class="cmtt-8"> bits</span><span 6711 class="cmtt-8"> as</span><span 6712 class="cmtt-8"> unsigned</span><span 6713 class="cmtt-8"> integer</span> 6714 <br class="fancyvrb" /><a 6715 id="x1-100008r3"></a><span 6716 class="cmr-6">3</span><span 6717 class="cmtt-8"> </span><span 6718 class="cmtt-8"> </span><span 6719 class="cmtt-8"> </span><span 6720 class="cmtt-8"> 3)</span><span 6721 class="cmtt-8"> vector</span><span 6722 class="cmtt-8"> [floor1_Y]</span><span 6723 class="cmtt-8"> element</span><span 6724 class="cmtt-8"> [1]</span><span 6725 class="cmtt-8"> =</span><span 6726 class="cmtt-8"> read</span><span 6727 class="cmtt-8"> </span><a 6728 href="#x1-1170009.2.1"><span 6729 class="cmtt-8">ilog</span></a><span 6730 class="cmtt-8">([range]-1)</span><span 6731 class="cmtt-8"> bits</span><span 6732 class="cmtt-8"> as</span><span 6733 class="cmtt-8"> unsigned</span><span 6734 class="cmtt-8"> integer</span> 6735 <br class="fancyvrb" /><a 6736 id="x1-100010r4"></a><span 6737 class="cmr-6">4</span><span 6738 class="cmtt-8"> </span><span 6739 class="cmtt-8"> </span><span 6740 class="cmtt-8"> </span><span 6741 class="cmtt-8"> 4)</span><span 6742 class="cmtt-8"> [offset]</span><span 6743 class="cmtt-8"> =</span><span 6744 class="cmtt-8"> 2;</span> 6745 <br class="fancyvrb" /><a 6746 id="x1-100012r5"></a><span 6747 class="cmr-6">5</span><span 6748 class="cmtt-8"> </span><span 6749 class="cmtt-8"> </span><span 6750 class="cmtt-8"> </span><span 6751 class="cmtt-8"> 5)</span><span 6752 class="cmtt-8"> iterate</span><span 6753 class="cmtt-8"> [i]</span><span 6754 class="cmtt-8"> over</span><span 6755 class="cmtt-8"> the</span><span 6756 class="cmtt-8"> range</span><span 6757 class="cmtt-8"> 0</span><span 6758 class="cmtt-8"> ...</span><span 6759 class="cmtt-8"> [floor1_partitions]-1</span><span 6760 class="cmtt-8"> </span><span 6761 class="cmsy-8">{</span> 6762 <br class="fancyvrb" /><a 6763 id="x1-100014r6"></a><span 6764 class="cmr-6">6</span><span 6765 class="cmtt-8"> </span><span 6766 class="cmtt-8"> </span> 6767 <br class="fancyvrb" /><a 6768 id="x1-100016r7"></a><span 6769 class="cmr-6">7</span><span 6770 class="cmtt-8"> </span><span 6771 class="cmtt-8"> </span><span 6772 class="cmtt-8"> </span><span 6773 class="cmtt-8"> </span><span 6774 class="cmtt-8"> </span><span 6775 class="cmtt-8"> </span><span 6776 class="cmtt-8"> </span><span 6777 class="cmtt-8"> </span><span 6778 class="cmtt-8"> 6)</span><span 6779 class="cmtt-8"> [class]</span><span 6780 class="cmtt-8"> =</span><span 6781 class="cmtt-8"> vector</span><span 6782 class="cmtt-8"> [floor1_partition_class]</span><span 6783 class="cmtt-8"> </span><span 6784 class="cmtt-8"> element</span><span 6785 class="cmtt-8"> [i]</span> 6786 <br class="fancyvrb" /><a 6787 id="x1-100018r8"></a><span 6788 class="cmr-6">8</span><span 6789 class="cmtt-8"> </span><span 6790 class="cmtt-8"> </span><span 6791 class="cmtt-8"> </span><span 6792 class="cmtt-8"> </span><span 6793 class="cmtt-8"> </span><span 6794 class="cmtt-8"> </span><span 6795 class="cmtt-8"> </span><span 6796 class="cmtt-8"> </span><span 6797 class="cmtt-8"> 7)</span><span 6798 class="cmtt-8"> [cdim]</span><span 6799 class="cmtt-8"> </span><span 6800 class="cmtt-8"> =</span><span 6801 class="cmtt-8"> vector</span><span 6802 class="cmtt-8"> [floor1_class_dimensions]</span><span 6803 class="cmtt-8"> element</span><span 6804 class="cmtt-8"> [class]</span> 6805 <br class="fancyvrb" /><a 6806 id="x1-100020r9"></a><span 6807 class="cmr-6">9</span><span 6808 class="cmtt-8"> </span><span 6809 class="cmtt-8"> </span><span 6810 class="cmtt-8"> </span><span 6811 class="cmtt-8"> </span><span 6812 class="cmtt-8"> </span><span 6813 class="cmtt-8"> </span><span 6814 class="cmtt-8"> </span><span 6815 class="cmtt-8"> </span><span 6816 class="cmtt-8"> 8)</span><span 6817 class="cmtt-8"> [cbits]</span><span 6818 class="cmtt-8"> =</span><span 6819 class="cmtt-8"> vector</span><span 6820 class="cmtt-8"> [floor1_class_subclasses]</span><span 6821 class="cmtt-8"> element</span><span 6822 class="cmtt-8"> [class]</span> 6823 <br class="fancyvrb" /><a 6824 id="x1-100022r10"></a><span 6825 class="cmr-6">10</span><span 6826 class="cmtt-8"> </span><span 6827 class="cmtt-8"> </span><span 6828 class="cmtt-8"> </span><span 6829 class="cmtt-8"> </span><span 6830 class="cmtt-8"> </span><span 6831 class="cmtt-8"> </span><span 6832 class="cmtt-8"> </span><span 6833 class="cmtt-8"> </span><span 6834 class="cmtt-8"> 9)</span><span 6835 class="cmtt-8"> [csub]</span><span 6836 class="cmtt-8"> </span><span 6837 class="cmtt-8"> =</span><span 6838 class="cmtt-8"> (2</span><span 6839 class="cmtt-8"> exponent</span><span 6840 class="cmtt-8"> [cbits])-1</span> 6841 <br class="fancyvrb" /><a 6842 id="x1-100024r11"></a><span 6843 class="cmr-6">11</span><span 6844 class="cmtt-8"> </span><span 6845 class="cmtt-8"> </span><span 6846 class="cmtt-8"> </span><span 6847 class="cmtt-8"> </span><span 6848 class="cmtt-8"> </span><span 6849 class="cmtt-8"> </span><span 6850 class="cmtt-8"> </span><span 6851 class="cmtt-8"> 10)</span><span 6852 class="cmtt-8"> [cval]</span><span 6853 class="cmtt-8"> </span><span 6854 class="cmtt-8"> =</span><span 6855 class="cmtt-8"> 0</span> 6856 <br class="fancyvrb" /><a 6857 id="x1-100026r12"></a><span 6858 class="cmr-6">12</span><span 6859 class="cmtt-8"> </span><span 6860 class="cmtt-8"> </span><span 6861 class="cmtt-8"> </span><span 6862 class="cmtt-8"> </span><span 6863 class="cmtt-8"> </span><span 6864 class="cmtt-8"> </span><span 6865 class="cmtt-8"> </span><span 6866 class="cmtt-8"> 11)</span><span 6867 class="cmtt-8"> if</span><span 6868 class="cmtt-8"> (</span><span 6869 class="cmtt-8"> [cbits]</span><span 6870 class="cmtt-8"> is</span><span 6871 class="cmtt-8"> greater</span><span 6872 class="cmtt-8"> than</span><span 6873 class="cmtt-8"> zero</span><span 6874 class="cmtt-8"> )</span><span 6875 class="cmtt-8"> </span><span 6876 class="cmsy-8">{</span> 6877 <br class="fancyvrb" /><a 6878 id="x1-100028r13"></a><span 6879 class="cmr-6">13</span><span 6880 class="cmtt-8"> </span><span 6881 class="cmtt-8"> </span> 6882 <br class="fancyvrb" /><a 6883 id="x1-100030r14"></a><span 6884 class="cmr-6">14</span><span 6885 class="cmtt-8"> </span><span 6886 class="cmtt-8"> </span><span 6887 class="cmtt-8"> </span><span 6888 class="cmtt-8"> </span><span 6889 class="cmtt-8"> </span><span 6890 class="cmtt-8"> </span><span 6891 class="cmtt-8"> </span><span 6892 class="cmtt-8"> </span><span 6893 class="cmtt-8"> </span><span 6894 class="cmtt-8"> </span><span 6895 class="cmtt-8"> </span><span 6896 class="cmtt-8"> </span><span 6897 class="cmtt-8"> </span><span 6898 class="cmtt-8"> </span><span 6899 class="cmtt-8"> 12)</span><span 6900 class="cmtt-8"> [cval]</span><span 6901 class="cmtt-8"> =</span><span 6902 class="cmtt-8"> read</span><span 6903 class="cmtt-8"> from</span><span 6904 class="cmtt-8"> packet</span><span 6905 class="cmtt-8"> using</span><span 6906 class="cmtt-8"> codebook</span><span 6907 class="cmtt-8"> number</span> 6908 <br class="fancyvrb" /><a 6909 id="x1-100032r15"></a><span 6910 class="cmr-6">15</span><span 6911 class="cmtt-8"> </span><span 6912 class="cmtt-8"> </span><span 6913 class="cmtt-8"> </span><span 6914 class="cmtt-8"> </span><span 6915 class="cmtt-8"> </span><span 6916 class="cmtt-8"> </span><span 6917 class="cmtt-8"> </span><span 6918 class="cmtt-8"> </span><span 6919 class="cmtt-8"> </span><span 6920 class="cmtt-8"> </span><span 6921 class="cmtt-8"> </span><span 6922 class="cmtt-8"> </span><span 6923 class="cmtt-8"> </span><span 6924 class="cmtt-8"> </span><span 6925 class="cmtt-8"> </span><span 6926 class="cmtt-8"> </span><span 6927 class="cmtt-8"> </span><span 6928 class="cmtt-8"> </span><span 6929 class="cmtt-8"> (vector</span><span 6930 class="cmtt-8"> [floor1_class_masterbooks]</span><span 6931 class="cmtt-8"> element</span><span 6932 class="cmtt-8"> [class])</span><span 6933 class="cmtt-8"> in</span><span 6934 class="cmtt-8"> scalar</span><span 6935 class="cmtt-8"> context</span> 6936 <br class="fancyvrb" /><a 6937 id="x1-100034r16"></a><span 6938 class="cmr-6">16</span><span 6939 class="cmtt-8"> </span><span 6940 class="cmtt-8"> </span><span 6941 class="cmtt-8"> </span><span 6942 class="cmtt-8"> </span><span 6943 class="cmtt-8"> </span><span 6944 class="cmtt-8"> </span><span 6945 class="cmtt-8"> </span><span 6946 class="cmtt-8"> </span><span 6947 class="cmtt-8"> </span><span 6948 class="cmtt-8"> </span><span 6949 class="cmtt-8"> </span><span 6950 class="cmtt-8"> </span><span 6951 class="cmsy-8">}</span> 6952 <br class="fancyvrb" /><a 6953 id="x1-100036r17"></a><span 6954 class="cmr-6">17</span><span 6955 class="cmtt-8"> </span><span 6956 class="cmtt-8"> </span> 6957 <br class="fancyvrb" /><a 6958 id="x1-100038r18"></a><span 6959 class="cmr-6">18</span><span 6960 class="cmtt-8"> </span><span 6961 class="cmtt-8"> </span><span 6962 class="cmtt-8"> </span><span 6963 class="cmtt-8"> </span><span 6964 class="cmtt-8"> </span><span 6965 class="cmtt-8"> </span><span 6966 class="cmtt-8"> </span><span 6967 class="cmtt-8"> 13)</span><span 6968 class="cmtt-8"> iterate</span><span 6969 class="cmtt-8"> [j]</span><span 6970 class="cmtt-8"> over</span><span 6971 class="cmtt-8"> the</span><span 6972 class="cmtt-8"> range</span><span 6973 class="cmtt-8"> 0</span><span 6974 class="cmtt-8"> ...</span><span 6975 class="cmtt-8"> [cdim]-1</span><span 6976 class="cmtt-8"> </span><span 6977 class="cmsy-8">{</span> 6978 <br class="fancyvrb" /><a 6979 id="x1-100040r19"></a><span 6980 class="cmr-6">19</span><span 6981 class="cmtt-8"> </span><span 6982 class="cmtt-8"> </span> 6983 <br class="fancyvrb" /><a 6984 id="x1-100042r20"></a><span 6985 class="cmr-6">20</span><span 6986 class="cmtt-8"> </span><span 6987 class="cmtt-8"> </span><span 6988 class="cmtt-8"> </span><span 6989 class="cmtt-8"> </span><span 6990 class="cmtt-8"> </span><span 6991 class="cmtt-8"> </span><span 6992 class="cmtt-8"> </span><span 6993 class="cmtt-8"> </span><span 6994 class="cmtt-8"> </span><span 6995 class="cmtt-8"> </span><span 6996 class="cmtt-8"> </span><span 6997 class="cmtt-8"> </span><span 6998 class="cmtt-8"> </span><span 6999 class="cmtt-8"> </span><span 7000 class="cmtt-8"> 14)</span><span 7001 class="cmtt-8"> [book]</span><span 7002 class="cmtt-8"> =</span><span 7003 class="cmtt-8"> array</span><span 7004 class="cmtt-8"> [floor1_subclass_books]</span><span 7005 class="cmtt-8"> element</span><span 7006 class="cmtt-8"> [class],([cval]</span><span 7007 class="cmtt-8"> bitwise</span><span 7008 class="cmtt-8"> AND</span><span 7009 class="cmtt-8"> [csub])</span> 7010 <br class="fancyvrb" /><a 7011 id="x1-100044r21"></a><span 7012 class="cmr-6">21</span><span 7013 class="cmtt-8"> </span><span 7014 class="cmtt-8"> </span><span 7015 class="cmtt-8"> </span><span 7016 class="cmtt-8"> </span><span 7017 class="cmtt-8"> </span><span 7018 class="cmtt-8"> </span><span 7019 class="cmtt-8"> </span><span 7020 class="cmtt-8"> </span><span 7021 class="cmtt-8"> </span><span 7022 class="cmtt-8"> </span><span 7023 class="cmtt-8"> </span><span 7024 class="cmtt-8"> </span><span 7025 class="cmtt-8"> </span><span 7026 class="cmtt-8"> </span><span 7027 class="cmtt-8"> 15)</span><span 7028 class="cmtt-8"> [cval]</span><span 7029 class="cmtt-8"> =</span><span 7030 class="cmtt-8"> [cval]</span><span 7031 class="cmtt-8"> right</span><span 7032 class="cmtt-8"> shifted</span><span 7033 class="cmtt-8"> [cbits]</span><span 7034 class="cmtt-8"> bits</span> 7035 <br class="fancyvrb" /><a 7036 id="x1-100046r22"></a><span 7037 class="cmr-6">22</span><span 7038 class="cmtt-8"> </span><span 7039 class="cmtt-8">  </span><span 7040 class="cmtt-8"> </span><span 7041 class="cmtt-8"> </span><span 7042 class="cmtt-8"> </span><span 7043 class="cmtt-8"> </span><span 7044 class="cmtt-8"> 16)</span><span 7045 class="cmtt-8"> if</span><span 7046 class="cmtt-8"> (</span><span 7047 class="cmtt-8"> [book]</span><span 7048 class="cmtt-8"> is</span><span 7049 class="cmtt-8"> not</span><span 7050 class="cmtt-8"> less</span><span 7051 class="cmtt-8"> than</span><span 7052 class="cmtt-8"> zero</span><span 7053 class="cmtt-8"> )</span><span 7054 class="cmtt-8"> </span><span 7055 class="cmsy-8">{</span> 7056 <br class="fancyvrb" /><a 7057 id="x1-100048r23"></a><span 7058 class="cmr-6">23</span><span 7059 class="cmtt-8"> </span><span 7060 class="cmtt-8"> </span> 7061 <br class="fancyvrb" /><a 7062 id="x1-100050r24"></a><span 7063 class="cmr-6">24</span><span 7064 class="cmtt-8"> </span><span 7065 class="cmtt-8">  </span><span 7066 class="cmtt-8"> </span><span 7067 class="cmtt-8"> </span><span 7068 class="cmtt-8"> </span><span 7069 class="cmtt-8"> </span><span 7070 class="cmtt-8"> </span><span 7071 class="cmtt-8"> </span><span 7072 class="cmtt-8"> </span><span 7073 class="cmtt-8"> </span><span 7074 class="cmtt-8"> </span><span 7075 class="cmtt-8"> </span><span 7076 class="cmtt-8"> 17)</span><span 7077 class="cmtt-8"> vector</span><span 7078 class="cmtt-8"> [floor1_Y]</span><span 7079 class="cmtt-8"> element</span><span 7080 class="cmtt-8"> ([j]+[offset])</span><span 7081 class="cmtt-8"> =</span><span 7082 class="cmtt-8"> read</span><span 7083 class="cmtt-8"> from</span><span 7084 class="cmtt-8"> packet</span><span 7085 class="cmtt-8"> using</span><span 7086 class="cmtt-8"> codebook</span> 7087 <br class="fancyvrb" /><a 7088 id="x1-100052r25"></a><span 7089 class="cmr-6">25</span><span 7090 class="cmtt-8"> </span><span 7091 class="cmtt-8"> </span><span 7092 class="cmtt-8"> </span><span 7093 class="cmtt-8"> </span><span 7094 class="cmtt-8"> </span><span 7095 class="cmtt-8"> </span><span 7096 class="cmtt-8"> </span><span 7097 class="cmtt-8"> </span><span 7098 class="cmtt-8"> </span><span 7099 class="cmtt-8"> </span><span 7100 class="cmtt-8"> </span><span 7101 class="cmtt-8"> </span><span 7102 class="cmtt-8"> </span><span 7103 class="cmtt-8"> </span><span 7104 class="cmtt-8"> </span><span 7105 class="cmtt-8"> </span><span 7106 class="cmtt-8"> </span><span 7107 class="cmtt-8"> </span><span 7108 class="cmtt-8"> </span><span 7109 class="cmtt-8"> </span><span 7110 class="cmtt-8"> </span><span 7111 class="cmtt-8"> </span><span 7112 class="cmtt-8"> </span><span 7113 class="cmtt-8"> </span><span 7114 class="cmtt-8"> [book]</span><span 7115 class="cmtt-8"> in</span><span 7116 class="cmtt-8"> scalar</span><span 7117 class="cmtt-8"> context</span> 7118 <br class="fancyvrb" /><a 7119 id="x1-100054r26"></a><span 7120 class="cmr-6">26</span><span 7121 class="cmtt-8"> </span><span 7122 class="cmtt-8"> </span> 7123 <br class="fancyvrb" /><a 7124 id="x1-100056r27"></a><span 7125 class="cmr-6">27</span><span 7126 class="cmtt-8"> </span><span 7127 class="cmtt-8"> </span><span 7128 class="cmtt-8"> </span><span 7129 class="cmtt-8"> </span><span 7130 class="cmtt-8"> </span><span 7131 class="cmtt-8"> </span><span 7132 class="cmtt-8"> </span><span 7133 class="cmtt-8"> </span><span 7134 class="cmtt-8"> </span><span 7135 class="cmtt-8"> </span><span 7136 class="cmtt-8"> </span><span 7137 class="cmtt-8"> </span><span 7138 class="cmtt-8"> </span><span 7139 class="cmtt-8"> </span><span 7140 class="cmtt-8"> </span><span 7141 class="cmtt-8"> </span><span 7142 class="cmtt-8"> </span><span 7143 class="cmtt-8"> </span><span 7144 class="cmtt-8"> </span><span 7145 class="cmsy-8">}</span><span 7146 class="cmtt-8"> else</span><span 7147 class="cmtt-8"> [book]</span><span 7148 class="cmtt-8"> is</span><span 7149 class="cmtt-8"> less</span><span 7150 class="cmtt-8"> than</span><span 7151 class="cmtt-8"> zero</span><span 7152 class="cmtt-8"> </span><span 7153 class="cmsy-8">{</span> 7154 <br class="fancyvrb" /><a 7155 id="x1-100058r28"></a><span 7156 class="cmr-6">28</span><span 7157 class="cmtt-8"> </span><span 7158 class="cmtt-8"> </span> 7159 <br class="fancyvrb" /><a 7160 id="x1-100060r29"></a><span 7161 class="cmr-6">29</span><span 7162 class="cmtt-8"> </span><span 7163 class="cmtt-8">  </span><span 7164 class="cmtt-8"> </span><span 7165 class="cmtt-8"> </span><span 7166 class="cmtt-8"> </span><span 7167 class="cmtt-8"> </span><span 7168 class="cmtt-8"> </span><span 7169 class="cmtt-8"> </span><span 7170 class="cmtt-8"> </span><span 7171 class="cmtt-8"> </span><span 7172 class="cmtt-8"> </span><span 7173 class="cmtt-8"> </span><span 7174 class="cmtt-8"> 18)</span><span 7175 class="cmtt-8"> vector</span><span 7176 class="cmtt-8"> [floor1_Y]</span><span 7177 class="cmtt-8"> element</span><span 7178 class="cmtt-8"> ([j]+[offset])</span><span 7179 class="cmtt-8"> =</span><span 7180 class="cmtt-8"> 0</span> 7181 <br class="fancyvrb" /><a 7182 id="x1-100062r30"></a><span 7183 class="cmr-6">30</span><span 7184 class="cmtt-8"> </span><span 7185 class="cmtt-8"> </span> 7186 <br class="fancyvrb" /><a 7187 id="x1-100064r31"></a><span 7188 class="cmr-6">31</span><span 7189 class="cmtt-8"> </span><span 7190 class="cmtt-8"> </span><span 7191 class="cmtt-8"> </span><span 7192 class="cmtt-8"> </span><span 7193 class="cmtt-8"> </span><span 7194 class="cmtt-8"> </span><span 7195 class="cmtt-8"> </span><span 7196 class="cmtt-8"> </span><span 7197 class="cmtt-8"> </span><span 7198 class="cmtt-8"> </span><span 7199 class="cmtt-8"> </span><span 7200 class="cmtt-8"> </span><span 7201 class="cmtt-8"> </span><span 7202 class="cmtt-8"> </span><span 7203 class="cmtt-8"> </span><span 7204 class="cmtt-8"> </span><span 7205 class="cmtt-8"> </span><span 7206 class="cmtt-8"> </span><span 7207 class="cmtt-8"> </span><span 7208 class="cmsy-8">}</span> 7209 <br class="fancyvrb" /><a 7210 id="x1-100066r32"></a><span 7211 class="cmr-6">32</span><span 7212 class="cmtt-8"> </span><span 7213 class="cmtt-8"> </span><span 7214 class="cmtt-8"> </span><span 7215 class="cmtt-8"> </span><span 7216 class="cmtt-8"> </span><span 7217 class="cmtt-8"> </span><span 7218 class="cmtt-8"> </span><span 7219 class="cmtt-8"> </span><span 7220 class="cmtt-8"> </span><span 7221 class="cmtt-8"> </span><span 7222 class="cmtt-8"> </span><span 7223 class="cmtt-8"> </span><span 7224 class="cmsy-8">}</span> 7225 <br class="fancyvrb" /><a 7226 id="x1-100068r33"></a><span 7227 class="cmr-6">33</span><span 7228 class="cmtt-8"> </span><span 7229 class="cmtt-8"> </span> 7230 <br class="fancyvrb" /><a 7231 id="x1-100070r34"></a><span 7232 class="cmr-6">34</span><span 7233 class="cmtt-8"> </span><span 7234 class="cmtt-8"> </span><span 7235 class="cmtt-8"> </span><span 7236 class="cmtt-8"> </span><span 7237 class="cmtt-8"> </span><span 7238 class="cmtt-8"> </span><span 7239 class="cmtt-8"> </span><span 7240 class="cmtt-8"> 19)</span><span 7241 class="cmtt-8"> [offset]</span><span 7242 class="cmtt-8"> =</span><span 7243 class="cmtt-8"> [offset]</span><span 7244 class="cmtt-8"> +</span><span 7245 class="cmtt-8"> [cdim]</span> 7246 <br class="fancyvrb" /><a 7247 id="x1-100072r35"></a><span 7248 class="cmr-6">35</span><span 7249 class="cmtt-8"> </span><span 7250 class="cmtt-8"> </span> 7251 <br class="fancyvrb" /><a 7252 id="x1-100074r36"></a><span 7253 class="cmr-6">36</span><span 7254 class="cmtt-8"> </span><span 7255 class="cmtt-8"> </span><span 7256 class="cmtt-8"> </span><span 7257 class="cmtt-8"> </span><span 7258 class="cmtt-8"> </span><span 7259 class="cmtt-8"> </span><span 7260 class="cmtt-8"> </span><span 7261 class="cmsy-8">}</span> 7262 <br class="fancyvrb" /><a 7263 id="x1-100076r37"></a><span 7264 class="cmr-6">37</span><span 7265 class="cmtt-8"> </span><span 7266 class="cmtt-8"> </span> 7267 <br class="fancyvrb" /><a 7268 id="x1-100078r38"></a><span 7269 class="cmr-6">38</span><span 7270 class="cmtt-8"> </span><span 7271 class="cmtt-8"> </span><span 7272 class="cmtt-8"> 20)</span><span 7273 class="cmtt-8"> done</span> 7274 </div> 7275 7276 7277 7278 <!--l. 226--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if 7279 end-of-packet is reached during any read operation above, floor decode is to return ’unused’ 7280 status as if the <span 7281 class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode. 7282 <!--l. 232--><p class="noindent" >Vector <span 7283 class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis. 7284 <!--l. 237--><p class="noindent" ><span class="paragraphHead"><a 7285 id="x1-1010007.2.2"></a><span 7286 class="cmbx-12">curve computation</span></span> 7287 Curve computation is split into two logical steps; the first step derives final Y amplitude values 7288 from the encoded, wrapped difference values taken from the bitstream. The second step 7289 plots the curve lines. Also, although zero-difference values are used in the iterative 7290 prediction to find final Y values, these points are conditionally skipped during final 7291 line computation in step two. Skipping zero-difference values allows a smoother line 7292 fit. 7293 <!--l. 247--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations, 7294 implementors are warned to follow the details closely. Deviation from implementing a strictly 7295 equivalent algorithm can result in serious decoding errors. 7296 <!--l. 252--><p class="noindent" > 7297 <dl class="description"><dt class="description"> 7298 <span 7299 class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd 7300 class="description"> 7301 <!--l. 255--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference 7302 values, then apply to line prediction. 7303 <!--l. 258--><p class="noindent" > 7304 <div class="fancyvrb" id="fancyvrb31"> 7305 <a 7306 id="x1-101002r1"></a><span 7307 class="cmr-6">1</span><span 7308 class="cmtt-8"> </span><span 7309 class="cmtt-8"> </span><span 7310 class="cmtt-8"> </span><span 7311 class="cmtt-8"> 1)</span><span 7312 class="cmtt-8"> [range]</span><span 7313 class="cmtt-8"> =</span><span 7314 class="cmtt-8"> vector</span><span 7315 class="cmtt-8"> </span><span 7316 class="cmsy-8">{</span><span 7317 class="cmtt-8"> 256,</span><span 7318 class="cmtt-8"> 128,</span><span 7319 class="cmtt-8"> 86,</span><span 7320 class="cmtt-8"> 64</span><span 7321 class="cmtt-8"> </span><span 7322 class="cmsy-8">}</span><span 7323 class="cmtt-8"> element</span><span 7324 class="cmtt-8"> ([floor1_multiplier]-1)</span> 7325 <br class="fancyvrb" /><a 7326 id="x1-101004r2"></a><span 7327 class="cmr-6">2</span><span 7328 class="cmtt-8"> </span><span 7329 class="cmtt-8"> </span><span 7330 class="cmtt-8"> </span><span 7331 class="cmtt-8"> 2)</span><span 7332 class="cmtt-8"> vector</span><span 7333 class="cmtt-8"> [floor1_step2_flag]</span><span 7334 class="cmtt-8"> element</span><span 7335 class="cmtt-8"> [0]</span><span 7336 class="cmtt-8"> =</span><span 7337 class="cmtt-8"> set</span> 7338 <br class="fancyvrb" /><a 7339 id="x1-101006r3"></a><span 7340 class="cmr-6">3</span><span 7341 class="cmtt-8"> </span><span 7342 class="cmtt-8"> </span><span 7343 class="cmtt-8"> </span><span 7344 class="cmtt-8"> 3)</span><span 7345 class="cmtt-8"> vector</span><span 7346 class="cmtt-8"> [floor1_step2_flag]</span><span 7347 class="cmtt-8"> element</span><span 7348 class="cmtt-8"> [1]</span><span 7349 class="cmtt-8"> =</span><span 7350 class="cmtt-8"> set</span> 7351 <br class="fancyvrb" /><a 7352 id="x1-101008r4"></a><span 7353 class="cmr-6">4</span><span 7354 class="cmtt-8"> </span><span 7355 class="cmtt-8"> </span><span 7356 class="cmtt-8"> </span><span 7357 class="cmtt-8"> 4)</span><span 7358 class="cmtt-8"> vector</span><span 7359 class="cmtt-8"> [floor1_final_Y]</span><span 7360 class="cmtt-8"> element</span><span 7361 class="cmtt-8"> [0]</span><span 7362 class="cmtt-8"> =</span><span 7363 class="cmtt-8"> vector</span><span 7364 class="cmtt-8"> [floor1_Y]</span><span 7365 class="cmtt-8"> element</span><span 7366 class="cmtt-8"> [0]</span> 7367 <br class="fancyvrb" /><a 7368 id="x1-101010r5"></a><span 7369 class="cmr-6">5</span><span 7370 class="cmtt-8"> </span><span 7371 class="cmtt-8"> </span><span 7372 class="cmtt-8"> </span><span 7373 class="cmtt-8"> 5)</span><span 7374 class="cmtt-8"> vector</span><span 7375 class="cmtt-8"> [floor1_final_Y]</span><span 7376 class="cmtt-8"> element</span><span 7377 class="cmtt-8"> [1]</span><span 7378 class="cmtt-8"> =</span><span 7379 class="cmtt-8"> vector</span><span 7380 class="cmtt-8"> [floor1_Y]</span><span 7381 class="cmtt-8"> element</span><span 7382 class="cmtt-8"> [1]</span> 7383 <br class="fancyvrb" /><a 7384 id="x1-101012r6"></a><span 7385 class="cmr-6">6</span><span 7386 class="cmtt-8"> </span><span 7387 class="cmtt-8"> </span><span 7388 class="cmtt-8"> </span><span 7389 class="cmtt-8"> 6)</span><span 7390 class="cmtt-8"> iterate</span><span 7391 class="cmtt-8"> [i]</span><span 7392 class="cmtt-8"> over</span><span 7393 class="cmtt-8"> the</span><span 7394 class="cmtt-8"> range</span><span 7395 class="cmtt-8"> 2</span><span 7396 class="cmtt-8"> ...</span><span 7397 class="cmtt-8"> [floor1_values]-1</span><span 7398 class="cmtt-8"> </span><span 7399 class="cmsy-8">{</span> 7400 <br class="fancyvrb" /><a 7401 id="x1-101014r7"></a><span 7402 class="cmr-6">7</span><span 7403 class="cmtt-8"> </span><span 7404 class="cmtt-8"> </span> 7405 <br class="fancyvrb" /><a 7406 id="x1-101016r8"></a><span 7407 class="cmr-6">8</span><span 7408 class="cmtt-8"> </span><span 7409 class="cmtt-8"> </span><span 7410 class="cmtt-8"> </span><span 7411 class="cmtt-8"> </span><span 7412 class="cmtt-8"> </span><span 7413 class="cmtt-8"> </span><span 7414 class="cmtt-8"> </span><span 7415 class="cmtt-8"> </span><span 7416 class="cmtt-8"> 7)</span><span 7417 class="cmtt-8"> [low_neighbor_offset]</span><span 7418 class="cmtt-8"> =</span><span 7419 class="cmtt-8"> </span><a 7420 href="#x1-1200009.2.4"><span 7421 class="cmtt-8">low_neighbor</span></a><span 7422 class="cmtt-8">([floor1_X_list],[i])</span> 7423 <br class="fancyvrb" /><a 7424 id="x1-101018r9"></a><span 7425 class="cmr-6">9</span><span 7426 class="cmtt-8"> </span><span 7427 class="cmtt-8"> </span><span 7428 class="cmtt-8"> </span><span 7429 class="cmtt-8"> </span><span 7430 class="cmtt-8"> </span><span 7431 class="cmtt-8"> </span><span 7432 class="cmtt-8"> </span><span 7433 class="cmtt-8"> </span><span 7434 class="cmtt-8"> 8)</span><span 7435 class="cmtt-8"> [high_neighbor_offset]</span><span 7436 class="cmtt-8"> =</span><span 7437 class="cmtt-8"> </span><a 7438 href="#x1-1210009.2.5"><span 7439 class="cmtt-8">high_neighbor</span></a><span 7440 class="cmtt-8">([floor1_X_list],[i])</span> 7441 <br class="fancyvrb" /><a 7442 id="x1-101020r10"></a><span 7443 class="cmr-6">10</span><span 7444 class="cmtt-8"> </span><span 7445 class="cmtt-8"> </span> 7446 <br class="fancyvrb" /><a 7447 id="x1-101022r11"></a><span 7448 class="cmr-6">11</span><span 7449 class="cmtt-8"> </span><span 7450 class="cmtt-8"> </span><span 7451 class="cmtt-8"> </span><span 7452 class="cmtt-8"> </span><span 7453 class="cmtt-8"> </span><span 7454 class="cmtt-8"> </span><span 7455 class="cmtt-8"> </span><span 7456 class="cmtt-8"> </span><span 7457 class="cmtt-8"> 9)</span><span 7458 class="cmtt-8"> [predicted]</span><span 7459 class="cmtt-8"> =</span><span 7460 class="cmtt-8"> </span><a 7461 href="#x1-1220009.2.6"><span 7462 class="cmtt-8">render_point</span></a><span 7463 class="cmtt-8">(</span><span 7464 class="cmtt-8"> vector</span><span 7465 class="cmtt-8"> [floor1_X_list]</span><span 7466 class="cmtt-8"> element</span><span 7467 class="cmtt-8"> [low_neighbor_offset],</span> 7468 <br class="fancyvrb" /><a 7469 id="x1-101024r12"></a><span 7470 class="cmr-6">12</span><span 7471 class="cmtt-8"> </span><span 7472 class="cmtt-8">  </span><span 7473 class="cmtt-8"> </span><span 7474 class="cmtt-8"> </span><span 7475 class="cmtt-8"> </span><span 7476 class="cmtt-8"> </span><span 7477 class="cmtt-8"> </span><span 7478 class="cmtt-8"> vector</span><span 7479 class="cmtt-8"> [floor1_final_Y]</span><span 7480 class="cmtt-8"> element</span><span 7481 class="cmtt-8"> [low_neighbor_offset],</span> 7482 <br class="fancyvrb" /><a 7483 id="x1-101026r13"></a><span 7484 class="cmr-6">13</span><span 7485 class="cmtt-8"> </span><span 7486 class="cmtt-8"> </span><span 7487 class="cmtt-8"> </span><span 7488 class="cmtt-8"> </span><span 7489 class="cmtt-8"> </span><span 7490 class="cmtt-8"> </span><span 7491 class="cmtt-8"> </span><span 7492 class="cmtt-8"> </span><span 7493 class="cmtt-8"> </span><span 7494 class="cmtt-8"> </span><span 7495 class="cmtt-8"> </span><span 7496 class="cmtt-8"> </span><span 7497 class="cmtt-8"> </span><span 7498 class="cmtt-8"> </span><span 7499 class="cmtt-8"> </span><span 7500 class="cmtt-8"> </span><span 7501 class="cmtt-8"> </span><span 7502 class="cmtt-8"> </span><span 7503 class="cmtt-8"> </span><span 7504 class="cmtt-8"> </span><span 7505 class="cmtt-8"> </span><span 7506 class="cmtt-8"> </span><span 7507 class="cmtt-8"> </span><span 7508 class="cmtt-8"> </span><span 7509 class="cmtt-8"> </span><span 7510 class="cmtt-8"> </span><span 7511 class="cmtt-8"> </span><span 7512 class="cmtt-8"> </span><span 7513 class="cmtt-8"> </span><span 7514 class="cmtt-8"> </span><span 7515 class="cmtt-8"> </span><span 7516 class="cmtt-8"> </span><span 7517 class="cmtt-8"> </span><span 7518 class="cmtt-8"> </span><span 7519 class="cmtt-8"> </span><span 7520 class="cmtt-8"> </span><span 7521 class="cmtt-8"> </span><span 7522 class="cmtt-8"> </span><span 7523 class="cmtt-8"> </span><span 7524 class="cmtt-8"> vector</span><span 7525 class="cmtt-8"> [floor1_X_list]</span><span 7526 class="cmtt-8"> element</span><span 7527 class="cmtt-8"> [high_neighbor_offset],</span> 7528 <br class="fancyvrb" /><a 7529 id="x1-101028r14"></a><span 7530 class="cmr-6">14</span><span 7531 class="cmtt-8"> </span><span 7532 class="cmtt-8">  </span><span 7533 class="cmtt-8"> </span><span 7534 class="cmtt-8"> </span><span 7535 class="cmtt-8"> </span><span 7536 class="cmtt-8"> </span><span 7537 class="cmtt-8"> </span><span 7538 class="cmtt-8"> vector</span><span 7539 class="cmtt-8"> [floor1_final_Y]</span><span 7540 class="cmtt-8"> element</span><span 7541 class="cmtt-8"> [high_neighbor_offset],</span> 7542 <br class="fancyvrb" /><a 7543 id="x1-101030r15"></a><span 7544 class="cmr-6">15</span><span 7545 class="cmtt-8"> </span><span 7546 class="cmtt-8"> </span><span 7547 class="cmtt-8"> </span><span 7548 class="cmtt-8"> </span><span 7549 class="cmtt-8"> </span><span 7550 class="cmtt-8"> </span><span 7551 class="cmtt-8"> </span><span 7552 class="cmtt-8"> </span><span 7553 class="cmtt-8"> </span><span 7554 class="cmtt-8"> </span><span 7555 class="cmtt-8"> </span><span 7556 class="cmtt-8"> </span><span 7557 class="cmtt-8"> </span><span 7558 class="cmtt-8"> </span><span 7559 class="cmtt-8"> </span><span 7560 class="cmtt-8"> </span><span 7561 class="cmtt-8"> </span><span 7562 class="cmtt-8"> </span><span 7563 class="cmtt-8"> </span><span 7564 class="cmtt-8"> </span><span 7565 class="cmtt-8"> </span><span 7566 class="cmtt-8"> </span><span 7567 class="cmtt-8"> </span><span 7568 class="cmtt-8"> </span><span 7569 class="cmtt-8"> </span><span 7570 class="cmtt-8"> </span><span 7571 class="cmtt-8"> </span><span 7572 class="cmtt-8"> </span><span 7573 class="cmtt-8"> </span><span 7574 class="cmtt-8"> </span><span 7575 class="cmtt-8"> </span><span 7576 class="cmtt-8"> </span><span 7577 class="cmtt-8"> </span><span 7578 class="cmtt-8"> </span><span 7579 class="cmtt-8"> </span><span 7580 class="cmtt-8"> </span><span 7581 class="cmtt-8"> </span><span 7582 class="cmtt-8"> </span><span 7583 class="cmtt-8"> </span><span 7584 class="cmtt-8"> vector</span><span 7585 class="cmtt-8"> [floor1_X_list]</span><span 7586 class="cmtt-8"> element</span><span 7587 class="cmtt-8"> [i]</span><span 7588 class="cmtt-8"> )</span> 7589 <br class="fancyvrb" /><a 7590 id="x1-101032r16"></a><span 7591 class="cmr-6">16</span><span 7592 class="cmtt-8"> </span><span 7593 class="cmtt-8"> </span> 7594 <br class="fancyvrb" /><a 7595 id="x1-101034r17"></a><span 7596 class="cmr-6">17</span><span 7597 class="cmtt-8"> </span><span 7598 class="cmtt-8"> </span><span 7599 class="cmtt-8"> </span><span 7600 class="cmtt-8"> </span><span 7601 class="cmtt-8"> </span><span 7602 class="cmtt-8"> </span><span 7603 class="cmtt-8"> </span><span 7604 class="cmtt-8"> 10)</span><span 7605 class="cmtt-8"> [val]</span><span 7606 class="cmtt-8"> =</span><span 7607 class="cmtt-8"> vector</span><span 7608 class="cmtt-8"> [floor1_Y]</span><span 7609 class="cmtt-8"> element</span><span 7610 class="cmtt-8"> [i]</span> 7611 <br class="fancyvrb" /><a 7612 id="x1-101036r18"></a><span 7613 class="cmr-6">18</span><span 7614 class="cmtt-8"> </span><span 7615 class="cmtt-8"> </span><span 7616 class="cmtt-8"> </span><span 7617 class="cmtt-8"> </span><span 7618 class="cmtt-8"> </span><span 7619 class="cmtt-8"> </span><span 7620 class="cmtt-8"> </span><span 7621 class="cmtt-8"> 11)</span><span 7622 class="cmtt-8"> [highroom]</span><span 7623 class="cmtt-8"> =</span><span 7624 class="cmtt-8"> [range]</span><span 7625 class="cmtt-8"> -</span><span 7626 class="cmtt-8"> [predicted]</span> 7627 <br class="fancyvrb" /><a 7628 id="x1-101038r19"></a><span 7629 class="cmr-6">19</span><span 7630 class="cmtt-8"> </span><span 7631 class="cmtt-8"> </span><span 7632 class="cmtt-8"> </span><span 7633 class="cmtt-8"> </span><span 7634 class="cmtt-8"> </span><span 7635 class="cmtt-8"> </span><span 7636 class="cmtt-8"> </span><span 7637 class="cmtt-8"> 12)</span><span 7638 class="cmtt-8"> [lowroom]</span><span 7639 class="cmtt-8"> </span><span 7640 class="cmtt-8"> =</span><span 7641 class="cmtt-8"> [predicted]</span> 7642 <br class="fancyvrb" /><a 7643 id="x1-101040r20"></a><span 7644 class="cmr-6">20</span><span 7645 class="cmtt-8"> </span><span 7646 class="cmtt-8"> </span><span 7647 class="cmtt-8"> </span><span 7648 class="cmtt-8"> </span><span 7649 class="cmtt-8"> </span><span 7650 class="cmtt-8"> </span><span 7651 class="cmtt-8"> </span><span 7652 class="cmtt-8"> 13)</span><span 7653 class="cmtt-8"> if</span><span 7654 class="cmtt-8"> (</span><span 7655 class="cmtt-8"> [highroom]</span><span 7656 class="cmtt-8"> is</span><span 7657 class="cmtt-8"> less</span><span 7658 class="cmtt-8"> than</span><span 7659 class="cmtt-8"> [lowroom]</span><span 7660 class="cmtt-8"> )</span><span 7661 class="cmtt-8"> </span><span 7662 class="cmsy-8">{</span> 7663 <br class="fancyvrb" /><a 7664 id="x1-101042r21"></a><span 7665 class="cmr-6">21</span><span 7666 class="cmtt-8"> </span><span 7667 class="cmtt-8"> </span> 7668 <br class="fancyvrb" /><a 7669 id="x1-101044r22"></a><span 7670 class="cmr-6">22</span><span 7671 class="cmtt-8"> </span><span 7672 class="cmtt-8"> </span><span 7673 class="cmtt-8"> </span><span 7674 class="cmtt-8"> </span><span 7675 class="cmtt-8"> </span><span 7676 class="cmtt-8"> </span><span 7677 class="cmtt-8"> </span><span 7678 class="cmtt-8"> </span><span 7679 class="cmtt-8"> </span><span 7680 class="cmtt-8"> </span><span 7681 class="cmtt-8"> </span><span 7682 class="cmtt-8"> </span><span 7683 class="cmtt-8"> </span><span 7684 class="cmtt-8"> 14)</span><span 7685 class="cmtt-8"> [room]</span><span 7686 class="cmtt-8"> =</span><span 7687 class="cmtt-8"> [highroom]</span><span 7688 class="cmtt-8"> *</span><span 7689 class="cmtt-8"> 2</span> 7690 7691 7692 7693 <br class="fancyvrb" /><a 7694 id="x1-101046r23"></a><span 7695 class="cmr-6">23</span><span 7696 class="cmtt-8"> </span><span 7697 class="cmtt-8"> </span> 7698 <br class="fancyvrb" /><a 7699 id="x1-101048r24"></a><span 7700 class="cmr-6">24</span><span 7701 class="cmtt-8"> </span><span 7702 class="cmtt-8"> </span><span 7703 class="cmtt-8"> </span><span 7704 class="cmtt-8"> </span><span 7705 class="cmtt-8"> </span><span 7706 class="cmtt-8"> </span><span 7707 class="cmtt-8"> </span><span 7708 class="cmtt-8"> </span><span 7709 class="cmtt-8"> </span><span 7710 class="cmtt-8"> </span><span 7711 class="cmtt-8"> </span><span 7712 class="cmtt-8"> </span><span 7713 class="cmsy-8">}</span><span 7714 class="cmtt-8"> else</span><span 7715 class="cmtt-8"> [highroom]</span><span 7716 class="cmtt-8"> is</span><span 7717 class="cmtt-8"> not</span><span 7718 class="cmtt-8"> less</span><span 7719 class="cmtt-8"> than</span><span 7720 class="cmtt-8"> [lowroom]</span><span 7721 class="cmtt-8"> </span><span 7722 class="cmsy-8">{</span> 7723 <br class="fancyvrb" /><a 7724 id="x1-101050r25"></a><span 7725 class="cmr-6">25</span><span 7726 class="cmtt-8"> </span><span 7727 class="cmtt-8"> </span> 7728 <br class="fancyvrb" /><a 7729 id="x1-101052r26"></a><span 7730 class="cmr-6">26</span><span 7731 class="cmtt-8"> </span><span 7732 class="cmtt-8"> </span><span 7733 class="cmtt-8"> </span><span 7734 class="cmtt-8"> </span><span 7735 class="cmtt-8"> </span><span 7736 class="cmtt-8"> </span><span 7737 class="cmtt-8"> </span><span 7738 class="cmtt-8"> </span><span 7739 class="cmtt-8"> </span><span 7740 class="cmtt-8"> </span><span 7741 class="cmtt-8"> </span><span 7742 class="cmtt-8"> </span><span 7743 class="cmtt-8"> </span><span 7744 class="cmtt-8"> 15)</span><span 7745 class="cmtt-8"> [room]</span><span 7746 class="cmtt-8"> =</span><span 7747 class="cmtt-8"> [lowroom]</span><span 7748 class="cmtt-8"> *</span><span 7749 class="cmtt-8"> 2</span> 7750 <br class="fancyvrb" /><a 7751 id="x1-101054r27"></a><span 7752 class="cmr-6">27</span><span 7753 class="cmtt-8"> </span><span 7754 class="cmtt-8"> </span> 7755 <br class="fancyvrb" /><a 7756 id="x1-101056r28"></a><span 7757 class="cmr-6">28</span><span 7758 class="cmtt-8"> </span><span 7759 class="cmtt-8"> </span><span 7760 class="cmtt-8"> </span><span 7761 class="cmtt-8"> </span><span 7762 class="cmtt-8"> </span><span 7763 class="cmtt-8"> </span><span 7764 class="cmtt-8"> </span><span 7765 class="cmtt-8"> </span><span 7766 class="cmtt-8"> </span><span 7767 class="cmtt-8"> </span><span 7768 class="cmtt-8"> </span><span 7769 class="cmtt-8"> </span><span 7770 class="cmsy-8">}</span> 7771 <br class="fancyvrb" /><a 7772 id="x1-101058r29"></a><span 7773 class="cmr-6">29</span><span 7774 class="cmtt-8"> </span><span 7775 class="cmtt-8"> </span> 7776 <br class="fancyvrb" /><a 7777 id="x1-101060r30"></a><span 7778 class="cmr-6">30</span><span 7779 class="cmtt-8"> </span><span 7780 class="cmtt-8"> </span><span 7781 class="cmtt-8"> </span><span 7782 class="cmtt-8"> </span><span 7783 class="cmtt-8"> </span><span 7784 class="cmtt-8"> </span><span 7785 class="cmtt-8"> </span><span 7786 class="cmtt-8"> 16)</span><span 7787 class="cmtt-8"> if</span><span 7788 class="cmtt-8"> (</span><span 7789 class="cmtt-8"> [val]</span><span 7790 class="cmtt-8"> is</span><span 7791 class="cmtt-8"> nonzero</span><span 7792 class="cmtt-8"> )</span><span 7793 class="cmtt-8"> </span><span 7794 class="cmsy-8">{</span> 7795 <br class="fancyvrb" /><a 7796 id="x1-101062r31"></a><span 7797 class="cmr-6">31</span><span 7798 class="cmtt-8"> </span><span 7799 class="cmtt-8"> </span> 7800 <br class="fancyvrb" /><a 7801 id="x1-101064r32"></a><span 7802 class="cmr-6">32</span><span 7803 class="cmtt-8"> </span><span 7804 class="cmtt-8"> </span><span 7805 class="cmtt-8"> </span><span 7806 class="cmtt-8"> </span><span 7807 class="cmtt-8"> </span><span 7808 class="cmtt-8"> </span><span 7809 class="cmtt-8"> </span><span 7810 class="cmtt-8"> </span><span 7811 class="cmtt-8"> </span><span 7812 class="cmtt-8"> </span><span 7813 class="cmtt-8"> </span><span 7814 class="cmtt-8"> </span><span 7815 class="cmtt-8"> </span><span 7816 class="cmtt-8"> 17)</span><span 7817 class="cmtt-8"> vector</span><span 7818 class="cmtt-8"> [floor1_step2_flag]</span><span 7819 class="cmtt-8"> element</span><span 7820 class="cmtt-8"> [low_neighbor_offset]</span><span 7821 class="cmtt-8"> =</span><span 7822 class="cmtt-8"> set</span> 7823 <br class="fancyvrb" /><a 7824 id="x1-101066r33"></a><span 7825 class="cmr-6">33</span><span 7826 class="cmtt-8"> </span><span 7827 class="cmtt-8"> </span><span 7828 class="cmtt-8"> </span><span 7829 class="cmtt-8"> </span><span 7830 class="cmtt-8"> </span><span 7831 class="cmtt-8"> </span><span 7832 class="cmtt-8"> </span><span 7833 class="cmtt-8"> </span><span 7834 class="cmtt-8"> </span><span 7835 class="cmtt-8"> </span><span 7836 class="cmtt-8"> </span><span 7837 class="cmtt-8"> </span><span 7838 class="cmtt-8"> </span><span 7839 class="cmtt-8"> 18)</span><span 7840 class="cmtt-8"> vector</span><span 7841 class="cmtt-8"> [floor1_step2_flag]</span><span 7842 class="cmtt-8"> element</span><span 7843 class="cmtt-8"> [high_neighbor_offset]</span><span 7844 class="cmtt-8"> =</span><span 7845 class="cmtt-8"> set</span> 7846 <br class="fancyvrb" /><a 7847 id="x1-101068r34"></a><span 7848 class="cmr-6">34</span><span 7849 class="cmtt-8"> </span><span 7850 class="cmtt-8"> </span><span 7851 class="cmtt-8"> </span><span 7852 class="cmtt-8"> </span><span 7853 class="cmtt-8"> </span><span 7854 class="cmtt-8"> </span><span 7855 class="cmtt-8"> </span><span 7856 class="cmtt-8"> </span><span 7857 class="cmtt-8"> </span><span 7858 class="cmtt-8"> </span><span 7859 class="cmtt-8"> </span><span 7860 class="cmtt-8"> </span><span 7861 class="cmtt-8"> </span><span 7862 class="cmtt-8"> 19)</span><span 7863 class="cmtt-8"> vector</span><span 7864 class="cmtt-8"> [floor1_step2_flag]</span><span 7865 class="cmtt-8"> element</span><span 7866 class="cmtt-8"> [i]</span><span 7867 class="cmtt-8"> =</span><span 7868 class="cmtt-8"> set</span> 7869 <br class="fancyvrb" /><a 7870 id="x1-101070r35"></a><span 7871 class="cmr-6">35</span><span 7872 class="cmtt-8"> </span><span 7873 class="cmtt-8"> </span><span 7874 class="cmtt-8"> </span><span 7875 class="cmtt-8"> </span><span 7876 class="cmtt-8"> </span><span 7877 class="cmtt-8"> </span><span 7878 class="cmtt-8"> </span><span 7879 class="cmtt-8"> </span><span 7880 class="cmtt-8"> </span><span 7881 class="cmtt-8"> </span><span 7882 class="cmtt-8"> </span><span 7883 class="cmtt-8"> </span><span 7884 class="cmtt-8"> </span><span 7885 class="cmtt-8"> 20)</span><span 7886 class="cmtt-8"> if</span><span 7887 class="cmtt-8"> (</span><span 7888 class="cmtt-8"> [val]</span><span 7889 class="cmtt-8"> is</span><span 7890 class="cmtt-8"> greater</span><span 7891 class="cmtt-8"> than</span><span 7892 class="cmtt-8"> or</span><span 7893 class="cmtt-8"> equal</span><span 7894 class="cmtt-8"> to</span><span 7895 class="cmtt-8"> [room]</span><span 7896 class="cmtt-8"> )</span><span 7897 class="cmtt-8"> </span><span 7898 class="cmsy-8">{</span> 7899 <br class="fancyvrb" /><a 7900 id="x1-101072r36"></a><span 7901 class="cmr-6">36</span><span 7902 class="cmtt-8"> </span><span 7903 class="cmtt-8"> </span> 7904 <br class="fancyvrb" /><a 7905 id="x1-101074r37"></a><span 7906 class="cmr-6">37</span><span 7907 class="cmtt-8"> </span><span 7908 class="cmtt-8"> </span><span 7909 class="cmtt-8"> </span><span 7910 class="cmtt-8"> </span><span 7911 class="cmtt-8"> </span><span 7912 class="cmtt-8"> </span><span 7913 class="cmtt-8"> </span><span 7914 class="cmtt-8"> </span><span 7915 class="cmtt-8"> </span><span 7916 class="cmtt-8"> </span><span 7917 class="cmtt-8"> </span><span 7918 class="cmtt-8"> </span><span 7919 class="cmtt-8"> </span><span 7920 class="cmtt-8"> </span><span 7921 class="cmtt-8"> </span><span 7922 class="cmtt-8"> </span><span 7923 class="cmtt-8"> </span><span 7924 class="cmtt-8"> </span><span 7925 class="cmtt-8"> </span><span 7926 class="cmtt-8"> 21)</span><span 7927 class="cmtt-8"> if</span><span 7928 class="cmtt-8"> (</span><span 7929 class="cmtt-8"> [highroom]</span><span 7930 class="cmtt-8"> is</span><span 7931 class="cmtt-8"> greater</span><span 7932 class="cmtt-8"> than</span><span 7933 class="cmtt-8"> [lowroom]</span><span 7934 class="cmtt-8"> )</span><span 7935 class="cmtt-8"> </span><span 7936 class="cmsy-8">{</span> 7937 <br class="fancyvrb" /><a 7938 id="x1-101076r38"></a><span 7939 class="cmr-6">38</span><span 7940 class="cmtt-8"> </span><span 7941 class="cmtt-8"> </span> 7942 <br class="fancyvrb" /><a 7943 id="x1-101078r39"></a><span 7944 class="cmr-6">39</span><span 7945 class="cmtt-8"> </span><span 7946 class="cmtt-8"> </span><span 7947 class="cmtt-8"> </span><span 7948 class="cmtt-8"> </span><span 7949 class="cmtt-8"> </span><span 7950 class="cmtt-8"> </span><span 7951 class="cmtt-8"> </span><span 7952 class="cmtt-8"> </span><span 7953 class="cmtt-8"> </span><span 7954 class="cmtt-8"> </span><span 7955 class="cmtt-8"> </span><span 7956 class="cmtt-8"> </span><span 7957 class="cmtt-8"> </span><span 7958 class="cmtt-8"> </span><span 7959 class="cmtt-8"> </span><span 7960 class="cmtt-8"> </span><span 7961 class="cmtt-8"> </span><span 7962 class="cmtt-8"> </span><span 7963 class="cmtt-8"> </span><span 7964 class="cmtt-8"> </span><span 7965 class="cmtt-8"> </span><span 7966 class="cmtt-8"> </span><span 7967 class="cmtt-8"> </span><span 7968 class="cmtt-8"> </span><span 7969 class="cmtt-8"> </span><span 7970 class="cmtt-8"> 22)</span><span 7971 class="cmtt-8"> vector</span><span 7972 class="cmtt-8"> [floor1_final_Y]</span><span 7973 class="cmtt-8"> element</span><span 7974 class="cmtt-8"> [i]</span><span 7975 class="cmtt-8"> =</span><span 7976 class="cmtt-8"> [val]</span><span 7977 class="cmtt-8"> -</span><span 7978 class="cmtt-8"> [lowroom]</span><span 7979 class="cmtt-8"> +</span><span 7980 class="cmtt-8"> [predicted]</span> 7981 <br class="fancyvrb" /><a 7982 id="x1-101080r40"></a><span 7983 class="cmr-6">40</span><span 7984 class="cmtt-8"> </span><span 7985 class="cmtt-8"> </span> 7986 <br class="fancyvrb" /><a 7987 id="x1-101082r41"></a><span 7988 class="cmr-6">41</span><span 7989 class="cmtt-8"> </span><span 7990 class="cmtt-8">  </span><span 7991 class="cmtt-8"> </span><span 7992 class="cmtt-8"> </span><span 7993 class="cmtt-8"> </span><span 7994 class="cmtt-8"> </span><span 7995 class="cmtt-8"> </span><span 7996 class="cmtt-8"> </span><span 7997 class="cmsy-8">}</span><span 7998 class="cmtt-8"> else</span><span 7999 class="cmtt-8"> [highroom]</span><span 8000 class="cmtt-8"> is</span><span 8001 class="cmtt-8"> not</span><span 8002 class="cmtt-8"> greater</span><span 8003 class="cmtt-8"> than</span><span 8004 class="cmtt-8"> [lowroom]</span><span 8005 class="cmtt-8"> </span><span 8006 class="cmsy-8">{</span> 8007 <br class="fancyvrb" /><a 8008 id="x1-101084r42"></a><span 8009 class="cmr-6">42</span><span 8010 class="cmtt-8"> </span><span 8011 class="cmtt-8"> </span> 8012 <br class="fancyvrb" /><a 8013 id="x1-101086r43"></a><span 8014 class="cmr-6">43</span><span 8015 class="cmtt-8"> </span><span 8016 class="cmtt-8"> </span><span 8017 class="cmtt-8"> </span><span 8018 class="cmtt-8"> </span><span 8019 class="cmtt-8"> </span><span 8020 class="cmtt-8"> </span><span 8021 class="cmtt-8"> </span><span 8022 class="cmtt-8"> </span><span 8023 class="cmtt-8"> </span><span 8024 class="cmtt-8"> </span><span 8025 class="cmtt-8"> </span><span 8026 class="cmtt-8"> </span><span 8027 class="cmtt-8"> </span><span 8028 class="cmtt-8"> </span><span 8029 class="cmtt-8"> </span><span 8030 class="cmtt-8"> </span><span 8031 class="cmtt-8"> </span><span 8032 class="cmtt-8"> </span><span 8033 class="cmtt-8"> </span><span 8034 class="cmtt-8"> </span><span 8035 class="cmtt-8"> </span><span 8036 class="cmtt-8"> </span><span 8037 class="cmtt-8"> </span><span 8038 class="cmtt-8"> </span><span 8039 class="cmtt-8"> </span><span 8040 class="cmtt-8"> 23)</span><span 8041 class="cmtt-8"> vector</span><span 8042 class="cmtt-8"> [floor1_final_Y]</span><span 8043 class="cmtt-8"> element</span><span 8044 class="cmtt-8"> [i]</span><span 8045 class="cmtt-8"> =</span><span 8046 class="cmtt-8"> [predicted]</span><span 8047 class="cmtt-8"> -</span><span 8048 class="cmtt-8"> [val]</span><span 8049 class="cmtt-8"> +</span><span 8050 class="cmtt-8"> [highroom]</span><span 8051 class="cmtt-8"> -</span><span 8052 class="cmtt-8"> 1</span> 8053 <br class="fancyvrb" /><a 8054 id="x1-101088r44"></a><span 8055 class="cmr-6">44</span><span 8056 class="cmtt-8"> </span><span 8057 class="cmtt-8"> </span> 8058 <br class="fancyvrb" /><a 8059 id="x1-101090r45"></a><span 8060 class="cmr-6">45</span><span 8061 class="cmtt-8"> </span><span 8062 class="cmtt-8"> </span><span 8063 class="cmtt-8"> </span><span 8064 class="cmtt-8"> </span><span 8065 class="cmtt-8"> </span><span 8066 class="cmtt-8"> </span><span 8067 class="cmtt-8"> </span><span 8068 class="cmtt-8"> </span><span 8069 class="cmtt-8"> </span><span 8070 class="cmtt-8"> </span><span 8071 class="cmtt-8"> </span><span 8072 class="cmtt-8"> </span><span 8073 class="cmtt-8"> </span><span 8074 class="cmtt-8"> </span><span 8075 class="cmtt-8"> </span><span 8076 class="cmtt-8"> </span><span 8077 class="cmtt-8"> </span><span 8078 class="cmtt-8"> </span><span 8079 class="cmtt-8"> </span><span 8080 class="cmtt-8"> </span><span 8081 class="cmtt-8"> </span><span 8082 class="cmtt-8"> </span><span 8083 class="cmtt-8"> </span><span 8084 class="cmtt-8"> </span><span 8085 class="cmsy-8">}</span> 8086 <br class="fancyvrb" /><a 8087 id="x1-101092r46"></a><span 8088 class="cmr-6">46</span><span 8089 class="cmtt-8"> </span><span 8090 class="cmtt-8"> </span> 8091 <br class="fancyvrb" /><a 8092 id="x1-101094r47"></a><span 8093 class="cmr-6">47</span><span 8094 class="cmtt-8"> </span><span 8095 class="cmtt-8"> </span><span 8096 class="cmtt-8"> </span><span 8097 class="cmtt-8"> </span><span 8098 class="cmtt-8"> </span><span 8099 class="cmtt-8"> </span><span 8100 class="cmtt-8"> </span><span 8101 class="cmtt-8"> </span><span 8102 class="cmtt-8"> </span><span 8103 class="cmtt-8"> </span><span 8104 class="cmtt-8"> </span><span 8105 class="cmtt-8"> </span><span 8106 class="cmtt-8"> </span><span 8107 class="cmtt-8"> </span><span 8108 class="cmtt-8"> </span><span 8109 class="cmtt-8"> </span><span 8110 class="cmtt-8"> </span><span 8111 class="cmtt-8"> </span><span 8112 class="cmsy-8">}</span><span 8113 class="cmtt-8"> else</span><span 8114 class="cmtt-8"> [val]</span><span 8115 class="cmtt-8"> is</span><span 8116 class="cmtt-8"> less</span><span 8117 class="cmtt-8"> than</span><span 8118 class="cmtt-8"> [room]</span><span 8119 class="cmtt-8"> </span><span 8120 class="cmsy-8">{</span> 8121 <br class="fancyvrb" /><a 8122 id="x1-101096r48"></a><span 8123 class="cmr-6">48</span><span 8124 class="cmtt-8"> </span><span 8125 class="cmtt-8"> </span> 8126 <br class="fancyvrb" /><a 8127 id="x1-101098r49"></a><span 8128 class="cmr-6">49</span><span 8129 class="cmtt-8"> </span><span 8130 class="cmtt-8">  </span><span 8131 class="cmtt-8"> </span><span 8132 class="cmtt-8"> 24)</span><span 8133 class="cmtt-8"> if</span><span 8134 class="cmtt-8"> ([val]</span><span 8135 class="cmtt-8"> is</span><span 8136 class="cmtt-8"> odd)</span><span 8137 class="cmtt-8"> </span><span 8138 class="cmsy-8">{</span> 8139 <br class="fancyvrb" /><a 8140 id="x1-101100r50"></a><span 8141 class="cmr-6">50</span><span 8142 class="cmtt-8"> </span><span 8143 class="cmtt-8"> </span> 8144 <br class="fancyvrb" /><a 8145 id="x1-101102r51"></a><span 8146 class="cmr-6">51</span><span 8147 class="cmtt-8"> </span><span 8148 class="cmtt-8"> </span><span 8149 class="cmtt-8"> </span><span 8150 class="cmtt-8"> </span><span 8151 class="cmtt-8"> </span><span 8152 class="cmtt-8"> </span><span 8153 class="cmtt-8"> </span><span 8154 class="cmtt-8"> </span><span 8155 class="cmtt-8"> </span><span 8156 class="cmtt-8"> </span><span 8157 class="cmtt-8"> </span><span 8158 class="cmtt-8"> </span><span 8159 class="cmtt-8"> </span><span 8160 class="cmtt-8"> </span><span 8161 class="cmtt-8"> </span><span 8162 class="cmtt-8"> </span><span 8163 class="cmtt-8"> </span><span 8164 class="cmtt-8"> </span><span 8165 class="cmtt-8"> </span><span 8166 class="cmtt-8"> </span><span 8167 class="cmtt-8"> </span><span 8168 class="cmtt-8"> </span><span 8169 class="cmtt-8"> </span><span 8170 class="cmtt-8"> </span><span 8171 class="cmtt-8"> </span><span 8172 class="cmtt-8"> 25)</span><span 8173 class="cmtt-8"> vector</span><span 8174 class="cmtt-8"> [floor1_final_Y]</span><span 8175 class="cmtt-8"> element</span><span 8176 class="cmtt-8"> [i]</span><span 8177 class="cmtt-8"> =</span> 8178 <br class="fancyvrb" /><a 8179 id="x1-101104r52"></a><span 8180 class="cmr-6">52</span><span 8181 class="cmtt-8"> </span><span 8182 class="cmtt-8"> </span><span 8183 class="cmtt-8"> </span><span 8184 class="cmtt-8"> </span><span 8185 class="cmtt-8"> </span><span 8186 class="cmtt-8"> </span><span 8187 class="cmtt-8"> </span><span 8188 class="cmtt-8"> </span><span 8189 class="cmtt-8"> </span><span 8190 class="cmtt-8"> </span><span 8191 class="cmtt-8"> </span><span 8192 class="cmtt-8"> </span><span 8193 class="cmtt-8"> </span><span 8194 class="cmtt-8"> </span><span 8195 class="cmtt-8"> </span><span 8196 class="cmtt-8"> </span><span 8197 class="cmtt-8"> </span><span 8198 class="cmtt-8"> </span><span 8199 class="cmtt-8"> </span><span 8200 class="cmtt-8"> </span><span 8201 class="cmtt-8"> </span><span 8202 class="cmtt-8"> </span><span 8203 class="cmtt-8"> </span><span 8204 class="cmtt-8"> </span><span 8205 class="cmtt-8"> </span><span 8206 class="cmtt-8"> </span><span 8207 class="cmtt-8"> </span><span 8208 class="cmtt-8"> </span><span 8209 class="cmtt-8"> </span><span 8210 class="cmtt-8"> [predicted]</span><span 8211 class="cmtt-8"> -</span><span 8212 class="cmtt-8"> (([val]</span><span 8213 class="cmtt-8"> +</span><span 8214 class="cmtt-8"> 1)</span><span 8215 class="cmtt-8"> divided</span><span 8216 class="cmtt-8"> by</span><span 8217 class="cmtt-8"> </span><span 8218 class="cmtt-8"> 2</span><span 8219 class="cmtt-8"> using</span><span 8220 class="cmtt-8"> integer</span><span 8221 class="cmtt-8"> division)</span> 8222 <br class="fancyvrb" /><a 8223 id="x1-101106r53"></a><span 8224 class="cmr-6">53</span><span 8225 class="cmtt-8"> </span><span 8226 class="cmtt-8"> </span> 8227 <br class="fancyvrb" /><a 8228 id="x1-101108r54"></a><span 8229 class="cmr-6">54</span><span 8230 class="cmtt-8"> </span><span 8231 class="cmtt-8"> </span><span 8232 class="cmtt-8"> </span><span 8233 class="cmtt-8"> </span><span 8234 class="cmtt-8"> </span><span 8235 class="cmtt-8"> </span><span 8236 class="cmtt-8"> </span><span 8237 class="cmtt-8"> </span><span 8238 class="cmtt-8"> </span><span 8239 class="cmtt-8"> </span><span 8240 class="cmtt-8"> </span><span 8241 class="cmtt-8"> </span><span 8242 class="cmtt-8"> </span><span 8243 class="cmtt-8"> </span><span 8244 class="cmtt-8"> </span><span 8245 class="cmtt-8"> </span><span 8246 class="cmtt-8"> </span><span 8247 class="cmtt-8"> </span><span 8248 class="cmtt-8"> </span><span 8249 class="cmtt-8"> </span><span 8250 class="cmtt-8"> </span><span 8251 class="cmtt-8"> </span><span 8252 class="cmtt-8"> </span><span 8253 class="cmtt-8"> </span><span 8254 class="cmsy-8">}</span><span 8255 class="cmtt-8"> else</span><span 8256 class="cmtt-8"> [val]</span><span 8257 class="cmtt-8"> is</span><span 8258 class="cmtt-8"> even</span><span 8259 class="cmtt-8"> </span><span 8260 class="cmsy-8">{</span> 8261 <br class="fancyvrb" /><a 8262 id="x1-101110r55"></a><span 8263 class="cmr-6">55</span><span 8264 class="cmtt-8"> </span><span 8265 class="cmtt-8"> </span> 8266 <br class="fancyvrb" /><a 8267 id="x1-101112r56"></a><span 8268 class="cmr-6">56</span><span 8269 class="cmtt-8"> </span><span 8270 class="cmtt-8"> </span><span 8271 class="cmtt-8"> </span><span 8272 class="cmtt-8"> </span><span 8273 class="cmtt-8"> </span><span 8274 class="cmtt-8"> </span><span 8275 class="cmtt-8"> </span><span 8276 class="cmtt-8"> </span><span 8277 class="cmtt-8"> </span><span 8278 class="cmtt-8"> </span><span 8279 class="cmtt-8"> </span><span 8280 class="cmtt-8"> </span><span 8281 class="cmtt-8"> </span><span 8282 class="cmtt-8"> </span><span 8283 class="cmtt-8"> </span><span 8284 class="cmtt-8"> </span><span 8285 class="cmtt-8"> </span><span 8286 class="cmtt-8"> </span><span 8287 class="cmtt-8"> </span><span 8288 class="cmtt-8"> </span><span 8289 class="cmtt-8"> </span><span 8290 class="cmtt-8"> </span><span 8291 class="cmtt-8"> </span><span 8292 class="cmtt-8"> </span><span 8293 class="cmtt-8"> </span><span 8294 class="cmtt-8"> 26)</span><span 8295 class="cmtt-8"> vector</span><span 8296 class="cmtt-8"> [floor1_final_Y]</span><span 8297 class="cmtt-8"> element</span><span 8298 class="cmtt-8"> [i]</span><span 8299 class="cmtt-8"> =</span> 8300 <br class="fancyvrb" /><a 8301 id="x1-101114r57"></a><span 8302 class="cmr-6">57</span><span 8303 class="cmtt-8"> </span><span 8304 class="cmtt-8"> </span><span 8305 class="cmtt-8"> </span><span 8306 class="cmtt-8"> </span><span 8307 class="cmtt-8"> </span><span 8308 class="cmtt-8"> </span><span 8309 class="cmtt-8"> </span><span 8310 class="cmtt-8"> </span><span 8311 class="cmtt-8"> </span><span 8312 class="cmtt-8"> </span><span 8313 class="cmtt-8"> </span><span 8314 class="cmtt-8"> </span><span 8315 class="cmtt-8"> </span><span 8316 class="cmtt-8"> </span><span 8317 class="cmtt-8"> </span><span 8318 class="cmtt-8"> </span><span 8319 class="cmtt-8"> </span><span 8320 class="cmtt-8"> </span><span 8321 class="cmtt-8"> </span><span 8322 class="cmtt-8"> </span><span 8323 class="cmtt-8"> </span><span 8324 class="cmtt-8"> </span><span 8325 class="cmtt-8"> </span><span 8326 class="cmtt-8"> </span><span 8327 class="cmtt-8"> </span><span 8328 class="cmtt-8"> </span><span 8329 class="cmtt-8"> </span><span 8330 class="cmtt-8"> </span><span 8331 class="cmtt-8"> </span><span 8332 class="cmtt-8"> [predicted]</span><span 8333 class="cmtt-8"> +</span><span 8334 class="cmtt-8"> ([val]</span><span 8335 class="cmtt-8"> /</span><span 8336 class="cmtt-8"> 2</span><span 8337 class="cmtt-8"> using</span><span 8338 class="cmtt-8"> integer</span><span 8339 class="cmtt-8"> division)</span> 8340 <br class="fancyvrb" /><a 8341 id="x1-101116r58"></a><span 8342 class="cmr-6">58</span><span 8343 class="cmtt-8"> </span><span 8344 class="cmtt-8"> </span> 8345 <br class="fancyvrb" /><a 8346 id="x1-101118r59"></a><span 8347 class="cmr-6">59</span><span 8348 class="cmtt-8"> </span><span 8349 class="cmtt-8"> </span><span 8350 class="cmtt-8"> </span><span 8351 class="cmtt-8"> </span><span 8352 class="cmtt-8"> </span><span 8353 class="cmtt-8"> </span><span 8354 class="cmtt-8"> </span><span 8355 class="cmtt-8"> </span><span 8356 class="cmtt-8"> </span><span 8357 class="cmtt-8"> </span><span 8358 class="cmtt-8"> </span><span 8359 class="cmtt-8"> </span><span 8360 class="cmtt-8"> </span><span 8361 class="cmtt-8"> </span><span 8362 class="cmtt-8"> </span><span 8363 class="cmtt-8"> </span><span 8364 class="cmtt-8"> </span><span 8365 class="cmtt-8"> </span><span 8366 class="cmtt-8"> </span><span 8367 class="cmtt-8"> </span><span 8368 class="cmtt-8"> </span><span 8369 class="cmtt-8"> </span><span 8370 class="cmtt-8"> </span><span 8371 class="cmtt-8"> </span><span 8372 class="cmsy-8">}</span> 8373 <br class="fancyvrb" /><a 8374 id="x1-101120r60"></a><span 8375 class="cmr-6">60</span><span 8376 class="cmtt-8"> </span><span 8377 class="cmtt-8"> </span> 8378 <br class="fancyvrb" /><a 8379 id="x1-101122r61"></a><span 8380 class="cmr-6">61</span><span 8381 class="cmtt-8"> </span><span 8382 class="cmtt-8"> </span><span 8383 class="cmtt-8"> </span><span 8384 class="cmtt-8"> </span><span 8385 class="cmtt-8"> </span><span 8386 class="cmtt-8"> </span><span 8387 class="cmtt-8"> </span><span 8388 class="cmtt-8"> </span><span 8389 class="cmtt-8"> </span><span 8390 class="cmtt-8"> </span><span 8391 class="cmtt-8"> </span><span 8392 class="cmtt-8"> </span><span 8393 class="cmtt-8"> </span><span 8394 class="cmtt-8"> </span><span 8395 class="cmtt-8"> </span><span 8396 class="cmtt-8"> </span><span 8397 class="cmtt-8"> </span><span 8398 class="cmtt-8"> </span><span 8399 class="cmsy-8">}</span> 8400 <br class="fancyvrb" /><a 8401 id="x1-101124r62"></a><span 8402 class="cmr-6">62</span><span 8403 class="cmtt-8"> </span><span 8404 class="cmtt-8"> </span> 8405 <br class="fancyvrb" /><a 8406 id="x1-101126r63"></a><span 8407 class="cmr-6">63</span><span 8408 class="cmtt-8"> </span><span 8409 class="cmtt-8"> </span><span 8410 class="cmtt-8"> </span><span 8411 class="cmtt-8"> </span><span 8412 class="cmtt-8"> </span><span 8413 class="cmtt-8"> </span><span 8414 class="cmtt-8"> </span><span 8415 class="cmtt-8"> </span><span 8416 class="cmtt-8"> </span><span 8417 class="cmtt-8"> </span><span 8418 class="cmtt-8"> </span><span 8419 class="cmtt-8"> </span><span 8420 class="cmsy-8">}</span><span 8421 class="cmtt-8"> else</span><span 8422 class="cmtt-8"> [val]</span><span 8423 class="cmtt-8"> is</span><span 8424 class="cmtt-8"> zero</span><span 8425 class="cmtt-8"> </span><span 8426 class="cmsy-8">{</span> 8427 <br class="fancyvrb" /><a 8428 id="x1-101128r64"></a><span 8429 class="cmr-6">64</span><span 8430 class="cmtt-8"> </span><span 8431 class="cmtt-8"> </span> 8432 <br class="fancyvrb" /><a 8433 id="x1-101130r65"></a><span 8434 class="cmr-6">65</span><span 8435 class="cmtt-8"> </span><span 8436 class="cmtt-8"> </span><span 8437 class="cmtt-8"> </span><span 8438 class="cmtt-8"> </span><span 8439 class="cmtt-8"> </span><span 8440 class="cmtt-8"> </span><span 8441 class="cmtt-8"> </span><span 8442 class="cmtt-8"> </span><span 8443 class="cmtt-8"> </span><span 8444 class="cmtt-8"> </span><span 8445 class="cmtt-8"> </span><span 8446 class="cmtt-8"> </span><span 8447 class="cmtt-8"> </span><span 8448 class="cmtt-8"> 27)</span><span 8449 class="cmtt-8"> vector</span><span 8450 class="cmtt-8"> [floor1_step2_flag]</span><span 8451 class="cmtt-8"> element</span><span 8452 class="cmtt-8"> [i]</span><span 8453 class="cmtt-8"> =</span><span 8454 class="cmtt-8"> unset</span> 8455 <br class="fancyvrb" /><a 8456 id="x1-101132r66"></a><span 8457 class="cmr-6">66</span><span 8458 class="cmtt-8"> </span><span 8459 class="cmtt-8"> </span><span 8460 class="cmtt-8"> </span><span 8461 class="cmtt-8"> </span><span 8462 class="cmtt-8"> </span><span 8463 class="cmtt-8"> </span><span 8464 class="cmtt-8"> </span><span 8465 class="cmtt-8"> </span><span 8466 class="cmtt-8"> </span><span 8467 class="cmtt-8"> </span><span 8468 class="cmtt-8"> </span><span 8469 class="cmtt-8"> </span><span 8470 class="cmtt-8"> </span><span 8471 class="cmtt-8"> 28)</span><span 8472 class="cmtt-8"> vector</span><span 8473 class="cmtt-8"> [floor1_final_Y]</span><span 8474 class="cmtt-8"> element</span><span 8475 class="cmtt-8"> [i]</span><span 8476 class="cmtt-8"> =</span><span 8477 class="cmtt-8"> [predicted]</span> 8478 <br class="fancyvrb" /><a 8479 id="x1-101134r67"></a><span 8480 class="cmr-6">67</span><span 8481 class="cmtt-8"> </span><span 8482 class="cmtt-8"> </span> 8483 <br class="fancyvrb" /><a 8484 id="x1-101136r68"></a><span 8485 class="cmr-6">68</span><span 8486 class="cmtt-8"> </span><span 8487 class="cmtt-8"> </span><span 8488 class="cmtt-8"> </span><span 8489 class="cmtt-8"> </span><span 8490 class="cmtt-8"> </span><span 8491 class="cmtt-8"> </span><span 8492 class="cmtt-8"> </span><span 8493 class="cmtt-8"> </span><span 8494 class="cmtt-8"> </span><span 8495 class="cmtt-8"> </span><span 8496 class="cmtt-8"> </span><span 8497 class="cmtt-8"> </span><span 8498 class="cmsy-8">}</span> 8499 <br class="fancyvrb" /><a 8500 id="x1-101138r69"></a><span 8501 class="cmr-6">69</span><span 8502 class="cmtt-8"> </span><span 8503 class="cmtt-8"> </span> 8504 <br class="fancyvrb" /><a 8505 id="x1-101140r70"></a><span 8506 class="cmr-6">70</span><span 8507 class="cmtt-8"> </span><span 8508 class="cmtt-8"> </span><span 8509 class="cmtt-8"> </span><span 8510 class="cmtt-8"> </span><span 8511 class="cmtt-8"> </span><span 8512 class="cmtt-8"> </span><span 8513 class="cmtt-8"> </span><span 8514 class="cmsy-8">}</span> 8515 <br class="fancyvrb" /><a 8516 id="x1-101142r71"></a><span 8517 class="cmr-6">71</span><span 8518 class="cmtt-8"> </span><span 8519 class="cmtt-8"> </span> 8520 <br class="fancyvrb" /><a 8521 id="x1-101144r72"></a><span 8522 class="cmr-6">72</span><span 8523 class="cmtt-8"> </span><span 8524 class="cmtt-8"> </span><span 8525 class="cmtt-8"> 29)</span><span 8526 class="cmtt-8"> done</span> 8527 <br class="fancyvrb" /><a 8528 id="x1-101146r73"></a><span 8529 class="cmr-6">73</span><span 8530 class="cmtt-8"> </span><span 8531 class="cmtt-8"> </span> 8532 </div> 8533 </dd><dt class="description"> 8534 <span 8535 class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd 8536 class="description"> 8537 <!--l. 338--><p class="noindent" >Curve synthesis generates a return vector <span 8538 class="cmtt-12">[floor] </span>of length <span 8539 class="cmtt-12">[n] </span>(where <span 8540 class="cmtt-12">[n] </span>is provided by 8541 the decode process calling to floor decode). Floor 1 curve synthesis makes use of the 8542 <span 8543 class="cmtt-12">[floor1_X_list]</span>, <span 8544 class="cmtt-12">[floor1_final_Y] </span>and <span 8545 class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as 8546 [floor1˙multiplier] and [floor1˙values] values. 8547 8548 8549 8550 <!--l. 345--><p class="noindent" >Decode begins by sorting the scalars from vectors <span 8551 class="cmtt-12">[floor1_X_list]</span>, <span 8552 class="cmtt-12">[floor1_final_Y] </span>and 8553 <span 8554 class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span 8555 class="cmtt-12">[floor1_X_list]’</span>, <span 8556 class="cmtt-12">[floor1_final_Y]’</span> 8557 and <span 8558 class="cmtt-12">[floor1_step2_flag]’ </span>according to ascending sort order of the values in 8559 <span 8560 class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span 8561 class="cmtt-12">[floor1_X_list] </span>and then apply the same 8562 permutation to elements of the other two vectors so that the X, Y and step2˙flag values still 8563 match. 8564 <!--l. 355--><p class="noindent" >Then compute the final curve in one pass: 8565 <!--l. 357--><p class="noindent" > 8566 <div class="fancyvrb" id="fancyvrb32"> 8567 <a 8568 id="x1-101148r1"></a><span 8569 class="cmr-6">1</span><span 8570 class="cmtt-8"> </span><span 8571 class="cmtt-8"> </span><span 8572 class="cmtt-8"> </span><span 8573 class="cmtt-8"> 1)</span><span 8574 class="cmtt-8"> [hx]</span><span 8575 class="cmtt-8"> =</span><span 8576 class="cmtt-8"> 0</span> 8577 <br class="fancyvrb" /><a 8578 id="x1-101150r2"></a><span 8579 class="cmr-6">2</span><span 8580 class="cmtt-8"> </span><span 8581 class="cmtt-8"> </span><span 8582 class="cmtt-8"> </span><span 8583 class="cmtt-8"> 2)</span><span 8584 class="cmtt-8"> [lx]</span><span 8585 class="cmtt-8"> =</span><span 8586 class="cmtt-8"> 0</span> 8587 <br class="fancyvrb" /><a 8588 id="x1-101152r3"></a><span 8589 class="cmr-6">3</span><span 8590 class="cmtt-8"> </span><span 8591 class="cmtt-8"> </span><span 8592 class="cmtt-8"> </span><span 8593 class="cmtt-8"> 3)</span><span 8594 class="cmtt-8"> [ly]</span><span 8595 class="cmtt-8"> =</span><span 8596 class="cmtt-8"> vector</span><span 8597 class="cmtt-8"> [floor1_final_Y]’</span><span 8598 class="cmtt-8"> element</span><span 8599 class="cmtt-8"> [0]</span><span 8600 class="cmtt-8"> *</span><span 8601 class="cmtt-8"> [floor1_multiplier]</span> 8602 <br class="fancyvrb" /><a 8603 id="x1-101154r4"></a><span 8604 class="cmr-6">4</span><span 8605 class="cmtt-8"> </span><span 8606 class="cmtt-8"> </span><span 8607 class="cmtt-8"> </span><span 8608 class="cmtt-8"> 4)</span><span 8609 class="cmtt-8"> iterate</span><span 8610 class="cmtt-8"> [i]</span><span 8611 class="cmtt-8"> over</span><span 8612 class="cmtt-8"> the</span><span 8613 class="cmtt-8"> range</span><span 8614 class="cmtt-8"> 1</span><span 8615 class="cmtt-8"> ...</span><span 8616 class="cmtt-8"> [floor1_values]-1</span><span 8617 class="cmtt-8"> </span><span 8618 class="cmsy-8">{</span> 8619 <br class="fancyvrb" /><a 8620 id="x1-101156r5"></a><span 8621 class="cmr-6">5</span><span 8622 class="cmtt-8"> </span><span 8623 class="cmtt-8"> </span> 8624 <br class="fancyvrb" /><a 8625 id="x1-101158r6"></a><span 8626 class="cmr-6">6</span><span 8627 class="cmtt-8"> </span><span 8628 class="cmtt-8"> </span><span 8629 class="cmtt-8"> </span><span 8630 class="cmtt-8"> </span><span 8631 class="cmtt-8"> </span><span 8632 class="cmtt-8"> </span><span 8633 class="cmtt-8"> </span><span 8634 class="cmtt-8"> </span><span 8635 class="cmtt-8"> 5)</span><span 8636 class="cmtt-8"> if</span><span 8637 class="cmtt-8"> (</span><span 8638 class="cmtt-8"> [floor1_step2_flag]’</span><span 8639 class="cmtt-8"> element</span><span 8640 class="cmtt-8"> [i]</span><span 8641 class="cmtt-8"> is</span><span 8642 class="cmtt-8"> set</span><span 8643 class="cmtt-8"> )</span><span 8644 class="cmtt-8"> </span><span 8645 class="cmsy-8">{</span> 8646 <br class="fancyvrb" /><a 8647 id="x1-101160r7"></a><span 8648 class="cmr-6">7</span><span 8649 class="cmtt-8"> </span><span 8650 class="cmtt-8"> </span> 8651 <br class="fancyvrb" /><a 8652 id="x1-101162r8"></a><span 8653 class="cmr-6">8</span><span 8654 class="cmtt-8"> </span><span 8655 class="cmtt-8"> </span><span 8656 class="cmtt-8"> </span><span 8657 class="cmtt-8"> </span><span 8658 class="cmtt-8"> </span><span 8659 class="cmtt-8"> </span><span 8660 class="cmtt-8"> </span><span 8661 class="cmtt-8"> </span><span 8662 class="cmtt-8"> </span><span 8663 class="cmtt-8"> </span><span 8664 class="cmtt-8"> </span><span 8665 class="cmtt-8"> </span><span 8666 class="cmtt-8"> </span><span 8667 class="cmtt-8"> </span><span 8668 class="cmtt-8"> 6)</span><span 8669 class="cmtt-8"> [hy]</span><span 8670 class="cmtt-8"> =</span><span 8671 class="cmtt-8"> [floor1_final_Y]’</span><span 8672 class="cmtt-8"> element</span><span 8673 class="cmtt-8"> [i]</span><span 8674 class="cmtt-8"> *</span><span 8675 class="cmtt-8"> [floor1_multiplier]</span> 8676 <br class="fancyvrb" /><a 8677 id="x1-101164r9"></a><span 8678 class="cmr-6">9</span><span 8679 class="cmtt-8"> </span><span 8680 class="cmtt-8"> </span><span 8681 class="cmtt-8">  </span><span 8682 class="cmtt-8"> </span><span 8683 class="cmtt-8"> </span><span 8684 class="cmtt-8"> </span><span 8685 class="cmtt-8"> </span><span 8686 class="cmtt-8"> 7)</span><span 8687 class="cmtt-8"> [hx]</span><span 8688 class="cmtt-8"> =</span><span 8689 class="cmtt-8"> [floor1_X_list]’</span><span 8690 class="cmtt-8"> element</span><span 8691 class="cmtt-8"> [i]</span> 8692 <br class="fancyvrb" /><a 8693 id="x1-101166r10"></a><span 8694 class="cmr-6">10</span><span 8695 class="cmtt-8"> </span><span 8696 class="cmtt-8"> </span><span 8697 class="cmtt-8"> </span><span 8698 class="cmtt-8"> </span><span 8699 class="cmtt-8"> </span><span 8700 class="cmtt-8"> </span><span 8701 class="cmtt-8"> </span><span 8702 class="cmtt-8"> </span><span 8703 class="cmtt-8"> </span><span 8704 class="cmtt-8"> </span><span 8705 class="cmtt-8"> </span><span 8706 class="cmtt-8"> </span><span 8707 class="cmtt-8"> </span><span 8708 class="cmtt-8"> </span><span 8709 class="cmtt-8"> 8)</span><span 8710 class="cmtt-8"> </span><a 8711 href="#x1-1230009.2.7"><span 8712 class="cmtt-8">render_line</span></a><span 8713 class="cmtt-8">(</span><span 8714 class="cmtt-8"> [lx],</span><span 8715 class="cmtt-8"> [ly],</span><span 8716 class="cmtt-8"> [hx],</span><span 8717 class="cmtt-8"> [hy],</span><span 8718 class="cmtt-8"> [floor]</span><span 8719 class="cmtt-8"> )</span> 8720 <br class="fancyvrb" /><a 8721 id="x1-101168r11"></a><span 8722 class="cmr-6">11</span><span 8723 class="cmtt-8"> </span><span 8724 class="cmtt-8"> </span><span 8725 class="cmtt-8"> </span><span 8726 class="cmtt-8"> </span><span 8727 class="cmtt-8"> </span><span 8728 class="cmtt-8"> </span><span 8729 class="cmtt-8"> </span><span 8730 class="cmtt-8"> </span><span 8731 class="cmtt-8"> </span><span 8732 class="cmtt-8"> </span><span 8733 class="cmtt-8"> </span><span 8734 class="cmtt-8"> </span><span 8735 class="cmtt-8"> </span><span 8736 class="cmtt-8"> </span><span 8737 class="cmtt-8"> 9)</span><span 8738 class="cmtt-8"> [lx]</span><span 8739 class="cmtt-8"> =</span><span 8740 class="cmtt-8"> [hx]</span> 8741 <br class="fancyvrb" /><a 8742 id="x1-101170r12"></a><span 8743 class="cmr-6">12</span><span 8744 class="cmtt-8"> </span><span 8745 class="cmtt-8">  </span><span 8746 class="cmtt-8"> </span><span 8747 class="cmtt-8"> </span><span 8748 class="cmtt-8"> </span><span 8749 class="cmtt-8"> 10)</span><span 8750 class="cmtt-8"> [ly]</span><span 8751 class="cmtt-8"> =</span><span 8752 class="cmtt-8"> [hy]</span> 8753 <br class="fancyvrb" /><a 8754 id="x1-101172r13"></a><span 8755 class="cmr-6">13</span><span 8756 class="cmtt-8"> </span><span 8757 class="cmtt-8"> </span><span 8758 class="cmtt-8"> </span><span 8759 class="cmtt-8"> </span><span 8760 class="cmtt-8"> </span><span 8761 class="cmtt-8"> </span><span 8762 class="cmtt-8"> </span><span 8763 class="cmtt-8"> </span><span 8764 class="cmtt-8"> </span><span 8765 class="cmtt-8"> </span><span 8766 class="cmtt-8"> </span><span 8767 class="cmtt-8"> </span><span 8768 class="cmsy-8">}</span> 8769 <br class="fancyvrb" /><a 8770 id="x1-101174r14"></a><span 8771 class="cmr-6">14</span><span 8772 class="cmtt-8"> </span><span 8773 class="cmtt-8"> </span><span 8774 class="cmtt-8"> </span><span 8775 class="cmtt-8"> </span><span 8776 class="cmtt-8"> </span><span 8777 class="cmtt-8"> </span><span 8778 class="cmtt-8"> </span><span 8779 class="cmsy-8">}</span> 8780 <br class="fancyvrb" /><a 8781 id="x1-101176r15"></a><span 8782 class="cmr-6">15</span><span 8783 class="cmtt-8"> </span><span 8784 class="cmtt-8"> </span> 8785 <br class="fancyvrb" /><a 8786 id="x1-101178r16"></a><span 8787 class="cmr-6">16</span><span 8788 class="cmtt-8"> </span><span 8789 class="cmtt-8"> </span><span 8790 class="cmtt-8"> 11)</span><span 8791 class="cmtt-8"> if</span><span 8792 class="cmtt-8"> (</span><span 8793 class="cmtt-8"> [hx]</span><span 8794 class="cmtt-8"> is</span><span 8795 class="cmtt-8"> less</span><span 8796 class="cmtt-8"> than</span><span 8797 class="cmtt-8"> [n]</span><span 8798 class="cmtt-8"> )</span><span 8799 class="cmtt-8"> </span><span 8800 class="cmsy-8">{</span> 8801 <br class="fancyvrb" /><a 8802 id="x1-101180r17"></a><span 8803 class="cmr-6">17</span><span 8804 class="cmtt-8"> </span><span 8805 class="cmtt-8"> </span> 8806 <br class="fancyvrb" /><a 8807 id="x1-101182r18"></a><span 8808 class="cmr-6">18</span><span 8809 class="cmtt-8"> </span><span 8810 class="cmtt-8"> </span><span 8811 class="cmtt-8"> </span><span 8812 class="cmtt-8"> </span><span 8813 class="cmtt-8"> </span><span 8814 class="cmtt-8"> </span><span 8815 class="cmtt-8"> </span><span 8816 class="cmtt-8"> </span><span 8817 class="cmtt-8"> </span><span 8818 class="cmtt-8"> 12)</span><span 8819 class="cmtt-8"> </span><a 8820 href="#x1-1230009.2.7"><span 8821 class="cmtt-8">render_line</span></a><span 8822 class="cmtt-8">(</span><span 8823 class="cmtt-8"> [hx],</span><span 8824 class="cmtt-8"> [hy],</span><span 8825 class="cmtt-8"> [n],</span><span 8826 class="cmtt-8"> [hy],</span><span 8827 class="cmtt-8"> [floor]</span><span 8828 class="cmtt-8"> )</span> 8829 <br class="fancyvrb" /><a 8830 id="x1-101184r19"></a><span 8831 class="cmr-6">19</span><span 8832 class="cmtt-8"> </span><span 8833 class="cmtt-8"> </span> 8834 <br class="fancyvrb" /><a 8835 id="x1-101186r20"></a><span 8836 class="cmr-6">20</span><span 8837 class="cmtt-8"> </span><span 8838 class="cmtt-8"> </span><span 8839 class="cmtt-8"> </span><span 8840 class="cmtt-8"> </span><span 8841 class="cmtt-8"> </span><span 8842 class="cmtt-8"> </span><span 8843 class="cmtt-8"> </span><span 8844 class="cmsy-8">}</span> 8845 <br class="fancyvrb" /><a 8846 id="x1-101188r21"></a><span 8847 class="cmr-6">21</span><span 8848 class="cmtt-8"> </span><span 8849 class="cmtt-8"> </span> 8850 <br class="fancyvrb" /><a 8851 id="x1-101190r22"></a><span 8852 class="cmr-6">22</span><span 8853 class="cmtt-8"> </span><span 8854 class="cmtt-8"> </span><span 8855 class="cmtt-8"> 13)</span><span 8856 class="cmtt-8"> if</span><span 8857 class="cmtt-8"> (</span><span 8858 class="cmtt-8"> [hx]</span><span 8859 class="cmtt-8"> is</span><span 8860 class="cmtt-8"> greater</span><span 8861 class="cmtt-8"> than</span><span 8862 class="cmtt-8"> [n]</span><span 8863 class="cmtt-8"> )</span><span 8864 class="cmtt-8"> </span><span 8865 class="cmsy-8">{</span> 8866 <br class="fancyvrb" /><a 8867 id="x1-101192r23"></a><span 8868 class="cmr-6">23</span><span 8869 class="cmtt-8"> </span><span 8870 class="cmtt-8"> </span> 8871 <br class="fancyvrb" /><a 8872 id="x1-101194r24"></a><span 8873 class="cmr-6">24</span><span 8874 class="cmtt-8"> </span><span 8875 class="cmtt-8"> </span><span 8876 class="cmtt-8"> </span><span 8877 class="cmtt-8"> </span><span 8878 class="cmtt-8"> </span><span 8879 class="cmtt-8"> </span><span 8880 class="cmtt-8"> </span><span 8881 class="cmtt-8"> </span><span 8882 class="cmtt-8"> </span><span 8883 class="cmtt-8"> </span><span 8884 class="cmtt-8"> </span><span 8885 class="cmtt-8"> </span><span 8886 class="cmtt-8"> </span><span 8887 class="cmtt-8"> 14)</span><span 8888 class="cmtt-8"> truncate</span><span 8889 class="cmtt-8"> vector</span><span 8890 class="cmtt-8"> [floor]</span><span 8891 class="cmtt-8"> to</span><span 8892 class="cmtt-8"> [n]</span><span 8893 class="cmtt-8"> elements</span> 8894 <br class="fancyvrb" /><a 8895 id="x1-101196r25"></a><span 8896 class="cmr-6">25</span><span 8897 class="cmtt-8"> </span><span 8898 class="cmtt-8"> </span> 8899 <br class="fancyvrb" /><a 8900 id="x1-101198r26"></a><span 8901 class="cmr-6">26</span><span 8902 class="cmtt-8"> </span><span 8903 class="cmtt-8"> </span><span 8904 class="cmtt-8"> </span><span 8905 class="cmtt-8"> </span><span 8906 class="cmtt-8"> </span><span 8907 class="cmtt-8"> </span><span 8908 class="cmtt-8"> </span><span 8909 class="cmsy-8">}</span> 8910 <br class="fancyvrb" /><a 8911 id="x1-101200r27"></a><span 8912 class="cmr-6">27</span><span 8913 class="cmtt-8"> </span><span 8914 class="cmtt-8"> </span> 8915 <br class="fancyvrb" /><a 8916 id="x1-101202r28"></a><span 8917 class="cmr-6">28</span><span 8918 class="cmtt-8"> </span><span 8919 class="cmtt-8"> </span><span 8920 class="cmtt-8"> 15)</span><span 8921 class="cmtt-8"> for</span><span 8922 class="cmtt-8"> each</span><span 8923 class="cmtt-8"> scalar</span><span 8924 class="cmtt-8"> in</span><span 8925 class="cmtt-8"> vector</span><span 8926 class="cmtt-8"> [floor],</span><span 8927 class="cmtt-8"> perform</span><span 8928 class="cmtt-8"> a</span><span 8929 class="cmtt-8"> lookup</span><span 8930 class="cmtt-8"> substitution</span><span 8931 class="cmtt-8"> using</span> 8932 <br class="fancyvrb" /><a 8933 id="x1-101204r29"></a><span 8934 class="cmr-6">29</span><span 8935 class="cmtt-8"> </span><span 8936 class="cmtt-8"> </span><span 8937 class="cmtt-8"> </span><span 8938 class="cmtt-8"> </span><span 8939 class="cmtt-8"> </span><span 8940 class="cmtt-8"> </span><span 8941 class="cmtt-8"> the</span><span 8942 class="cmtt-8"> scalar</span><span 8943 class="cmtt-8"> value</span><span 8944 class="cmtt-8"> from</span><span 8945 class="cmtt-8"> [floor]</span><span 8946 class="cmtt-8"> as</span><span 8947 class="cmtt-8"> an</span><span 8948 class="cmtt-8"> offset</span><span 8949 class="cmtt-8"> into</span><span 8950 class="cmtt-8"> the</span><span 8951 class="cmtt-8"> vector</span><span 8952 class="cmtt-8"> </span><a 8953 href="#x1-12500010.1"><span 8954 class="cmtt-8">[floor1_inverse_dB_static_table]</span></a> 8955 <br class="fancyvrb" /><a 8956 id="x1-101206r30"></a><span 8957 class="cmr-6">30</span><span 8958 class="cmtt-8"> </span><span 8959 class="cmtt-8"> </span> 8960 <br class="fancyvrb" /><a 8961 id="x1-101208r31"></a><span 8962 class="cmr-6">31</span><span 8963 class="cmtt-8"> </span><span 8964 class="cmtt-8"> </span><span 8965 class="cmtt-8"> 16)</span><span 8966 class="cmtt-8"> done</span> 8967 <br class="fancyvrb" /><a 8968 id="x1-101210r32"></a><span 8969 class="cmr-6">32</span><span 8970 class="cmtt-8"> </span><span 8971 class="cmtt-8"> </span> 8972 </div> 8973 </dd></dl> 8974 8975 8976 8977 <h3 class="sectionHead"><span class="titlemark">8 </span> <a 8978 id="x1-1020008"></a>Residue setup and decode</h3> 8979 <!--l. 6--><p class="noindent" > 8980 <h4 class="subsectionHead"><span class="titlemark">8.1 </span> <a 8981 id="x1-1030008.1"></a>Overview</h4> 8982 <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame 8983 after the encoder subtracts the floor curve and performs any channel coupling. A residue vector 8984 may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel 8985 coupling. The exact semantic content of the vector does not matter to the residue 8986 abstraction. 8987 <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the 8988 bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three 8989 different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding 8990 abstraction. 8991 <!--l. 23--><p class="noindent" > 8992 <h4 class="subsectionHead"><span class="titlemark">8.2 </span> <a 8993 id="x1-1040008.2"></a>Residue format</h4> 8994 <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each 8995 chunk, encodes the chunk classifications and finally encodes the chunks themselves 8996 using the the specific VQ arrangement defined for each selected classification. The 8997 exact interleaving and partitioning vary by residue encoding number, however the 8998 high-level process used to classify and encode the residue vector is the same in all three 8999 variants. 9000 <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for 9001 the moment exactly how a partition is encoded and simply trusting that it is, is as 9002 follows: 9003 <ul class="itemize1"> 9004 <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration 9005 specified. If we have a vector size of <span 9006 class="cmti-12">n</span>, a partition size <span 9007 class="cmti-12">residue˙partition˙size</span>, and 9008 a total of <span 9009 class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded is 9010 9011 9012 9013 <span 9014 class="cmti-12">n</span>/<span 9015 class="cmti-12">residue˙partition˙size</span>*<span 9016 class="cmti-12">ch</span>. It is important to note that the integer division truncates. 9017 In the below example, we assume an example <span 9018 class="cmti-12">residue˙partition˙size </span>of 8. 9019 </li> 9020 <li class="itemize">Each partition in each vector has a classification number that specifies which of 9021 multiple configured VQ codebook setups are used to decode that partition. The 9022 classification numbers of each partition can be thought of as forming a vector in 9023 their own right, as in the illustration below. Just as the residue vectors are coded 9024 in grouped partitions to increase encoding efficiency, the classification vector is also 9025 partitioned into chunks. The integer elements of each scalar in a classification chunk 9026 are built into a single scalar that represents the classification numbers in that chunk. 9027 In the below example, the classification codeword encodes two classification numbers. 9028 </li> 9029 <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through 9030 the residue vector, but more often efficient codebook design dictates that each vector 9031 is encoded as the additive sum of several passes through the residue vector using 9032 more than one VQ codebook. Thus, each residue value potentially accumulates values 9033 from multiple decode passes. The classification value associated with a partition is 9034 the same in each pass, thus the classification codeword is coded only in the first pass. 9035 </li></ul> 9036 <div class="center" 9037 > 9038 <!--l. 70--><p class="noindent" > 9039 9040 <!--l. 71--><p class="noindent" ><img 9041 src="residue-pack.png" alt="PIC" 9042 > 9043 <br /> <div class="caption" 9044 ><span class="id">Figure 11: </span><span 9045 class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 --> 9046 </div> 9047 <!--l. 77--><p class="noindent" > 9048 <h4 class="subsectionHead"><span class="titlemark">8.3 </span> <a 9049 id="x1-1050008.3"></a>residue 0</h4> 9050 <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during 9051 partition encoding (visually treated as a black box–or cyan box or brown box–in the above 9052 figure). 9053 <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to 9054 9055 9056 9057 encode a partition in a specific pass. The dimension of the codebook need not be the same in 9058 multiple passes, however the partition size must be an even multiple of the codebook 9059 dimension. 9060 <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using 9061 codebook sizes of 8, 4, 2 and 1: 9062 <!--l. 92--><p class="noindent" > 9063 <div class="fancyvrb" id="fancyvrb33"> 9064 <a 9065 id="x1-105002r1"></a><span 9066 class="cmr-6">1</span><span 9067 class="cmtt-8"> </span><span 9068 class="cmtt-8"> </span> 9069 <br class="fancyvrb" /><a 9070 id="x1-105004r2"></a><span 9071 class="cmr-6">2</span><span 9072 class="cmtt-8"> </span><span 9073 class="cmtt-8"> </span><span 9074 class="cmtt-8"> </span><span 9075 class="cmtt-8"> </span><span 9076 class="cmtt-8"> </span><span 9077 class="cmtt-8"> </span><span 9078 class="cmtt-8"> </span><span 9079 class="cmtt-8"> </span><span 9080 class="cmtt-8"> </span><span 9081 class="cmtt-8"> </span><span 9082 class="cmtt-8"> </span><span 9083 class="cmtt-8"> </span><span 9084 class="cmtt-8"> </span><span 9085 class="cmtt-8"> original</span><span 9086 class="cmtt-8"> residue</span><span 9087 class="cmtt-8"> vector:</span><span 9088 class="cmtt-8"> [</span><span 9089 class="cmtt-8"> 0</span><span 9090 class="cmtt-8"> 1</span><span 9091 class="cmtt-8"> 2</span><span 9092 class="cmtt-8"> 3</span><span 9093 class="cmtt-8"> 4</span><span 9094 class="cmtt-8"> 5</span><span 9095 class="cmtt-8"> 6</span><span 9096 class="cmtt-8"> 7</span><span 9097 class="cmtt-8"> ]</span> 9098 <br class="fancyvrb" /><a 9099 id="x1-105006r3"></a><span 9100 class="cmr-6">3</span><span 9101 class="cmtt-8"> </span><span 9102 class="cmtt-8"> </span> 9103 <br class="fancyvrb" /><a 9104 id="x1-105008r4"></a><span 9105 class="cmr-6">4</span><span 9106 class="cmtt-8"> </span><span 9107 class="cmtt-8"> codebook</span><span 9108 class="cmtt-8"> dimensions</span><span 9109 class="cmtt-8"> =</span><span 9110 class="cmtt-8"> 8</span><span 9111 class="cmtt-8"> </span><span 9112 class="cmtt-8"> encoded</span><span 9113 class="cmtt-8"> as:</span><span 9114 class="cmtt-8"> [</span><span 9115 class="cmtt-8"> 0</span><span 9116 class="cmtt-8"> 1</span><span 9117 class="cmtt-8"> 2</span><span 9118 class="cmtt-8"> 3</span><span 9119 class="cmtt-8"> 4</span><span 9120 class="cmtt-8"> 5</span><span 9121 class="cmtt-8"> 6</span><span 9122 class="cmtt-8"> 7</span><span 9123 class="cmtt-8"> ]</span> 9124 <br class="fancyvrb" /><a 9125 id="x1-105010r5"></a><span 9126 class="cmr-6">5</span><span 9127 class="cmtt-8"> </span><span 9128 class="cmtt-8"> </span> 9129 <br class="fancyvrb" /><a 9130 id="x1-105012r6"></a><span 9131 class="cmr-6">6</span><span 9132 class="cmtt-8"> </span><span 9133 class="cmtt-8"> codebook</span><span 9134 class="cmtt-8"> dimensions</span><span 9135 class="cmtt-8"> =</span><span 9136 class="cmtt-8"> 4</span><span 9137 class="cmtt-8"> </span><span 9138 class="cmtt-8"> encoded</span><span 9139 class="cmtt-8"> as:</span><span 9140 class="cmtt-8"> [</span><span 9141 class="cmtt-8"> 0</span><span 9142 class="cmtt-8"> 2</span><span 9143 class="cmtt-8"> 4</span><span 9144 class="cmtt-8"> 6</span><span 9145 class="cmtt-8"> ],</span><span 9146 class="cmtt-8"> [</span><span 9147 class="cmtt-8"> 1</span><span 9148 class="cmtt-8"> 3</span><span 9149 class="cmtt-8"> 5</span><span 9150 class="cmtt-8"> 7</span><span 9151 class="cmtt-8"> ]</span> 9152 <br class="fancyvrb" /><a 9153 id="x1-105014r7"></a><span 9154 class="cmr-6">7</span><span 9155 class="cmtt-8"> </span><span 9156 class="cmtt-8"> </span> 9157 <br class="fancyvrb" /><a 9158 id="x1-105016r8"></a><span 9159 class="cmr-6">8</span><span 9160 class="cmtt-8"> </span><span 9161 class="cmtt-8"> codebook</span><span 9162 class="cmtt-8"> dimensions</span><span 9163 class="cmtt-8"> =</span><span 9164 class="cmtt-8"> 2</span><span 9165 class="cmtt-8"> </span><span 9166 class="cmtt-8"> encoded</span><span 9167 class="cmtt-8"> as:</span><span 9168 class="cmtt-8"> [</span><span 9169 class="cmtt-8"> 0</span><span 9170 class="cmtt-8"> 4</span><span 9171 class="cmtt-8"> ],</span><span 9172 class="cmtt-8"> [</span><span 9173 class="cmtt-8"> 1</span><span 9174 class="cmtt-8"> 5</span><span 9175 class="cmtt-8"> ],</span><span 9176 class="cmtt-8"> [</span><span 9177 class="cmtt-8"> 2</span><span 9178 class="cmtt-8"> 6</span><span 9179 class="cmtt-8"> ],</span><span 9180 class="cmtt-8"> [</span><span 9181 class="cmtt-8"> 3</span><span 9182 class="cmtt-8"> 7</span><span 9183 class="cmtt-8"> ]</span> 9184 <br class="fancyvrb" /><a 9185 id="x1-105018r9"></a><span 9186 class="cmr-6">9</span><span 9187 class="cmtt-8"> </span><span 9188 class="cmtt-8"> </span> 9189 <br class="fancyvrb" /><a 9190 id="x1-105020r10"></a><span 9191 class="cmr-6">10</span><span 9192 class="cmtt-8"> </span><span 9193 class="cmtt-8"> codebook</span><span 9194 class="cmtt-8"> dimensions</span><span 9195 class="cmtt-8"> =</span><span 9196 class="cmtt-8"> 1</span><span 9197 class="cmtt-8"> </span><span 9198 class="cmtt-8"> encoded</span><span 9199 class="cmtt-8"> as:</span><span 9200 class="cmtt-8"> [</span><span 9201 class="cmtt-8"> 0</span><span 9202 class="cmtt-8"> ],</span><span 9203 class="cmtt-8"> [</span><span 9204 class="cmtt-8"> 1</span><span 9205 class="cmtt-8"> ],</span><span 9206 class="cmtt-8"> [</span><span 9207 class="cmtt-8"> 2</span><span 9208 class="cmtt-8"> ],</span><span 9209 class="cmtt-8"> [</span><span 9210 class="cmtt-8"> 3</span><span 9211 class="cmtt-8"> ],</span><span 9212 class="cmtt-8"> [</span><span 9213 class="cmtt-8"> 4</span><span 9214 class="cmtt-8"> ],</span><span 9215 class="cmtt-8"> [</span><span 9216 class="cmtt-8"> 5</span><span 9217 class="cmtt-8"> ],</span><span 9218 class="cmtt-8"> [</span><span 9219 class="cmtt-8"> 6</span><span 9220 class="cmtt-8"> ],</span><span 9221 class="cmtt-8"> [</span><span 9222 class="cmtt-8"> 7</span><span 9223 class="cmtt-8"> ]</span> 9224 <br class="fancyvrb" /><a 9225 id="x1-105022r11"></a><span 9226 class="cmr-6">11</span><span 9227 class="cmtt-8"> </span><span 9228 class="cmtt-8"> </span> 9229 </div> 9230 <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is 9231 restricted to a power of two. 9232 <!--l. 111--><p class="noindent" > 9233 <h4 class="subsectionHead"><span class="titlemark">8.4 </span> <a 9234 id="x1-1060008.4"></a>residue 1</h4> 9235 <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As 9236 with residue 0, however, partition length must be an integer multiple of the codebook dimension, 9237 although dimension may vary from pass to pass. 9238 <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using 9239 codebook sizes of 8, 4, 2 and 1: 9240 <!--l. 121--><p class="noindent" > 9241 <div class="fancyvrb" id="fancyvrb34"> 9242 <a 9243 id="x1-106002r1"></a><span 9244 class="cmr-6">1</span><span 9245 class="cmtt-8"> </span><span 9246 class="cmtt-8"> </span> 9247 <br class="fancyvrb" /><a 9248 id="x1-106004r2"></a><span 9249 class="cmr-6">2</span><span 9250 class="cmtt-8"> </span><span 9251 class="cmtt-8"> </span><span 9252 class="cmtt-8"> </span><span 9253 class="cmtt-8"> </span><span 9254 class="cmtt-8"> </span><span 9255 class="cmtt-8"> </span><span 9256 class="cmtt-8"> </span><span 9257 class="cmtt-8"> </span><span 9258 class="cmtt-8"> </span><span 9259 class="cmtt-8"> </span><span 9260 class="cmtt-8"> </span><span 9261 class="cmtt-8"> </span><span 9262 class="cmtt-8"> </span><span 9263 class="cmtt-8"> original</span><span 9264 class="cmtt-8"> residue</span><span 9265 class="cmtt-8"> vector:</span><span 9266 class="cmtt-8"> [</span><span 9267 class="cmtt-8"> 0</span><span 9268 class="cmtt-8"> 1</span><span 9269 class="cmtt-8"> 2</span><span 9270 class="cmtt-8"> 3</span><span 9271 class="cmtt-8"> 4</span><span 9272 class="cmtt-8"> 5</span><span 9273 class="cmtt-8"> 6</span><span 9274 class="cmtt-8"> 7</span><span 9275 class="cmtt-8"> ]</span> 9276 <br class="fancyvrb" /><a 9277 id="x1-106006r3"></a><span 9278 class="cmr-6">3</span><span 9279 class="cmtt-8"> </span><span 9280 class="cmtt-8"> </span> 9281 <br class="fancyvrb" /><a 9282 id="x1-106008r4"></a><span 9283 class="cmr-6">4</span><span 9284 class="cmtt-8"> </span><span 9285 class="cmtt-8"> codebook</span><span 9286 class="cmtt-8"> dimensions</span><span 9287 class="cmtt-8"> =</span><span 9288 class="cmtt-8"> 8</span><span 9289 class="cmtt-8"> </span><span 9290 class="cmtt-8"> encoded</span><span 9291 class="cmtt-8"> as:</span><span 9292 class="cmtt-8"> [</span><span 9293 class="cmtt-8"> 0</span><span 9294 class="cmtt-8"> 1</span><span 9295 class="cmtt-8"> 2</span><span 9296 class="cmtt-8"> 3</span><span 9297 class="cmtt-8"> 4</span><span 9298 class="cmtt-8"> 5</span><span 9299 class="cmtt-8"> 6</span><span 9300 class="cmtt-8"> 7</span><span 9301 class="cmtt-8"> ]</span> 9302 <br class="fancyvrb" /><a 9303 id="x1-106010r5"></a><span 9304 class="cmr-6">5</span><span 9305 class="cmtt-8"> </span><span 9306 class="cmtt-8"> </span> 9307 <br class="fancyvrb" /><a 9308 id="x1-106012r6"></a><span 9309 class="cmr-6">6</span><span 9310 class="cmtt-8"> </span><span 9311 class="cmtt-8"> codebook</span><span 9312 class="cmtt-8"> dimensions</span><span 9313 class="cmtt-8"> =</span><span 9314 class="cmtt-8"> 4</span><span 9315 class="cmtt-8"> </span><span 9316 class="cmtt-8"> encoded</span><span 9317 class="cmtt-8"> as:</span><span 9318 class="cmtt-8"> [</span><span 9319 class="cmtt-8"> 0</span><span 9320 class="cmtt-8"> 1</span><span 9321 class="cmtt-8"> 2</span><span 9322 class="cmtt-8"> 3</span><span 9323 class="cmtt-8"> ],</span><span 9324 class="cmtt-8"> [</span><span 9325 class="cmtt-8"> 4</span><span 9326 class="cmtt-8"> 5</span><span 9327 class="cmtt-8"> 6</span><span 9328 class="cmtt-8"> 7</span><span 9329 class="cmtt-8"> ]</span> 9330 <br class="fancyvrb" /><a 9331 id="x1-106014r7"></a><span 9332 class="cmr-6">7</span><span 9333 class="cmtt-8"> </span><span 9334 class="cmtt-8"> </span> 9335 <br class="fancyvrb" /><a 9336 id="x1-106016r8"></a><span 9337 class="cmr-6">8</span><span 9338 class="cmtt-8"> </span><span 9339 class="cmtt-8"> codebook</span><span 9340 class="cmtt-8"> dimensions</span><span 9341 class="cmtt-8"> =</span><span 9342 class="cmtt-8"> 2</span><span 9343 class="cmtt-8"> </span><span 9344 class="cmtt-8"> encoded</span><span 9345 class="cmtt-8"> as:</span><span 9346 class="cmtt-8"> [</span><span 9347 class="cmtt-8"> 0</span><span 9348 class="cmtt-8"> 1</span><span 9349 class="cmtt-8"> ],</span><span 9350 class="cmtt-8"> [</span><span 9351 class="cmtt-8"> 2</span><span 9352 class="cmtt-8"> 3</span><span 9353 class="cmtt-8"> ],</span><span 9354 class="cmtt-8"> [</span><span 9355 class="cmtt-8"> 4</span><span 9356 class="cmtt-8"> 5</span><span 9357 class="cmtt-8"> ],</span><span 9358 class="cmtt-8"> [</span><span 9359 class="cmtt-8"> 6</span><span 9360 class="cmtt-8"> 7</span><span 9361 class="cmtt-8"> ]</span> 9362 <br class="fancyvrb" /><a 9363 id="x1-106018r9"></a><span 9364 class="cmr-6">9</span><span 9365 class="cmtt-8"> </span><span 9366 class="cmtt-8"> </span> 9367 <br class="fancyvrb" /><a 9368 id="x1-106020r10"></a><span 9369 class="cmr-6">10</span><span 9370 class="cmtt-8"> </span><span 9371 class="cmtt-8"> codebook</span><span 9372 class="cmtt-8"> dimensions</span><span 9373 class="cmtt-8"> =</span><span 9374 class="cmtt-8"> 1</span><span 9375 class="cmtt-8"> </span><span 9376 class="cmtt-8"> encoded</span><span 9377 class="cmtt-8"> as:</span><span 9378 class="cmtt-8"> [</span><span 9379 class="cmtt-8"> 0</span><span 9380 class="cmtt-8"> ],</span><span 9381 class="cmtt-8"> [</span><span 9382 class="cmtt-8"> 1</span><span 9383 class="cmtt-8"> ],</span><span 9384 class="cmtt-8"> [</span><span 9385 class="cmtt-8"> 2</span><span 9386 class="cmtt-8"> ],</span><span 9387 class="cmtt-8"> [</span><span 9388 class="cmtt-8"> 3</span><span 9389 class="cmtt-8"> ],</span><span 9390 class="cmtt-8"> [</span><span 9391 class="cmtt-8"> 4</span><span 9392 class="cmtt-8"> ],</span><span 9393 class="cmtt-8"> [</span><span 9394 class="cmtt-8"> 5</span><span 9395 class="cmtt-8"> ],</span><span 9396 class="cmtt-8"> [</span><span 9397 class="cmtt-8"> 6</span><span 9398 class="cmtt-8"> ],</span><span 9399 class="cmtt-8"> [</span><span 9400 class="cmtt-8"> 7</span><span 9401 class="cmtt-8"> ]</span> 9402 <br class="fancyvrb" /><a 9403 id="x1-106022r11"></a><span 9404 class="cmr-6">11</span><span 9405 class="cmtt-8"> </span><span 9406 class="cmtt-8"> </span> 9407 9408 9409 9410 </div> 9411 <!--l. 137--><p class="noindent" > 9412 <h4 class="subsectionHead"><span class="titlemark">8.5 </span> <a 9413 id="x1-1070008.5"></a>residue 2</h4> 9414 <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple 9415 passed-in vectors as in residue type 1, the <span 9416 class="cmti-12">ch </span>passed in vectors of length <span 9417 class="cmti-12">n </span>are first interleaved 9418 and flattened into a single vector of length <span 9419 class="cmti-12">ch</span>*<span 9420 class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding 9421 is as in type 1 with decode interleave reversed. If operating on a single vector to begin with, 9422 residue type 1 and type 2 are equivalent. 9423 <div class="center" 9424 > 9425 <!--l. 147--><p class="noindent" > 9426 9427 <!--l. 148--><p class="noindent" ><img 9428 src="residue2.png" alt="PIC" 9429 > 9430 <br /> <div class="caption" 9431 ><span class="id">Figure 12: </span><span 9432 class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 --> 9433 </div> 9434 <!--l. 153--><p class="noindent" > 9435 <h4 class="subsectionHead"><span class="titlemark">8.6 </span> <a 9436 id="x1-1080008.6"></a>Residue decode</h4> 9437 <!--l. 155--><p class="noindent" > 9438 <h5 class="subsubsectionHead"><span class="titlemark">8.6.1 </span> <a 9439 id="x1-1090008.6.1"></a>header decode</h5> 9440 <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical. 9441 <div class="fancyvrb" id="fancyvrb35"> 9442 <a 9443 id="x1-109002r1"></a><span 9444 class="cmr-6">1</span><span 9445 class="cmtt-8"> </span><span 9446 class="cmtt-8"> </span><span 9447 class="cmtt-8"> </span><span 9448 class="cmtt-8"> 1)</span><span 9449 class="cmtt-8"> [residue_begin]</span><span 9450 class="cmtt-8"> =</span><span 9451 class="cmtt-8"> read</span><span 9452 class="cmtt-8"> 24</span><span 9453 class="cmtt-8"> bits</span><span 9454 class="cmtt-8"> as</span><span 9455 class="cmtt-8"> unsigned</span><span 9456 class="cmtt-8"> integer</span> 9457 <br class="fancyvrb" /><a 9458 id="x1-109004r2"></a><span 9459 class="cmr-6">2</span><span 9460 class="cmtt-8"> </span><span 9461 class="cmtt-8"> </span><span 9462 class="cmtt-8"> </span><span 9463 class="cmtt-8"> 2)</span><span 9464 class="cmtt-8"> [residue_end]</span><span 9465 class="cmtt-8"> =</span><span 9466 class="cmtt-8"> read</span><span 9467 class="cmtt-8"> 24</span><span 9468 class="cmtt-8"> bits</span><span 9469 class="cmtt-8"> as</span><span 9470 class="cmtt-8"> unsigned</span><span 9471 class="cmtt-8"> integer</span> 9472 <br class="fancyvrb" /><a 9473 id="x1-109006r3"></a><span 9474 class="cmr-6">3</span><span 9475 class="cmtt-8"> </span><span 9476 class="cmtt-8"> </span><span 9477 class="cmtt-8"> </span><span 9478 class="cmtt-8"> 3)</span><span 9479 class="cmtt-8"> [residue_partition_size]</span><span 9480 class="cmtt-8"> =</span><span 9481 class="cmtt-8"> read</span><span 9482 class="cmtt-8"> 24</span><span 9483 class="cmtt-8"> bits</span><span 9484 class="cmtt-8"> as</span><span 9485 class="cmtt-8"> unsigned</span><span 9486 class="cmtt-8"> integer</span><span 9487 class="cmtt-8"> and</span><span 9488 class="cmtt-8"> add</span><span 9489 class="cmtt-8"> one</span> 9490 <br class="fancyvrb" /><a 9491 id="x1-109008r4"></a><span 9492 class="cmr-6">4</span><span 9493 class="cmtt-8"> </span><span 9494 class="cmtt-8"> </span><span 9495 class="cmtt-8"> </span><span 9496 class="cmtt-8"> 4)</span><span 9497 class="cmtt-8"> [residue_classifications]</span><span 9498 class="cmtt-8"> =</span><span 9499 class="cmtt-8"> read</span><span 9500 class="cmtt-8"> 6</span><span 9501 class="cmtt-8"> bits</span><span 9502 class="cmtt-8"> as</span><span 9503 class="cmtt-8"> unsigned</span><span 9504 class="cmtt-8"> integer</span><span 9505 class="cmtt-8"> and</span><span 9506 class="cmtt-8"> add</span><span 9507 class="cmtt-8"> one</span> 9508 9509 9510 9511 <br class="fancyvrb" /><a 9512 id="x1-109010r5"></a><span 9513 class="cmr-6">5</span><span 9514 class="cmtt-8"> </span><span 9515 class="cmtt-8"> </span><span 9516 class="cmtt-8"> </span><span 9517 class="cmtt-8"> 5)</span><span 9518 class="cmtt-8"> [residue_classbook]</span><span 9519 class="cmtt-8"> =</span><span 9520 class="cmtt-8"> read</span><span 9521 class="cmtt-8"> 8</span><span 9522 class="cmtt-8"> bits</span><span 9523 class="cmtt-8"> as</span><span 9524 class="cmtt-8"> unsigned</span><span 9525 class="cmtt-8"> integer</span> 9526 </div> 9527 <!--l. 166--><p class="noindent" ><span 9528 class="cmtt-12">[residue_begin] </span>and <span 9529 class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is 9530 actually coded; it implements akin to a bandpass where, for coding purposes, the vector 9531 effectively begins at element <span 9532 class="cmtt-12">[residue_begin] </span>and ends at <span 9533 class="cmtt-12">[residue_end]</span>. Preceding and 9534 following values in the unpacked vectors are zeroed. Note that for residue type 2, these 9535 values as well as <span 9536 class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the 9537 individual vectors before interleave. <span 9538 class="cmtt-12">[residue_partition_size] </span>is as explained above, 9539 <span 9540 class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can 9541 belong and <span 9542 class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification 9543 codewords. The number of dimensions in book <span 9544 class="cmtt-12">[residue_classbook] </span>determines how 9545 many classification values are grouped into a single classification codeword. Note that 9546 the number of entries and dimensions in book <span 9547 class="cmtt-12">[residue_classbook]</span>, along with 9548 <span 9549 class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification 9550 codewords. If <span 9551 class="cmtt-12">[residue_classifications]</span>ˆ<span 9552 class="cmtt-12">[residue_classbook]</span>.dimensions exceeds 9553 <span 9554 class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable. 9555 <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which 9556 passes. 9557 <!--l. 193--><p class="noindent" > 9558 <div class="fancyvrb" id="fancyvrb36"> 9559 <a 9560 id="x1-109012r1"></a><span 9561 class="cmr-6">1</span><span 9562 class="cmtt-8"> </span><span 9563 class="cmtt-8"> </span><span 9564 class="cmtt-8"> </span><span 9565 class="cmtt-8"> 1)</span><span 9566 class="cmtt-8"> iterate</span><span 9567 class="cmtt-8"> [i]</span><span 9568 class="cmtt-8"> over</span><span 9569 class="cmtt-8"> the</span><span 9570 class="cmtt-8"> range</span><span 9571 class="cmtt-8"> 0</span><span 9572 class="cmtt-8"> ...</span><span 9573 class="cmtt-8"> [residue_classifications]-1</span><span 9574 class="cmtt-8"> {</span> 9575 <br class="fancyvrb" /><a 9576 id="x1-109014r2"></a><span 9577 class="cmr-6">2</span><span 9578 class="cmtt-8"> </span><span 9579 class="cmtt-8"> </span> 9580 <br class="fancyvrb" /><a 9581 id="x1-109016r3"></a><span 9582 class="cmr-6">3</span><span 9583 class="cmtt-8"> </span><span 9584 class="cmtt-8"> </span><span 9585 class="cmtt-8"> </span><span 9586 class="cmtt-8"> </span><span 9587 class="cmtt-8"> </span><span 9588 class="cmtt-8"> </span><span 9589 class="cmtt-8"> </span><span 9590 class="cmtt-8"> </span><span 9591 class="cmtt-8"> 2)</span><span 9592 class="cmtt-8"> [high_bits]</span><span 9593 class="cmtt-8"> =</span><span 9594 class="cmtt-8"> 0</span> 9595 <br class="fancyvrb" /><a 9596 id="x1-109018r4"></a><span 9597 class="cmr-6">4</span><span 9598 class="cmtt-8"> </span><span 9599 class="cmtt-8"> </span><span 9600 class="cmtt-8"> </span><span 9601 class="cmtt-8"> </span><span 9602 class="cmtt-8"> </span><span 9603 class="cmtt-8"> </span><span 9604 class="cmtt-8"> </span><span 9605 class="cmtt-8"> </span><span 9606 class="cmtt-8"> 3)</span><span 9607 class="cmtt-8"> [low_bits]</span><span 9608 class="cmtt-8"> =</span><span 9609 class="cmtt-8"> read</span><span 9610 class="cmtt-8"> 3</span><span 9611 class="cmtt-8"> bits</span><span 9612 class="cmtt-8"> as</span><span 9613 class="cmtt-8"> unsigned</span><span 9614 class="cmtt-8"> integer</span> 9615 <br class="fancyvrb" /><a 9616 id="x1-109020r5"></a><span 9617 class="cmr-6">5</span><span 9618 class="cmtt-8"> </span><span 9619 class="cmtt-8"> </span><span 9620 class="cmtt-8"> </span><span 9621 class="cmtt-8"> </span><span 9622 class="cmtt-8"> </span><span 9623 class="cmtt-8"> </span><span 9624 class="cmtt-8"> </span><span 9625 class="cmtt-8"> </span><span 9626 class="cmtt-8"> 4)</span><span 9627 class="cmtt-8"> [bitflag]</span><span 9628 class="cmtt-8"> =</span><span 9629 class="cmtt-8"> read</span><span 9630 class="cmtt-8"> one</span><span 9631 class="cmtt-8"> bit</span><span 9632 class="cmtt-8"> as</span><span 9633 class="cmtt-8"> boolean</span> 9634 <br class="fancyvrb" /><a 9635 id="x1-109022r6"></a><span 9636 class="cmr-6">6</span><span 9637 class="cmtt-8"> </span><span 9638 class="cmtt-8"> </span><span 9639 class="cmtt-8"> </span><span 9640 class="cmtt-8"> </span><span 9641 class="cmtt-8"> </span><span 9642 class="cmtt-8"> </span><span 9643 class="cmtt-8"> </span><span 9644 class="cmtt-8"> </span><span 9645 class="cmtt-8"> 5)</span><span 9646 class="cmtt-8"> if</span><span 9647 class="cmtt-8"> (</span><span 9648 class="cmtt-8"> [bitflag]</span><span 9649 class="cmtt-8"> is</span><span 9650 class="cmtt-8"> set</span><span 9651 class="cmtt-8"> )</span><span 9652 class="cmtt-8"> then</span><span 9653 class="cmtt-8"> [high_bits]</span><span 9654 class="cmtt-8"> =</span><span 9655 class="cmtt-8"> read</span><span 9656 class="cmtt-8"> five</span><span 9657 class="cmtt-8"> bits</span><span 9658 class="cmtt-8"> as</span><span 9659 class="cmtt-8"> unsigned</span><span 9660 class="cmtt-8"> integer</span> 9661 <br class="fancyvrb" /><a 9662 id="x1-109024r7"></a><span 9663 class="cmr-6">7</span><span 9664 class="cmtt-8"> </span><span 9665 class="cmtt-8"> </span><span 9666 class="cmtt-8"> </span><span 9667 class="cmtt-8"> </span><span 9668 class="cmtt-8"> </span><span 9669 class="cmtt-8"> </span><span 9670 class="cmtt-8"> </span><span 9671 class="cmtt-8"> </span><span 9672 class="cmtt-8"> 6)</span><span 9673 class="cmtt-8"> vector</span><span 9674 class="cmtt-8"> [residue_cascade]</span><span 9675 class="cmtt-8"> element</span><span 9676 class="cmtt-8"> [i]</span><span 9677 class="cmtt-8"> =</span><span 9678 class="cmtt-8"> [high_bits]</span><span 9679 class="cmtt-8"> *</span><span 9680 class="cmtt-8"> 8</span><span 9681 class="cmtt-8"> +</span><span 9682 class="cmtt-8"> [low_bits]</span> 9683 <br class="fancyvrb" /><a 9684 id="x1-109026r8"></a><span 9685 class="cmr-6">8</span><span 9686 class="cmtt-8"> </span><span 9687 class="cmtt-8"> </span><span 9688 class="cmtt-8"> </span><span 9689 class="cmtt-8"> </span><span 9690 class="cmtt-8"> </span><span 9691 class="cmtt-8"> </span><span 9692 class="cmtt-8"> }</span> 9693 <br class="fancyvrb" /><a 9694 id="x1-109028r9"></a><span 9695 class="cmr-6">9</span><span 9696 class="cmtt-8"> </span><span 9697 class="cmtt-8"> </span><span 9698 class="cmtt-8"> </span><span 9699 class="cmtt-8"> 7)</span><span 9700 class="cmtt-8"> done</span> 9701 </div> 9702 <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade 9703 bitmap. We loop over the possible codebook classifications and the maximum possible number of 9704 encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight 9705 bits): 9706 <!--l. 211--><p class="noindent" > 9707 <div class="fancyvrb" id="fancyvrb37"> 9708 <a 9709 id="x1-109030r1"></a><span 9710 class="cmr-6">1</span><span 9711 class="cmtt-8"> </span><span 9712 class="cmtt-8"> </span><span 9713 class="cmtt-8"> </span><span 9714 class="cmtt-8"> 1)</span><span 9715 class="cmtt-8"> iterate</span><span 9716 class="cmtt-8"> [i]</span><span 9717 class="cmtt-8"> over</span><span 9718 class="cmtt-8"> the</span><span 9719 class="cmtt-8"> range</span><span 9720 class="cmtt-8"> 0</span><span 9721 class="cmtt-8"> ...</span><span 9722 class="cmtt-8"> [residue_classifications]-1</span><span 9723 class="cmtt-8"> {</span> 9724 <br class="fancyvrb" /><a 9725 id="x1-109032r2"></a><span 9726 class="cmr-6">2</span><span 9727 class="cmtt-8"> </span><span 9728 class="cmtt-8"> </span> 9729 <br class="fancyvrb" /><a 9730 id="x1-109034r3"></a><span 9731 class="cmr-6">3</span><span 9732 class="cmtt-8"> </span><span 9733 class="cmtt-8"> </span><span 9734 class="cmtt-8"> </span><span 9735 class="cmtt-8"> </span><span 9736 class="cmtt-8"> </span><span 9737 class="cmtt-8"> </span><span 9738 class="cmtt-8"> </span><span 9739 class="cmtt-8"> </span><span 9740 class="cmtt-8"> 2)</span><span 9741 class="cmtt-8"> iterate</span><span 9742 class="cmtt-8"> [j]</span><span 9743 class="cmtt-8"> over</span><span 9744 class="cmtt-8"> the</span><span 9745 class="cmtt-8"> range</span><span 9746 class="cmtt-8"> 0</span><span 9747 class="cmtt-8"> ...</span><span 9748 class="cmtt-8"> 7</span><span 9749 class="cmtt-8"> {</span> 9750 <br class="fancyvrb" /><a 9751 id="x1-109036r4"></a><span 9752 class="cmr-6">4</span><span 9753 class="cmtt-8"> </span><span 9754 class="cmtt-8"> </span> 9755 <br class="fancyvrb" /><a 9756 id="x1-109038r5"></a><span 9757 class="cmr-6">5</span><span 9758 class="cmtt-8"> </span><span 9759 class="cmtt-8"> </span><span 9760 class="cmtt-8"> </span><span 9761 class="cmtt-8"> </span><span 9762 class="cmtt-8"> </span><span 9763 class="cmtt-8"> </span><span 9764 class="cmtt-8"> </span><span 9765 class="cmtt-8"> </span><span 9766 class="cmtt-8"> </span><span 9767 class="cmtt-8"> </span><span 9768 class="cmtt-8"> </span><span 9769 class="cmtt-8"> </span><span 9770 class="cmtt-8"> </span><span 9771 class="cmtt-8"> 3)</span><span 9772 class="cmtt-8"> if</span><span 9773 class="cmtt-8"> (</span><span 9774 class="cmtt-8"> vector</span><span 9775 class="cmtt-8"> [residue_cascade]</span><span 9776 class="cmtt-8"> element</span><span 9777 class="cmtt-8"> [i]</span><span 9778 class="cmtt-8"> bit</span><span 9779 class="cmtt-8"> [j]</span><span 9780 class="cmtt-8"> is</span><span 9781 class="cmtt-8"> set</span><span 9782 class="cmtt-8"> )</span><span 9783 class="cmtt-8"> {</span> 9784 <br class="fancyvrb" /><a 9785 id="x1-109040r6"></a><span 9786 class="cmr-6">6</span><span 9787 class="cmtt-8"> </span><span 9788 class="cmtt-8"> </span> 9789 <br class="fancyvrb" /><a 9790 id="x1-109042r7"></a><span 9791 class="cmr-6">7</span><span 9792 class="cmtt-8"> </span><span 9793 class="cmtt-8"> </span><span 9794 class="cmtt-8"> </span><span 9795 class="cmtt-8"> </span><span 9796 class="cmtt-8"> </span><span 9797 class="cmtt-8"> </span><span 9798 class="cmtt-8"> </span><span 9799 class="cmtt-8"> </span><span 9800 class="cmtt-8"> </span><span 9801 class="cmtt-8"> </span><span 9802 class="cmtt-8"> </span><span 9803 class="cmtt-8"> </span><span 9804 class="cmtt-8"> </span><span 9805 class="cmtt-8"> </span><span 9806 class="cmtt-8"> </span><span 9807 class="cmtt-8"> </span><span 9808 class="cmtt-8"> </span><span 9809 class="cmtt-8"> </span><span 9810 class="cmtt-8"> 4)</span><span 9811 class="cmtt-8"> array</span><span 9812 class="cmtt-8"> [residue_books]</span><span 9813 class="cmtt-8"> element</span><span 9814 class="cmtt-8"> [i][j]</span><span 9815 class="cmtt-8"> =</span><span 9816 class="cmtt-8"> read</span><span 9817 class="cmtt-8"> 8</span><span 9818 class="cmtt-8"> bits</span><span 9819 class="cmtt-8"> as</span><span 9820 class="cmtt-8"> unsigned</span><span 9821 class="cmtt-8"> integer</span> 9822 <br class="fancyvrb" /><a 9823 id="x1-109044r8"></a><span 9824 class="cmr-6">8</span><span 9825 class="cmtt-8"> </span><span 9826 class="cmtt-8"> </span> 9827 <br class="fancyvrb" /><a 9828 id="x1-109046r9"></a><span 9829 class="cmr-6">9</span><span 9830 class="cmtt-8"> </span><span 9831 class="cmtt-8"> </span><span 9832 class="cmtt-8"> </span><span 9833 class="cmtt-8"> </span><span 9834 class="cmtt-8"> </span><span 9835 class="cmtt-8"> </span><span 9836 class="cmtt-8"> </span><span 9837 class="cmtt-8"> </span><span 9838 class="cmtt-8"> </span><span 9839 class="cmtt-8"> </span><span 9840 class="cmtt-8"> </span><span 9841 class="cmtt-8"> </span><span 9842 class="cmtt-8"> </span><span 9843 class="cmtt-8"> </span><span 9844 class="cmtt-8"> </span><span 9845 class="cmtt-8"> </span><span 9846 class="cmtt-8"> }</span><span 9847 class="cmtt-8"> else</span><span 9848 class="cmtt-8"> {</span> 9849 9850 9851 9852 <br class="fancyvrb" /><a 9853 id="x1-109048r10"></a><span 9854 class="cmr-6">10</span><span 9855 class="cmtt-8"> </span><span 9856 class="cmtt-8"> </span> 9857 <br class="fancyvrb" /><a 9858 id="x1-109050r11"></a><span 9859 class="cmr-6">11</span><span 9860 class="cmtt-8"> </span><span 9861 class="cmtt-8"> </span><span 9862 class="cmtt-8"> </span><span 9863 class="cmtt-8"> </span><span 9864 class="cmtt-8"> </span><span 9865 class="cmtt-8"> </span><span 9866 class="cmtt-8"> </span><span 9867 class="cmtt-8"> </span><span 9868 class="cmtt-8"> </span><span 9869 class="cmtt-8"> </span><span 9870 class="cmtt-8"> </span><span 9871 class="cmtt-8"> </span><span 9872 class="cmtt-8"> </span><span 9873 class="cmtt-8"> </span><span 9874 class="cmtt-8"> </span><span 9875 class="cmtt-8"> </span><span 9876 class="cmtt-8"> </span><span 9877 class="cmtt-8"> </span><span 9878 class="cmtt-8"> 5)</span><span 9879 class="cmtt-8"> array</span><span 9880 class="cmtt-8"> [residue_books]</span><span 9881 class="cmtt-8"> element</span><span 9882 class="cmtt-8"> [i][j]</span><span 9883 class="cmtt-8"> =</span><span 9884 class="cmtt-8"> unused</span> 9885 <br class="fancyvrb" /><a 9886 id="x1-109052r12"></a><span 9887 class="cmr-6">12</span><span 9888 class="cmtt-8"> </span><span 9889 class="cmtt-8"> </span> 9890 <br class="fancyvrb" /><a 9891 id="x1-109054r13"></a><span 9892 class="cmr-6">13</span><span 9893 class="cmtt-8"> </span><span 9894 class="cmtt-8"> </span><span 9895 class="cmtt-8"> </span><span 9896 class="cmtt-8"> </span><span 9897 class="cmtt-8"> </span><span 9898 class="cmtt-8"> </span><span 9899 class="cmtt-8"> </span><span 9900 class="cmtt-8"> </span><span 9901 class="cmtt-8"> </span><span 9902 class="cmtt-8"> </span><span 9903 class="cmtt-8"> </span><span 9904 class="cmtt-8"> </span><span 9905 class="cmtt-8"> </span><span 9906 class="cmtt-8"> </span><span 9907 class="cmtt-8"> </span><span 9908 class="cmtt-8"> </span><span 9909 class="cmtt-8"> }</span> 9910 <br class="fancyvrb" /><a 9911 id="x1-109056r14"></a><span 9912 class="cmr-6">14</span><span 9913 class="cmtt-8"> </span><span 9914 class="cmtt-8"> </span><span 9915 class="cmtt-8"> </span><span 9916 class="cmtt-8"> </span><span 9917 class="cmtt-8"> </span><span 9918 class="cmtt-8"> </span><span 9919 class="cmtt-8"> </span><span 9920 class="cmtt-8"> </span><span 9921 class="cmtt-8"> </span><span 9922 class="cmtt-8"> </span><span 9923 class="cmtt-8"> </span><span 9924 class="cmtt-8"> }</span> 9925 <br class="fancyvrb" /><a 9926 id="x1-109058r15"></a><span 9927 class="cmr-6">15</span><span 9928 class="cmtt-8"> </span><span 9929 class="cmtt-8"> </span><span 9930 class="cmtt-8"> </span><span 9931 class="cmtt-8"> </span><span 9932 class="cmtt-8"> </span><span 9933 class="cmtt-8"> </span><span 9934 class="cmtt-8"> </span><span 9935 class="cmtt-8"> }</span> 9936 <br class="fancyvrb" /><a 9937 id="x1-109060r16"></a><span 9938 class="cmr-6">16</span><span 9939 class="cmtt-8"> </span><span 9940 class="cmtt-8"> </span> 9941 <br class="fancyvrb" /><a 9942 id="x1-109062r17"></a><span 9943 class="cmr-6">17</span><span 9944 class="cmtt-8"> </span><span 9945 class="cmtt-8"> </span><span 9946 class="cmtt-8"> </span><span 9947 class="cmtt-8"> 6)</span><span 9948 class="cmtt-8"> done</span> 9949 </div> 9950 <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable. 9951 In addition, any codebook number greater than the maximum numbered codebook 9952 set up in this stream also renders the stream undecodable. All codebooks in array 9953 [residue˙books] are required to have a value mapping. The presence of codebook in array 9954 [residue˙books] without a value mapping (maptype equals zero) renders the stream 9955 undecodable. 9956 <!--l. 241--><p class="noindent" > 9957 <h5 class="subsubsectionHead"><span class="titlemark">8.6.2 </span> <a 9958 id="x1-1100008.6.2"></a>packet decode</h5> 9959 <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet 9960 decode can be built out of the format 1 decode process. Thus we describe first the decode 9961 infrastructure identical to all three formats. 9962 <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of 9963 vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be 9964 decoded. If the passed in number of vectors is 3 and vector number 1 is marked ’do not decode’, 9965 decode skips vector 1 during the decode loop. However, even ’do not decode’ vectors are 9966 allocated and zeroed. 9967 <!--l. 255--><p class="noindent" >Depending on the values of <span 9968 class="cmtt-12">[residue_begin] </span>and <span 9969 class="cmtt-12">[residue_end]</span>, it is obvious that the 9970 encoded portion of a residue vector may be the entire possible residue vector or some other strict 9971 subset of the actual residue vector size with zero padding at either uncoded end. However, it is 9972 also possible to set <span 9973 class="cmtt-12">[residue_begin] </span>and <span 9974 class="cmtt-12">[residue_end] </span>to specify a range partially or wholly 9975 beyond the maximum vector size. Before beginning residue decode, limit <span 9976 class="cmtt-12">[residue_begin]</span> 9977 and <span 9978 class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that 9979 the number of vectors being encoded, <span 9980 class="cmtt-12">[ch] </span>is provided by the higher level decoding 9981 process. 9982 <!--l. 269--><p class="noindent" > 9983 <div class="fancyvrb" id="fancyvrb38"> 9984 <a 9985 id="x1-110002r1"></a><span 9986 class="cmr-6">1</span><span 9987 class="cmtt-8"> </span><span 9988 class="cmtt-8"> </span><span 9989 class="cmtt-8"> </span><span 9990 class="cmtt-8"> 1)</span><span 9991 class="cmtt-8"> [actual_size]</span><span 9992 class="cmtt-8"> =</span><span 9993 class="cmtt-8"> current</span><span 9994 class="cmtt-8"> blocksize/2;</span> 9995 <br class="fancyvrb" /><a 9996 id="x1-110004r2"></a><span 9997 class="cmr-6">2</span><span 9998 class="cmtt-8"> </span><span 9999 class="cmtt-8"> </span><span 10000 class="cmtt-8"> </span><span 10001 class="cmtt-8"> 2)</span><span 10002 class="cmtt-8"> if</span><span 10003 class="cmtt-8"> residue</span><span 10004 class="cmtt-8"> encoding</span><span 10005 class="cmtt-8"> is</span><span 10006 class="cmtt-8"> format</span><span 10007 class="cmtt-8"> 2</span> 10008 <br class="fancyvrb" /><a 10009 id="x1-110006r3"></a><span 10010 class="cmr-6">3</span><span 10011 class="cmtt-8"> </span><span 10012 class="cmtt-8"> </span><span 10013 class="cmtt-8"> </span><span 10014 class="cmtt-8"> </span><span 10015 class="cmtt-8"> </span><span 10016 class="cmtt-8"> </span><span 10017 class="cmtt-8"> </span><span 10018 class="cmtt-8"> </span><span 10019 class="cmtt-8"> 3)</span><span 10020 class="cmtt-8"> [actual_size]</span><span 10021 class="cmtt-8"> =</span><span 10022 class="cmtt-8"> [actual_size]</span><span 10023 class="cmtt-8"> *</span><span 10024 class="cmtt-8"> [ch];</span> 10025 10026 10027 10028 <br class="fancyvrb" /><a 10029 id="x1-110008r4"></a><span 10030 class="cmr-6">4</span><span 10031 class="cmtt-8"> </span><span 10032 class="cmtt-8"> </span><span 10033 class="cmtt-8"> </span><span 10034 class="cmtt-8"> 4)</span><span 10035 class="cmtt-8"> [limit_residue_begin]</span><span 10036 class="cmtt-8"> =</span><span 10037 class="cmtt-8"> maximum</span><span 10038 class="cmtt-8"> of</span><span 10039 class="cmtt-8"> ([residue_begin],[actual_size]);</span> 10040 <br class="fancyvrb" /><a 10041 id="x1-110010r5"></a><span 10042 class="cmr-6">5</span><span 10043 class="cmtt-8"> </span><span 10044 class="cmtt-8"> </span><span 10045 class="cmtt-8"> </span><span 10046 class="cmtt-8"> 5)</span><span 10047 class="cmtt-8"> [limit_residue_end]</span><span 10048 class="cmtt-8"> =</span><span 10049 class="cmtt-8"> maximum</span><span 10050 class="cmtt-8"> of</span><span 10051 class="cmtt-8"> ([residue_end],[actual_size]);</span> 10052 </div> 10053 <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process: 10054 <!--l. 280--><p class="noindent" > 10055 <div class="fancyvrb" id="fancyvrb39"> 10056 <a 10057 id="x1-110012r1"></a><span 10058 class="cmr-6">1</span><span 10059 class="cmtt-8"> </span><span 10060 class="cmtt-8"> </span><span 10061 class="cmtt-8"> </span><span 10062 class="cmtt-8"> 1)</span><span 10063 class="cmtt-8"> [classwords_per_codeword]</span><span 10064 class="cmtt-8"> =</span><span 10065 class="cmtt-8"> [codebook_dimensions]</span><span 10066 class="cmtt-8"> value</span><span 10067 class="cmtt-8"> of</span><span 10068 class="cmtt-8"> codebook</span><span 10069 class="cmtt-8"> [residue_classbook]</span> 10070 <br class="fancyvrb" /><a 10071 id="x1-110014r2"></a><span 10072 class="cmr-6">2</span><span 10073 class="cmtt-8"> </span><span 10074 class="cmtt-8"> </span><span 10075 class="cmtt-8"> </span><span 10076 class="cmtt-8"> 2)</span><span 10077 class="cmtt-8"> [n_to_read]</span><span 10078 class="cmtt-8"> =</span><span 10079 class="cmtt-8"> [limit_residue_end]</span><span 10080 class="cmtt-8"> -</span><span 10081 class="cmtt-8"> [limit_residue_begin]</span> 10082 <br class="fancyvrb" /><a 10083 id="x1-110016r3"></a><span 10084 class="cmr-6">3</span><span 10085 class="cmtt-8"> </span><span 10086 class="cmtt-8"> </span><span 10087 class="cmtt-8"> </span><span 10088 class="cmtt-8"> 3)</span><span 10089 class="cmtt-8"> [partitions_to_read]</span><span 10090 class="cmtt-8"> =</span><span 10091 class="cmtt-8"> [n_to_read]</span><span 10092 class="cmtt-8"> /</span><span 10093 class="cmtt-8"> [residue_partition_size]</span> 10094 </div> 10095 <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document. 10096 <div class="fancyvrb" id="fancyvrb40"> 10097 <a 10098 id="x1-110018r1"></a><span 10099 class="cmr-6">1</span><span 10100 class="cmtt-8"> </span><span 10101 class="cmtt-8"> </span><span 10102 class="cmtt-8"> </span><span 10103 class="cmtt-8"> 1)</span><span 10104 class="cmtt-8"> allocate</span><span 10105 class="cmtt-8"> and</span><span 10106 class="cmtt-8"> zero</span><span 10107 class="cmtt-8"> all</span><span 10108 class="cmtt-8"> vectors</span><span 10109 class="cmtt-8"> that</span><span 10110 class="cmtt-8"> will</span><span 10111 class="cmtt-8"> be</span><span 10112 class="cmtt-8"> returned.</span> 10113 <br class="fancyvrb" /><a 10114 id="x1-110020r2"></a><span 10115 class="cmr-6">2</span><span 10116 class="cmtt-8"> </span><span 10117 class="cmtt-8"> </span><span 10118 class="cmtt-8"> </span><span 10119 class="cmtt-8"> 2)</span><span 10120 class="cmtt-8"> if</span><span 10121 class="cmtt-8"> ([n_to_read]</span><span 10122 class="cmtt-8"> is</span><span 10123 class="cmtt-8"> zero),</span><span 10124 class="cmtt-8"> stop;</span><span 10125 class="cmtt-8"> there</span><span 10126 class="cmtt-8"> is</span><span 10127 class="cmtt-8"> no</span><span 10128 class="cmtt-8"> residue</span><span 10129 class="cmtt-8"> to</span><span 10130 class="cmtt-8"> decode.</span> 10131 <br class="fancyvrb" /><a 10132 id="x1-110022r3"></a><span 10133 class="cmr-6">3</span><span 10134 class="cmtt-8"> </span><span 10135 class="cmtt-8"> </span><span 10136 class="cmtt-8"> </span><span 10137 class="cmtt-8"> 3)</span><span 10138 class="cmtt-8"> iterate</span><span 10139 class="cmtt-8"> [pass]</span><span 10140 class="cmtt-8"> over</span><span 10141 class="cmtt-8"> the</span><span 10142 class="cmtt-8"> range</span><span 10143 class="cmtt-8"> 0</span><span 10144 class="cmtt-8"> ...</span><span 10145 class="cmtt-8"> 7</span><span 10146 class="cmtt-8"> {</span> 10147 <br class="fancyvrb" /><a 10148 id="x1-110024r4"></a><span 10149 class="cmr-6">4</span><span 10150 class="cmtt-8"> </span><span 10151 class="cmtt-8"> </span> 10152 <br class="fancyvrb" /><a 10153 id="x1-110026r5"></a><span 10154 class="cmr-6">5</span><span 10155 class="cmtt-8"> </span><span 10156 class="cmtt-8"> </span><span 10157 class="cmtt-8"> </span><span 10158 class="cmtt-8"> </span><span 10159 class="cmtt-8"> </span><span 10160 class="cmtt-8"> </span><span 10161 class="cmtt-8"> </span><span 10162 class="cmtt-8"> </span><span 10163 class="cmtt-8"> 4)</span><span 10164 class="cmtt-8"> [partition_count]</span><span 10165 class="cmtt-8"> =</span><span 10166 class="cmtt-8"> 0</span> 10167 <br class="fancyvrb" /><a 10168 id="x1-110028r6"></a><span 10169 class="cmr-6">6</span><span 10170 class="cmtt-8"> </span><span 10171 class="cmtt-8"> </span> 10172 <br class="fancyvrb" /><a 10173 id="x1-110030r7"></a><span 10174 class="cmr-6">7</span><span 10175 class="cmtt-8"> </span><span 10176 class="cmtt-8"> </span><span 10177 class="cmtt-8"> </span><span 10178 class="cmtt-8"> </span><span 10179 class="cmtt-8"> </span><span 10180 class="cmtt-8"> </span><span 10181 class="cmtt-8"> </span><span 10182 class="cmtt-8"> </span><span 10183 class="cmtt-8"> 5)</span><span 10184 class="cmtt-8"> while</span><span 10185 class="cmtt-8"> [partition_count]</span><span 10186 class="cmtt-8"> is</span><span 10187 class="cmtt-8"> less</span><span 10188 class="cmtt-8"> than</span><span 10189 class="cmtt-8"> [partitions_to_read]</span> 10190 <br class="fancyvrb" /><a 10191 id="x1-110032r8"></a><span 10192 class="cmr-6">8</span><span 10193 class="cmtt-8"> </span><span 10194 class="cmtt-8"> </span> 10195 <br class="fancyvrb" /><a 10196 id="x1-110034r9"></a><span 10197 class="cmr-6">9</span><span 10198 class="cmtt-8"> </span><span 10199 class="cmtt-8"> </span><span 10200 class="cmtt-8"> </span><span 10201 class="cmtt-8"> </span><span 10202 class="cmtt-8"> </span><span 10203 class="cmtt-8"> </span><span 10204 class="cmtt-8"> </span><span 10205 class="cmtt-8"> </span><span 10206 class="cmtt-8"> </span><span 10207 class="cmtt-8"> </span><span 10208 class="cmtt-8"> </span><span 10209 class="cmtt-8"> </span><span 10210 class="cmtt-8"> </span><span 10211 class="cmtt-8"> 6)</span><span 10212 class="cmtt-8"> if</span><span 10213 class="cmtt-8"> ([pass]</span><span 10214 class="cmtt-8"> is</span><span 10215 class="cmtt-8"> zero)</span><span 10216 class="cmtt-8"> {</span> 10217 <br class="fancyvrb" /><a 10218 id="x1-110036r10"></a><span 10219 class="cmr-6">10</span><span 10220 class="cmtt-8"> </span><span 10221 class="cmtt-8"> </span> 10222 <br class="fancyvrb" /><a 10223 id="x1-110038r11"></a><span 10224 class="cmr-6">11</span><span 10225 class="cmtt-8"> </span><span 10226 class="cmtt-8"> </span><span 10227 class="cmtt-8"> </span><span 10228 class="cmtt-8"> </span><span 10229 class="cmtt-8"> </span><span 10230 class="cmtt-8"> </span><span 10231 class="cmtt-8"> </span><span 10232 class="cmtt-8"> </span><span 10233 class="cmtt-8"> </span><span 10234 class="cmtt-8"> </span><span 10235 class="cmtt-8"> </span><span 10236 class="cmtt-8"> </span><span 10237 class="cmtt-8"> </span><span 10238 class="cmtt-8"> </span><span 10239 class="cmtt-8"> </span><span 10240 class="cmtt-8"> </span><span 10241 class="cmtt-8"> </span><span 10242 class="cmtt-8"> </span><span 10243 class="cmtt-8"> 7)</span><span 10244 class="cmtt-8"> iterate</span><span 10245 class="cmtt-8"> [j]</span><span 10246 class="cmtt-8"> over</span><span 10247 class="cmtt-8"> the</span><span 10248 class="cmtt-8"> range</span><span 10249 class="cmtt-8"> 0</span><span 10250 class="cmtt-8"> ..</span><span 10251 class="cmtt-8"> [ch]-1</span><span 10252 class="cmtt-8"> {</span> 10253 <br class="fancyvrb" /><a 10254 id="x1-110040r12"></a><span 10255 class="cmr-6">12</span><span 10256 class="cmtt-8"> </span><span 10257 class="cmtt-8"> </span> 10258 <br class="fancyvrb" /><a 10259 id="x1-110042r13"></a><span 10260 class="cmr-6">13</span><span 10261 class="cmtt-8"> </span><span 10262 class="cmtt-8"> </span><span 10263 class="cmtt-8"> </span><span 10264 class="cmtt-8"> </span><span 10265 class="cmtt-8"> </span><span 10266 class="cmtt-8"> </span><span 10267 class="cmtt-8"> </span><span 10268 class="cmtt-8"> </span><span 10269 class="cmtt-8"> </span><span 10270 class="cmtt-8"> </span><span 10271 class="cmtt-8"> </span><span 10272 class="cmtt-8"> </span><span 10273 class="cmtt-8"> </span><span 10274 class="cmtt-8"> </span><span 10275 class="cmtt-8"> </span><span 10276 class="cmtt-8"> </span><span 10277 class="cmtt-8"> </span><span 10278 class="cmtt-8"> </span><span 10279 class="cmtt-8"> </span><span 10280 class="cmtt-8"> </span><span 10281 class="cmtt-8"> </span><span 10282 class="cmtt-8"> </span><span 10283 class="cmtt-8"> </span><span 10284 class="cmtt-8"> 8)</span><span 10285 class="cmtt-8"> if</span><span 10286 class="cmtt-8"> vector</span><span 10287 class="cmtt-8"> [j]</span><span 10288 class="cmtt-8"> is</span><span 10289 class="cmtt-8"> not</span><span 10290 class="cmtt-8"> marked</span><span 10291 class="cmtt-8"> ’do</span><span 10292 class="cmtt-8"> not</span><span 10293 class="cmtt-8"> decode’</span><span 10294 class="cmtt-8"> {</span> 10295 <br class="fancyvrb" /><a 10296 id="x1-110044r14"></a><span 10297 class="cmr-6">14</span><span 10298 class="cmtt-8"> </span><span 10299 class="cmtt-8"> </span> 10300 <br class="fancyvrb" /><a 10301 id="x1-110046r15"></a><span 10302 class="cmr-6">15</span><span 10303 class="cmtt-8"> </span><span 10304 class="cmtt-8"> </span><span 10305 class="cmtt-8"> </span><span 10306 class="cmtt-8"> </span><span 10307 class="cmtt-8"> </span><span 10308 class="cmtt-8"> </span><span 10309 class="cmtt-8"> </span><span 10310 class="cmtt-8"> </span><span 10311 class="cmtt-8"> </span><span 10312 class="cmtt-8"> </span><span 10313 class="cmtt-8"> </span><span 10314 class="cmtt-8"> </span><span 10315 class="cmtt-8"> </span><span 10316 class="cmtt-8"> </span><span 10317 class="cmtt-8"> </span><span 10318 class="cmtt-8"> </span><span 10319 class="cmtt-8"> </span><span 10320 class="cmtt-8"> </span><span 10321 class="cmtt-8"> </span><span 10322 class="cmtt-8"> </span><span 10323 class="cmtt-8"> </span><span 10324 class="cmtt-8"> </span><span 10325 class="cmtt-8"> </span><span 10326 class="cmtt-8"> </span><span 10327 class="cmtt-8"> </span><span 10328 class="cmtt-8"> </span><span 10329 class="cmtt-8"> </span><span 10330 class="cmtt-8"> </span><span 10331 class="cmtt-8"> 9)</span><span 10332 class="cmtt-8"> [temp]</span><span 10333 class="cmtt-8"> =</span><span 10334 class="cmtt-8"> read</span><span 10335 class="cmtt-8"> from</span><span 10336 class="cmtt-8"> packet</span><span 10337 class="cmtt-8"> using</span><span 10338 class="cmtt-8"> codebook</span><span 10339 class="cmtt-8"> [residue_classbook]</span><span 10340 class="cmtt-8"> in</span><span 10341 class="cmtt-8"> scalar</span><span 10342 class="cmtt-8"> context</span> 10343 <br class="fancyvrb" /><a 10344 id="x1-110048r16"></a><span 10345 class="cmr-6">16</span><span 10346 class="cmtt-8"> </span><span 10347 class="cmtt-8"> </span><span 10348 class="cmtt-8"> </span><span 10349 class="cmtt-8"> </span><span 10350 class="cmtt-8"> </span><span 10351 class="cmtt-8"> </span><span 10352 class="cmtt-8"> </span><span 10353 class="cmtt-8"> </span><span 10354 class="cmtt-8"> </span><span 10355 class="cmtt-8"> </span><span 10356 class="cmtt-8"> </span><span 10357 class="cmtt-8"> </span><span 10358 class="cmtt-8"> </span><span 10359 class="cmtt-8"> </span><span 10360 class="cmtt-8"> </span><span 10361 class="cmtt-8"> </span><span 10362 class="cmtt-8"> </span><span 10363 class="cmtt-8"> </span><span 10364 class="cmtt-8"> </span><span 10365 class="cmtt-8"> </span><span 10366 class="cmtt-8"> </span><span 10367 class="cmtt-8"> </span><span 10368 class="cmtt-8"> </span><span 10369 class="cmtt-8"> </span><span 10370 class="cmtt-8"> </span><span 10371 class="cmtt-8"> </span><span 10372 class="cmtt-8"> </span><span 10373 class="cmtt-8"> 10)</span><span 10374 class="cmtt-8"> iterate</span><span 10375 class="cmtt-8"> [i]</span><span 10376 class="cmtt-8"> descending</span><span 10377 class="cmtt-8"> over</span><span 10378 class="cmtt-8"> the</span><span 10379 class="cmtt-8"> range</span><span 10380 class="cmtt-8"> [classwords_per_codeword]-1</span><span 10381 class="cmtt-8"> ...</span><span 10382 class="cmtt-8"> 0</span><span 10383 class="cmtt-8"> {</span> 10384 <br class="fancyvrb" /><a 10385 id="x1-110050r17"></a><span 10386 class="cmr-6">17</span><span 10387 class="cmtt-8"> </span><span 10388 class="cmtt-8"> </span> 10389 <br class="fancyvrb" /><a 10390 id="x1-110052r18"></a><span 10391 class="cmr-6">18</span><span 10392 class="cmtt-8"> </span><span 10393 class="cmtt-8"> </span><span 10394 class="cmtt-8"> </span><span 10395 class="cmtt-8"> </span><span 10396 class="cmtt-8"> </span><span 10397 class="cmtt-8"> </span><span 10398 class="cmtt-8"> </span><span 10399 class="cmtt-8"> </span><span 10400 class="cmtt-8"> </span><span 10401 class="cmtt-8"> </span><span 10402 class="cmtt-8"> </span><span 10403 class="cmtt-8"> </span><span 10404 class="cmtt-8"> </span><span 10405 class="cmtt-8"> </span><span 10406 class="cmtt-8"> </span><span 10407 class="cmtt-8"> </span><span 10408 class="cmtt-8"> </span><span 10409 class="cmtt-8"> </span><span 10410 class="cmtt-8"> </span><span 10411 class="cmtt-8"> </span><span 10412 class="cmtt-8"> </span><span 10413 class="cmtt-8"> </span><span 10414 class="cmtt-8"> </span><span 10415 class="cmtt-8"> </span><span 10416 class="cmtt-8"> </span><span 10417 class="cmtt-8"> </span><span 10418 class="cmtt-8"> </span><span 10419 class="cmtt-8"> </span><span 10420 class="cmtt-8"> </span><span 10421 class="cmtt-8"> </span><span 10422 class="cmtt-8"> </span><span 10423 class="cmtt-8"> </span><span 10424 class="cmtt-8"> 11)</span><span 10425 class="cmtt-8"> array</span><span 10426 class="cmtt-8"> [classifications]</span><span 10427 class="cmtt-8"> element</span><span 10428 class="cmtt-8"> [j],([i]+[partition_count])</span><span 10429 class="cmtt-8"> =</span> 10430 <br class="fancyvrb" /><a 10431 id="x1-110054r19"></a><span 10432 class="cmr-6">19</span><span 10433 class="cmtt-8"> </span><span 10434 class="cmtt-8"> </span><span 10435 class="cmtt-8"> </span><span 10436 class="cmtt-8"> </span><span 10437 class="cmtt-8"> </span><span 10438 class="cmtt-8"> </span><span 10439 class="cmtt-8"> </span><span 10440 class="cmtt-8"> </span><span 10441 class="cmtt-8"> </span><span 10442 class="cmtt-8"> </span><span 10443 class="cmtt-8"> </span><span 10444 class="cmtt-8"> </span><span 10445 class="cmtt-8"> </span><span 10446 class="cmtt-8"> </span><span 10447 class="cmtt-8"> </span><span 10448 class="cmtt-8"> </span><span 10449 class="cmtt-8"> </span><span 10450 class="cmtt-8"> </span><span 10451 class="cmtt-8"> </span><span 10452 class="cmtt-8"> </span><span 10453 class="cmtt-8"> </span><span 10454 class="cmtt-8"> </span><span 10455 class="cmtt-8"> </span><span 10456 class="cmtt-8"> </span><span 10457 class="cmtt-8"> </span><span 10458 class="cmtt-8"> </span><span 10459 class="cmtt-8"> </span><span 10460 class="cmtt-8"> </span><span 10461 class="cmtt-8"> </span><span 10462 class="cmtt-8"> </span><span 10463 class="cmtt-8"> </span><span 10464 class="cmtt-8"> </span><span 10465 class="cmtt-8"> </span><span 10466 class="cmtt-8"> </span><span 10467 class="cmtt-8"> </span><span 10468 class="cmtt-8"> </span><span 10469 class="cmtt-8"> [temp]</span><span 10470 class="cmtt-8"> integer</span><span 10471 class="cmtt-8"> modulo</span><span 10472 class="cmtt-8"> [residue_classifications]</span> 10473 <br class="fancyvrb" /><a 10474 id="x1-110056r20"></a><span 10475 class="cmr-6">20</span><span 10476 class="cmtt-8"> </span><span 10477 class="cmtt-8"> </span><span 10478 class="cmtt-8"> </span><span 10479 class="cmtt-8"> </span><span 10480 class="cmtt-8"> </span><span 10481 class="cmtt-8"> </span><span 10482 class="cmtt-8"> </span><span 10483 class="cmtt-8"> </span><span 10484 class="cmtt-8"> </span><span 10485 class="cmtt-8"> </span><span 10486 class="cmtt-8"> </span><span 10487 class="cmtt-8"> </span><span 10488 class="cmtt-8"> </span><span 10489 class="cmtt-8"> </span><span 10490 class="cmtt-8"> </span><span 10491 class="cmtt-8"> </span><span 10492 class="cmtt-8"> </span><span 10493 class="cmtt-8"> </span><span 10494 class="cmtt-8"> </span><span 10495 class="cmtt-8"> </span><span 10496 class="cmtt-8"> </span><span 10497 class="cmtt-8"> </span><span 10498 class="cmtt-8"> </span><span 10499 class="cmtt-8"> </span><span 10500 class="cmtt-8"> </span><span 10501 class="cmtt-8"> </span><span 10502 class="cmtt-8"> </span><span 10503 class="cmtt-8"> </span><span 10504 class="cmtt-8"> </span><span 10505 class="cmtt-8"> </span><span 10506 class="cmtt-8"> </span><span 10507 class="cmtt-8"> </span><span 10508 class="cmtt-8"> 12)</span><span 10509 class="cmtt-8"> [temp]</span><span 10510 class="cmtt-8"> =</span><span 10511 class="cmtt-8"> [temp]</span><span 10512 class="cmtt-8"> /</span><span 10513 class="cmtt-8"> [residue_classifications]</span><span 10514 class="cmtt-8"> using</span><span 10515 class="cmtt-8"> integer</span><span 10516 class="cmtt-8"> division</span> 10517 <br class="fancyvrb" /><a 10518 id="x1-110058r21"></a><span 10519 class="cmr-6">21</span><span 10520 class="cmtt-8"> </span><span 10521 class="cmtt-8"> </span> 10522 <br class="fancyvrb" /><a 10523 id="x1-110060r22"></a><span 10524 class="cmr-6">22</span><span 10525 class="cmtt-8"> </span><span 10526 class="cmtt-8"> </span><span 10527 class="cmtt-8"> </span><span 10528 class="cmtt-8"> </span><span 10529 class="cmtt-8"> </span><span 10530 class="cmtt-8"> </span><span 10531 class="cmtt-8"> </span><span 10532 class="cmtt-8"> </span><span 10533 class="cmtt-8"> </span><span 10534 class="cmtt-8"> </span><span 10535 class="cmtt-8"> </span><span 10536 class="cmtt-8"> </span><span 10537 class="cmtt-8"> </span><span 10538 class="cmtt-8"> </span><span 10539 class="cmtt-8"> </span><span 10540 class="cmtt-8"> </span><span 10541 class="cmtt-8"> </span><span 10542 class="cmtt-8"> </span><span 10543 class="cmtt-8"> </span><span 10544 class="cmtt-8"> </span><span 10545 class="cmtt-8"> </span><span 10546 class="cmtt-8"> </span><span 10547 class="cmtt-8"> </span><span 10548 class="cmtt-8"> </span><span 10549 class="cmtt-8"> </span><span 10550 class="cmtt-8"> </span><span 10551 class="cmtt-8"> </span><span 10552 class="cmtt-8"> </span><span 10553 class="cmtt-8"> </span><span 10554 class="cmtt-8"> </span><span 10555 class="cmtt-8"> </span><span 10556 class="cmtt-8"> }</span> 10557 <br class="fancyvrb" /><a 10558 id="x1-110062r23"></a><span 10559 class="cmr-6">23</span><span 10560 class="cmtt-8"> </span><span 10561 class="cmtt-8"> </span> 10562 <br class="fancyvrb" /><a 10563 id="x1-110064r24"></a><span 10564 class="cmr-6">24</span><span 10565 class="cmtt-8"> </span><span 10566 class="cmtt-8"> </span><span 10567 class="cmtt-8"> </span><span 10568 class="cmtt-8"> </span><span 10569 class="cmtt-8"> </span><span 10570 class="cmtt-8"> </span><span 10571 class="cmtt-8"> </span><span 10572 class="cmtt-8"> </span><span 10573 class="cmtt-8"> </span><span 10574 class="cmtt-8"> </span><span 10575 class="cmtt-8"> </span><span 10576 class="cmtt-8"> </span><span 10577 class="cmtt-8"> </span><span 10578 class="cmtt-8"> </span><span 10579 class="cmtt-8"> </span><span 10580 class="cmtt-8"> </span><span 10581 class="cmtt-8"> </span><span 10582 class="cmtt-8"> </span><span 10583 class="cmtt-8"> </span><span 10584 class="cmtt-8"> </span><span 10585 class="cmtt-8"> </span><span 10586 class="cmtt-8"> </span><span 10587 class="cmtt-8"> </span><span 10588 class="cmtt-8"> </span><span 10589 class="cmtt-8"> </span><span 10590 class="cmtt-8"> </span><span 10591 class="cmtt-8"> }</span> 10592 <br class="fancyvrb" /><a 10593 id="x1-110066r25"></a><span 10594 class="cmr-6">25</span><span 10595 class="cmtt-8"> </span><span 10596 class="cmtt-8"> </span> 10597 <br class="fancyvrb" /><a 10598 id="x1-110068r26"></a><span 10599 class="cmr-6">26</span><span 10600 class="cmtt-8"> </span><span 10601 class="cmtt-8"> </span><span 10602 class="cmtt-8"> </span><span 10603 class="cmtt-8"> </span><span 10604 class="cmtt-8"> </span><span 10605 class="cmtt-8"> </span><span 10606 class="cmtt-8"> </span><span 10607 class="cmtt-8"> </span><span 10608 class="cmtt-8"> </span><span 10609 class="cmtt-8"> </span><span 10610 class="cmtt-8"> </span><span 10611 class="cmtt-8"> </span><span 10612 class="cmtt-8"> </span><span 10613 class="cmtt-8"> </span><span 10614 class="cmtt-8"> </span><span 10615 class="cmtt-8"> </span><span 10616 class="cmtt-8"> </span><span 10617 class="cmtt-8"> </span><span 10618 class="cmtt-8"> </span><span 10619 class="cmtt-8"> </span><span 10620 class="cmtt-8"> </span><span 10621 class="cmtt-8"> }</span> 10622 <br class="fancyvrb" /><a 10623 id="x1-110070r27"></a><span 10624 class="cmr-6">27</span><span 10625 class="cmtt-8"> </span><span 10626 class="cmtt-8"> </span> 10627 <br class="fancyvrb" /><a 10628 id="x1-110072r28"></a><span 10629 class="cmr-6">28</span><span 10630 class="cmtt-8"> </span><span 10631 class="cmtt-8"> </span><span 10632 class="cmtt-8"> </span><span 10633 class="cmtt-8"> </span><span 10634 class="cmtt-8"> </span><span 10635 class="cmtt-8"> </span><span 10636 class="cmtt-8"> </span><span 10637 class="cmtt-8"> </span><span 10638 class="cmtt-8"> </span><span 10639 class="cmtt-8"> </span><span 10640 class="cmtt-8"> </span><span 10641 class="cmtt-8"> </span><span 10642 class="cmtt-8"> </span><span 10643 class="cmtt-8"> </span><span 10644 class="cmtt-8"> </span><span 10645 class="cmtt-8"> </span><span 10646 class="cmtt-8"> }</span> 10647 <br class="fancyvrb" /><a 10648 id="x1-110074r29"></a><span 10649 class="cmr-6">29</span><span 10650 class="cmtt-8"> </span><span 10651 class="cmtt-8"> </span> 10652 <br class="fancyvrb" /><a 10653 id="x1-110076r30"></a><span 10654 class="cmr-6">30</span><span 10655 class="cmtt-8"> </span><span 10656 class="cmtt-8"> </span><span 10657 class="cmtt-8"> </span><span 10658 class="cmtt-8"> </span><span 10659 class="cmtt-8"> </span><span 10660 class="cmtt-8"> </span><span 10661 class="cmtt-8"> </span><span 10662 class="cmtt-8"> </span><span 10663 class="cmtt-8"> </span><span 10664 class="cmtt-8"> </span><span 10665 class="cmtt-8"> </span><span 10666 class="cmtt-8"> </span><span 10667 class="cmtt-8"> 13)</span><span 10668 class="cmtt-8"> iterate</span><span 10669 class="cmtt-8"> [i]</span><span 10670 class="cmtt-8"> over</span><span 10671 class="cmtt-8"> the</span><span 10672 class="cmtt-8"> range</span><span 10673 class="cmtt-8"> 0</span><span 10674 class="cmtt-8"> ..</span><span 10675 class="cmtt-8"> ([classwords_per_codeword]</span><span 10676 class="cmtt-8"> -</span><span 10677 class="cmtt-8"> 1)</span><span 10678 class="cmtt-8"> while</span><span 10679 class="cmtt-8"> [partition_count]</span> 10680 <br class="fancyvrb" /><a 10681 id="x1-110078r31"></a><span 10682 class="cmr-6">31</span><span 10683 class="cmtt-8"> </span><span 10684 class="cmtt-8"> </span><span 10685 class="cmtt-8"> </span><span 10686 class="cmtt-8"> </span><span 10687 class="cmtt-8"> </span><span 10688 class="cmtt-8"> </span><span 10689 class="cmtt-8"> </span><span 10690 class="cmtt-8"> </span><span 10691 class="cmtt-8"> </span><span 10692 class="cmtt-8"> </span><span 10693 class="cmtt-8"> </span><span 10694 class="cmtt-8"> </span><span 10695 class="cmtt-8"> </span><span 10696 class="cmtt-8"> </span><span 10697 class="cmtt-8"> </span><span 10698 class="cmtt-8"> </span><span 10699 class="cmtt-8"> is</span><span 10700 class="cmtt-8"> also</span><span 10701 class="cmtt-8"> less</span><span 10702 class="cmtt-8"> than</span><span 10703 class="cmtt-8"> [partitions_to_read]</span><span 10704 class="cmtt-8"> {</span> 10705 <br class="fancyvrb" /><a 10706 id="x1-110080r32"></a><span 10707 class="cmr-6">32</span><span 10708 class="cmtt-8"> </span><span 10709 class="cmtt-8"> </span> 10710 <br class="fancyvrb" /><a 10711 id="x1-110082r33"></a><span 10712 class="cmr-6">33</span><span 10713 class="cmtt-8"> </span><span 10714 class="cmtt-8"> </span><span 10715 class="cmtt-8"> </span><span 10716 class="cmtt-8"> </span><span 10717 class="cmtt-8"> </span><span 10718 class="cmtt-8"> </span><span 10719 class="cmtt-8"> </span><span 10720 class="cmtt-8"> </span><span 10721 class="cmtt-8"> </span><span 10722 class="cmtt-8"> </span><span 10723 class="cmtt-8"> </span><span 10724 class="cmtt-8"> </span><span 10725 class="cmtt-8"> </span><span 10726 class="cmtt-8"> </span><span 10727 class="cmtt-8"> </span><span 10728 class="cmtt-8"> </span><span 10729 class="cmtt-8"> </span><span 10730 class="cmtt-8"> </span><span 10731 class="cmtt-8"> 14)</span><span 10732 class="cmtt-8"> iterate</span><span 10733 class="cmtt-8"> [j]</span><span 10734 class="cmtt-8"> over</span><span 10735 class="cmtt-8"> the</span><span 10736 class="cmtt-8"> range</span><span 10737 class="cmtt-8"> 0</span><span 10738 class="cmtt-8"> ..</span><span 10739 class="cmtt-8"> [ch]-1</span><span 10740 class="cmtt-8"> {</span> 10741 <br class="fancyvrb" /><a 10742 id="x1-110084r34"></a><span 10743 class="cmr-6">34</span><span 10744 class="cmtt-8"> </span><span 10745 class="cmtt-8"> </span> 10746 <br class="fancyvrb" /><a 10747 id="x1-110086r35"></a><span 10748 class="cmr-6">35</span><span 10749 class="cmtt-8"> </span><span 10750 class="cmtt-8"> </span><span 10751 class="cmtt-8"> </span><span 10752 class="cmtt-8"> </span><span 10753 class="cmtt-8"> </span><span 10754 class="cmtt-8"> </span><span 10755 class="cmtt-8"> </span><span 10756 class="cmtt-8"> </span><span 10757 class="cmtt-8"> </span><span 10758 class="cmtt-8"> </span><span 10759 class="cmtt-8"> </span><span 10760 class="cmtt-8"> </span><span 10761 class="cmtt-8"> </span><span 10762 class="cmtt-8"> </span><span 10763 class="cmtt-8"> </span><span 10764 class="cmtt-8"> </span><span 10765 class="cmtt-8"> </span><span 10766 class="cmtt-8"> </span><span 10767 class="cmtt-8"> </span><span 10768 class="cmtt-8"> </span><span 10769 class="cmtt-8"> </span><span 10770 class="cmtt-8"> </span><span 10771 class="cmtt-8"> </span><span 10772 class="cmtt-8"> 15)</span><span 10773 class="cmtt-8"> if</span><span 10774 class="cmtt-8"> vector</span><span 10775 class="cmtt-8"> [j]</span><span 10776 class="cmtt-8"> is</span><span 10777 class="cmtt-8"> not</span><span 10778 class="cmtt-8"> marked</span><span 10779 class="cmtt-8"> ’do</span><span 10780 class="cmtt-8"> not</span><span 10781 class="cmtt-8"> decode’</span><span 10782 class="cmtt-8"> {</span> 10783 <br class="fancyvrb" /><a 10784 id="x1-110088r36"></a><span 10785 class="cmr-6">36</span><span 10786 class="cmtt-8"> </span><span 10787 class="cmtt-8"> </span> 10788 <br class="fancyvrb" /><a 10789 id="x1-110090r37"></a><span 10790 class="cmr-6">37</span><span 10791 class="cmtt-8"> </span><span 10792 class="cmtt-8"> </span><span 10793 class="cmtt-8"> </span><span 10794 class="cmtt-8"> </span><span 10795 class="cmtt-8"> </span><span 10796 class="cmtt-8"> </span><span 10797 class="cmtt-8"> </span><span 10798 class="cmtt-8"> </span><span 10799 class="cmtt-8"> </span><span 10800 class="cmtt-8"> </span><span 10801 class="cmtt-8"> </span><span 10802 class="cmtt-8"> </span><span 10803 class="cmtt-8"> </span><span 10804 class="cmtt-8"> </span><span 10805 class="cmtt-8"> </span><span 10806 class="cmtt-8"> </span><span 10807 class="cmtt-8"> </span><span 10808 class="cmtt-8"> </span><span 10809 class="cmtt-8"> </span><span 10810 class="cmtt-8"> </span><span 10811 class="cmtt-8"> </span><span 10812 class="cmtt-8"> </span><span 10813 class="cmtt-8"> </span><span 10814 class="cmtt-8"> </span><span 10815 class="cmtt-8"> </span><span 10816 class="cmtt-8"> </span><span 10817 class="cmtt-8"> </span><span 10818 class="cmtt-8"> </span><span 10819 class="cmtt-8"> 16)</span><span 10820 class="cmtt-8"> [vqclass]</span><span 10821 class="cmtt-8"> =</span><span 10822 class="cmtt-8"> array</span><span 10823 class="cmtt-8"> [classifications]</span><span 10824 class="cmtt-8"> element</span><span 10825 class="cmtt-8"> [j],[partition_count]</span> 10826 <br class="fancyvrb" /><a 10827 id="x1-110092r38"></a><span 10828 class="cmr-6">38</span><span 10829 class="cmtt-8"> </span><span 10830 class="cmtt-8"> </span><span 10831 class="cmtt-8"> </span><span 10832 class="cmtt-8"> </span><span 10833 class="cmtt-8"> </span><span 10834 class="cmtt-8"> </span><span 10835 class="cmtt-8"> </span><span 10836 class="cmtt-8"> </span><span 10837 class="cmtt-8"> </span><span 10838 class="cmtt-8"> </span><span 10839 class="cmtt-8"> </span><span 10840 class="cmtt-8"> </span><span 10841 class="cmtt-8"> </span><span 10842 class="cmtt-8"> </span><span 10843 class="cmtt-8"> </span><span 10844 class="cmtt-8"> </span><span 10845 class="cmtt-8"> </span><span 10846 class="cmtt-8"> </span><span 10847 class="cmtt-8"> </span><span 10848 class="cmtt-8"> </span><span 10849 class="cmtt-8"> </span><span 10850 class="cmtt-8"> </span><span 10851 class="cmtt-8"> </span><span 10852 class="cmtt-8"> </span><span 10853 class="cmtt-8"> </span><span 10854 class="cmtt-8"> </span><span 10855 class="cmtt-8"> </span><span 10856 class="cmtt-8"> </span><span 10857 class="cmtt-8"> 17)</span><span 10858 class="cmtt-8"> [vqbook]</span><span 10859 class="cmtt-8"> =</span><span 10860 class="cmtt-8"> array</span><span 10861 class="cmtt-8"> [residue_books]</span><span 10862 class="cmtt-8"> element</span><span 10863 class="cmtt-8"> [vqclass],[pass]</span> 10864 <br class="fancyvrb" /><a 10865 id="x1-110094r39"></a><span 10866 class="cmr-6">39</span><span 10867 class="cmtt-8"> </span><span 10868 class="cmtt-8"> </span><span 10869 class="cmtt-8"> </span><span 10870 class="cmtt-8"> </span><span 10871 class="cmtt-8"> </span><span 10872 class="cmtt-8"> </span><span 10873 class="cmtt-8"> </span><span 10874 class="cmtt-8"> </span><span 10875 class="cmtt-8"> </span><span 10876 class="cmtt-8"> </span><span 10877 class="cmtt-8"> </span><span 10878 class="cmtt-8"> </span><span 10879 class="cmtt-8"> </span><span 10880 class="cmtt-8"> </span><span 10881 class="cmtt-8"> </span><span 10882 class="cmtt-8"> </span><span 10883 class="cmtt-8"> </span><span 10884 class="cmtt-8"> </span><span 10885 class="cmtt-8"> </span><span 10886 class="cmtt-8"> </span><span 10887 class="cmtt-8"> </span><span 10888 class="cmtt-8"> </span><span 10889 class="cmtt-8"> </span><span 10890 class="cmtt-8"> </span><span 10891 class="cmtt-8"> </span><span 10892 class="cmtt-8"> </span><span 10893 class="cmtt-8"> </span><span 10894 class="cmtt-8"> </span><span 10895 class="cmtt-8"> 18)</span><span 10896 class="cmtt-8"> if</span><span 10897 class="cmtt-8"> ([vqbook]</span><span 10898 class="cmtt-8"> is</span><span 10899 class="cmtt-8"> not</span><span 10900 class="cmtt-8"> ’unused’)</span><span 10901 class="cmtt-8"> {</span> 10902 <br class="fancyvrb" /><a 10903 id="x1-110096r40"></a><span 10904 class="cmr-6">40</span><span 10905 class="cmtt-8"> </span><span 10906 class="cmtt-8"> </span> 10907 <br class="fancyvrb" /><a 10908 id="x1-110098r41"></a><span 10909 class="cmr-6">41</span><span 10910 class="cmtt-8"> </span><span 10911 class="cmtt-8"> </span><span 10912 class="cmtt-8"> </span><span 10913 class="cmtt-8"> </span><span 10914 class="cmtt-8"> </span><span 10915 class="cmtt-8"> </span><span 10916 class="cmtt-8"> </span><span 10917 class="cmtt-8"> </span><span 10918 class="cmtt-8"> </span><span 10919 class="cmtt-8"> </span><span 10920 class="cmtt-8"> </span><span 10921 class="cmtt-8"> </span><span 10922 class="cmtt-8"> </span><span 10923 class="cmtt-8"> </span><span 10924 class="cmtt-8"> </span><span 10925 class="cmtt-8"> </span><span 10926 class="cmtt-8"> </span><span 10927 class="cmtt-8"> </span><span 10928 class="cmtt-8"> </span><span 10929 class="cmtt-8"> </span><span 10930 class="cmtt-8"> </span><span 10931 class="cmtt-8"> </span><span 10932 class="cmtt-8"> </span><span 10933 class="cmtt-8"> </span><span 10934 class="cmtt-8"> </span><span 10935 class="cmtt-8"> </span><span 10936 class="cmtt-8"> </span><span 10937 class="cmtt-8"> </span><span 10938 class="cmtt-8"> </span><span 10939 class="cmtt-8"> </span><span 10940 class="cmtt-8"> </span><span 10941 class="cmtt-8"> </span><span 10942 class="cmtt-8"> </span><span 10943 class="cmtt-8"> 19)</span><span 10944 class="cmtt-8"> decode</span><span 10945 class="cmtt-8"> partition</span><span 10946 class="cmtt-8"> into</span><span 10947 class="cmtt-8"> output</span><span 10948 class="cmtt-8"> vector</span><span 10949 class="cmtt-8"> number</span><span 10950 class="cmtt-8"> [j],</span><span 10951 class="cmtt-8"> starting</span><span 10952 class="cmtt-8"> at</span><span 10953 class="cmtt-8"> scalar</span> 10954 <br class="fancyvrb" /><a 10955 id="x1-110100r42"></a><span 10956 class="cmr-6">42</span><span 10957 class="cmtt-8"> </span><span 10958 class="cmtt-8"> </span><span 10959 class="cmtt-8"> </span><span 10960 class="cmtt-8"> </span><span 10961 class="cmtt-8"> </span><span 10962 class="cmtt-8"> </span><span 10963 class="cmtt-8"> </span><span 10964 class="cmtt-8"> </span><span 10965 class="cmtt-8"> </span><span 10966 class="cmtt-8"> </span><span 10967 class="cmtt-8"> </span><span 10968 class="cmtt-8"> </span><span 10969 class="cmtt-8"> </span><span 10970 class="cmtt-8"> </span><span 10971 class="cmtt-8"> </span><span 10972 class="cmtt-8"> </span><span 10973 class="cmtt-8"> </span><span 10974 class="cmtt-8"> </span><span 10975 class="cmtt-8"> </span><span 10976 class="cmtt-8"> </span><span 10977 class="cmtt-8"> </span><span 10978 class="cmtt-8"> </span><span 10979 class="cmtt-8"> </span><span 10980 class="cmtt-8"> </span><span 10981 class="cmtt-8"> </span><span 10982 class="cmtt-8"> </span><span 10983 class="cmtt-8"> </span><span 10984 class="cmtt-8"> </span><span 10985 class="cmtt-8"> </span><span 10986 class="cmtt-8"> </span><span 10987 class="cmtt-8"> </span><span 10988 class="cmtt-8"> </span><span 10989 class="cmtt-8"> </span><span 10990 class="cmtt-8"> </span><span 10991 class="cmtt-8"> </span><span 10992 class="cmtt-8"> </span><span 10993 class="cmtt-8"> </span><span 10994 class="cmtt-8"> offset</span><span 10995 class="cmtt-8"> [limit_residue_begin]+[partition_count]*[residue_partition_size]</span><span 10996 class="cmtt-8"> using</span> 10997 <br class="fancyvrb" /><a 10998 id="x1-110102r43"></a><span 10999 class="cmr-6">43</span><span 11000 class="cmtt-8"> </span><span 11001 class="cmtt-8"> </span><span 11002 class="cmtt-8"> </span><span 11003 class="cmtt-8"> </span><span 11004 class="cmtt-8"> </span><span 11005 class="cmtt-8"> </span><span 11006 class="cmtt-8"> </span><span 11007 class="cmtt-8"> </span><span 11008 class="cmtt-8"> </span><span 11009 class="cmtt-8"> </span><span 11010 class="cmtt-8"> </span><span 11011 class="cmtt-8"> </span><span 11012 class="cmtt-8"> </span><span 11013 class="cmtt-8"> </span><span 11014 class="cmtt-8"> </span><span 11015 class="cmtt-8"> </span><span 11016 class="cmtt-8"> </span><span 11017 class="cmtt-8"> </span><span 11018 class="cmtt-8"> </span><span 11019 class="cmtt-8"> </span><span 11020 class="cmtt-8"> </span><span 11021 class="cmtt-8"> </span><span 11022 class="cmtt-8"> </span><span 11023 class="cmtt-8"> </span><span 11024 class="cmtt-8"> </span><span 11025 class="cmtt-8"> </span><span 11026 class="cmtt-8"> </span><span 11027 class="cmtt-8"> </span><span 11028 class="cmtt-8"> </span><span 11029 class="cmtt-8"> </span><span 11030 class="cmtt-8"> </span><span 11031 class="cmtt-8"> </span><span 11032 class="cmtt-8"> </span><span 11033 class="cmtt-8"> </span><span 11034 class="cmtt-8"> </span><span 11035 class="cmtt-8"> </span><span 11036 class="cmtt-8"> </span><span 11037 class="cmtt-8"> codebook</span><span 11038 class="cmtt-8"> number</span><span 11039 class="cmtt-8"> [vqbook]</span><span 11040 class="cmtt-8"> in</span><span 11041 class="cmtt-8"> VQ</span><span 11042 class="cmtt-8"> context</span> 11043 <br class="fancyvrb" /><a 11044 id="x1-110104r44"></a><span 11045 class="cmr-6">44</span><span 11046 class="cmtt-8"> </span><span 11047 class="cmtt-8"> </span><span 11048 class="cmtt-8"> </span><span 11049 class="cmtt-8"> </span><span 11050 class="cmtt-8"> </span><span 11051 class="cmtt-8"> </span><span 11052 class="cmtt-8"> </span><span 11053 class="cmtt-8"> </span><span 11054 class="cmtt-8"> </span><span 11055 class="cmtt-8"> </span><span 11056 class="cmtt-8"> </span><span 11057 class="cmtt-8"> </span><span 11058 class="cmtt-8"> </span><span 11059 class="cmtt-8"> </span><span 11060 class="cmtt-8"> </span><span 11061 class="cmtt-8"> </span><span 11062 class="cmtt-8"> </span><span 11063 class="cmtt-8"> </span><span 11064 class="cmtt-8"> </span><span 11065 class="cmtt-8"> </span><span 11066 class="cmtt-8"> </span><span 11067 class="cmtt-8"> </span><span 11068 class="cmtt-8"> </span><span 11069 class="cmtt-8"> </span><span 11070 class="cmtt-8"> </span><span 11071 class="cmtt-8"> </span><span 11072 class="cmtt-8"> </span><span 11073 class="cmtt-8"> }</span> 11074 11075 11076 11077 <br class="fancyvrb" /><a 11078 id="x1-110106r45"></a><span 11079 class="cmr-6">45</span><span 11080 class="cmtt-8"> </span><span 11081 class="cmtt-8"> </span><span 11082 class="cmtt-8"> </span><span 11083 class="cmtt-8"> </span><span 11084 class="cmtt-8"> </span><span 11085 class="cmtt-8"> </span><span 11086 class="cmtt-8"> </span><span 11087 class="cmtt-8"> </span><span 11088 class="cmtt-8"> </span><span 11089 class="cmtt-8"> </span><span 11090 class="cmtt-8"> </span><span 11091 class="cmtt-8"> </span><span 11092 class="cmtt-8"> </span><span 11093 class="cmtt-8"> </span><span 11094 class="cmtt-8"> </span><span 11095 class="cmtt-8"> </span><span 11096 class="cmtt-8"> </span><span 11097 class="cmtt-8"> </span><span 11098 class="cmtt-8"> </span><span 11099 class="cmtt-8"> </span><span 11100 class="cmtt-8"> </span><span 11101 class="cmtt-8"> </span><span 11102 class="cmtt-8"> }</span> 11103 <br class="fancyvrb" /><a 11104 id="x1-110108r46"></a><span 11105 class="cmr-6">46</span><span 11106 class="cmtt-8"> </span><span 11107 class="cmtt-8"> </span> 11108 <br class="fancyvrb" /><a 11109 id="x1-110110r47"></a><span 11110 class="cmr-6">47</span><span 11111 class="cmtt-8"> </span><span 11112 class="cmtt-8"> </span><span 11113 class="cmtt-8"> </span><span 11114 class="cmtt-8"> </span><span 11115 class="cmtt-8"> </span><span 11116 class="cmtt-8"> </span><span 11117 class="cmtt-8"> </span><span 11118 class="cmtt-8"> </span><span 11119 class="cmtt-8"> </span><span 11120 class="cmtt-8"> </span><span 11121 class="cmtt-8"> </span><span 11122 class="cmtt-8"> </span><span 11123 class="cmtt-8"> </span><span 11124 class="cmtt-8"> </span><span 11125 class="cmtt-8"> </span><span 11126 class="cmtt-8"> </span><span 11127 class="cmtt-8"> </span><span 11128 class="cmtt-8"> </span><span 11129 class="cmtt-8"> 20)</span><span 11130 class="cmtt-8"> increment</span><span 11131 class="cmtt-8"> [partition_count]</span><span 11132 class="cmtt-8"> by</span><span 11133 class="cmtt-8"> one</span> 11134 <br class="fancyvrb" /><a 11135 id="x1-110112r48"></a><span 11136 class="cmr-6">48</span><span 11137 class="cmtt-8"> </span><span 11138 class="cmtt-8"> </span> 11139 <br class="fancyvrb" /><a 11140 id="x1-110114r49"></a><span 11141 class="cmr-6">49</span><span 11142 class="cmtt-8"> </span><span 11143 class="cmtt-8"> </span><span 11144 class="cmtt-8"> </span><span 11145 class="cmtt-8"> </span><span 11146 class="cmtt-8"> </span><span 11147 class="cmtt-8"> </span><span 11148 class="cmtt-8"> </span><span 11149 class="cmtt-8"> </span><span 11150 class="cmtt-8"> </span><span 11151 class="cmtt-8"> </span><span 11152 class="cmtt-8"> </span><span 11153 class="cmtt-8"> </span><span 11154 class="cmtt-8"> </span><span 11155 class="cmtt-8"> </span><span 11156 class="cmtt-8"> </span><span 11157 class="cmtt-8"> </span><span 11158 class="cmtt-8"> }</span> 11159 <br class="fancyvrb" /><a 11160 id="x1-110116r50"></a><span 11161 class="cmr-6">50</span><span 11162 class="cmtt-8"> </span><span 11163 class="cmtt-8"> </span><span 11164 class="cmtt-8"> </span><span 11165 class="cmtt-8"> </span><span 11166 class="cmtt-8"> </span><span 11167 class="cmtt-8"> </span><span 11168 class="cmtt-8"> </span><span 11169 class="cmtt-8"> </span><span 11170 class="cmtt-8"> </span><span 11171 class="cmtt-8"> </span><span 11172 class="cmtt-8"> </span><span 11173 class="cmtt-8"> }</span> 11174 <br class="fancyvrb" /><a 11175 id="x1-110118r51"></a><span 11176 class="cmr-6">51</span><span 11177 class="cmtt-8"> </span><span 11178 class="cmtt-8"> </span><span 11179 class="cmtt-8"> </span><span 11180 class="cmtt-8"> </span><span 11181 class="cmtt-8"> </span><span 11182 class="cmtt-8"> </span><span 11183 class="cmtt-8"> }</span> 11184 <br class="fancyvrb" /><a 11185 id="x1-110120r52"></a><span 11186 class="cmr-6">52</span><span 11187 class="cmtt-8"> </span><span 11188 class="cmtt-8"> </span> 11189 <br class="fancyvrb" /><a 11190 id="x1-110122r53"></a><span 11191 class="cmr-6">53</span><span 11192 class="cmtt-8"> </span><span 11193 class="cmtt-8"> </span><span 11194 class="cmtt-8"> 21)</span><span 11195 class="cmtt-8"> done</span> 11196 <br class="fancyvrb" /><a 11197 id="x1-110124r54"></a><span 11198 class="cmr-6">54</span><span 11199 class="cmtt-8"> </span><span 11200 class="cmtt-8"> </span> 11201 </div> 11202 <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence. 11203 Decode returns the result of vector decode up to that point. 11204 <!--l. 350--><p class="noindent" > 11205 <h5 class="subsubsectionHead"><span class="titlemark">8.6.3 </span> <a 11206 id="x1-1110008.6.3"></a>format 0 specifics</h5> 11207 <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the ’Residue Format: residue 0’ 11208 section. The following pseudocode presents the same algorithm. Assume: 11209 <ul class="itemize1"> 11210 <li class="itemize"><span 11211 class="cmtt-12">[n] </span>is the value in <span 11212 class="cmtt-12">[residue_partition_size]</span> 11213 </li> 11214 <li class="itemize"><span 11215 class="cmtt-12">[v] </span>is the residue vector 11216 </li> 11217 <li class="itemize"><span 11218 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul> 11219 <!--l. 363--><p class="noindent" > 11220 <div class="fancyvrb" id="fancyvrb41"> 11221 <a 11222 id="x1-111002r1"></a><span 11223 class="cmr-6">1</span><span 11224 class="cmtt-8"> </span><span 11225 class="cmtt-8"> </span><span 11226 class="cmtt-8"> 1)</span><span 11227 class="cmtt-8"> [step]</span><span 11228 class="cmtt-8"> =</span><span 11229 class="cmtt-8"> [n]</span><span 11230 class="cmtt-8"> /</span><span 11231 class="cmtt-8"> [codebook_dimensions]</span> 11232 <br class="fancyvrb" /><a 11233 id="x1-111004r2"></a><span 11234 class="cmr-6">2</span><span 11235 class="cmtt-8"> </span><span 11236 class="cmtt-8"> </span><span 11237 class="cmtt-8"> 2)</span><span 11238 class="cmtt-8"> iterate</span><span 11239 class="cmtt-8"> [i]</span><span 11240 class="cmtt-8"> over</span><span 11241 class="cmtt-8"> the</span><span 11242 class="cmtt-8"> range</span><span 11243 class="cmtt-8"> 0</span><span 11244 class="cmtt-8"> ...</span><span 11245 class="cmtt-8"> [step]-1</span><span 11246 class="cmtt-8"> {</span> 11247 <br class="fancyvrb" /><a 11248 id="x1-111006r3"></a><span 11249 class="cmr-6">3</span><span 11250 class="cmtt-8"> </span><span 11251 class="cmtt-8"> </span> 11252 <br class="fancyvrb" /><a 11253 id="x1-111008r4"></a><span 11254 class="cmr-6">4</span><span 11255 class="cmtt-8"> </span><span 11256 class="cmtt-8"> </span><span 11257 class="cmtt-8"> </span><span 11258 class="cmtt-8"> </span><span 11259 class="cmtt-8"> </span><span 11260 class="cmtt-8"> </span><span 11261 class="cmtt-8"> </span><span 11262 class="cmtt-8"> 3)</span><span 11263 class="cmtt-8"> vector</span><span 11264 class="cmtt-8"> [entry_temp]</span><span 11265 class="cmtt-8"> =</span><span 11266 class="cmtt-8"> read</span><span 11267 class="cmtt-8"> vector</span><span 11268 class="cmtt-8"> from</span><span 11269 class="cmtt-8"> packet</span><span 11270 class="cmtt-8"> using</span><span 11271 class="cmtt-8"> current</span><span 11272 class="cmtt-8"> codebook</span><span 11273 class="cmtt-8"> in</span><span 11274 class="cmtt-8"> VQ</span><span 11275 class="cmtt-8"> context</span> 11276 <br class="fancyvrb" /><a 11277 id="x1-111010r5"></a><span 11278 class="cmr-6">5</span><span 11279 class="cmtt-8"> </span><span 11280 class="cmtt-8"> </span><span 11281 class="cmtt-8"> </span><span 11282 class="cmtt-8"> </span><span 11283 class="cmtt-8"> </span><span 11284 class="cmtt-8"> </span><span 11285 class="cmtt-8"> </span><span 11286 class="cmtt-8"> 4)</span><span 11287 class="cmtt-8"> iterate</span><span 11288 class="cmtt-8"> [j]</span><span 11289 class="cmtt-8"> over</span><span 11290 class="cmtt-8"> the</span><span 11291 class="cmtt-8"> range</span><span 11292 class="cmtt-8"> 0</span><span 11293 class="cmtt-8"> ...</span><span 11294 class="cmtt-8"> [codebook_dimensions]-1</span><span 11295 class="cmtt-8"> {</span> 11296 <br class="fancyvrb" /><a 11297 id="x1-111012r6"></a><span 11298 class="cmr-6">6</span><span 11299 class="cmtt-8"> </span><span 11300 class="cmtt-8"> </span> 11301 <br class="fancyvrb" /><a 11302 id="x1-111014r7"></a><span 11303 class="cmr-6">7</span><span 11304 class="cmtt-8"> </span><span 11305 class="cmtt-8"> </span><span 11306 class="cmtt-8"> </span><span 11307 class="cmtt-8"> </span><span 11308 class="cmtt-8"> </span><span 11309 class="cmtt-8"> </span><span 11310 class="cmtt-8"> </span><span 11311 class="cmtt-8"> </span><span 11312 class="cmtt-8"> </span><span 11313 class="cmtt-8"> </span><span 11314 class="cmtt-8"> </span><span 11315 class="cmtt-8"> </span><span 11316 class="cmtt-8"> 5)</span><span 11317 class="cmtt-8"> vector</span><span 11318 class="cmtt-8"> [v]</span><span 11319 class="cmtt-8"> element</span><span 11320 class="cmtt-8"> ([offset]+[i]+[j]*[step])</span><span 11321 class="cmtt-8"> =</span> 11322 <br class="fancyvrb" /><a 11323 id="x1-111016r8"></a><span 11324 class="cmr-6">8</span><span 11325 class="cmtt-8"> </span><span 11326 class="cmtt-8">  </span><span 11327 class="cmtt-8"> </span><span 11328 class="cmtt-8"> </span><span 11329 class="cmtt-8"> </span><span 11330 class="cmtt-8"> </span><span 11331 class="cmtt-8"> </span><span 11332 class="cmtt-8"> </span><span 11333 class="cmtt-8"> </span><span 11334 class="cmtt-8"> vector</span><span 11335 class="cmtt-8"> [v]</span><span 11336 class="cmtt-8"> element</span><span 11337 class="cmtt-8"> ([offset]+[i]+[j]*[step])</span><span 11338 class="cmtt-8"> +</span> 11339 <br class="fancyvrb" /><a 11340 id="x1-111018r9"></a><span 11341 class="cmr-6">9</span><span 11342 class="cmtt-8"> </span><span 11343 class="cmtt-8"> </span><span 11344 class="cmtt-8"> </span><span 11345 class="cmtt-8"> </span><span 11346 class="cmtt-8"> </span><span 11347 class="cmtt-8"> </span><span 11348 class="cmtt-8"> </span><span 11349 class="cmtt-8"> </span><span 11350 class="cmtt-8"> </span><span 11351 class="cmtt-8"> </span><span 11352 class="cmtt-8"> </span><span 11353 class="cmtt-8"> </span><span 11354 class="cmtt-8"> </span><span 11355 class="cmtt-8"> </span><span 11356 class="cmtt-8"> </span><span 11357 class="cmtt-8"> </span><span 11358 class="cmtt-8"> </span><span 11359 class="cmtt-8"> vector</span><span 11360 class="cmtt-8"> [entry_temp]</span><span 11361 class="cmtt-8"> element</span><span 11362 class="cmtt-8"> [j]</span> 11363 <br class="fancyvrb" /><a 11364 id="x1-111020r10"></a><span 11365 class="cmr-6">10</span><span 11366 class="cmtt-8"> </span><span 11367 class="cmtt-8"> </span> 11368 <br class="fancyvrb" /><a 11369 id="x1-111022r11"></a><span 11370 class="cmr-6">11</span><span 11371 class="cmtt-8"> </span><span 11372 class="cmtt-8"> </span><span 11373 class="cmtt-8"> </span><span 11374 class="cmtt-8"> </span><span 11375 class="cmtt-8"> </span><span 11376 class="cmtt-8"> </span><span 11377 class="cmtt-8"> </span><span 11378 class="cmtt-8"> </span><span 11379 class="cmtt-8"> </span><span 11380 class="cmtt-8"> </span><span 11381 class="cmtt-8"> }</span> 11382 <br class="fancyvrb" /><a 11383 id="x1-111024r12"></a><span 11384 class="cmr-6">12</span><span 11385 class="cmtt-8"> </span><span 11386 class="cmtt-8"> </span> 11387 <br class="fancyvrb" /><a 11388 id="x1-111026r13"></a><span 11389 class="cmr-6">13</span><span 11390 class="cmtt-8"> </span><span 11391 class="cmtt-8"> </span><span 11392 class="cmtt-8"> </span><span 11393 class="cmtt-8"> </span><span 11394 class="cmtt-8"> </span><span 11395 class="cmtt-8"> }</span> 11396 <br class="fancyvrb" /><a 11397 id="x1-111028r14"></a><span 11398 class="cmr-6">14</span><span 11399 class="cmtt-8"> </span><span 11400 class="cmtt-8"> </span> 11401 <br class="fancyvrb" /><a 11402 id="x1-111030r15"></a><span 11403 class="cmr-6">15</span><span 11404 class="cmtt-8"> </span><span 11405 class="cmtt-8"> </span><span 11406 class="cmtt-8"> </span><span 11407 class="cmtt-8"> 6)</span><span 11408 class="cmtt-8"> done</span> 11409 <br class="fancyvrb" /><a 11410 id="x1-111032r16"></a><span 11411 class="cmr-6">16</span><span 11412 class="cmtt-8"> </span><span 11413 class="cmtt-8"> </span> 11414 11415 11416 11417 </div> 11418 <!--l. 384--><p class="noindent" > 11419 <h5 class="subsubsectionHead"><span class="titlemark">8.6.4 </span> <a 11420 id="x1-1120008.6.4"></a>format 1 specifics</h5> 11421 <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the ’Residue Format: residue 1’ 11422 section. The following pseudocode presents the same algorithm. Assume: 11423 <ul class="itemize1"> 11424 <li class="itemize"><span 11425 class="cmtt-12">[n] </span>is the value in <span 11426 class="cmtt-12">[residue_partition_size]</span> 11427 </li> 11428 <li class="itemize"><span 11429 class="cmtt-12">[v] </span>is the residue vector 11430 </li> 11431 <li class="itemize"><span 11432 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul> 11433 <!--l. 398--><p class="noindent" > 11434 <div class="fancyvrb" id="fancyvrb42"> 11435 <a 11436 id="x1-112002r1"></a><span 11437 class="cmr-6">1</span><span 11438 class="cmtt-8"> </span><span 11439 class="cmtt-8"> </span><span 11440 class="cmtt-8"> 1)</span><span 11441 class="cmtt-8"> [i]</span><span 11442 class="cmtt-8"> =</span><span 11443 class="cmtt-8"> 0</span> 11444 <br class="fancyvrb" /><a 11445 id="x1-112004r2"></a><span 11446 class="cmr-6">2</span><span 11447 class="cmtt-8"> </span><span 11448 class="cmtt-8"> </span><span 11449 class="cmtt-8"> 2)</span><span 11450 class="cmtt-8"> vector</span><span 11451 class="cmtt-8"> [entry_temp]</span><span 11452 class="cmtt-8"> =</span><span 11453 class="cmtt-8"> read</span><span 11454 class="cmtt-8"> vector</span><span 11455 class="cmtt-8"> from</span><span 11456 class="cmtt-8"> packet</span><span 11457 class="cmtt-8"> using</span><span 11458 class="cmtt-8"> current</span><span 11459 class="cmtt-8"> codebook</span><span 11460 class="cmtt-8"> in</span><span 11461 class="cmtt-8"> VQ</span><span 11462 class="cmtt-8"> context</span> 11463 <br class="fancyvrb" /><a 11464 id="x1-112006r3"></a><span 11465 class="cmr-6">3</span><span 11466 class="cmtt-8"> </span><span 11467 class="cmtt-8"> </span><span 11468 class="cmtt-8"> 3)</span><span 11469 class="cmtt-8"> iterate</span><span 11470 class="cmtt-8"> [j]</span><span 11471 class="cmtt-8"> over</span><span 11472 class="cmtt-8"> the</span><span 11473 class="cmtt-8"> range</span><span 11474 class="cmtt-8"> 0</span><span 11475 class="cmtt-8"> ...</span><span 11476 class="cmtt-8"> [codebook_dimensions]-1</span><span 11477 class="cmtt-8"> {</span> 11478 <br class="fancyvrb" /><a 11479 id="x1-112008r4"></a><span 11480 class="cmr-6">4</span><span 11481 class="cmtt-8"> </span><span 11482 class="cmtt-8"> </span> 11483 <br class="fancyvrb" /><a 11484 id="x1-112010r5"></a><span 11485 class="cmr-6">5</span><span 11486 class="cmtt-8"> </span><span 11487 class="cmtt-8"> </span><span 11488 class="cmtt-8"> </span><span 11489 class="cmtt-8"> </span><span 11490 class="cmtt-8"> </span><span 11491 class="cmtt-8"> </span><span 11492 class="cmtt-8"> </span><span 11493 class="cmtt-8"> 4)</span><span 11494 class="cmtt-8"> vector</span><span 11495 class="cmtt-8"> [v]</span><span 11496 class="cmtt-8"> element</span><span 11497 class="cmtt-8"> ([offset]+[i])</span><span 11498 class="cmtt-8"> =</span> 11499 <br class="fancyvrb" /><a 11500 id="x1-112012r6"></a><span 11501 class="cmr-6">6</span><span 11502 class="cmtt-8"> </span><span 11503 class="cmtt-8">  </span><span 11504 class="cmtt-8"> </span><span 11505 class="cmtt-8"> vector</span><span 11506 class="cmtt-8"> [v]</span><span 11507 class="cmtt-8"> element</span><span 11508 class="cmtt-8"> ([offset]+[i])</span><span 11509 class="cmtt-8"> +</span> 11510 <br class="fancyvrb" /><a 11511 id="x1-112014r7"></a><span 11512 class="cmr-6">7</span><span 11513 class="cmtt-8"> </span><span 11514 class="cmtt-8"> </span><span 11515 class="cmtt-8"> </span><span 11516 class="cmtt-8"> </span><span 11517 class="cmtt-8"> </span><span 11518 class="cmtt-8"> </span><span 11519 class="cmtt-8"> </span><span 11520 class="cmtt-8"> </span><span 11521 class="cmtt-8"> </span><span 11522 class="cmtt-8"> </span><span 11523 class="cmtt-8"> </span><span 11524 class="cmtt-8"> vector</span><span 11525 class="cmtt-8"> [entry_temp]</span><span 11526 class="cmtt-8"> element</span><span 11527 class="cmtt-8"> [j]</span> 11528 <br class="fancyvrb" /><a 11529 id="x1-112016r8"></a><span 11530 class="cmr-6">8</span><span 11531 class="cmtt-8"> </span><span 11532 class="cmtt-8"> </span><span 11533 class="cmtt-8"> </span><span 11534 class="cmtt-8"> </span><span 11535 class="cmtt-8"> </span><span 11536 class="cmtt-8"> </span><span 11537 class="cmtt-8"> </span><span 11538 class="cmtt-8"> 5)</span><span 11539 class="cmtt-8"> increment</span><span 11540 class="cmtt-8"> [i]</span> 11541 <br class="fancyvrb" /><a 11542 id="x1-112018r9"></a><span 11543 class="cmr-6">9</span><span 11544 class="cmtt-8"> </span><span 11545 class="cmtt-8"> </span> 11546 <br class="fancyvrb" /><a 11547 id="x1-112020r10"></a><span 11548 class="cmr-6">10</span><span 11549 class="cmtt-8"> </span><span 11550 class="cmtt-8"> </span><span 11551 class="cmtt-8"> </span><span 11552 class="cmtt-8"> </span><span 11553 class="cmtt-8"> </span><span 11554 class="cmtt-8"> }</span> 11555 <br class="fancyvrb" /><a 11556 id="x1-112022r11"></a><span 11557 class="cmr-6">11</span><span 11558 class="cmtt-8"> </span><span 11559 class="cmtt-8"> </span> 11560 <br class="fancyvrb" /><a 11561 id="x1-112024r12"></a><span 11562 class="cmr-6">12</span><span 11563 class="cmtt-8"> </span><span 11564 class="cmtt-8"> </span><span 11565 class="cmtt-8"> </span><span 11566 class="cmtt-8"> 6)</span><span 11567 class="cmtt-8"> if</span><span 11568 class="cmtt-8"> (</span><span 11569 class="cmtt-8"> [i]</span><span 11570 class="cmtt-8"> is</span><span 11571 class="cmtt-8"> less</span><span 11572 class="cmtt-8"> than</span><span 11573 class="cmtt-8"> [n]</span><span 11574 class="cmtt-8"> )</span><span 11575 class="cmtt-8"> continue</span><span 11576 class="cmtt-8"> at</span><span 11577 class="cmtt-8"> step</span><span 11578 class="cmtt-8"> 2</span> 11579 <br class="fancyvrb" /><a 11580 id="x1-112026r13"></a><span 11581 class="cmr-6">13</span><span 11582 class="cmtt-8"> </span><span 11583 class="cmtt-8"> </span><span 11584 class="cmtt-8"> </span><span 11585 class="cmtt-8"> 7)</span><span 11586 class="cmtt-8"> done</span> 11587 </div> 11588 <!--l. 416--><p class="noindent" > 11589 <h5 class="subsubsectionHead"><span class="titlemark">8.6.5 </span> <a 11590 id="x1-1130008.6.5"></a>format 2 specifics</h5> 11591 <!--l. 418--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an 11592 additional post-decode step after a normal format 1 decode. 11593 11594 11595 11596 <!--l. 421--><p class="noindent" >Format 2 handles ’do not decode’ vectors differently than residue 0 or 1; if all vectors are marked 11597 ’do not decode’, no decode occurrs. However, if at least one vector is to be decoded, all 11598 the vectors are decoded. We then request normal format 1 to decode a single vector 11599 representing all output channels, rather than a vector for each channel. After decode, 11600 deinterleave the vector into independent vectors, one for each output channel. That 11601 is: 11602 <!--l. 428--><p class="noindent" > 11603 <ol class="enumerate1" > 11604 <li 11605 class="enumerate" id="x1-113002x1">If all vectors 0 through <span 11606 class="cmti-12">ch</span>-1 are marked ’do not decode’, allocate and clear a single 11607 vector <span 11608 class="cmtt-12">[v]</span>of length <span 11609 class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode 11610 step. 11611 </li> 11612 <li 11613 class="enumerate" id="x1-113004x2">Rather than performing format 1 decode to produce <span 11614 class="cmti-12">ch </span>vectors of length <span 11615 class="cmti-12">n </span>each, call 11616 format 1 decode to produce a single vector <span 11617 class="cmtt-12">[v] </span>of length <span 11618 class="cmti-12">ch*n</span>. 11619 </li> 11620 <li 11621 class="enumerate" id="x1-113006x3">Post decode: Deinterleave the single vector <span 11622 class="cmtt-12">[v] </span>returned by format 1 decode as 11623 described above into <span 11624 class="cmti-12">ch </span>independent vectors, one for each outputchannel, according 11625 to: 11626 <div class="fancyvrb" id="fancyvrb43"> 11627 <a 11628 id="x1-113008r1"></a><span 11629 class="cmr-6">1</span><span 11630 class="cmtt-8"> </span><span 11631 class="cmtt-8"> </span><span 11632 class="cmtt-8"> </span><span 11633 class="cmtt-8"> 1)</span><span 11634 class="cmtt-8"> iterate</span><span 11635 class="cmtt-8"> [i]</span><span 11636 class="cmtt-8"> over</span><span 11637 class="cmtt-8"> the</span><span 11638 class="cmtt-8"> range</span><span 11639 class="cmtt-8"> 0</span><span 11640 class="cmtt-8"> ...</span><span 11641 class="cmtt-8"> [n]-1</span><span 11642 class="cmtt-8"> {</span> 11643 <br class="fancyvrb" /><a 11644 id="x1-113010r2"></a><span 11645 class="cmr-6">2</span><span 11646 class="cmtt-8"> </span><span 11647 class="cmtt-8"> </span> 11648 <br class="fancyvrb" /><a 11649 id="x1-113012r3"></a><span 11650 class="cmr-6">3</span><span 11651 class="cmtt-8"> </span><span 11652 class="cmtt-8"> </span><span 11653 class="cmtt-8"> </span><span 11654 class="cmtt-8"> </span><span 11655 class="cmtt-8"> </span><span 11656 class="cmtt-8"> </span><span 11657 class="cmtt-8"> </span><span 11658 class="cmtt-8"> </span><span 11659 class="cmtt-8"> 2)</span><span 11660 class="cmtt-8"> iterate</span><span 11661 class="cmtt-8"> [j]</span><span 11662 class="cmtt-8"> over</span><span 11663 class="cmtt-8"> the</span><span 11664 class="cmtt-8"> range</span><span 11665 class="cmtt-8"> 0</span><span 11666 class="cmtt-8"> ...</span><span 11667 class="cmtt-8"> [ch]-1</span><span 11668 class="cmtt-8"> {</span> 11669 <br class="fancyvrb" /><a 11670 id="x1-113014r4"></a><span 11671 class="cmr-6">4</span><span 11672 class="cmtt-8"> </span><span 11673 class="cmtt-8"> </span> 11674 <br class="fancyvrb" /><a 11675 id="x1-113016r5"></a><span 11676 class="cmr-6">5</span><span 11677 class="cmtt-8"> </span><span 11678 class="cmtt-8"> </span><span 11679 class="cmtt-8"> </span><span 11680 class="cmtt-8"> </span><span 11681 class="cmtt-8"> </span><span 11682 class="cmtt-8"> </span><span 11683 class="cmtt-8"> </span><span 11684 class="cmtt-8"> </span><span 11685 class="cmtt-8"> </span><span 11686 class="cmtt-8"> </span><span 11687 class="cmtt-8"> </span><span 11688 class="cmtt-8"> </span><span 11689 class="cmtt-8"> </span><span 11690 class="cmtt-8"> 3)</span><span 11691 class="cmtt-8"> output</span><span 11692 class="cmtt-8"> vector</span><span 11693 class="cmtt-8"> number</span><span 11694 class="cmtt-8"> [j]</span><span 11695 class="cmtt-8"> element</span><span 11696 class="cmtt-8"> [i]</span><span 11697 class="cmtt-8"> =</span><span 11698 class="cmtt-8"> vector</span><span 11699 class="cmtt-8"> [v]</span><span 11700 class="cmtt-8"> element</span><span 11701 class="cmtt-8"> ([i]</span><span 11702 class="cmtt-8"> *</span><span 11703 class="cmtt-8"> [ch]</span><span 11704 class="cmtt-8"> +</span><span 11705 class="cmtt-8"> [j])</span> 11706 <br class="fancyvrb" /><a 11707 id="x1-113018r6"></a><span 11708 class="cmr-6">6</span><span 11709 class="cmtt-8"> </span><span 11710 class="cmtt-8"> </span> 11711 <br class="fancyvrb" /><a 11712 id="x1-113020r7"></a><span 11713 class="cmr-6">7</span><span 11714 class="cmtt-8"> </span><span 11715 class="cmtt-8"> </span><span 11716 class="cmtt-8"> </span><span 11717 class="cmtt-8"> </span><span 11718 class="cmtt-8"> </span><span 11719 class="cmtt-8"> </span><span 11720 class="cmtt-8"> </span><span 11721 class="cmtt-8"> </span><span 11722 class="cmtt-8"> </span><span 11723 class="cmtt-8"> </span><span 11724 class="cmtt-8"> </span><span 11725 class="cmtt-8"> }</span> 11726 <br class="fancyvrb" /><a 11727 id="x1-113022r8"></a><span 11728 class="cmr-6">8</span><span 11729 class="cmtt-8"> </span><span 11730 class="cmtt-8"> </span><span 11731 class="cmtt-8"> </span><span 11732 class="cmtt-8"> </span><span 11733 class="cmtt-8"> </span><span 11734 class="cmtt-8"> </span><span 11735 class="cmtt-8"> }</span> 11736 <br class="fancyvrb" /><a 11737 id="x1-113024r9"></a><span 11738 class="cmr-6">9</span><span 11739 class="cmtt-8"> </span><span 11740 class="cmtt-8"> </span> 11741 <br class="fancyvrb" /><a 11742 id="x1-113026r10"></a><span 11743 class="cmr-6">10</span><span 11744 class="cmtt-8"> </span><span 11745 class="cmtt-8"> </span><span 11746 class="cmtt-8"> </span><span 11747 class="cmtt-8"> 4)</span><span 11748 class="cmtt-8"> done</span> 11749 </div> 11750 </li></ol> 11751 11752 11753 11754 11755 11756 11757 <h3 class="sectionHead"><span class="titlemark">9 </span> <a 11758 id="x1-1140009"></a>Helper equations</h3> 11759 <!--l. 6--><p class="noindent" > 11760 <h4 class="subsectionHead"><span class="titlemark">9.1 </span> <a 11761 id="x1-1150009.1"></a>Overview</h4> 11762 <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than 11763 cluttering up the main specification documents, they are defined here and referenced where 11764 appropriate. 11765 <!--l. 13--><p class="noindent" > 11766 <h4 class="subsectionHead"><span class="titlemark">9.2 </span> <a 11767 id="x1-1160009.2"></a>Functions</h4> 11768 <!--l. 15--><p class="noindent" > 11769 <h5 class="subsubsectionHead"><span class="titlemark">9.2.1 </span> <a 11770 id="x1-1170009.2.1"></a>ilog</h5> 11771 <!--l. 17--><p class="noindent" >The ”ilog(x)” function returns the position number (1 through n) of the highest set bit in the 11772 two’s complement integer value <span 11773 class="cmtt-12">[x]</span>. Values of <span 11774 class="cmtt-12">[x] </span>less than zero are defined to return 11775 zero. 11776 <!--l. 20--><p class="noindent" > 11777 <div class="fancyvrb" id="fancyvrb44"> 11778 <a 11779 id="x1-117002r1"></a><span 11780 class="cmr-6">1</span><span 11781 class="cmtt-8"> </span><span 11782 class="cmtt-8"> </span><span 11783 class="cmtt-8"> </span><span 11784 class="cmtt-8"> 1)</span><span 11785 class="cmtt-8"> [return_value]</span><span 11786 class="cmtt-8"> =</span><span 11787 class="cmtt-8"> 0;</span> 11788 <br class="fancyvrb" /><a 11789 id="x1-117004r2"></a><span 11790 class="cmr-6">2</span><span 11791 class="cmtt-8"> </span><span 11792 class="cmtt-8"> </span><span 11793 class="cmtt-8"> </span><span 11794 class="cmtt-8"> 2)</span><span 11795 class="cmtt-8"> if</span><span 11796 class="cmtt-8"> (</span><span 11797 class="cmtt-8"> [x]</span><span 11798 class="cmtt-8"> is</span><span 11799 class="cmtt-8"> greater</span><span 11800 class="cmtt-8"> than</span><span 11801 class="cmtt-8"> zero</span><span 11802 class="cmtt-8"> )</span><span 11803 class="cmtt-8"> {</span> 11804 <br class="fancyvrb" /><a 11805 id="x1-117006r3"></a><span 11806 class="cmr-6">3</span><span 11807 class="cmtt-8"> </span><span 11808 class="cmtt-8"> </span> 11809 <br class="fancyvrb" /><a 11810 id="x1-117008r4"></a><span 11811 class="cmr-6">4</span><span 11812 class="cmtt-8"> </span><span 11813 class="cmtt-8"> </span><span 11814 class="cmtt-8"> </span><span 11815 class="cmtt-8"> </span><span 11816 class="cmtt-8"> </span><span 11817 class="cmtt-8"> </span><span 11818 class="cmtt-8"> </span><span 11819 class="cmtt-8"> </span><span 11820 class="cmtt-8"> 3)</span><span 11821 class="cmtt-8"> increment</span><span 11822 class="cmtt-8"> [return_value];</span> 11823 <br class="fancyvrb" /><a 11824 id="x1-117010r5"></a><span 11825 class="cmr-6">5</span><span 11826 class="cmtt-8"> </span><span 11827 class="cmtt-8"> </span><span 11828 class="cmtt-8"> </span><span 11829 class="cmtt-8"> </span><span 11830 class="cmtt-8"> </span><span 11831 class="cmtt-8"> </span><span 11832 class="cmtt-8"> </span><span 11833 class="cmtt-8"> </span><span 11834 class="cmtt-8"> 4)</span><span 11835 class="cmtt-8"> logical</span><span 11836 class="cmtt-8"> shift</span><span 11837 class="cmtt-8"> [x]</span><span 11838 class="cmtt-8"> one</span><span 11839 class="cmtt-8"> bit</span><span 11840 class="cmtt-8"> to</span><span 11841 class="cmtt-8"> the</span><span 11842 class="cmtt-8"> right,</span><span 11843 class="cmtt-8"> padding</span><span 11844 class="cmtt-8"> the</span><span 11845 class="cmtt-8"> MSb</span><span 11846 class="cmtt-8"> with</span><span 11847 class="cmtt-8"> zero</span> 11848 <br class="fancyvrb" /><a 11849 id="x1-117012r6"></a><span 11850 class="cmr-6">6</span><span 11851 class="cmtt-8"> </span><span 11852 class="cmtt-8"> </span><span 11853 class="cmtt-8"> </span><span 11854 class="cmtt-8"> </span><span 11855 class="cmtt-8"> </span><span 11856 class="cmtt-8"> </span><span 11857 class="cmtt-8"> </span><span 11858 class="cmtt-8"> </span><span 11859 class="cmtt-8"> 5)</span><span 11860 class="cmtt-8"> repeat</span><span 11861 class="cmtt-8"> at</span><span 11862 class="cmtt-8"> step</span><span 11863 class="cmtt-8"> 2)</span> 11864 <br class="fancyvrb" /><a 11865 id="x1-117014r7"></a><span 11866 class="cmr-6">7</span><span 11867 class="cmtt-8"> </span><span 11868 class="cmtt-8"> </span> 11869 <br class="fancyvrb" /><a 11870 id="x1-117016r8"></a><span 11871 class="cmr-6">8</span><span 11872 class="cmtt-8"> </span><span 11873 class="cmtt-8"> </span><span 11874 class="cmtt-8"> </span><span 11875 class="cmtt-8"> </span><span 11876 class="cmtt-8"> </span><span 11877 class="cmtt-8"> </span><span 11878 class="cmtt-8"> }</span> 11879 <br class="fancyvrb" /><a 11880 id="x1-117018r9"></a><span 11881 class="cmr-6">9</span><span 11882 class="cmtt-8"> </span><span 11883 class="cmtt-8"> </span> 11884 <br class="fancyvrb" /><a 11885 id="x1-117020r10"></a><span 11886 class="cmr-6">10</span><span 11887 class="cmtt-8"> </span><span 11888 class="cmtt-8"> </span><span 11889 class="cmtt-8"> </span><span 11890 class="cmtt-8"> </span><span 11891 class="cmtt-8"> 6)</span><span 11892 class="cmtt-8"> done</span> 11893 </div> 11894 11895 11896 11897 <!--l. 33--><p class="noindent" >Examples: 11898 <ul class="itemize1"> 11899 <li class="itemize">ilog(0) = 0; 11900 </li> 11901 <li class="itemize">ilog(1) = 1; 11902 </li> 11903 <li class="itemize">ilog(2) = 2; 11904 </li> 11905 <li class="itemize">ilog(3) = 2; 11906 </li> 11907 <li class="itemize">ilog(4) = 3; 11908 </li> 11909 <li class="itemize">ilog(7) = 3; 11910 </li> 11911 <li class="itemize">ilog(negative number) = 0;</li></ul> 11912 <!--l. 48--><p class="noindent" > 11913 <h5 class="subsubsectionHead"><span class="titlemark">9.2.2 </span> <a 11914 id="x1-1180009.2.2"></a>float32˙unpack</h5> 11915 <!--l. 50--><p class="noindent" >”float32˙unpack(x)” is intended to translate the packed binary representation of a Vorbis 11916 codebook float value into the representation used by the decoder for floating point numbers. For 11917 purposes of this example, we will unpack a Vorbis float32 into a host-native floating point 11918 number. 11919 <!--l. 56--><p class="noindent" > 11920 <div class="fancyvrb" id="fancyvrb45"> 11921 <a 11922 id="x1-118002r1"></a><span 11923 class="cmr-6">1</span><span 11924 class="cmtt-8"> </span><span 11925 class="cmtt-8"> </span><span 11926 class="cmtt-8"> </span><span 11927 class="cmtt-8"> 1)</span><span 11928 class="cmtt-8"> [mantissa]</span><span 11929 class="cmtt-8"> =</span><span 11930 class="cmtt-8"> [x]</span><span 11931 class="cmtt-8"> bitwise</span><span 11932 class="cmtt-8"> AND</span><span 11933 class="cmtt-8"> 0x1fffff</span><span 11934 class="cmtt-8"> (unsigned</span><span 11935 class="cmtt-8"> result)</span> 11936 <br class="fancyvrb" /><a 11937 id="x1-118004r2"></a><span 11938 class="cmr-6">2</span><span 11939 class="cmtt-8"> </span><span 11940 class="cmtt-8"> </span><span 11941 class="cmtt-8"> </span><span 11942 class="cmtt-8"> 2)</span><span 11943 class="cmtt-8"> [sign]</span><span 11944 class="cmtt-8"> =</span><span 11945 class="cmtt-8"> [x]</span><span 11946 class="cmtt-8"> bitwise</span><span 11947 class="cmtt-8"> AND</span><span 11948 class="cmtt-8"> 0x80000000</span><span 11949 class="cmtt-8"> (unsigned</span><span 11950 class="cmtt-8"> result)</span> 11951 <br class="fancyvrb" /><a 11952 id="x1-118006r3"></a><span 11953 class="cmr-6">3</span><span 11954 class="cmtt-8"> </span><span 11955 class="cmtt-8"> </span><span 11956 class="cmtt-8"> </span><span 11957 class="cmtt-8"> 3)</span><span 11958 class="cmtt-8"> [exponent]</span><span 11959 class="cmtt-8"> =</span><span 11960 class="cmtt-8"> (</span><span 11961 class="cmtt-8"> [x]</span><span 11962 class="cmtt-8"> bitwise</span><span 11963 class="cmtt-8"> AND</span><span 11964 class="cmtt-8"> 0x7fe00000)</span><span 11965 class="cmtt-8"> shifted</span><span 11966 class="cmtt-8"> right</span><span 11967 class="cmtt-8"> 21</span><span 11968 class="cmtt-8"> bits</span><span 11969 class="cmtt-8"> (unsigned</span><span 11970 class="cmtt-8"> result)</span> 11971 <br class="fancyvrb" /><a 11972 id="x1-118008r4"></a><span 11973 class="cmr-6">4</span><span 11974 class="cmtt-8"> </span><span 11975 class="cmtt-8"> </span><span 11976 class="cmtt-8"> </span><span 11977 class="cmtt-8"> 4)</span><span 11978 class="cmtt-8"> if</span><span 11979 class="cmtt-8"> (</span><span 11980 class="cmtt-8"> [sign]</span><span 11981 class="cmtt-8"> is</span><span 11982 class="cmtt-8"> nonzero</span><span 11983 class="cmtt-8"> )</span><span 11984 class="cmtt-8"> then</span><span 11985 class="cmtt-8"> negate</span><span 11986 class="cmtt-8"> [mantissa]</span> 11987 <br class="fancyvrb" /><a 11988 id="x1-118010r5"></a><span 11989 class="cmr-6">5</span><span 11990 class="cmtt-8"> </span><span 11991 class="cmtt-8"> </span><span 11992 class="cmtt-8"> </span><span 11993 class="cmtt-8"> 5)</span><span 11994 class="cmtt-8"> return</span><span 11995 class="cmtt-8"> [mantissa]</span><span 11996 class="cmtt-8"> *</span><span 11997 class="cmtt-8"> (</span><span 11998 class="cmtt-8"> 2</span><span 11999 class="cmtt-8"> ^</span><span 12000 class="cmtt-8"> (</span><span 12001 class="cmtt-8"> [exponent]</span><span 12002 class="cmtt-8"> -</span><span 12003 class="cmtt-8"> 788</span><span 12004 class="cmtt-8"> )</span><span 12005 class="cmtt-8"> )</span> 12006 </div> 12007 12008 12009 12010 <!--l. 66--><p class="noindent" > 12011 <h5 class="subsubsectionHead"><span class="titlemark">9.2.3 </span> <a 12012 id="x1-1190009.2.3"></a>lookup1˙values</h5> 12013 <!--l. 68--><p class="noindent" >”lookup1˙values(codebook˙entries,codebook˙dimensions)” is used to compute the correct length of 12014 the value index for a codebook VQ lookup table of lookup type 1. The values on this list are 12015 permuted to construct the VQ vector lookup table of size <span 12016 class="cmtt-12">[codebook_entries]</span>. 12017 <!--l. 74--><p class="noindent" >The return value for this function is defined to be ’the greatest integer value for which 12018 <span 12019 class="cmtt-12">[return_value] </span>to the power of <span 12020 class="cmtt-12">[codebook_dimensions] </span>is less than or equal to 12021 <span 12022 class="cmtt-12">[codebook_entries]</span>’. 12023 <!--l. 81--><p class="noindent" > 12024 <h5 class="subsubsectionHead"><span class="titlemark">9.2.4 </span> <a 12025 id="x1-1200009.2.4"></a>low˙neighbor</h5> 12026 <!--l. 83--><p class="noindent" >”low˙neighbor(v,x)” finds the position <span 12027 class="cmtt-12">n </span>in vector <span 12028 class="cmtt-12">[v] </span>of the greatest value scalar element for 12029 which <span 12030 class="cmtt-12">n </span>is less than <span 12031 class="cmtt-12">[x] </span>and vector <span 12032 class="cmtt-12">[v] </span>element <span 12033 class="cmtt-12">n </span>is less than vector <span 12034 class="cmtt-12">[v] </span>element 12035 <span 12036 class="cmtt-12">[x]</span>. 12037 <!--l. 88--><p class="noindent" > 12038 <h5 class="subsubsectionHead"><span class="titlemark">9.2.5 </span> <a 12039 id="x1-1210009.2.5"></a>high˙neighbor</h5> 12040 <!--l. 90--><p class="noindent" >”high˙neighbor(v,x)” finds the position <span 12041 class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for 12042 which <span 12043 class="cmtt-12">n </span>is less than <span 12044 class="cmtt-12">[x] </span>and vector <span 12045 class="cmtt-12">[v] </span>element <span 12046 class="cmtt-12">n </span>is greater than vector <span 12047 class="cmtt-12">[v] </span>element 12048 <span 12049 class="cmtt-12">[x]</span>. 12050 <!--l. 97--><p class="noindent" > 12051 <h5 class="subsubsectionHead"><span class="titlemark">9.2.6 </span> <a 12052 id="x1-1220009.2.6"></a>render˙point</h5> 12053 <!--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 12054 x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without 12055 calculating intervening values along the line. 12056 <!--l. 104--><p class="noindent" > 12057 12058 12059 12060 <div class="fancyvrb" id="fancyvrb46"> 12061 <a 12062 id="x1-122002r1"></a><span 12063 class="cmr-6">1</span><span 12064 class="cmtt-8"> </span><span 12065 class="cmtt-8"> </span><span 12066 class="cmtt-8"> </span><span 12067 class="cmtt-8"> 1)</span><span 12068 class="cmtt-8"> </span><span 12069 class="cmtt-8"> [dy]</span><span 12070 class="cmtt-8"> =</span><span 12071 class="cmtt-8"> [y1]</span><span 12072 class="cmtt-8"> -</span><span 12073 class="cmtt-8"> [y0]</span> 12074 <br class="fancyvrb" /><a 12075 id="x1-122004r2"></a><span 12076 class="cmr-6">2</span><span 12077 class="cmtt-8"> </span><span 12078 class="cmtt-8"> </span><span 12079 class="cmtt-8"> </span><span 12080 class="cmtt-8"> 2)</span><span 12081 class="cmtt-8"> [adx]</span><span 12082 class="cmtt-8"> =</span><span 12083 class="cmtt-8"> [x1]</span><span 12084 class="cmtt-8"> -</span><span 12085 class="cmtt-8"> [x0]</span> 12086 <br class="fancyvrb" /><a 12087 id="x1-122006r3"></a><span 12088 class="cmr-6">3</span><span 12089 class="cmtt-8"> </span><span 12090 class="cmtt-8"> </span><span 12091 class="cmtt-8"> </span><span 12092 class="cmtt-8"> 3)</span><span 12093 class="cmtt-8"> [ady]</span><span 12094 class="cmtt-8"> =</span><span 12095 class="cmtt-8"> absolute</span><span 12096 class="cmtt-8"> value</span><span 12097 class="cmtt-8"> of</span><span 12098 class="cmtt-8"> [dy]</span> 12099 <br class="fancyvrb" /><a 12100 id="x1-122008r4"></a><span 12101 class="cmr-6">4</span><span 12102 class="cmtt-8"> </span><span 12103 class="cmtt-8"> </span><span 12104 class="cmtt-8"> </span><span 12105 class="cmtt-8"> 4)</span><span 12106 class="cmtt-8"> [err]</span><span 12107 class="cmtt-8"> =</span><span 12108 class="cmtt-8"> [ady]</span><span 12109 class="cmtt-8"> *</span><span 12110 class="cmtt-8"> ([X]</span><span 12111 class="cmtt-8"> -</span><span 12112 class="cmtt-8"> [x0])</span> 12113 <br class="fancyvrb" /><a 12114 id="x1-122010r5"></a><span 12115 class="cmr-6">5</span><span 12116 class="cmtt-8"> </span><span 12117 class="cmtt-8"> </span><span 12118 class="cmtt-8"> </span><span 12119 class="cmtt-8"> 5)</span><span 12120 class="cmtt-8"> [off]</span><span 12121 class="cmtt-8"> =</span><span 12122 class="cmtt-8"> [err]</span><span 12123 class="cmtt-8"> /</span><span 12124 class="cmtt-8"> [adx]</span><span 12125 class="cmtt-8"> using</span><span 12126 class="cmtt-8"> integer</span><span 12127 class="cmtt-8"> division</span> 12128 <br class="fancyvrb" /><a 12129 id="x1-122012r6"></a><span 12130 class="cmr-6">6</span><span 12131 class="cmtt-8"> </span><span 12132 class="cmtt-8"> </span><span 12133 class="cmtt-8"> </span><span 12134 class="cmtt-8"> 6)</span><span 12135 class="cmtt-8"> if</span><span 12136 class="cmtt-8"> (</span><span 12137 class="cmtt-8"> [dy]</span><span 12138 class="cmtt-8"> is</span><span 12139 class="cmtt-8"> less</span><span 12140 class="cmtt-8"> than</span><span 12141 class="cmtt-8"> zero</span><span 12142 class="cmtt-8"> )</span><span 12143 class="cmtt-8"> {</span> 12144 <br class="fancyvrb" /><a 12145 id="x1-122014r7"></a><span 12146 class="cmr-6">7</span><span 12147 class="cmtt-8"> </span><span 12148 class="cmtt-8"> </span> 12149 <br class="fancyvrb" /><a 12150 id="x1-122016r8"></a><span 12151 class="cmr-6">8</span><span 12152 class="cmtt-8"> </span><span 12153 class="cmtt-8"> </span><span 12154 class="cmtt-8"> </span><span 12155 class="cmtt-8"> </span><span 12156 class="cmtt-8"> </span><span 12157 class="cmtt-8"> </span><span 12158 class="cmtt-8"> </span><span 12159 class="cmtt-8"> </span><span 12160 class="cmtt-8"> 7)</span><span 12161 class="cmtt-8"> [Y]</span><span 12162 class="cmtt-8"> =</span><span 12163 class="cmtt-8"> [y0]</span><span 12164 class="cmtt-8"> -</span><span 12165 class="cmtt-8"> [off]</span> 12166 <br class="fancyvrb" /><a 12167 id="x1-122018r9"></a><span 12168 class="cmr-6">9</span><span 12169 class="cmtt-8"> </span><span 12170 class="cmtt-8"> </span> 12171 <br class="fancyvrb" /><a 12172 id="x1-122020r10"></a><span 12173 class="cmr-6">10</span><span 12174 class="cmtt-8"> </span><span 12175 class="cmtt-8"> </span><span 12176 class="cmtt-8"> </span><span 12177 class="cmtt-8"> </span><span 12178 class="cmtt-8"> </span><span 12179 class="cmtt-8"> </span><span 12180 class="cmtt-8"> }</span><span 12181 class="cmtt-8"> else</span><span 12182 class="cmtt-8"> {</span> 12183 <br class="fancyvrb" /><a 12184 id="x1-122022r11"></a><span 12185 class="cmr-6">11</span><span 12186 class="cmtt-8"> </span><span 12187 class="cmtt-8"> </span> 12188 <br class="fancyvrb" /><a 12189 id="x1-122024r12"></a><span 12190 class="cmr-6">12</span><span 12191 class="cmtt-8"> </span><span 12192 class="cmtt-8"> </span><span 12193 class="cmtt-8"> </span><span 12194 class="cmtt-8"> </span><span 12195 class="cmtt-8"> </span><span 12196 class="cmtt-8"> </span><span 12197 class="cmtt-8"> </span><span 12198 class="cmtt-8"> </span><span 12199 class="cmtt-8"> 8)</span><span 12200 class="cmtt-8"> [Y]</span><span 12201 class="cmtt-8"> =</span><span 12202 class="cmtt-8"> [y0]</span><span 12203 class="cmtt-8"> +</span><span 12204 class="cmtt-8"> [off]</span> 12205 <br class="fancyvrb" /><a 12206 id="x1-122026r13"></a><span 12207 class="cmr-6">13</span><span 12208 class="cmtt-8"> </span><span 12209 class="cmtt-8"> </span> 12210 <br class="fancyvrb" /><a 12211 id="x1-122028r14"></a><span 12212 class="cmr-6">14</span><span 12213 class="cmtt-8"> </span><span 12214 class="cmtt-8"> </span><span 12215 class="cmtt-8"> </span><span 12216 class="cmtt-8"> </span><span 12217 class="cmtt-8"> </span><span 12218 class="cmtt-8"> </span><span 12219 class="cmtt-8"> }</span> 12220 <br class="fancyvrb" /><a 12221 id="x1-122030r15"></a><span 12222 class="cmr-6">15</span><span 12223 class="cmtt-8"> </span><span 12224 class="cmtt-8"> </span> 12225 <br class="fancyvrb" /><a 12226 id="x1-122032r16"></a><span 12227 class="cmr-6">16</span><span 12228 class="cmtt-8"> </span><span 12229 class="cmtt-8"> </span><span 12230 class="cmtt-8"> </span><span 12231 class="cmtt-8"> 9)</span><span 12232 class="cmtt-8"> done</span> 12233 </div> 12234 <!--l. 125--><p class="noindent" > 12235 <h5 class="subsubsectionHead"><span class="titlemark">9.2.7 </span> <a 12236 id="x1-1230009.2.7"></a>render˙line</h5> 12237 <!--l. 127--><p class="noindent" >Floor decode type one uses the integer line drawing algorithm of ”render˙line(x0, y0, x1, y1, v)” 12238 to construct an integer floor curve for contiguous piecewise line segments. Note that it has not 12239 been relevant elsewhere, but here we must define integer division as rounding division of both 12240 positive and negative numbers toward zero. 12241 <!--l. 134--><p class="noindent" > 12242 <div class="fancyvrb" id="fancyvrb47"> 12243 <a 12244 id="x1-123002r1"></a><span 12245 class="cmr-6">1</span><span 12246 class="cmtt-8"> </span><span 12247 class="cmtt-8"> </span><span 12248 class="cmtt-8"> </span><span 12249 class="cmtt-8"> 1)</span><span 12250 class="cmtt-8"> </span><span 12251 class="cmtt-8"> </span><span 12252 class="cmtt-8"> [dy]</span><span 12253 class="cmtt-8"> =</span><span 12254 class="cmtt-8"> [y1]</span><span 12255 class="cmtt-8"> -</span><span 12256 class="cmtt-8"> [y0]</span> 12257 <br class="fancyvrb" /><a 12258 id="x1-123004r2"></a><span 12259 class="cmr-6">2</span><span 12260 class="cmtt-8"> </span><span 12261 class="cmtt-8"> </span><span 12262 class="cmtt-8"> </span><span 12263 class="cmtt-8"> 2)</span><span 12264 class="cmtt-8"> </span><span 12265 class="cmtt-8"> [adx]</span><span 12266 class="cmtt-8"> =</span><span 12267 class="cmtt-8"> [x1]</span><span 12268 class="cmtt-8"> -</span><span 12269 class="cmtt-8"> [x0]</span> 12270 <br class="fancyvrb" /><a 12271 id="x1-123006r3"></a><span 12272 class="cmr-6">3</span><span 12273 class="cmtt-8"> </span><span 12274 class="cmtt-8"> </span><span 12275 class="cmtt-8"> </span><span 12276 class="cmtt-8"> 3)</span><span 12277 class="cmtt-8"> </span><span 12278 class="cmtt-8"> [ady]</span><span 12279 class="cmtt-8"> =</span><span 12280 class="cmtt-8"> absolute</span><span 12281 class="cmtt-8"> value</span><span 12282 class="cmtt-8"> of</span><span 12283 class="cmtt-8"> [dy]</span> 12284 <br class="fancyvrb" /><a 12285 id="x1-123008r4"></a><span 12286 class="cmr-6">4</span><span 12287 class="cmtt-8"> </span><span 12288 class="cmtt-8"> </span><span 12289 class="cmtt-8"> </span><span 12290 class="cmtt-8"> 4)</span><span 12291 class="cmtt-8"> [base]</span><span 12292 class="cmtt-8"> =</span><span 12293 class="cmtt-8"> [dy]</span><span 12294 class="cmtt-8"> /</span><span 12295 class="cmtt-8"> [adx]</span><span 12296 class="cmtt-8"> using</span><span 12297 class="cmtt-8"> integer</span><span 12298 class="cmtt-8"> division</span> 12299 <br class="fancyvrb" /><a 12300 id="x1-123010r5"></a><span 12301 class="cmr-6">5</span><span 12302 class="cmtt-8"> </span><span 12303 class="cmtt-8"> </span><span 12304 class="cmtt-8"> </span><span 12305 class="cmtt-8"> 5)</span><span 12306 class="cmtt-8"> </span><span 12307 class="cmtt-8"> </span><span 12308 class="cmtt-8"> </span><span 12309 class="cmtt-8"> [x]</span><span 12310 class="cmtt-8"> =</span><span 12311 class="cmtt-8"> [x0]</span> 12312 <br class="fancyvrb" /><a 12313 id="x1-123012r6"></a><span 12314 class="cmr-6">6</span><span 12315 class="cmtt-8"> </span><span 12316 class="cmtt-8"> </span><span 12317 class="cmtt-8"> </span><span 12318 class="cmtt-8"> 6)</span><span 12319 class="cmtt-8"> </span><span 12320 class="cmtt-8"> </span><span 12321 class="cmtt-8"> </span><span 12322 class="cmtt-8"> [y]</span><span 12323 class="cmtt-8"> =</span><span 12324 class="cmtt-8"> [y0]</span> 12325 <br class="fancyvrb" /><a 12326 id="x1-123014r7"></a><span 12327 class="cmr-6">7</span><span 12328 class="cmtt-8"> </span><span 12329 class="cmtt-8"> </span><span 12330 class="cmtt-8"> </span><span 12331 class="cmtt-8"> 7)</span><span 12332 class="cmtt-8"> </span><span 12333 class="cmtt-8"> [err]</span><span 12334 class="cmtt-8"> =</span><span 12335 class="cmtt-8"> 0</span> 12336 <br class="fancyvrb" /><a 12337 id="x1-123016r8"></a><span 12338 class="cmr-6">8</span><span 12339 class="cmtt-8"> </span><span 12340 class="cmtt-8"> </span> 12341 <br class="fancyvrb" /><a 12342 id="x1-123018r9"></a><span 12343 class="cmr-6">9</span><span 12344 class="cmtt-8"> </span><span 12345 class="cmtt-8"> </span><span 12346 class="cmtt-8"> </span><span 12347 class="cmtt-8"> 8)</span><span 12348 class="cmtt-8"> if</span><span 12349 class="cmtt-8"> (</span><span 12350 class="cmtt-8"> [dy]</span><span 12351 class="cmtt-8"> is</span><span 12352 class="cmtt-8"> less</span><span 12353 class="cmtt-8"> than</span><span 12354 class="cmtt-8"> 0</span><span 12355 class="cmtt-8"> )</span><span 12356 class="cmtt-8"> {</span> 12357 <br class="fancyvrb" /><a 12358 id="x1-123020r10"></a><span 12359 class="cmr-6">10</span><span 12360 class="cmtt-8"> </span><span 12361 class="cmtt-8"> </span> 12362 <br class="fancyvrb" /><a 12363 id="x1-123022r11"></a><span 12364 class="cmr-6">11</span><span 12365 class="cmtt-8"> </span><span 12366 class="cmtt-8"> </span><span 12367 class="cmtt-8"> </span><span 12368 class="cmtt-8"> </span><span 12369 class="cmtt-8"> </span><span 12370 class="cmtt-8"> </span><span 12371 class="cmtt-8"> </span><span 12372 class="cmtt-8"> </span><span 12373 class="cmtt-8"> </span><span 12374 class="cmtt-8"> 9)</span><span 12375 class="cmtt-8"> [sy]</span><span 12376 class="cmtt-8"> =</span><span 12377 class="cmtt-8"> [base]</span><span 12378 class="cmtt-8"> -</span><span 12379 class="cmtt-8"> 1</span> 12380 <br class="fancyvrb" /><a 12381 id="x1-123024r12"></a><span 12382 class="cmr-6">12</span><span 12383 class="cmtt-8"> </span><span 12384 class="cmtt-8"> </span> 12385 <br class="fancyvrb" /><a 12386 id="x1-123026r13"></a><span 12387 class="cmr-6">13</span><span 12388 class="cmtt-8"> </span><span 12389 class="cmtt-8"> </span><span 12390 class="cmtt-8"> </span><span 12391 class="cmtt-8"> </span><span 12392 class="cmtt-8"> </span><span 12393 class="cmtt-8"> </span><span 12394 class="cmtt-8"> }</span><span 12395 class="cmtt-8"> else</span><span 12396 class="cmtt-8"> {</span> 12397 <br class="fancyvrb" /><a 12398 id="x1-123028r14"></a><span 12399 class="cmr-6">14</span><span 12400 class="cmtt-8"> </span><span 12401 class="cmtt-8"> </span> 12402 <br class="fancyvrb" /><a 12403 id="x1-123030r15"></a><span 12404 class="cmr-6">15</span><span 12405 class="cmtt-8"> </span><span 12406 class="cmtt-8"> </span><span 12407 class="cmtt-8"> </span><span 12408 class="cmtt-8"> </span><span 12409 class="cmtt-8"> </span><span 12410 class="cmtt-8"> </span><span 12411 class="cmtt-8"> </span><span 12412 class="cmtt-8"> </span><span 12413 class="cmtt-8"> 10)</span><span 12414 class="cmtt-8"> [sy]</span><span 12415 class="cmtt-8"> =</span><span 12416 class="cmtt-8"> [base]</span><span 12417 class="cmtt-8"> +</span><span 12418 class="cmtt-8"> 1</span> 12419 <br class="fancyvrb" /><a 12420 id="x1-123032r16"></a><span 12421 class="cmr-6">16</span><span 12422 class="cmtt-8"> </span><span 12423 class="cmtt-8"> </span> 12424 <br class="fancyvrb" /><a 12425 id="x1-123034r17"></a><span 12426 class="cmr-6">17</span><span 12427 class="cmtt-8"> </span><span 12428 class="cmtt-8"> </span><span 12429 class="cmtt-8"> </span><span 12430 class="cmtt-8"> </span><span 12431 class="cmtt-8"> </span><span 12432 class="cmtt-8"> </span><span 12433 class="cmtt-8"> }</span> 12434 <br class="fancyvrb" /><a 12435 id="x1-123036r18"></a><span 12436 class="cmr-6">18</span><span 12437 class="cmtt-8"> </span><span 12438 class="cmtt-8"> </span> 12439 <br class="fancyvrb" /><a 12440 id="x1-123038r19"></a><span 12441 class="cmr-6">19</span><span 12442 class="cmtt-8"> </span><span 12443 class="cmtt-8"> </span><span 12444 class="cmtt-8"> 11)</span><span 12445 class="cmtt-8"> [ady]</span><span 12446 class="cmtt-8"> =</span><span 12447 class="cmtt-8"> [ady]</span><span 12448 class="cmtt-8"> -</span><span 12449 class="cmtt-8"> (absolute</span><span 12450 class="cmtt-8"> value</span><span 12451 class="cmtt-8"> of</span><span 12452 class="cmtt-8"> [base])</span><span 12453 class="cmtt-8"> *</span><span 12454 class="cmtt-8"> [adx]</span> 12455 <br class="fancyvrb" /><a 12456 id="x1-123040r20"></a><span 12457 class="cmr-6">20</span><span 12458 class="cmtt-8"> </span><span 12459 class="cmtt-8"> </span><span 12460 class="cmtt-8"> 12)</span><span 12461 class="cmtt-8"> vector</span><span 12462 class="cmtt-8"> [v]</span><span 12463 class="cmtt-8"> element</span><span 12464 class="cmtt-8"> [x]</span><span 12465 class="cmtt-8"> =</span><span 12466 class="cmtt-8"> [y]</span> 12467 <br class="fancyvrb" /><a 12468 id="x1-123042r21"></a><span 12469 class="cmr-6">21</span><span 12470 class="cmtt-8"> </span><span 12471 class="cmtt-8"> </span> 12472 <br class="fancyvrb" /><a 12473 id="x1-123044r22"></a><span 12474 class="cmr-6">22</span><span 12475 class="cmtt-8"> </span><span 12476 class="cmtt-8"> </span><span 12477 class="cmtt-8"> 13)</span><span 12478 class="cmtt-8"> iterate</span><span 12479 class="cmtt-8"> [x]</span><span 12480 class="cmtt-8"> over</span><span 12481 class="cmtt-8"> the</span><span 12482 class="cmtt-8"> range</span><span 12483 class="cmtt-8"> [x0]+1</span><span 12484 class="cmtt-8"> ...</span><span 12485 class="cmtt-8"> [x1]-1</span><span 12486 class="cmtt-8"> {</span> 12487 <br class="fancyvrb" /><a 12488 id="x1-123046r23"></a><span 12489 class="cmr-6">23</span><span 12490 class="cmtt-8"> </span><span 12491 class="cmtt-8"> </span> 12492 <br class="fancyvrb" /><a 12493 id="x1-123048r24"></a><span 12494 class="cmr-6">24</span><span 12495 class="cmtt-8"> </span><span 12496 class="cmtt-8"> </span><span 12497 class="cmtt-8"> </span><span 12498 class="cmtt-8"> </span><span 12499 class="cmtt-8"> </span><span 12500 class="cmtt-8"> </span><span 12501 class="cmtt-8"> </span><span 12502 class="cmtt-8"> </span><span 12503 class="cmtt-8"> 14)</span><span 12504 class="cmtt-8"> [err]</span><span 12505 class="cmtt-8"> =</span><span 12506 class="cmtt-8"> [err]</span><span 12507 class="cmtt-8"> +</span><span 12508 class="cmtt-8"> [ady];</span> 12509 12510 12511 12512 <br class="fancyvrb" /><a 12513 id="x1-123050r25"></a><span 12514 class="cmr-6">25</span><span 12515 class="cmtt-8"> </span><span 12516 class="cmtt-8"> </span><span 12517 class="cmtt-8"> </span><span 12518 class="cmtt-8"> </span><span 12519 class="cmtt-8"> </span><span 12520 class="cmtt-8"> </span><span 12521 class="cmtt-8"> </span><span 12522 class="cmtt-8"> </span><span 12523 class="cmtt-8"> 15)</span><span 12524 class="cmtt-8"> if</span><span 12525 class="cmtt-8"> (</span><span 12526 class="cmtt-8"> [err]</span><span 12527 class="cmtt-8"> >=</span><span 12528 class="cmtt-8"> [adx]</span><span 12529 class="cmtt-8"> )</span><span 12530 class="cmtt-8"> {</span> 12531 <br class="fancyvrb" /><a 12532 id="x1-123052r26"></a><span 12533 class="cmr-6">26</span><span 12534 class="cmtt-8"> </span><span 12535 class="cmtt-8"> </span> 12536 <br class="fancyvrb" /><a 12537 id="x1-123054r27"></a><span 12538 class="cmr-6">27</span><span 12539 class="cmtt-8"> </span><span 12540 class="cmtt-8"> </span><span 12541 class="cmtt-8"> </span><span 12542 class="cmtt-8"> </span><span 12543 class="cmtt-8"> </span><span 12544 class="cmtt-8"> </span><span 12545 class="cmtt-8"> </span><span 12546 class="cmtt-8"> </span><span 12547 class="cmtt-8"> </span><span 12548 class="cmtt-8"> </span><span 12549 class="cmtt-8"> </span><span 12550 class="cmtt-8"> </span><span 12551 class="cmtt-8"> </span><span 12552 class="cmtt-8"> </span><span 12553 class="cmtt-8"> 16)</span><span 12554 class="cmtt-8"> [err]</span><span 12555 class="cmtt-8"> =</span><span 12556 class="cmtt-8"> [err]</span><span 12557 class="cmtt-8"> -</span><span 12558 class="cmtt-8"> [adx]</span> 12559 <br class="fancyvrb" /><a 12560 id="x1-123056r28"></a><span 12561 class="cmr-6">28</span><span 12562 class="cmtt-8"> </span><span 12563 class="cmtt-8"> </span><span 12564 class="cmtt-8"> </span><span 12565 class="cmtt-8"> </span><span 12566 class="cmtt-8"> </span><span 12567 class="cmtt-8"> </span><span 12568 class="cmtt-8"> </span><span 12569 class="cmtt-8"> </span><span 12570 class="cmtt-8"> </span><span 12571 class="cmtt-8"> </span><span 12572 class="cmtt-8"> </span><span 12573 class="cmtt-8"> </span><span 12574 class="cmtt-8"> </span><span 12575 class="cmtt-8"> </span><span 12576 class="cmtt-8"> 17)</span><span 12577 class="cmtt-8"> </span><span 12578 class="cmtt-8"> </span><span 12579 class="cmtt-8"> [y]</span><span 12580 class="cmtt-8"> =</span><span 12581 class="cmtt-8"> [y]</span><span 12582 class="cmtt-8"> +</span><span 12583 class="cmtt-8"> [sy]</span> 12584 <br class="fancyvrb" /><a 12585 id="x1-123058r29"></a><span 12586 class="cmr-6">29</span><span 12587 class="cmtt-8"> </span><span 12588 class="cmtt-8"> </span> 12589 <br class="fancyvrb" /><a 12590 id="x1-123060r30"></a><span 12591 class="cmr-6">30</span><span 12592 class="cmtt-8"> </span><span 12593 class="cmtt-8"> </span><span 12594 class="cmtt-8"> </span><span 12595 class="cmtt-8"> </span><span 12596 class="cmtt-8"> </span><span 12597 class="cmtt-8"> </span><span 12598 class="cmtt-8"> </span><span 12599 class="cmtt-8"> </span><span 12600 class="cmtt-8"> </span><span 12601 class="cmtt-8"> </span><span 12602 class="cmtt-8"> </span><span 12603 class="cmtt-8"> </span><span 12604 class="cmtt-8"> }</span><span 12605 class="cmtt-8"> else</span><span 12606 class="cmtt-8"> {</span> 12607 <br class="fancyvrb" /><a 12608 id="x1-123062r31"></a><span 12609 class="cmr-6">31</span><span 12610 class="cmtt-8"> </span><span 12611 class="cmtt-8"> </span> 12612 <br class="fancyvrb" /><a 12613 id="x1-123064r32"></a><span 12614 class="cmr-6">32</span><span 12615 class="cmtt-8"> </span><span 12616 class="cmtt-8"> </span><span 12617 class="cmtt-8"> </span><span 12618 class="cmtt-8"> </span><span 12619 class="cmtt-8"> </span><span 12620 class="cmtt-8"> </span><span 12621 class="cmtt-8"> </span><span 12622 class="cmtt-8"> </span><span 12623 class="cmtt-8"> </span><span 12624 class="cmtt-8"> </span><span 12625 class="cmtt-8"> </span><span 12626 class="cmtt-8"> </span><span 12627 class="cmtt-8"> </span><span 12628 class="cmtt-8"> </span><span 12629 class="cmtt-8"> 18)</span><span 12630 class="cmtt-8"> [y]</span><span 12631 class="cmtt-8"> =</span><span 12632 class="cmtt-8"> [y]</span><span 12633 class="cmtt-8"> +</span><span 12634 class="cmtt-8"> [base]</span> 12635 <br class="fancyvrb" /><a 12636 id="x1-123066r33"></a><span 12637 class="cmr-6">33</span><span 12638 class="cmtt-8"> </span><span 12639 class="cmtt-8"> </span> 12640 <br class="fancyvrb" /><a 12641 id="x1-123068r34"></a><span 12642 class="cmr-6">34</span><span 12643 class="cmtt-8"> </span><span 12644 class="cmtt-8"> </span><span 12645 class="cmtt-8"> </span><span 12646 class="cmtt-8"> </span><span 12647 class="cmtt-8"> </span><span 12648 class="cmtt-8"> </span><span 12649 class="cmtt-8"> </span><span 12650 class="cmtt-8"> </span><span 12651 class="cmtt-8"> </span><span 12652 class="cmtt-8"> </span><span 12653 class="cmtt-8"> </span><span 12654 class="cmtt-8"> </span><span 12655 class="cmtt-8"> }</span> 12656 <br class="fancyvrb" /><a 12657 id="x1-123070r35"></a><span 12658 class="cmr-6">35</span><span 12659 class="cmtt-8"> </span><span 12660 class="cmtt-8"> </span> 12661 <br class="fancyvrb" /><a 12662 id="x1-123072r36"></a><span 12663 class="cmr-6">36</span><span 12664 class="cmtt-8"> </span><span 12665 class="cmtt-8"> </span><span 12666 class="cmtt-8"> </span><span 12667 class="cmtt-8"> </span><span 12668 class="cmtt-8"> </span><span 12669 class="cmtt-8"> </span><span 12670 class="cmtt-8"> </span><span 12671 class="cmtt-8"> </span><span 12672 class="cmtt-8"> 19)</span><span 12673 class="cmtt-8"> vector</span><span 12674 class="cmtt-8"> [v]</span><span 12675 class="cmtt-8"> element</span><span 12676 class="cmtt-8"> [x]</span><span 12677 class="cmtt-8"> =</span><span 12678 class="cmtt-8"> [y]</span> 12679 <br class="fancyvrb" /><a 12680 id="x1-123074r37"></a><span 12681 class="cmr-6">37</span><span 12682 class="cmtt-8"> </span><span 12683 class="cmtt-8"> </span> 12684 <br class="fancyvrb" /><a 12685 id="x1-123076r38"></a><span 12686 class="cmr-6">38</span><span 12687 class="cmtt-8"> </span><span 12688 class="cmtt-8"> </span><span 12689 class="cmtt-8"> </span><span 12690 class="cmtt-8"> </span><span 12691 class="cmtt-8"> </span><span 12692 class="cmtt-8"> </span><span 12693 class="cmtt-8"> }</span> 12694 </div> 12695 12696 12697 12698 12699 12700 12701 <h3 class="sectionHead"><span class="titlemark">10 </span> <a 12702 id="x1-12400010"></a>Tables</h3> 12703 <!--l. 6--><p class="noindent" > 12704 <h4 class="subsectionHead"><span class="titlemark">10.1 </span> <a 12705 id="x1-12500010.1"></a>floor1_inverse_dB_table</h4> 12706 <!--l. 8--><p class="noindent" >The vector <span 12707 class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the 12708 following values (read left to right then top to bottom): 12709 <!--l. 12--><p class="noindent" > 12710 <div class="fancyvrb" id="fancyvrb48"> 12711 <a 12712 id="x1-125002r1"></a><span 12713 class="cmr-6">1</span><span 12714 class="cmtt-8"> </span><span 12715 class="cmtt-8"> </span><span 12716 class="cmtt-8"> </span><span 12717 class="cmtt-8"> 1.0649863e-07,</span><span 12718 class="cmtt-8"> 1.1341951e-07,</span><span 12719 class="cmtt-8"> 1.2079015e-07,</span><span 12720 class="cmtt-8"> 1.2863978e-07,</span> 12721 <br class="fancyvrb" /><a 12722 id="x1-125004r2"></a><span 12723 class="cmr-6">2</span><span 12724 class="cmtt-8"> </span><span 12725 class="cmtt-8"> </span><span 12726 class="cmtt-8"> </span><span 12727 class="cmtt-8"> 1.3699951e-07,</span><span 12728 class="cmtt-8"> 1.4590251e-07,</span><span 12729 class="cmtt-8"> 1.5538408e-07,</span><span 12730 class="cmtt-8"> 1.6548181e-07,</span> 12731 <br class="fancyvrb" /><a 12732 id="x1-125006r3"></a><span 12733 class="cmr-6">3</span><span 12734 class="cmtt-8"> </span><span 12735 class="cmtt-8"> </span><span 12736 class="cmtt-8"> </span><span 12737 class="cmtt-8"> 1.7623575e-07,</span><span 12738 class="cmtt-8"> 1.8768855e-07,</span><span 12739 class="cmtt-8"> 1.9988561e-07,</span><span 12740 class="cmtt-8"> 2.1287530e-07,</span> 12741 <br class="fancyvrb" /><a 12742 id="x1-125008r4"></a><span 12743 class="cmr-6">4</span><span 12744 class="cmtt-8"> </span><span 12745 class="cmtt-8"> </span><span 12746 class="cmtt-8"> </span><span 12747 class="cmtt-8"> 2.2670913e-07,</span><span 12748 class="cmtt-8"> 2.4144197e-07,</span><span 12749 class="cmtt-8"> 2.5713223e-07,</span><span 12750 class="cmtt-8"> 2.7384213e-07,</span> 12751 <br class="fancyvrb" /><a 12752 id="x1-125010r5"></a><span 12753 class="cmr-6">5</span><span 12754 class="cmtt-8"> </span><span 12755 class="cmtt-8"> </span><span 12756 class="cmtt-8"> </span><span 12757 class="cmtt-8"> 2.9163793e-07,</span><span 12758 class="cmtt-8"> 3.1059021e-07,</span><span 12759 class="cmtt-8"> 3.3077411e-07,</span><span 12760 class="cmtt-8"> 3.5226968e-07,</span> 12761 <br class="fancyvrb" /><a 12762 id="x1-125012r6"></a><span 12763 class="cmr-6">6</span><span 12764 class="cmtt-8"> </span><span 12765 class="cmtt-8"> </span><span 12766 class="cmtt-8"> </span><span 12767 class="cmtt-8"> 3.7516214e-07,</span><span 12768 class="cmtt-8"> 3.9954229e-07,</span><span 12769 class="cmtt-8"> 4.2550680e-07,</span><span 12770 class="cmtt-8"> 4.5315863e-07,</span> 12771 <br class="fancyvrb" /><a 12772 id="x1-125014r7"></a><span 12773 class="cmr-6">7</span><span 12774 class="cmtt-8"> </span><span 12775 class="cmtt-8"> </span><span 12776 class="cmtt-8"> </span><span 12777 class="cmtt-8"> 4.8260743e-07,</span><span 12778 class="cmtt-8"> 5.1396998e-07,</span><span 12779 class="cmtt-8"> 5.4737065e-07,</span><span 12780 class="cmtt-8"> 5.8294187e-07,</span> 12781 <br class="fancyvrb" /><a 12782 id="x1-125016r8"></a><span 12783 class="cmr-6">8</span><span 12784 class="cmtt-8"> </span><span 12785 class="cmtt-8"> </span><span 12786 class="cmtt-8"> </span><span 12787 class="cmtt-8"> 6.2082472e-07,</span><span 12788 class="cmtt-8"> 6.6116941e-07,</span><span 12789 class="cmtt-8"> 7.0413592e-07,</span><span 12790 class="cmtt-8"> 7.4989464e-07,</span> 12791 <br class="fancyvrb" /><a 12792 id="x1-125018r9"></a><span 12793 class="cmr-6">9</span><span 12794 class="cmtt-8"> </span><span 12795 class="cmtt-8"> </span><span 12796 class="cmtt-8"> </span><span 12797 class="cmtt-8"> 7.9862701e-07,</span><span 12798 class="cmtt-8"> 8.5052630e-07,</span><span 12799 class="cmtt-8"> 9.0579828e-07,</span><span 12800 class="cmtt-8"> 9.6466216e-07,</span> 12801 <br class="fancyvrb" /><a 12802 id="x1-125020r10"></a><span 12803 class="cmr-6">10</span><span 12804 class="cmtt-8"> </span><span 12805 class="cmtt-8"> </span><span 12806 class="cmtt-8"> </span><span 12807 class="cmtt-8"> 1.0273513e-06,</span><span 12808 class="cmtt-8"> 1.0941144e-06,</span><span 12809 class="cmtt-8"> 1.1652161e-06,</span><span 12810 class="cmtt-8"> 1.2409384e-06,</span> 12811 <br class="fancyvrb" /><a 12812 id="x1-125022r11"></a><span 12813 class="cmr-6">11</span><span 12814 class="cmtt-8"> </span><span 12815 class="cmtt-8"> </span><span 12816 class="cmtt-8"> </span><span 12817 class="cmtt-8"> 1.3215816e-06,</span><span 12818 class="cmtt-8"> 1.4074654e-06,</span><span 12819 class="cmtt-8"> 1.4989305e-06,</span><span 12820 class="cmtt-8"> 1.5963394e-06,</span> 12821 <br class="fancyvrb" /><a 12822 id="x1-125024r12"></a><span 12823 class="cmr-6">12</span><span 12824 class="cmtt-8"> </span><span 12825 class="cmtt-8"> </span><span 12826 class="cmtt-8"> </span><span 12827 class="cmtt-8"> 1.7000785e-06,</span><span 12828 class="cmtt-8"> 1.8105592e-06,</span><span 12829 class="cmtt-8"> 1.9282195e-06,</span><span 12830 class="cmtt-8"> 2.0535261e-06,</span> 12831 <br class="fancyvrb" /><a 12832 id="x1-125026r13"></a><span 12833 class="cmr-6">13</span><span 12834 class="cmtt-8"> </span><span 12835 class="cmtt-8"> </span><span 12836 class="cmtt-8"> </span><span 12837 class="cmtt-8"> 2.1869758e-06,</span><span 12838 class="cmtt-8"> 2.3290978e-06,</span><span 12839 class="cmtt-8"> 2.4804557e-06,</span><span 12840 class="cmtt-8"> 2.6416497e-06,</span> 12841 <br class="fancyvrb" /><a 12842 id="x1-125028r14"></a><span 12843 class="cmr-6">14</span><span 12844 class="cmtt-8"> </span><span 12845 class="cmtt-8"> </span><span 12846 class="cmtt-8"> </span><span 12847 class="cmtt-8"> 2.8133190e-06,</span><span 12848 class="cmtt-8"> 2.9961443e-06,</span><span 12849 class="cmtt-8"> 3.1908506e-06,</span><span 12850 class="cmtt-8"> 3.3982101e-06,</span> 12851 <br class="fancyvrb" /><a 12852 id="x1-125030r15"></a><span 12853 class="cmr-6">15</span><span 12854 class="cmtt-8"> </span><span 12855 class="cmtt-8"> </span><span 12856 class="cmtt-8"> </span><span 12857 class="cmtt-8"> 3.6190449e-06,</span><span 12858 class="cmtt-8"> 3.8542308e-06,</span><span 12859 class="cmtt-8"> 4.1047004e-06,</span><span 12860 class="cmtt-8"> 4.3714470e-06,</span> 12861 <br class="fancyvrb" /><a 12862 id="x1-125032r16"></a><span 12863 class="cmr-6">16</span><span 12864 class="cmtt-8"> </span><span 12865 class="cmtt-8"> </span><span 12866 class="cmtt-8"> </span><span 12867 class="cmtt-8"> 4.6555282e-06,</span><span 12868 class="cmtt-8"> 4.9580707e-06,</span><span 12869 class="cmtt-8"> 5.2802740e-06,</span><span 12870 class="cmtt-8"> 5.6234160e-06,</span> 12871 <br class="fancyvrb" /><a 12872 id="x1-125034r17"></a><span 12873 class="cmr-6">17</span><span 12874 class="cmtt-8"> </span><span 12875 class="cmtt-8"> </span><span 12876 class="cmtt-8"> </span><span 12877 class="cmtt-8"> 5.9888572e-06,</span><span 12878 class="cmtt-8"> 6.3780469e-06,</span><span 12879 class="cmtt-8"> 6.7925283e-06,</span><span 12880 class="cmtt-8"> 7.2339451e-06,</span> 12881 <br class="fancyvrb" /><a 12882 id="x1-125036r18"></a><span 12883 class="cmr-6">18</span><span 12884 class="cmtt-8"> </span><span 12885 class="cmtt-8"> </span><span 12886 class="cmtt-8"> </span><span 12887 class="cmtt-8"> 7.7040476e-06,</span><span 12888 class="cmtt-8"> 8.2047000e-06,</span><span 12889 class="cmtt-8"> 8.7378876e-06,</span><span 12890 class="cmtt-8"> 9.3057248e-06,</span> 12891 <br class="fancyvrb" /><a 12892 id="x1-125038r19"></a><span 12893 class="cmr-6">19</span><span 12894 class="cmtt-8"> </span><span 12895 class="cmtt-8"> </span><span 12896 class="cmtt-8"> </span><span 12897 class="cmtt-8"> 9.9104632e-06,</span><span 12898 class="cmtt-8"> 1.0554501e-05,</span><span 12899 class="cmtt-8"> 1.1240392e-05,</span><span 12900 class="cmtt-8"> 1.1970856e-05,</span> 12901 <br class="fancyvrb" /><a 12902 id="x1-125040r20"></a><span 12903 class="cmr-6">20</span><span 12904 class="cmtt-8"> </span><span 12905 class="cmtt-8"> </span><span 12906 class="cmtt-8"> </span><span 12907 class="cmtt-8"> 1.2748789e-05,</span><span 12908 class="cmtt-8"> 1.3577278e-05,</span><span 12909 class="cmtt-8"> 1.4459606e-05,</span><span 12910 class="cmtt-8"> 1.5399272e-05,</span> 12911 <br class="fancyvrb" /><a 12912 id="x1-125042r21"></a><span 12913 class="cmr-6">21</span><span 12914 class="cmtt-8"> </span><span 12915 class="cmtt-8"> </span><span 12916 class="cmtt-8"> </span><span 12917 class="cmtt-8"> 1.6400004e-05,</span><span 12918 class="cmtt-8"> 1.7465768e-05,</span><span 12919 class="cmtt-8"> 1.8600792e-05,</span><span 12920 class="cmtt-8"> 1.9809576e-05,</span> 12921 <br class="fancyvrb" /><a 12922 id="x1-125044r22"></a><span 12923 class="cmr-6">22</span><span 12924 class="cmtt-8"> </span><span 12925 class="cmtt-8"> </span><span 12926 class="cmtt-8"> </span><span 12927 class="cmtt-8"> 2.1096914e-05,</span><span 12928 class="cmtt-8"> 2.2467911e-05,</span><span 12929 class="cmtt-8"> 2.3928002e-05,</span><span 12930 class="cmtt-8"> 2.5482978e-05,</span> 12931 <br class="fancyvrb" /><a 12932 id="x1-125046r23"></a><span 12933 class="cmr-6">23</span><span 12934 class="cmtt-8"> </span><span 12935 class="cmtt-8"> </span><span 12936 class="cmtt-8"> </span><span 12937 class="cmtt-8"> 2.7139006e-05,</span><span 12938 class="cmtt-8"> 2.8902651e-05,</span><span 12939 class="cmtt-8"> 3.0780908e-05,</span><span 12940 class="cmtt-8"> 3.2781225e-05,</span> 12941 <br class="fancyvrb" /><a 12942 id="x1-125048r24"></a><span 12943 class="cmr-6">24</span><span 12944 class="cmtt-8"> </span><span 12945 class="cmtt-8"> </span><span 12946 class="cmtt-8"> </span><span 12947 class="cmtt-8"> 3.4911534e-05,</span><span 12948 class="cmtt-8"> 3.7180282e-05,</span><span 12949 class="cmtt-8"> 3.9596466e-05,</span><span 12950 class="cmtt-8"> 4.2169667e-05,</span> 12951 <br class="fancyvrb" /><a 12952 id="x1-125050r25"></a><span 12953 class="cmr-6">25</span><span 12954 class="cmtt-8"> </span><span 12955 class="cmtt-8"> </span><span 12956 class="cmtt-8"> </span><span 12957 class="cmtt-8"> 4.4910090e-05,</span><span 12958 class="cmtt-8"> 4.7828601e-05,</span><span 12959 class="cmtt-8"> 5.0936773e-05,</span><span 12960 class="cmtt-8"> 5.4246931e-05,</span> 12961 <br class="fancyvrb" /><a 12962 id="x1-125052r26"></a><span 12963 class="cmr-6">26</span><span 12964 class="cmtt-8"> </span><span 12965 class="cmtt-8"> </span><span 12966 class="cmtt-8"> </span><span 12967 class="cmtt-8"> 5.7772202e-05,</span><span 12968 class="cmtt-8"> 6.1526565e-05,</span><span 12969 class="cmtt-8"> 6.5524908e-05,</span><span 12970 class="cmtt-8"> 6.9783085e-05,</span> 12971 <br class="fancyvrb" /><a 12972 id="x1-125054r27"></a><span 12973 class="cmr-6">27</span><span 12974 class="cmtt-8"> </span><span 12975 class="cmtt-8"> </span><span 12976 class="cmtt-8"> </span><span 12977 class="cmtt-8"> 7.4317983e-05,</span><span 12978 class="cmtt-8"> 7.9147585e-05,</span><span 12979 class="cmtt-8"> 8.4291040e-05,</span><span 12980 class="cmtt-8"> 8.9768747e-05,</span> 12981 <br class="fancyvrb" /><a 12982 id="x1-125056r28"></a><span 12983 class="cmr-6">28</span><span 12984 class="cmtt-8"> </span><span 12985 class="cmtt-8"> </span><span 12986 class="cmtt-8"> </span><span 12987 class="cmtt-8"> 9.5602426e-05,</span><span 12988 class="cmtt-8"> 0.00010181521,</span><span 12989 class="cmtt-8"> 0.00010843174,</span><span 12990 class="cmtt-8"> 0.00011547824,</span> 12991 <br class="fancyvrb" /><a 12992 id="x1-125058r29"></a><span 12993 class="cmr-6">29</span><span 12994 class="cmtt-8"> </span><span 12995 class="cmtt-8"> </span><span 12996 class="cmtt-8"> </span><span 12997 class="cmtt-8"> 0.00012298267,</span><span 12998 class="cmtt-8"> 0.00013097477,</span><span 12999 class="cmtt-8"> 0.00013948625,</span><span 13000 class="cmtt-8"> 0.00014855085,</span> 13001 <br class="fancyvrb" /><a 13002 id="x1-125060r30"></a><span 13003 class="cmr-6">30</span><span 13004 class="cmtt-8"> </span><span 13005 class="cmtt-8"> </span><span 13006 class="cmtt-8"> </span><span 13007 class="cmtt-8"> 0.00015820453,</span><span 13008 class="cmtt-8"> 0.00016848555,</span><span 13009 class="cmtt-8"> 0.00017943469,</span><span 13010 class="cmtt-8"> 0.00019109536,</span> 13011 <br class="fancyvrb" /><a 13012 id="x1-125062r31"></a><span 13013 class="cmr-6">31</span><span 13014 class="cmtt-8"> </span><span 13015 class="cmtt-8"> </span><span 13016 class="cmtt-8"> </span><span 13017 class="cmtt-8"> 0.00020351382,</span><span 13018 class="cmtt-8"> 0.00021673929,</span><span 13019 class="cmtt-8"> 0.00023082423,</span><span 13020 class="cmtt-8"> 0.00024582449,</span> 13021 <br class="fancyvrb" /><a 13022 id="x1-125064r32"></a><span 13023 class="cmr-6">32</span><span 13024 class="cmtt-8"> </span><span 13025 class="cmtt-8"> </span><span 13026 class="cmtt-8"> </span><span 13027 class="cmtt-8"> 0.00026179955,</span><span 13028 class="cmtt-8"> 0.00027881276,</span><span 13029 class="cmtt-8"> 0.00029693158,</span><span 13030 class="cmtt-8"> 0.00031622787,</span> 13031 <br class="fancyvrb" /><a 13032 id="x1-125066r33"></a><span 13033 class="cmr-6">33</span><span 13034 class="cmtt-8"> </span><span 13035 class="cmtt-8"> </span><span 13036 class="cmtt-8"> </span><span 13037 class="cmtt-8"> 0.00033677814,</span><span 13038 class="cmtt-8"> 0.00035866388,</span><span 13039 class="cmtt-8"> 0.00038197188,</span><span 13040 class="cmtt-8"> 0.00040679456,</span> 13041 <br class="fancyvrb" /><a 13042 id="x1-125068r34"></a><span 13043 class="cmr-6">34</span><span 13044 class="cmtt-8"> </span><span 13045 class="cmtt-8"> </span><span 13046 class="cmtt-8"> </span><span 13047 class="cmtt-8"> 0.00043323036,</span><span 13048 class="cmtt-8"> 0.00046138411,</span><span 13049 class="cmtt-8"> 0.00049136745,</span><span 13050 class="cmtt-8"> 0.00052329927,</span> 13051 <br class="fancyvrb" /><a 13052 id="x1-125070r35"></a><span 13053 class="cmr-6">35</span><span 13054 class="cmtt-8"> </span><span 13055 class="cmtt-8"> </span><span 13056 class="cmtt-8"> </span><span 13057 class="cmtt-8"> 0.00055730621,</span><span 13058 class="cmtt-8"> 0.00059352311,</span><span 13059 class="cmtt-8"> 0.00063209358,</span><span 13060 class="cmtt-8"> 0.00067317058,</span> 13061 <br class="fancyvrb" /><a 13062 id="x1-125072r36"></a><span 13063 class="cmr-6">36</span><span 13064 class="cmtt-8"> </span><span 13065 class="cmtt-8"> </span><span 13066 class="cmtt-8"> </span><span 13067 class="cmtt-8"> 0.00071691700,</span><span 13068 class="cmtt-8"> 0.00076350630,</span><span 13069 class="cmtt-8"> 0.00081312324,</span><span 13070 class="cmtt-8"> 0.00086596457,</span> 13071 <br class="fancyvrb" /><a 13072 id="x1-125074r37"></a><span 13073 class="cmr-6">37</span><span 13074 class="cmtt-8"> </span><span 13075 class="cmtt-8"> </span><span 13076 class="cmtt-8"> </span><span 13077 class="cmtt-8"> 0.00092223983,</span><span 13078 class="cmtt-8"> 0.00098217216,</span><span 13079 class="cmtt-8"> 0.0010459992,</span><span 13080 class="cmtt-8"> </span><span 13081 class="cmtt-8"> 0.0011139742,</span> 13082 <br class="fancyvrb" /><a 13083 id="x1-125076r38"></a><span 13084 class="cmr-6">38</span><span 13085 class="cmtt-8"> </span><span 13086 class="cmtt-8"> </span><span 13087 class="cmtt-8"> </span><span 13088 class="cmtt-8"> 0.0011863665,</span><span 13089 class="cmtt-8"> </span><span 13090 class="cmtt-8"> 0.0012634633,</span><span 13091 class="cmtt-8"> </span><span 13092 class="cmtt-8"> 0.0013455702,</span><span 13093 class="cmtt-8"> </span><span 13094 class="cmtt-8"> 0.0014330129,</span> 13095 <br class="fancyvrb" /><a 13096 id="x1-125078r39"></a><span 13097 class="cmr-6">39</span><span 13098 class="cmtt-8"> </span><span 13099 class="cmtt-8"> </span><span 13100 class="cmtt-8"> </span><span 13101 class="cmtt-8"> 0.0015261382,</span><span 13102 class="cmtt-8"> </span><span 13103 class="cmtt-8"> 0.0016253153,</span><span 13104 class="cmtt-8"> </span><span 13105 class="cmtt-8"> 0.0017309374,</span><span 13106 class="cmtt-8"> </span><span 13107 class="cmtt-8"> 0.0018434235,</span> 13108 <br class="fancyvrb" /><a 13109 id="x1-125080r40"></a><span 13110 class="cmr-6">40</span><span 13111 class="cmtt-8"> </span><span 13112 class="cmtt-8"> </span><span 13113 class="cmtt-8"> </span><span 13114 class="cmtt-8"> 0.0019632195,</span><span 13115 class="cmtt-8"> </span><span 13116 class="cmtt-8"> 0.0020908006,</span><span 13117 class="cmtt-8"> </span><span 13118 class="cmtt-8"> 0.0022266726,</span><span 13119 class="cmtt-8"> </span><span 13120 class="cmtt-8"> 0.0023713743,</span> 13121 <br class="fancyvrb" /><a 13122 id="x1-125082r41"></a><span 13123 class="cmr-6">41</span><span 13124 class="cmtt-8"> </span><span 13125 class="cmtt-8"> </span><span 13126 class="cmtt-8"> </span><span 13127 class="cmtt-8"> 0.0025254795,</span><span 13128 class="cmtt-8"> </span><span 13129 class="cmtt-8"> 0.0026895994,</span><span 13130 class="cmtt-8"> </span><span 13131 class="cmtt-8"> 0.0028643847,</span><span 13132 class="cmtt-8"> </span><span 13133 class="cmtt-8"> 0.0030505286,</span> 13134 <br class="fancyvrb" /><a 13135 id="x1-125084r42"></a><span 13136 class="cmr-6">42</span><span 13137 class="cmtt-8"> </span><span 13138 class="cmtt-8"> </span><span 13139 class="cmtt-8"> </span><span 13140 class="cmtt-8"> 0.0032487691,</span><span 13141 class="cmtt-8"> </span><span 13142 class="cmtt-8"> 0.0034598925,</span><span 13143 class="cmtt-8"> </span><span 13144 class="cmtt-8"> 0.0036847358,</span><span 13145 class="cmtt-8"> </span><span 13146 class="cmtt-8"> 0.0039241906,</span> 13147 13148 13149 13150 <br class="fancyvrb" /><a 13151 id="x1-125086r43"></a><span 13152 class="cmr-6">43</span><span 13153 class="cmtt-8"> </span><span 13154 class="cmtt-8"> </span><span 13155 class="cmtt-8"> </span><span 13156 class="cmtt-8"> 0.0041792066,</span><span 13157 class="cmtt-8"> </span><span 13158 class="cmtt-8"> 0.0044507950,</span><span 13159 class="cmtt-8"> </span><span 13160 class="cmtt-8"> 0.0047400328,</span><span 13161 class="cmtt-8"> </span><span 13162 class="cmtt-8"> 0.0050480668,</span> 13163 <br class="fancyvrb" /><a 13164 id="x1-125088r44"></a><span 13165 class="cmr-6">44</span><span 13166 class="cmtt-8"> </span><span 13167 class="cmtt-8"> </span><span 13168 class="cmtt-8"> </span><span 13169 class="cmtt-8"> 0.0053761186,</span><span 13170 class="cmtt-8"> </span><span 13171 class="cmtt-8"> 0.0057254891,</span><span 13172 class="cmtt-8"> </span><span 13173 class="cmtt-8"> 0.0060975636,</span><span 13174 class="cmtt-8"> </span><span 13175 class="cmtt-8"> 0.0064938176,</span> 13176 <br class="fancyvrb" /><a 13177 id="x1-125090r45"></a><span 13178 class="cmr-6">45</span><span 13179 class="cmtt-8"> </span><span 13180 class="cmtt-8"> </span><span 13181 class="cmtt-8"> </span><span 13182 class="cmtt-8"> 0.0069158225,</span><span 13183 class="cmtt-8"> </span><span 13184 class="cmtt-8"> 0.0073652516,</span><span 13185 class="cmtt-8"> </span><span 13186 class="cmtt-8"> 0.0078438871,</span><span 13187 class="cmtt-8"> </span><span 13188 class="cmtt-8"> 0.0083536271,</span> 13189 <br class="fancyvrb" /><a 13190 id="x1-125092r46"></a><span 13191 class="cmr-6">46</span><span 13192 class="cmtt-8"> </span><span 13193 class="cmtt-8"> </span><span 13194 class="cmtt-8"> </span><span 13195 class="cmtt-8"> 0.0088964928,</span><span 13196 class="cmtt-8"> </span><span 13197 class="cmtt-8"> 0.009474637,</span><span 13198 class="cmtt-8"> </span><span 13199 class="cmtt-8"> </span><span 13200 class="cmtt-8"> 0.010090352,</span><span 13201 class="cmtt-8"> </span><span 13202 class="cmtt-8"> </span><span 13203 class="cmtt-8"> 0.010746080,</span> 13204 <br class="fancyvrb" /><a 13205 id="x1-125094r47"></a><span 13206 class="cmr-6">47</span><span 13207 class="cmtt-8"> </span><span 13208 class="cmtt-8"> </span><span 13209 class="cmtt-8"> </span><span 13210 class="cmtt-8"> 0.011444421,</span><span 13211 class="cmtt-8"> </span><span 13212 class="cmtt-8"> </span><span 13213 class="cmtt-8"> 0.012188144,</span><span 13214 class="cmtt-8"> </span><span 13215 class="cmtt-8"> </span><span 13216 class="cmtt-8"> 0.012980198,</span><span 13217 class="cmtt-8"> </span><span 13218 class="cmtt-8"> </span><span 13219 class="cmtt-8"> 0.013823725,</span> 13220 <br class="fancyvrb" /><a 13221 id="x1-125096r48"></a><span 13222 class="cmr-6">48</span><span 13223 class="cmtt-8"> </span><span 13224 class="cmtt-8"> </span><span 13225 class="cmtt-8"> </span><span 13226 class="cmtt-8"> 0.014722068,</span><span 13227 class="cmtt-8"> </span><span 13228 class="cmtt-8"> </span><span 13229 class="cmtt-8"> 0.015678791,</span><span 13230 class="cmtt-8"> </span><span 13231 class="cmtt-8"> </span><span 13232 class="cmtt-8"> 0.016697687,</span><span 13233 class="cmtt-8"> </span><span 13234 class="cmtt-8"> </span><span 13235 class="cmtt-8"> 0.017782797,</span> 13236 <br class="fancyvrb" /><a 13237 id="x1-125098r49"></a><span 13238 class="cmr-6">49</span><span 13239 class="cmtt-8"> </span><span 13240 class="cmtt-8"> </span><span 13241 class="cmtt-8"> </span><span 13242 class="cmtt-8"> 0.018938423,</span><span 13243 class="cmtt-8"> </span><span 13244 class="cmtt-8"> </span><span 13245 class="cmtt-8"> 0.020169149,</span><span 13246 class="cmtt-8"> </span><span 13247 class="cmtt-8"> </span><span 13248 class="cmtt-8"> 0.021479854,</span><span 13249 class="cmtt-8"> </span><span 13250 class="cmtt-8"> </span><span 13251 class="cmtt-8"> 0.022875735,</span> 13252 <br class="fancyvrb" /><a 13253 id="x1-125100r50"></a><span 13254 class="cmr-6">50</span><span 13255 class="cmtt-8"> </span><span 13256 class="cmtt-8"> </span><span 13257 class="cmtt-8"> </span><span 13258 class="cmtt-8"> 0.024362330,</span><span 13259 class="cmtt-8"> </span><span 13260 class="cmtt-8"> </span><span 13261 class="cmtt-8"> 0.025945531,</span><span 13262 class="cmtt-8"> </span><span 13263 class="cmtt-8"> </span><span 13264 class="cmtt-8"> 0.027631618,</span><span 13265 class="cmtt-8"> </span><span 13266 class="cmtt-8"> </span><span 13267 class="cmtt-8"> 0.029427276,</span> 13268 <br class="fancyvrb" /><a 13269 id="x1-125102r51"></a><span 13270 class="cmr-6">51</span><span 13271 class="cmtt-8"> </span><span 13272 class="cmtt-8"> </span><span 13273 class="cmtt-8"> </span><span 13274 class="cmtt-8"> 0.031339626,</span><span 13275 class="cmtt-8"> </span><span 13276 class="cmtt-8"> </span><span 13277 class="cmtt-8"> 0.033376252,</span><span 13278 class="cmtt-8"> </span><span 13279 class="cmtt-8"> </span><span 13280 class="cmtt-8"> 0.035545228,</span><span 13281 class="cmtt-8"> </span><span 13282 class="cmtt-8"> </span><span 13283 class="cmtt-8"> 0.037855157,</span> 13284 <br class="fancyvrb" /><a 13285 id="x1-125104r52"></a><span 13286 class="cmr-6">52</span><span 13287 class="cmtt-8"> </span><span 13288 class="cmtt-8"> </span><span 13289 class="cmtt-8"> </span><span 13290 class="cmtt-8"> 0.040315199,</span><span 13291 class="cmtt-8"> </span><span 13292 class="cmtt-8"> </span><span 13293 class="cmtt-8"> 0.042935108,</span><span 13294 class="cmtt-8"> </span><span 13295 class="cmtt-8"> </span><span 13296 class="cmtt-8"> 0.045725273,</span><span 13297 class="cmtt-8"> </span><span 13298 class="cmtt-8"> </span><span 13299 class="cmtt-8"> 0.048696758,</span> 13300 <br class="fancyvrb" /><a 13301 id="x1-125106r53"></a><span 13302 class="cmr-6">53</span><span 13303 class="cmtt-8"> </span><span 13304 class="cmtt-8"> </span><span 13305 class="cmtt-8"> </span><span 13306 class="cmtt-8"> 0.051861348,</span><span 13307 class="cmtt-8"> </span><span 13308 class="cmtt-8"> </span><span 13309 class="cmtt-8"> 0.055231591,</span><span 13310 class="cmtt-8"> </span><span 13311 class="cmtt-8"> </span><span 13312 class="cmtt-8"> 0.058820850,</span><span 13313 class="cmtt-8"> </span><span 13314 class="cmtt-8"> </span><span 13315 class="cmtt-8"> 0.062643361,</span> 13316 <br class="fancyvrb" /><a 13317 id="x1-125108r54"></a><span 13318 class="cmr-6">54</span><span 13319 class="cmtt-8"> </span><span 13320 class="cmtt-8"> </span><span 13321 class="cmtt-8"> </span><span 13322 class="cmtt-8"> 0.066714279,</span><span 13323 class="cmtt-8"> </span><span 13324 class="cmtt-8"> </span><span 13325 class="cmtt-8"> 0.071049749,</span><span 13326 class="cmtt-8"> </span><span 13327 class="cmtt-8"> </span><span 13328 class="cmtt-8"> 0.075666962,</span><span 13329 class="cmtt-8"> </span><span 13330 class="cmtt-8"> </span><span 13331 class="cmtt-8"> 0.080584227,</span> 13332 <br class="fancyvrb" /><a 13333 id="x1-125110r55"></a><span 13334 class="cmr-6">55</span><span 13335 class="cmtt-8"> </span><span 13336 class="cmtt-8"> </span><span 13337 class="cmtt-8"> </span><span 13338 class="cmtt-8"> 0.085821044,</span><span 13339 class="cmtt-8"> </span><span 13340 class="cmtt-8"> </span><span 13341 class="cmtt-8"> 0.091398179,</span><span 13342 class="cmtt-8"> </span><span 13343 class="cmtt-8"> </span><span 13344 class="cmtt-8"> 0.097337747,</span><span 13345 class="cmtt-8"> </span><span 13346 class="cmtt-8"> </span><span 13347 class="cmtt-8"> 0.10366330,</span> 13348 <br class="fancyvrb" /><a 13349 id="x1-125112r56"></a><span 13350 class="cmr-6">56</span><span 13351 class="cmtt-8"> </span><span 13352 class="cmtt-8"> </span><span 13353 class="cmtt-8"> </span><span 13354 class="cmtt-8"> 0.11039993,</span><span 13355 class="cmtt-8"> </span><span 13356 class="cmtt-8"> </span><span 13357 class="cmtt-8"> </span><span 13358 class="cmtt-8"> 0.11757434,</span><span 13359 class="cmtt-8"> </span><span 13360 class="cmtt-8"> </span><span 13361 class="cmtt-8"> </span><span 13362 class="cmtt-8"> 0.12521498,</span><span 13363 class="cmtt-8"> </span><span 13364 class="cmtt-8"> </span><span 13365 class="cmtt-8"> </span><span 13366 class="cmtt-8"> 0.13335215,</span> 13367 <br class="fancyvrb" /><a 13368 id="x1-125114r57"></a><span 13369 class="cmr-6">57</span><span 13370 class="cmtt-8"> </span><span 13371 class="cmtt-8"> </span><span 13372 class="cmtt-8"> </span><span 13373 class="cmtt-8"> 0.14201813,</span><span 13374 class="cmtt-8"> </span><span 13375 class="cmtt-8"> </span><span 13376 class="cmtt-8"> </span><span 13377 class="cmtt-8"> 0.15124727,</span><span 13378 class="cmtt-8"> </span><span 13379 class="cmtt-8"> </span><span 13380 class="cmtt-8"> </span><span 13381 class="cmtt-8"> 0.16107617,</span><span 13382 class="cmtt-8"> </span><span 13383 class="cmtt-8"> </span><span 13384 class="cmtt-8"> </span><span 13385 class="cmtt-8"> 0.17154380,</span> 13386 <br class="fancyvrb" /><a 13387 id="x1-125116r58"></a><span 13388 class="cmr-6">58</span><span 13389 class="cmtt-8"> </span><span 13390 class="cmtt-8"> </span><span 13391 class="cmtt-8"> </span><span 13392 class="cmtt-8"> 0.18269168,</span><span 13393 class="cmtt-8"> </span><span 13394 class="cmtt-8"> </span><span 13395 class="cmtt-8"> </span><span 13396 class="cmtt-8"> 0.19456402,</span><span 13397 class="cmtt-8"> </span><span 13398 class="cmtt-8"> </span><span 13399 class="cmtt-8"> </span><span 13400 class="cmtt-8"> 0.20720788,</span><span 13401 class="cmtt-8"> </span><span 13402 class="cmtt-8"> </span><span 13403 class="cmtt-8"> </span><span 13404 class="cmtt-8"> 0.22067342,</span> 13405 <br class="fancyvrb" /><a 13406 id="x1-125118r59"></a><span 13407 class="cmr-6">59</span><span 13408 class="cmtt-8"> </span><span 13409 class="cmtt-8"> </span><span 13410 class="cmtt-8"> </span><span 13411 class="cmtt-8"> 0.23501402,</span><span 13412 class="cmtt-8"> </span><span 13413 class="cmtt-8"> </span><span 13414 class="cmtt-8"> </span><span 13415 class="cmtt-8"> 0.25028656,</span><span 13416 class="cmtt-8"> </span><span 13417 class="cmtt-8"> </span><span 13418 class="cmtt-8"> </span><span 13419 class="cmtt-8"> 0.26655159,</span><span 13420 class="cmtt-8"> </span><span 13421 class="cmtt-8"> </span><span 13422 class="cmtt-8"> </span><span 13423 class="cmtt-8"> 0.28387361,</span> 13424 <br class="fancyvrb" /><a 13425 id="x1-125120r60"></a><span 13426 class="cmr-6">60</span><span 13427 class="cmtt-8"> </span><span 13428 class="cmtt-8"> </span><span 13429 class="cmtt-8"> </span><span 13430 class="cmtt-8"> 0.30232132,</span><span 13431 class="cmtt-8"> </span><span 13432 class="cmtt-8"> </span><span 13433 class="cmtt-8"> </span><span 13434 class="cmtt-8"> 0.32196786,</span><span 13435 class="cmtt-8"> </span><span 13436 class="cmtt-8"> </span><span 13437 class="cmtt-8"> </span><span 13438 class="cmtt-8"> 0.34289114,</span><span 13439 class="cmtt-8"> </span><span 13440 class="cmtt-8"> </span><span 13441 class="cmtt-8"> </span><span 13442 class="cmtt-8"> 0.36517414,</span> 13443 <br class="fancyvrb" /><a 13444 id="x1-125122r61"></a><span 13445 class="cmr-6">61</span><span 13446 class="cmtt-8"> </span><span 13447 class="cmtt-8"> </span><span 13448 class="cmtt-8"> </span><span 13449 class="cmtt-8"> 0.38890521,</span><span 13450 class="cmtt-8"> </span><span 13451 class="cmtt-8"> </span><span 13452 class="cmtt-8"> </span><span 13453 class="cmtt-8"> 0.41417847,</span><span 13454 class="cmtt-8"> </span><span 13455 class="cmtt-8"> </span><span 13456 class="cmtt-8"> </span><span 13457 class="cmtt-8"> 0.44109412,</span><span 13458 class="cmtt-8"> </span><span 13459 class="cmtt-8"> </span><span 13460 class="cmtt-8"> </span><span 13461 class="cmtt-8"> 0.46975890,</span> 13462 <br class="fancyvrb" /><a 13463 id="x1-125124r62"></a><span 13464 class="cmr-6">62</span><span 13465 class="cmtt-8"> </span><span 13466 class="cmtt-8"> </span><span 13467 class="cmtt-8"> </span><span 13468 class="cmtt-8"> 0.50028648,</span><span 13469 class="cmtt-8"> </span><span 13470 class="cmtt-8"> </span><span 13471 class="cmtt-8"> </span><span 13472 class="cmtt-8"> 0.53279791,</span><span 13473 class="cmtt-8"> </span><span 13474 class="cmtt-8"> </span><span 13475 class="cmtt-8"> </span><span 13476 class="cmtt-8"> 0.56742212,</span><span 13477 class="cmtt-8"> </span><span 13478 class="cmtt-8"> </span><span 13479 class="cmtt-8"> </span><span 13480 class="cmtt-8"> 0.60429640,</span> 13481 <br class="fancyvrb" /><a 13482 id="x1-125126r63"></a><span 13483 class="cmr-6">63</span><span 13484 class="cmtt-8"> </span><span 13485 class="cmtt-8"> </span><span 13486 class="cmtt-8"> </span><span 13487 class="cmtt-8"> 0.64356699,</span><span 13488 class="cmtt-8"> </span><span 13489 class="cmtt-8"> </span><span 13490 class="cmtt-8"> </span><span 13491 class="cmtt-8"> 0.68538959,</span><span 13492 class="cmtt-8"> </span><span 13493 class="cmtt-8"> </span><span 13494 class="cmtt-8"> </span><span 13495 class="cmtt-8"> 0.72993007,</span><span 13496 class="cmtt-8"> </span><span 13497 class="cmtt-8"> </span><span 13498 class="cmtt-8"> </span><span 13499 class="cmtt-8"> 0.77736504,</span> 13500 <br class="fancyvrb" /><a 13501 id="x1-125128r64"></a><span 13502 class="cmr-6">64</span><span 13503 class="cmtt-8"> </span><span 13504 class="cmtt-8"> </span><span 13505 class="cmtt-8"> </span><span 13506 class="cmtt-8"> 0.82788260,</span><span 13507 class="cmtt-8"> </span><span 13508 class="cmtt-8"> </span><span 13509 class="cmtt-8"> </span><span 13510 class="cmtt-8"> 0.88168307,</span><span 13511 class="cmtt-8"> </span><span 13512 class="cmtt-8"> </span><span 13513 class="cmtt-8"> </span><span 13514 class="cmtt-8"> 0.9389798,</span><span 13515 class="cmtt-8"> </span><span 13516 class="cmtt-8"> </span><span 13517 class="cmtt-8"> </span><span 13518 class="cmtt-8"> </span><span 13519 class="cmtt-8"> 1.</span> 13520 </div> 13521 13522 13523 13524 13525 13526 13527 <h3 class="sectionHead"><span class="titlemark">A </span> <a 13528 id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3> 13529 <!--l. 6--><p class="noindent" > 13530 <h4 class="subsectionHead"><span class="titlemark">A.1 </span> <a 13531 id="x1-127000A.1"></a>Overview</h4> 13532 <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis 13533 compressed audio packet data into file form. 13534 <!--l. 12--><p class="noindent" >The <a 13535 href="#x1-20001">Section 1</a>, “<a 13536 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>” provides an overview of the construction of 13537 Vorbis audio packets. 13538 <!--l. 15--><p class="noindent" >The <a 13539 href="oggstream.html" >Ogg bitstream overview</a> and <a 13540 href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed 13541 descriptions of Ogg transport streams. This specification document assumes a working 13542 knowledge of the concepts covered in these named backround documents. Please read them 13543 first. 13544 <!--l. 22--><p class="noindent" > 13545 <h5 class="subsubsectionHead"><span class="titlemark">A.1.1 </span> <a 13546 id="x1-128000A.1.1"></a>Restrictions</h5> 13547 <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport 13548 streams in degenerate, unmultiplexed form only. That is: 13549 <ul class="itemize1"> 13550 <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets 13551 </li> 13552 <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams 13553 (links). 13554 </li> 13555 <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream, 13556 per link) 13557 </li></ul> 13558 13559 13560 13561 <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media 13562 types into a multi-stream Ogg file. At the time this document was written, Ogg was 13563 becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis 13564 audio. However, a ’Vorbis I audio file’ is taken to imply Vorbis audio existing alone 13565 within a degenerate Ogg stream. A compliant ’Vorbis audio player’ is not required to 13566 implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg 13567 stream (naturally, application authors are encouraged to support full multiplexed Ogg 13568 handling). 13569 <!--l. 55--><p class="noindent" > 13570 <h5 class="subsubsectionHead"><span class="titlemark">A.1.2 </span> <a 13571 id="x1-129000A.1.2"></a>MIME type</h5> 13572 <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and 13573 applications should use <span 13574 class="cmtt-12">application/ogg</span>, while visual media should use <span 13575 class="cmtt-12">video/ogg</span>, and audio 13576 <span 13577 class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP 13578 encapsulated Vorbis should use <span 13579 class="cmtt-12">audio/vorbis </span>+ <span 13580 class="cmtt-12">audio/vorbis-config</span>. 13581 <!--l. 65--><p class="noindent" > 13582 <h4 class="subsectionHead"><span class="titlemark">A.2 </span> <a 13583 id="x1-130000A.2"></a>Encapsulation</h4> 13584 <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward. 13585 <ul class="itemize1"> 13586 <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream 13587 as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This 13588 results in a first Ogg page of exactly 58 bytes at the very beginning of the logical 13589 stream. 13590 </li> 13591 <li class="itemize">This first page is marked ’beginning of stream’ in the page flags. 13592 </li> 13593 <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or 13594 more pages beginning on the second page of the logical stream. However many pages 13595 they span, the third header packet finishes the page on which it ends. The next (first 13596 audio) packet must begin on a fresh page. 13597 13598 13599 13600 </li> 13601 <li class="itemize">The granule position of these first pages containing only headers is zero. 13602 </li> 13603 <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page. 13604 </li> 13605 <li class="itemize">Packets are placed into ogg pages in order until the end of stream. 13606 </li> 13607 <li class="itemize">The last page is marked ’end of stream’ in the page flags. 13608 </li> 13609 <li class="itemize">Vorbis packets may span page boundaries. 13610 </li> 13611 <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio 13612 samples (per channel; a stereo stream’s granule position does not increment at twice 13613 the speed of a mono stream). 13614 </li> 13615 <li class="itemize">The granule position of a page represents the end PCM sample position of the last 13616 packet <span 13617 class="cmti-12">completed </span>on that page. The ’last PCM sample’ is the last complete sample 13618 returned by decode, not an internal sample awaiting lapping with a subsequent block. 13619 A page that is entirely spanned by a single packet (that completes on a subsequent 13620 page) has no granule position, and the granule position is set to ’-1’. 13621 <!--l. 126--><p class="noindent" >Note that the last decoded (fully lapped) PCM sample from a packet is not 13622 necessarily the middle sample from that block. If, eg, the current Vorbis packet 13623 encodes a ”long block” and the next Vorbis packet encodes a ”short block”, the last 13624 decodable sample from the current packet be at position (3*long_block_length/4) - 13625 (short_block_length/4). 13626 </li> 13627 <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream 13628 started at position zero. Although the granule position belongs to the last completed 13629 packet on the page and a valid granule position must be positive, by inference it may 13630 indicate that the PCM position of the beginning of audio is positive or negative. 13631 <ul class="itemize2"> 13632 <li class="itemize">A positive starting value simply indicates that this stream begins at some 13633 positive time offset, potentially within a larger program. This is a common case 13634 when connecting to the middle of broadcast stream. 13635 </li> 13636 <li class="itemize">A negative value indicates that output samples preceeding time zero should be 13637 13638 13639 13640 discarded during decoding; this technique is used to allow sample-granularity 13641 editing of the stream start time of already-encoded Vorbis streams. The number 13642 of samples to be discarded must not exceed the overlap-add span of the first two 13643 audio packets. 13644 </li></ul> 13645 <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the 13646 second finished audio packet must flush the page on which it appears and the 13647 third packet begin a fresh page. This allows the decoder to always be able to 13648 perform PCM position adjustments before needing to return any PCM data from 13649 synthesis, resulting in correct positioning information without any aditional seeking 13650 logic. 13651 <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a 13652 id="x1-131000A.2"></a><span 13653 class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return 13654 incorrect positioning information for seeking operations at the very beginning of the 13655 stream. 13656 </li> 13657 <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the 13658 final packet would normally return is used to end the stream on other than even frame 13659 boundaries. The difference between the actual available data returned and the 13660 declared amount indicates how many trailing samples to discard from the decoding 13661 process. 13662 </li></ul> 13663 13664 13665 13666 <h3 class="sectionHead"><span class="titlemark">B </span> <a 13667 id="x1-132000B"></a>Vorbis encapsulation in RTP</h3> 13668 <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span 13669 class="cmti-12">“RTP Payload Format for Vorbis Encoded Audio” </span>for description of 13670 how to embed Vorbis audio in an RTP stream. 13671 13672 13673 13674 13675 13676 13677 <h3 class="likesectionHead"><a 13678 id="x1-133000B"></a>Colophon</h3> 13679 <!--l. 6--><p class="noindent" ><img 13680 src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics 13681 name="Vorbis_I_spec13x.png" src="xifish.pdf" 13682 --> 13683 <!--l. 10--><p class="noindent" >Ogg is a <a 13684 href="http://www.xiph.org/" >Xiph.org Foundation</a> effort to protect essential tenets of Internet multimedia from 13685 corporate hostage-taking; Open Source is the net’s greatest tool to keep everyone honest. See 13686 <a 13687 href="http://www.xiph.org/about.html" >About the Xiph.org Foundation</a> for details. 13688 <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and 13689 Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.org 13690 Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification 13691 and certify specification compliance. 13692 <!--l. 23--><p class="noindent" >Xiph.org’s Vorbis software CODEC implementation is distributed under a BSD-like license. This 13693 does not restrict third parties from distributing independent implementations of Vorbis software 13694 under other licenses. 13695 <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.org Foundation and their logos are trademarks (tm) of the <a 13696 href="http://www.xiph.org/" >Xiph.org 13697 Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.org Foundation. All rights 13698 reserved. 13699 <!--l. 33--><p class="noindent" >This document is set using <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span 13700 class="E">E</span>X</span></span>. 13701 13702 13703 13704 <h3 class="likesectionHead"><a 13705 id="x1-134000B"></a>References</h3> 13706 <!--l. 123--><p class="noindent" > 13707 <div class="thebibliography"> 13708 <p class="bibitem" ><span class="biblabel"> 13709 [1]<span class="bibsp">   </span></span><a 13710 id="XSporer/Brandenburg/Edler"></a>T. Sporer, K. Brandenburg and 13711 B. Edler, The use of multirate filter banks for coding of high quality digital audio, 13712 <a 13713 href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span 13714 class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>. 13715 </p> 13716 </div> 13717 13718 </body></html> 13719 13720 13721 13722 13723