annotate src/libvorbis-1.3.3/doc/Vorbis_I_spec.html @ 1:05aa0afa9217

Bring in flac, ogg, vorbis
author Chris Cannam
date Tue, 19 Mar 2013 17:37:49 +0000
parents
children
rev   line source
Chris@1 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
Chris@1 2 "http://www.w3.org/TR/html4/loose.dtd">
Chris@1 3 <html >
Chris@1 4 <head><title>Vorbis I specification</title>
Chris@1 5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Chris@1 6 <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
Chris@1 7 <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
Chris@1 8 <!-- html -->
Chris@1 9 <meta name="src" content="Vorbis_I_spec.tex">
Chris@1 10 <meta name="date" content="2012-02-03 17:22:00">
Chris@1 11 <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css">
Chris@1 12 </head><body
Chris@1 13 >
Chris@1 14 <div class="maketitle">
Chris@1 15
Chris@1 16
Chris@1 17
Chris@1 18
Chris@1 19
Chris@1 20
Chris@1 21
Chris@1 22 <h2 class="titleHead">Vorbis I specification</h2>
Chris@1 23 <div class="author" ><span
Chris@1 24 class="cmr-17">Xiph.Org Foundation</span></div><br />
Chris@1 25 <div class="date" ><span
Chris@1 26 class="cmr-17">February 3, 2012</span></div>
Chris@1 27 </div>
Chris@1 28 <h3 class="likesectionHead"><a
Chris@1 29 id="x1-1000"></a>Contents</h3>
Chris@1 30 <div class="tableofcontents">
Chris@1 31 &#x00A0;<span class="sectionToc" >1 <a
Chris@1 32 href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span>
Chris@1 33 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.1 <a
Chris@1 34 href="#x1-30001.1" id="QQ2-1-3">Overview</a></span>
Chris@1 35 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.1 <a
Chris@1 36 href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span>
Chris@1 37 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.2 <a
Chris@1 38 href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span>
Chris@1 39 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.3 <a
Chris@1 40 href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span>
Chris@1 41 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.4 <a
Chris@1 42 href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span>
Chris@1 43 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.5 <a
Chris@1 44 href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span>
Chris@1 45 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.6 <a
Chris@1 46 href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span>
Chris@1 47 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.2 <a
Chris@1 48 href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span>
Chris@1 49 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.1 <a
Chris@1 50 href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span>
Chris@1 51 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.2 <a
Chris@1 52 href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span>
Chris@1 53 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.3 <a
Chris@1 54 href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span>
Chris@1 55
Chris@1 56
Chris@1 57
Chris@1 58 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.4 <a
Chris@1 59 href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span>
Chris@1 60 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.5 <a
Chris@1 61 href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span>
Chris@1 62 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.6 <a
Chris@1 63 href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span>
Chris@1 64 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.3 <a
Chris@1 65 href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span>
Chris@1 66 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.1 <a
Chris@1 67 href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span>
Chris@1 68 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.2 <a
Chris@1 69 href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span>
Chris@1 70 <br />&#x00A0;<span class="sectionToc" >2 <a
Chris@1 71 href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span>
Chris@1 72 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >2.1 <a
Chris@1 73 href="#x1-370002.1" id="QQ2-1-40">Overview</a></span>
Chris@1 74 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.1 <a
Chris@1 75 href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span>
Chris@1 76 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.2 <a
Chris@1 77 href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span>
Chris@1 78 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.3 <a
Chris@1 79 href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span>
Chris@1 80 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.4 <a
Chris@1 81 href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span>
Chris@1 82 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.5 <a
Chris@1 83 href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span>
Chris@1 84 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.6 <a
Chris@1 85 href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span>
Chris@1 86 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.7 <a
Chris@1 87 href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span>
Chris@1 88 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.8 <a
Chris@1 89 href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span>
Chris@1 90 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.9 <a
Chris@1 91 href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span>
Chris@1 92 <br />&#x00A0;<span class="sectionToc" >3 <a
Chris@1 93 href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span>
Chris@1 94 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.1 <a
Chris@1 95 href="#x1-480003.1" id="QQ2-1-51">Overview</a></span>
Chris@1 96 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.1 <a
Chris@1 97 href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span>
Chris@1 98 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.2 <a
Chris@1 99 href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span>
Chris@1 100 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.2.1 <a
Chris@1 101 href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span>
Chris@1 102 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.3 <a
Chris@1 103 href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span>
Chris@1 104 <br />&#x00A0;<span class="sectionToc" >4 <a
Chris@1 105 href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span>
Chris@1 106 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.1 <a
Chris@1 107 href="#x1-590004.1" id="QQ2-1-64">Overview</a></span>
Chris@1 108 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.2 <a
Chris@1 109 href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span>
Chris@1 110 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.1 <a
Chris@1 111 href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span>
Chris@1 112 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.2 <a
Chris@1 113 href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span>
Chris@1 114 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.3 <a
Chris@1 115 href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span>
Chris@1 116
Chris@1 117
Chris@1 118
Chris@1 119 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.4 <a
Chris@1 120 href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span>
Chris@1 121 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.3 <a
Chris@1 122 href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span>
Chris@1 123 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.1 <a
Chris@1 124 href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span>
Chris@1 125 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.2 <a
Chris@1 126 href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span>
Chris@1 127 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.3 <a
Chris@1 128 href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span>
Chris@1 129 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.4 <a
Chris@1 130 href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span>
Chris@1 131 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.5 <a
Chris@1 132 href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span>
Chris@1 133 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.6 <a
Chris@1 134 href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span>
Chris@1 135 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.7 <a
Chris@1 136 href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span>
Chris@1 137 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.8 <a
Chris@1 138 href="#x1-790004.3.8" id="QQ2-1-85">overlap_add</a></span>
Chris@1 139 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.9 <a
Chris@1 140 href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span>
Chris@1 141 <br />&#x00A0;<span class="sectionToc" >5 <a
Chris@1 142 href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span>
Chris@1 143 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.1 <a
Chris@1 144 href="#x1-820005.1" id="QQ2-1-88">Overview</a></span>
Chris@1 145 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.2 <a
Chris@1 146 href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span>
Chris@1 147 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.1 <a
Chris@1 148 href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span>
Chris@1 149 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.2 <a
Chris@1 150 href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span>
Chris@1 151 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.3 <a
Chris@1 152 href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span>
Chris@1 153 <br />&#x00A0;<span class="sectionToc" >6 <a
Chris@1 154 href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span>
Chris@1 155 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.1 <a
Chris@1 156 href="#x1-900006.1" id="QQ2-1-96">Overview</a></span>
Chris@1 157 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.2 <a
Chris@1 158 href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span>
Chris@1 159 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.1 <a
Chris@1 160 href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span>
Chris@1 161 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.2 <a
Chris@1 162 href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span>
Chris@1 163 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.3 <a
Chris@1 164 href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span>
Chris@1 165 <br />&#x00A0;<span class="sectionToc" >7 <a
Chris@1 166 href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span>
Chris@1 167 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.1 <a
Chris@1 168 href="#x1-960007.1" id="QQ2-1-102">Overview</a></span>
Chris@1 169 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.2 <a
Chris@1 170 href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span>
Chris@1 171 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.1 <a
Chris@1 172 href="#x1-980007.2.1" id="QQ2-1-104">model</a></span>
Chris@1 173 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.2 <a
Chris@1 174 href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span>
Chris@1 175 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.3 <a
Chris@1 176 href="#x1-1000007.2.3" id="QQ2-1-110">packet decode</a></span>
Chris@1 177
Chris@1 178
Chris@1 179
Chris@1 180 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.4 <a
Chris@1 181 href="#x1-1010007.2.4" id="QQ2-1-111">curve computation</a></span>
Chris@1 182 <br />&#x00A0;<span class="sectionToc" >8 <a
Chris@1 183 href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span>
Chris@1 184 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.1 <a
Chris@1 185 href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span>
Chris@1 186 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.2 <a
Chris@1 187 href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span>
Chris@1 188 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.3 <a
Chris@1 189 href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span>
Chris@1 190 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.4 <a
Chris@1 191 href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span>
Chris@1 192 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.5 <a
Chris@1 193 href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span>
Chris@1 194 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.6 <a
Chris@1 195 href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span>
Chris@1 196 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.1 <a
Chris@1 197 href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span>
Chris@1 198 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.2 <a
Chris@1 199 href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span>
Chris@1 200 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.3 <a
Chris@1 201 href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span>
Chris@1 202 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.4 <a
Chris@1 203 href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span>
Chris@1 204 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.5 <a
Chris@1 205 href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span>
Chris@1 206 <br />&#x00A0;<span class="sectionToc" >9 <a
Chris@1 207 href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span>
Chris@1 208 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.1 <a
Chris@1 209 href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span>
Chris@1 210 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.2 <a
Chris@1 211 href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span>
Chris@1 212 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.1 <a
Chris@1 213 href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span>
Chris@1 214 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.2 <a
Chris@1 215 href="#x1-1180009.2.2" id="QQ2-1-130">float32_unpack</a></span>
Chris@1 216 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.3 <a
Chris@1 217 href="#x1-1190009.2.3" id="QQ2-1-131">lookup1_values</a></span>
Chris@1 218 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.4 <a
Chris@1 219 href="#x1-1200009.2.4" id="QQ2-1-132">low_neighbor</a></span>
Chris@1 220 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.5 <a
Chris@1 221 href="#x1-1210009.2.5" id="QQ2-1-133">high_neighbor</a></span>
Chris@1 222 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.6 <a
Chris@1 223 href="#x1-1220009.2.6" id="QQ2-1-134">render_point</a></span>
Chris@1 224 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.7 <a
Chris@1 225 href="#x1-1230009.2.7" id="QQ2-1-135">render_line</a></span>
Chris@1 226 <br />&#x00A0;<span class="sectionToc" >10 <a
Chris@1 227 href="#x1-12400010" id="QQ2-1-136">Tables</a></span>
Chris@1 228 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >10.1 <a
Chris@1 229 href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span>
Chris@1 230 <br />&#x00A0;<span class="sectionToc" >A <a
Chris@1 231 href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span>
Chris@1 232 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.1 <a
Chris@1 233 href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span>
Chris@1 234 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.1 <a
Chris@1 235 href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span>
Chris@1 236 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.2 <a
Chris@1 237 href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span>
Chris@1 238
Chris@1 239
Chris@1 240
Chris@1 241 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.2 <a
Chris@1 242 href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span>
Chris@1 243 <br />&#x00A0;<span class="sectionToc" >B <a
Chris@1 244 href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span>
Chris@1 245 </div>
Chris@1 246
Chris@1 247
Chris@1 248
Chris@1 249 <h3 class="sectionHead"><span class="titlemark">1. </span> <a
Chris@1 250 id="x1-20001"></a>Introduction and Description</h3>
Chris@1 251 <!--l. 6--><p class="noindent" >
Chris@1 252 <h4 class="subsectionHead"><span class="titlemark">1.1. </span> <a
Chris@1 253 id="x1-30001.1"></a>Overview</h4>
Chris@1 254 <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec&#8217;s construction. A bit-by-bit
Chris@1 255 specification appears beginning in <a
Chris@1 256 href="#x1-580004">Section&#x00A0;4</a>, &#8220;<a
Chris@1 257 href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>&#8221;. The later
Chris@1 258 sections assume a high-level understanding of the Vorbis decode process, which is provided
Chris@1 259 here.
Chris@1 260 <!--l. 15--><p class="noindent" >
Chris@1 261 <h5 class="subsubsectionHead"><span class="titlemark">1.1.1. </span> <a
Chris@1 262 id="x1-40001.1.1"></a>Application</h5>
Chris@1 263 <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder
Chris@1 264 flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At
Chris@1 265 the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same
Chris@1 266 league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT
Chris@1 267 rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower
Chris@1 268 and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel
Chris@1 269 representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
Chris@1 270 discrete channels).
Chris@1 271 <!--l. 29--><p class="noindent" >
Chris@1 272 <h5 class="subsubsectionHead"><span class="titlemark">1.1.2. </span> <a
Chris@1 273 id="x1-50001.1.2"></a>Classification</h5>
Chris@1 274 <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete
Chris@1 275 Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in
Chris@1 276 Vorbis II to offer better transient response and reproduction using a transform better suited to
Chris@1 277 localized time events.
Chris@1 278
Chris@1 279
Chris@1 280
Chris@1 281 <!--l. 37--><p class="noindent" >
Chris@1 282 <h5 class="subsubsectionHead"><span class="titlemark">1.1.3. </span> <a
Chris@1 283 id="x1-60001.1.3"></a>Assumptions</h5>
Chris@1 284 <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple,
Chris@1 285 low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does
Chris@1 286 require more working memory as Vorbis has no static probability model; the vector codebooks
Chris@1 287 used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis
Chris@1 288 bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to
Chris@1 289 which they are pre-decoded into a cache is the dominant factor in decoder memory
Chris@1 290 usage.
Chris@1 291 <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it
Chris@1 292 is solely a method of accepting input audio, dividing it into individual frames and
Chris@1 293 compressing these frames into raw, unformatted &#8217;packets&#8217;. The decoder then accepts
Chris@1 294 these raw packets in sequence, decodes them, synthesizes audio frames from them, and
Chris@1 295 reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form
Chris@1 296 variable bit rate (VBR) codec and packets have no minimum size, maximum size, or
Chris@1 297 fixed/expected size. Packets are designed that they may be truncated (or padded)
Chris@1 298 and remain decodable; this is not to be considered an error condition and is used
Chris@1 299 extensively in bitrate management in peeling. Both the transport mechanism and
Chris@1 300 decoder must allow that a packet may be any size, or end before or after packet decode
Chris@1 301 expects.
Chris@1 302 <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form
Chris@1 303 framing, sync, positioning and error correction in accordance with these design assumptions, such
Chris@1 304 as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this
Chris@1 305 document, we will assume that Vorbis is to be embedded in an Ogg stream specifically,
Chris@1 306 although this is by no means a requirement or fundamental assumption in the Vorbis
Chris@1 307 design.
Chris@1 308 <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a
Chris@1 309 href="#x1-126000A">Section&#x00A0;A</a>,
Chris@1 310 &#8220;<a
Chris@1 311 href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>&#8221;.
Chris@1 312 <!--l. 77--><p class="noindent" >
Chris@1 313 <h5 class="subsubsectionHead"><span class="titlemark">1.1.4. </span> <a
Chris@1 314 id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5>
Chris@1 315 <!--l. 79--><p class="noindent" >Vorbis&#8217; heritage is as a research CODEC and its current design reflects a desire to allow multiple
Chris@1 316 decades of continuous encoder improvement before running out of room within the codec
Chris@1 317 specification. For these reasons, configurable aspects of codec setup intentionally lean toward the
Chris@1 318 extreme of forward adaptive.
Chris@1 319
Chris@1 320
Chris@1 321
Chris@1 322 <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis
Chris@1 323 developer to keep in mind) is that the entire probability model of the codec, the Huffman and
Chris@1 324 VQ codebooks, is packed into the bitstream header along with extensive CODEC setup
Chris@1 325 parameters (often several hundred fields). This makes it impossible, as it would be with
Chris@1 326 MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin
Chris@1 327 decode at any frame in the stream without having previously fetched the codec setup
Chris@1 328 header.
Chris@1 329 <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a
Chris@1 330 id="x1-80001.1.4"></a><span
Chris@1 331 class="cmbx-12">Note:</span></span> Vorbis <span
Chris@1 332 class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec
Chris@1 333 has been initialized/setup with the setup headers.
Chris@1 334 <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream
Chris@1 335 headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less
Chris@1 336 is recommended (and Xiph.Org&#8217;s Vorbis encoder follows this suggestion).
Chris@1 337 <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is
Chris@1 338 an unusual design and thus causes some amount of complaint among engineers as this runs
Chris@1 339 against current design trends (and also points out limitations in some existing software/interface
Chris@1 340 designs, such as Windows&#8217; ACM codec framework). However, we find that it does not
Chris@1 341 fundamentally limit Vorbis&#8217; suitable application space.
Chris@1 342 <!--l. 115--><p class="noindent" >
Chris@1 343 <h5 class="subsubsectionHead"><span class="titlemark">1.1.5. </span> <a
Chris@1 344 id="x1-90001.1.5"></a>Format Specification</h5>
Chris@1 345 <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets
Chris@1 346 that are correctly decoded by the reference Vorbis decoder described below may be considered
Chris@1 347 a proper Vorbis encoder. A decoder must faithfully and completely implement the
Chris@1 348 specification defined below (except where noted) to be considered a proper Vorbis
Chris@1 349 decoder.
Chris@1 350 <!--l. 123--><p class="noindent" >
Chris@1 351 <h5 class="subsubsectionHead"><span class="titlemark">1.1.6. </span> <a
Chris@1 352 id="x1-100001.1.6"></a>Hardware Profile</h5>
Chris@1 353
Chris@1 354
Chris@1 355
Chris@1 356 <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an
Chris@1 357 embedded design. For this reason, embedded designs are allowed to deviate in limited ways from
Chris@1 358 the &#8216;full&#8217; decode specification yet still be certified compliant. These optional omissions are
Chris@1 359 labelled in the spec where relevant.
Chris@1 360 <!--l. 131--><p class="noindent" >
Chris@1 361 <h4 class="subsectionHead"><span class="titlemark">1.2. </span> <a
Chris@1 362 id="x1-110001.2"></a>Decoder Configuration</h4>
Chris@1 363 <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that
Chris@1 364 perform specific functions in the decode pipeline. Each different component instance of a specific
Chris@1 365 type is semantically interchangeable; decoder configuration consists both of internal component
Chris@1 366 configuration, as well as arrangement of specific instances into a decode pipeline. Componentry
Chris@1 367 arrangement is roughly as follows:
Chris@1 368 <div class="center"
Chris@1 369 >
Chris@1 370 <!--l. 141--><p class="noindent" >
Chris@1 371
Chris@1 372 <!--l. 142--><p class="noindent" ><img
Chris@1 373 src="components.png" alt="PIC"
Chris@1 374 >
Chris@1 375 <br /> <div class="caption"
Chris@1 376 ><span class="id">Figure&#x00A0;1: </span><span
Chris@1 377 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 -->
Chris@1 378 </div>
Chris@1 379 <!--l. 146--><p class="noindent" >
Chris@1 380 <h5 class="subsubsectionHead"><span class="titlemark">1.2.1. </span> <a
Chris@1 381 id="x1-120001.2.1"></a>Global Config</h5>
Chris@1 382 <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis
Chris@1 383 version (always &#8217;0&#8217; in Vorbis I), bitrate hints, and the lists of component instances. All other
Chris@1 384 configuration is in the context of specific components.
Chris@1 385 <!--l. 152--><p class="noindent" >
Chris@1 386 <h5 class="subsubsectionHead"><span class="titlemark">1.2.2. </span> <a
Chris@1 387 id="x1-130001.2.2"></a>Mode</h5>
Chris@1 388
Chris@1 389
Chris@1 390
Chris@1 391 <!--l. 154--><p class="noindent" >Each Vorbis frame is coded according to a master &#8217;mode&#8217;. A bitstream may use one or many
Chris@1 392 modes.
Chris@1 393 <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible
Chris@1 394 methods with the intention of choosing a method best suited to that frame. Different
Chris@1 395 modes are, e.g. how frame size is changed from frame to frame. The mode number of a
Chris@1 396 frame serves as a top level configuration switch for all other specific aspects of frame
Chris@1 397 decode.
Chris@1 398 <!--l. 164--><p class="noindent" >A &#8217;mode&#8217; configuration consists of a frame size setting, window type (always 0, the Vorbis
Chris@1 399 window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping
Chris@1 400 number. The mapping number specifies which mapping configuration instance to use for low-level
Chris@1 401 packet decode and synthesis.
Chris@1 402 <!--l. 171--><p class="noindent" >
Chris@1 403 <h5 class="subsubsectionHead"><span class="titlemark">1.2.3. </span> <a
Chris@1 404 id="x1-140001.2.3"></a>Mapping</h5>
Chris@1 405 <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of &#8217;submaps&#8217; that bundle sets
Chris@1 406 of channel vectors together for grouped encoding and decoding. These submaps are
Chris@1 407 not references to external components; the submap list is internal and specific to a
Chris@1 408 mapping.
Chris@1 409 <!--l. 178--><p class="noindent" >A &#8217;submap&#8217; is a configuration/grouping that applies to a subset of floor and residue vectors
Chris@1 410 within a mapping. The submap functions as a last layer of indirection such that specific special
Chris@1 411 floor or residue settings can be applied not only to all the vectors in a given mode, but also
Chris@1 412 specific vectors in a specific mode. Each submap specifies the proper floor and residue
Chris@1 413 instance number to use for decoding that submap&#8217;s spectral floor and spectral residue
Chris@1 414 vectors.
Chris@1 415 <!--l. 186--><p class="noindent" >As an example:
Chris@1 416 <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth
Chris@1 417 channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a
Chris@1 418 full-spectrum version of it as with the other channels. The submapping mechanism can be used
Chris@1 419 to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only
Chris@1 420 representation to the bass channel, thus saving space. In this example, channels 0-4 belong to
Chris@1 421 submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which
Chris@1 422 uses a bass-only representation.
Chris@1 423
Chris@1 424
Chris@1 425
Chris@1 426 <!--l. 199--><p class="noindent" >
Chris@1 427 <h5 class="subsubsectionHead"><span class="titlemark">1.2.4. </span> <a
Chris@1 428 id="x1-150001.2.4"></a>Floor</h5>
Chris@1 429 <!--l. 201--><p class="noindent" >Vorbis encodes a spectral &#8217;floor&#8217; vector for each PCM channel. This vector is a low-resolution
Chris@1 430 representation of the audio spectrum for the given channel in the current frame, generally used
Chris@1 431 akin to a whitening filter. It is named a &#8217;floor&#8217; because the Xiph.Org reference encoder has
Chris@1 432 historically used it as a unit-baseline for spectral resolution.
Chris@1 433 <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB
Chris@1 434 amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear
Chris@1 435 interpolated representation on a dB amplitude scale and linear frequency scale. The two floors
Chris@1 436 are semantically interchangeable in encoding/decoding. However, floor type 1 provides more
Chris@1 437 stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and
Chris@1 438 high bitrate modes. Floor 1 is also considerably less expensive to decode than floor
Chris@1 439 0.
Chris@1 440 <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis
Chris@1 441 encoder past Xiph.Org&#8217;s own beta 4 makes use of floor 0.
Chris@1 442 <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy
Chris@1 443 coding to save space. For this reason, a floor configuration generally refers to multiple
Chris@1 444 codebooks in the codebook component list. Entropy coding is thus provided as an
Chris@1 445 abstraction, and each floor instance may choose from any and all available codebooks when
Chris@1 446 coding/decoding.
Chris@1 447 <!--l. 230--><p class="noindent" >
Chris@1 448 <h5 class="subsubsectionHead"><span class="titlemark">1.2.5. </span> <a
Chris@1 449 id="x1-160001.2.5"></a>Residue</h5>
Chris@1 450 <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been
Chris@1 451 subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector
Chris@1 452 quantization according to one of three specific packing/coding algorithms numbered
Chris@1 453 0 through 2. The packing algorithm details are configured by residue instance. As
Chris@1 454 with the floor components, the final VQ/entropy encoding is provided by external
Chris@1 455 codebook instances and each residue instance may choose from any and all available
Chris@1 456 codebooks.
Chris@1 457 <!--l. 241--><p class="noindent" >
Chris@1 458
Chris@1 459
Chris@1 460
Chris@1 461 <h5 class="subsubsectionHead"><span class="titlemark">1.2.6. </span> <a
Chris@1 462 id="x1-170001.2.6"></a>Codebooks</h5>
Chris@1 463 <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use
Chris@1 464 the entropy-decoded integer value as an offset into an index of output value vectors, returning
Chris@1 465 the indicated vector of values.
Chris@1 466 <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree
Chris@1 467 representation. This tree is tightly packed using one of several methods, depending on whether
Chris@1 468 codeword lengths are ordered or unordered, or the tree is sparse.
Chris@1 469 <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly,
Chris@1 470 the vector index is encoded as a single list of values of possible values that are then permuted
Chris@1 471 into a list of n-dimensional rows (lattice VQ).
Chris@1 472 <!--l. 260--><p class="noindent" >
Chris@1 473 <h4 class="subsectionHead"><span class="titlemark">1.3. </span> <a
Chris@1 474 id="x1-180001.3"></a>High-level Decode Process</h4>
Chris@1 475 <!--l. 262--><p class="noindent" >
Chris@1 476 <h5 class="subsubsectionHead"><span class="titlemark">1.3.1. </span> <a
Chris@1 477 id="x1-190001.3.1"></a>Decode Setup</h5>
Chris@1 478 <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the
Chris@1 479 stream to be decoded. Vorbis uses three header packets; all are required, in-order, by
Chris@1 480 this specification. Once set up, decode may begin at any audio packet belonging to
Chris@1 481 the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio
Chris@1 482 packets.
Chris@1 483 <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup
Chris@1 484 header.
Chris@1 485 <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 486 id="x1-200001.3.1"></a><span
Chris@1 487 class="cmbx-12">Identification Header</span></span>
Chris@1 488 The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio
Chris@1 489 characteristics of the stream such as sample rate and number of channels.
Chris@1 490
Chris@1 491
Chris@1 492
Chris@1 493 <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 494 id="x1-210001.3.1"></a><span
Chris@1 495 class="cmbx-12">Comment Header</span></span>
Chris@1 496 The comment header includes user text comments (&#8220;tags&#8221;) and a vendor string for the
Chris@1 497 application/library that produced the bitstream. The encoding and proper use of the comment
Chris@1 498 header is described in <a
Chris@1 499 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a
Chris@1 500 href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
Chris@1 501 <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 502 id="x1-220001.3.1"></a><span
Chris@1 503 class="cmbx-12">Setup Header</span></span>
Chris@1 504 The setup header includes extensive CODEC setup information as well as the complete VQ and
Chris@1 505 Huffman codebooks needed for decode.
Chris@1 506 <!--l. 289--><p class="noindent" >
Chris@1 507 <h5 class="subsubsectionHead"><span class="titlemark">1.3.2. </span> <a
Chris@1 508 id="x1-230001.3.2"></a>Decode Procedure</h5>
Chris@1 509 <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same.
Chris@1 510 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 511 1. </dt><dd
Chris@1 512 class="enumerate-enumitem">decode packet type flag
Chris@1 513 </dd><dt class="enumerate-enumitem">
Chris@1 514 2. </dt><dd
Chris@1 515 class="enumerate-enumitem">decode mode number
Chris@1 516 </dd><dt class="enumerate-enumitem">
Chris@1 517 3. </dt><dd
Chris@1 518 class="enumerate-enumitem">decode window shape (long windows only)
Chris@1 519 </dd><dt class="enumerate-enumitem">
Chris@1 520 4. </dt><dd
Chris@1 521 class="enumerate-enumitem">decode floor
Chris@1 522 </dd><dt class="enumerate-enumitem">
Chris@1 523 5. </dt><dd
Chris@1 524 class="enumerate-enumitem">decode residue into residue vectors
Chris@1 525 </dd><dt class="enumerate-enumitem">
Chris@1 526 6. </dt><dd
Chris@1 527 class="enumerate-enumitem">inverse channel coupling of residue vectors
Chris@1 528 </dd><dt class="enumerate-enumitem">
Chris@1 529 7. </dt><dd
Chris@1 530 class="enumerate-enumitem">generate floor curve from decoded floor data
Chris@1 531 </dd><dt class="enumerate-enumitem">
Chris@1 532 8. </dt><dd
Chris@1 533 class="enumerate-enumitem">compute dot product of floor and residue, producing audio spectrum vector
Chris@1 534 </dd><dt class="enumerate-enumitem">
Chris@1 535 9. </dt><dd
Chris@1 536 class="enumerate-enumitem">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis
Chris@1 537 I
Chris@1 538
Chris@1 539
Chris@1 540
Chris@1 541 </dd><dt class="enumerate-enumitem">
Chris@1 542 10. </dt><dd
Chris@1 543 class="enumerate-enumitem">overlap/add left-hand output of transform with right-hand output of previous frame
Chris@1 544 </dd><dt class="enumerate-enumitem">
Chris@1 545 11. </dt><dd
Chris@1 546 class="enumerate-enumitem">store right hand-data from transform of current frame for future lapping
Chris@1 547 </dd><dt class="enumerate-enumitem">
Chris@1 548 12. </dt><dd
Chris@1 549 class="enumerate-enumitem">if not first frame, return results of overlap/add as audio result of current frame</dd></dl>
Chris@1 550 <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can
Chris@1 551 take advantage of symmetries in the MDCT to store the right-hand transform data of a partial
Chris@1 552 MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before
Chris@1 553 overlap/add with the next frame. This optimization produces entirely equivalent output and is
Chris@1 554 naturally perfectly legal. The decoder must be <span
Chris@1 555 class="cmti-12">entirely mathematically equivalent </span>to the
Chris@1 556 specification, it need not be a literal semantic implementation.
Chris@1 557 <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 558 id="x1-240001.3.2"></a><span
Chris@1 559 class="cmbx-12">Packet type decode</span></span>
Chris@1 560 Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis
Chris@1 561 headers described above. The fourth packet type marks an audio packet. All other packet types
Chris@1 562 are reserved; packets marked with a reserved type should be ignored.
Chris@1 563 <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
Chris@1 564 audio packet decode is to read and verify the packet type; <span
Chris@1 565 class="cmti-12">a non-audio packet when audio is</span>
Chris@1 566 <span
Chris@1 567 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
Chris@1 568 <span
Chris@1 569 class="cmti-12">packet and not attempt decoding it to audio</span>.
Chris@1 570 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 571 id="x1-250001.3.2"></a><span
Chris@1 572 class="cmbx-12">Mode decode</span></span>
Chris@1 573 Vorbis allows an encoder to set up multiple, numbered packet &#8217;modes&#8217;, as described earlier, all of
Chris@1 574 which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct
Chris@1 575 offset into the mode instance index.
Chris@1 576 <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 577 id="x1-260001.3.2"></a><span
Chris@1 578 class="cmbx-12">Window shape decode (long windows only)</span></span>
Chris@1 579 Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I,
Chris@1 580 legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis
Chris@1 581 handles channels as independent vectors and these frame sizes are in samples per
Chris@1 582 channel.
Chris@1 583
Chris@1 584
Chris@1 585
Chris@1 586 <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next,
Chris@1 587 avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed
Chris@1 588 according to MDCT requirements, overlapped 50% with the output of the previous frame and
Chris@1 589 added. The window shape assures seamless reconstruction.
Chris@1 590 <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows:
Chris@1 591 <div class="center"
Chris@1 592 >
Chris@1 593 <!--l. 356--><p class="noindent" >
Chris@1 594
Chris@1 595 <!--l. 357--><p class="noindent" ><img
Chris@1 596 src="window1.png" alt="PIC"
Chris@1 597 >
Chris@1 598 <br /> <div class="caption"
Chris@1 599 ><span class="id">Figure&#x00A0;2: </span><span
Chris@1 600 class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 -->
Chris@1 601 </div>
Chris@1 602 <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
Chris@1 603 <div class="center"
Chris@1 604 >
Chris@1 605 <!--l. 364--><p class="noindent" >
Chris@1 606
Chris@1 607 <!--l. 365--><p class="noindent" ><img
Chris@1 608 src="window2.png" alt="PIC"
Chris@1 609 >
Chris@1 610 <br /> <div class="caption"
Chris@1 611 ><span class="id">Figure&#x00A0;3: </span><span
Chris@1 612 class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 -->
Chris@1 613 </div>
Chris@1 614 <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
Chris@1 615 seamless lapping as above. It is possible to correctly infer window shape to be applied to the
Chris@1 616 current window from knowing the sizes of the current, previous and next window. It is legal for a
Chris@1 617 decoder to use this method. However, in the case of a long window (short windows require no
Chris@1 618 modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although
Chris@1 619 not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to
Chris@1 620 the point of lapping entirely independently of any other packet, allowing easier abstraction of
Chris@1 621 decode layers as well as allowing a greater level of easy parallelism in encode and
Chris@1 622 decode.
Chris@1 623 <!--l. 382--><p class="noindent" >A description of valid window functions for use with an inverse MDCT can be found in <span class="cite">[<a
Chris@1 624 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
Chris@1 625 Vorbis windows all use the slope function
Chris@1 626 <center class="math-display" >
Chris@1 627 <img
Chris@1 628 src="Vorbis_I_spec0x.png" alt="y = sin (.5 &lowast; &pi; sin2((x + .5)&#x2215;n &lowast; &pi;)).
Chris@1 629
Chris@1 630
Chris@1 631
Chris@1 632 " class="math-display" ></center>
Chris@1 633 <!--l. 385--><p class="nopar" >
Chris@1 634 <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 635 id="x1-270001.3.2"></a><span
Chris@1 636 class="cmbx-12">floor decode</span></span>
Chris@1 637 Each floor is encoded/decoded in channel order, however each floor belongs to a &#8217;submap&#8217; that
Chris@1 638 specifies which floor configuration to use. All floors are decoded before residue decode
Chris@1 639 begins.
Chris@1 640 <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 641 id="x1-280001.3.2"></a><span
Chris@1 642 class="cmbx-12">residue decode</span></span>
Chris@1 643 Although the number of residue vectors equals the number of channels, channel coupling may
Chris@1 644 mean that the raw residue vectors extracted during decode do not map directly to specific
Chris@1 645 channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or
Chris@1 646 angle. The coupling relationships are described in the codec setup and may differ from frame to
Chris@1 647 frame, due to different mode numbers.
Chris@1 648 <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from
Chris@1 649 submap 0 through n-1. This differs from floors which are coded using a configuration provided by
Chris@1 650 submap number, but are coded individually in channel order.
Chris@1 651 <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 652 id="x1-290001.3.2"></a><span
Chris@1 653 class="cmbx-12">inverse channel coupling</span></span>
Chris@1 654 A detailed discussion of stereo in the Vorbis codec can be found in the document
Chris@1 655 <a
Chris@1 656 href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo
Chris@1 657 coupling, but the stereo document also gives a good overview of the generic coupling
Chris@1 658 mechanism.
Chris@1 659 <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a
Chris@1 660 pair at a time in the order and using the vectors specified in the current mapping
Chris@1 661 configuration. The decoupling operation is the same for all pairs, converting square polar
Chris@1 662 representation (where one vector is magnitude and the second angle) back to Cartesian
Chris@1 663 representation.
Chris@1 664 <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors
Chris@1 665 represent the fine spectral detail of each output channel.
Chris@1 666
Chris@1 667
Chris@1 668
Chris@1 669 <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 670 id="x1-300001.3.2"></a><span
Chris@1 671 class="cmbx-12">generate floor curve</span></span>
Chris@1 672 The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to
Chris@1 673 generate the output curve when the floor data is decoded from the raw packet, or it
Chris@1 674 can be generated after inverse coupling and applied to the spectral residue directly,
Chris@1 675 combining generation and the dot product into one step and eliminating some working
Chris@1 676 space.
Chris@1 677 <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied
Chris@1 678 (dot product) by the linear-range, linear-domain spectral residue.
Chris@1 679 <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 680 id="x1-310001.3.2"></a><span
Chris@1 681 class="cmbx-12">compute floor/residue dot product</span></span>
Chris@1 682 This step is straightforward; for each output channel, the decoder multiplies the floor curve and
Chris@1 683 residue vectors element by element, producing the finished audio spectrum of each
Chris@1 684 channel.
Chris@1 685 <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
Chris@1 686 implementation might be to assume that a 32 bit fixed-point representation for floor and
Chris@1 687 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
Chris@1 688 in all cases because it happens to mostly work with the current Xiph.Org reference
Chris@1 689 encoder.
Chris@1 690 <!--l. 462--><p class="noindent" >However, floor vector values can span <span
Chris@1 691 class="cmsy-10x-x-120">&sim;</span>140dB (<span
Chris@1 692 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
Chris@1 693 vector should represent a minimum of 120dB (<span
Chris@1 694 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
Chris@1 695 bit PCM device. For the residue vector to represent full scale if the floor is nailed
Chris@1 696 to <span
Chris@1 697 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
Chris@1 698 full scale if the floor is nailed at 0dB, it must be able to represent <span
Chris@1 699 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
Chris@1 700 Thus, in order to handle full range dynamics, a residue vector may span <span
Chris@1 701 class="cmsy-10x-x-120">&minus;</span>140dB to
Chris@1 702 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
Chris@1 703 residue vector must be able to represent a 48 bit range and the dot product must
Chris@1 704 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
Chris@1 705 achieved using large (64 bit or larger) integers, or implementing a movable binary point
Chris@1 706 representation.
Chris@1 707 <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 708 id="x1-320001.3.2"></a><span
Chris@1 709 class="cmbx-12">inverse monolithic transform (MDCT)</span></span>
Chris@1 710 The audio spectrum is converted back into time domain PCM audio via an inverse Modified
Chris@1 711 Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in
Chris@1 712 <span class="cite">[<a
Chris@1 713 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
Chris@1 714 <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be
Chris@1 715
Chris@1 716
Chris@1 717
Chris@1 718 lapped with surrounding frames using an appropriate window (such as the Vorbis window) before
Chris@1 719 the MDCT can be considered orthogonal.
Chris@1 720 <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 721 id="x1-330001.3.2"></a><span
Chris@1 722 class="cmbx-12">overlap/add data</span></span>
Chris@1 723 Windowed MDCT output is overlapped and added with the right hand data of the previous
Chris@1 724 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
Chris@1 725 current window (as illustrated in the window overlap diagram). At this point, the audio data
Chris@1 726 between the center of the previous frame and the center of the current frame is now finished and
Chris@1 727 ready to be returned.
Chris@1 728 <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 729 id="x1-340001.3.2"></a><span
Chris@1 730 class="cmbx-12">cache right hand data</span></span>
Chris@1 731 The decoder must cache the right hand portion of the current frame to be lapped with the left
Chris@1 732 hand portion of the next frame.
Chris@1 733 <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 734 id="x1-350001.3.2"></a><span
Chris@1 735 class="cmbx-12">return finished audio data</span></span>
Chris@1 736 The overlapped portion produced from overlapping the previous and current frame data
Chris@1 737 is finished data to be returned by the decoder. This data spans from the center of
Chris@1 738 the previous window to the center of the current window. In the case of same-sized
Chris@1 739 windows, the amount of data to return is one-half block consisting of and only of the
Chris@1 740 overlapped portions. When overlapping a short and long window, much of the returned
Chris@1 741 range is not actually overlap. This does not damage transform orthogonality. Pay
Chris@1 742 attention however to returning the correct data range; the amount of data to be returned
Chris@1 743 is:
Chris@1 744 <!--l. 519--><p class="noindent" >
Chris@1 745 <div class="fancyvrb" id="fancyvrb1">
Chris@1 746 <a
Chris@1 747 id="x1-35002r1"></a><span
Chris@1 748 class="cmr-6">1</span><span
Chris@1 749 class="cmtt-8">&#x00A0;</span><span
Chris@1 750 class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
Chris@1 751 </div>
Chris@1 752 <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
Chris@1 753 <!--l. 526--><p class="noindent" >Data is not returned from the first frame; it must be used to &#8217;prime&#8217; the decode engine. The
Chris@1 754 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
Chris@1 755 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
Chris@1 756
Chris@1 757
Chris@1 758
Chris@1 759
Chris@1 760
Chris@1 761
Chris@1 762 <h3 class="sectionHead"><span class="titlemark">2. </span> <a
Chris@1 763 id="x1-360002"></a>Bitpacking Convention</h3>
Chris@1 764 <!--l. 6--><p class="noindent" >
Chris@1 765 <h4 class="subsectionHead"><span class="titlemark">2.1. </span> <a
Chris@1 766 id="x1-370002.1"></a>Overview</h4>
Chris@1 767 <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
Chris@1 768 integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
Chris@1 769 encoder and then read one-by-one in the same monotonically increasing order by the decoder.
Chris@1 770 Most current binary storage arrangements group bits into a native word size of eight bits
Chris@1 771 (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
Chris@1 772 bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
Chris@1 773 representation in fixed-width words.
Chris@1 774 <!--l. 19--><p class="noindent" >
Chris@1 775 <h5 class="subsubsectionHead"><span class="titlemark">2.1.1. </span> <a
Chris@1 776 id="x1-380002.1.1"></a>octets, bytes and words</h5>
Chris@1 777 <!--l. 21--><p class="noindent" >In most contemporary architectures, a &#8217;byte&#8217; is synonymous with an &#8217;octet&#8217;, that is, eight bits.
Chris@1 778 This has not always been the case; seven, ten, eleven and sixteen bit &#8217;bytes&#8217; have been used.
Chris@1 779 For purposes of the bitpacking convention, a byte implies the native, smallest integer
Chris@1 780 storage representation offered by a platform. On modern platforms, this is generally
Chris@1 781 assumed to be eight bits (not necessarily because of the processor but because of the
Chris@1 782 filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
Chris@1 783 atom of storage). A &#8217;word&#8217; is an integer size that is a grouped multiple of this smallest
Chris@1 784 size.
Chris@1 785 <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a &#8217;byte&#8217; to be an octet (eight bits) and a word
Chris@1 786 to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
Chris@1 787 bitpacking convention is still well defined for any native byte size; Vorbis uses the native
Chris@1 788 bit-width of a given storage system. This document assumes that a byte is one octet for purposes
Chris@1 789 of example.
Chris@1 790 <!--l. 39--><p class="noindent" >
Chris@1 791
Chris@1 792
Chris@1 793
Chris@1 794 <h5 class="subsubsectionHead"><span class="titlemark">2.1.2. </span> <a
Chris@1 795 id="x1-390002.1.2"></a>bit order</h5>
Chris@1 796 <!--l. 41--><p class="noindent" >A byte has a well-defined &#8217;least significant&#8217; bit (LSb), which is the only bit set when the byte is
Chris@1 797 storing the two&#8217;s complement integer value +1. A byte&#8217;s &#8217;most significant&#8217; bit (MSb) is at the
Chris@1 798 opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span
Chris@1 799 class="cmmi-12">n </span>(<span
Chris@1 800 class="cmmi-12">n </span>= 7 in an
Chris@1 801 octet) for the MSb.
Chris@1 802 <!--l. 50--><p class="noindent" >
Chris@1 803 <h5 class="subsubsectionHead"><span class="titlemark">2.1.3. </span> <a
Chris@1 804 id="x1-400002.1.3"></a>byte order</h5>
Chris@1 805 <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
Chris@1 806 common ones are 3-2-1-0 (&#8217;big endian&#8217; or &#8217;most significant byte first&#8217; in which the
Chris@1 807 highest-valued byte comes first), 0-1-2-3 (&#8217;little endian&#8217; or &#8217;least significant byte first&#8217; in
Chris@1 808 which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (&#8217;mixed
Chris@1 809 endian&#8217;).
Chris@1 810 <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
Chris@1 811 word, level, thus host word ordering is of a concern only during optimization when writing high
Chris@1 812 performance code that operates on a word of storage at a time rather than by byte.
Chris@1 813 Logically, bytes are always coded and decoded in order from byte zero through byte
Chris@1 814 <span
Chris@1 815 class="cmmi-12">n</span>.
Chris@1 816 <!--l. 68--><p class="noindent" >
Chris@1 817 <h5 class="subsubsectionHead"><span class="titlemark">2.1.4. </span> <a
Chris@1 818 id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
Chris@1 819 <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
Chris@1 820 wide, into packets. These integer fields are not aligned to the boundaries of the byte
Chris@1 821 representation; the next field is written at the bit position at which the previous field
Chris@1 822 ends.
Chris@1 823 <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
Chris@1 824 bitstream first, followed by next least significant bit, etc, until the requested number of bits
Chris@1 825 have been coded. When packing the bits into bytes, the encoder begins by placing
Chris@1 826 the LSb of the integer to be written into the least significant unused bit position of
Chris@1 827 the destination byte, followed by the next-least significant bit of the source integer
Chris@1 828 and so on up to the requested number of bits. When all bits of the destination byte
Chris@1 829 have been filled, encoding continues by zeroing all bits of the next byte and writing
Chris@1 830 the next bit into the bit position 0 of that byte. Decoding follows the same process
Chris@1 831
Chris@1 832
Chris@1 833
Chris@1 834 as encoding, but by reading bits from the byte stream and reassembling them into
Chris@1 835 integers.
Chris@1 836 <!--l. 90--><p class="noindent" >
Chris@1 837 <h5 class="subsubsectionHead"><span class="titlemark">2.1.5. </span> <a
Chris@1 838 id="x1-420002.1.5"></a>signedness</h5>
Chris@1 839 <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
Chris@1 840 given decode context. That is, the three bit binary pattern &#8217;b111&#8217; can be taken to represent
Chris@1 841 either &#8217;seven&#8217; as an unsigned integer, or &#8217;-1&#8217; as a signed, two&#8217;s complement integer. The
Chris@1 842 encoder and decoder are responsible for knowing if fields are to be treated as signed or
Chris@1 843 unsigned.
Chris@1 844 <!--l. 101--><p class="noindent" >
Chris@1 845 <h5 class="subsubsectionHead"><span class="titlemark">2.1.6. </span> <a
Chris@1 846 id="x1-430002.1.6"></a>coding example</h5>
Chris@1 847 <!--l. 103--><p class="noindent" >Code the 4 bit integer value &#8217;12&#8217; [b1100] into an empty bytestream. Bytestream result:
Chris@1 848 <!--l. 106--><p class="noindent" >
Chris@1 849 <div class="fancyvrb" id="fancyvrb2">
Chris@1 850 <a
Chris@1 851 id="x1-43002r1"></a><span
Chris@1 852 class="cmr-6">1</span><span
Chris@1 853 class="cmtt-8">&#x00A0;</span><span
Chris@1 854 class="cmtt-8">&#x00A0;</span><span
Chris@1 855 class="cmtt-8">&#x00A0;</span><span
Chris@1 856 class="cmtt-8">&#x00A0;</span><span
Chris@1 857 class="cmtt-8">&#x00A0;</span><span
Chris@1 858 class="cmtt-8">&#x00A0;</span><span
Chris@1 859 class="cmtt-8">&#x00A0;</span><span
Chris@1 860 class="cmtt-8">&#x00A0;</span><span
Chris@1 861 class="cmtt-8">&#x00A0;</span><span
Chris@1 862 class="cmtt-8">&#x00A0;</span><span
Chris@1 863 class="cmtt-8">&#x00A0;</span><span
Chris@1 864 class="cmtt-8">&#x00A0;</span><span
Chris@1 865 class="cmtt-8">&#x00A0;</span><span
Chris@1 866 class="cmtt-8">&#x00A0;</span><span
Chris@1 867 class="cmtt-8">&#x00A0;</span><span
Chris@1 868 class="cmtt-8">&#x00A0;|</span>
Chris@1 869 <br class="fancyvrb" /><a
Chris@1 870 id="x1-43004r2"></a><span
Chris@1 871 class="cmr-6">2</span><span
Chris@1 872 class="cmtt-8">&#x00A0;</span><span
Chris@1 873 class="cmtt-8">&#x00A0;</span><span
Chris@1 874 class="cmtt-8">&#x00A0;</span><span
Chris@1 875 class="cmtt-8">&#x00A0;</span><span
Chris@1 876 class="cmtt-8">&#x00A0;</span><span
Chris@1 877 class="cmtt-8">&#x00A0;</span><span
Chris@1 878 class="cmtt-8">&#x00A0;</span><span
Chris@1 879 class="cmtt-8">&#x00A0;</span><span
Chris@1 880 class="cmtt-8">&#x00A0;</span><span
Chris@1 881 class="cmtt-8">&#x00A0;</span><span
Chris@1 882 class="cmtt-8">&#x00A0;</span><span
Chris@1 883 class="cmtt-8">&#x00A0;</span><span
Chris@1 884 class="cmtt-8">&#x00A0;</span><span
Chris@1 885 class="cmtt-8">&#x00A0;</span><span
Chris@1 886 class="cmtt-8">&#x00A0;</span><span
Chris@1 887 class="cmtt-8">&#x00A0;V</span>
Chris@1 888 <br class="fancyvrb" /><a
Chris@1 889 id="x1-43006r3"></a><span
Chris@1 890 class="cmr-6">3</span><span
Chris@1 891 class="cmtt-8">&#x00A0;</span><span
Chris@1 892 class="cmtt-8">&#x00A0;</span>
Chris@1 893 <br class="fancyvrb" /><a
Chris@1 894 id="x1-43008r4"></a><span
Chris@1 895 class="cmr-6">4</span><span
Chris@1 896 class="cmtt-8">&#x00A0;</span><span
Chris@1 897 class="cmtt-8">&#x00A0;</span><span
Chris@1 898 class="cmtt-8">&#x00A0;</span><span
Chris@1 899 class="cmtt-8">&#x00A0;</span><span
Chris@1 900 class="cmtt-8">&#x00A0;</span><span
Chris@1 901 class="cmtt-8">&#x00A0;</span><span
Chris@1 902 class="cmtt-8">&#x00A0;</span><span
Chris@1 903 class="cmtt-8">&#x00A0;</span><span
Chris@1 904 class="cmtt-8">&#x00A0;</span><span
Chris@1 905 class="cmtt-8">&#x00A0;7</span><span
Chris@1 906 class="cmtt-8">&#x00A0;6</span><span
Chris@1 907 class="cmtt-8">&#x00A0;5</span><span
Chris@1 908 class="cmtt-8">&#x00A0;4</span><span
Chris@1 909 class="cmtt-8">&#x00A0;3</span><span
Chris@1 910 class="cmtt-8">&#x00A0;2</span><span
Chris@1 911 class="cmtt-8">&#x00A0;1</span><span
Chris@1 912 class="cmtt-8">&#x00A0;0</span>
Chris@1 913 <br class="fancyvrb" /><a
Chris@1 914 id="x1-43010r5"></a><span
Chris@1 915 class="cmr-6">5</span><span
Chris@1 916 class="cmtt-8">&#x00A0;</span><span
Chris@1 917 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 918 class="cmtt-8">&#x00A0;0</span><span
Chris@1 919 class="cmtt-8">&#x00A0;[0</span><span
Chris@1 920 class="cmtt-8">&#x00A0;0</span><span
Chris@1 921 class="cmtt-8">&#x00A0;0</span><span
Chris@1 922 class="cmtt-8">&#x00A0;0</span><span
Chris@1 923 class="cmtt-8">&#x00A0;1</span><span
Chris@1 924 class="cmtt-8">&#x00A0;1</span><span
Chris@1 925 class="cmtt-8">&#x00A0;0</span><span
Chris@1 926 class="cmtt-8">&#x00A0;0]</span><span
Chris@1 927 class="cmtt-8">&#x00A0;</span><span
Chris@1 928 class="cmtt-8">&#x00A0;&#x003C;-</span>
Chris@1 929 <br class="fancyvrb" /><a
Chris@1 930 id="x1-43012r6"></a><span
Chris@1 931 class="cmr-6">6</span><span
Chris@1 932 class="cmtt-8">&#x00A0;</span><span
Chris@1 933 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 934 class="cmtt-8">&#x00A0;1</span><span
Chris@1 935 class="cmtt-8">&#x00A0;[</span><span
Chris@1 936 class="cmtt-8">&#x00A0;</span><span
Chris@1 937 class="cmtt-8">&#x00A0;</span><span
Chris@1 938 class="cmtt-8">&#x00A0;</span><span
Chris@1 939 class="cmtt-8">&#x00A0;</span><span
Chris@1 940 class="cmtt-8">&#x00A0;</span><span
Chris@1 941 class="cmtt-8">&#x00A0;</span><span
Chris@1 942 class="cmtt-8">&#x00A0;</span><span
Chris@1 943 class="cmtt-8">&#x00A0;</span><span
Chris@1 944 class="cmtt-8">&#x00A0;</span><span
Chris@1 945 class="cmtt-8">&#x00A0;</span><span
Chris@1 946 class="cmtt-8">&#x00A0;</span><span
Chris@1 947 class="cmtt-8">&#x00A0;</span><span
Chris@1 948 class="cmtt-8">&#x00A0;</span><span
Chris@1 949 class="cmtt-8">&#x00A0;</span><span
Chris@1 950 class="cmtt-8">&#x00A0;]</span>
Chris@1 951 <br class="fancyvrb" /><a
Chris@1 952 id="x1-43014r7"></a><span
Chris@1 953 class="cmr-6">7</span><span
Chris@1 954 class="cmtt-8">&#x00A0;</span><span
Chris@1 955 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 956 class="cmtt-8">&#x00A0;2</span><span
Chris@1 957 class="cmtt-8">&#x00A0;[</span><span
Chris@1 958 class="cmtt-8">&#x00A0;</span><span
Chris@1 959 class="cmtt-8">&#x00A0;</span><span
Chris@1 960 class="cmtt-8">&#x00A0;</span><span
Chris@1 961 class="cmtt-8">&#x00A0;</span><span
Chris@1 962 class="cmtt-8">&#x00A0;</span><span
Chris@1 963 class="cmtt-8">&#x00A0;</span><span
Chris@1 964 class="cmtt-8">&#x00A0;</span><span
Chris@1 965 class="cmtt-8">&#x00A0;</span><span
Chris@1 966 class="cmtt-8">&#x00A0;</span><span
Chris@1 967 class="cmtt-8">&#x00A0;</span><span
Chris@1 968 class="cmtt-8">&#x00A0;</span><span
Chris@1 969 class="cmtt-8">&#x00A0;</span><span
Chris@1 970 class="cmtt-8">&#x00A0;</span><span
Chris@1 971 class="cmtt-8">&#x00A0;</span><span
Chris@1 972 class="cmtt-8">&#x00A0;]</span>
Chris@1 973 <br class="fancyvrb" /><a
Chris@1 974 id="x1-43016r8"></a><span
Chris@1 975 class="cmr-6">8</span><span
Chris@1 976 class="cmtt-8">&#x00A0;</span><span
Chris@1 977 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 978 class="cmtt-8">&#x00A0;3</span><span
Chris@1 979 class="cmtt-8">&#x00A0;[</span><span
Chris@1 980 class="cmtt-8">&#x00A0;</span><span
Chris@1 981 class="cmtt-8">&#x00A0;</span><span
Chris@1 982 class="cmtt-8">&#x00A0;</span><span
Chris@1 983 class="cmtt-8">&#x00A0;</span><span
Chris@1 984 class="cmtt-8">&#x00A0;</span><span
Chris@1 985 class="cmtt-8">&#x00A0;</span><span
Chris@1 986 class="cmtt-8">&#x00A0;</span><span
Chris@1 987 class="cmtt-8">&#x00A0;</span><span
Chris@1 988 class="cmtt-8">&#x00A0;</span><span
Chris@1 989 class="cmtt-8">&#x00A0;</span><span
Chris@1 990 class="cmtt-8">&#x00A0;</span><span
Chris@1 991 class="cmtt-8">&#x00A0;</span><span
Chris@1 992 class="cmtt-8">&#x00A0;</span><span
Chris@1 993 class="cmtt-8">&#x00A0;</span><span
Chris@1 994 class="cmtt-8">&#x00A0;]</span>
Chris@1 995 <br class="fancyvrb" /><a
Chris@1 996 id="x1-43018r9"></a><span
Chris@1 997 class="cmr-6">9</span><span
Chris@1 998 class="cmtt-8">&#x00A0;</span><span
Chris@1 999 class="cmtt-8">&#x00A0;</span><span
Chris@1 1000 class="cmtt-8">&#x00A0;</span><span
Chris@1 1001 class="cmtt-8">&#x00A0;</span><span
Chris@1 1002 class="cmtt-8">&#x00A0;</span><span
Chris@1 1003 class="cmtt-8">&#x00A0;</span><span
Chris@1 1004 class="cmtt-8">&#x00A0;</span><span
Chris@1 1005 class="cmtt-8">&#x00A0;</span><span
Chris@1 1006 class="cmtt-8">&#x00A0;</span><span
Chris@1 1007 class="cmtt-8">&#x00A0;</span><span
Chris@1 1008 class="cmtt-8">&#x00A0;</span><span
Chris@1 1009 class="cmtt-8">&#x00A0;</span><span
Chris@1 1010 class="cmtt-8">&#x00A0;</span><span
Chris@1 1011 class="cmtt-8">&#x00A0;</span><span
Chris@1 1012 class="cmtt-8">&#x00A0;...</span>
Chris@1 1013 <br class="fancyvrb" /><a
Chris@1 1014 id="x1-43020r10"></a><span
Chris@1 1015 class="cmr-6">10</span><span
Chris@1 1016 class="cmtt-8">&#x00A0;</span><span
Chris@1 1017 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1018 class="cmtt-8">&#x00A0;n</span><span
Chris@1 1019 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1020 class="cmtt-8">&#x00A0;</span><span
Chris@1 1021 class="cmtt-8">&#x00A0;</span><span
Chris@1 1022 class="cmtt-8">&#x00A0;</span><span
Chris@1 1023 class="cmtt-8">&#x00A0;</span><span
Chris@1 1024 class="cmtt-8">&#x00A0;</span><span
Chris@1 1025 class="cmtt-8">&#x00A0;</span><span
Chris@1 1026 class="cmtt-8">&#x00A0;</span><span
Chris@1 1027 class="cmtt-8">&#x00A0;</span><span
Chris@1 1028 class="cmtt-8">&#x00A0;</span><span
Chris@1 1029 class="cmtt-8">&#x00A0;</span><span
Chris@1 1030 class="cmtt-8">&#x00A0;</span><span
Chris@1 1031 class="cmtt-8">&#x00A0;</span><span
Chris@1 1032 class="cmtt-8">&#x00A0;</span><span
Chris@1 1033 class="cmtt-8">&#x00A0;</span><span
Chris@1 1034 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1035 class="cmtt-8">&#x00A0;</span><span
Chris@1 1036 class="cmtt-8">&#x00A0;bytestream</span><span
Chris@1 1037 class="cmtt-8">&#x00A0;length</span><span
Chris@1 1038 class="cmtt-8">&#x00A0;==</span><span
Chris@1 1039 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1040 class="cmtt-8">&#x00A0;byte</span>
Chris@1 1041 <br class="fancyvrb" /><a
Chris@1 1042 id="x1-43022r11"></a><span
Chris@1 1043 class="cmr-6">11</span><span
Chris@1 1044 class="cmtt-8">&#x00A0;</span><span
Chris@1 1045 class="cmtt-8">&#x00A0;</span>
Chris@1 1046 </div>
Chris@1 1047 <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value &#8217;-1&#8217; [b111]:
Chris@1 1048 <!--l. 123--><p class="noindent" >
Chris@1 1049 <div class="fancyvrb" id="fancyvrb3">
Chris@1 1050 <a
Chris@1 1051 id="x1-43024r1"></a><span
Chris@1 1052 class="cmr-6">1</span><span
Chris@1 1053 class="cmtt-8">&#x00A0;</span><span
Chris@1 1054 class="cmtt-8">&#x00A0;</span><span
Chris@1 1055 class="cmtt-8">&#x00A0;</span><span
Chris@1 1056 class="cmtt-8">&#x00A0;</span><span
Chris@1 1057 class="cmtt-8">&#x00A0;</span><span
Chris@1 1058 class="cmtt-8">&#x00A0;</span><span
Chris@1 1059 class="cmtt-8">&#x00A0;</span><span
Chris@1 1060 class="cmtt-8">&#x00A0;</span><span
Chris@1 1061 class="cmtt-8">&#x00A0;</span><span
Chris@1 1062 class="cmtt-8">&#x00A0;|</span>
Chris@1 1063 <br class="fancyvrb" /><a
Chris@1 1064 id="x1-43026r2"></a><span
Chris@1 1065 class="cmr-6">2</span><span
Chris@1 1066 class="cmtt-8">&#x00A0;</span><span
Chris@1 1067 class="cmtt-8">&#x00A0;</span><span
Chris@1 1068 class="cmtt-8">&#x00A0;</span><span
Chris@1 1069 class="cmtt-8">&#x00A0;</span><span
Chris@1 1070 class="cmtt-8">&#x00A0;</span><span
Chris@1 1071 class="cmtt-8">&#x00A0;</span><span
Chris@1 1072 class="cmtt-8">&#x00A0;</span><span
Chris@1 1073 class="cmtt-8">&#x00A0;</span><span
Chris@1 1074 class="cmtt-8">&#x00A0;</span><span
Chris@1 1075 class="cmtt-8">&#x00A0;V</span>
Chris@1 1076 <br class="fancyvrb" /><a
Chris@1 1077 id="x1-43028r3"></a><span
Chris@1 1078 class="cmr-6">3</span><span
Chris@1 1079 class="cmtt-8">&#x00A0;</span><span
Chris@1 1080 class="cmtt-8">&#x00A0;</span>
Chris@1 1081 <br class="fancyvrb" /><a
Chris@1 1082 id="x1-43030r4"></a><span
Chris@1 1083 class="cmr-6">4</span><span
Chris@1 1084 class="cmtt-8">&#x00A0;</span><span
Chris@1 1085 class="cmtt-8">&#x00A0;</span><span
Chris@1 1086 class="cmtt-8">&#x00A0;</span><span
Chris@1 1087 class="cmtt-8">&#x00A0;</span><span
Chris@1 1088 class="cmtt-8">&#x00A0;</span><span
Chris@1 1089 class="cmtt-8">&#x00A0;</span><span
Chris@1 1090 class="cmtt-8">&#x00A0;</span><span
Chris@1 1091 class="cmtt-8">&#x00A0;</span><span
Chris@1 1092 class="cmtt-8">&#x00A0;</span><span
Chris@1 1093 class="cmtt-8">&#x00A0;7</span><span
Chris@1 1094 class="cmtt-8">&#x00A0;6</span><span
Chris@1 1095 class="cmtt-8">&#x00A0;5</span><span
Chris@1 1096 class="cmtt-8">&#x00A0;4</span><span
Chris@1 1097 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1098 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1099 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1100 class="cmtt-8">&#x00A0;0</span>
Chris@1 1101 <br class="fancyvrb" /><a
Chris@1 1102 id="x1-43032r5"></a><span
Chris@1 1103 class="cmr-6">5</span><span
Chris@1 1104 class="cmtt-8">&#x00A0;</span><span
Chris@1 1105 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1106 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1107 class="cmtt-8">&#x00A0;[0</span><span
Chris@1 1108 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1109 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1110 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1111 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1112 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1113 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1114 class="cmtt-8">&#x00A0;0]</span><span
Chris@1 1115 class="cmtt-8">&#x00A0;</span><span
Chris@1 1116 class="cmtt-8">&#x00A0;&#x003C;-</span>
Chris@1 1117 <br class="fancyvrb" /><a
Chris@1 1118 id="x1-43034r6"></a><span
Chris@1 1119 class="cmr-6">6</span><span
Chris@1 1120 class="cmtt-8">&#x00A0;</span><span
Chris@1 1121 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1122 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1123 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1124 class="cmtt-8">&#x00A0;</span><span
Chris@1 1125 class="cmtt-8">&#x00A0;</span><span
Chris@1 1126 class="cmtt-8">&#x00A0;</span><span
Chris@1 1127 class="cmtt-8">&#x00A0;</span><span
Chris@1 1128 class="cmtt-8">&#x00A0;</span><span
Chris@1 1129 class="cmtt-8">&#x00A0;</span><span
Chris@1 1130 class="cmtt-8">&#x00A0;</span><span
Chris@1 1131 class="cmtt-8">&#x00A0;</span><span
Chris@1 1132 class="cmtt-8">&#x00A0;</span><span
Chris@1 1133 class="cmtt-8">&#x00A0;</span><span
Chris@1 1134 class="cmtt-8">&#x00A0;</span><span
Chris@1 1135 class="cmtt-8">&#x00A0;</span><span
Chris@1 1136 class="cmtt-8">&#x00A0;</span><span
Chris@1 1137 class="cmtt-8">&#x00A0;</span><span
Chris@1 1138 class="cmtt-8">&#x00A0;]</span>
Chris@1 1139
Chris@1 1140
Chris@1 1141
Chris@1 1142 <br class="fancyvrb" /><a
Chris@1 1143 id="x1-43036r7"></a><span
Chris@1 1144 class="cmr-6">7</span><span
Chris@1 1145 class="cmtt-8">&#x00A0;</span><span
Chris@1 1146 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1147 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1148 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1149 class="cmtt-8">&#x00A0;</span><span
Chris@1 1150 class="cmtt-8">&#x00A0;</span><span
Chris@1 1151 class="cmtt-8">&#x00A0;</span><span
Chris@1 1152 class="cmtt-8">&#x00A0;</span><span
Chris@1 1153 class="cmtt-8">&#x00A0;</span><span
Chris@1 1154 class="cmtt-8">&#x00A0;</span><span
Chris@1 1155 class="cmtt-8">&#x00A0;</span><span
Chris@1 1156 class="cmtt-8">&#x00A0;</span><span
Chris@1 1157 class="cmtt-8">&#x00A0;</span><span
Chris@1 1158 class="cmtt-8">&#x00A0;</span><span
Chris@1 1159 class="cmtt-8">&#x00A0;</span><span
Chris@1 1160 class="cmtt-8">&#x00A0;</span><span
Chris@1 1161 class="cmtt-8">&#x00A0;</span><span
Chris@1 1162 class="cmtt-8">&#x00A0;</span><span
Chris@1 1163 class="cmtt-8">&#x00A0;]</span>
Chris@1 1164 <br class="fancyvrb" /><a
Chris@1 1165 id="x1-43038r8"></a><span
Chris@1 1166 class="cmr-6">8</span><span
Chris@1 1167 class="cmtt-8">&#x00A0;</span><span
Chris@1 1168 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1169 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1170 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1171 class="cmtt-8">&#x00A0;</span><span
Chris@1 1172 class="cmtt-8">&#x00A0;</span><span
Chris@1 1173 class="cmtt-8">&#x00A0;</span><span
Chris@1 1174 class="cmtt-8">&#x00A0;</span><span
Chris@1 1175 class="cmtt-8">&#x00A0;</span><span
Chris@1 1176 class="cmtt-8">&#x00A0;</span><span
Chris@1 1177 class="cmtt-8">&#x00A0;</span><span
Chris@1 1178 class="cmtt-8">&#x00A0;</span><span
Chris@1 1179 class="cmtt-8">&#x00A0;</span><span
Chris@1 1180 class="cmtt-8">&#x00A0;</span><span
Chris@1 1181 class="cmtt-8">&#x00A0;</span><span
Chris@1 1182 class="cmtt-8">&#x00A0;</span><span
Chris@1 1183 class="cmtt-8">&#x00A0;</span><span
Chris@1 1184 class="cmtt-8">&#x00A0;</span><span
Chris@1 1185 class="cmtt-8">&#x00A0;]</span>
Chris@1 1186 <br class="fancyvrb" /><a
Chris@1 1187 id="x1-43040r9"></a><span
Chris@1 1188 class="cmr-6">9</span><span
Chris@1 1189 class="cmtt-8">&#x00A0;</span><span
Chris@1 1190 class="cmtt-8">&#x00A0;</span><span
Chris@1 1191 class="cmtt-8">&#x00A0;</span><span
Chris@1 1192 class="cmtt-8">&#x00A0;</span><span
Chris@1 1193 class="cmtt-8">&#x00A0;</span><span
Chris@1 1194 class="cmtt-8">&#x00A0;</span><span
Chris@1 1195 class="cmtt-8">&#x00A0;</span><span
Chris@1 1196 class="cmtt-8">&#x00A0;</span><span
Chris@1 1197 class="cmtt-8">&#x00A0;</span><span
Chris@1 1198 class="cmtt-8">&#x00A0;</span><span
Chris@1 1199 class="cmtt-8">&#x00A0;</span><span
Chris@1 1200 class="cmtt-8">&#x00A0;</span><span
Chris@1 1201 class="cmtt-8">&#x00A0;</span><span
Chris@1 1202 class="cmtt-8">&#x00A0;</span><span
Chris@1 1203 class="cmtt-8">&#x00A0;...</span>
Chris@1 1204 <br class="fancyvrb" /><a
Chris@1 1205 id="x1-43042r10"></a><span
Chris@1 1206 class="cmr-6">10</span><span
Chris@1 1207 class="cmtt-8">&#x00A0;</span><span
Chris@1 1208 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1209 class="cmtt-8">&#x00A0;n</span><span
Chris@1 1210 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1211 class="cmtt-8">&#x00A0;</span><span
Chris@1 1212 class="cmtt-8">&#x00A0;</span><span
Chris@1 1213 class="cmtt-8">&#x00A0;</span><span
Chris@1 1214 class="cmtt-8">&#x00A0;</span><span
Chris@1 1215 class="cmtt-8">&#x00A0;</span><span
Chris@1 1216 class="cmtt-8">&#x00A0;</span><span
Chris@1 1217 class="cmtt-8">&#x00A0;</span><span
Chris@1 1218 class="cmtt-8">&#x00A0;</span><span
Chris@1 1219 class="cmtt-8">&#x00A0;</span><span
Chris@1 1220 class="cmtt-8">&#x00A0;</span><span
Chris@1 1221 class="cmtt-8">&#x00A0;</span><span
Chris@1 1222 class="cmtt-8">&#x00A0;</span><span
Chris@1 1223 class="cmtt-8">&#x00A0;</span><span
Chris@1 1224 class="cmtt-8">&#x00A0;</span><span
Chris@1 1225 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1226 class="cmtt-8">&#x00A0;</span><span
Chris@1 1227 class="cmtt-8">&#x00A0;bytestream</span><span
Chris@1 1228 class="cmtt-8">&#x00A0;length</span><span
Chris@1 1229 class="cmtt-8">&#x00A0;==</span><span
Chris@1 1230 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1231 class="cmtt-8">&#x00A0;byte</span>
Chris@1 1232 </div>
Chris@1 1233 <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value &#8217;17&#8217; [b0010001]:
Chris@1 1234 <!--l. 139--><p class="noindent" >
Chris@1 1235 <div class="fancyvrb" id="fancyvrb4">
Chris@1 1236 <a
Chris@1 1237 id="x1-43044r1"></a><span
Chris@1 1238 class="cmr-6">1</span><span
Chris@1 1239 class="cmtt-8">&#x00A0;</span><span
Chris@1 1240 class="cmtt-8">&#x00A0;</span><span
Chris@1 1241 class="cmtt-8">&#x00A0;</span><span
Chris@1 1242 class="cmtt-8">&#x00A0;</span><span
Chris@1 1243 class="cmtt-8">&#x00A0;</span><span
Chris@1 1244 class="cmtt-8">&#x00A0;</span><span
Chris@1 1245 class="cmtt-8">&#x00A0;</span><span
Chris@1 1246 class="cmtt-8">&#x00A0;</span><span
Chris@1 1247 class="cmtt-8">&#x00A0;</span><span
Chris@1 1248 class="cmtt-8">&#x00A0;</span><span
Chris@1 1249 class="cmtt-8">&#x00A0;</span><span
Chris@1 1250 class="cmtt-8">&#x00A0;|</span>
Chris@1 1251 <br class="fancyvrb" /><a
Chris@1 1252 id="x1-43046r2"></a><span
Chris@1 1253 class="cmr-6">2</span><span
Chris@1 1254 class="cmtt-8">&#x00A0;</span><span
Chris@1 1255 class="cmtt-8">&#x00A0;</span><span
Chris@1 1256 class="cmtt-8">&#x00A0;</span><span
Chris@1 1257 class="cmtt-8">&#x00A0;</span><span
Chris@1 1258 class="cmtt-8">&#x00A0;</span><span
Chris@1 1259 class="cmtt-8">&#x00A0;</span><span
Chris@1 1260 class="cmtt-8">&#x00A0;</span><span
Chris@1 1261 class="cmtt-8">&#x00A0;</span><span
Chris@1 1262 class="cmtt-8">&#x00A0;</span><span
Chris@1 1263 class="cmtt-8">&#x00A0;</span><span
Chris@1 1264 class="cmtt-8">&#x00A0;</span><span
Chris@1 1265 class="cmtt-8">&#x00A0;V</span>
Chris@1 1266 <br class="fancyvrb" /><a
Chris@1 1267 id="x1-43048r3"></a><span
Chris@1 1268 class="cmr-6">3</span><span
Chris@1 1269 class="cmtt-8">&#x00A0;</span><span
Chris@1 1270 class="cmtt-8">&#x00A0;</span>
Chris@1 1271 <br class="fancyvrb" /><a
Chris@1 1272 id="x1-43050r4"></a><span
Chris@1 1273 class="cmr-6">4</span><span
Chris@1 1274 class="cmtt-8">&#x00A0;</span><span
Chris@1 1275 class="cmtt-8">&#x00A0;</span><span
Chris@1 1276 class="cmtt-8">&#x00A0;</span><span
Chris@1 1277 class="cmtt-8">&#x00A0;</span><span
Chris@1 1278 class="cmtt-8">&#x00A0;</span><span
Chris@1 1279 class="cmtt-8">&#x00A0;</span><span
Chris@1 1280 class="cmtt-8">&#x00A0;</span><span
Chris@1 1281 class="cmtt-8">&#x00A0;</span><span
Chris@1 1282 class="cmtt-8">&#x00A0;</span><span
Chris@1 1283 class="cmtt-8">&#x00A0;7</span><span
Chris@1 1284 class="cmtt-8">&#x00A0;6</span><span
Chris@1 1285 class="cmtt-8">&#x00A0;5</span><span
Chris@1 1286 class="cmtt-8">&#x00A0;4</span><span
Chris@1 1287 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1288 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1289 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1290 class="cmtt-8">&#x00A0;0</span>
Chris@1 1291 <br class="fancyvrb" /><a
Chris@1 1292 id="x1-43052r5"></a><span
Chris@1 1293 class="cmr-6">5</span><span
Chris@1 1294 class="cmtt-8">&#x00A0;</span><span
Chris@1 1295 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1296 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1297 class="cmtt-8">&#x00A0;[1</span><span
Chris@1 1298 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1299 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1300 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1301 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1302 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1303 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1304 class="cmtt-8">&#x00A0;0]</span>
Chris@1 1305 <br class="fancyvrb" /><a
Chris@1 1306 id="x1-43054r6"></a><span
Chris@1 1307 class="cmr-6">6</span><span
Chris@1 1308 class="cmtt-8">&#x00A0;</span><span
Chris@1 1309 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1310 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1311 class="cmtt-8">&#x00A0;[0</span><span
Chris@1 1312 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1313 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1314 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1315 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1316 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1317 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1318 class="cmtt-8">&#x00A0;0]</span><span
Chris@1 1319 class="cmtt-8">&#x00A0;</span><span
Chris@1 1320 class="cmtt-8">&#x00A0;&#x003C;-</span>
Chris@1 1321 <br class="fancyvrb" /><a
Chris@1 1322 id="x1-43056r7"></a><span
Chris@1 1323 class="cmr-6">7</span><span
Chris@1 1324 class="cmtt-8">&#x00A0;</span><span
Chris@1 1325 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1326 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1327 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1328 class="cmtt-8">&#x00A0;</span><span
Chris@1 1329 class="cmtt-8">&#x00A0;</span><span
Chris@1 1330 class="cmtt-8">&#x00A0;</span><span
Chris@1 1331 class="cmtt-8">&#x00A0;</span><span
Chris@1 1332 class="cmtt-8">&#x00A0;</span><span
Chris@1 1333 class="cmtt-8">&#x00A0;</span><span
Chris@1 1334 class="cmtt-8">&#x00A0;</span><span
Chris@1 1335 class="cmtt-8">&#x00A0;</span><span
Chris@1 1336 class="cmtt-8">&#x00A0;</span><span
Chris@1 1337 class="cmtt-8">&#x00A0;</span><span
Chris@1 1338 class="cmtt-8">&#x00A0;</span><span
Chris@1 1339 class="cmtt-8">&#x00A0;</span><span
Chris@1 1340 class="cmtt-8">&#x00A0;</span><span
Chris@1 1341 class="cmtt-8">&#x00A0;</span><span
Chris@1 1342 class="cmtt-8">&#x00A0;]</span>
Chris@1 1343 <br class="fancyvrb" /><a
Chris@1 1344 id="x1-43058r8"></a><span
Chris@1 1345 class="cmr-6">8</span><span
Chris@1 1346 class="cmtt-8">&#x00A0;</span><span
Chris@1 1347 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1348 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1349 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1350 class="cmtt-8">&#x00A0;</span><span
Chris@1 1351 class="cmtt-8">&#x00A0;</span><span
Chris@1 1352 class="cmtt-8">&#x00A0;</span><span
Chris@1 1353 class="cmtt-8">&#x00A0;</span><span
Chris@1 1354 class="cmtt-8">&#x00A0;</span><span
Chris@1 1355 class="cmtt-8">&#x00A0;</span><span
Chris@1 1356 class="cmtt-8">&#x00A0;</span><span
Chris@1 1357 class="cmtt-8">&#x00A0;</span><span
Chris@1 1358 class="cmtt-8">&#x00A0;</span><span
Chris@1 1359 class="cmtt-8">&#x00A0;</span><span
Chris@1 1360 class="cmtt-8">&#x00A0;</span><span
Chris@1 1361 class="cmtt-8">&#x00A0;</span><span
Chris@1 1362 class="cmtt-8">&#x00A0;</span><span
Chris@1 1363 class="cmtt-8">&#x00A0;</span><span
Chris@1 1364 class="cmtt-8">&#x00A0;]</span>
Chris@1 1365 <br class="fancyvrb" /><a
Chris@1 1366 id="x1-43060r9"></a><span
Chris@1 1367 class="cmr-6">9</span><span
Chris@1 1368 class="cmtt-8">&#x00A0;</span><span
Chris@1 1369 class="cmtt-8">&#x00A0;</span><span
Chris@1 1370 class="cmtt-8">&#x00A0;</span><span
Chris@1 1371 class="cmtt-8">&#x00A0;</span><span
Chris@1 1372 class="cmtt-8">&#x00A0;</span><span
Chris@1 1373 class="cmtt-8">&#x00A0;</span><span
Chris@1 1374 class="cmtt-8">&#x00A0;</span><span
Chris@1 1375 class="cmtt-8">&#x00A0;</span><span
Chris@1 1376 class="cmtt-8">&#x00A0;</span><span
Chris@1 1377 class="cmtt-8">&#x00A0;</span><span
Chris@1 1378 class="cmtt-8">&#x00A0;</span><span
Chris@1 1379 class="cmtt-8">&#x00A0;</span><span
Chris@1 1380 class="cmtt-8">&#x00A0;</span><span
Chris@1 1381 class="cmtt-8">&#x00A0;</span><span
Chris@1 1382 class="cmtt-8">&#x00A0;...</span>
Chris@1 1383 <br class="fancyvrb" /><a
Chris@1 1384 id="x1-43062r10"></a><span
Chris@1 1385 class="cmr-6">10</span><span
Chris@1 1386 class="cmtt-8">&#x00A0;</span><span
Chris@1 1387 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1388 class="cmtt-8">&#x00A0;n</span><span
Chris@1 1389 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1390 class="cmtt-8">&#x00A0;</span><span
Chris@1 1391 class="cmtt-8">&#x00A0;</span><span
Chris@1 1392 class="cmtt-8">&#x00A0;</span><span
Chris@1 1393 class="cmtt-8">&#x00A0;</span><span
Chris@1 1394 class="cmtt-8">&#x00A0;</span><span
Chris@1 1395 class="cmtt-8">&#x00A0;</span><span
Chris@1 1396 class="cmtt-8">&#x00A0;</span><span
Chris@1 1397 class="cmtt-8">&#x00A0;</span><span
Chris@1 1398 class="cmtt-8">&#x00A0;</span><span
Chris@1 1399 class="cmtt-8">&#x00A0;</span><span
Chris@1 1400 class="cmtt-8">&#x00A0;</span><span
Chris@1 1401 class="cmtt-8">&#x00A0;</span><span
Chris@1 1402 class="cmtt-8">&#x00A0;</span><span
Chris@1 1403 class="cmtt-8">&#x00A0;</span><span
Chris@1 1404 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1405 class="cmtt-8">&#x00A0;</span><span
Chris@1 1406 class="cmtt-8">&#x00A0;bytestream</span><span
Chris@1 1407 class="cmtt-8">&#x00A0;length</span><span
Chris@1 1408 class="cmtt-8">&#x00A0;==</span><span
Chris@1 1409 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1410 class="cmtt-8">&#x00A0;bytes</span>
Chris@1 1411 <br class="fancyvrb" /><a
Chris@1 1412 id="x1-43064r11"></a><span
Chris@1 1413 class="cmr-6">11</span><span
Chris@1 1414 class="cmtt-8">&#x00A0;</span><span
Chris@1 1415 class="cmtt-8">&#x00A0;</span><span
Chris@1 1416 class="cmtt-8">&#x00A0;</span><span
Chris@1 1417 class="cmtt-8">&#x00A0;</span><span
Chris@1 1418 class="cmtt-8">&#x00A0;</span><span
Chris@1 1419 class="cmtt-8">&#x00A0;</span><span
Chris@1 1420 class="cmtt-8">&#x00A0;</span><span
Chris@1 1421 class="cmtt-8">&#x00A0;</span><span
Chris@1 1422 class="cmtt-8">&#x00A0;</span><span
Chris@1 1423 class="cmtt-8">&#x00A0;</span><span
Chris@1 1424 class="cmtt-8">&#x00A0;</span><span
Chris@1 1425 class="cmtt-8">&#x00A0;</span><span
Chris@1 1426 class="cmtt-8">&#x00A0;</span><span
Chris@1 1427 class="cmtt-8">&#x00A0;</span><span
Chris@1 1428 class="cmtt-8">&#x00A0;</span><span
Chris@1 1429 class="cmtt-8">&#x00A0;</span><span
Chris@1 1430 class="cmtt-8">&#x00A0;</span><span
Chris@1 1431 class="cmtt-8">&#x00A0;</span><span
Chris@1 1432 class="cmtt-8">&#x00A0;</span><span
Chris@1 1433 class="cmtt-8">&#x00A0;</span><span
Chris@1 1434 class="cmtt-8">&#x00A0;</span><span
Chris@1 1435 class="cmtt-8">&#x00A0;</span><span
Chris@1 1436 class="cmtt-8">&#x00A0;</span><span
Chris@1 1437 class="cmtt-8">&#x00A0;</span><span
Chris@1 1438 class="cmtt-8">&#x00A0;</span><span
Chris@1 1439 class="cmtt-8">&#x00A0;</span><span
Chris@1 1440 class="cmtt-8">&#x00A0;</span><span
Chris@1 1441 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 1442 class="cmtt-8">&#x00A0;cursor</span><span
Chris@1 1443 class="cmtt-8">&#x00A0;==</span><span
Chris@1 1444 class="cmtt-8">&#x00A0;6</span>
Chris@1 1445 </div>
Chris@1 1446 <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value &#8217;6969&#8217; [b110 11001110 01]:
Chris@1 1447 <!--l. 156--><p class="noindent" >
Chris@1 1448 <div class="fancyvrb" id="fancyvrb5">
Chris@1 1449 <a
Chris@1 1450 id="x1-43066r1"></a><span
Chris@1 1451 class="cmr-6">1</span><span
Chris@1 1452 class="cmtt-8">&#x00A0;</span><span
Chris@1 1453 class="cmtt-8">&#x00A0;</span><span
Chris@1 1454 class="cmtt-8">&#x00A0;</span><span
Chris@1 1455 class="cmtt-8">&#x00A0;</span><span
Chris@1 1456 class="cmtt-8">&#x00A0;</span><span
Chris@1 1457 class="cmtt-8">&#x00A0;</span><span
Chris@1 1458 class="cmtt-8">&#x00A0;</span><span
Chris@1 1459 class="cmtt-8">&#x00A0;</span><span
Chris@1 1460 class="cmtt-8">&#x00A0;</span><span
Chris@1 1461 class="cmtt-8">&#x00A0;</span><span
Chris@1 1462 class="cmtt-8">&#x00A0;</span><span
Chris@1 1463 class="cmtt-8">&#x00A0;</span><span
Chris@1 1464 class="cmtt-8">&#x00A0;</span><span
Chris@1 1465 class="cmtt-8">&#x00A0;</span><span
Chris@1 1466 class="cmtt-8">&#x00A0;</span><span
Chris@1 1467 class="cmtt-8">&#x00A0;</span><span
Chris@1 1468 class="cmtt-8">&#x00A0;</span><span
Chris@1 1469 class="cmtt-8">&#x00A0;|</span>
Chris@1 1470 <br class="fancyvrb" /><a
Chris@1 1471 id="x1-43068r2"></a><span
Chris@1 1472 class="cmr-6">2</span><span
Chris@1 1473 class="cmtt-8">&#x00A0;</span><span
Chris@1 1474 class="cmtt-8">&#x00A0;</span><span
Chris@1 1475 class="cmtt-8">&#x00A0;</span><span
Chris@1 1476 class="cmtt-8">&#x00A0;</span><span
Chris@1 1477 class="cmtt-8">&#x00A0;</span><span
Chris@1 1478 class="cmtt-8">&#x00A0;</span><span
Chris@1 1479 class="cmtt-8">&#x00A0;</span><span
Chris@1 1480 class="cmtt-8">&#x00A0;</span><span
Chris@1 1481 class="cmtt-8">&#x00A0;</span><span
Chris@1 1482 class="cmtt-8">&#x00A0;</span><span
Chris@1 1483 class="cmtt-8">&#x00A0;</span><span
Chris@1 1484 class="cmtt-8">&#x00A0;</span><span
Chris@1 1485 class="cmtt-8">&#x00A0;</span><span
Chris@1 1486 class="cmtt-8">&#x00A0;</span><span
Chris@1 1487 class="cmtt-8">&#x00A0;</span><span
Chris@1 1488 class="cmtt-8">&#x00A0;</span><span
Chris@1 1489 class="cmtt-8">&#x00A0;</span><span
Chris@1 1490 class="cmtt-8">&#x00A0;V</span>
Chris@1 1491 <br class="fancyvrb" /><a
Chris@1 1492 id="x1-43070r3"></a><span
Chris@1 1493 class="cmr-6">3</span><span
Chris@1 1494 class="cmtt-8">&#x00A0;</span><span
Chris@1 1495 class="cmtt-8">&#x00A0;</span>
Chris@1 1496 <br class="fancyvrb" /><a
Chris@1 1497 id="x1-43072r4"></a><span
Chris@1 1498 class="cmr-6">4</span><span
Chris@1 1499 class="cmtt-8">&#x00A0;</span><span
Chris@1 1500 class="cmtt-8">&#x00A0;</span><span
Chris@1 1501 class="cmtt-8">&#x00A0;</span><span
Chris@1 1502 class="cmtt-8">&#x00A0;</span><span
Chris@1 1503 class="cmtt-8">&#x00A0;</span><span
Chris@1 1504 class="cmtt-8">&#x00A0;</span><span
Chris@1 1505 class="cmtt-8">&#x00A0;</span><span
Chris@1 1506 class="cmtt-8">&#x00A0;</span><span
Chris@1 1507 class="cmtt-8">&#x00A0;</span><span
Chris@1 1508 class="cmtt-8">&#x00A0;7</span><span
Chris@1 1509 class="cmtt-8">&#x00A0;6</span><span
Chris@1 1510 class="cmtt-8">&#x00A0;5</span><span
Chris@1 1511 class="cmtt-8">&#x00A0;4</span><span
Chris@1 1512 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1513 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1514 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1515 class="cmtt-8">&#x00A0;0</span>
Chris@1 1516 <br class="fancyvrb" /><a
Chris@1 1517 id="x1-43074r5"></a><span
Chris@1 1518 class="cmr-6">5</span><span
Chris@1 1519 class="cmtt-8">&#x00A0;</span><span
Chris@1 1520 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1521 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1522 class="cmtt-8">&#x00A0;[1</span><span
Chris@1 1523 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1524 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1525 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1526 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1527 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1528 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1529 class="cmtt-8">&#x00A0;0]</span>
Chris@1 1530 <br class="fancyvrb" /><a
Chris@1 1531 id="x1-43076r6"></a><span
Chris@1 1532 class="cmr-6">6</span><span
Chris@1 1533 class="cmtt-8">&#x00A0;</span><span
Chris@1 1534 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1535 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1536 class="cmtt-8">&#x00A0;[0</span><span
Chris@1 1537 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1538 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1539 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1540 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1541 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1542 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1543 class="cmtt-8">&#x00A0;0]</span>
Chris@1 1544 <br class="fancyvrb" /><a
Chris@1 1545 id="x1-43078r7"></a><span
Chris@1 1546 class="cmr-6">7</span><span
Chris@1 1547 class="cmtt-8">&#x00A0;</span><span
Chris@1 1548 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1549 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1550 class="cmtt-8">&#x00A0;[1</span><span
Chris@1 1551 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1552 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1553 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1554 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1555 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1556 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1557 class="cmtt-8">&#x00A0;0]</span>
Chris@1 1558 <br class="fancyvrb" /><a
Chris@1 1559 id="x1-43080r8"></a><span
Chris@1 1560 class="cmr-6">8</span><span
Chris@1 1561 class="cmtt-8">&#x00A0;</span><span
Chris@1 1562 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1563 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1564 class="cmtt-8">&#x00A0;[0</span><span
Chris@1 1565 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1566 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1567 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1568 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1569 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1570 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1571 class="cmtt-8">&#x00A0;0]</span><span
Chris@1 1572 class="cmtt-8">&#x00A0;</span><span
Chris@1 1573 class="cmtt-8">&#x00A0;&#x003C;-</span>
Chris@1 1574 <br class="fancyvrb" /><a
Chris@1 1575 id="x1-43082r9"></a><span
Chris@1 1576 class="cmr-6">9</span><span
Chris@1 1577 class="cmtt-8">&#x00A0;</span><span
Chris@1 1578 class="cmtt-8">&#x00A0;</span><span
Chris@1 1579 class="cmtt-8">&#x00A0;</span><span
Chris@1 1580 class="cmtt-8">&#x00A0;</span><span
Chris@1 1581 class="cmtt-8">&#x00A0;</span><span
Chris@1 1582 class="cmtt-8">&#x00A0;</span><span
Chris@1 1583 class="cmtt-8">&#x00A0;</span><span
Chris@1 1584 class="cmtt-8">&#x00A0;</span><span
Chris@1 1585 class="cmtt-8">&#x00A0;</span><span
Chris@1 1586 class="cmtt-8">&#x00A0;</span><span
Chris@1 1587 class="cmtt-8">&#x00A0;</span><span
Chris@1 1588 class="cmtt-8">&#x00A0;</span><span
Chris@1 1589 class="cmtt-8">&#x00A0;</span><span
Chris@1 1590 class="cmtt-8">&#x00A0;</span><span
Chris@1 1591 class="cmtt-8">&#x00A0;...</span>
Chris@1 1592 <br class="fancyvrb" /><a
Chris@1 1593 id="x1-43084r10"></a><span
Chris@1 1594 class="cmr-6">10</span><span
Chris@1 1595 class="cmtt-8">&#x00A0;</span><span
Chris@1 1596 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1597 class="cmtt-8">&#x00A0;n</span><span
Chris@1 1598 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1599 class="cmtt-8">&#x00A0;</span><span
Chris@1 1600 class="cmtt-8">&#x00A0;</span><span
Chris@1 1601 class="cmtt-8">&#x00A0;</span><span
Chris@1 1602 class="cmtt-8">&#x00A0;</span><span
Chris@1 1603 class="cmtt-8">&#x00A0;</span><span
Chris@1 1604 class="cmtt-8">&#x00A0;</span><span
Chris@1 1605 class="cmtt-8">&#x00A0;</span><span
Chris@1 1606 class="cmtt-8">&#x00A0;</span><span
Chris@1 1607 class="cmtt-8">&#x00A0;</span><span
Chris@1 1608 class="cmtt-8">&#x00A0;</span><span
Chris@1 1609 class="cmtt-8">&#x00A0;</span><span
Chris@1 1610 class="cmtt-8">&#x00A0;</span><span
Chris@1 1611 class="cmtt-8">&#x00A0;</span><span
Chris@1 1612 class="cmtt-8">&#x00A0;</span><span
Chris@1 1613 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1614 class="cmtt-8">&#x00A0;</span><span
Chris@1 1615 class="cmtt-8">&#x00A0;bytestream</span><span
Chris@1 1616 class="cmtt-8">&#x00A0;length</span><span
Chris@1 1617 class="cmtt-8">&#x00A0;==</span><span
Chris@1 1618 class="cmtt-8">&#x00A0;4</span><span
Chris@1 1619 class="cmtt-8">&#x00A0;bytes</span>
Chris@1 1620 <br class="fancyvrb" /><a
Chris@1 1621 id="x1-43086r11"></a><span
Chris@1 1622 class="cmr-6">11</span><span
Chris@1 1623 class="cmtt-8">&#x00A0;</span><span
Chris@1 1624 class="cmtt-8">&#x00A0;</span>
Chris@1 1625 </div>
Chris@1 1626 <!--l. 173--><p class="noindent" >
Chris@1 1627 <h5 class="subsubsectionHead"><span class="titlemark">2.1.7. </span> <a
Chris@1 1628 id="x1-440002.1.7"></a>decoding example</h5>
Chris@1 1629 <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
Chris@1 1630 <!--l. 177--><p class="noindent" >
Chris@1 1631 <div class="fancyvrb" id="fancyvrb6">
Chris@1 1632
Chris@1 1633
Chris@1 1634
Chris@1 1635 <a
Chris@1 1636 id="x1-44002r1"></a><span
Chris@1 1637 class="cmr-6">1</span><span
Chris@1 1638 class="cmtt-8">&#x00A0;</span><span
Chris@1 1639 class="cmtt-8">&#x00A0;</span><span
Chris@1 1640 class="cmtt-8">&#x00A0;</span><span
Chris@1 1641 class="cmtt-8">&#x00A0;</span><span
Chris@1 1642 class="cmtt-8">&#x00A0;</span><span
Chris@1 1643 class="cmtt-8">&#x00A0;</span><span
Chris@1 1644 class="cmtt-8">&#x00A0;</span><span
Chris@1 1645 class="cmtt-8">&#x00A0;</span><span
Chris@1 1646 class="cmtt-8">&#x00A0;</span><span
Chris@1 1647 class="cmtt-8">&#x00A0;</span><span
Chris@1 1648 class="cmtt-8">&#x00A0;</span><span
Chris@1 1649 class="cmtt-8">&#x00A0;</span><span
Chris@1 1650 class="cmtt-8">&#x00A0;</span><span
Chris@1 1651 class="cmtt-8">&#x00A0;</span><span
Chris@1 1652 class="cmtt-8">&#x00A0;</span><span
Chris@1 1653 class="cmtt-8">&#x00A0;</span><span
Chris@1 1654 class="cmtt-8">&#x00A0;</span><span
Chris@1 1655 class="cmtt-8">&#x00A0;</span><span
Chris@1 1656 class="cmtt-8">&#x00A0;</span><span
Chris@1 1657 class="cmtt-8">&#x00A0;</span><span
Chris@1 1658 class="cmtt-8">&#x00A0;</span><span
Chris@1 1659 class="cmtt-8">&#x00A0;</span><span
Chris@1 1660 class="cmtt-8">&#x00A0;</span><span
Chris@1 1661 class="cmtt-8">&#x00A0;|</span>
Chris@1 1662 <br class="fancyvrb" /><a
Chris@1 1663 id="x1-44004r2"></a><span
Chris@1 1664 class="cmr-6">2</span><span
Chris@1 1665 class="cmtt-8">&#x00A0;</span><span
Chris@1 1666 class="cmtt-8">&#x00A0;</span><span
Chris@1 1667 class="cmtt-8">&#x00A0;</span><span
Chris@1 1668 class="cmtt-8">&#x00A0;</span><span
Chris@1 1669 class="cmtt-8">&#x00A0;</span><span
Chris@1 1670 class="cmtt-8">&#x00A0;</span><span
Chris@1 1671 class="cmtt-8">&#x00A0;</span><span
Chris@1 1672 class="cmtt-8">&#x00A0;</span><span
Chris@1 1673 class="cmtt-8">&#x00A0;</span><span
Chris@1 1674 class="cmtt-8">&#x00A0;</span><span
Chris@1 1675 class="cmtt-8">&#x00A0;</span><span
Chris@1 1676 class="cmtt-8">&#x00A0;</span><span
Chris@1 1677 class="cmtt-8">&#x00A0;</span><span
Chris@1 1678 class="cmtt-8">&#x00A0;</span><span
Chris@1 1679 class="cmtt-8">&#x00A0;</span><span
Chris@1 1680 class="cmtt-8">&#x00A0;</span><span
Chris@1 1681 class="cmtt-8">&#x00A0;</span><span
Chris@1 1682 class="cmtt-8">&#x00A0;</span><span
Chris@1 1683 class="cmtt-8">&#x00A0;</span><span
Chris@1 1684 class="cmtt-8">&#x00A0;</span><span
Chris@1 1685 class="cmtt-8">&#x00A0;</span><span
Chris@1 1686 class="cmtt-8">&#x00A0;</span><span
Chris@1 1687 class="cmtt-8">&#x00A0;</span><span
Chris@1 1688 class="cmtt-8">&#x00A0;V</span>
Chris@1 1689 <br class="fancyvrb" /><a
Chris@1 1690 id="x1-44006r3"></a><span
Chris@1 1691 class="cmr-6">3</span><span
Chris@1 1692 class="cmtt-8">&#x00A0;</span><span
Chris@1 1693 class="cmtt-8">&#x00A0;</span>
Chris@1 1694 <br class="fancyvrb" /><a
Chris@1 1695 id="x1-44008r4"></a><span
Chris@1 1696 class="cmr-6">4</span><span
Chris@1 1697 class="cmtt-8">&#x00A0;</span><span
Chris@1 1698 class="cmtt-8">&#x00A0;</span><span
Chris@1 1699 class="cmtt-8">&#x00A0;</span><span
Chris@1 1700 class="cmtt-8">&#x00A0;</span><span
Chris@1 1701 class="cmtt-8">&#x00A0;</span><span
Chris@1 1702 class="cmtt-8">&#x00A0;</span><span
Chris@1 1703 class="cmtt-8">&#x00A0;</span><span
Chris@1 1704 class="cmtt-8">&#x00A0;</span><span
Chris@1 1705 class="cmtt-8">&#x00A0;</span><span
Chris@1 1706 class="cmtt-8">&#x00A0;7</span><span
Chris@1 1707 class="cmtt-8">&#x00A0;6</span><span
Chris@1 1708 class="cmtt-8">&#x00A0;5</span><span
Chris@1 1709 class="cmtt-8">&#x00A0;4</span><span
Chris@1 1710 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1711 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1712 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1713 class="cmtt-8">&#x00A0;0</span>
Chris@1 1714 <br class="fancyvrb" /><a
Chris@1 1715 id="x1-44010r5"></a><span
Chris@1 1716 class="cmr-6">5</span><span
Chris@1 1717 class="cmtt-8">&#x00A0;</span><span
Chris@1 1718 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1719 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1720 class="cmtt-8">&#x00A0;[1</span><span
Chris@1 1721 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1722 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1723 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1724 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1725 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1726 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1727 class="cmtt-8">&#x00A0;0]</span><span
Chris@1 1728 class="cmtt-8">&#x00A0;</span><span
Chris@1 1729 class="cmtt-8">&#x00A0;&#x003C;-</span>
Chris@1 1730 <br class="fancyvrb" /><a
Chris@1 1731 id="x1-44012r6"></a><span
Chris@1 1732 class="cmr-6">6</span><span
Chris@1 1733 class="cmtt-8">&#x00A0;</span><span
Chris@1 1734 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1735 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1736 class="cmtt-8">&#x00A0;[0</span><span
Chris@1 1737 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1738 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1739 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1740 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1741 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1742 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1743 class="cmtt-8">&#x00A0;0]</span>
Chris@1 1744 <br class="fancyvrb" /><a
Chris@1 1745 id="x1-44014r7"></a><span
Chris@1 1746 class="cmr-6">7</span><span
Chris@1 1747 class="cmtt-8">&#x00A0;</span><span
Chris@1 1748 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1749 class="cmtt-8">&#x00A0;2</span><span
Chris@1 1750 class="cmtt-8">&#x00A0;[1</span><span
Chris@1 1751 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1752 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1753 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1754 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1755 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1756 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1757 class="cmtt-8">&#x00A0;0]</span>
Chris@1 1758 <br class="fancyvrb" /><a
Chris@1 1759 id="x1-44016r8"></a><span
Chris@1 1760 class="cmr-6">8</span><span
Chris@1 1761 class="cmtt-8">&#x00A0;</span><span
Chris@1 1762 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1763 class="cmtt-8">&#x00A0;3</span><span
Chris@1 1764 class="cmtt-8">&#x00A0;[0</span><span
Chris@1 1765 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1766 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1767 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1768 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1769 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1770 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1771 class="cmtt-8">&#x00A0;0]</span><span
Chris@1 1772 class="cmtt-8">&#x00A0;</span><span
Chris@1 1773 class="cmtt-8">&#x00A0;bytestream</span><span
Chris@1 1774 class="cmtt-8">&#x00A0;length</span><span
Chris@1 1775 class="cmtt-8">&#x00A0;==</span><span
Chris@1 1776 class="cmtt-8">&#x00A0;4</span><span
Chris@1 1777 class="cmtt-8">&#x00A0;bytes</span>
Chris@1 1778 <br class="fancyvrb" /><a
Chris@1 1779 id="x1-44018r9"></a><span
Chris@1 1780 class="cmr-6">9</span><span
Chris@1 1781 class="cmtt-8">&#x00A0;</span><span
Chris@1 1782 class="cmtt-8">&#x00A0;</span>
Chris@1 1783 </div>
Chris@1 1784 <!--l. 190--><p class="noindent" >We read two, two-bit integer fields, resulting in the returned numbers &#8217;b00&#8217; and &#8217;b11&#8217;. Two things
Chris@1 1785 are worth noting here:
Chris@1 1786 <ul class="itemize1">
Chris@1 1787 <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
Chris@1 1788 some other combination of bit-widths from the bitstream is well defined. There are
Chris@1 1789 no artificial alignment boundaries maintained in the bitstream.
Chris@1 1790 </li>
Chris@1 1791 <li class="itemize">The second value is the two-bit-wide integer &#8217;b11&#8217;. This value may be interpreted
Chris@1 1792 either as the unsigned value &#8217;3&#8217;, or the signed value &#8217;-1&#8217;. Signedness is dependent on
Chris@1 1793 decode context.</li></ul>
Chris@1 1794 <!--l. 208--><p class="noindent" >
Chris@1 1795 <h5 class="subsubsectionHead"><span class="titlemark">2.1.8. </span> <a
Chris@1 1796 id="x1-450002.1.8"></a>end-of-packet alignment</h5>
Chris@1 1797 <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
Chris@1 1798 embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
Chris@1 1799 Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
Chris@1 1800 the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
Chris@1 1801 in the last byte of a packet.
Chris@1 1802 <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
Chris@1 1803 should this unused space be read, it will return binary zeroes.
Chris@1 1804 <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an &#8217;end-of-packet&#8217; condition.
Chris@1 1805 End-of-packet is not to be considered an error; it is merely a state indicating that there is
Chris@1 1806 insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
Chris@1 1807 normal mode of operation, and as such, decoders must handle reading past the end of a packet as
Chris@1 1808 a typical mode of operation. Any further read operations after an &#8217;end-of-packet&#8217; condition shall
Chris@1 1809 also return &#8217;end-of-packet&#8217;.
Chris@1 1810
Chris@1 1811
Chris@1 1812
Chris@1 1813 <!--l. 233--><p class="noindent" >
Chris@1 1814 <h5 class="subsubsectionHead"><span class="titlemark">2.1.9. </span> <a
Chris@1 1815 id="x1-460002.1.9"></a>reading zero bits</h5>
Chris@1 1816 <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value &#8217;0&#8217; and does not increment the stream cursor.
Chris@1 1817 Reading to the end of the packet (but not past, such that an &#8217;end-of-packet&#8217; condition has not
Chris@1 1818 triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
Chris@1 1819 end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets &#8217;end-of-packet&#8217;
Chris@1 1820 shall also fail with &#8217;end-of-packet&#8217;.
Chris@1 1821
Chris@1 1822
Chris@1 1823
Chris@1 1824
Chris@1 1825
Chris@1 1826
Chris@1 1827 <h3 class="sectionHead"><span class="titlemark">3. </span> <a
Chris@1 1828 id="x1-470003"></a>Probability Model and Codebooks</h3>
Chris@1 1829 <!--l. 6--><p class="noindent" >
Chris@1 1830 <h4 class="subsectionHead"><span class="titlemark">3.1. </span> <a
Chris@1 1831 id="x1-480003.1"></a>Overview</h4>
Chris@1 1832 <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
Chris@1 1833 probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
Chris@1 1834 bitstream itself in the third header, the codec setup header. This packed configuration consists of
Chris@1 1835 multiple &#8217;codebooks&#8217;, each containing a specific Huffman-equivalent representation for decoding
Chris@1 1836 compressed codewords as well as an optional lookup table of output vector values to which a
Chris@1 1837 decoded Huffman value is applied as an offset, generating the final decoded output corresponding
Chris@1 1838 to a given compressed codeword.
Chris@1 1839 <!--l. 18--><p class="noindent" >
Chris@1 1840 <h5 class="subsubsectionHead"><span class="titlemark">3.1.1. </span> <a
Chris@1 1841 id="x1-490003.1.1"></a>Bitwise operation</h5>
Chris@1 1842 <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
Chris@1 1843 and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
Chris@1 1844 read from the stream according to <a
Chris@1 1845 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a
Chris@1 1846 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221;.
Chris@1 1847 <!--l. 27--><p class="noindent" >
Chris@1 1848 <h4 class="subsectionHead"><span class="titlemark">3.2. </span> <a
Chris@1 1849 id="x1-500003.2"></a>Packed codebook format</h4>
Chris@1 1850 <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system&#8217;s native byte width is
Chris@1 1851 eight bits. This is not universally true; see <a
Chris@1 1852 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a
Chris@1 1853 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; for discussion
Chris@1 1854 relating to non-eight-bit bytes.
Chris@1 1855
Chris@1 1856
Chris@1 1857
Chris@1 1858 <!--l. 34--><p class="noindent" >
Chris@1 1859 <h5 class="subsubsectionHead"><span class="titlemark">3.2.1. </span> <a
Chris@1 1860 id="x1-510003.2.1"></a>codebook decode</h5>
Chris@1 1861 <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
Chris@1 1862 <!--l. 38--><p class="noindent" >
Chris@1 1863 <div class="fancyvrb" id="fancyvrb7">
Chris@1 1864 <a
Chris@1 1865 id="x1-51002r1"></a><span
Chris@1 1866 class="cmr-6">1</span><span
Chris@1 1867 class="cmtt-8">&#x00A0;</span><span
Chris@1 1868 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1869 class="cmtt-8">&#x00A0;0:</span><span
Chris@1 1870 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1871 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1872 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1873 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1874 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1875 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1876 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1877 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1878 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1879 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1880 class="cmtt-8">&#x00A0;(0x42)</span>
Chris@1 1881 <br class="fancyvrb" /><a
Chris@1 1882 id="x1-51004r2"></a><span
Chris@1 1883 class="cmr-6">2</span><span
Chris@1 1884 class="cmtt-8">&#x00A0;</span><span
Chris@1 1885 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1886 class="cmtt-8">&#x00A0;1:</span><span
Chris@1 1887 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1888 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1889 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1890 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1891 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1892 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1893 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1894 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1895 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1896 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1897 class="cmtt-8">&#x00A0;(0x43)</span>
Chris@1 1898 <br class="fancyvrb" /><a
Chris@1 1899 id="x1-51006r3"></a><span
Chris@1 1900 class="cmr-6">3</span><span
Chris@1 1901 class="cmtt-8">&#x00A0;</span><span
Chris@1 1902 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1903 class="cmtt-8">&#x00A0;2:</span><span
Chris@1 1904 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1905 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1906 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1907 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1908 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1909 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1910 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1911 class="cmtt-8">&#x00A0;1</span><span
Chris@1 1912 class="cmtt-8">&#x00A0;0</span><span
Chris@1 1913 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1914 class="cmtt-8">&#x00A0;(0x56)</span>
Chris@1 1915 </div>
Chris@1 1916 <!--l. 44--><p class="noindent" >16 bit <span
Chris@1 1917 class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span
Chris@1 1918 class="cmtt-12">[codebook_entries] </span>fields:
Chris@1 1919 <!--l. 46--><p class="noindent" >
Chris@1 1920 <div class="fancyvrb" id="fancyvrb8">
Chris@1 1921 <a
Chris@1 1922 id="x1-51008r1"></a><span
Chris@1 1923 class="cmr-6">1</span><span
Chris@1 1924 class="cmtt-8">&#x00A0;</span><span
Chris@1 1925 class="cmtt-8">&#x00A0;</span>
Chris@1 1926 <br class="fancyvrb" /><a
Chris@1 1927 id="x1-51010r2"></a><span
Chris@1 1928 class="cmr-6">2</span><span
Chris@1 1929 class="cmtt-8">&#x00A0;</span><span
Chris@1 1930 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1931 class="cmtt-8">&#x00A0;3:</span><span
Chris@1 1932 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1933 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1934 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1935 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1936 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1937 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1938 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1939 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1940 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1941 class="cmtt-8">&#x00A0;]</span>
Chris@1 1942 <br class="fancyvrb" /><a
Chris@1 1943 id="x1-51012r3"></a><span
Chris@1 1944 class="cmr-6">3</span><span
Chris@1 1945 class="cmtt-8">&#x00A0;</span><span
Chris@1 1946 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1947 class="cmtt-8">&#x00A0;4:</span><span
Chris@1 1948 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1949 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1950 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1951 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1952 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1953 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1954 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1955 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1956 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1957 class="cmtt-8">&#x00A0;]</span><span
Chris@1 1958 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
Chris@1 1959 class="cmtt-8">&#x00A0;(16</span><span
Chris@1 1960 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 1961 class="cmtt-8">&#x00A0;unsigned)</span>
Chris@1 1962 <br class="fancyvrb" /><a
Chris@1 1963 id="x1-51014r4"></a><span
Chris@1 1964 class="cmr-6">4</span><span
Chris@1 1965 class="cmtt-8">&#x00A0;</span><span
Chris@1 1966 class="cmtt-8">&#x00A0;</span>
Chris@1 1967 <br class="fancyvrb" /><a
Chris@1 1968 id="x1-51016r5"></a><span
Chris@1 1969 class="cmr-6">5</span><span
Chris@1 1970 class="cmtt-8">&#x00A0;</span><span
Chris@1 1971 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1972 class="cmtt-8">&#x00A0;5:</span><span
Chris@1 1973 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1974 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1975 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1976 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1977 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1978 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1979 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1980 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1981 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1982 class="cmtt-8">&#x00A0;]</span>
Chris@1 1983 <br class="fancyvrb" /><a
Chris@1 1984 id="x1-51018r6"></a><span
Chris@1 1985 class="cmr-6">6</span><span
Chris@1 1986 class="cmtt-8">&#x00A0;</span><span
Chris@1 1987 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 1988 class="cmtt-8">&#x00A0;6:</span><span
Chris@1 1989 class="cmtt-8">&#x00A0;[</span><span
Chris@1 1990 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1991 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1992 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1993 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1994 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1995 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1996 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1997 class="cmtt-8">&#x00A0;X</span><span
Chris@1 1998 class="cmtt-8">&#x00A0;]</span>
Chris@1 1999 <br class="fancyvrb" /><a
Chris@1 2000 id="x1-51020r7"></a><span
Chris@1 2001 class="cmr-6">7</span><span
Chris@1 2002 class="cmtt-8">&#x00A0;</span><span
Chris@1 2003 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 2004 class="cmtt-8">&#x00A0;7:</span><span
Chris@1 2005 class="cmtt-8">&#x00A0;[</span><span
Chris@1 2006 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2007 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2008 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2009 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2010 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2011 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2012 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2013 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2014 class="cmtt-8">&#x00A0;]</span><span
Chris@1 2015 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
Chris@1 2016 class="cmtt-8">&#x00A0;(24</span><span
Chris@1 2017 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 2018 class="cmtt-8">&#x00A0;unsigned)</span>
Chris@1 2019 <br class="fancyvrb" /><a
Chris@1 2020 id="x1-51022r8"></a><span
Chris@1 2021 class="cmr-6">8</span><span
Chris@1 2022 class="cmtt-8">&#x00A0;</span><span
Chris@1 2023 class="cmtt-8">&#x00A0;</span>
Chris@1 2024 </div>
Chris@1 2025 <!--l. 57--><p class="noindent" >Next is the <span
Chris@1 2026 class="cmtt-12">[ordered] </span>bit flag:
Chris@1 2027 <!--l. 59--><p class="noindent" >
Chris@1 2028 <div class="fancyvrb" id="fancyvrb9">
Chris@1 2029 <a
Chris@1 2030 id="x1-51024r1"></a><span
Chris@1 2031 class="cmr-6">1</span><span
Chris@1 2032 class="cmtt-8">&#x00A0;</span><span
Chris@1 2033 class="cmtt-8">&#x00A0;</span>
Chris@1 2034 <br class="fancyvrb" /><a
Chris@1 2035 id="x1-51026r2"></a><span
Chris@1 2036 class="cmr-6">2</span><span
Chris@1 2037 class="cmtt-8">&#x00A0;</span><span
Chris@1 2038 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 2039 class="cmtt-8">&#x00A0;8:</span><span
Chris@1 2040 class="cmtt-8">&#x00A0;[</span><span
Chris@1 2041 class="cmtt-8">&#x00A0;</span><span
Chris@1 2042 class="cmtt-8">&#x00A0;</span><span
Chris@1 2043 class="cmtt-8">&#x00A0;</span><span
Chris@1 2044 class="cmtt-8">&#x00A0;</span><span
Chris@1 2045 class="cmtt-8">&#x00A0;</span><span
Chris@1 2046 class="cmtt-8">&#x00A0;</span><span
Chris@1 2047 class="cmtt-8">&#x00A0;</span><span
Chris@1 2048 class="cmtt-8">&#x00A0;</span><span
Chris@1 2049 class="cmtt-8">&#x00A0;</span><span
Chris@1 2050 class="cmtt-8">&#x00A0;</span><span
Chris@1 2051 class="cmtt-8">&#x00A0;</span><span
Chris@1 2052 class="cmtt-8">&#x00A0;</span><span
Chris@1 2053 class="cmtt-8">&#x00A0;</span><span
Chris@1 2054 class="cmtt-8">&#x00A0;</span><span
Chris@1 2055 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2056 class="cmtt-8">&#x00A0;]</span><span
Chris@1 2057 class="cmtt-8">&#x00A0;[ordered]</span><span
Chris@1 2058 class="cmtt-8">&#x00A0;(1</span><span
Chris@1 2059 class="cmtt-8">&#x00A0;bit)</span>
Chris@1 2060 <br class="fancyvrb" /><a
Chris@1 2061 id="x1-51028r3"></a><span
Chris@1 2062 class="cmr-6">3</span><span
Chris@1 2063 class="cmtt-8">&#x00A0;</span><span
Chris@1 2064 class="cmtt-8">&#x00A0;</span>
Chris@1 2065 </div>
Chris@1 2066 <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span
Chris@1 2067 class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
Chris@1 2068 We now read the list of codeword lengths and store these lengths in the array
Chris@1 2069 <span
Chris@1 2070 class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span
Chris@1 2071 class="cmtt-12">[ordered] </span>flag
Chris@1 2072 is set or unset.
Chris@1 2073 <ul class="itemize1">
Chris@1 2074 <li class="itemize">If the <span
Chris@1 2075 class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
Chris@1 2076 needs to read each codeword length one-by-one.
Chris@1 2077 <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span
Chris@1 2078 class="cmtt-12">[sparse] </span>flag. This flag determines
Chris@1 2079 whether or not the codebook contains unused entries that are not to be included in
Chris@1 2080
Chris@1 2081
Chris@1 2082
Chris@1 2083 the codeword decode tree:
Chris@1 2084 <!--l. 82--><p class="noindent" >
Chris@1 2085 <div class="fancyvrb" id="fancyvrb10">
Chris@1 2086 <a
Chris@1 2087 id="x1-51030r1"></a><span
Chris@1 2088 class="cmr-6">1</span><span
Chris@1 2089 class="cmtt-8">&#x00A0;</span><span
Chris@1 2090 class="cmtt-8">&#x00A0;byte</span><span
Chris@1 2091 class="cmtt-8">&#x00A0;8:</span><span
Chris@1 2092 class="cmtt-8">&#x00A0;[</span><span
Chris@1 2093 class="cmtt-8">&#x00A0;</span><span
Chris@1 2094 class="cmtt-8">&#x00A0;</span><span
Chris@1 2095 class="cmtt-8">&#x00A0;</span><span
Chris@1 2096 class="cmtt-8">&#x00A0;</span><span
Chris@1 2097 class="cmtt-8">&#x00A0;</span><span
Chris@1 2098 class="cmtt-8">&#x00A0;</span><span
Chris@1 2099 class="cmtt-8">&#x00A0;</span><span
Chris@1 2100 class="cmtt-8">&#x00A0;</span><span
Chris@1 2101 class="cmtt-8">&#x00A0;</span><span
Chris@1 2102 class="cmtt-8">&#x00A0;</span><span
Chris@1 2103 class="cmtt-8">&#x00A0;</span><span
Chris@1 2104 class="cmtt-8">&#x00A0;</span><span
Chris@1 2105 class="cmtt-8">&#x00A0;X</span><span
Chris@1 2106 class="cmtt-8">&#x00A0;1</span><span
Chris@1 2107 class="cmtt-8">&#x00A0;]</span><span
Chris@1 2108 class="cmtt-8">&#x00A0;[sparse]</span><span
Chris@1 2109 class="cmtt-8">&#x00A0;flag</span><span
Chris@1 2110 class="cmtt-8">&#x00A0;(1</span><span
Chris@1 2111 class="cmtt-8">&#x00A0;bit)</span>
Chris@1 2112 </div>
Chris@1 2113 <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span
Chris@1 2114 class="cmtt-12">[codebook_entries] </span>codebook entries:
Chris@1 2115 <!--l. 89--><p class="noindent" >
Chris@1 2116 <div class="fancyvrb" id="fancyvrb11">
Chris@1 2117 <a
Chris@1 2118 id="x1-51032r1"></a><span
Chris@1 2119 class="cmr-6">1</span><span
Chris@1 2120 class="cmtt-8">&#x00A0;</span><span
Chris@1 2121 class="cmtt-8">&#x00A0;</span>
Chris@1 2122 <br class="fancyvrb" /><a
Chris@1 2123 id="x1-51034r2"></a><span
Chris@1 2124 class="cmr-6">2</span><span
Chris@1 2125 class="cmtt-8">&#x00A0;</span><span
Chris@1 2126 class="cmtt-8">&#x00A0;</span><span
Chris@1 2127 class="cmtt-8">&#x00A0;</span><span
Chris@1 2128 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 2129 class="cmtt-8">&#x00A0;if([sparse]</span><span
Chris@1 2130 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2131 class="cmtt-8">&#x00A0;set)</span><span
Chris@1 2132 class="cmtt-8">&#x00A0;</span><span
Chris@1 2133 class="cmsy-8">{</span>
Chris@1 2134 <br class="fancyvrb" /><a
Chris@1 2135 id="x1-51036r3"></a><span
Chris@1 2136 class="cmr-6">3</span><span
Chris@1 2137 class="cmtt-8">&#x00A0;</span><span
Chris@1 2138 class="cmtt-8">&#x00A0;</span>
Chris@1 2139 <br class="fancyvrb" /><a
Chris@1 2140 id="x1-51038r4"></a><span
Chris@1 2141 class="cmr-6">4</span><span
Chris@1 2142 class="cmtt-8">&#x00A0;</span><span
Chris@1 2143 class="cmtt-8">&#x00A0;</span><span
Chris@1 2144 class="cmtt-8">&#x00A0;</span><span
Chris@1 2145 class="cmtt-8">&#x00A0;</span><span
Chris@1 2146 class="cmtt-8">&#x00A0;</span><span
Chris@1 2147 class="cmtt-8">&#x00A0;</span><span
Chris@1 2148 class="cmtt-8">&#x00A0;</span><span
Chris@1 2149 class="cmtt-8">&#x00A0;</span><span
Chris@1 2150 class="cmtt-8">&#x00A0;</span><span
Chris@1 2151 class="cmtt-8">&#x00A0;</span><span
Chris@1 2152 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 2153 class="cmtt-8">&#x00A0;[flag]</span><span
Chris@1 2154 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2155 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2156 class="cmtt-8">&#x00A0;one</span><span
Chris@1 2157 class="cmtt-8">&#x00A0;bit;</span>
Chris@1 2158 <br class="fancyvrb" /><a
Chris@1 2159 id="x1-51040r5"></a><span
Chris@1 2160 class="cmr-6">5</span><span
Chris@1 2161 class="cmtt-8">&#x00A0;</span><span
Chris@1 2162 class="cmtt-8">&#x00A0;</span><span
Chris@1 2163 class="cmtt-8">&#x00A0;</span><span
Chris@1 2164 class="cmtt-8">&#x00A0;</span><span
Chris@1 2165 class="cmtt-8">&#x00A0;</span><span
Chris@1 2166 class="cmtt-8">&#x00A0;</span><span
Chris@1 2167 class="cmtt-8">&#x00A0;</span><span
Chris@1 2168 class="cmtt-8">&#x00A0;</span><span
Chris@1 2169 class="cmtt-8">&#x00A0;</span><span
Chris@1 2170 class="cmtt-8">&#x00A0;</span><span
Chris@1 2171 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 2172 class="cmtt-8">&#x00A0;if([flag]</span><span
Chris@1 2173 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2174 class="cmtt-8">&#x00A0;set)</span><span
Chris@1 2175 class="cmtt-8">&#x00A0;</span><span
Chris@1 2176 class="cmsy-8">{</span>
Chris@1 2177 <br class="fancyvrb" /><a
Chris@1 2178 id="x1-51042r6"></a><span
Chris@1 2179 class="cmr-6">6</span><span
Chris@1 2180 class="cmtt-8">&#x00A0;</span><span
Chris@1 2181 class="cmtt-8">&#x00A0;</span>
Chris@1 2182 <br class="fancyvrb" /><a
Chris@1 2183 id="x1-51044r7"></a><span
Chris@1 2184 class="cmr-6">7</span><span
Chris@1 2185 class="cmtt-8">&#x00A0;</span><span
Chris@1 2186 class="cmtt-8">&#x00A0;</span><span
Chris@1 2187 class="cmtt-8">&#x00A0;</span><span
Chris@1 2188 class="cmtt-8">&#x00A0;</span><span
Chris@1 2189 class="cmtt-8">&#x00A0;</span><span
Chris@1 2190 class="cmtt-8">&#x00A0;</span><span
Chris@1 2191 class="cmtt-8">&#x00A0;</span><span
Chris@1 2192 class="cmtt-8">&#x00A0;</span><span
Chris@1 2193 class="cmtt-8">&#x00A0;</span><span
Chris@1 2194 class="cmtt-8">&#x00A0;</span><span
Chris@1 2195 class="cmtt-8">&#x00A0;</span><span
Chris@1 2196 class="cmtt-8">&#x00A0;</span><span
Chris@1 2197 class="cmtt-8">&#x00A0;</span><span
Chris@1 2198 class="cmtt-8">&#x00A0;</span><span
Chris@1 2199 class="cmtt-8">&#x00A0;</span><span
Chris@1 2200 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 2201 class="cmtt-8">&#x00A0;[length]</span><span
Chris@1 2202 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2203 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2204 class="cmtt-8">&#x00A0;a</span><span
Chris@1 2205 class="cmtt-8">&#x00A0;five</span><span
Chris@1 2206 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 2207 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2208 class="cmtt-8">&#x00A0;integer;</span>
Chris@1 2209 <br class="fancyvrb" /><a
Chris@1 2210 id="x1-51046r8"></a><span
Chris@1 2211 class="cmr-6">8</span><span
Chris@1 2212 class="cmtt-8">&#x00A0;</span><span
Chris@1 2213 class="cmtt-8">&#x00A0;</span><span
Chris@1 2214 class="cmtt-8">&#x00A0;</span><span
Chris@1 2215 class="cmtt-8">&#x00A0;</span><span
Chris@1 2216 class="cmtt-8">&#x00A0;</span><span
Chris@1 2217 class="cmtt-8">&#x00A0;</span><span
Chris@1 2218 class="cmtt-8">&#x00A0;</span><span
Chris@1 2219 class="cmtt-8">&#x00A0;</span><span
Chris@1 2220 class="cmtt-8">&#x00A0;</span><span
Chris@1 2221 class="cmtt-8">&#x00A0;</span><span
Chris@1 2222 class="cmtt-8">&#x00A0;</span><span
Chris@1 2223 class="cmtt-8">&#x00A0;</span><span
Chris@1 2224 class="cmtt-8">&#x00A0;</span><span
Chris@1 2225 class="cmtt-8">&#x00A0;</span><span
Chris@1 2226 class="cmtt-8">&#x00A0;</span><span
Chris@1 2227 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 2228 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2229 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2230 class="cmtt-8">&#x00A0;for</span><span
Chris@1 2231 class="cmtt-8">&#x00A0;this</span><span
Chris@1 2232 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2233 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2234 class="cmtt-8">&#x00A0;[length]+1;</span>
Chris@1 2235 <br class="fancyvrb" /><a
Chris@1 2236 id="x1-51048r9"></a><span
Chris@1 2237 class="cmr-6">9</span><span
Chris@1 2238 class="cmtt-8">&#x00A0;</span><span
Chris@1 2239 class="cmtt-8">&#x00A0;</span>
Chris@1 2240 <br class="fancyvrb" /><a
Chris@1 2241 id="x1-51050r10"></a><span
Chris@1 2242 class="cmr-6">10</span><span
Chris@1 2243 class="cmtt-8">&#x00A0;</span><span
Chris@1 2244 class="cmtt-8">&#x00A0;</span><span
Chris@1 2245 class="cmtt-8">&#x00A0;</span><span
Chris@1 2246 class="cmtt-8">&#x00A0;</span><span
Chris@1 2247 class="cmtt-8">&#x00A0;</span><span
Chris@1 2248 class="cmtt-8">&#x00A0;</span><span
Chris@1 2249 class="cmtt-8">&#x00A0;</span><span
Chris@1 2250 class="cmtt-8">&#x00A0;</span><span
Chris@1 2251 class="cmtt-8">&#x00A0;</span><span
Chris@1 2252 class="cmtt-8">&#x00A0;</span><span
Chris@1 2253 class="cmtt-8">&#x00A0;</span><span
Chris@1 2254 class="cmtt-8">&#x00A0;</span><span
Chris@1 2255 class="cmtt-8">&#x00A0;</span><span
Chris@1 2256 class="cmtt-8">&#x00A0;</span><span
Chris@1 2257 class="cmsy-8">}</span><span
Chris@1 2258 class="cmtt-8">&#x00A0;else</span><span
Chris@1 2259 class="cmtt-8">&#x00A0;</span><span
Chris@1 2260 class="cmsy-8">{</span>
Chris@1 2261 <br class="fancyvrb" /><a
Chris@1 2262 id="x1-51052r11"></a><span
Chris@1 2263 class="cmr-6">11</span><span
Chris@1 2264 class="cmtt-8">&#x00A0;</span><span
Chris@1 2265 class="cmtt-8">&#x00A0;</span>
Chris@1 2266 <br class="fancyvrb" /><a
Chris@1 2267 id="x1-51054r12"></a><span
Chris@1 2268 class="cmr-6">12</span><span
Chris@1 2269 class="cmtt-8">&#x00A0;</span><span
Chris@1 2270 class="cmtt-8">&#x00A0;</span><span
Chris@1 2271 class="cmtt-8">&#x00A0;</span><span
Chris@1 2272 class="cmtt-8">&#x00A0;</span><span
Chris@1 2273 class="cmtt-8">&#x00A0;</span><span
Chris@1 2274 class="cmtt-8">&#x00A0;</span><span
Chris@1 2275 class="cmtt-8">&#x00A0;</span><span
Chris@1 2276 class="cmtt-8">&#x00A0;</span><span
Chris@1 2277 class="cmtt-8">&#x00A0;</span><span
Chris@1 2278 class="cmtt-8">&#x00A0;</span><span
Chris@1 2279 class="cmtt-8">&#x00A0;</span><span
Chris@1 2280 class="cmtt-8">&#x00A0;</span><span
Chris@1 2281 class="cmtt-8">&#x00A0;</span><span
Chris@1 2282 class="cmtt-8">&#x00A0;</span><span
Chris@1 2283 class="cmtt-8">&#x00A0;</span><span
Chris@1 2284 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 2285 class="cmtt-8">&#x00A0;this</span><span
Chris@1 2286 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2287 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2288 class="cmtt-8">&#x00A0;unused.</span><span
Chris@1 2289 class="cmtt-8">&#x00A0;</span><span
Chris@1 2290 class="cmtt-8">&#x00A0;mark</span><span
Chris@1 2291 class="cmtt-8">&#x00A0;it</span><span
Chris@1 2292 class="cmtt-8">&#x00A0;as</span><span
Chris@1 2293 class="cmtt-8">&#x00A0;such.</span>
Chris@1 2294 <br class="fancyvrb" /><a
Chris@1 2295 id="x1-51056r13"></a><span
Chris@1 2296 class="cmr-6">13</span><span
Chris@1 2297 class="cmtt-8">&#x00A0;</span><span
Chris@1 2298 class="cmtt-8">&#x00A0;</span>
Chris@1 2299 <br class="fancyvrb" /><a
Chris@1 2300 id="x1-51058r14"></a><span
Chris@1 2301 class="cmr-6">14</span><span
Chris@1 2302 class="cmtt-8">&#x00A0;</span><span
Chris@1 2303 class="cmtt-8">&#x00A0;</span><span
Chris@1 2304 class="cmtt-8">&#x00A0;</span><span
Chris@1 2305 class="cmtt-8">&#x00A0;</span><span
Chris@1 2306 class="cmtt-8">&#x00A0;</span><span
Chris@1 2307 class="cmtt-8">&#x00A0;</span><span
Chris@1 2308 class="cmtt-8">&#x00A0;</span><span
Chris@1 2309 class="cmtt-8">&#x00A0;</span><span
Chris@1 2310 class="cmtt-8">&#x00A0;</span><span
Chris@1 2311 class="cmtt-8">&#x00A0;</span><span
Chris@1 2312 class="cmtt-8">&#x00A0;</span><span
Chris@1 2313 class="cmtt-8">&#x00A0;</span><span
Chris@1 2314 class="cmtt-8">&#x00A0;</span><span
Chris@1 2315 class="cmtt-8">&#x00A0;</span><span
Chris@1 2316 class="cmsy-8">}</span>
Chris@1 2317 <br class="fancyvrb" /><a
Chris@1 2318 id="x1-51060r15"></a><span
Chris@1 2319 class="cmr-6">15</span><span
Chris@1 2320 class="cmtt-8">&#x00A0;</span><span
Chris@1 2321 class="cmtt-8">&#x00A0;</span>
Chris@1 2322 <br class="fancyvrb" /><a
Chris@1 2323 id="x1-51062r16"></a><span
Chris@1 2324 class="cmr-6">16</span><span
Chris@1 2325 class="cmtt-8">&#x00A0;</span><span
Chris@1 2326 class="cmtt-8">&#x00A0;</span><span
Chris@1 2327 class="cmtt-8">&#x00A0;</span><span
Chris@1 2328 class="cmtt-8">&#x00A0;</span><span
Chris@1 2329 class="cmtt-8">&#x00A0;</span><span
Chris@1 2330 class="cmtt-8">&#x00A0;</span><span
Chris@1 2331 class="cmtt-8">&#x00A0;</span><span
Chris@1 2332 class="cmsy-8">}</span><span
Chris@1 2333 class="cmtt-8">&#x00A0;else</span><span
Chris@1 2334 class="cmtt-8">&#x00A0;the</span><span
Chris@1 2335 class="cmtt-8">&#x00A0;sparse</span><span
Chris@1 2336 class="cmtt-8">&#x00A0;flag</span><span
Chris@1 2337 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2338 class="cmtt-8">&#x00A0;not</span><span
Chris@1 2339 class="cmtt-8">&#x00A0;set</span><span
Chris@1 2340 class="cmtt-8">&#x00A0;</span><span
Chris@1 2341 class="cmsy-8">{</span>
Chris@1 2342 <br class="fancyvrb" /><a
Chris@1 2343 id="x1-51064r17"></a><span
Chris@1 2344 class="cmr-6">17</span><span
Chris@1 2345 class="cmtt-8">&#x00A0;</span><span
Chris@1 2346 class="cmtt-8">&#x00A0;</span>
Chris@1 2347 <br class="fancyvrb" /><a
Chris@1 2348 id="x1-51066r18"></a><span
Chris@1 2349 class="cmr-6">18</span><span
Chris@1 2350 class="cmtt-8">&#x00A0;</span><span
Chris@1 2351 class="cmtt-8">&#x00A0;</span><span
Chris@1 2352 class="cmtt-8">&#x00A0;</span><span
Chris@1 2353 class="cmtt-8">&#x00A0;</span><span
Chris@1 2354 class="cmtt-8">&#x00A0;</span><span
Chris@1 2355 class="cmtt-8">&#x00A0;</span><span
Chris@1 2356 class="cmtt-8">&#x00A0;</span><span
Chris@1 2357 class="cmtt-8">&#x00A0;</span><span
Chris@1 2358 class="cmtt-8">&#x00A0;</span><span
Chris@1 2359 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 2360 class="cmtt-8">&#x00A0;[length]</span><span
Chris@1 2361 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2362 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2363 class="cmtt-8">&#x00A0;a</span><span
Chris@1 2364 class="cmtt-8">&#x00A0;five</span><span
Chris@1 2365 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 2366 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2367 class="cmtt-8">&#x00A0;integer;</span>
Chris@1 2368 <br class="fancyvrb" /><a
Chris@1 2369 id="x1-51068r19"></a><span
Chris@1 2370 class="cmr-6">19</span><span
Chris@1 2371 class="cmtt-8">&#x00A0;</span><span
Chris@1 2372 class="cmtt-8">&#x00A0;</span><span
Chris@1 2373 class="cmtt-8">&#x00A0;</span><span
Chris@1 2374 class="cmtt-8">&#x00A0;</span><span
Chris@1 2375 class="cmtt-8">&#x00A0;</span><span
Chris@1 2376 class="cmtt-8">&#x00A0;</span><span
Chris@1 2377 class="cmtt-8">&#x00A0;</span><span
Chris@1 2378 class="cmtt-8">&#x00A0;</span><span
Chris@1 2379 class="cmtt-8">&#x00A0;</span><span
Chris@1 2380 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 2381 class="cmtt-8">&#x00A0;the</span><span
Chris@1 2382 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2383 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2384 class="cmtt-8">&#x00A0;for</span><span
Chris@1 2385 class="cmtt-8">&#x00A0;this</span><span
Chris@1 2386 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2387 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2388 class="cmtt-8">&#x00A0;[length]+1;</span>
Chris@1 2389 <br class="fancyvrb" /><a
Chris@1 2390 id="x1-51070r20"></a><span
Chris@1 2391 class="cmr-6">20</span><span
Chris@1 2392 class="cmtt-8">&#x00A0;</span><span
Chris@1 2393 class="cmtt-8">&#x00A0;</span>
Chris@1 2394 <br class="fancyvrb" /><a
Chris@1 2395 id="x1-51072r21"></a><span
Chris@1 2396 class="cmr-6">21</span><span
Chris@1 2397 class="cmtt-8">&#x00A0;</span><span
Chris@1 2398 class="cmtt-8">&#x00A0;</span><span
Chris@1 2399 class="cmtt-8">&#x00A0;</span><span
Chris@1 2400 class="cmtt-8">&#x00A0;</span><span
Chris@1 2401 class="cmtt-8">&#x00A0;</span><span
Chris@1 2402 class="cmtt-8">&#x00A0;</span><span
Chris@1 2403 class="cmtt-8">&#x00A0;</span><span
Chris@1 2404 class="cmsy-8">}</span>
Chris@1 2405 <br class="fancyvrb" /><a
Chris@1 2406 id="x1-51074r22"></a><span
Chris@1 2407 class="cmr-6">22</span><span
Chris@1 2408 class="cmtt-8">&#x00A0;</span><span
Chris@1 2409 class="cmtt-8">&#x00A0;</span>
Chris@1 2410 </div>
Chris@1 2411 </li>
Chris@1 2412 <li class="itemize">If the <span
Chris@1 2413 class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
Chris@1 2414 ascending length order. Rather than reading a length for every codeword, the
Chris@1 2415 encoder reads the number of codewords per length. That is, beginning at entry
Chris@1 2416 zero:
Chris@1 2417 <!--l. 120--><p class="noindent" >
Chris@1 2418 <div class="fancyvrb" id="fancyvrb12">
Chris@1 2419 <a
Chris@1 2420 id="x1-51076r1"></a><span
Chris@1 2421 class="cmr-6">1</span><span
Chris@1 2422 class="cmtt-8">&#x00A0;</span><span
Chris@1 2423 class="cmtt-8">&#x00A0;</span><span
Chris@1 2424 class="cmtt-8">&#x00A0;</span><span
Chris@1 2425 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 2426 class="cmtt-8">&#x00A0;[current_entry]</span><span
Chris@1 2427 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2428 class="cmtt-8">&#x00A0;0;</span>
Chris@1 2429 <br class="fancyvrb" /><a
Chris@1 2430 id="x1-51078r2"></a><span
Chris@1 2431 class="cmr-6">2</span><span
Chris@1 2432 class="cmtt-8">&#x00A0;</span><span
Chris@1 2433 class="cmtt-8">&#x00A0;</span><span
Chris@1 2434 class="cmtt-8">&#x00A0;</span><span
Chris@1 2435 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 2436 class="cmtt-8">&#x00A0;[current_length]</span><span
Chris@1 2437 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2438 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2439 class="cmtt-8">&#x00A0;a</span><span
Chris@1 2440 class="cmtt-8">&#x00A0;five</span><span
Chris@1 2441 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 2442 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2443 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 2444 class="cmtt-8">&#x00A0;and</span><span
Chris@1 2445 class="cmtt-8">&#x00A0;add</span><span
Chris@1 2446 class="cmtt-8">&#x00A0;1;</span>
Chris@1 2447 <br class="fancyvrb" /><a
Chris@1 2448 id="x1-51080r3"></a><span
Chris@1 2449 class="cmr-6">3</span><span
Chris@1 2450 class="cmtt-8">&#x00A0;</span><span
Chris@1 2451 class="cmtt-8">&#x00A0;</span><span
Chris@1 2452 class="cmtt-8">&#x00A0;</span><span
Chris@1 2453 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 2454 class="cmtt-8">&#x00A0;[number]</span><span
Chris@1 2455 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2456 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2457 class="cmtt-8">&#x00A0;</span><a
Chris@1 2458 href="#x1-1170009.2.1"><span
Chris@1 2459 class="cmtt-8">ilog</span></a><span
Chris@1 2460 class="cmtt-8">([codebook_entries]</span><span
Chris@1 2461 class="cmtt-8">&#x00A0;-</span><span
Chris@1 2462 class="cmtt-8">&#x00A0;[current_entry])</span><span
Chris@1 2463 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 2464 class="cmtt-8">&#x00A0;as</span><span
Chris@1 2465 class="cmtt-8">&#x00A0;an</span><span
Chris@1 2466 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2467 class="cmtt-8">&#x00A0;integer</span>
Chris@1 2468 <br class="fancyvrb" /><a
Chris@1 2469 id="x1-51082r4"></a><span
Chris@1 2470 class="cmr-6">4</span><span
Chris@1 2471 class="cmtt-8">&#x00A0;</span><span
Chris@1 2472 class="cmtt-8">&#x00A0;</span><span
Chris@1 2473 class="cmtt-8">&#x00A0;</span><span
Chris@1 2474 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 2475 class="cmtt-8">&#x00A0;set</span><span
Chris@1 2476 class="cmtt-8">&#x00A0;the</span><span
Chris@1 2477 class="cmtt-8">&#x00A0;entries</span><span
Chris@1 2478 class="cmtt-8">&#x00A0;[current_entry]</span><span
Chris@1 2479 class="cmtt-8">&#x00A0;through</span><span
Chris@1 2480 class="cmtt-8">&#x00A0;[current_entry]+[number]-1,</span><span
Chris@1 2481 class="cmtt-8">&#x00A0;inclusive,</span>
Chris@1 2482 <br class="fancyvrb" /><a
Chris@1 2483 id="x1-51084r5"></a><span
Chris@1 2484 class="cmr-6">5</span><span
Chris@1 2485 class="cmtt-8">&#x00A0;</span><span
Chris@1 2486 class="cmtt-8">&#x00A0;</span><span
Chris@1 2487 class="cmtt-8">&#x00A0;</span><span
Chris@1 2488 class="cmtt-8">&#x00A0;</span><span
Chris@1 2489 class="cmtt-8">&#x00A0;</span><span
Chris@1 2490 class="cmtt-8">&#x00A0;of</span><span
Chris@1 2491 class="cmtt-8">&#x00A0;the</span><span
Chris@1 2492 class="cmtt-8">&#x00A0;[codebook_codeword_lengths]</span><span
Chris@1 2493 class="cmtt-8">&#x00A0;array</span><span
Chris@1 2494 class="cmtt-8">&#x00A0;to</span><span
Chris@1 2495 class="cmtt-8">&#x00A0;[current_length]</span>
Chris@1 2496 <br class="fancyvrb" /><a
Chris@1 2497 id="x1-51086r6"></a><span
Chris@1 2498 class="cmr-6">6</span><span
Chris@1 2499 class="cmtt-8">&#x00A0;</span><span
Chris@1 2500 class="cmtt-8">&#x00A0;</span><span
Chris@1 2501 class="cmtt-8">&#x00A0;</span><span
Chris@1 2502 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 2503 class="cmtt-8">&#x00A0;set</span><span
Chris@1 2504 class="cmtt-8">&#x00A0;[current_entry]</span><span
Chris@1 2505 class="cmtt-8">&#x00A0;to</span><span
Chris@1 2506 class="cmtt-8">&#x00A0;[number]</span><span
Chris@1 2507 class="cmtt-8">&#x00A0;+</span><span
Chris@1 2508 class="cmtt-8">&#x00A0;[current_entry]</span>
Chris@1 2509 <br class="fancyvrb" /><a
Chris@1 2510 id="x1-51088r7"></a><span
Chris@1 2511 class="cmr-6">7</span><span
Chris@1 2512 class="cmtt-8">&#x00A0;</span><span
Chris@1 2513 class="cmtt-8">&#x00A0;</span><span
Chris@1 2514 class="cmtt-8">&#x00A0;</span><span
Chris@1 2515 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 2516 class="cmtt-8">&#x00A0;increment</span><span
Chris@1 2517 class="cmtt-8">&#x00A0;[current_length]</span><span
Chris@1 2518 class="cmtt-8">&#x00A0;by</span><span
Chris@1 2519 class="cmtt-8">&#x00A0;1</span>
Chris@1 2520 <br class="fancyvrb" /><a
Chris@1 2521 id="x1-51090r8"></a><span
Chris@1 2522 class="cmr-6">8</span><span
Chris@1 2523 class="cmtt-8">&#x00A0;</span><span
Chris@1 2524 class="cmtt-8">&#x00A0;</span><span
Chris@1 2525 class="cmtt-8">&#x00A0;</span><span
Chris@1 2526 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 2527 class="cmtt-8">&#x00A0;if</span><span
Chris@1 2528 class="cmtt-8">&#x00A0;[current_entry]</span><span
Chris@1 2529 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2530 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 2531 class="cmtt-8">&#x00A0;than</span><span
Chris@1 2532 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
Chris@1 2533 class="cmtt-8">&#x00A0;ERROR</span><span
Chris@1 2534 class="cmtt-8">&#x00A0;CONDITION;</span>
Chris@1 2535 <br class="fancyvrb" /><a
Chris@1 2536 id="x1-51092r9"></a><span
Chris@1 2537 class="cmr-6">9</span><span
Chris@1 2538 class="cmtt-8">&#x00A0;</span><span
Chris@1 2539 class="cmtt-8">&#x00A0;</span><span
Chris@1 2540 class="cmtt-8">&#x00A0;</span><span
Chris@1 2541 class="cmtt-8">&#x00A0;</span><span
Chris@1 2542 class="cmtt-8">&#x00A0;</span><span
Chris@1 2543 class="cmtt-8">&#x00A0;the</span><span
Chris@1 2544 class="cmtt-8">&#x00A0;decoder</span><span
Chris@1 2545 class="cmtt-8">&#x00A0;will</span><span
Chris@1 2546 class="cmtt-8">&#x00A0;not</span><span
Chris@1 2547 class="cmtt-8">&#x00A0;be</span><span
Chris@1 2548 class="cmtt-8">&#x00A0;able</span><span
Chris@1 2549 class="cmtt-8">&#x00A0;to</span><span
Chris@1 2550 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2551 class="cmtt-8">&#x00A0;this</span><span
Chris@1 2552 class="cmtt-8">&#x00A0;stream.</span>
Chris@1 2553 <br class="fancyvrb" /><a
Chris@1 2554 id="x1-51094r10"></a><span
Chris@1 2555 class="cmr-6">10</span><span
Chris@1 2556 class="cmtt-8">&#x00A0;</span><span
Chris@1 2557 class="cmtt-8">&#x00A0;</span><span
Chris@1 2558 class="cmtt-8">&#x00A0;</span><span
Chris@1 2559 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 2560 class="cmtt-8">&#x00A0;if</span><span
Chris@1 2561 class="cmtt-8">&#x00A0;[current_entry]</span><span
Chris@1 2562 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2563 class="cmtt-8">&#x00A0;less</span><span
Chris@1 2564 class="cmtt-8">&#x00A0;than</span><span
Chris@1 2565 class="cmtt-8">&#x00A0;[codebook_entries],</span><span
Chris@1 2566 class="cmtt-8">&#x00A0;repeat</span><span
Chris@1 2567 class="cmtt-8">&#x00A0;process</span><span
Chris@1 2568 class="cmtt-8">&#x00A0;starting</span><span
Chris@1 2569 class="cmtt-8">&#x00A0;at</span><span
Chris@1 2570 class="cmtt-8">&#x00A0;3)</span>
Chris@1 2571 <br class="fancyvrb" /><a
Chris@1 2572 id="x1-51096r11"></a><span
Chris@1 2573 class="cmr-6">11</span><span
Chris@1 2574 class="cmtt-8">&#x00A0;</span><span
Chris@1 2575 class="cmtt-8">&#x00A0;</span><span
Chris@1 2576 class="cmtt-8">&#x00A0;</span><span
Chris@1 2577 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 2578 class="cmtt-8">&#x00A0;done.</span>
Chris@1 2579
Chris@1 2580
Chris@1 2581
Chris@1 2582 </div>
Chris@1 2583 </li></ul>
Chris@1 2584 <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
Chris@1 2585 I supports three lookup types:
Chris@1 2586 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 2587 1. </dt><dd
Chris@1 2588 class="enumerate-enumitem">No lookup
Chris@1 2589 </dd><dt class="enumerate-enumitem">
Chris@1 2590 2. </dt><dd
Chris@1 2591 class="enumerate-enumitem">Implicitly populated value mapping (lattice VQ)
Chris@1 2592 </dd><dt class="enumerate-enumitem">
Chris@1 2593 3. </dt><dd
Chris@1 2594 class="enumerate-enumitem">Explicitly populated value mapping (tessellated or &#8217;foam&#8217; VQ)</dd></dl>
Chris@1 2595 <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
Chris@1 2596 <div class="fancyvrb" id="fancyvrb13">
Chris@1 2597 <a
Chris@1 2598 id="x1-51101r1"></a><span
Chris@1 2599 class="cmr-6">1</span><span
Chris@1 2600 class="cmtt-8">&#x00A0;</span><span
Chris@1 2601 class="cmtt-8">&#x00A0;</span><span
Chris@1 2602 class="cmtt-8">&#x00A0;</span><span
Chris@1 2603 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 2604 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
Chris@1 2605 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2606 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2607 class="cmtt-8">&#x00A0;four</span><span
Chris@1 2608 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 2609 class="cmtt-8">&#x00A0;as</span><span
Chris@1 2610 class="cmtt-8">&#x00A0;an</span><span
Chris@1 2611 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2612 class="cmtt-8">&#x00A0;integer</span>
Chris@1 2613 </div>
Chris@1 2614 <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span
Chris@1 2615 class="cmtt-12">[codebook_lookup_type]</span>:
Chris@1 2616 <ul class="itemize1">
Chris@1 2617 <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
Chris@1 2618 </li>
Chris@1 2619 <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
Chris@1 2620 be read. Lookup type one reads a list of values that are permuted in a set pattern to
Chris@1 2621 build a list of vectors, each vector of order <span
Chris@1 2622 class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
Chris@1 2623 type two builds the same vector list, but reads each scalar for each vector explicitly,
Chris@1 2624 rather than building vectors from a smaller list of possible scalar values. Lookup
Chris@1 2625 decode proceeds as follows:
Chris@1 2626 <!--l. 168--><p class="noindent" >
Chris@1 2627 <div class="fancyvrb" id="fancyvrb14">
Chris@1 2628 <a
Chris@1 2629 id="x1-51103r1"></a><span
Chris@1 2630 class="cmr-6">1</span><span
Chris@1 2631 class="cmtt-8">&#x00A0;</span><span
Chris@1 2632 class="cmtt-8">&#x00A0;</span><span
Chris@1 2633 class="cmtt-8">&#x00A0;</span><span
Chris@1 2634 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 2635 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
Chris@1 2636 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2637 class="cmtt-8">&#x00A0;</span><a
Chris@1 2638 href="#x1-1180009.2.2"><span
Chris@1 2639 class="cmtt-8">float32_unpack</span></a><span
Chris@1 2640 class="cmtt-8">(</span><span
Chris@1 2641 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2642 class="cmtt-8">&#x00A0;32</span><span
Chris@1 2643 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 2644 class="cmtt-8">&#x00A0;as</span><span
Chris@1 2645 class="cmtt-8">&#x00A0;an</span><span
Chris@1 2646 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2647 class="cmtt-8">&#x00A0;integer)</span>
Chris@1 2648 <br class="fancyvrb" /><a
Chris@1 2649 id="x1-51105r2"></a><span
Chris@1 2650 class="cmr-6">2</span><span
Chris@1 2651 class="cmtt-8">&#x00A0;</span><span
Chris@1 2652 class="cmtt-8">&#x00A0;</span><span
Chris@1 2653 class="cmtt-8">&#x00A0;</span><span
Chris@1 2654 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 2655 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
Chris@1 2656 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2657 class="cmtt-8">&#x00A0;</span><a
Chris@1 2658 href="#x1-1180009.2.2"><span
Chris@1 2659 class="cmtt-8">float32_unpack</span></a><span
Chris@1 2660 class="cmtt-8">(</span><span
Chris@1 2661 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2662 class="cmtt-8">&#x00A0;32</span><span
Chris@1 2663 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 2664 class="cmtt-8">&#x00A0;as</span><span
Chris@1 2665 class="cmtt-8">&#x00A0;an</span><span
Chris@1 2666 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2667 class="cmtt-8">&#x00A0;integer)</span>
Chris@1 2668 <br class="fancyvrb" /><a
Chris@1 2669 id="x1-51107r3"></a><span
Chris@1 2670 class="cmr-6">3</span><span
Chris@1 2671 class="cmtt-8">&#x00A0;</span><span
Chris@1 2672 class="cmtt-8">&#x00A0;</span><span
Chris@1 2673 class="cmtt-8">&#x00A0;</span><span
Chris@1 2674 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 2675 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
Chris@1 2676 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2677 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2678 class="cmtt-8">&#x00A0;4</span><span
Chris@1 2679 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 2680 class="cmtt-8">&#x00A0;as</span><span
Chris@1 2681 class="cmtt-8">&#x00A0;an</span><span
Chris@1 2682 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2683 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 2684 class="cmtt-8">&#x00A0;and</span><span
Chris@1 2685 class="cmtt-8">&#x00A0;add</span><span
Chris@1 2686 class="cmtt-8">&#x00A0;1</span>
Chris@1 2687 <br class="fancyvrb" /><a
Chris@1 2688 id="x1-51109r4"></a><span
Chris@1 2689 class="cmr-6">4</span><span
Chris@1 2690 class="cmtt-8">&#x00A0;</span><span
Chris@1 2691 class="cmtt-8">&#x00A0;</span><span
Chris@1 2692 class="cmtt-8">&#x00A0;</span><span
Chris@1 2693 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 2694 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
Chris@1 2695 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2696 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2697 class="cmtt-8">&#x00A0;1</span><span
Chris@1 2698 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 2699 class="cmtt-8">&#x00A0;as</span><span
Chris@1 2700 class="cmtt-8">&#x00A0;a</span><span
Chris@1 2701 class="cmtt-8">&#x00A0;boolean</span><span
Chris@1 2702 class="cmtt-8">&#x00A0;flag</span>
Chris@1 2703 <br class="fancyvrb" /><a
Chris@1 2704 id="x1-51111r5"></a><span
Chris@1 2705 class="cmr-6">5</span><span
Chris@1 2706 class="cmtt-8">&#x00A0;</span><span
Chris@1 2707 class="cmtt-8">&#x00A0;</span>
Chris@1 2708 <br class="fancyvrb" /><a
Chris@1 2709 id="x1-51113r6"></a><span
Chris@1 2710 class="cmr-6">6</span><span
Chris@1 2711 class="cmtt-8">&#x00A0;</span><span
Chris@1 2712 class="cmtt-8">&#x00A0;</span><span
Chris@1 2713 class="cmtt-8">&#x00A0;</span><span
Chris@1 2714 class="cmtt-8">&#x00A0;if</span><span
Chris@1 2715 class="cmtt-8">&#x00A0;(</span><span
Chris@1 2716 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
Chris@1 2717 class="cmtt-8">&#x00A0;is</span><span
Chris@1 2718 class="cmtt-8">&#x00A0;1</span><span
Chris@1 2719 class="cmtt-8">&#x00A0;)</span><span
Chris@1 2720 class="cmtt-8">&#x00A0;</span><span
Chris@1 2721 class="cmsy-8">{</span>
Chris@1 2722 <br class="fancyvrb" /><a
Chris@1 2723 id="x1-51115r7"></a><span
Chris@1 2724 class="cmr-6">7</span><span
Chris@1 2725 class="cmtt-8">&#x00A0;</span><span
Chris@1 2726 class="cmtt-8">&#x00A0;</span>
Chris@1 2727 <br class="fancyvrb" /><a
Chris@1 2728 id="x1-51117r8"></a><span
Chris@1 2729 class="cmr-6">8</span><span
Chris@1 2730 class="cmtt-8">&#x00A0;</span><span
Chris@1 2731 class="cmtt-8">&#x00A0;</span><span
Chris@1 2732 class="cmtt-8">&#x00A0;</span><span
Chris@1 2733 class="cmtt-8">&#x00A0;</span><span
Chris@1 2734 class="cmtt-8">&#x00A0;</span><span
Chris@1 2735 class="cmtt-8">&#x00A0;</span><span
Chris@1 2736 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 2737 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
Chris@1 2738 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2739 class="cmtt-8">&#x00A0;</span><a
Chris@1 2740 href="#x1-1190009.2.3"><span
Chris@1 2741 class="cmtt-8">lookup1_values</span></a><span
Chris@1 2742 class="cmtt-8">([codebook_entries],</span><span
Chris@1 2743 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
Chris@1 2744 class="cmtt-8">&#x00A0;)</span>
Chris@1 2745 <br class="fancyvrb" /><a
Chris@1 2746 id="x1-51119r9"></a><span
Chris@1 2747 class="cmr-6">9</span><span
Chris@1 2748 class="cmtt-8">&#x00A0;</span><span
Chris@1 2749 class="cmtt-8">&#x00A0;</span>
Chris@1 2750 <br class="fancyvrb" /><a
Chris@1 2751 id="x1-51121r10"></a><span
Chris@1 2752 class="cmr-6">10</span><span
Chris@1 2753 class="cmtt-8">&#x00A0;</span><span
Chris@1 2754 class="cmtt-8">&#x00A0;</span><span
Chris@1 2755 class="cmtt-8">&#x00A0;</span><span
Chris@1 2756 class="cmtt-8">&#x00A0;</span><span
Chris@1 2757 class="cmsy-8">}</span><span
Chris@1 2758 class="cmtt-8">&#x00A0;else</span><span
Chris@1 2759 class="cmtt-8">&#x00A0;</span><span
Chris@1 2760 class="cmsy-8">{</span>
Chris@1 2761 <br class="fancyvrb" /><a
Chris@1 2762 id="x1-51123r11"></a><span
Chris@1 2763 class="cmr-6">11</span><span
Chris@1 2764 class="cmtt-8">&#x00A0;</span><span
Chris@1 2765 class="cmtt-8">&#x00A0;</span>
Chris@1 2766 <br class="fancyvrb" /><a
Chris@1 2767 id="x1-51125r12"></a><span
Chris@1 2768 class="cmr-6">12</span><span
Chris@1 2769 class="cmtt-8">&#x00A0;</span><span
Chris@1 2770 class="cmtt-8">&#x00A0;</span><span
Chris@1 2771 class="cmtt-8">&#x00A0;</span><span
Chris@1 2772 class="cmtt-8">&#x00A0;</span><span
Chris@1 2773 class="cmtt-8">&#x00A0;</span><span
Chris@1 2774 class="cmtt-8">&#x00A0;</span><span
Chris@1 2775 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 2776 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
Chris@1 2777 class="cmtt-8">&#x00A0;=</span><span
Chris@1 2778 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
Chris@1 2779 class="cmtt-8">&#x00A0;*</span><span
Chris@1 2780 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
Chris@1 2781 <br class="fancyvrb" /><a
Chris@1 2782 id="x1-51127r13"></a><span
Chris@1 2783 class="cmr-6">13</span><span
Chris@1 2784 class="cmtt-8">&#x00A0;</span><span
Chris@1 2785 class="cmtt-8">&#x00A0;</span>
Chris@1 2786 <br class="fancyvrb" /><a
Chris@1 2787 id="x1-51129r14"></a><span
Chris@1 2788 class="cmr-6">14</span><span
Chris@1 2789 class="cmtt-8">&#x00A0;</span><span
Chris@1 2790 class="cmtt-8">&#x00A0;</span><span
Chris@1 2791 class="cmtt-8">&#x00A0;</span><span
Chris@1 2792 class="cmtt-8">&#x00A0;</span><span
Chris@1 2793 class="cmsy-8">}</span>
Chris@1 2794 <br class="fancyvrb" /><a
Chris@1 2795 id="x1-51131r15"></a><span
Chris@1 2796 class="cmr-6">15</span><span
Chris@1 2797 class="cmtt-8">&#x00A0;</span><span
Chris@1 2798 class="cmtt-8">&#x00A0;</span>
Chris@1 2799 <br class="fancyvrb" /><a
Chris@1 2800 id="x1-51133r16"></a><span
Chris@1 2801 class="cmr-6">16</span><span
Chris@1 2802 class="cmtt-8">&#x00A0;</span><span
Chris@1 2803 class="cmtt-8">&#x00A0;</span><span
Chris@1 2804 class="cmtt-8">&#x00A0;</span><span
Chris@1 2805 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 2806 class="cmtt-8">&#x00A0;read</span><span
Chris@1 2807 class="cmtt-8">&#x00A0;a</span><span
Chris@1 2808 class="cmtt-8">&#x00A0;total</span><span
Chris@1 2809 class="cmtt-8">&#x00A0;of</span><span
Chris@1 2810 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
Chris@1 2811 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 2812 class="cmtt-8">&#x00A0;integers</span><span
Chris@1 2813 class="cmtt-8">&#x00A0;of</span><span
Chris@1 2814 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
Chris@1 2815 class="cmtt-8">&#x00A0;each;</span>
Chris@1 2816
Chris@1 2817
Chris@1 2818
Chris@1 2819 <br class="fancyvrb" /><a
Chris@1 2820 id="x1-51135r17"></a><span
Chris@1 2821 class="cmr-6">17</span><span
Chris@1 2822 class="cmtt-8">&#x00A0;</span><span
Chris@1 2823 class="cmtt-8">&#x00A0;</span><span
Chris@1 2824 class="cmtt-8">&#x00A0;</span><span
Chris@1 2825 class="cmtt-8">&#x00A0;</span><span
Chris@1 2826 class="cmtt-8">&#x00A0;</span><span
Chris@1 2827 class="cmtt-8">&#x00A0;</span><span
Chris@1 2828 class="cmtt-8">&#x00A0;store</span><span
Chris@1 2829 class="cmtt-8">&#x00A0;these</span><span
Chris@1 2830 class="cmtt-8">&#x00A0;in</span><span
Chris@1 2831 class="cmtt-8">&#x00A0;order</span><span
Chris@1 2832 class="cmtt-8">&#x00A0;in</span><span
Chris@1 2833 class="cmtt-8">&#x00A0;the</span><span
Chris@1 2834 class="cmtt-8">&#x00A0;array</span><span
Chris@1 2835 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span>
Chris@1 2836 </div>
Chris@1 2837 </li>
Chris@1 2838 <li class="itemize">A <span
Chris@1 2839 class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
Chris@1 2840 not decodable by the specification in this document.
Chris@1 2841 </li></ul>
Chris@1 2842 <!--l. 195--><p class="noindent" >An &#8217;end of packet&#8217; during any read operation in the above steps is considered an error condition
Chris@1 2843 rendering the stream undecodable.
Chris@1 2844 <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 2845 id="x1-520003.2.1"></a><span
Chris@1 2846 class="cmbx-12">Huffman decision tree representation</span></span>
Chris@1 2847 The <span
Chris@1 2848 class="cmtt-12">[codebook_codeword_lengths] </span>array and <span
Chris@1 2849 class="cmtt-12">[codebook_entries] </span>value uniquely define the
Chris@1 2850 Huffman decision tree used for entropy decoding.
Chris@1 2851 <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
Chris@1 2852 codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
Chris@1 2853 possible. Assume the following codeword length list:
Chris@1 2854 <!--l. 209--><p class="noindent" >
Chris@1 2855 <div class="fancyvrb" id="fancyvrb15">
Chris@1 2856 <a
Chris@1 2857 id="x1-52002r1"></a><span
Chris@1 2858 class="cmr-6">1</span><span
Chris@1 2859 class="cmtt-8">&#x00A0;</span><span
Chris@1 2860 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2861 class="cmtt-8">&#x00A0;0:</span><span
Chris@1 2862 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2863 class="cmtt-8">&#x00A0;2</span>
Chris@1 2864 <br class="fancyvrb" /><a
Chris@1 2865 id="x1-52004r2"></a><span
Chris@1 2866 class="cmr-6">2</span><span
Chris@1 2867 class="cmtt-8">&#x00A0;</span><span
Chris@1 2868 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2869 class="cmtt-8">&#x00A0;1:</span><span
Chris@1 2870 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2871 class="cmtt-8">&#x00A0;4</span>
Chris@1 2872 <br class="fancyvrb" /><a
Chris@1 2873 id="x1-52006r3"></a><span
Chris@1 2874 class="cmr-6">3</span><span
Chris@1 2875 class="cmtt-8">&#x00A0;</span><span
Chris@1 2876 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2877 class="cmtt-8">&#x00A0;2:</span><span
Chris@1 2878 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2879 class="cmtt-8">&#x00A0;4</span>
Chris@1 2880 <br class="fancyvrb" /><a
Chris@1 2881 id="x1-52008r4"></a><span
Chris@1 2882 class="cmr-6">4</span><span
Chris@1 2883 class="cmtt-8">&#x00A0;</span><span
Chris@1 2884 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2885 class="cmtt-8">&#x00A0;3:</span><span
Chris@1 2886 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2887 class="cmtt-8">&#x00A0;4</span>
Chris@1 2888 <br class="fancyvrb" /><a
Chris@1 2889 id="x1-52010r5"></a><span
Chris@1 2890 class="cmr-6">5</span><span
Chris@1 2891 class="cmtt-8">&#x00A0;</span><span
Chris@1 2892 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2893 class="cmtt-8">&#x00A0;4:</span><span
Chris@1 2894 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2895 class="cmtt-8">&#x00A0;4</span>
Chris@1 2896 <br class="fancyvrb" /><a
Chris@1 2897 id="x1-52012r6"></a><span
Chris@1 2898 class="cmr-6">6</span><span
Chris@1 2899 class="cmtt-8">&#x00A0;</span><span
Chris@1 2900 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2901 class="cmtt-8">&#x00A0;5:</span><span
Chris@1 2902 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2903 class="cmtt-8">&#x00A0;2</span>
Chris@1 2904 <br class="fancyvrb" /><a
Chris@1 2905 id="x1-52014r7"></a><span
Chris@1 2906 class="cmr-6">7</span><span
Chris@1 2907 class="cmtt-8">&#x00A0;</span><span
Chris@1 2908 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2909 class="cmtt-8">&#x00A0;6:</span><span
Chris@1 2910 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2911 class="cmtt-8">&#x00A0;3</span>
Chris@1 2912 <br class="fancyvrb" /><a
Chris@1 2913 id="x1-52016r8"></a><span
Chris@1 2914 class="cmr-6">8</span><span
Chris@1 2915 class="cmtt-8">&#x00A0;</span><span
Chris@1 2916 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2917 class="cmtt-8">&#x00A0;7:</span><span
Chris@1 2918 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2919 class="cmtt-8">&#x00A0;3</span>
Chris@1 2920 </div>
Chris@1 2921 <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
Chris@1 2922 in the following codeword list:
Chris@1 2923 <!--l. 223--><p class="noindent" >
Chris@1 2924 <div class="fancyvrb" id="fancyvrb16">
Chris@1 2925 <a
Chris@1 2926 id="x1-52018r1"></a><span
Chris@1 2927 class="cmr-6">1</span><span
Chris@1 2928 class="cmtt-8">&#x00A0;</span><span
Chris@1 2929 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2930 class="cmtt-8">&#x00A0;0:</span><span
Chris@1 2931 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2932 class="cmtt-8">&#x00A0;2</span><span
Chris@1 2933 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2934 class="cmtt-8">&#x00A0;00</span>
Chris@1 2935 <br class="fancyvrb" /><a
Chris@1 2936 id="x1-52020r2"></a><span
Chris@1 2937 class="cmr-6">2</span><span
Chris@1 2938 class="cmtt-8">&#x00A0;</span><span
Chris@1 2939 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2940 class="cmtt-8">&#x00A0;1:</span><span
Chris@1 2941 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2942 class="cmtt-8">&#x00A0;4</span><span
Chris@1 2943 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2944 class="cmtt-8">&#x00A0;0100</span>
Chris@1 2945 <br class="fancyvrb" /><a
Chris@1 2946 id="x1-52022r3"></a><span
Chris@1 2947 class="cmr-6">3</span><span
Chris@1 2948 class="cmtt-8">&#x00A0;</span><span
Chris@1 2949 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2950 class="cmtt-8">&#x00A0;2:</span><span
Chris@1 2951 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2952 class="cmtt-8">&#x00A0;4</span><span
Chris@1 2953 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2954 class="cmtt-8">&#x00A0;0101</span>
Chris@1 2955 <br class="fancyvrb" /><a
Chris@1 2956 id="x1-52024r4"></a><span
Chris@1 2957 class="cmr-6">4</span><span
Chris@1 2958 class="cmtt-8">&#x00A0;</span><span
Chris@1 2959 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2960 class="cmtt-8">&#x00A0;3:</span><span
Chris@1 2961 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2962 class="cmtt-8">&#x00A0;4</span><span
Chris@1 2963 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2964 class="cmtt-8">&#x00A0;0110</span>
Chris@1 2965 <br class="fancyvrb" /><a
Chris@1 2966 id="x1-52026r5"></a><span
Chris@1 2967 class="cmr-6">5</span><span
Chris@1 2968 class="cmtt-8">&#x00A0;</span><span
Chris@1 2969 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2970 class="cmtt-8">&#x00A0;4:</span><span
Chris@1 2971 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2972 class="cmtt-8">&#x00A0;4</span><span
Chris@1 2973 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2974 class="cmtt-8">&#x00A0;0111</span>
Chris@1 2975 <br class="fancyvrb" /><a
Chris@1 2976 id="x1-52028r6"></a><span
Chris@1 2977 class="cmr-6">6</span><span
Chris@1 2978 class="cmtt-8">&#x00A0;</span><span
Chris@1 2979 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2980 class="cmtt-8">&#x00A0;5:</span><span
Chris@1 2981 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2982 class="cmtt-8">&#x00A0;2</span><span
Chris@1 2983 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2984 class="cmtt-8">&#x00A0;10</span>
Chris@1 2985 <br class="fancyvrb" /><a
Chris@1 2986 id="x1-52030r7"></a><span
Chris@1 2987 class="cmr-6">7</span><span
Chris@1 2988 class="cmtt-8">&#x00A0;</span><span
Chris@1 2989 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 2990 class="cmtt-8">&#x00A0;6:</span><span
Chris@1 2991 class="cmtt-8">&#x00A0;length</span><span
Chris@1 2992 class="cmtt-8">&#x00A0;3</span><span
Chris@1 2993 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 2994 class="cmtt-8">&#x00A0;110</span>
Chris@1 2995 <br class="fancyvrb" /><a
Chris@1 2996 id="x1-52032r8"></a><span
Chris@1 2997 class="cmr-6">8</span><span
Chris@1 2998 class="cmtt-8">&#x00A0;</span><span
Chris@1 2999 class="cmtt-8">&#x00A0;entry</span><span
Chris@1 3000 class="cmtt-8">&#x00A0;7:</span><span
Chris@1 3001 class="cmtt-8">&#x00A0;length</span><span
Chris@1 3002 class="cmtt-8">&#x00A0;3</span><span
Chris@1 3003 class="cmtt-8">&#x00A0;codeword</span><span
Chris@1 3004 class="cmtt-8">&#x00A0;111</span>
Chris@1 3005 </div>
Chris@1 3006
Chris@1 3007
Chris@1 3008
Chris@1 3009 <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a
Chris@1 3010 id="x1-530003.2.1"></a><span
Chris@1 3011 class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
Chris@1 3012 be read and used bit by bit from left to right, thus the codeword &#8217;001&#8217; is the bit string &#8217;zero, zero,
Chris@1 3013 one&#8217;. When determining &#8217;lowest possible value&#8217; in the assignment definition above, the leftmost
Chris@1 3014 bit is the MSb.
Chris@1 3015 <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
Chris@1 3016 numbers equivalent to the leaves numbered left-to-right:
Chris@1 3017 <div class="center"
Chris@1 3018 >
Chris@1 3019 <!--l. 247--><p class="noindent" >
Chris@1 3020
Chris@1 3021 <!--l. 248--><p class="noindent" ><img
Chris@1 3022 src="hufftree.png" alt="PIC"
Chris@1 3023 >
Chris@1 3024 <br /> <div class="caption"
Chris@1 3025 ><span class="id">Figure&#x00A0;4: </span><span
Chris@1 3026 class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
Chris@1 3027 </div>
Chris@1 3028 <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
Chris@1 3029 possible position.
Chris@1 3030 <!--l. 256--><p class="noindent" >Note that it&#8217;s possible to underspecify or overspecify a Huffman tree via the length list.
Chris@1 3031 In the above example, if codeword seven were eliminated, it&#8217;s clear that the tree is
Chris@1 3032 unfinished:
Chris@1 3033 <div class="center"
Chris@1 3034 >
Chris@1 3035 <!--l. 260--><p class="noindent" >
Chris@1 3036
Chris@1 3037 <!--l. 261--><p class="noindent" ><img
Chris@1 3038 src="hufftree-under.png" alt="PIC"
Chris@1 3039 >
Chris@1 3040 <br /> <div class="caption"
Chris@1 3041 ><span class="id">Figure&#x00A0;5: </span><span
Chris@1 3042 class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
Chris@1 3043 </div>
Chris@1 3044 <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it&#8217;s clear that the tree is fully populated and a ninth
Chris@1 3045 codeword is impossible. Both underspecified and overspecified trees are an error condition
Chris@1 3046 rendering the stream undecodable. Take special care that a codebook with a single used
Chris@1 3047 entry is handled properly; it consists of a single codework of zero bits and &#8217;reading&#8217;
Chris@1 3048 a value out of such a codebook always returns the single used value and sinks zero
Chris@1 3049 bits.
Chris@1 3050 <!--l. 274--><p class="noindent" >Codebook entries marked &#8217;unused&#8217; are simply skipped in the assigning process. They have no
Chris@1 3051 codeword and do not appear in the decision tree, thus it&#8217;s impossible for any bit pattern read
Chris@1 3052 from the stream to decode to that entry number.
Chris@1 3053
Chris@1 3054
Chris@1 3055
Chris@1 3056 <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3057 id="x1-540003.2.1"></a><span
Chris@1 3058 class="cmbx-12">VQ lookup table vector representation</span></span>
Chris@1 3059 Unpacking the VQ lookup table vectors relies on the following values:
Chris@1 3060 <div class="fancyvrb" id="fancyvrb17">
Chris@1 3061 <a
Chris@1 3062 id="x1-54002r1"></a><span
Chris@1 3063 class="cmr-6">1</span><span
Chris@1 3064 class="cmtt-8">&#x00A0;</span><span
Chris@1 3065 class="cmtt-8">&#x00A0;the</span><span
Chris@1 3066 class="cmtt-8">&#x00A0;[codebook\_multiplicands]</span><span
Chris@1 3067 class="cmtt-8">&#x00A0;array</span>
Chris@1 3068 <br class="fancyvrb" /><a
Chris@1 3069 id="x1-54004r2"></a><span
Chris@1 3070 class="cmr-6">2</span><span
Chris@1 3071 class="cmtt-8">&#x00A0;</span><span
Chris@1 3072 class="cmtt-8">&#x00A0;[codebook\_minimum\_value]</span>
Chris@1 3073 <br class="fancyvrb" /><a
Chris@1 3074 id="x1-54006r3"></a><span
Chris@1 3075 class="cmr-6">3</span><span
Chris@1 3076 class="cmtt-8">&#x00A0;</span><span
Chris@1 3077 class="cmtt-8">&#x00A0;[codebook\_delta\_value]</span>
Chris@1 3078 <br class="fancyvrb" /><a
Chris@1 3079 id="x1-54008r4"></a><span
Chris@1 3080 class="cmr-6">4</span><span
Chris@1 3081 class="cmtt-8">&#x00A0;</span><span
Chris@1 3082 class="cmtt-8">&#x00A0;[codebook\_sequence\_p]</span>
Chris@1 3083 <br class="fancyvrb" /><a
Chris@1 3084 id="x1-54010r5"></a><span
Chris@1 3085 class="cmr-6">5</span><span
Chris@1 3086 class="cmtt-8">&#x00A0;</span><span
Chris@1 3087 class="cmtt-8">&#x00A0;[codebook\_lookup\_type]</span>
Chris@1 3088 <br class="fancyvrb" /><a
Chris@1 3089 id="x1-54012r6"></a><span
Chris@1 3090 class="cmr-6">6</span><span
Chris@1 3091 class="cmtt-8">&#x00A0;</span><span
Chris@1 3092 class="cmtt-8">&#x00A0;[codebook\_entries]</span>
Chris@1 3093 <br class="fancyvrb" /><a
Chris@1 3094 id="x1-54014r7"></a><span
Chris@1 3095 class="cmr-6">7</span><span
Chris@1 3096 class="cmtt-8">&#x00A0;</span><span
Chris@1 3097 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
Chris@1 3098 <br class="fancyvrb" /><a
Chris@1 3099 id="x1-54016r8"></a><span
Chris@1 3100 class="cmr-6">8</span><span
Chris@1 3101 class="cmtt-8">&#x00A0;</span><span
Chris@1 3102 class="cmtt-8">&#x00A0;[codebook\_lookup\_values]</span>
Chris@1 3103 </div>
Chris@1 3104 <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
Chris@1 3105 <span
Chris@1 3106 class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
Chris@1 3107 during audio packet decode in a VQ context.
Chris@1 3108 <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3109 id="x1-550003.2.1"></a><span
Chris@1 3110 class="cmbx-12">Vector value decode: Lookup type 1</span></span>
Chris@1 3111 Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
Chris@1 3112 scalar values. Calculate (unpack) the final values of a codebook entry vector from
Chris@1 3113 the entries in <span
Chris@1 3114 class="cmtt-12">[codebook_multiplicands] </span>as follows (<span
Chris@1 3115 class="cmtt-12">[value_vector] </span>is the output
Chris@1 3116 vector representing the vector of values for entry number <span
Chris@1 3117 class="cmtt-12">[lookup_offset] </span>in this
Chris@1 3118 codebook):
Chris@1 3119 <!--l. 311--><p class="noindent" >
Chris@1 3120 <div class="fancyvrb" id="fancyvrb18">
Chris@1 3121 <a
Chris@1 3122 id="x1-55002r1"></a><span
Chris@1 3123 class="cmr-6">1</span><span
Chris@1 3124 class="cmtt-8">&#x00A0;</span><span
Chris@1 3125 class="cmtt-8">&#x00A0;</span><span
Chris@1 3126 class="cmtt-8">&#x00A0;</span><span
Chris@1 3127 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 3128 class="cmtt-8">&#x00A0;[last]</span><span
Chris@1 3129 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3130 class="cmtt-8">&#x00A0;0;</span>
Chris@1 3131 <br class="fancyvrb" /><a
Chris@1 3132 id="x1-55004r2"></a><span
Chris@1 3133 class="cmr-6">2</span><span
Chris@1 3134 class="cmtt-8">&#x00A0;</span><span
Chris@1 3135 class="cmtt-8">&#x00A0;</span><span
Chris@1 3136 class="cmtt-8">&#x00A0;</span><span
Chris@1 3137 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 3138 class="cmtt-8">&#x00A0;[index_divisor]</span><span
Chris@1 3139 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3140 class="cmtt-8">&#x00A0;1;</span>
Chris@1 3141 <br class="fancyvrb" /><a
Chris@1 3142 id="x1-55006r3"></a><span
Chris@1 3143 class="cmr-6">3</span><span
Chris@1 3144 class="cmtt-8">&#x00A0;</span><span
Chris@1 3145 class="cmtt-8">&#x00A0;</span><span
Chris@1 3146 class="cmtt-8">&#x00A0;</span><span
Chris@1 3147 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 3148 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 3149 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 3150 class="cmtt-8">&#x00A0;over</span><span
Chris@1 3151 class="cmtt-8">&#x00A0;the</span><span
Chris@1 3152 class="cmtt-8">&#x00A0;range</span><span
Chris@1 3153 class="cmtt-8">&#x00A0;0</span><span
Chris@1 3154 class="cmtt-8">&#x00A0;...</span><span
Chris@1 3155 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
Chris@1 3156 class="cmtt-8">&#x00A0;(once</span><span
Chris@1 3157 class="cmtt-8">&#x00A0;for</span><span
Chris@1 3158 class="cmtt-8">&#x00A0;each</span><span
Chris@1 3159 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 3160 class="cmtt-8">&#x00A0;value</span><span
Chris@1 3161 class="cmtt-8">&#x00A0;in</span><span
Chris@1 3162 class="cmtt-8">&#x00A0;the</span><span
Chris@1 3163 class="cmtt-8">&#x00A0;value</span><span
Chris@1 3164 class="cmtt-8">&#x00A0;vector)</span><span
Chris@1 3165 class="cmtt-8">&#x00A0;</span><span
Chris@1 3166 class="cmsy-8">{</span>
Chris@1 3167 <br class="fancyvrb" /><a
Chris@1 3168 id="x1-55008r4"></a><span
Chris@1 3169 class="cmr-6">4</span><span
Chris@1 3170 class="cmtt-8">&#x00A0;</span><span
Chris@1 3171 class="cmtt-8">&#x00A0;</span>
Chris@1 3172 <br class="fancyvrb" /><a
Chris@1 3173 id="x1-55010r5"></a><span
Chris@1 3174 class="cmr-6">5</span><span
Chris@1 3175 class="cmtt-8">&#x00A0;</span><span
Chris@1 3176 class="cmtt-8">&#x00A0;</span><span
Chris@1 3177 class="cmtt-8">&#x00A0;</span><span
Chris@1 3178 class="cmtt-8">&#x00A0;</span><span
Chris@1 3179 class="cmtt-8">&#x00A0;</span><span
Chris@1 3180 class="cmtt-8">&#x00A0;</span><span
Chris@1 3181 class="cmtt-8">&#x00A0;</span><span
Chris@1 3182 class="cmtt-8">&#x00A0;</span><span
Chris@1 3183 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 3184 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
Chris@1 3185 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3186 class="cmtt-8">&#x00A0;(</span><span
Chris@1 3187 class="cmtt-8">&#x00A0;[lookup_offset]</span><span
Chris@1 3188 class="cmtt-8">&#x00A0;divided</span><span
Chris@1 3189 class="cmtt-8">&#x00A0;by</span><span
Chris@1 3190 class="cmtt-8">&#x00A0;[index_divisor]</span><span
Chris@1 3191 class="cmtt-8">&#x00A0;using</span><span
Chris@1 3192 class="cmtt-8">&#x00A0;integer</span>
Chris@1 3193 <br class="fancyvrb" /><a
Chris@1 3194 id="x1-55012r6"></a><span
Chris@1 3195 class="cmr-6">6</span><span
Chris@1 3196 class="cmtt-8">&#x00A0;</span><span
Chris@1 3197 class="cmtt-8">&#x00A0;</span><span
Chris@1 3198 class="cmtt-8">&#x00A0;</span><span
Chris@1 3199 class="cmtt-8">&#x00A0;</span><span
Chris@1 3200 class="cmtt-8">&#x00A0;</span><span
Chris@1 3201 class="cmtt-8">&#x00A0;</span><span
Chris@1 3202 class="cmtt-8">&#x00A0;</span><span
Chris@1 3203 class="cmtt-8">&#x00A0;</span><span
Chris@1 3204 class="cmtt-8">&#x00A0;</span><span
Chris@1 3205 class="cmtt-8">&#x00A0;</span><span
Chris@1 3206 class="cmtt-8">&#x00A0;</span><span
Chris@1 3207 class="cmtt-8">&#x00A0;division</span><span
Chris@1 3208 class="cmtt-8">&#x00A0;)</span><span
Chris@1 3209 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 3210 class="cmtt-8">&#x00A0;modulo</span><span
Chris@1 3211 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
Chris@1 3212 <br class="fancyvrb" /><a
Chris@1 3213 id="x1-55014r7"></a><span
Chris@1 3214 class="cmr-6">7</span><span
Chris@1 3215 class="cmtt-8">&#x00A0;</span><span
Chris@1 3216 class="cmtt-8">&#x00A0;</span>
Chris@1 3217 <br class="fancyvrb" /><a
Chris@1 3218 id="x1-55016r8"></a><span
Chris@1 3219 class="cmr-6">8</span><span
Chris@1 3220 class="cmtt-8">&#x00A0;</span><span
Chris@1 3221 class="cmtt-8">&#x00A0;</span><span
Chris@1 3222 class="cmtt-8">&#x00A0;</span><span
Chris@1 3223 class="cmtt-8">&#x00A0;</span><span
Chris@1 3224 class="cmtt-8">&#x00A0;</span><span
Chris@1 3225 class="cmtt-8">&#x00A0;</span><span
Chris@1 3226 class="cmtt-8">&#x00A0;</span><span
Chris@1 3227 class="cmtt-8">&#x00A0;</span><span
Chris@1 3228 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 3229 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 3230 class="cmtt-8">&#x00A0;[value_vector]</span><span
Chris@1 3231 class="cmtt-8">&#x00A0;element</span><span
Chris@1 3232 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 3233 class="cmtt-8">&#x00A0;=</span>
Chris@1 3234 <br class="fancyvrb" /><a
Chris@1 3235 id="x1-55018r9"></a><span
Chris@1 3236 class="cmr-6">9</span><span
Chris@1 3237 class="cmtt-8">&#x00A0;</span><span
Chris@1 3238 class="cmtt-8">&#x00A0;</span><span
Chris@1 3239 class="cmtt-8">&#x00A0;</span><span
Chris@1 3240 class="cmtt-8">&#x00A0;</span><span
Chris@1 3241 class="cmtt-8">&#x00A0;</span><span
Chris@1 3242 class="cmtt-8">&#x00A0;</span><span
Chris@1 3243 class="cmtt-8">&#x00A0;</span><span
Chris@1 3244 class="cmtt-8">&#x00A0;</span><span
Chris@1 3245 class="cmtt-8">&#x00A0;</span><span
Chris@1 3246 class="cmtt-8">&#x00A0;</span><span
Chris@1 3247 class="cmtt-8">&#x00A0;</span><span
Chris@1 3248 class="cmtt-8">&#x00A0;</span><span
Chris@1 3249 class="cmtt-8">&#x00A0;</span><span
Chris@1 3250 class="cmtt-8">&#x00A0;(</span><span
Chris@1 3251 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
Chris@1 3252 class="cmtt-8">&#x00A0;array</span><span
Chris@1 3253 class="cmtt-8">&#x00A0;element</span><span
Chris@1 3254 class="cmtt-8">&#x00A0;number</span><span
Chris@1 3255 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
Chris@1 3256 class="cmtt-8">&#x00A0;)</span><span
Chris@1 3257 class="cmtt-8">&#x00A0;*</span>
Chris@1 3258 <br class="fancyvrb" /><a
Chris@1 3259 id="x1-55020r10"></a><span
Chris@1 3260 class="cmr-6">10</span><span
Chris@1 3261 class="cmtt-8">&#x00A0;</span><span
Chris@1 3262 class="cmtt-8">&#x00A0;</span><span
Chris@1 3263 class="cmtt-8">&#x00A0;</span><span
Chris@1 3264 class="cmtt-8">&#x00A0;</span><span
Chris@1 3265 class="cmtt-8">&#x00A0;</span><span
Chris@1 3266 class="cmtt-8">&#x00A0;</span><span
Chris@1 3267 class="cmtt-8">&#x00A0;</span><span
Chris@1 3268 class="cmtt-8">&#x00A0;</span><span
Chris@1 3269 class="cmtt-8">&#x00A0;</span><span
Chris@1 3270 class="cmtt-8">&#x00A0;</span><span
Chris@1 3271 class="cmtt-8">&#x00A0;</span><span
Chris@1 3272 class="cmtt-8">&#x00A0;</span><span
Chris@1 3273 class="cmtt-8">&#x00A0;</span><span
Chris@1 3274 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
Chris@1 3275 class="cmtt-8">&#x00A0;+</span><span
Chris@1 3276 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
Chris@1 3277 class="cmtt-8">&#x00A0;+</span><span
Chris@1 3278 class="cmtt-8">&#x00A0;[last];</span>
Chris@1 3279 <br class="fancyvrb" /><a
Chris@1 3280 id="x1-55022r11"></a><span
Chris@1 3281 class="cmr-6">11</span><span
Chris@1 3282 class="cmtt-8">&#x00A0;</span><span
Chris@1 3283 class="cmtt-8">&#x00A0;</span>
Chris@1 3284 <br class="fancyvrb" /><a
Chris@1 3285 id="x1-55024r12"></a><span
Chris@1 3286 class="cmr-6">12</span><span
Chris@1 3287 class="cmtt-8">&#x00A0;</span><span
Chris@1 3288 class="cmtt-8">&#x00A0;</span><span
Chris@1 3289 class="cmtt-8">&#x00A0;</span><span
Chris@1 3290 class="cmtt-8">&#x00A0;</span><span
Chris@1 3291 class="cmtt-8">&#x00A0;</span><span
Chris@1 3292 class="cmtt-8">&#x00A0;</span><span
Chris@1 3293 class="cmtt-8">&#x00A0;</span><span
Chris@1 3294 class="cmtt-8">&#x00A0;</span><span
Chris@1 3295 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 3296 class="cmtt-8">&#x00A0;if</span><span
Chris@1 3297 class="cmtt-8">&#x00A0;(</span><span
Chris@1 3298 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
Chris@1 3299 class="cmtt-8">&#x00A0;is</span><span
Chris@1 3300 class="cmtt-8">&#x00A0;set</span><span
Chris@1 3301 class="cmtt-8">&#x00A0;)</span><span
Chris@1 3302 class="cmtt-8">&#x00A0;then</span><span
Chris@1 3303 class="cmtt-8">&#x00A0;set</span><span
Chris@1 3304 class="cmtt-8">&#x00A0;[last]</span><span
Chris@1 3305 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3306 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 3307 class="cmtt-8">&#x00A0;[value_vector]</span><span
Chris@1 3308 class="cmtt-8">&#x00A0;element</span><span
Chris@1 3309 class="cmtt-8">&#x00A0;[i]</span>
Chris@1 3310 <br class="fancyvrb" /><a
Chris@1 3311 id="x1-55026r13"></a><span
Chris@1 3312 class="cmr-6">13</span><span
Chris@1 3313 class="cmtt-8">&#x00A0;</span><span
Chris@1 3314 class="cmtt-8">&#x00A0;</span>
Chris@1 3315 <br class="fancyvrb" /><a
Chris@1 3316 id="x1-55028r14"></a><span
Chris@1 3317 class="cmr-6">14</span><span
Chris@1 3318 class="cmtt-8">&#x00A0;</span><span
Chris@1 3319 class="cmtt-8">&#x00A0;</span><span
Chris@1 3320 class="cmtt-8">&#x00A0;</span><span
Chris@1 3321 class="cmtt-8">&#x00A0;</span><span
Chris@1 3322 class="cmtt-8">&#x00A0;</span><span
Chris@1 3323 class="cmtt-8">&#x00A0;</span><span
Chris@1 3324 class="cmtt-8">&#x00A0;</span><span
Chris@1 3325 class="cmtt-8">&#x00A0;</span><span
Chris@1 3326 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 3327 class="cmtt-8">&#x00A0;[index_divisor]</span><span
Chris@1 3328 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3329 class="cmtt-8">&#x00A0;[index_divisor]</span><span
Chris@1 3330 class="cmtt-8">&#x00A0;*</span><span
Chris@1 3331 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
Chris@1 3332 <br class="fancyvrb" /><a
Chris@1 3333 id="x1-55030r15"></a><span
Chris@1 3334 class="cmr-6">15</span><span
Chris@1 3335 class="cmtt-8">&#x00A0;</span><span
Chris@1 3336 class="cmtt-8">&#x00A0;</span>
Chris@1 3337 <br class="fancyvrb" /><a
Chris@1 3338 id="x1-55032r16"></a><span
Chris@1 3339 class="cmr-6">16</span><span
Chris@1 3340 class="cmtt-8">&#x00A0;</span><span
Chris@1 3341 class="cmtt-8">&#x00A0;</span><span
Chris@1 3342 class="cmtt-8">&#x00A0;</span><span
Chris@1 3343 class="cmtt-8">&#x00A0;</span><span
Chris@1 3344 class="cmtt-8">&#x00A0;</span><span
Chris@1 3345 class="cmtt-8">&#x00A0;</span><span
Chris@1 3346 class="cmtt-8">&#x00A0;</span><span
Chris@1 3347 class="cmsy-8">}</span>
Chris@1 3348 <br class="fancyvrb" /><a
Chris@1 3349 id="x1-55034r17"></a><span
Chris@1 3350 class="cmr-6">17</span><span
Chris@1 3351 class="cmtt-8">&#x00A0;</span><span
Chris@1 3352 class="cmtt-8">&#x00A0;</span>
Chris@1 3353 <br class="fancyvrb" /><a
Chris@1 3354 id="x1-55036r18"></a><span
Chris@1 3355 class="cmr-6">18</span><span
Chris@1 3356 class="cmtt-8">&#x00A0;</span><span
Chris@1 3357 class="cmtt-8">&#x00A0;</span><span
Chris@1 3358 class="cmtt-8">&#x00A0;</span><span
Chris@1 3359 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 3360 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 3361 class="cmtt-8">&#x00A0;calculation</span><span
Chris@1 3362 class="cmtt-8">&#x00A0;completed.</span>
Chris@1 3363 </div>
Chris@1 3364
Chris@1 3365
Chris@1 3366
Chris@1 3367 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3368 id="x1-560003.2.1"></a><span
Chris@1 3369 class="cmbx-12">Vector value decode: Lookup type 2</span></span>
Chris@1 3370 Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
Chris@1 3371 by the <span
Chris@1 3372 class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
Chris@1 3373 values of a codebook entry vector from the entries in <span
Chris@1 3374 class="cmtt-12">[codebook_multiplicands] </span>as follows
Chris@1 3375 (<span
Chris@1 3376 class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
Chris@1 3377 <span
Chris@1 3378 class="cmtt-12">[lookup_offset] </span>in this codebook):
Chris@1 3379 <!--l. 344--><p class="noindent" >
Chris@1 3380 <div class="fancyvrb" id="fancyvrb19">
Chris@1 3381 <a
Chris@1 3382 id="x1-56002r1"></a><span
Chris@1 3383 class="cmr-6">1</span><span
Chris@1 3384 class="cmtt-8">&#x00A0;</span><span
Chris@1 3385 class="cmtt-8">&#x00A0;</span><span
Chris@1 3386 class="cmtt-8">&#x00A0;</span><span
Chris@1 3387 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 3388 class="cmtt-8">&#x00A0;[last]</span><span
Chris@1 3389 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3390 class="cmtt-8">&#x00A0;0;</span>
Chris@1 3391 <br class="fancyvrb" /><a
Chris@1 3392 id="x1-56004r2"></a><span
Chris@1 3393 class="cmr-6">2</span><span
Chris@1 3394 class="cmtt-8">&#x00A0;</span><span
Chris@1 3395 class="cmtt-8">&#x00A0;</span><span
Chris@1 3396 class="cmtt-8">&#x00A0;</span><span
Chris@1 3397 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 3398 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
Chris@1 3399 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3400 class="cmtt-8">&#x00A0;[lookup_offset]</span><span
Chris@1 3401 class="cmtt-8">&#x00A0;*</span><span
Chris@1 3402 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
Chris@1 3403 <br class="fancyvrb" /><a
Chris@1 3404 id="x1-56006r3"></a><span
Chris@1 3405 class="cmr-6">3</span><span
Chris@1 3406 class="cmtt-8">&#x00A0;</span><span
Chris@1 3407 class="cmtt-8">&#x00A0;</span><span
Chris@1 3408 class="cmtt-8">&#x00A0;</span><span
Chris@1 3409 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 3410 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 3411 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 3412 class="cmtt-8">&#x00A0;over</span><span
Chris@1 3413 class="cmtt-8">&#x00A0;the</span><span
Chris@1 3414 class="cmtt-8">&#x00A0;range</span><span
Chris@1 3415 class="cmtt-8">&#x00A0;0</span><span
Chris@1 3416 class="cmtt-8">&#x00A0;...</span><span
Chris@1 3417 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
Chris@1 3418 class="cmtt-8">&#x00A0;(once</span><span
Chris@1 3419 class="cmtt-8">&#x00A0;for</span><span
Chris@1 3420 class="cmtt-8">&#x00A0;each</span><span
Chris@1 3421 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 3422 class="cmtt-8">&#x00A0;value</span><span
Chris@1 3423 class="cmtt-8">&#x00A0;in</span><span
Chris@1 3424 class="cmtt-8">&#x00A0;the</span><span
Chris@1 3425 class="cmtt-8">&#x00A0;value</span><span
Chris@1 3426 class="cmtt-8">&#x00A0;vector)</span><span
Chris@1 3427 class="cmtt-8">&#x00A0;</span><span
Chris@1 3428 class="cmsy-8">{</span>
Chris@1 3429 <br class="fancyvrb" /><a
Chris@1 3430 id="x1-56008r4"></a><span
Chris@1 3431 class="cmr-6">4</span><span
Chris@1 3432 class="cmtt-8">&#x00A0;</span><span
Chris@1 3433 class="cmtt-8">&#x00A0;</span>
Chris@1 3434 <br class="fancyvrb" /><a
Chris@1 3435 id="x1-56010r5"></a><span
Chris@1 3436 class="cmr-6">5</span><span
Chris@1 3437 class="cmtt-8">&#x00A0;</span><span
Chris@1 3438 class="cmtt-8">&#x00A0;</span><span
Chris@1 3439 class="cmtt-8">&#x00A0;</span><span
Chris@1 3440 class="cmtt-8">&#x00A0;</span><span
Chris@1 3441 class="cmtt-8">&#x00A0;</span><span
Chris@1 3442 class="cmtt-8">&#x00A0;</span><span
Chris@1 3443 class="cmtt-8">&#x00A0;</span><span
Chris@1 3444 class="cmtt-8">&#x00A0;</span><span
Chris@1 3445 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 3446 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 3447 class="cmtt-8">&#x00A0;[value_vector]</span><span
Chris@1 3448 class="cmtt-8">&#x00A0;element</span><span
Chris@1 3449 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 3450 class="cmtt-8">&#x00A0;=</span>
Chris@1 3451 <br class="fancyvrb" /><a
Chris@1 3452 id="x1-56012r6"></a><span
Chris@1 3453 class="cmr-6">6</span><span
Chris@1 3454 class="cmtt-8">&#x00A0;</span><span
Chris@1 3455 class="cmtt-8">&#x00A0;</span><span
Chris@1 3456 class="cmtt-8">&#x00A0;</span><span
Chris@1 3457 class="cmtt-8">&#x00A0;</span><span
Chris@1 3458 class="cmtt-8">&#x00A0;</span><span
Chris@1 3459 class="cmtt-8">&#x00A0;</span><span
Chris@1 3460 class="cmtt-8">&#x00A0;</span><span
Chris@1 3461 class="cmtt-8">&#x00A0;</span><span
Chris@1 3462 class="cmtt-8">&#x00A0;</span><span
Chris@1 3463 class="cmtt-8">&#x00A0;</span><span
Chris@1 3464 class="cmtt-8">&#x00A0;</span><span
Chris@1 3465 class="cmtt-8">&#x00A0;</span><span
Chris@1 3466 class="cmtt-8">&#x00A0;</span><span
Chris@1 3467 class="cmtt-8">&#x00A0;(</span><span
Chris@1 3468 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
Chris@1 3469 class="cmtt-8">&#x00A0;array</span><span
Chris@1 3470 class="cmtt-8">&#x00A0;element</span><span
Chris@1 3471 class="cmtt-8">&#x00A0;number</span><span
Chris@1 3472 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
Chris@1 3473 class="cmtt-8">&#x00A0;)</span><span
Chris@1 3474 class="cmtt-8">&#x00A0;*</span>
Chris@1 3475 <br class="fancyvrb" /><a
Chris@1 3476 id="x1-56014r7"></a><span
Chris@1 3477 class="cmr-6">7</span><span
Chris@1 3478 class="cmtt-8">&#x00A0;</span><span
Chris@1 3479 class="cmtt-8">&#x00A0;</span><span
Chris@1 3480 class="cmtt-8">&#x00A0;</span><span
Chris@1 3481 class="cmtt-8">&#x00A0;</span><span
Chris@1 3482 class="cmtt-8">&#x00A0;</span><span
Chris@1 3483 class="cmtt-8">&#x00A0;</span><span
Chris@1 3484 class="cmtt-8">&#x00A0;</span><span
Chris@1 3485 class="cmtt-8">&#x00A0;</span><span
Chris@1 3486 class="cmtt-8">&#x00A0;</span><span
Chris@1 3487 class="cmtt-8">&#x00A0;</span><span
Chris@1 3488 class="cmtt-8">&#x00A0;</span><span
Chris@1 3489 class="cmtt-8">&#x00A0;</span><span
Chris@1 3490 class="cmtt-8">&#x00A0;</span><span
Chris@1 3491 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
Chris@1 3492 class="cmtt-8">&#x00A0;+</span><span
Chris@1 3493 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
Chris@1 3494 class="cmtt-8">&#x00A0;+</span><span
Chris@1 3495 class="cmtt-8">&#x00A0;[last];</span>
Chris@1 3496 <br class="fancyvrb" /><a
Chris@1 3497 id="x1-56016r8"></a><span
Chris@1 3498 class="cmr-6">8</span><span
Chris@1 3499 class="cmtt-8">&#x00A0;</span><span
Chris@1 3500 class="cmtt-8">&#x00A0;</span>
Chris@1 3501 <br class="fancyvrb" /><a
Chris@1 3502 id="x1-56018r9"></a><span
Chris@1 3503 class="cmr-6">9</span><span
Chris@1 3504 class="cmtt-8">&#x00A0;</span><span
Chris@1 3505 class="cmtt-8">&#x00A0;</span><span
Chris@1 3506 class="cmtt-8">&#x00A0;</span><span
Chris@1 3507 class="cmtt-8">&#x00A0;</span><span
Chris@1 3508 class="cmtt-8">&#x00A0;</span><span
Chris@1 3509 class="cmtt-8">&#x00A0;</span><span
Chris@1 3510 class="cmtt-8">&#x00A0;</span><span
Chris@1 3511 class="cmtt-8">&#x00A0;</span><span
Chris@1 3512 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 3513 class="cmtt-8">&#x00A0;if</span><span
Chris@1 3514 class="cmtt-8">&#x00A0;(</span><span
Chris@1 3515 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
Chris@1 3516 class="cmtt-8">&#x00A0;is</span><span
Chris@1 3517 class="cmtt-8">&#x00A0;set</span><span
Chris@1 3518 class="cmtt-8">&#x00A0;)</span><span
Chris@1 3519 class="cmtt-8">&#x00A0;then</span><span
Chris@1 3520 class="cmtt-8">&#x00A0;set</span><span
Chris@1 3521 class="cmtt-8">&#x00A0;[last]</span><span
Chris@1 3522 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3523 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 3524 class="cmtt-8">&#x00A0;[value_vector]</span><span
Chris@1 3525 class="cmtt-8">&#x00A0;element</span><span
Chris@1 3526 class="cmtt-8">&#x00A0;[i]</span>
Chris@1 3527 <br class="fancyvrb" /><a
Chris@1 3528 id="x1-56020r10"></a><span
Chris@1 3529 class="cmr-6">10</span><span
Chris@1 3530 class="cmtt-8">&#x00A0;</span><span
Chris@1 3531 class="cmtt-8">&#x00A0;</span>
Chris@1 3532 <br class="fancyvrb" /><a
Chris@1 3533 id="x1-56022r11"></a><span
Chris@1 3534 class="cmr-6">11</span><span
Chris@1 3535 class="cmtt-8">&#x00A0;</span><span
Chris@1 3536 class="cmtt-8">&#x00A0;</span><span
Chris@1 3537 class="cmtt-8">&#x00A0;</span><span
Chris@1 3538 class="cmtt-8">&#x00A0;</span><span
Chris@1 3539 class="cmtt-8">&#x00A0;</span><span
Chris@1 3540 class="cmtt-8">&#x00A0;</span><span
Chris@1 3541 class="cmtt-8">&#x00A0;</span><span
Chris@1 3542 class="cmtt-8">&#x00A0;</span><span
Chris@1 3543 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 3544 class="cmtt-8">&#x00A0;increment</span><span
Chris@1 3545 class="cmtt-8">&#x00A0;[multiplicand_offset]</span>
Chris@1 3546 <br class="fancyvrb" /><a
Chris@1 3547 id="x1-56024r12"></a><span
Chris@1 3548 class="cmr-6">12</span><span
Chris@1 3549 class="cmtt-8">&#x00A0;</span><span
Chris@1 3550 class="cmtt-8">&#x00A0;</span>
Chris@1 3551 <br class="fancyvrb" /><a
Chris@1 3552 id="x1-56026r13"></a><span
Chris@1 3553 class="cmr-6">13</span><span
Chris@1 3554 class="cmtt-8">&#x00A0;</span><span
Chris@1 3555 class="cmtt-8">&#x00A0;</span><span
Chris@1 3556 class="cmtt-8">&#x00A0;</span><span
Chris@1 3557 class="cmtt-8">&#x00A0;</span><span
Chris@1 3558 class="cmtt-8">&#x00A0;</span><span
Chris@1 3559 class="cmtt-8">&#x00A0;</span><span
Chris@1 3560 class="cmtt-8">&#x00A0;</span><span
Chris@1 3561 class="cmsy-8">}</span>
Chris@1 3562 <br class="fancyvrb" /><a
Chris@1 3563 id="x1-56028r14"></a><span
Chris@1 3564 class="cmr-6">14</span><span
Chris@1 3565 class="cmtt-8">&#x00A0;</span><span
Chris@1 3566 class="cmtt-8">&#x00A0;</span>
Chris@1 3567 <br class="fancyvrb" /><a
Chris@1 3568 id="x1-56030r15"></a><span
Chris@1 3569 class="cmr-6">15</span><span
Chris@1 3570 class="cmtt-8">&#x00A0;</span><span
Chris@1 3571 class="cmtt-8">&#x00A0;</span><span
Chris@1 3572 class="cmtt-8">&#x00A0;</span><span
Chris@1 3573 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 3574 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 3575 class="cmtt-8">&#x00A0;calculation</span><span
Chris@1 3576 class="cmtt-8">&#x00A0;completed.</span>
Chris@1 3577 </div>
Chris@1 3578 <!--l. 370--><p class="noindent" >
Chris@1 3579 <h4 class="subsectionHead"><span class="titlemark">3.3. </span> <a
Chris@1 3580 id="x1-570003.3"></a>Use of the codebook abstraction</h4>
Chris@1 3581 <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
Chris@1 3582 specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
Chris@1 3583 then returns that entry number to the decoder (when used in a scalar entropy coding context), or
Chris@1 3584 uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
Chris@1 3585 used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
Chris@1 3586 call to the codebook mechanism requests either a scalar entry number or a lookup
Chris@1 3587 vector.
Chris@1 3588 <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
Chris@1 3589 decode using a codebook of lookup type 0 in any context expecting a vector return
Chris@1 3590 value (even in a case where a vector of dimension one) is forbidden. If decoder setup
Chris@1 3591 or decode requests such an action, that is an error condition rendering the packet
Chris@1 3592
Chris@1 3593
Chris@1 3594
Chris@1 3595 undecodable.
Chris@1 3596 <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
Chris@1 3597 next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
Chris@1 3598 codeword in the codebook. This process can be though of as logically walking the
Chris@1 3599 Huffman decode tree by reading one bit at a time from the bitstream, and using the
Chris@1 3600 bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
Chris@1 3601 branch (right in the above examples). Walking the tree finishes when the decode process
Chris@1 3602 hits a leaf in the decision tree; the result is the entry number corresponding to that
Chris@1 3603 leaf. Reading past the end of a packet propagates the &#8217;end-of-stream&#8217; condition to the
Chris@1 3604 decoder.
Chris@1 3605 <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
Chris@1 3606 value.
Chris@1 3607 <!--l. 404--><p class="noindent" >When used in a VQ context, the codeword entry number is used as an offset into the VQ lookup
Chris@1 3608 table. The value returned to the decoder is the vector of scalars corresponding to this
Chris@1 3609 offset.
Chris@1 3610
Chris@1 3611
Chris@1 3612
Chris@1 3613
Chris@1 3614
Chris@1 3615
Chris@1 3616 <h3 class="sectionHead"><span class="titlemark">4. </span> <a
Chris@1 3617 id="x1-580004"></a>Codec Setup and Packet Decode</h3>
Chris@1 3618 <!--l. 7--><p class="noindent" >
Chris@1 3619 <h4 class="subsectionHead"><span class="titlemark">4.1. </span> <a
Chris@1 3620 id="x1-590004.1"></a>Overview</h4>
Chris@1 3621 <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
Chris@1 3622 of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
Chris@1 3623 process, which is provided in <a
Chris@1 3624 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a
Chris@1 3625 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221;. <a
Chris@1 3626 href="#x1-360002">Section&#x00A0;2</a>,
Chris@1 3627 &#8220;<a
Chris@1 3628 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; covers reading and writing bit fields from and to bitstream
Chris@1 3629 packets.
Chris@1 3630 <!--l. 17--><p class="noindent" >
Chris@1 3631 <h4 class="subsectionHead"><span class="titlemark">4.2. </span> <a
Chris@1 3632 id="x1-600004.2"></a>Header decode and decode setup</h4>
Chris@1 3633 <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
Chris@1 3634 identification header, the comments header, and the setup header. All are required for decode
Chris@1 3635 compliance. An end-of-packet condition during decoding the first or third header packet renders
Chris@1 3636 the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
Chris@1 3637 condition.
Chris@1 3638 <!--l. 26--><p class="noindent" >
Chris@1 3639 <h5 class="subsubsectionHead"><span class="titlemark">4.2.1. </span> <a
Chris@1 3640 id="x1-610004.2.1"></a>Common header decode</h5>
Chris@1 3641 <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields.
Chris@1 3642 <!--l. 31--><p class="noindent" >
Chris@1 3643 <div class="fancyvrb" id="fancyvrb20">
Chris@1 3644 <a
Chris@1 3645 id="x1-61002r1"></a><span
Chris@1 3646 class="cmr-6">1</span><span
Chris@1 3647 class="cmtt-8">&#x00A0;</span><span
Chris@1 3648 class="cmtt-8">&#x00A0;</span><span
Chris@1 3649 class="cmtt-8">&#x00A0;</span><span
Chris@1 3650 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 3651 class="cmtt-8">&#x00A0;[packet_type]</span><span
Chris@1 3652 class="cmtt-8">&#x00A0;:</span><span
Chris@1 3653 class="cmtt-8">&#x00A0;8</span><span
Chris@1 3654 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 3655 class="cmtt-8">&#x00A0;value</span>
Chris@1 3656 <br class="fancyvrb" /><a
Chris@1 3657 id="x1-61004r2"></a><span
Chris@1 3658 class="cmr-6">2</span><span
Chris@1 3659 class="cmtt-8">&#x00A0;</span><span
Chris@1 3660 class="cmtt-8">&#x00A0;</span><span
Chris@1 3661 class="cmtt-8">&#x00A0;</span><span
Chris@1 3662 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 3663 class="cmtt-8">&#x00A0;0x76,</span><span
Chris@1 3664 class="cmtt-8">&#x00A0;0x6f,</span><span
Chris@1 3665 class="cmtt-8">&#x00A0;0x72,</span><span
Chris@1 3666 class="cmtt-8">&#x00A0;0x62,</span><span
Chris@1 3667 class="cmtt-8">&#x00A0;0x69,</span><span
Chris@1 3668 class="cmtt-8">&#x00A0;0x73:</span><span
Chris@1 3669 class="cmtt-8">&#x00A0;the</span><span
Chris@1 3670 class="cmtt-8">&#x00A0;characters</span><span
Chris@1 3671 class="cmtt-8">&#x00A0;&#8217;v&#8217;,&#8217;o&#8217;,&#8217;r&#8217;,&#8217;b&#8217;,&#8217;i&#8217;,&#8217;s&#8217;</span><span
Chris@1 3672 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3673 class="cmtt-8">&#x00A0;six</span><span
Chris@1 3674 class="cmtt-8">&#x00A0;octets</span>
Chris@1 3675 </div>
Chris@1 3676
Chris@1 3677
Chris@1 3678
Chris@1 3679 <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
Chris@1 3680 header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
Chris@1 3681 single bit of &#8217;0&#8217; is an audio packet). The packets must occur in the order of identification,
Chris@1 3682 comment, setup.
Chris@1 3683 <!--l. 44--><p class="noindent" >
Chris@1 3684 <h5 class="subsubsectionHead"><span class="titlemark">4.2.2. </span> <a
Chris@1 3685 id="x1-620004.2.2"></a>Identification header</h5>
Chris@1 3686 <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
Chris@1 3687 definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
Chris@1 3688 stream. The identification header is coded as follows:
Chris@1 3689 <!--l. 51--><p class="noindent" >
Chris@1 3690 <div class="fancyvrb" id="fancyvrb21">
Chris@1 3691 <a
Chris@1 3692 id="x1-62002r1"></a><span
Chris@1 3693 class="cmr-6">1</span><span
Chris@1 3694 class="cmtt-8">&#x00A0;</span><span
Chris@1 3695 class="cmtt-8">&#x00A0;</span><span
Chris@1 3696 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 3697 class="cmtt-8">&#x00A0;[vorbis_version]</span><span
Chris@1 3698 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3699 class="cmtt-8">&#x00A0;read</span><span
Chris@1 3700 class="cmtt-8">&#x00A0;32</span><span
Chris@1 3701 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 3702 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3703 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 3704 class="cmtt-8">&#x00A0;integer</span>
Chris@1 3705 <br class="fancyvrb" /><a
Chris@1 3706 id="x1-62004r2"></a><span
Chris@1 3707 class="cmr-6">2</span><span
Chris@1 3708 class="cmtt-8">&#x00A0;</span><span
Chris@1 3709 class="cmtt-8">&#x00A0;</span><span
Chris@1 3710 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 3711 class="cmtt-8">&#x00A0;[audio_channels]</span><span
Chris@1 3712 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3713 class="cmtt-8">&#x00A0;read</span><span
Chris@1 3714 class="cmtt-8">&#x00A0;8</span><span
Chris@1 3715 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 3716 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 3717 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3718 class="cmtt-8">&#x00A0;unsigned</span>
Chris@1 3719 <br class="fancyvrb" /><a
Chris@1 3720 id="x1-62006r3"></a><span
Chris@1 3721 class="cmr-6">3</span><span
Chris@1 3722 class="cmtt-8">&#x00A0;</span><span
Chris@1 3723 class="cmtt-8">&#x00A0;</span><span
Chris@1 3724 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 3725 class="cmtt-8">&#x00A0;[audio_sample_rate]</span><span
Chris@1 3726 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3727 class="cmtt-8">&#x00A0;read</span><span
Chris@1 3728 class="cmtt-8">&#x00A0;32</span><span
Chris@1 3729 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 3730 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3731 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 3732 class="cmtt-8">&#x00A0;integer</span>
Chris@1 3733 <br class="fancyvrb" /><a
Chris@1 3734 id="x1-62008r4"></a><span
Chris@1 3735 class="cmr-6">4</span><span
Chris@1 3736 class="cmtt-8">&#x00A0;</span><span
Chris@1 3737 class="cmtt-8">&#x00A0;</span><span
Chris@1 3738 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 3739 class="cmtt-8">&#x00A0;[bitrate_maximum]</span><span
Chris@1 3740 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3741 class="cmtt-8">&#x00A0;read</span><span
Chris@1 3742 class="cmtt-8">&#x00A0;32</span><span
Chris@1 3743 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 3744 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3745 class="cmtt-8">&#x00A0;signed</span><span
Chris@1 3746 class="cmtt-8">&#x00A0;integer</span>
Chris@1 3747 <br class="fancyvrb" /><a
Chris@1 3748 id="x1-62010r5"></a><span
Chris@1 3749 class="cmr-6">5</span><span
Chris@1 3750 class="cmtt-8">&#x00A0;</span><span
Chris@1 3751 class="cmtt-8">&#x00A0;</span><span
Chris@1 3752 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 3753 class="cmtt-8">&#x00A0;[bitrate_nominal]</span><span
Chris@1 3754 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3755 class="cmtt-8">&#x00A0;read</span><span
Chris@1 3756 class="cmtt-8">&#x00A0;32</span><span
Chris@1 3757 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 3758 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3759 class="cmtt-8">&#x00A0;signed</span><span
Chris@1 3760 class="cmtt-8">&#x00A0;integer</span>
Chris@1 3761 <br class="fancyvrb" /><a
Chris@1 3762 id="x1-62012r6"></a><span
Chris@1 3763 class="cmr-6">6</span><span
Chris@1 3764 class="cmtt-8">&#x00A0;</span><span
Chris@1 3765 class="cmtt-8">&#x00A0;</span><span
Chris@1 3766 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 3767 class="cmtt-8">&#x00A0;[bitrate_minimum]</span><span
Chris@1 3768 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3769 class="cmtt-8">&#x00A0;read</span><span
Chris@1 3770 class="cmtt-8">&#x00A0;32</span><span
Chris@1 3771 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 3772 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3773 class="cmtt-8">&#x00A0;signed</span><span
Chris@1 3774 class="cmtt-8">&#x00A0;integer</span>
Chris@1 3775 <br class="fancyvrb" /><a
Chris@1 3776 id="x1-62014r7"></a><span
Chris@1 3777 class="cmr-6">7</span><span
Chris@1 3778 class="cmtt-8">&#x00A0;</span><span
Chris@1 3779 class="cmtt-8">&#x00A0;</span><span
Chris@1 3780 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 3781 class="cmtt-8">&#x00A0;[blocksize_0]</span><span
Chris@1 3782 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3783 class="cmtt-8">&#x00A0;2</span><span
Chris@1 3784 class="cmtt-8">&#x00A0;exponent</span><span
Chris@1 3785 class="cmtt-8">&#x00A0;(read</span><span
Chris@1 3786 class="cmtt-8">&#x00A0;4</span><span
Chris@1 3787 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 3788 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3789 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 3790 class="cmtt-8">&#x00A0;integer)</span>
Chris@1 3791 <br class="fancyvrb" /><a
Chris@1 3792 id="x1-62016r8"></a><span
Chris@1 3793 class="cmr-6">8</span><span
Chris@1 3794 class="cmtt-8">&#x00A0;</span><span
Chris@1 3795 class="cmtt-8">&#x00A0;</span><span
Chris@1 3796 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 3797 class="cmtt-8">&#x00A0;[blocksize_1]</span><span
Chris@1 3798 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3799 class="cmtt-8">&#x00A0;2</span><span
Chris@1 3800 class="cmtt-8">&#x00A0;exponent</span><span
Chris@1 3801 class="cmtt-8">&#x00A0;(read</span><span
Chris@1 3802 class="cmtt-8">&#x00A0;4</span><span
Chris@1 3803 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 3804 class="cmtt-8">&#x00A0;as</span><span
Chris@1 3805 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 3806 class="cmtt-8">&#x00A0;integer)</span>
Chris@1 3807 <br class="fancyvrb" /><a
Chris@1 3808 id="x1-62018r9"></a><span
Chris@1 3809 class="cmr-6">9</span><span
Chris@1 3810 class="cmtt-8">&#x00A0;</span><span
Chris@1 3811 class="cmtt-8">&#x00A0;</span><span
Chris@1 3812 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 3813 class="cmtt-8">&#x00A0;[framing_flag]</span><span
Chris@1 3814 class="cmtt-8">&#x00A0;=</span><span
Chris@1 3815 class="cmtt-8">&#x00A0;read</span><span
Chris@1 3816 class="cmtt-8">&#x00A0;one</span><span
Chris@1 3817 class="cmtt-8">&#x00A0;bit</span>
Chris@1 3818 </div>
Chris@1 3819 <!--l. 63--><p class="noindent" ><span
Chris@1 3820 class="cmtt-12">[vorbis_version] </span>is to read &#8217;0&#8217; in order to be compatible with this document. Both
Chris@1 3821 <span
Chris@1 3822 class="cmtt-12">[audio_channels] </span>and <span
Chris@1 3823 class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
Chris@1 3824 blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span
Chris@1 3825 class="cmtt-12">[blocksize_0]</span>
Chris@1 3826 must be less than or equal to <span
Chris@1 3827 class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
Chris@1 3828 any of these conditions renders a stream undecodable.
Chris@1 3829 <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
Chris@1 3830 considerably off in purely VBR streams. The fields are meaningful only when greater than
Chris@1 3831 zero.
Chris@1 3832 <ul class="itemize1">
Chris@1 3833 <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
Chris@1 3834 fixed-rate bitstream
Chris@1 3835 </li>
Chris@1 3836 <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
Chris@1 3837
Chris@1 3838
Chris@1 3839
Chris@1 3840 </li>
Chris@1 3841 <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
Chris@1 3842 </li>
Chris@1 3843 <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
Chris@1 3844 <!--l. 85--><p class="noindent" >
Chris@1 3845 <h5 class="subsubsectionHead"><span class="titlemark">4.2.3. </span> <a
Chris@1 3846 id="x1-630004.2.3"></a>Comment header</h5>
Chris@1 3847 <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a
Chris@1 3848 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a
Chris@1 3849 href="#x1-810005">comment field and
Chris@1 3850 header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
Chris@1 3851 <!--l. 90--><p class="noindent" >
Chris@1 3852 <h5 class="subsubsectionHead"><span class="titlemark">4.2.4. </span> <a
Chris@1 3853 id="x1-640004.2.4"></a>Setup header</h5>
Chris@1 3854 <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
Chris@1 3855 <div class="center"
Chris@1 3856 >
Chris@1 3857 <!--l. 94--><p class="noindent" >
Chris@1 3858
Chris@1 3859 <!--l. 95--><p class="noindent" ><img
Chris@1 3860 src="components.png" alt="PIC"
Chris@1 3861 >
Chris@1 3862 <br /> <div class="caption"
Chris@1 3863 ><span class="id">Figure&#x00A0;6: </span><span
Chris@1 3864 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 -->
Chris@1 3865 </div>
Chris@1 3866 <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
Chris@1 3867 header contains, in order, the lists of codebook configurations, time-domain transform
Chris@1 3868 configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
Chris@1 3869 mapping configurations and mode configurations. It finishes with a framing bit of &#8217;1&#8217;. Header
Chris@1 3870 decode proceeds in the following order:
Chris@1 3871 <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3872 id="x1-650004.2.4"></a><span
Chris@1 3873 class="cmbx-12">Codebooks</span></span>
Chris@1 3874
Chris@1 3875
Chris@1 3876
Chris@1 3877 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 3878 1. </dt><dd
Chris@1 3879 class="enumerate-enumitem"><span
Chris@1 3880 class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
Chris@1 3881 </dd><dt class="enumerate-enumitem">
Chris@1 3882 2. </dt><dd
Chris@1 3883 class="enumerate-enumitem">Decode <span
Chris@1 3884 class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a
Chris@1 3885 href="#x1-470003">Section&#x00A0;3</a>,
Chris@1 3886 &#8220;<a
Chris@1 3887 href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>&#8221;. Save each configuration, in order, in an array
Chris@1 3888 of codebook configurations <span
Chris@1 3889 class="cmtt-12">[vorbis_codebook_configurations]</span>.</dd></dl>
Chris@1 3890 <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3891 id="x1-660004.2.4"></a><span
Chris@1 3892 class="cmbx-12">Time domain transforms</span></span>
Chris@1 3893 These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
Chris@1 3894 be read to maintain bitstream sync.
Chris@1 3895 <!--l. 127--><p class="noindent" >
Chris@1 3896 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 3897 1. </dt><dd
Chris@1 3898 class="enumerate-enumitem"><span
Chris@1 3899 class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
Chris@1 3900 </dd><dt class="enumerate-enumitem">
Chris@1 3901 2. </dt><dd
Chris@1 3902 class="enumerate-enumitem">read <span
Chris@1 3903 class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
Chris@1 3904 nonzero, this is an error condition and the stream is undecodable.</dd></dl>
Chris@1 3905 <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3906 id="x1-670004.2.4"></a><span
Chris@1 3907 class="cmbx-12">Floors</span></span>
Chris@1 3908 Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
Chris@1 3909 type.
Chris@1 3910 <!--l. 139--><p class="noindent" >
Chris@1 3911 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 3912 1. </dt><dd
Chris@1 3913 class="enumerate-enumitem"><span
Chris@1 3914 class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
Chris@1 3915 </dd><dt class="enumerate-enumitem">
Chris@1 3916 2. </dt><dd
Chris@1 3917 class="enumerate-enumitem">For each <span
Chris@1 3918 class="cmtt-12">[i] </span>of <span
Chris@1 3919 class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
Chris@1 3920 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 3921 a) </dt><dd
Chris@1 3922 class="enumerate-enumitem">read the floor type: vector <span
Chris@1 3923 class="cmtt-12">[vorbis_floor_types] </span>element <span
Chris@1 3924 class="cmtt-12">[i] </span>= read 16 bits
Chris@1 3925 as unsigned integer
Chris@1 3926 </dd><dt class="enumerate-enumitem">
Chris@1 3927 b) </dt><dd
Chris@1 3928 class="enumerate-enumitem">If the floor type is zero, decode the floor configuration as defined in <a
Chris@1 3929 href="#x1-890006">Section&#x00A0;6</a>,
Chris@1 3930 &#8220;<a
Chris@1 3931 href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>&#8221;; save this configuration in slot <span
Chris@1 3932 class="cmtt-12">[i] </span>of the floor
Chris@1 3933 configuration array <span
Chris@1 3934 class="cmtt-12">[vorbis_floor_configurations]</span>.
Chris@1 3935
Chris@1 3936
Chris@1 3937
Chris@1 3938 </dd><dt class="enumerate-enumitem">
Chris@1 3939 c) </dt><dd
Chris@1 3940 class="enumerate-enumitem">If the floor type is one, decode the floor configuration as defined in <a
Chris@1 3941 href="#x1-950007">Section&#x00A0;7</a>,
Chris@1 3942 &#8220;<a
Chris@1 3943 href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>&#8221;; save this configuration in slot <span
Chris@1 3944 class="cmtt-12">[i] </span>of the floor
Chris@1 3945 configuration array <span
Chris@1 3946 class="cmtt-12">[vorbis_floor_configurations]</span>.
Chris@1 3947 </dd><dt class="enumerate-enumitem">
Chris@1 3948 d) </dt><dd
Chris@1 3949 class="enumerate-enumitem">If the the floor type is greater than one, this stream is undecodable; ERROR
Chris@1 3950 CONDITION</dd></dl>
Chris@1 3951 </dd></dl>
Chris@1 3952 <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3953 id="x1-680004.2.4"></a><span
Chris@1 3954 class="cmbx-12">Residues</span></span>
Chris@1 3955 Vorbis uses three residue types; header decode of each type is identical.
Chris@1 3956 <!--l. 163--><p class="noindent" >
Chris@1 3957 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 3958 1. </dt><dd
Chris@1 3959 class="enumerate-enumitem"><span
Chris@1 3960 class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
Chris@1 3961 </dd><dt class="enumerate-enumitem">
Chris@1 3962 2. </dt><dd
Chris@1 3963 class="enumerate-enumitem">For each of <span
Chris@1 3964 class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
Chris@1 3965 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 3966 a) </dt><dd
Chris@1 3967 class="enumerate-enumitem">read the residue type; vector <span
Chris@1 3968 class="cmtt-12">[vorbis_residue_types] </span>element <span
Chris@1 3969 class="cmtt-12">[i] </span>= read 16
Chris@1 3970 bits as unsigned integer
Chris@1 3971 </dd><dt class="enumerate-enumitem">
Chris@1 3972 b) </dt><dd
Chris@1 3973 class="enumerate-enumitem">If the residue type is zero, one or two, decode the residue configuration as defined
Chris@1 3974 in <a
Chris@1 3975 href="#x1-1020008">Section&#x00A0;8</a>, &#8220;<a
Chris@1 3976 href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>&#8221;; save this configuration in slot <span
Chris@1 3977 class="cmtt-12">[i] </span>of
Chris@1 3978 the residue configuration array <span
Chris@1 3979 class="cmtt-12">[vorbis_residue_configurations]</span>.
Chris@1 3980 </dd><dt class="enumerate-enumitem">
Chris@1 3981 c) </dt><dd
Chris@1 3982 class="enumerate-enumitem">If the the residue type is greater than two, this stream is undecodable; ERROR
Chris@1 3983 CONDITION</dd></dl>
Chris@1 3984 </dd></dl>
Chris@1 3985 <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 3986 id="x1-690004.2.4"></a><span
Chris@1 3987 class="cmbx-12">Mappings</span></span>
Chris@1 3988 Mappings are used to set up specific pipelines for encoding multichannel audio with varying
Chris@1 3989 channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
Chris@1 3990 channel mappings.
Chris@1 3991
Chris@1 3992
Chris@1 3993
Chris@1 3994 <!--l. 188--><p class="noindent" >
Chris@1 3995 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 3996 1. </dt><dd
Chris@1 3997 class="enumerate-enumitem"><span
Chris@1 3998 class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
Chris@1 3999 </dd><dt class="enumerate-enumitem">
Chris@1 4000 2. </dt><dd
Chris@1 4001 class="enumerate-enumitem">For each <span
Chris@1 4002 class="cmtt-12">[i] </span>of <span
Chris@1 4003 class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
Chris@1 4004 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4005 a) </dt><dd
Chris@1 4006 class="enumerate-enumitem">read the mapping type: 16 bits as unsigned integer. There&#8217;s no reason to save
Chris@1 4007 the mapping type in Vorbis I.
Chris@1 4008 </dd><dt class="enumerate-enumitem">
Chris@1 4009 b) </dt><dd
Chris@1 4010 class="enumerate-enumitem">If the mapping type is nonzero, the stream is undecodable
Chris@1 4011 </dd><dt class="enumerate-enumitem">
Chris@1 4012 c) </dt><dd
Chris@1 4013 class="enumerate-enumitem">If the mapping type is zero:
Chris@1 4014 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4015 i. </dt><dd
Chris@1 4016 class="enumerate-enumitem">read 1 bit as a boolean flag
Chris@1 4017 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4018 A. </dt><dd
Chris@1 4019 class="enumerate-enumitem">if set, <span
Chris@1 4020 class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
Chris@1 4021 and add one
Chris@1 4022 </dd><dt class="enumerate-enumitem">
Chris@1 4023 B. </dt><dd
Chris@1 4024 class="enumerate-enumitem">if unset, <span
Chris@1 4025 class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</dd></dl>
Chris@1 4026 </dd><dt class="enumerate-enumitem">
Chris@1 4027 ii. </dt><dd
Chris@1 4028 class="enumerate-enumitem">read 1 bit as a boolean flag
Chris@1 4029 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4030 A. </dt><dd
Chris@1 4031 class="enumerate-enumitem">if set, square polar channel mapping is in use:
Chris@1 4032 <ul class="itemize1">
Chris@1 4033 <li class="itemize"><span
Chris@1 4034 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= read 8 bits as unsigned
Chris@1 4035 integer and add one
Chris@1 4036 </li>
Chris@1 4037 <li class="itemize">for <span
Chris@1 4038 class="cmtt-12">[j] </span>each of <span
Chris@1 4039 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
Chris@1 4040 <ul class="itemize2">
Chris@1 4041 <li class="itemize">vector <span
Chris@1 4042 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
Chris@1 4043 class="cmtt-12">[j]</span>= read
Chris@1 4044 <a
Chris@1 4045 href="#x1-1170009.2.1">ilog</a>(<span
Chris@1 4046 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
Chris@1 4047 </li>
Chris@1 4048 <li class="itemize">vector <span
Chris@1 4049 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
Chris@1 4050 class="cmtt-12">[j]</span>= read
Chris@1 4051 <a
Chris@1 4052 href="#x1-1170009.2.1">ilog</a>(<span
Chris@1 4053 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
Chris@1 4054 </li>
Chris@1 4055
Chris@1 4056
Chris@1 4057
Chris@1 4058 <li class="itemize">the numbers read in the above two steps are channel numbers
Chris@1 4059 representing the channel to treat as magnitude and the channel
Chris@1 4060 to treat as angle, respectively. If for any coupling step the
Chris@1 4061 angle channel number equals the magnitude channel number, the
Chris@1 4062 magnitude channel number is greater than <span
Chris@1 4063 class="cmtt-12">[audio_channels]</span>-1, or
Chris@1 4064 the angle channel is greater than <span
Chris@1 4065 class="cmtt-12">[audio_channels]</span>-1, the stream
Chris@1 4066 is undecodable.</li></ul>
Chris@1 4067 </li></ul>
Chris@1 4068 </dd><dt class="enumerate-enumitem">
Chris@1 4069 B. </dt><dd
Chris@1 4070 class="enumerate-enumitem">if unset, <span
Chris@1 4071 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</dd></dl>
Chris@1 4072 </dd><dt class="enumerate-enumitem">
Chris@1 4073 iii. </dt><dd
Chris@1 4074 class="enumerate-enumitem">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
Chris@1 4075 </dd><dt class="enumerate-enumitem">
Chris@1 4076 iv. </dt><dd
Chris@1 4077 class="enumerate-enumitem">if <span
Chris@1 4078 class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
Chris@1 4079 settings. For each <span
Chris@1 4080 class="cmtt-12">[j] </span>of <span
Chris@1 4081 class="cmtt-12">[audio_channels] </span>channels:
Chris@1 4082 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4083 A. </dt><dd
Chris@1 4084 class="enumerate-enumitem">vector <span
Chris@1 4085 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
Chris@1 4086 class="cmtt-12">[j] </span>= read 4 bits as unsigned
Chris@1 4087 integer
Chris@1 4088 </dd><dt class="enumerate-enumitem">
Chris@1 4089 B. </dt><dd
Chris@1 4090 class="enumerate-enumitem">if the value is greater than the highest numbered submap
Chris@1 4091 (<span
Chris@1 4092 class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
Chris@1 4093 the stream undecodable</dd></dl>
Chris@1 4094 </dd><dt class="enumerate-enumitem">
Chris@1 4095 v. </dt><dd
Chris@1 4096 class="enumerate-enumitem">for each submap <span
Chris@1 4097 class="cmtt-12">[j] </span>of <span
Chris@1 4098 class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
Chris@1 4099 residue numbers for use in decoding that submap:
Chris@1 4100 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4101 A. </dt><dd
Chris@1 4102 class="enumerate-enumitem">read and discard 8 bits (the unused time configuration placeholder)
Chris@1 4103 </dd><dt class="enumerate-enumitem">
Chris@1 4104 B. </dt><dd
Chris@1 4105 class="enumerate-enumitem">read 8 bits as unsigned integer for the floor number; save in vector
Chris@1 4106 <span
Chris@1 4107 class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span
Chris@1 4108 class="cmtt-12">[j]</span>
Chris@1 4109 </dd><dt class="enumerate-enumitem">
Chris@1 4110 C. </dt><dd
Chris@1 4111 class="enumerate-enumitem">verify the floor number is not greater than the highest number floor
Chris@1 4112 configured for the bitstream. If it is, the bitstream is undecodable
Chris@1 4113 </dd><dt class="enumerate-enumitem">
Chris@1 4114 D. </dt><dd
Chris@1 4115 class="enumerate-enumitem">read 8 bits as unsigned integer for the residue number; save in vector
Chris@1 4116 <span
Chris@1 4117 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
Chris@1 4118 class="cmtt-12">[j]</span>
Chris@1 4119
Chris@1 4120
Chris@1 4121
Chris@1 4122 </dd><dt class="enumerate-enumitem">
Chris@1 4123 E. </dt><dd
Chris@1 4124 class="enumerate-enumitem">verify the residue number is not greater than the highest number residue
Chris@1 4125 configured for the bitstream. If it is, the bitstream is undecodable</dd></dl>
Chris@1 4126 </dd><dt class="enumerate-enumitem">
Chris@1 4127 vi. </dt><dd
Chris@1 4128 class="enumerate-enumitem">save this mapping configuration in slot <span
Chris@1 4129 class="cmtt-12">[i] </span>of the mapping configuration array
Chris@1 4130 <span
Chris@1 4131 class="cmtt-12">[vorbis_mapping_configurations]</span>.</dd></dl>
Chris@1 4132 </dd></dl>
Chris@1 4133 </dd></dl>
Chris@1 4134 <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 4135 id="x1-700004.2.4"></a><span
Chris@1 4136 class="cmbx-12">Modes</span></span>
Chris@1 4137 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4138 1. </dt><dd
Chris@1 4139 class="enumerate-enumitem"><span
Chris@1 4140 class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
Chris@1 4141 </dd><dt class="enumerate-enumitem">
Chris@1 4142 2. </dt><dd
Chris@1 4143 class="enumerate-enumitem">For each of <span
Chris@1 4144 class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
Chris@1 4145 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4146 a) </dt><dd
Chris@1 4147 class="enumerate-enumitem"><span
Chris@1 4148 class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
Chris@1 4149 </dd><dt class="enumerate-enumitem">
Chris@1 4150 b) </dt><dd
Chris@1 4151 class="enumerate-enumitem"><span
Chris@1 4152 class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
Chris@1 4153 </dd><dt class="enumerate-enumitem">
Chris@1 4154 c) </dt><dd
Chris@1 4155 class="enumerate-enumitem"><span
Chris@1 4156 class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
Chris@1 4157 </dd><dt class="enumerate-enumitem">
Chris@1 4158 d) </dt><dd
Chris@1 4159 class="enumerate-enumitem"><span
Chris@1 4160 class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
Chris@1 4161 </dd><dt class="enumerate-enumitem">
Chris@1 4162 e) </dt><dd
Chris@1 4163 class="enumerate-enumitem">verify ranges; zero is the only legal value in
Chris@1 4164 Vorbis I for <span
Chris@1 4165 class="cmtt-12">[vorbis_mode_windowtype] </span>and <span
Chris@1 4166 class="cmtt-12">[vorbis_mode_transformtype]</span>.
Chris@1 4167 <span
Chris@1 4168 class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
Chris@1 4169 in use. Any illegal values render the stream undecodable.
Chris@1 4170 </dd><dt class="enumerate-enumitem">
Chris@1 4171 f) </dt><dd
Chris@1 4172 class="enumerate-enumitem">save this mode configuration in slot <span
Chris@1 4173 class="cmtt-12">[i] </span>of the mode configuration array
Chris@1 4174 <span
Chris@1 4175 class="cmtt-12">[vorbis_mode_configurations]</span>.</dd></dl>
Chris@1 4176 </dd><dt class="enumerate-enumitem">
Chris@1 4177 3. </dt><dd
Chris@1 4178 class="enumerate-enumitem">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
Chris@1 4179 decodable.</dd></dl>
Chris@1 4180
Chris@1 4181
Chris@1 4182
Chris@1 4183 <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
Chris@1 4184 <!--l. 277--><p class="noindent" >
Chris@1 4185 <h4 class="subsectionHead"><span class="titlemark">4.3. </span> <a
Chris@1 4186 id="x1-710004.3"></a>Audio packet decode and synthesis</h4>
Chris@1 4187 <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
Chris@1 4188 audio packet decode is to read and verify the packet type. <span
Chris@1 4189 class="cmti-12">A non-audio packet when audio is</span>
Chris@1 4190 <span
Chris@1 4191 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
Chris@1 4192 <span
Chris@1 4193 class="cmti-12">packet and not attempt decoding it to audio</span>.
Chris@1 4194 <!--l. 286--><p class="noindent" >
Chris@1 4195 <h5 class="subsubsectionHead"><span class="titlemark">4.3.1. </span> <a
Chris@1 4196 id="x1-720004.3.1"></a>packet type, mode and window decode</h5>
Chris@1 4197 <!--l. 289--><p class="noindent" >
Chris@1 4198 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4199 1. </dt><dd
Chris@1 4200 class="enumerate-enumitem">read 1 bit <span
Chris@1 4201 class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
Chris@1 4202 </dd><dt class="enumerate-enumitem">
Chris@1 4203 2. </dt><dd
Chris@1 4204 class="enumerate-enumitem">read <a
Chris@1 4205 href="#x1-1170009.2.1">ilog</a>([vorbis_mode_count]-1) bits <span
Chris@1 4206 class="cmtt-12">[mode_number]</span>
Chris@1 4207 </dd><dt class="enumerate-enumitem">
Chris@1 4208 3. </dt><dd
Chris@1 4209 class="enumerate-enumitem">decode blocksize <span
Chris@1 4210 class="cmtt-12">[n] </span>is equal to <span
Chris@1 4211 class="cmtt-12">[blocksize_0] </span>if <span
Chris@1 4212 class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
Chris@1 4213 else <span
Chris@1 4214 class="cmtt-12">[n] </span>is equal to <span
Chris@1 4215 class="cmtt-12">[blocksize_1]</span>.
Chris@1 4216 </dd><dt class="enumerate-enumitem">
Chris@1 4217 4. </dt><dd
Chris@1 4218 class="enumerate-enumitem">perform window selection and setup; this window is used later by the inverse
Chris@1 4219 MDCT:
Chris@1 4220 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4221 a) </dt><dd
Chris@1 4222 class="enumerate-enumitem">if this is a long window (the <span
Chris@1 4223 class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
Chris@1 4224 set):
Chris@1 4225 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4226 i. </dt><dd
Chris@1 4227 class="enumerate-enumitem">read 1 bit for <span
Chris@1 4228 class="cmtt-12">[previous_window_flag]</span>
Chris@1 4229 </dd><dt class="enumerate-enumitem">
Chris@1 4230 ii. </dt><dd
Chris@1 4231 class="enumerate-enumitem">read 1 bit for <span
Chris@1 4232 class="cmtt-12">[next_window_flag]</span>
Chris@1 4233
Chris@1 4234
Chris@1 4235
Chris@1 4236 </dd><dt class="enumerate-enumitem">
Chris@1 4237 iii. </dt><dd
Chris@1 4238 class="enumerate-enumitem">if <span
Chris@1 4239 class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
Chris@1 4240 be a hybrid window for lapping with a short block. See <a
Chris@1 4241 href="#paragraph.1" >paragraph&#x00A0;<a
Chris@1 4242 href="#x1-260001.3.2">1.3.2</a></a>,
Chris@1 4243 &#8220;<a
Chris@1 4244 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
Chris@1 4245 overlapping dissimilar windows. Else, the left half window will have normal
Chris@1 4246 long shape.
Chris@1 4247 </dd><dt class="enumerate-enumitem">
Chris@1 4248 iv. </dt><dd
Chris@1 4249 class="enumerate-enumitem">if <span
Chris@1 4250 class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
Chris@1 4251 a hybrid window for lapping with a short block. See <a
Chris@1 4252 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>,
Chris@1 4253 &#8220;<a
Chris@1 4254 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
Chris@1 4255 overlapping dissimilar windows. Else, the left right window will have normal
Chris@1 4256 long shape.</dd></dl>
Chris@1 4257 </dd><dt class="enumerate-enumitem">
Chris@1 4258 b) </dt><dd
Chris@1 4259 class="enumerate-enumitem">if this is a short window, the window is always the same short-window
Chris@1 4260 shape.</dd></dl>
Chris@1 4261 </dd></dl>
Chris@1 4262 <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span
Chris@1 4263 class="cmmi-12">y </span>= sin(<img
Chris@1 4264 src="Vorbis_I_spec1x.png" alt="&pi;2" class="frac" align="middle"> <span
Chris@1 4265 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
Chris@1 4266 class="cmr-8">2</span></sup>((<span
Chris@1 4267 class="cmmi-12">x </span>+ 0<span
Chris@1 4268 class="cmmi-12">.</span>5)<span
Chris@1 4269 class="cmmi-12">&#x2215;n </span><span
Chris@1 4270 class="cmsy-10x-x-120">&lowast; </span><span
Chris@1 4271 class="cmmi-12">&pi;</span>)), where <span
Chris@1 4272 class="cmmi-12">n </span>is window
Chris@1 4273 size and <span
Chris@1 4274 class="cmmi-12">x </span>ranges 0<span
Chris@1 4275 class="cmmi-12">&hellip;</span><span
Chris@1 4276 class="cmmi-12">n</span><span
Chris@1 4277 class="cmsy-10x-x-120">&minus; </span>1, but dissimilar lapping requirements can affect overall shape. Window
Chris@1 4278 generation proceeds as follows:
Chris@1 4279 <!--l. 327--><p class="noindent" >
Chris@1 4280 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4281 1. </dt><dd
Chris@1 4282 class="enumerate-enumitem"><span
Chris@1 4283 class="cmtt-12">[window_center] </span>= <span
Chris@1 4284 class="cmtt-12">[n] </span>/ 2
Chris@1 4285 </dd><dt class="enumerate-enumitem">
Chris@1 4286 2. </dt><dd
Chris@1 4287 class="enumerate-enumitem">if (<span
Chris@1 4288 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
Chris@1 4289 class="cmtt-12">[previous_window_flag] </span>is not set)
Chris@1 4290 then
Chris@1 4291 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4292 a) </dt><dd
Chris@1 4293 class="enumerate-enumitem"><span
Chris@1 4294 class="cmtt-12">[left_window_start] </span>= <span
Chris@1 4295 class="cmtt-12">[n]</span>/4 - <span
Chris@1 4296 class="cmtt-12">[blocksize_0]</span>/4
Chris@1 4297 </dd><dt class="enumerate-enumitem">
Chris@1 4298 b) </dt><dd
Chris@1 4299 class="enumerate-enumitem"><span
Chris@1 4300 class="cmtt-12">[left_window_end] </span>= <span
Chris@1 4301 class="cmtt-12">[n]</span>/4 + <span
Chris@1 4302 class="cmtt-12">[blocksize_0]</span>/4
Chris@1 4303 </dd><dt class="enumerate-enumitem">
Chris@1 4304 c) </dt><dd
Chris@1 4305 class="enumerate-enumitem"><span
Chris@1 4306 class="cmtt-12">[left_n] </span>= <span
Chris@1 4307 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
Chris@1 4308 <!--l. 336--><p class="noindent" >else
Chris@1 4309 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4310 a) </dt><dd
Chris@1 4311 class="enumerate-enumitem"><span
Chris@1 4312 class="cmtt-12">[left_window_start] </span>= 0
Chris@1 4313 </dd><dt class="enumerate-enumitem">
Chris@1 4314 b) </dt><dd
Chris@1 4315 class="enumerate-enumitem"><span
Chris@1 4316 class="cmtt-12">[left_window_end] </span>= <span
Chris@1 4317 class="cmtt-12">[window_center]</span>
Chris@1 4318
Chris@1 4319
Chris@1 4320
Chris@1 4321 </dd><dt class="enumerate-enumitem">
Chris@1 4322 c) </dt><dd
Chris@1 4323 class="enumerate-enumitem"><span
Chris@1 4324 class="cmtt-12">[left_n] </span>= <span
Chris@1 4325 class="cmtt-12">[n]</span>/2</dd></dl>
Chris@1 4326 </dd><dt class="enumerate-enumitem">
Chris@1 4327 3. </dt><dd
Chris@1 4328 class="enumerate-enumitem">if (<span
Chris@1 4329 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
Chris@1 4330 class="cmtt-12">[next_window_flag] </span>is not set) then
Chris@1 4331 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4332 a) </dt><dd
Chris@1 4333 class="enumerate-enumitem"><span
Chris@1 4334 class="cmtt-12">[right_window_start] </span>= <span
Chris@1 4335 class="cmtt-12">[n]*3</span>/4 - <span
Chris@1 4336 class="cmtt-12">[blocksize_0]</span>/4
Chris@1 4337 </dd><dt class="enumerate-enumitem">
Chris@1 4338 b) </dt><dd
Chris@1 4339 class="enumerate-enumitem"><span
Chris@1 4340 class="cmtt-12">[right_window_end] </span>= <span
Chris@1 4341 class="cmtt-12">[n]*3</span>/4 + <span
Chris@1 4342 class="cmtt-12">[blocksize_0]</span>/4
Chris@1 4343 </dd><dt class="enumerate-enumitem">
Chris@1 4344 c) </dt><dd
Chris@1 4345 class="enumerate-enumitem"><span
Chris@1 4346 class="cmtt-12">[right_n] </span>= <span
Chris@1 4347 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
Chris@1 4348 <!--l. 352--><p class="noindent" >else
Chris@1 4349 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4350 a) </dt><dd
Chris@1 4351 class="enumerate-enumitem"><span
Chris@1 4352 class="cmtt-12">[right_window_start] </span>= <span
Chris@1 4353 class="cmtt-12">[window_center]</span>
Chris@1 4354 </dd><dt class="enumerate-enumitem">
Chris@1 4355 b) </dt><dd
Chris@1 4356 class="enumerate-enumitem"><span
Chris@1 4357 class="cmtt-12">[right_window_end] </span>= <span
Chris@1 4358 class="cmtt-12">[n]</span>
Chris@1 4359 </dd><dt class="enumerate-enumitem">
Chris@1 4360 c) </dt><dd
Chris@1 4361 class="enumerate-enumitem"><span
Chris@1 4362 class="cmtt-12">[right_n] </span>= <span
Chris@1 4363 class="cmtt-12">[n]</span>/2</dd></dl>
Chris@1 4364 </dd><dt class="enumerate-enumitem">
Chris@1 4365 4. </dt><dd
Chris@1 4366 class="enumerate-enumitem">window from range 0 ... <span
Chris@1 4367 class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
Chris@1 4368 </dd><dt class="enumerate-enumitem">
Chris@1 4369 5. </dt><dd
Chris@1 4370 class="enumerate-enumitem">for <span
Chris@1 4371 class="cmtt-12">[i] </span>in range <span
Chris@1 4372 class="cmtt-12">[left_window_start] </span>... <span
Chris@1 4373 class="cmtt-12">[left_window_end]</span>-1, window(<span
Chris@1 4374 class="cmtt-12">[i]</span>) =
Chris@1 4375 sin(<img
Chris@1 4376 src="Vorbis_I_spec2x.png" alt="&pi;
Chris@1 4377 2" class="frac" align="middle"> <span
Chris@1 4378 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
Chris@1 4379 class="cmr-8">2</span></sup>( (<span
Chris@1 4380 class="cmtt-12">[i]</span>-<span
Chris@1 4381 class="cmtt-12">[left_window_start]</span>+0.5) / <span
Chris@1 4382 class="cmtt-12">[left_n] </span><span
Chris@1 4383 class="cmsy-10x-x-120">&lowast;</span><img
Chris@1 4384 src="Vorbis_I_spec3x.png" alt="&pi;
Chris@1 4385 2" class="frac" align="middle">) )
Chris@1 4386 </dd><dt class="enumerate-enumitem">
Chris@1 4387 6. </dt><dd
Chris@1 4388 class="enumerate-enumitem">window from range <span
Chris@1 4389 class="cmtt-12">[left_window_end] </span>... <span
Chris@1 4390 class="cmtt-12">[right_window_start]</span>-1 inclusive is
Chris@1 4391 one
Chris@1 4392 </dd><dt class="enumerate-enumitem">
Chris@1 4393 7. </dt><dd
Chris@1 4394 class="enumerate-enumitem">for <span
Chris@1 4395 class="cmtt-12">[i] </span>in range <span
Chris@1 4396 class="cmtt-12">[right_window_start] </span>... <span
Chris@1 4397 class="cmtt-12">[right_window_end]</span>-1, window(<span
Chris@1 4398 class="cmtt-12">[i]</span>) =
Chris@1 4399 sin(<img
Chris@1 4400 src="Vorbis_I_spec4x.png" alt="&pi;
Chris@1 4401 2" class="frac" align="middle"> <span
Chris@1 4402 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
Chris@1 4403 class="cmr-8">2</span></sup>( (<span
Chris@1 4404 class="cmtt-12">[i]</span>-<span
Chris@1 4405 class="cmtt-12">[right_window_start]</span>+0.5) / <span
Chris@1 4406 class="cmtt-12">[right_n] </span><span
Chris@1 4407 class="cmsy-10x-x-120">&lowast;</span><img
Chris@1 4408 src="Vorbis_I_spec5x.png" alt="&pi;
Chris@1 4409 2" class="frac" align="middle"> + <img
Chris@1 4410 src="Vorbis_I_spec6x.png" alt="&pi;
Chris@1 4411 2" class="frac" align="middle">) )
Chris@1 4412 </dd><dt class="enumerate-enumitem">
Chris@1 4413 8. </dt><dd
Chris@1 4414 class="enumerate-enumitem">window from range <span
Chris@1 4415 class="cmtt-12">[right_window_start] </span>... <span
Chris@1 4416 class="cmtt-12">[n]</span>-1 is zero</dd></dl>
Chris@1 4417 <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
Chris@1 4418 packet from the stream. An end of packet condition past this point is to be considered a possible
Chris@1 4419 nominal occurrence.
Chris@1 4420
Chris@1 4421
Chris@1 4422
Chris@1 4423 <!--l. 375--><p class="noindent" >
Chris@1 4424 <h5 class="subsubsectionHead"><span class="titlemark">4.3.2. </span> <a
Chris@1 4425 id="x1-730004.3.2"></a>floor curve decode</h5>
Chris@1 4426 <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span
Chris@1 4427 class="cmtt-12">[mode_number]</span>
Chris@1 4428 from configuration array <span
Chris@1 4429 class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
Chris@1 4430 <span
Chris@1 4431 class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
Chris@1 4432 array <span
Chris@1 4433 class="cmtt-12">[vorbis_mapping_configurations]</span>.
Chris@1 4434 <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
Chris@1 4435 <!--l. 386--><p class="noindent" >For each floor <span
Chris@1 4436 class="cmtt-12">[i] </span>of <span
Chris@1 4437 class="cmtt-12">[audio_channels]</span>
Chris@1 4438 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4439 1. </dt><dd
Chris@1 4440 class="enumerate-enumitem"><span
Chris@1 4441 class="cmtt-12">[submap_number] </span>= element <span
Chris@1 4442 class="cmtt-12">[i] </span>of vector [vorbis_mapping_mux]
Chris@1 4443 </dd><dt class="enumerate-enumitem">
Chris@1 4444 2. </dt><dd
Chris@1 4445 class="enumerate-enumitem"><span
Chris@1 4446 class="cmtt-12">[floor_number] </span>= element <span
Chris@1 4447 class="cmtt-12">[submap_number] </span>of vector [vorbis_submap_floor]
Chris@1 4448 </dd><dt class="enumerate-enumitem">
Chris@1 4449 3. </dt><dd
Chris@1 4450 class="enumerate-enumitem">if the floor type of this floor (vector
Chris@1 4451 <span
Chris@1 4452 class="cmtt-12">[vorbis_floor_types] </span>element <span
Chris@1 4453 class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
Chris@1 4454 channel <span
Chris@1 4455 class="cmtt-12">[i] </span>according to the <a
Chris@1 4456 href="#x1-930006.2.2">subsubsection&#x00A0;6.2.2</a>, &#8220;<a
Chris@1 4457 href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>&#8221;
Chris@1 4458 </dd><dt class="enumerate-enumitem">
Chris@1 4459 4. </dt><dd
Chris@1 4460 class="enumerate-enumitem">if the type of this floor is one then decode the floor for channel <span
Chris@1 4461 class="cmtt-12">[i] </span>according to the
Chris@1 4462 <a
Chris@1 4463 href="#x1-1000007.2.3">subsubsection&#x00A0;7.2.3</a>, &#8220;<a
Chris@1 4464 href="#x1-1000007.2.3">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>&#8221;
Chris@1 4465 </dd><dt class="enumerate-enumitem">
Chris@1 4466 5. </dt><dd
Chris@1 4467 class="enumerate-enumitem">save the needed decoded floor information for channel for later synthesis
Chris@1 4468 </dd><dt class="enumerate-enumitem">
Chris@1 4469 6. </dt><dd
Chris@1 4470 class="enumerate-enumitem">if the decoded floor returned &#8217;unused&#8217;, set vector <span
Chris@1 4471 class="cmtt-12">[no_residue] </span>element <span
Chris@1 4472 class="cmtt-12">[i] </span>to true,
Chris@1 4473 else set vector <span
Chris@1 4474 class="cmtt-12">[no_residue] </span>element <span
Chris@1 4475 class="cmtt-12">[i] </span>to false</dd></dl>
Chris@1 4476 <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
Chris@1 4477 output vectors and skipping to the add/overlap output stage.
Chris@1 4478 <!--l. 412--><p class="noindent" >
Chris@1 4479 <h5 class="subsubsectionHead"><span class="titlemark">4.3.3. </span> <a
Chris@1 4480 id="x1-740004.3.3"></a>nonzero vector propagate</h5>
Chris@1 4481 <!--l. 414--><p class="noindent" >A possible result of floor decode is that a specific vector is marked &#8217;unused&#8217; which indicates that
Chris@1 4482 that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
Chris@1 4483 coded in the stream, save for one complication. If some vectors are used and some are not,
Chris@1 4484
Chris@1 4485
Chris@1 4486
Chris@1 4487 channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
Chris@1 4488 vectors.
Chris@1 4489 <!--l. 421--><p class="noindent" >for each <span
Chris@1 4490 class="cmtt-12">[i] </span>from 0 ... <span
Chris@1 4491 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
Chris@1 4492 <!--l. 424--><p class="noindent" >
Chris@1 4493 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4494 1. </dt><dd
Chris@1 4495 class="enumerate-enumitem">if either <span
Chris@1 4496 class="cmtt-12">[no_residue] </span>entry for channel (<span
Chris@1 4497 class="cmtt-12">[vorbis_mapping_magnitude] </span>element
Chris@1 4498 <span
Chris@1 4499 class="cmtt-12">[i]</span>) or channel (<span
Chris@1 4500 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
Chris@1 4501 class="cmtt-12">[i]</span>) are set to false, then both
Chris@1 4502 must be set to false. Note that an &#8217;unused&#8217; floor has no decoded floor information; it
Chris@1 4503 is important that this is remembered at floor curve synthesis time.</dd></dl>
Chris@1 4504 <!--l. 436--><p class="noindent" >
Chris@1 4505 <h5 class="subsubsectionHead"><span class="titlemark">4.3.4. </span> <a
Chris@1 4506 id="x1-750004.3.4"></a>residue decode</h5>
Chris@1 4507 <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
Chris@1 4508 order.
Chris@1 4509 <!--l. 441--><p class="noindent" >for each submap <span
Chris@1 4510 class="cmtt-12">[i] </span>in order from 0 ... <span
Chris@1 4511 class="cmtt-12">[vorbis_mapping_submaps]</span>-1
Chris@1 4512 <!--l. 444--><p class="noindent" >
Chris@1 4513 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4514 1. </dt><dd
Chris@1 4515 class="enumerate-enumitem"><span
Chris@1 4516 class="cmtt-12">[ch] </span>= 0
Chris@1 4517 </dd><dt class="enumerate-enumitem">
Chris@1 4518 2. </dt><dd
Chris@1 4519 class="enumerate-enumitem">for each channel <span
Chris@1 4520 class="cmtt-12">[j] </span>in order from 0 ... <span
Chris@1 4521 class="cmtt-12">[audio_channels] </span>- 1
Chris@1 4522 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4523 a) </dt><dd
Chris@1 4524 class="enumerate-enumitem">if channel <span
Chris@1 4525 class="cmtt-12">[j] </span>in submap <span
Chris@1 4526 class="cmtt-12">[i] </span>(vector <span
Chris@1 4527 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
Chris@1 4528 class="cmtt-12">[j] </span>is equal to
Chris@1 4529 <span
Chris@1 4530 class="cmtt-12">[i]</span>)
Chris@1 4531 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4532 i. </dt><dd
Chris@1 4533 class="enumerate-enumitem">if vector <span
Chris@1 4534 class="cmtt-12">[no_residue] </span>element <span
Chris@1 4535 class="cmtt-12">[j] </span>is true
Chris@1 4536 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4537 A. </dt><dd
Chris@1 4538 class="enumerate-enumitem">vector <span
Chris@1 4539 class="cmtt-12">[do_not_decode_flag] </span>element <span
Chris@1 4540 class="cmtt-12">[ch] </span>is set</dd></dl>
Chris@1 4541 <!--l. 453--><p class="noindent" >else
Chris@1 4542 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4543 A. </dt><dd
Chris@1 4544 class="enumerate-enumitem">vector <span
Chris@1 4545 class="cmtt-12">[do_not_decode_flag] </span>element <span
Chris@1 4546 class="cmtt-12">[ch] </span>is unset</dd></dl>
Chris@1 4547 </dd><dt class="enumerate-enumitem">
Chris@1 4548 ii. </dt><dd
Chris@1 4549 class="enumerate-enumitem">increment <span
Chris@1 4550 class="cmtt-12">[ch]</span></dd></dl>
Chris@1 4551
Chris@1 4552
Chris@1 4553
Chris@1 4554 </dd></dl>
Chris@1 4555 </dd><dt class="enumerate-enumitem">
Chris@1 4556 3. </dt><dd
Chris@1 4557 class="enumerate-enumitem"><span
Chris@1 4558 class="cmtt-12">[residue_number] </span>= vector <span
Chris@1 4559 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
Chris@1 4560 class="cmtt-12">[i]</span>
Chris@1 4561 </dd><dt class="enumerate-enumitem">
Chris@1 4562 4. </dt><dd
Chris@1 4563 class="enumerate-enumitem"><span
Chris@1 4564 class="cmtt-12">[residue_type] </span>= vector <span
Chris@1 4565 class="cmtt-12">[vorbis_residue_types] </span>element <span
Chris@1 4566 class="cmtt-12">[residue_number]</span>
Chris@1 4567 </dd><dt class="enumerate-enumitem">
Chris@1 4568 5. </dt><dd
Chris@1 4569 class="enumerate-enumitem">decode <span
Chris@1 4570 class="cmtt-12">[ch] </span>vectors using residue <span
Chris@1 4571 class="cmtt-12">[residue_number]</span>, according to type <span
Chris@1 4572 class="cmtt-12">[residue_type]</span>,
Chris@1 4573 also passing vector <span
Chris@1 4574 class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
Chris@1 4575 not be decoded. Correct per-vector decode length is <span
Chris@1 4576 class="cmtt-12">[n]</span>/2.
Chris@1 4577 </dd><dt class="enumerate-enumitem">
Chris@1 4578 6. </dt><dd
Chris@1 4579 class="enumerate-enumitem"><span
Chris@1 4580 class="cmtt-12">[ch] </span>= 0
Chris@1 4581 </dd><dt class="enumerate-enumitem">
Chris@1 4582 7. </dt><dd
Chris@1 4583 class="enumerate-enumitem">for each channel <span
Chris@1 4584 class="cmtt-12">[j] </span>in order from 0 ... <span
Chris@1 4585 class="cmtt-12">[audio_channels]</span>
Chris@1 4586 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4587 a) </dt><dd
Chris@1 4588 class="enumerate-enumitem">if channel <span
Chris@1 4589 class="cmtt-12">[j] </span>is in submap <span
Chris@1 4590 class="cmtt-12">[i] </span>(vector <span
Chris@1 4591 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
Chris@1 4592 class="cmtt-12">[j] </span>is equal
Chris@1 4593 to <span
Chris@1 4594 class="cmtt-12">[i]</span>)
Chris@1 4595 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4596 i. </dt><dd
Chris@1 4597 class="enumerate-enumitem">residue vector for channel <span
Chris@1 4598 class="cmtt-12">[j] </span>is set to decoded residue vector <span
Chris@1 4599 class="cmtt-12">[ch]</span>
Chris@1 4600 </dd><dt class="enumerate-enumitem">
Chris@1 4601 ii. </dt><dd
Chris@1 4602 class="enumerate-enumitem">increment <span
Chris@1 4603 class="cmtt-12">[ch]</span></dd></dl>
Chris@1 4604 </dd></dl>
Chris@1 4605 </dd></dl>
Chris@1 4606 <!--l. 480--><p class="noindent" >
Chris@1 4607 <h5 class="subsubsectionHead"><span class="titlemark">4.3.5. </span> <a
Chris@1 4608 id="x1-760004.3.5"></a>inverse coupling</h5>
Chris@1 4609 <!--l. 482--><p class="noindent" >for each <span
Chris@1 4610 class="cmtt-12">[i] </span>from <span
Chris@1 4611 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
Chris@1 4612 <!--l. 485--><p class="noindent" >
Chris@1 4613 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4614 1. </dt><dd
Chris@1 4615 class="enumerate-enumitem"><span
Chris@1 4616 class="cmtt-12">[magnitude_vector] </span>= the residue vector for channel (vector
Chris@1 4617 <span
Chris@1 4618 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
Chris@1 4619 class="cmtt-12">[i]</span>)
Chris@1 4620 </dd><dt class="enumerate-enumitem">
Chris@1 4621 2. </dt><dd
Chris@1 4622 class="enumerate-enumitem"><span
Chris@1 4623 class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span
Chris@1 4624 class="cmtt-12">[vorbis_mapping_angle]</span>
Chris@1 4625
Chris@1 4626
Chris@1 4627
Chris@1 4628 element <span
Chris@1 4629 class="cmtt-12">[i]</span>)
Chris@1 4630 </dd><dt class="enumerate-enumitem">
Chris@1 4631 3. </dt><dd
Chris@1 4632 class="enumerate-enumitem">for each scalar value <span
Chris@1 4633 class="cmtt-12">[M] </span>in vector <span
Chris@1 4634 class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
Chris@1 4635 <span
Chris@1 4636 class="cmtt-12">[A] </span>in vector <span
Chris@1 4637 class="cmtt-12">[angle_vector]</span>:
Chris@1 4638 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4639 a) </dt><dd
Chris@1 4640 class="enumerate-enumitem">if (<span
Chris@1 4641 class="cmtt-12">[M] </span>is greater than zero)
Chris@1 4642 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4643 i. </dt><dd
Chris@1 4644 class="enumerate-enumitem">if (<span
Chris@1 4645 class="cmtt-12">[A] </span>is greater than zero)
Chris@1 4646 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4647 A. </dt><dd
Chris@1 4648 class="enumerate-enumitem"><span
Chris@1 4649 class="cmtt-12">[new_M] </span>= <span
Chris@1 4650 class="cmtt-12">[M]</span>
Chris@1 4651 </dd><dt class="enumerate-enumitem">
Chris@1 4652 B. </dt><dd
Chris@1 4653 class="enumerate-enumitem"><span
Chris@1 4654 class="cmtt-12">[new_A] </span>= <span
Chris@1 4655 class="cmtt-12">[M]</span>-<span
Chris@1 4656 class="cmtt-12">[A]</span></dd></dl>
Chris@1 4657 <!--l. 498--><p class="noindent" >else
Chris@1 4658 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4659 A. </dt><dd
Chris@1 4660 class="enumerate-enumitem"><span
Chris@1 4661 class="cmtt-12">[new_A] </span>= <span
Chris@1 4662 class="cmtt-12">[M]</span>
Chris@1 4663 </dd><dt class="enumerate-enumitem">
Chris@1 4664 B. </dt><dd
Chris@1 4665 class="enumerate-enumitem"><span
Chris@1 4666 class="cmtt-12">[new_M] </span>= <span
Chris@1 4667 class="cmtt-12">[M]</span>+<span
Chris@1 4668 class="cmtt-12">[A]</span></dd></dl>
Chris@1 4669 </dd></dl>
Chris@1 4670 <!--l. 505--><p class="noindent" >else
Chris@1 4671 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4672 i. </dt><dd
Chris@1 4673 class="enumerate-enumitem">if (<span
Chris@1 4674 class="cmtt-12">[A] </span>is greater than zero)
Chris@1 4675 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4676 A. </dt><dd
Chris@1 4677 class="enumerate-enumitem"><span
Chris@1 4678 class="cmtt-12">[new_M] </span>= <span
Chris@1 4679 class="cmtt-12">[M]</span>
Chris@1 4680 </dd><dt class="enumerate-enumitem">
Chris@1 4681 B. </dt><dd
Chris@1 4682 class="enumerate-enumitem"><span
Chris@1 4683 class="cmtt-12">[new_A] </span>= <span
Chris@1 4684 class="cmtt-12">[M]</span>+<span
Chris@1 4685 class="cmtt-12">[A]</span></dd></dl>
Chris@1 4686 <!--l. 512--><p class="noindent" >else
Chris@1 4687 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 4688 A. </dt><dd
Chris@1 4689 class="enumerate-enumitem"><span
Chris@1 4690 class="cmtt-12">[new_A] </span>= <span
Chris@1 4691 class="cmtt-12">[M]</span>
Chris@1 4692 </dd><dt class="enumerate-enumitem">
Chris@1 4693 B. </dt><dd
Chris@1 4694 class="enumerate-enumitem"><span
Chris@1 4695 class="cmtt-12">[new_M] </span>= <span
Chris@1 4696 class="cmtt-12">[M]</span>-<span
Chris@1 4697 class="cmtt-12">[A]</span></dd></dl>
Chris@1 4698 </dd></dl>
Chris@1 4699 </dd><dt class="enumerate-enumitem">
Chris@1 4700 b) </dt><dd
Chris@1 4701 class="enumerate-enumitem">set scalar value <span
Chris@1 4702 class="cmtt-12">[M] </span>in vector <span
Chris@1 4703 class="cmtt-12">[magnitude_vector] </span>to <span
Chris@1 4704 class="cmtt-12">[new_M]</span>
Chris@1 4705
Chris@1 4706
Chris@1 4707
Chris@1 4708 </dd><dt class="enumerate-enumitem">
Chris@1 4709 c) </dt><dd
Chris@1 4710 class="enumerate-enumitem">set scalar value <span
Chris@1 4711 class="cmtt-12">[A] </span>in vector <span
Chris@1 4712 class="cmtt-12">[angle_vector] </span>to <span
Chris@1 4713 class="cmtt-12">[new_A]</span></dd></dl>
Chris@1 4714 </dd></dl>
Chris@1 4715 <!--l. 529--><p class="noindent" >
Chris@1 4716 <h5 class="subsubsectionHead"><span class="titlemark">4.3.6. </span> <a
Chris@1 4717 id="x1-770004.3.6"></a>dot product</h5>
Chris@1 4718 <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
Chris@1 4719 packet type. Note that the vector synthesis length for floor computation is <span
Chris@1 4720 class="cmtt-12">[n]</span>/2.
Chris@1 4721 <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
Chris@1 4722 channel&#8217;s residue vector. The result is the dot product of the floor and residue vectors for
Chris@1 4723 each channel; the produced vectors are the length <span
Chris@1 4724 class="cmtt-12">[n]</span>/2 audio spectrum for each
Chris@1 4725 channel.
Chris@1 4726 <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
Chris@1 4727 implementation might be to assume that a 32 bit fixed-point representation for floor and
Chris@1 4728 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
Chris@1 4729 in all cases because it happens to mostly work with the current Xiph.Org reference
Chris@1 4730 encoder.
Chris@1 4731 <!--l. 550--><p class="noindent" >However, floor vector values can span <span
Chris@1 4732 class="cmsy-10x-x-120">&sim;</span>140dB (<span
Chris@1 4733 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
Chris@1 4734 vector should represent a minimum of 120dB (<span
Chris@1 4735 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
Chris@1 4736 bit PCM device. For the residue vector to represent full scale if the floor is nailed
Chris@1 4737 to <span
Chris@1 4738 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
Chris@1 4739 full scale if the floor is nailed at 0dB, it must be able to represent <span
Chris@1 4740 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
Chris@1 4741 Thus, in order to handle full range dynamics, a residue vector may span <span
Chris@1 4742 class="cmsy-10x-x-120">&minus;</span>140dB to
Chris@1 4743 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
Chris@1 4744 residue vector must be able to represent a 48 bit range and the dot product must
Chris@1 4745 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
Chris@1 4746 achieved using large (64 bit or larger) integers, or implementing a movable binary point
Chris@1 4747 representation.
Chris@1 4748 <!--l. 567--><p class="noindent" >
Chris@1 4749 <h5 class="subsubsectionHead"><span class="titlemark">4.3.7. </span> <a
Chris@1 4750 id="x1-780004.3.7"></a>inverse MDCT</h5>
Chris@1 4751 <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
Chris@1 4752
Chris@1 4753
Chris@1 4754
Chris@1 4755 inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
Chris@1 4756 available in <span class="cite">[<a
Chris@1 4757 href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
Chris@1 4758 earlier.
Chris@1 4759 <!--l. 576--><p class="noindent" >
Chris@1 4760 <h5 class="subsubsectionHead"><span class="titlemark">4.3.8. </span> <a
Chris@1 4761 id="x1-790004.3.8"></a>overlap_add</h5>
Chris@1 4762 <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
Chris@1 4763 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
Chris@1 4764 current window (as illustrated in <a
Chris@1 4765 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>, &#8220;<a
Chris@1 4766 href="#x1-260001.3.2">Window shape decode (long windows
Chris@1 4767 only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;). The overlapped portion produced from overlapping the previous and current frame data
Chris@1 4768 is finished data to be returned by the decoder. This data spans from the center of
Chris@1 4769 the previous window to the center of the current window. In the case of same-sized
Chris@1 4770 windows, the amount of data to return is one-half block consisting of and only of the
Chris@1 4771 overlapped portions. When overlapping a short and long window, much of the returned
Chris@1 4772 range does not actually overlap. This does not damage transform orthogonality. Pay
Chris@1 4773 attention however to returning the correct data range; the amount of data to be returned
Chris@1 4774 is:
Chris@1 4775 <!--l. 592--><p class="noindent" >
Chris@1 4776 <div class="fancyvrb" id="fancyvrb22">
Chris@1 4777 <a
Chris@1 4778 id="x1-79002r1"></a><span
Chris@1 4779 class="cmr-6">1</span><span
Chris@1 4780 class="cmtt-8">&#x00A0;</span><span
Chris@1 4781 class="cmtt-8">&#x00A0;window\_blocksize(previous\_window)/4+window\_blocksize(current\_window)/4</span>
Chris@1 4782 </div>
Chris@1 4783 <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
Chris@1 4784 windowsize/2-1, inclusive) of the current window.
Chris@1 4785 <!--l. 599--><p class="noindent" >Data is not returned from the first frame; it must be used to &#8217;prime&#8217; the decode engine. The
Chris@1 4786 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
Chris@1 4787 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
Chris@1 4788 <!--l. 606--><p class="noindent" >
Chris@1 4789 <h5 class="subsubsectionHead"><span class="titlemark">4.3.9. </span> <a
Chris@1 4790 id="x1-800004.3.9"></a>output channel order</h5>
Chris@1 4791 <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
Chris@1 4792 implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
Chris@1 4793 specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
Chris@1 4794
Chris@1 4795
Chris@1 4796
Chris@1 4797 greater-than-eight channels remains &#8217;left to the implementation&#8217;.
Chris@1 4798 <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a
Chris@1 4799 decoder to produce output with channels in any order. Any such decoder should explicitly
Chris@1 4800 document channel reordering behavior.
Chris@1 4801 <!--l. 620--><p class="noindent" >
Chris@1 4802 <dl class="description"><dt class="description">
Chris@1 4803 <span
Chris@1 4804 class="cmssbx-10x-x-120">one channel</span> </dt><dd
Chris@1 4805 class="description">the stream is monophonic
Chris@1 4806 </dd><dt class="description">
Chris@1 4807 <span
Chris@1 4808 class="cmssbx-10x-x-120">two channels</span> </dt><dd
Chris@1 4809 class="description">the stream is stereo. channel order: left, right
Chris@1 4810 </dd><dt class="description">
Chris@1 4811 <span
Chris@1 4812 class="cmssbx-10x-x-120">three channels</span> </dt><dd
Chris@1 4813 class="description">the stream is a 1d-surround encoding. channel order: left, center, right
Chris@1 4814 </dd><dt class="description">
Chris@1 4815 <span
Chris@1 4816 class="cmssbx-10x-x-120">four channels</span> </dt><dd
Chris@1 4817 class="description">the stream is quadraphonic surround. channel order: front left, front right,
Chris@1 4818 rear left, rear right
Chris@1 4819 </dd><dt class="description">
Chris@1 4820 <span
Chris@1 4821 class="cmssbx-10x-x-120">five channels</span> </dt><dd
Chris@1 4822 class="description">the stream is five-channel surround. channel order: front left, center, front
Chris@1 4823 right, rear left, rear right
Chris@1 4824 </dd><dt class="description">
Chris@1 4825 <span
Chris@1 4826 class="cmssbx-10x-x-120">six channels</span> </dt><dd
Chris@1 4827 class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear
Chris@1 4828 left, rear right, LFE
Chris@1 4829 </dd><dt class="description">
Chris@1 4830 <span
Chris@1 4831 class="cmssbx-10x-x-120">seven channels</span> </dt><dd
Chris@1 4832 class="description">the stream is 6.1 surround. channel order: front left, center, front right,
Chris@1 4833 side left, side right, rear center, LFE
Chris@1 4834 </dd><dt class="description">
Chris@1 4835 <span
Chris@1 4836 class="cmssbx-10x-x-120">eight channels</span> </dt><dd
Chris@1 4837 class="description">the stream is 7.1 surround. channel order: front left, center, front right,
Chris@1 4838 side left, side right, rear left, rear right, LFE
Chris@1 4839 </dd><dt class="description">
Chris@1 4840 <span
Chris@1 4841 class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd
Chris@1 4842 class="description">channel use and order is defined by the application
Chris@1 4843 </dd></dl>
Chris@1 4844 <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
Chris@1 4845 channel mappings (such as three and four channel <a
Chris@1 4846 href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
Chris@1 4847 mappings other than mapping 0.
Chris@1 4848
Chris@1 4849
Chris@1 4850
Chris@1 4851
Chris@1 4852
Chris@1 4853
Chris@1 4854 <h3 class="sectionHead"><span class="titlemark">5. </span> <a
Chris@1 4855 id="x1-810005"></a>comment field and header specification</h3>
Chris@1 4856 <!--l. 6--><p class="noindent" >
Chris@1 4857 <h4 class="subsectionHead"><span class="titlemark">5.1. </span> <a
Chris@1 4858 id="x1-820005.1"></a>Overview</h4>
Chris@1 4859 <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
Chris@1 4860 bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
Chris@1 4861 belongs in a separate logical bitstream (usually an XML stream type) that provides greater
Chris@1 4862 structure and machine parseability.
Chris@1 4863 <!--l. 14--><p class="noindent" >The comment field is meant to be used much like someone jotting a quick note on the bottom of
Chris@1 4864 a CDR. It should be a little information to remember the disc by and explain it to others; a
Chris@1 4865 short, to-the-point text note that need not only be a couple words, but isn&#8217;t going to be more
Chris@1 4866 than a short paragraph. The essentials, in other words, whatever they turn out to be,
Chris@1 4867 eg:
Chris@1 4868 <!--l. 21--><p class="noindent" >
Chris@1 4869 <div class="quote">
Chris@1 4870 <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span
Chris@1 4871 class="cmti-12">&#8220;I&#8217;m Still Around&#8221;</span>, opening
Chris@1 4872 for Moxy Früvous, 1997.</div>
Chris@1 4873 <!--l. 29--><p class="noindent" >
Chris@1 4874 <h4 class="subsectionHead"><span class="titlemark">5.2. </span> <a
Chris@1 4875 id="x1-830005.2"></a>Comment encoding</h4>
Chris@1 4876 <!--l. 31--><p class="noindent" >
Chris@1 4877 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1. </span> <a
Chris@1 4878 id="x1-840005.2.1"></a>Structure</h5>
Chris@1 4879 <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
Chris@1 4880 bounded to 2<sup><span
Chris@1 4881 class="cmr-8">32</span></sup> <span
Chris@1 4882 class="cmsy-10x-x-120">&minus; </span>1 and the length of each vector is limited to 2<sup><span
Chris@1 4883 class="cmr-8">32</span></sup> <span
Chris@1 4884 class="cmsy-10x-x-120">&minus; </span>1 bytes. The vector length is
Chris@1 4885
Chris@1 4886
Chris@1 4887
Chris@1 4888 encoded; the vector contents themselves are not null terminated. In addition to the vector list,
Chris@1 4889 there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
Chris@1 4890 example, the 1.0 release of libvorbis set the vendor string to &#8220;Xiph.Org libVorbis I
Chris@1 4891 20020717&#8221;.
Chris@1 4892 <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
Chris@1 4893 packing conventions of the vorbis codec. However, since data in the comment header
Chris@1 4894 is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
Chris@1 4895 integers.
Chris@1 4896 <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
Chris@1 4897 <!--l. 48--><p class="noindent" >
Chris@1 4898 <div class="fancyvrb" id="fancyvrb23">
Chris@1 4899 <a
Chris@1 4900 id="x1-84002r1"></a><span
Chris@1 4901 class="cmr-6">1</span><span
Chris@1 4902 class="cmtt-8">&#x00A0;</span><span
Chris@1 4903 class="cmtt-8">&#x00A0;</span><span
Chris@1 4904 class="cmtt-8">&#x00A0;</span><span
Chris@1 4905 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 4906 class="cmtt-8">&#x00A0;[vendor\_length]</span><span
Chris@1 4907 class="cmtt-8">&#x00A0;=</span><span
Chris@1 4908 class="cmtt-8">&#x00A0;read</span><span
Chris@1 4909 class="cmtt-8">&#x00A0;an</span><span
Chris@1 4910 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 4911 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 4912 class="cmtt-8">&#x00A0;of</span><span
Chris@1 4913 class="cmtt-8">&#x00A0;32</span><span
Chris@1 4914 class="cmtt-8">&#x00A0;bits</span>
Chris@1 4915 <br class="fancyvrb" /><a
Chris@1 4916 id="x1-84004r2"></a><span
Chris@1 4917 class="cmr-6">2</span><span
Chris@1 4918 class="cmtt-8">&#x00A0;</span><span
Chris@1 4919 class="cmtt-8">&#x00A0;</span><span
Chris@1 4920 class="cmtt-8">&#x00A0;</span><span
Chris@1 4921 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 4922 class="cmtt-8">&#x00A0;[vendor\_string]</span><span
Chris@1 4923 class="cmtt-8">&#x00A0;=</span><span
Chris@1 4924 class="cmtt-8">&#x00A0;read</span><span
Chris@1 4925 class="cmtt-8">&#x00A0;a</span><span
Chris@1 4926 class="cmtt-8">&#x00A0;UTF-8</span><span
Chris@1 4927 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 4928 class="cmtt-8">&#x00A0;as</span><span
Chris@1 4929 class="cmtt-8">&#x00A0;[vendor\_length]</span><span
Chris@1 4930 class="cmtt-8">&#x00A0;octets</span>
Chris@1 4931 <br class="fancyvrb" /><a
Chris@1 4932 id="x1-84006r3"></a><span
Chris@1 4933 class="cmr-6">3</span><span
Chris@1 4934 class="cmtt-8">&#x00A0;</span><span
Chris@1 4935 class="cmtt-8">&#x00A0;</span><span
Chris@1 4936 class="cmtt-8">&#x00A0;</span><span
Chris@1 4937 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 4938 class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
Chris@1 4939 class="cmtt-8">&#x00A0;=</span><span
Chris@1 4940 class="cmtt-8">&#x00A0;read</span><span
Chris@1 4941 class="cmtt-8">&#x00A0;an</span><span
Chris@1 4942 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 4943 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 4944 class="cmtt-8">&#x00A0;of</span><span
Chris@1 4945 class="cmtt-8">&#x00A0;32</span><span
Chris@1 4946 class="cmtt-8">&#x00A0;bits</span>
Chris@1 4947 <br class="fancyvrb" /><a
Chris@1 4948 id="x1-84008r4"></a><span
Chris@1 4949 class="cmr-6">4</span><span
Chris@1 4950 class="cmtt-8">&#x00A0;</span><span
Chris@1 4951 class="cmtt-8">&#x00A0;</span><span
Chris@1 4952 class="cmtt-8">&#x00A0;</span><span
Chris@1 4953 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 4954 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 4955 class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
Chris@1 4956 class="cmtt-8">&#x00A0;times</span><span
Chris@1 4957 class="cmtt-8">&#x00A0;{</span>
Chris@1 4958 <br class="fancyvrb" /><a
Chris@1 4959 id="x1-84010r5"></a><span
Chris@1 4960 class="cmr-6">5</span><span
Chris@1 4961 class="cmtt-8">&#x00A0;</span><span
Chris@1 4962 class="cmtt-8">&#x00A0;</span><span
Chris@1 4963 class="cmtt-8">&#x00A0;</span><span
Chris@1 4964 class="cmtt-8">&#x00A0;</span><span
Chris@1 4965 class="cmtt-8">&#x00A0;</span><span
Chris@1 4966 class="cmtt-8">&#x00A0;</span><span
Chris@1 4967 class="cmtt-8">&#x00A0;</span><span
Chris@1 4968 class="cmtt-8">&#x00A0;</span><span
Chris@1 4969 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 4970 class="cmtt-8">&#x00A0;[length]</span><span
Chris@1 4971 class="cmtt-8">&#x00A0;=</span><span
Chris@1 4972 class="cmtt-8">&#x00A0;read</span><span
Chris@1 4973 class="cmtt-8">&#x00A0;an</span><span
Chris@1 4974 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 4975 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 4976 class="cmtt-8">&#x00A0;of</span><span
Chris@1 4977 class="cmtt-8">&#x00A0;32</span><span
Chris@1 4978 class="cmtt-8">&#x00A0;bits</span>
Chris@1 4979 <br class="fancyvrb" /><a
Chris@1 4980 id="x1-84012r6"></a><span
Chris@1 4981 class="cmr-6">6</span><span
Chris@1 4982 class="cmtt-8">&#x00A0;</span><span
Chris@1 4983 class="cmtt-8">&#x00A0;</span><span
Chris@1 4984 class="cmtt-8">&#x00A0;</span><span
Chris@1 4985 class="cmtt-8">&#x00A0;</span><span
Chris@1 4986 class="cmtt-8">&#x00A0;</span><span
Chris@1 4987 class="cmtt-8">&#x00A0;</span><span
Chris@1 4988 class="cmtt-8">&#x00A0;</span><span
Chris@1 4989 class="cmtt-8">&#x00A0;</span><span
Chris@1 4990 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 4991 class="cmtt-8">&#x00A0;this</span><span
Chris@1 4992 class="cmtt-8">&#x00A0;iteration&#8217;s</span><span
Chris@1 4993 class="cmtt-8">&#x00A0;user</span><span
Chris@1 4994 class="cmtt-8">&#x00A0;comment</span><span
Chris@1 4995 class="cmtt-8">&#x00A0;=</span><span
Chris@1 4996 class="cmtt-8">&#x00A0;read</span><span
Chris@1 4997 class="cmtt-8">&#x00A0;a</span><span
Chris@1 4998 class="cmtt-8">&#x00A0;UTF-8</span><span
Chris@1 4999 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 5000 class="cmtt-8">&#x00A0;as</span><span
Chris@1 5001 class="cmtt-8">&#x00A0;[length]</span><span
Chris@1 5002 class="cmtt-8">&#x00A0;octets</span>
Chris@1 5003 <br class="fancyvrb" /><a
Chris@1 5004 id="x1-84014r7"></a><span
Chris@1 5005 class="cmr-6">7</span><span
Chris@1 5006 class="cmtt-8">&#x00A0;</span><span
Chris@1 5007 class="cmtt-8">&#x00A0;</span><span
Chris@1 5008 class="cmtt-8">&#x00A0;</span><span
Chris@1 5009 class="cmtt-8">&#x00A0;</span><span
Chris@1 5010 class="cmtt-8">&#x00A0;</span><span
Chris@1 5011 class="cmtt-8">&#x00A0;</span><span
Chris@1 5012 class="cmtt-8">&#x00A0;}</span>
Chris@1 5013 <br class="fancyvrb" /><a
Chris@1 5014 id="x1-84016r8"></a><span
Chris@1 5015 class="cmr-6">8</span><span
Chris@1 5016 class="cmtt-8">&#x00A0;</span><span
Chris@1 5017 class="cmtt-8">&#x00A0;</span><span
Chris@1 5018 class="cmtt-8">&#x00A0;</span><span
Chris@1 5019 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 5020 class="cmtt-8">&#x00A0;[framing\_bit]</span><span
Chris@1 5021 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5022 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5023 class="cmtt-8">&#x00A0;a</span><span
Chris@1 5024 class="cmtt-8">&#x00A0;single</span><span
Chris@1 5025 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 5026 class="cmtt-8">&#x00A0;as</span><span
Chris@1 5027 class="cmtt-8">&#x00A0;boolean</span>
Chris@1 5028 <br class="fancyvrb" /><a
Chris@1 5029 id="x1-84018r9"></a><span
Chris@1 5030 class="cmr-6">9</span><span
Chris@1 5031 class="cmtt-8">&#x00A0;</span><span
Chris@1 5032 class="cmtt-8">&#x00A0;</span><span
Chris@1 5033 class="cmtt-8">&#x00A0;</span><span
Chris@1 5034 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 5035 class="cmtt-8">&#x00A0;if</span><span
Chris@1 5036 class="cmtt-8">&#x00A0;(</span><span
Chris@1 5037 class="cmtt-8">&#x00A0;[framing\_bit]</span><span
Chris@1 5038 class="cmtt-8">&#x00A0;unset</span><span
Chris@1 5039 class="cmtt-8">&#x00A0;or</span><span
Chris@1 5040 class="cmtt-8">&#x00A0;end-of-packet</span><span
Chris@1 5041 class="cmtt-8">&#x00A0;)</span><span
Chris@1 5042 class="cmtt-8">&#x00A0;then</span><span
Chris@1 5043 class="cmtt-8">&#x00A0;ERROR</span>
Chris@1 5044 <br class="fancyvrb" /><a
Chris@1 5045 id="x1-84020r10"></a><span
Chris@1 5046 class="cmr-6">10</span><span
Chris@1 5047 class="cmtt-8">&#x00A0;</span><span
Chris@1 5048 class="cmtt-8">&#x00A0;</span><span
Chris@1 5049 class="cmtt-8">&#x00A0;</span><span
Chris@1 5050 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 5051 class="cmtt-8">&#x00A0;done.</span>
Chris@1 5052 </div>
Chris@1 5053 <!--l. 64--><p class="noindent" >
Chris@1 5054 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2. </span> <a
Chris@1 5055 id="x1-850005.2.2"></a>Content vector format</h5>
Chris@1 5056 <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
Chris@1 5057 comment fields consist of a field name and a corresponding value and look like:
Chris@1 5058 <!--l. 70--><p class="noindent" >
Chris@1 5059 <div class="quote">
Chris@1 5060 <!--l. 71--><p class="noindent" >
Chris@1 5061 <div class="fancyvrb" id="fancyvrb24">
Chris@1 5062 <a
Chris@1 5063 id="x1-85002r1"></a><span
Chris@1 5064 class="cmr-6">1</span><span
Chris@1 5065 class="cmtt-8">&#x00A0;</span><span
Chris@1 5066 class="cmtt-8">&#x00A0;comment[0]="ARTIST=me";</span>
Chris@1 5067 <br class="fancyvrb" /><a
Chris@1 5068 id="x1-85004r2"></a><span
Chris@1 5069 class="cmr-6">2</span><span
Chris@1 5070 class="cmtt-8">&#x00A0;</span><span
Chris@1 5071 class="cmtt-8">&#x00A0;comment[1]="TITLE=the</span><span
Chris@1 5072 class="cmtt-8">&#x00A0;sound</span><span
Chris@1 5073 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5074 class="cmtt-8">&#x00A0;Vorbis";</span>
Chris@1 5075 </div>
Chris@1 5076 </div>
Chris@1 5077
Chris@1 5078
Chris@1 5079
Chris@1 5080 <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (&#8217;=&#8217;)
Chris@1 5081 excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
Chris@1 5082 ASCII 0x61 through 0x7A inclusive (characters a-z).
Chris@1 5083 <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (&#8217;=&#8217;); this equals sign is used to
Chris@1 5084 terminate the field name.
Chris@1 5085 <!--l. 87--><p class="noindent" >0x3D is followed by 8 bit clean UTF-8 encoded value of the field contents to the end of the
Chris@1 5086 field.
Chris@1 5087 <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 5088 id="x1-860005.2.2"></a><span
Chris@1 5089 class="cmbx-12">Field names</span></span>
Chris@1 5090 Below is a proposed, minimal list of standard field names with a description of intended use. No
Chris@1 5091 single or group of field names is mandatory; a comment header may contain one, all or none of
Chris@1 5092 the names in this list.
Chris@1 5093 <!--l. 99--><p class="noindent" >
Chris@1 5094 <dl class="description"><dt class="description">
Chris@1 5095 <span
Chris@1 5096 class="cmssbx-10x-x-120">TITLE</span> </dt><dd
Chris@1 5097 class="description">Track/Work name
Chris@1 5098 </dd><dt class="description">
Chris@1 5099 <span
Chris@1 5100 class="cmssbx-10x-x-120">VERSION</span> </dt><dd
Chris@1 5101 class="description">The version field may be used to differentiate multiple versions of the same
Chris@1 5102 track title in a single collection. (e.g. remix info)
Chris@1 5103 </dd><dt class="description">
Chris@1 5104 <span
Chris@1 5105 class="cmssbx-10x-x-120">ALBUM</span> </dt><dd
Chris@1 5106 class="description">The collection name to which this track belongs
Chris@1 5107 </dd><dt class="description">
Chris@1 5108 <span
Chris@1 5109 class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd
Chris@1 5110 class="description">The track number of this piece if part of a specific larger collection or
Chris@1 5111 album
Chris@1 5112 </dd><dt class="description">
Chris@1 5113 <span
Chris@1 5114 class="cmssbx-10x-x-120">ARTIST</span> </dt><dd
Chris@1 5115 class="description">The artist generally considered responsible for the work. In popular music this is
Chris@1 5116 usually the performing band or singer. For classical music it would be the composer.
Chris@1 5117 For an audio book it would be the author of the original text.
Chris@1 5118 </dd><dt class="description">
Chris@1 5119 <span
Chris@1 5120 class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd
Chris@1 5121 class="description">The artist(s) who performed the work. In classical music this would be the
Chris@1 5122 conductor, orchestra, soloists. In an audio book it would be the actor who did the
Chris@1 5123 reading. In popular music this is typically the same as the ARTIST and is omitted.
Chris@1 5124 </dd><dt class="description">
Chris@1 5125 <span
Chris@1 5126 class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd
Chris@1 5127 class="description">Copyright attribution, e.g., &#8217;2001 Nobody&#8217;s Band&#8217; or &#8217;1999 Jack Moffitt&#8217;
Chris@1 5128 </dd><dt class="description">
Chris@1 5129
Chris@1 5130
Chris@1 5131
Chris@1 5132 <span
Chris@1 5133 class="cmssbx-10x-x-120">LICENSE</span> </dt><dd
Chris@1 5134 class="description">License information, eg, &#8217;All Rights Reserved&#8217;, &#8217;Any Use Permitted&#8217;, a URL to
Chris@1 5135 a license such as a Creative
Chris@1 5136 Commons license (&#8221;www.creativecommons.org/blahblah/license.html&#8221;) or the EFF
Chris@1 5137 Open Audio License (&#8217;distributed under the terms of the Open Audio License. see
Chris@1 5138 http://www.eff.org/IP/Open_licenses/eff_oal.html for details&#8217;), etc.
Chris@1 5139 </dd><dt class="description">
Chris@1 5140 <span
Chris@1 5141 class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd
Chris@1 5142 class="description">Name of the organization producing the track (i.e. the &#8217;record label&#8217;)
Chris@1 5143 </dd><dt class="description">
Chris@1 5144 <span
Chris@1 5145 class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd
Chris@1 5146 class="description">A short text description of the contents
Chris@1 5147 </dd><dt class="description">
Chris@1 5148 <span
Chris@1 5149 class="cmssbx-10x-x-120">GENRE</span> </dt><dd
Chris@1 5150 class="description">A short text indication of music genre
Chris@1 5151 </dd><dt class="description">
Chris@1 5152 <span
Chris@1 5153 class="cmssbx-10x-x-120">DATE</span> </dt><dd
Chris@1 5154 class="description">Date the track was recorded
Chris@1 5155 </dd><dt class="description">
Chris@1 5156 <span
Chris@1 5157 class="cmssbx-10x-x-120">LOCATION</span> </dt><dd
Chris@1 5158 class="description">Location where track was recorded
Chris@1 5159 </dd><dt class="description">
Chris@1 5160 <span
Chris@1 5161 class="cmssbx-10x-x-120">CONTACT</span> </dt><dd
Chris@1 5162 class="description">Contact information for the creators or distributors of the track. This could
Chris@1 5163 be a URL, an email address, the physical address of the producing label.
Chris@1 5164 </dd><dt class="description">
Chris@1 5165 <span
Chris@1 5166 class="cmssbx-10x-x-120">ISRC</span> </dt><dd
Chris@1 5167 class="description">International Standard Recording Code for the track; see <a
Chris@1 5168 href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
Chris@1 5169 more information on ISRC numbers.
Chris@1 5170 </dd></dl>
Chris@1 5171 <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a
Chris@1 5172 id="x1-870005.2.2"></a><span
Chris@1 5173 class="cmbx-12">Implications</span></span>
Chris@1 5174 Field names should not be &#8217;internationalized&#8217;; this is a concession to simplicity not
Chris@1 5175 an attempt to exclude the majority of the world that doesn&#8217;t speak English. Field
Chris@1 5176 <span
Chris@1 5177 class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
Chris@1 5178 language.
Chris@1 5179 <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
Chris@1 5180 the field name is bounded in a known way. Thus we also have the length of the field
Chris@1 5181 contents.
Chris@1 5182 <!--l. 170--><p class="noindent" >Individual &#8217;vendors&#8217; may use non-standard field names within reason. The proper
Chris@1 5183 use of comment fields should be clear through context at this point. Abuse will be
Chris@1 5184 discouraged.
Chris@1 5185
Chris@1 5186
Chris@1 5187
Chris@1 5188 <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to &#8217;nonstandard&#8217; field names. Vendors should make some effort
Chris@1 5189 to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
Chris@1 5190 tags here to help with standardization.
Chris@1 5191 <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
Chris@1 5192 example, assume a track was recorded by three well know artists; the following is permissible,
Chris@1 5193 and encouraged:
Chris@1 5194 <!--l. 183--><p class="noindent" >
Chris@1 5195 <div class="quote">
Chris@1 5196 <!--l. 184--><p class="noindent" >
Chris@1 5197 <div class="fancyvrb" id="fancyvrb25">
Chris@1 5198 <a
Chris@1 5199 id="x1-87002r1"></a><span
Chris@1 5200 class="cmr-6">1</span><span
Chris@1 5201 class="cmtt-8">&#x00A0;</span><span
Chris@1 5202 class="cmtt-8">&#x00A0;ARTIST=Dizzy</span><span
Chris@1 5203 class="cmtt-8">&#x00A0;Gillespie</span>
Chris@1 5204 <br class="fancyvrb" /><a
Chris@1 5205 id="x1-87004r2"></a><span
Chris@1 5206 class="cmr-6">2</span><span
Chris@1 5207 class="cmtt-8">&#x00A0;</span><span
Chris@1 5208 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
Chris@1 5209 class="cmtt-8">&#x00A0;Rollins</span>
Chris@1 5210 <br class="fancyvrb" /><a
Chris@1 5211 id="x1-87006r3"></a><span
Chris@1 5212 class="cmr-6">3</span><span
Chris@1 5213 class="cmtt-8">&#x00A0;</span><span
Chris@1 5214 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
Chris@1 5215 class="cmtt-8">&#x00A0;Stitt</span>
Chris@1 5216 </div>
Chris@1 5217 </div>
Chris@1 5218 <!--l. 197--><p class="noindent" >
Chris@1 5219 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3. </span> <a
Chris@1 5220 id="x1-880005.2.3"></a>Encoding</h5>
Chris@1 5221 <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
Chris@1 5222 first bitstream header packet, it is not generally the only packet on the second page and may not
Chris@1 5223 be restricted to within the second bitstream page. The length of the comment header packet is
Chris@1 5224 (practically) unbounded. The comment header packet is not optional; it must be present in the
Chris@1 5225 bitstream even if it is effectively empty.
Chris@1 5226 <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg&#8217;s standard bitstream mapping which
Chris@1 5227 renders least-significant-bit of the word to be coded into the least significant available bit of the
Chris@1 5228 current bitstream octet first):
Chris@1 5229 <!--l. 213--><p class="noindent" >
Chris@1 5230 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 5231 1. </dt><dd
Chris@1 5232 class="enumerate-enumitem">Vendor string length (32 bit unsigned quantity specifying number of octets)
Chris@1 5233 </dd><dt class="enumerate-enumitem">
Chris@1 5234 2. </dt><dd
Chris@1 5235 class="enumerate-enumitem">Vendor string ([vendor string length] octets coded from beginning of string to end of
Chris@1 5236 string, not null terminated)
Chris@1 5237
Chris@1 5238
Chris@1 5239
Chris@1 5240 </dd><dt class="enumerate-enumitem">
Chris@1 5241 3. </dt><dd
Chris@1 5242 class="enumerate-enumitem">Number of comment fields (32 bit unsigned quantity specifying number of fields)
Chris@1 5243 </dd><dt class="enumerate-enumitem">
Chris@1 5244 4. </dt><dd
Chris@1 5245 class="enumerate-enumitem">Comment field 0 length (if [Number of comment fields] <span
Chris@1 5246 class="cmmi-12">&#x003E; </span>0; 32 bit unsigned quantity
Chris@1 5247 specifying number of octets)
Chris@1 5248 </dd><dt class="enumerate-enumitem">
Chris@1 5249 5. </dt><dd
Chris@1 5250 class="enumerate-enumitem">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
Chris@1 5251 end of string, not null terminated)
Chris@1 5252 </dd><dt class="enumerate-enumitem">
Chris@1 5253 6. </dt><dd
Chris@1 5254 class="enumerate-enumitem">Comment field 1 length (if [Number of comment fields] <span
Chris@1 5255 class="cmmi-12">&#x003E; </span>1...)...
Chris@1 5256 </dd></dl>
Chris@1 5257 <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
Chris@1 5258 in <span
Chris@1 5259 class="cmtt-12">vorbis/lib/info.c</span>, <span
Chris@1 5260 class="cmtt-12">_vorbis_pack_comment() </span>and <span
Chris@1 5261 class="cmtt-12">_vorbis_unpack_comment()</span>.
Chris@1 5262
Chris@1 5263
Chris@1 5264
Chris@1 5265
Chris@1 5266
Chris@1 5267
Chris@1 5268 <h3 class="sectionHead"><span class="titlemark">6. </span> <a
Chris@1 5269 id="x1-890006"></a>Floor type 0 setup and decode</h3>
Chris@1 5270 <!--l. 6--><p class="noindent" >
Chris@1 5271 <h4 class="subsectionHead"><span class="titlemark">6.1. </span> <a
Chris@1 5272 id="x1-900006.1"></a>Overview</h4>
Chris@1 5273 <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
Chris@1 5274 Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
Chris@1 5275 response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
Chris@1 5276 impulse response filter as would be used in linear predictive coding; LSP representation may be
Chris@1 5277 converted to LPC representation and vice-versa.
Chris@1 5278 <!--l. 18--><p class="noindent" >
Chris@1 5279 <h4 class="subsectionHead"><span class="titlemark">6.2. </span> <a
Chris@1 5280 id="x1-910006.2"></a>Floor 0 format</h4>
Chris@1 5281 <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
Chris@1 5282 coding/decoding the LSP filter coefficient values used by each frame.
Chris@1 5283 <!--l. 24--><p class="noindent" >
Chris@1 5284 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1. </span> <a
Chris@1 5285 id="x1-920006.2.1"></a>header decode</h5>
Chris@1 5286 <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
Chris@1 5287 packet). configuration decode proceeds as follows:
Chris@1 5288 <!--l. 30--><p class="noindent" >
Chris@1 5289 <div class="fancyvrb" id="fancyvrb26">
Chris@1 5290 <a
Chris@1 5291 id="x1-92002r1"></a><span
Chris@1 5292 class="cmr-6">1</span><span
Chris@1 5293 class="cmtt-8">&#x00A0;</span><span
Chris@1 5294 class="cmtt-8">&#x00A0;</span><span
Chris@1 5295 class="cmtt-8">&#x00A0;</span><span
Chris@1 5296 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 5297 class="cmtt-8">&#x00A0;[floor0_order]</span><span
Chris@1 5298 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5299 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5300 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5301 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5302 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5303 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5304 class="cmtt-8">&#x00A0;8</span><span
Chris@1 5305 class="cmtt-8">&#x00A0;bits</span>
Chris@1 5306 <br class="fancyvrb" /><a
Chris@1 5307 id="x1-92004r2"></a><span
Chris@1 5308 class="cmr-6">2</span><span
Chris@1 5309 class="cmtt-8">&#x00A0;</span><span
Chris@1 5310 class="cmtt-8">&#x00A0;</span><span
Chris@1 5311 class="cmtt-8">&#x00A0;</span><span
Chris@1 5312 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 5313 class="cmtt-8">&#x00A0;[floor0_rate]</span><span
Chris@1 5314 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5315 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5316 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5317 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5318 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5319 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5320 class="cmtt-8">&#x00A0;16</span><span
Chris@1 5321 class="cmtt-8">&#x00A0;bits</span>
Chris@1 5322 <br class="fancyvrb" /><a
Chris@1 5323 id="x1-92006r3"></a><span
Chris@1 5324 class="cmr-6">3</span><span
Chris@1 5325 class="cmtt-8">&#x00A0;</span><span
Chris@1 5326 class="cmtt-8">&#x00A0;</span><span
Chris@1 5327 class="cmtt-8">&#x00A0;</span><span
Chris@1 5328 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 5329 class="cmtt-8">&#x00A0;[floor0_bark_map_size]</span><span
Chris@1 5330 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5331 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5332 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5333 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5334 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5335 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5336 class="cmtt-8">&#x00A0;16</span><span
Chris@1 5337 class="cmtt-8">&#x00A0;bits</span>
Chris@1 5338 <br class="fancyvrb" /><a
Chris@1 5339 id="x1-92008r4"></a><span
Chris@1 5340 class="cmr-6">4</span><span
Chris@1 5341 class="cmtt-8">&#x00A0;</span><span
Chris@1 5342 class="cmtt-8">&#x00A0;</span><span
Chris@1 5343 class="cmtt-8">&#x00A0;</span><span
Chris@1 5344 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 5345 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
Chris@1 5346 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5347 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5348 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5349 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5350 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5351 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5352 class="cmtt-8">&#x00A0;six</span><span
Chris@1 5353 class="cmtt-8">&#x00A0;bits</span>
Chris@1 5354 <br class="fancyvrb" /><a
Chris@1 5355 id="x1-92010r5"></a><span
Chris@1 5356 class="cmr-6">5</span><span
Chris@1 5357 class="cmtt-8">&#x00A0;</span><span
Chris@1 5358 class="cmtt-8">&#x00A0;</span><span
Chris@1 5359 class="cmtt-8">&#x00A0;</span><span
Chris@1 5360 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 5361 class="cmtt-8">&#x00A0;[floor0_amplitude_offset]</span><span
Chris@1 5362 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5363 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5364 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5365 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5366 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5367 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5368 class="cmtt-8">&#x00A0;eight</span><span
Chris@1 5369 class="cmtt-8">&#x00A0;bits</span>
Chris@1 5370 <br class="fancyvrb" /><a
Chris@1 5371 id="x1-92012r6"></a><span
Chris@1 5372 class="cmr-6">6</span><span
Chris@1 5373 class="cmtt-8">&#x00A0;</span><span
Chris@1 5374 class="cmtt-8">&#x00A0;</span><span
Chris@1 5375 class="cmtt-8">&#x00A0;</span><span
Chris@1 5376 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 5377 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
Chris@1 5378 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5379 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5380 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5381 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5382 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5383 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5384 class="cmtt-8">&#x00A0;four</span><span
Chris@1 5385 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 5386 class="cmtt-8">&#x00A0;and</span><span
Chris@1 5387 class="cmtt-8">&#x00A0;add</span><span
Chris@1 5388 class="cmtt-8">&#x00A0;1</span>
Chris@1 5389 <br class="fancyvrb" /><a
Chris@1 5390 id="x1-92014r7"></a><span
Chris@1 5391 class="cmr-6">7</span><span
Chris@1 5392 class="cmtt-8">&#x00A0;</span><span
Chris@1 5393 class="cmtt-8">&#x00A0;</span><span
Chris@1 5394 class="cmtt-8">&#x00A0;</span><span
Chris@1 5395 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 5396 class="cmtt-8">&#x00A0;array</span><span
Chris@1 5397 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
Chris@1 5398 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5399 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5400 class="cmtt-8">&#x00A0;a</span><span
Chris@1 5401 class="cmtt-8">&#x00A0;list</span><span
Chris@1 5402 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5403 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
Chris@1 5404 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5405 class="cmtt-8">&#x00A0;integers</span><span
Chris@1 5406 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5407 class="cmtt-8">&#x00A0;eight</span><span
Chris@1 5408 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 5409 class="cmtt-8">&#x00A0;each;</span>
Chris@1 5410 </div>
Chris@1 5411
Chris@1 5412
Chris@1 5413
Chris@1 5414 <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
Chris@1 5415 In addition, any element of the array <span
Chris@1 5416 class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
Chris@1 5417 codebook number for this bitstream is an error condition that also renders the stream
Chris@1 5418 undecodable.
Chris@1 5419 <!--l. 48--><p class="noindent" >
Chris@1 5420 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2. </span> <a
Chris@1 5421 id="x1-930006.2.2"></a>packet decode</h5>
Chris@1 5422 <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
Chris@1 5423 amplitude and <span
Chris@1 5424 class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
Chris@1 5425 computing the floor curve, which is defined as the frequency response of the decoded LSP
Chris@1 5426 filter.
Chris@1 5427 <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
Chris@1 5428 <div class="fancyvrb" id="fancyvrb27">
Chris@1 5429 <a
Chris@1 5430 id="x1-93002r1"></a><span
Chris@1 5431 class="cmr-6">1</span><span
Chris@1 5432 class="cmtt-8">&#x00A0;</span><span
Chris@1 5433 class="cmtt-8">&#x00A0;</span><span
Chris@1 5434 class="cmtt-8">&#x00A0;</span><span
Chris@1 5435 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 5436 class="cmtt-8">&#x00A0;[amplitude]</span><span
Chris@1 5437 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5438 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5439 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5440 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5441 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5442 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5443 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
Chris@1 5444 class="cmtt-8">&#x00A0;bits</span>
Chris@1 5445 <br class="fancyvrb" /><a
Chris@1 5446 id="x1-93004r2"></a><span
Chris@1 5447 class="cmr-6">2</span><span
Chris@1 5448 class="cmtt-8">&#x00A0;</span><span
Chris@1 5449 class="cmtt-8">&#x00A0;</span><span
Chris@1 5450 class="cmtt-8">&#x00A0;</span><span
Chris@1 5451 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 5452 class="cmtt-8">&#x00A0;if</span><span
Chris@1 5453 class="cmtt-8">&#x00A0;(</span><span
Chris@1 5454 class="cmtt-8">&#x00A0;[amplitude]</span><span
Chris@1 5455 class="cmtt-8">&#x00A0;is</span><span
Chris@1 5456 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 5457 class="cmtt-8">&#x00A0;than</span><span
Chris@1 5458 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 5459 class="cmtt-8">&#x00A0;)</span><span
Chris@1 5460 class="cmtt-8">&#x00A0;</span><span
Chris@1 5461 class="cmsy-8">{</span>
Chris@1 5462 <br class="fancyvrb" /><a
Chris@1 5463 id="x1-93006r3"></a><span
Chris@1 5464 class="cmr-6">3</span><span
Chris@1 5465 class="cmtt-8">&#x00A0;</span><span
Chris@1 5466 class="cmtt-8">&#x00A0;</span><span
Chris@1 5467 class="cmtt-8">&#x00A0;</span><span
Chris@1 5468 class="cmtt-8">&#x00A0;</span><span
Chris@1 5469 class="cmtt-8">&#x00A0;</span><span
Chris@1 5470 class="cmtt-8">&#x00A0;</span><span
Chris@1 5471 class="cmtt-8">&#x00A0;</span><span
Chris@1 5472 class="cmtt-8">&#x00A0;</span><span
Chris@1 5473 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 5474 class="cmtt-8">&#x00A0;[coefficients]</span><span
Chris@1 5475 class="cmtt-8">&#x00A0;is</span><span
Chris@1 5476 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5477 class="cmtt-8">&#x00A0;empty,</span><span
Chris@1 5478 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 5479 class="cmtt-8">&#x00A0;length</span><span
Chris@1 5480 class="cmtt-8">&#x00A0;vector</span>
Chris@1 5481 <br class="fancyvrb" /><a
Chris@1 5482 id="x1-93008r4"></a><span
Chris@1 5483 class="cmr-6">4</span><span
Chris@1 5484 class="cmtt-8">&#x00A0;</span><span
Chris@1 5485 class="cmtt-8">&#x00A0;</span><span
Chris@1 5486 class="cmtt-8">&#x00A0;</span><span
Chris@1 5487 class="cmtt-8">&#x00A0;</span><span
Chris@1 5488 class="cmtt-8">&#x00A0;</span><span
Chris@1 5489 class="cmtt-8">&#x00A0;</span><span
Chris@1 5490 class="cmtt-8">&#x00A0;</span><span
Chris@1 5491 class="cmtt-8">&#x00A0;</span><span
Chris@1 5492 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 5493 class="cmtt-8">&#x00A0;[booknumber]</span><span
Chris@1 5494 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5495 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5496 class="cmtt-8">&#x00A0;an</span><span
Chris@1 5497 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 5498 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 5499 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5500 class="cmtt-8">&#x00A0;</span><a
Chris@1 5501 href="#x1-1170009.2.1"><span
Chris@1 5502 class="cmtt-8">ilog</span></a><span
Chris@1 5503 class="cmtt-8">(</span><span
Chris@1 5504 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
Chris@1 5505 class="cmtt-8">&#x00A0;)</span><span
Chris@1 5506 class="cmtt-8">&#x00A0;bits</span>
Chris@1 5507 <br class="fancyvrb" /><a
Chris@1 5508 id="x1-93010r5"></a><span
Chris@1 5509 class="cmr-6">5</span><span
Chris@1 5510 class="cmtt-8">&#x00A0;</span><span
Chris@1 5511 class="cmtt-8">&#x00A0;</span><span
Chris@1 5512 class="cmtt-8">&#x00A0;</span><span
Chris@1 5513 class="cmtt-8">&#x00A0;</span><span
Chris@1 5514 class="cmtt-8">&#x00A0;</span><span
Chris@1 5515 class="cmtt-8">&#x00A0;</span><span
Chris@1 5516 class="cmtt-8">&#x00A0;</span><span
Chris@1 5517 class="cmtt-8">&#x00A0;</span><span
Chris@1 5518 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 5519 class="cmtt-8">&#x00A0;if</span><span
Chris@1 5520 class="cmtt-8">&#x00A0;(</span><span
Chris@1 5521 class="cmtt-8">&#x00A0;[booknumber]</span><span
Chris@1 5522 class="cmtt-8">&#x00A0;is</span><span
Chris@1 5523 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 5524 class="cmtt-8">&#x00A0;than</span><span
Chris@1 5525 class="cmtt-8">&#x00A0;the</span><span
Chris@1 5526 class="cmtt-8">&#x00A0;highest</span><span
Chris@1 5527 class="cmtt-8">&#x00A0;number</span><span
Chris@1 5528 class="cmtt-8">&#x00A0;decode</span><span
Chris@1 5529 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 5530 class="cmtt-8">&#x00A0;)</span><span
Chris@1 5531 class="cmtt-8">&#x00A0;then</span><span
Chris@1 5532 class="cmtt-8">&#x00A0;packet</span><span
Chris@1 5533 class="cmtt-8">&#x00A0;is</span><span
Chris@1 5534 class="cmtt-8">&#x00A0;undecodable</span>
Chris@1 5535 <br class="fancyvrb" /><a
Chris@1 5536 id="x1-93012r6"></a><span
Chris@1 5537 class="cmr-6">6</span><span
Chris@1 5538 class="cmtt-8">&#x00A0;</span><span
Chris@1 5539 class="cmtt-8">&#x00A0;</span><span
Chris@1 5540 class="cmtt-8">&#x00A0;</span><span
Chris@1 5541 class="cmtt-8">&#x00A0;</span><span
Chris@1 5542 class="cmtt-8">&#x00A0;</span><span
Chris@1 5543 class="cmtt-8">&#x00A0;</span><span
Chris@1 5544 class="cmtt-8">&#x00A0;</span><span
Chris@1 5545 class="cmtt-8">&#x00A0;</span><span
Chris@1 5546 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 5547 class="cmtt-8">&#x00A0;[last]</span><span
Chris@1 5548 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5549 class="cmtt-8">&#x00A0;zero;</span>
Chris@1 5550 <br class="fancyvrb" /><a
Chris@1 5551 id="x1-93014r7"></a><span
Chris@1 5552 class="cmr-6">7</span><span
Chris@1 5553 class="cmtt-8">&#x00A0;</span><span
Chris@1 5554 class="cmtt-8">&#x00A0;</span><span
Chris@1 5555 class="cmtt-8">&#x00A0;</span><span
Chris@1 5556 class="cmtt-8">&#x00A0;</span><span
Chris@1 5557 class="cmtt-8">&#x00A0;</span><span
Chris@1 5558 class="cmtt-8">&#x00A0;</span><span
Chris@1 5559 class="cmtt-8">&#x00A0;</span><span
Chris@1 5560 class="cmtt-8">&#x00A0;</span><span
Chris@1 5561 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 5562 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 5563 class="cmtt-8">&#x00A0;[temp_vector]</span><span
Chris@1 5564 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5565 class="cmtt-8">&#x00A0;read</span><span
Chris@1 5566 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 5567 class="cmtt-8">&#x00A0;from</span><span
Chris@1 5568 class="cmtt-8">&#x00A0;bitstream</span><span
Chris@1 5569 class="cmtt-8">&#x00A0;using</span><span
Chris@1 5570 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 5571 class="cmtt-8">&#x00A0;number</span><span
Chris@1 5572 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
Chris@1 5573 class="cmtt-8">&#x00A0;element</span><span
Chris@1 5574 class="cmtt-8">&#x00A0;[booknumber]</span><span
Chris@1 5575 class="cmtt-8">&#x00A0;in</span><span
Chris@1 5576 class="cmtt-8">&#x00A0;VQ</span><span
Chris@1 5577 class="cmtt-8">&#x00A0;context.</span>
Chris@1 5578 <br class="fancyvrb" /><a
Chris@1 5579 id="x1-93016r8"></a><span
Chris@1 5580 class="cmr-6">8</span><span
Chris@1 5581 class="cmtt-8">&#x00A0;</span><span
Chris@1 5582 class="cmtt-8">&#x00A0;</span><span
Chris@1 5583 class="cmtt-8">&#x00A0;</span><span
Chris@1 5584 class="cmtt-8">&#x00A0;</span><span
Chris@1 5585 class="cmtt-8">&#x00A0;</span><span
Chris@1 5586 class="cmtt-8">&#x00A0;</span><span
Chris@1 5587 class="cmtt-8">&#x00A0;</span><span
Chris@1 5588 class="cmtt-8">&#x00A0;</span><span
Chris@1 5589 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 5590 class="cmtt-8">&#x00A0;add</span><span
Chris@1 5591 class="cmtt-8">&#x00A0;the</span><span
Chris@1 5592 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 5593 class="cmtt-8">&#x00A0;value</span><span
Chris@1 5594 class="cmtt-8">&#x00A0;[last]</span><span
Chris@1 5595 class="cmtt-8">&#x00A0;to</span><span
Chris@1 5596 class="cmtt-8">&#x00A0;each</span><span
Chris@1 5597 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 5598 class="cmtt-8">&#x00A0;in</span><span
Chris@1 5599 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 5600 class="cmtt-8">&#x00A0;[temp_vector]</span>
Chris@1 5601 <br class="fancyvrb" /><a
Chris@1 5602 id="x1-93018r9"></a><span
Chris@1 5603 class="cmr-6">9</span><span
Chris@1 5604 class="cmtt-8">&#x00A0;</span><span
Chris@1 5605 class="cmtt-8">&#x00A0;</span><span
Chris@1 5606 class="cmtt-8">&#x00A0;</span><span
Chris@1 5607 class="cmtt-8">&#x00A0;</span><span
Chris@1 5608 class="cmtt-8">&#x00A0;</span><span
Chris@1 5609 class="cmtt-8">&#x00A0;</span><span
Chris@1 5610 class="cmtt-8">&#x00A0;</span><span
Chris@1 5611 class="cmtt-8">&#x00A0;</span><span
Chris@1 5612 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 5613 class="cmtt-8">&#x00A0;[last]</span><span
Chris@1 5614 class="cmtt-8">&#x00A0;=</span><span
Chris@1 5615 class="cmtt-8">&#x00A0;the</span><span
Chris@1 5616 class="cmtt-8">&#x00A0;value</span><span
Chris@1 5617 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5618 class="cmtt-8">&#x00A0;the</span><span
Chris@1 5619 class="cmtt-8">&#x00A0;last</span><span
Chris@1 5620 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 5621 class="cmtt-8">&#x00A0;in</span><span
Chris@1 5622 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 5623 class="cmtt-8">&#x00A0;[temp_vector]</span>
Chris@1 5624 <br class="fancyvrb" /><a
Chris@1 5625 id="x1-93020r10"></a><span
Chris@1 5626 class="cmr-6">10</span><span
Chris@1 5627 class="cmtt-8">&#x00A0;</span><span
Chris@1 5628 class="cmtt-8">&#x00A0;</span><span
Chris@1 5629 class="cmtt-8">&#x00A0;</span><span
Chris@1 5630 class="cmtt-8">&#x00A0;</span><span
Chris@1 5631 class="cmtt-8">&#x00A0;</span><span
Chris@1 5632 class="cmtt-8">&#x00A0;</span><span
Chris@1 5633 class="cmtt-8">&#x00A0;</span><span
Chris@1 5634 class="cmtt-8">&#x00A0;10)</span><span
Chris@1 5635 class="cmtt-8">&#x00A0;concatenate</span><span
Chris@1 5636 class="cmtt-8">&#x00A0;[temp_vector]</span><span
Chris@1 5637 class="cmtt-8">&#x00A0;onto</span><span
Chris@1 5638 class="cmtt-8">&#x00A0;the</span><span
Chris@1 5639 class="cmtt-8">&#x00A0;end</span><span
Chris@1 5640 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5641 class="cmtt-8">&#x00A0;the</span><span
Chris@1 5642 class="cmtt-8">&#x00A0;[coefficients]</span><span
Chris@1 5643 class="cmtt-8">&#x00A0;vector</span>
Chris@1 5644 <br class="fancyvrb" /><a
Chris@1 5645 id="x1-93022r11"></a><span
Chris@1 5646 class="cmr-6">11</span><span
Chris@1 5647 class="cmtt-8">&#x00A0;</span><span
Chris@1 5648 class="cmtt-8">&#x00A0;</span><span
Chris@1 5649 class="cmtt-8">&#x00A0;</span><span
Chris@1 5650 class="cmtt-8">&#x00A0;</span><span
Chris@1 5651 class="cmtt-8">&#x00A0;</span><span
Chris@1 5652 class="cmtt-8">&#x00A0;</span><span
Chris@1 5653 class="cmtt-8">&#x00A0;</span><span
Chris@1 5654 class="cmtt-8">&#x00A0;11)</span><span
Chris@1 5655 class="cmtt-8">&#x00A0;if</span><span
Chris@1 5656 class="cmtt-8">&#x00A0;(length</span><span
Chris@1 5657 class="cmtt-8">&#x00A0;of</span><span
Chris@1 5658 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 5659 class="cmtt-8">&#x00A0;[coefficients]</span><span
Chris@1 5660 class="cmtt-8">&#x00A0;is</span><span
Chris@1 5661 class="cmtt-8">&#x00A0;less</span><span
Chris@1 5662 class="cmtt-8">&#x00A0;than</span><span
Chris@1 5663 class="cmtt-8">&#x00A0;[floor0_order],</span><span
Chris@1 5664 class="cmtt-8">&#x00A0;continue</span><span
Chris@1 5665 class="cmtt-8">&#x00A0;at</span><span
Chris@1 5666 class="cmtt-8">&#x00A0;step</span><span
Chris@1 5667 class="cmtt-8">&#x00A0;6</span>
Chris@1 5668 <br class="fancyvrb" /><a
Chris@1 5669 id="x1-93024r12"></a><span
Chris@1 5670 class="cmr-6">12</span><span
Chris@1 5671 class="cmtt-8">&#x00A0;</span><span
Chris@1 5672 class="cmtt-8">&#x00A0;</span>
Chris@1 5673 <br class="fancyvrb" /><a
Chris@1 5674 id="x1-93026r13"></a><span
Chris@1 5675 class="cmr-6">13</span><span
Chris@1 5676 class="cmtt-8">&#x00A0;</span><span
Chris@1 5677 class="cmtt-8">&#x00A0;</span><span
Chris@1 5678 class="cmtt-8">&#x00A0;</span><span
Chris@1 5679 class="cmtt-8">&#x00A0;</span><span
Chris@1 5680 class="cmtt-8">&#x00A0;</span><span
Chris@1 5681 class="cmtt-8">&#x00A0;</span><span
Chris@1 5682 class="cmtt-8">&#x00A0;</span><span
Chris@1 5683 class="cmsy-8">}</span>
Chris@1 5684 <br class="fancyvrb" /><a
Chris@1 5685 id="x1-93028r14"></a><span
Chris@1 5686 class="cmr-6">14</span><span
Chris@1 5687 class="cmtt-8">&#x00A0;</span><span
Chris@1 5688 class="cmtt-8">&#x00A0;</span>
Chris@1 5689 <br class="fancyvrb" /><a
Chris@1 5690 id="x1-93030r15"></a><span
Chris@1 5691 class="cmr-6">15</span><span
Chris@1 5692 class="cmtt-8">&#x00A0;</span><span
Chris@1 5693 class="cmtt-8">&#x00A0;</span><span
Chris@1 5694 class="cmtt-8">&#x00A0;12)</span><span
Chris@1 5695 class="cmtt-8">&#x00A0;done.</span>
Chris@1 5696 <br class="fancyvrb" /><a
Chris@1 5697 id="x1-93032r16"></a><span
Chris@1 5698 class="cmr-6">16</span><span
Chris@1 5699 class="cmtt-8">&#x00A0;</span><span
Chris@1 5700 class="cmtt-8">&#x00A0;</span>
Chris@1 5701 </div>
Chris@1 5702 <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
Chris@1 5703 <ul class="itemize1">
Chris@1 5704 <li class="itemize">An <span
Chris@1 5705 class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
Chris@1 5706 is unused in this frame (the output of the channel will be all-zeroes in synthesis).
Chris@1 5707 Several later stages of decode don&#8217;t occur for an unused channel.
Chris@1 5708 </li>
Chris@1 5709 <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
Chris@1 5710 if end-of-packet is reached during any read operation above, floor decode is to return
Chris@1 5711 &#8217;unused&#8217; status as if the <span
Chris@1 5712 class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
Chris@1 5713 </li>
Chris@1 5714 <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a
Chris@1 5715 href="#x1-1170009.2.1">ilog</a>(
Chris@1 5716
Chris@1 5717
Chris@1 5718
Chris@1 5719 <span
Chris@1 5720 class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
Chris@1 5721 and values greater than the maximum possible book value are reserved.
Chris@1 5722 </li>
Chris@1 5723 <li class="itemize">The number of scalars read into the vector <span
Chris@1 5724 class="cmtt-12">[coefficients] </span>may be greater
Chris@1 5725 than <span
Chris@1 5726 class="cmtt-12">[floor0_order]</span>, the number actually required for curve computation. For
Chris@1 5727 example, if the VQ codebook used for the floor currently being decoded has a
Chris@1 5728 <span
Chris@1 5729 class="cmtt-12">[codebook_dimensions] </span>value of three and <span
Chris@1 5730 class="cmtt-12">[floor0_order] </span>is ten, the only way to
Chris@1 5731 fill all the needed scalars in <span
Chris@1 5732 class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
Chris@1 5733 as four vectors of three scalars each. This is not an error condition, and care must
Chris@1 5734 be taken not to allow a buffer overflow in decode. The extra values are not used and
Chris@1 5735 may be ignored or discarded.</li></ul>
Chris@1 5736 <!--l. 104--><p class="noindent" >
Chris@1 5737 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3. </span> <a
Chris@1 5738 id="x1-940006.2.3"></a>curve computation</h5>
Chris@1 5739 <!--l. 106--><p class="noindent" >Given an <span
Chris@1 5740 class="cmtt-12">[amplitude] </span>integer and <span
Chris@1 5741 class="cmtt-12">[coefficients] </span>vector from packet decode as well as
Chris@1 5742 the [floor0_order], [floor0_rate], [floor0_bark_map_size], [floor0_amplitude_bits] and
Chris@1 5743 [floor0_amplitude_offset] values from floor setup, and an output vector size <span
Chris@1 5744 class="cmtt-12">[n] </span>specified by the
Chris@1 5745 decode process, we compute a floor output vector.
Chris@1 5746 <!--l. 113--><p class="noindent" >If the value <span
Chris@1 5747 class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span
Chris@1 5748 class="cmtt-12">[n] </span>vector with all-zero
Chris@1 5749 scalars. Otherwise, begin by assuming the following definitions for the given vector to be
Chris@1 5750 synthesized:
Chris@1 5751 <center class="par-math-display" >
Chris@1 5752 <img
Chris@1 5753 src="Vorbis_I_spec7x.png" alt=" {
Chris@1 5754 min (floor0_bark_map_size &minus; 1,foobar ) for i &isin; [0,n &minus; 1 ]
Chris@1 5755 mapi = &minus; 1 for i = n
Chris@1 5756 " class="par-math-display" ></center>
Chris@1 5757 <!--l. 128--><p class="nopar" >
Chris@1 5758 <!--l. 130--><p class="noindent" >where
Chris@1 5759 <center class="par-math-display" >
Chris@1 5760 <img
Chris@1 5761 src="Vorbis_I_spec8x.png" alt=" &lfloor; &rfloor;
Chris@1 5762 (floor0_rate &sdot; i) floor0_bark_map_size
Chris@1 5763 foobar = bark -------2n------- &sdot;-bark(.5 &sdot; floor0_rate-)
Chris@1 5764 " class="par-math-display" ></center>
Chris@1 5765
Chris@1 5766
Chris@1 5767
Chris@1 5768 <!--l. 137--><p class="nopar" >
Chris@1 5769 <!--l. 139--><p class="noindent" >and
Chris@1 5770 <center class="par-math-display" >
Chris@1 5771 <img
Chris@1 5772 src="Vorbis_I_spec9x.png" alt=" 2
Chris@1 5773 bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x + .0001x )
Chris@1 5774 " class="par-math-display" ></center>
Chris@1 5775 <!--l. 143--><p class="nopar" >
Chris@1 5776 <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
Chris@1 5777 result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
Chris@1 5778 LSP curve <span
Chris@1 5779 class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
Chris@1 5780 step:
Chris@1 5781 <!--l. 151--><p class="noindent" >
Chris@1 5782 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 5783 1. </dt><dd
Chris@1 5784 class="enumerate-enumitem"><span
Chris@1 5785 class="cmtt-12">[i] </span>= 0
Chris@1 5786 </dd><dt class="enumerate-enumitem">
Chris@1 5787 2. </dt><dd
Chris@1 5788 class="enumerate-enumitem"><span
Chris@1 5789 class="cmtt-12">[</span><span
Chris@1 5790 class="cmmi-12">&omega;</span><span
Chris@1 5791 class="cmtt-12">] </span>= <span
Chris@1 5792 class="cmmi-12">&pi; </span>* map element <span
Chris@1 5793 class="cmtt-12">[i] </span>/ <span
Chris@1 5794 class="cmtt-12">[floor0_bark_map_size]</span>
Chris@1 5795 </dd><dt class="enumerate-enumitem">
Chris@1 5796 3. </dt><dd
Chris@1 5797 class="enumerate-enumitem">if ( <span
Chris@1 5798 class="cmtt-12">[floor0_order] </span>is odd )
Chris@1 5799 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 5800 a) </dt><dd
Chris@1 5801 class="enumerate-enumitem">calculate <span
Chris@1 5802 class="cmtt-12">[p] </span>and <span
Chris@1 5803 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
Chris@1 5804 <center class="math-display" >
Chris@1 5805 <img
Chris@1 5806 src="Vorbis_I_spec10x.png" alt=" floor0_order&minus;3
Chris@1 5807 2 &prod;2 2
Chris@1 5808 p = (1 &minus; cos &omega;) 4(cos([coefficients ]2j+1) &minus; cos&omega; )
Chris@1 5809 floor0_order&minus;1 j=0
Chris@1 5810 1 ----&prod;2----
Chris@1 5811 q = -- 4(cos([coefficients ]2j) &minus; cos&omega; )2
Chris@1 5812 4 j=0
Chris@1 5813
Chris@1 5814
Chris@1 5815
Chris@1 5816 " class="math-display" ></center>
Chris@1 5817 </div>
Chris@1 5818 </dd></dl>
Chris@1 5819 <!--l. 162--><p class="noindent" >else <span
Chris@1 5820 class="cmtt-12">[floor0_order] </span>is even
Chris@1 5821 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 5822 b) </dt><dd
Chris@1 5823 class="enumerate-enumitem">calculate <span
Chris@1 5824 class="cmtt-12">[p] </span>and <span
Chris@1 5825 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
Chris@1 5826 <center class="math-display" >
Chris@1 5827 <img
Chris@1 5828 src="Vorbis_I_spec11x.png" alt=" floor0_order&minus;2
Chris@1 5829 (1-&minus;-cos&omega;-) &prod;2 2
Chris@1 5830 p = 2 4(cos([coefficients ]2j+1) &minus; cos&omega;)
Chris@1 5831 j=0
Chris@1 5832 floor0_&prod;o2rder&minus;-2
Chris@1 5833 q = (1-+-cos&omega;-) 4(cos([coefficients ]2j) &minus; cos &omega;)2
Chris@1 5834 2 j=0
Chris@1 5835 " class="math-display" ></center>
Chris@1 5836 </div>
Chris@1 5837 </dd></dl>
Chris@1 5838 </dd><dt class="enumerate-enumitem">
Chris@1 5839 4. </dt><dd
Chris@1 5840 class="enumerate-enumitem">calculate <span
Chris@1 5841 class="cmtt-12">[linear_floor_value] </span>according to:
Chris@1 5842 <center class="math-display" >
Chris@1 5843 <img
Chris@1 5844 src="Vorbis_I_spec12x.png" alt=" ( ( ))
Chris@1 5845 exp .11512925 amplitude---&sdot; floor0_amplitute_&radic;offset---&minus; floor0_amplitude_offset
Chris@1 5846 (2floor0_amplitude_bits &minus; 1) p + q
Chris@1 5847 " class="math-display" ></center>
Chris@1 5848 <!--l. 177--><p class="nopar" >
Chris@1 5849 </dd><dt class="enumerate-enumitem">
Chris@1 5850 5. </dt><dd
Chris@1 5851 class="enumerate-enumitem"><span
Chris@1 5852 class="cmtt-12">[iteration_condition] </span>= map element <span
Chris@1 5853 class="cmtt-12">[i]</span>
Chris@1 5854
Chris@1 5855
Chris@1 5856
Chris@1 5857 </dd><dt class="enumerate-enumitem">
Chris@1 5858 6. </dt><dd
Chris@1 5859 class="enumerate-enumitem"><span
Chris@1 5860 class="cmtt-12">[output] </span>element <span
Chris@1 5861 class="cmtt-12">[i] </span>= <span
Chris@1 5862 class="cmtt-12">[linear_floor_value]</span>
Chris@1 5863 </dd><dt class="enumerate-enumitem">
Chris@1 5864 7. </dt><dd
Chris@1 5865 class="enumerate-enumitem">increment <span
Chris@1 5866 class="cmtt-12">[i]</span>
Chris@1 5867 </dd><dt class="enumerate-enumitem">
Chris@1 5868 8. </dt><dd
Chris@1 5869 class="enumerate-enumitem">if ( map element <span
Chris@1 5870 class="cmtt-12">[i] </span>is equal to <span
Chris@1 5871 class="cmtt-12">[iteration_condition] </span>) continue at step
Chris@1 5872 5
Chris@1 5873 </dd><dt class="enumerate-enumitem">
Chris@1 5874 9. </dt><dd
Chris@1 5875 class="enumerate-enumitem">if ( <span
Chris@1 5876 class="cmtt-12">[i] </span>is less than <span
Chris@1 5877 class="cmtt-12">[n] </span>) continue at step 2
Chris@1 5878 </dd><dt class="enumerate-enumitem">
Chris@1 5879 10. </dt><dd
Chris@1 5880 class="enumerate-enumitem">done</dd></dl>
Chris@1 5881
Chris@1 5882
Chris@1 5883
Chris@1 5884
Chris@1 5885
Chris@1 5886
Chris@1 5887 <h3 class="sectionHead"><span class="titlemark">7. </span> <a
Chris@1 5888 id="x1-950007"></a>Floor type 1 setup and decode</h3>
Chris@1 5889 <!--l. 6--><p class="noindent" >
Chris@1 5890 <h4 class="subsectionHead"><span class="titlemark">7.1. </span> <a
Chris@1 5891 id="x1-960007.1"></a>Overview</h4>
Chris@1 5892 <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
Chris@1 5893 curve. The representation plots this curve mechanically on a linear frequency axis and a
Chris@1 5894 logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham&#8217;s
Chris@1 5895 algorithm.
Chris@1 5896 <!--l. 16--><p class="noindent" >
Chris@1 5897 <h4 class="subsectionHead"><span class="titlemark">7.2. </span> <a
Chris@1 5898 id="x1-970007.2"></a>Floor 1 format</h4>
Chris@1 5899 <!--l. 18--><p class="noindent" >
Chris@1 5900 <h5 class="subsubsectionHead"><span class="titlemark">7.2.1. </span> <a
Chris@1 5901 id="x1-980007.2.1"></a>model</h5>
Chris@1 5902 <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
Chris@1 5903 floor curve using iterative prediction in a process roughly equivalent to the following simplified
Chris@1 5904 description:
Chris@1 5905 <ul class="itemize1">
Chris@1 5906 <li class="itemize">the first line segment (base case) is a logical line spanning from x&#x02D9;0,y&#x02D9;0 to x&#x02D9;1,y&#x02D9;1
Chris@1 5907 where in the base case x&#x02D9;0=0 and x&#x02D9;1=[n], the full range of the spectral floor to be
Chris@1 5908 computed.
Chris@1 5909 </li>
Chris@1 5910 <li class="itemize">the induction step chooses a point x&#x02D9;new within an existing logical line segment and
Chris@1 5911 produces a y&#x02D9;new value at that point computed from the existing line&#8217;s y value at
Chris@1 5912 x&#x02D9;new (as plotted by the line) and a difference value decoded from the bitstream
Chris@1 5913 packet.
Chris@1 5914
Chris@1 5915
Chris@1 5916
Chris@1 5917 </li>
Chris@1 5918 <li class="itemize">floor computation produces two new line segments, one running from x&#x02D9;0,y&#x02D9;0 to
Chris@1 5919 x&#x02D9;new,y&#x02D9;new and from x&#x02D9;new,y&#x02D9;new to x&#x02D9;1,y&#x02D9;1. This step is performed logically even if
Chris@1 5920 y&#x02D9;new represents no change to the amplitude value at x&#x02D9;new so that later refinement
Chris@1 5921 is additionally bounded at x&#x02D9;new.
Chris@1 5922 </li>
Chris@1 5923 <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
Chris@1 5924 at floor 1 initialization time. Computation is completed at the end of the x value list.
Chris@1 5925 </li></ul>
Chris@1 5926 <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
Chris@1 5927 representing typical configuration:
Chris@1 5928 <!--l. 51--><p class="noindent" >For the below example, we assume a floor setup with an [n] of 128. The list of selected X values
Chris@1 5929 in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
Chris@1 5930 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
Chris@1 5931 example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
Chris@1 5932 way, beginning with the first line:
Chris@1 5933 <div class="center"
Chris@1 5934 >
Chris@1 5935 <!--l. 59--><p class="noindent" >
Chris@1 5936
Chris@1 5937 <!--l. 60--><p class="noindent" ><img
Chris@1 5938 src="floor1-1.png" alt="PIC"
Chris@1 5939 >
Chris@1 5940 <br /> <div class="caption"
Chris@1 5941 ><span class="id">Figure&#x00A0;7: </span><span
Chris@1 5942 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 -->
Chris@1 5943 </div>
Chris@1 5944 <!--l. 64--><p class="noindent" >We now draw new logical lines to reflect the correction to new&#x02D9;Y, and iterate for X positions 32
Chris@1 5945 and 96:
Chris@1 5946 <div class="center"
Chris@1 5947 >
Chris@1 5948 <!--l. 67--><p class="noindent" >
Chris@1 5949
Chris@1 5950 <!--l. 68--><p class="noindent" ><img
Chris@1 5951 src="floor1-2.png" alt="PIC"
Chris@1 5952 >
Chris@1 5953 <br /> <div class="caption"
Chris@1 5954 ><span class="id">Figure&#x00A0;8: </span><span
Chris@1 5955 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 -->
Chris@1 5956 </div>
Chris@1 5957 <!--l. 72--><p class="noindent" >Although the new Y value at X position 96 is unchanged, it is still used later as an endpoint for
Chris@1 5958 further refinement. From here on, the pattern should be clear; we complete the floor computation
Chris@1 5959 as follows:
Chris@1 5960
Chris@1 5961
Chris@1 5962
Chris@1 5963 <div class="center"
Chris@1 5964 >
Chris@1 5965 <!--l. 76--><p class="noindent" >
Chris@1 5966
Chris@1 5967 <!--l. 77--><p class="noindent" ><img
Chris@1 5968 src="floor1-3.png" alt="PIC"
Chris@1 5969 >
Chris@1 5970 <br /> <div class="caption"
Chris@1 5971 ><span class="id">Figure&#x00A0;9: </span><span
Chris@1 5972 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 -->
Chris@1 5973 </div>
Chris@1 5974 <div class="center"
Chris@1 5975 >
Chris@1 5976 <!--l. 81--><p class="noindent" >
Chris@1 5977
Chris@1 5978 <!--l. 82--><p class="noindent" ><img
Chris@1 5979 src="floor1-4.png" alt="PIC"
Chris@1 5980 >
Chris@1 5981 <br /> <div class="caption"
Chris@1 5982 ><span class="id">Figure&#x00A0;10: </span><span
Chris@1 5983 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 -->
Chris@1 5984 </div>
Chris@1 5985 <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
Chris@1 5986 decode, as described later. The actual algorithm splits Y value computation and line plotting
Chris@1 5987 into two steps with modifications to the above algorithm to eliminate noise accumulation
Chris@1 5988 through integer roundoff/truncation.
Chris@1 5989 <!--l. 94--><p class="noindent" >
Chris@1 5990 <h5 class="subsubsectionHead"><span class="titlemark">7.2.2. </span> <a
Chris@1 5991 id="x1-990007.2.2"></a>header decode</h5>
Chris@1 5992 <!--l. 96--><p class="noindent" >A list of floor X values is stored in the packet header in interleaved format (used in list order
Chris@1 5993 during packet decode and synthesis). This list is split into partitions, and each partition is
Chris@1 5994 assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
Chris@1 5995 partition or partition class.
Chris@1 5996 <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
Chris@1 5997 the partition class encodes at once), a &#8217;subclass&#8217; value representing the number of
Chris@1 5998 alternate entropy books the partition class may use in representing Y values, the list of
Chris@1 5999 [subclass] books and a master book used to encode which alternate books were chosen
Chris@1 6000 for representation in a given packet. The master/subclass mechanism is meant to be
Chris@1 6001 used as a flexible representation cascade while still using codebooks only in a scalar
Chris@1 6002 context.
Chris@1 6003
Chris@1 6004
Chris@1 6005
Chris@1 6006 <!--l. 112--><p class="noindent" >
Chris@1 6007 <div class="fancyvrb" id="fancyvrb28">
Chris@1 6008 <a
Chris@1 6009 id="x1-99002r1"></a><span
Chris@1 6010 class="cmr-6">1</span><span
Chris@1 6011 class="cmtt-8">&#x00A0;</span><span
Chris@1 6012 class="cmtt-8">&#x00A0;</span>
Chris@1 6013 <br class="fancyvrb" /><a
Chris@1 6014 id="x1-99004r2"></a><span
Chris@1 6015 class="cmr-6">2</span><span
Chris@1 6016 class="cmtt-8">&#x00A0;</span><span
Chris@1 6017 class="cmtt-8">&#x00A0;</span><span
Chris@1 6018 class="cmtt-8">&#x00A0;</span><span
Chris@1 6019 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 6020 class="cmtt-8">&#x00A0;[floor1_partitions]</span><span
Chris@1 6021 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6022 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6023 class="cmtt-8">&#x00A0;5</span><span
Chris@1 6024 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6025 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6026 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6027 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6028 <br class="fancyvrb" /><a
Chris@1 6029 id="x1-99006r3"></a><span
Chris@1 6030 class="cmr-6">3</span><span
Chris@1 6031 class="cmtt-8">&#x00A0;</span><span
Chris@1 6032 class="cmtt-8">&#x00A0;</span><span
Chris@1 6033 class="cmtt-8">&#x00A0;</span><span
Chris@1 6034 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 6035 class="cmtt-8">&#x00A0;[maximum_class]</span><span
Chris@1 6036 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6037 class="cmtt-8">&#x00A0;-1</span>
Chris@1 6038 <br class="fancyvrb" /><a
Chris@1 6039 id="x1-99008r4"></a><span
Chris@1 6040 class="cmr-6">4</span><span
Chris@1 6041 class="cmtt-8">&#x00A0;</span><span
Chris@1 6042 class="cmtt-8">&#x00A0;</span><span
Chris@1 6043 class="cmtt-8">&#x00A0;</span><span
Chris@1 6044 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 6045 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 6046 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6047 class="cmtt-8">&#x00A0;over</span><span
Chris@1 6048 class="cmtt-8">&#x00A0;the</span><span
Chris@1 6049 class="cmtt-8">&#x00A0;range</span><span
Chris@1 6050 class="cmtt-8">&#x00A0;0</span><span
Chris@1 6051 class="cmtt-8">&#x00A0;...</span><span
Chris@1 6052 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
Chris@1 6053 class="cmtt-8">&#x00A0;</span><span
Chris@1 6054 class="cmsy-8">{</span>
Chris@1 6055 <br class="fancyvrb" /><a
Chris@1 6056 id="x1-99010r5"></a><span
Chris@1 6057 class="cmr-6">5</span><span
Chris@1 6058 class="cmtt-8">&#x00A0;</span><span
Chris@1 6059 class="cmtt-8">&#x00A0;</span>
Chris@1 6060 <br class="fancyvrb" /><a
Chris@1 6061 id="x1-99012r6"></a><span
Chris@1 6062 class="cmr-6">6</span><span
Chris@1 6063 class="cmtt-8">&#x00A0;</span><span
Chris@1 6064 class="cmtt-8">&#x00A0;</span><span
Chris@1 6065 class="cmtt-8">&#x00A0;</span><span
Chris@1 6066 class="cmtt-8">&#x00A0;</span><span
Chris@1 6067 class="cmtt-8">&#x00A0;</span><span
Chris@1 6068 class="cmtt-8">&#x00A0;</span><span
Chris@1 6069 class="cmtt-8">&#x00A0;</span><span
Chris@1 6070 class="cmtt-8">&#x00A0;</span><span
Chris@1 6071 class="cmtt-8">&#x00A0;</span><span
Chris@1 6072 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 6073 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6074 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
Chris@1 6075 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6076 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6077 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6078 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6079 class="cmtt-8">&#x00A0;4</span><span
Chris@1 6080 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6081 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6082 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6083 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6084 <br class="fancyvrb" /><a
Chris@1 6085 id="x1-99014r7"></a><span
Chris@1 6086 class="cmr-6">7</span><span
Chris@1 6087 class="cmtt-8">&#x00A0;</span><span
Chris@1 6088 class="cmtt-8">&#x00A0;</span>
Chris@1 6089 <br class="fancyvrb" /><a
Chris@1 6090 id="x1-99016r8"></a><span
Chris@1 6091 class="cmr-6">8</span><span
Chris@1 6092 class="cmtt-8">&#x00A0;</span><span
Chris@1 6093 class="cmtt-8">&#x00A0;</span><span
Chris@1 6094 class="cmtt-8">&#x00A0;</span><span
Chris@1 6095 class="cmtt-8">&#x00A0;</span><span
Chris@1 6096 class="cmtt-8">&#x00A0;</span><span
Chris@1 6097 class="cmtt-8">&#x00A0;</span><span
Chris@1 6098 class="cmtt-8">&#x00A0;</span><span
Chris@1 6099 class="cmsy-8">}</span>
Chris@1 6100 <br class="fancyvrb" /><a
Chris@1 6101 id="x1-99018r9"></a><span
Chris@1 6102 class="cmr-6">9</span><span
Chris@1 6103 class="cmtt-8">&#x00A0;</span><span
Chris@1 6104 class="cmtt-8">&#x00A0;</span>
Chris@1 6105 <br class="fancyvrb" /><a
Chris@1 6106 id="x1-99020r10"></a><span
Chris@1 6107 class="cmr-6">10</span><span
Chris@1 6108 class="cmtt-8">&#x00A0;</span><span
Chris@1 6109 class="cmtt-8">&#x00A0;</span><span
Chris@1 6110 class="cmtt-8">&#x00A0;</span><span
Chris@1 6111 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 6112 class="cmtt-8">&#x00A0;[maximum_class]</span><span
Chris@1 6113 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6114 class="cmtt-8">&#x00A0;largest</span><span
Chris@1 6115 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 6116 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 6117 class="cmtt-8">&#x00A0;value</span><span
Chris@1 6118 class="cmtt-8">&#x00A0;in</span><span
Chris@1 6119 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6120 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span>
Chris@1 6121 <br class="fancyvrb" /><a
Chris@1 6122 id="x1-99022r11"></a><span
Chris@1 6123 class="cmr-6">11</span><span
Chris@1 6124 class="cmtt-8">&#x00A0;</span><span
Chris@1 6125 class="cmtt-8">&#x00A0;</span><span
Chris@1 6126 class="cmtt-8">&#x00A0;</span><span
Chris@1 6127 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 6128 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 6129 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6130 class="cmtt-8">&#x00A0;over</span><span
Chris@1 6131 class="cmtt-8">&#x00A0;the</span><span
Chris@1 6132 class="cmtt-8">&#x00A0;range</span><span
Chris@1 6133 class="cmtt-8">&#x00A0;0</span><span
Chris@1 6134 class="cmtt-8">&#x00A0;...</span><span
Chris@1 6135 class="cmtt-8">&#x00A0;[maximum_class]</span><span
Chris@1 6136 class="cmtt-8">&#x00A0;</span><span
Chris@1 6137 class="cmsy-8">{</span>
Chris@1 6138 <br class="fancyvrb" /><a
Chris@1 6139 id="x1-99024r12"></a><span
Chris@1 6140 class="cmr-6">12</span><span
Chris@1 6141 class="cmtt-8">&#x00A0;</span><span
Chris@1 6142 class="cmtt-8">&#x00A0;</span>
Chris@1 6143 <br class="fancyvrb" /><a
Chris@1 6144 id="x1-99026r13"></a><span
Chris@1 6145 class="cmr-6">13</span><span
Chris@1 6146 class="cmtt-8">&#x00A0;</span><span
Chris@1 6147 class="cmtt-8">&#x00A0;</span><span
Chris@1 6148 class="cmtt-8">&#x00A0;</span><span
Chris@1 6149 class="cmtt-8">&#x00A0;</span><span
Chris@1 6150 class="cmtt-8">&#x00A0;</span><span
Chris@1 6151 class="cmtt-8">&#x00A0;</span><span
Chris@1 6152 class="cmtt-8">&#x00A0;</span><span
Chris@1 6153 class="cmtt-8">&#x00A0;</span><span
Chris@1 6154 class="cmtt-8">&#x00A0;</span><span
Chris@1 6155 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 6156 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6157 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
Chris@1 6158 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6159 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6160 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6161 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6162 class="cmtt-8">&#x00A0;3</span><span
Chris@1 6163 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6164 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6165 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6166 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 6167 class="cmtt-8">&#x00A0;and</span><span
Chris@1 6168 class="cmtt-8">&#x00A0;add</span><span
Chris@1 6169 class="cmtt-8">&#x00A0;1</span>
Chris@1 6170 <br class="fancyvrb" /><a
Chris@1 6171 id="x1-99028r14"></a><span
Chris@1 6172 class="cmr-6">14</span><span
Chris@1 6173 class="cmtt-8">&#x00A0;</span><span
Chris@1 6174 class="cmtt-8">&#x00A0; 8)</span><span
Chris@1 6175 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6176 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
Chris@1 6177 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6178 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6179 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6180 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6181 class="cmtt-8">&#x00A0;2</span><span
Chris@1 6182 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6183 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6184 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6185 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6186 <br class="fancyvrb" /><a
Chris@1 6187 id="x1-99030r15"></a><span
Chris@1 6188 class="cmr-6">15</span><span
Chris@1 6189 class="cmtt-8">&#x00A0;</span><span
Chris@1 6190 class="cmtt-8">&#x00A0;</span><span
Chris@1 6191 class="cmtt-8">&#x00A0;</span><span
Chris@1 6192 class="cmtt-8">&#x00A0;</span><span
Chris@1 6193 class="cmtt-8">&#x00A0;</span><span
Chris@1 6194 class="cmtt-8">&#x00A0;</span><span
Chris@1 6195 class="cmtt-8">&#x00A0;</span><span
Chris@1 6196 class="cmtt-8">&#x00A0;</span><span
Chris@1 6197 class="cmtt-8">&#x00A0;</span><span
Chris@1 6198 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 6199 class="cmtt-8">&#x00A0;if</span><span
Chris@1 6200 class="cmtt-8">&#x00A0;(</span><span
Chris@1 6201 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6202 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
Chris@1 6203 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6204 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6205 class="cmtt-8">&#x00A0;is</span><span
Chris@1 6206 class="cmtt-8">&#x00A0;nonzero</span><span
Chris@1 6207 class="cmtt-8">&#x00A0;)</span><span
Chris@1 6208 class="cmtt-8">&#x00A0;</span><span
Chris@1 6209 class="cmsy-8">{</span>
Chris@1 6210 <br class="fancyvrb" /><a
Chris@1 6211 id="x1-99032r16"></a><span
Chris@1 6212 class="cmr-6">16</span><span
Chris@1 6213 class="cmtt-8">&#x00A0;</span><span
Chris@1 6214 class="cmtt-8">&#x00A0;</span>
Chris@1 6215 <br class="fancyvrb" /><a
Chris@1 6216 id="x1-99034r17"></a><span
Chris@1 6217 class="cmr-6">17</span><span
Chris@1 6218 class="cmtt-8">&#x00A0;</span><span
Chris@1 6219 class="cmtt-8">&#x00A0;</span><span
Chris@1 6220 class="cmtt-8">&#x00A0;</span><span
Chris@1 6221 class="cmtt-8">&#x00A0;</span><span
Chris@1 6222 class="cmtt-8">&#x00A0;</span><span
Chris@1 6223 class="cmtt-8">&#x00A0;</span><span
Chris@1 6224 class="cmtt-8">&#x00A0;</span><span
Chris@1 6225 class="cmtt-8">&#x00A0;</span><span
Chris@1 6226 class="cmtt-8">&#x00A0;</span><span
Chris@1 6227 class="cmtt-8">&#x00A0;</span><span
Chris@1 6228 class="cmtt-8">&#x00A0;</span><span
Chris@1 6229 class="cmtt-8">&#x00A0;</span><span
Chris@1 6230 class="cmtt-8">&#x00A0;</span><span
Chris@1 6231 class="cmtt-8">&#x00A0;</span><span
Chris@1 6232 class="cmtt-8">&#x00A0;10)</span><span
Chris@1 6233 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6234 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
Chris@1 6235 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6236 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6237 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6238 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6239 class="cmtt-8">&#x00A0;8</span><span
Chris@1 6240 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6241 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6242 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6243 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6244 <br class="fancyvrb" /><a
Chris@1 6245 id="x1-99036r18"></a><span
Chris@1 6246 class="cmr-6">18</span><span
Chris@1 6247 class="cmtt-8">&#x00A0;</span><span
Chris@1 6248 class="cmtt-8">&#x00A0;</span>
Chris@1 6249 <br class="fancyvrb" /><a
Chris@1 6250 id="x1-99038r19"></a><span
Chris@1 6251 class="cmr-6">19</span><span
Chris@1 6252 class="cmtt-8">&#x00A0;</span><span
Chris@1 6253 class="cmtt-8">&#x00A0;</span><span
Chris@1 6254 class="cmtt-8">&#x00A0;</span><span
Chris@1 6255 class="cmtt-8">&#x00A0;</span><span
Chris@1 6256 class="cmtt-8">&#x00A0;</span><span
Chris@1 6257 class="cmtt-8">&#x00A0;</span><span
Chris@1 6258 class="cmtt-8">&#x00A0;</span><span
Chris@1 6259 class="cmtt-8">&#x00A0;</span><span
Chris@1 6260 class="cmtt-8">&#x00A0;</span><span
Chris@1 6261 class="cmtt-8">&#x00A0;</span><span
Chris@1 6262 class="cmtt-8">&#x00A0;</span><span
Chris@1 6263 class="cmtt-8">&#x00A0;</span><span
Chris@1 6264 class="cmtt-8">&#x00A0;</span><span
Chris@1 6265 class="cmsy-8">}</span>
Chris@1 6266 <br class="fancyvrb" /><a
Chris@1 6267 id="x1-99040r20"></a><span
Chris@1 6268 class="cmr-6">20</span><span
Chris@1 6269 class="cmtt-8">&#x00A0;</span><span
Chris@1 6270 class="cmtt-8">&#x00A0;</span>
Chris@1 6271 <br class="fancyvrb" /><a
Chris@1 6272 id="x1-99042r21"></a><span
Chris@1 6273 class="cmr-6">21</span><span
Chris@1 6274 class="cmtt-8">&#x00A0;</span><span
Chris@1 6275 class="cmtt-8">&#x00A0;</span><span
Chris@1 6276 class="cmtt-8">&#x00A0;</span><span
Chris@1 6277 class="cmtt-8">&#x00A0;</span><span
Chris@1 6278 class="cmtt-8">&#x00A0;</span><span
Chris@1 6279 class="cmtt-8">&#x00A0;</span><span
Chris@1 6280 class="cmtt-8">&#x00A0;</span><span
Chris@1 6281 class="cmtt-8">&#x00A0;</span><span
Chris@1 6282 class="cmtt-8">&#x00A0;11)</span><span
Chris@1 6283 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 6284 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 6285 class="cmtt-8">&#x00A0;over</span><span
Chris@1 6286 class="cmtt-8">&#x00A0;the</span><span
Chris@1 6287 class="cmtt-8">&#x00A0;range</span><span
Chris@1 6288 class="cmtt-8">&#x00A0;0</span><span
Chris@1 6289 class="cmtt-8">&#x00A0;...</span><span
Chris@1 6290 class="cmtt-8">&#x00A0;(2</span><span
Chris@1 6291 class="cmtt-8">&#x00A0;exponent</span><span
Chris@1 6292 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
Chris@1 6293 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6294 class="cmtt-8">&#x00A0;[i])</span><span
Chris@1 6295 class="cmtt-8">&#x00A0;-</span><span
Chris@1 6296 class="cmtt-8">&#x00A0;1</span><span
Chris@1 6297 class="cmtt-8">&#x00A0;</span><span
Chris@1 6298 class="cmsy-8">{</span>
Chris@1 6299 <br class="fancyvrb" /><a
Chris@1 6300 id="x1-99044r22"></a><span
Chris@1 6301 class="cmr-6">22</span><span
Chris@1 6302 class="cmtt-8">&#x00A0;</span><span
Chris@1 6303 class="cmtt-8">&#x00A0;</span>
Chris@1 6304 <br class="fancyvrb" /><a
Chris@1 6305 id="x1-99046r23"></a><span
Chris@1 6306 class="cmr-6">23</span><span
Chris@1 6307 class="cmtt-8">&#x00A0;</span><span
Chris@1 6308 class="cmtt-8">&#x00A0;</span><span
Chris@1 6309 class="cmtt-8">&#x00A0;</span><span
Chris@1 6310 class="cmtt-8">&#x00A0;</span><span
Chris@1 6311 class="cmtt-8">&#x00A0;</span><span
Chris@1 6312 class="cmtt-8">&#x00A0;</span><span
Chris@1 6313 class="cmtt-8">&#x00A0;</span><span
Chris@1 6314 class="cmtt-8">&#x00A0;</span><span
Chris@1 6315 class="cmtt-8">&#x00A0;</span><span
Chris@1 6316 class="cmtt-8">&#x00A0;</span><span
Chris@1 6317 class="cmtt-8">&#x00A0;</span><span
Chris@1 6318 class="cmtt-8">&#x00A0;</span><span
Chris@1 6319 class="cmtt-8">&#x00A0;</span><span
Chris@1 6320 class="cmtt-8">&#x00A0;</span><span
Chris@1 6321 class="cmtt-8">&#x00A0;12)</span><span
Chris@1 6322 class="cmtt-8">&#x00A0;array</span><span
Chris@1 6323 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
Chris@1 6324 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6325 class="cmtt-8">&#x00A0;[i],[j]</span><span
Chris@1 6326 class="cmtt-8">&#x00A0;=</span>
Chris@1 6327 <br class="fancyvrb" /><a
Chris@1 6328 id="x1-99048r24"></a><span
Chris@1 6329 class="cmr-6">24</span><span
Chris@1 6330 class="cmtt-8">&#x00A0;</span><span
Chris@1 6331 class="cmtt-8">&#x00A0;</span><span
Chris@1 6332 class="cmtt-8">&#x00A0;</span><span
Chris@1 6333 class="cmtt-8">&#x00A0;</span><span
Chris@1 6334 class="cmtt-8">&#x00A0;</span><span
Chris@1 6335 class="cmtt-8">&#x00A0;</span><span
Chris@1 6336 class="cmtt-8">&#x00A0;</span><span
Chris@1 6337 class="cmtt-8">&#x00A0;</span><span
Chris@1 6338 class="cmtt-8">&#x00A0;</span><span
Chris@1 6339 class="cmtt-8">&#x00A0;</span><span
Chris@1 6340 class="cmtt-8">&#x00A0;</span><span
Chris@1 6341 class="cmtt-8">&#x00A0;</span><span
Chris@1 6342 class="cmtt-8">&#x00A0;</span><span
Chris@1 6343 class="cmtt-8">&#x00A0;</span><span
Chris@1 6344 class="cmtt-8">&#x00A0;</span><span
Chris@1 6345 class="cmtt-8">&#x00A0;</span><span
Chris@1 6346 class="cmtt-8">&#x00A0;</span><span
Chris@1 6347 class="cmtt-8">&#x00A0;</span><span
Chris@1 6348 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6349 class="cmtt-8">&#x00A0;8</span><span
Chris@1 6350 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6351 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6352 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6353 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 6354 class="cmtt-8">&#x00A0;and</span><span
Chris@1 6355 class="cmtt-8">&#x00A0;subtract</span><span
Chris@1 6356 class="cmtt-8">&#x00A0;one</span>
Chris@1 6357 <br class="fancyvrb" /><a
Chris@1 6358 id="x1-99050r25"></a><span
Chris@1 6359 class="cmr-6">25</span><span
Chris@1 6360 class="cmtt-8">&#x00A0;</span><span
Chris@1 6361 class="cmtt-8">&#x00A0;</span><span
Chris@1 6362 class="cmtt-8">&#x00A0;</span><span
Chris@1 6363 class="cmtt-8">&#x00A0;</span><span
Chris@1 6364 class="cmtt-8">&#x00A0;</span><span
Chris@1 6365 class="cmtt-8">&#x00A0;</span><span
Chris@1 6366 class="cmtt-8">&#x00A0;</span><span
Chris@1 6367 class="cmtt-8">&#x00A0;</span><span
Chris@1 6368 class="cmtt-8">&#x00A0;</span><span
Chris@1 6369 class="cmtt-8">&#x00A0;</span><span
Chris@1 6370 class="cmtt-8">&#x00A0;</span><span
Chris@1 6371 class="cmtt-8">&#x00A0;</span><span
Chris@1 6372 class="cmtt-8">&#x00A0;</span><span
Chris@1 6373 class="cmsy-8">}</span>
Chris@1 6374 <br class="fancyvrb" /><a
Chris@1 6375 id="x1-99052r26"></a><span
Chris@1 6376 class="cmr-6">26</span><span
Chris@1 6377 class="cmtt-8">&#x00A0;</span><span
Chris@1 6378 class="cmtt-8">&#x00A0;</span><span
Chris@1 6379 class="cmtt-8">&#x00A0;</span><span
Chris@1 6380 class="cmtt-8">&#x00A0;</span><span
Chris@1 6381 class="cmtt-8">&#x00A0;</span><span
Chris@1 6382 class="cmtt-8">&#x00A0;</span><span
Chris@1 6383 class="cmtt-8">&#x00A0;</span><span
Chris@1 6384 class="cmtt-8">&#x00A0;</span><span
Chris@1 6385 class="cmsy-8">}</span>
Chris@1 6386 <br class="fancyvrb" /><a
Chris@1 6387 id="x1-99054r27"></a><span
Chris@1 6388 class="cmr-6">27</span><span
Chris@1 6389 class="cmtt-8">&#x00A0;</span><span
Chris@1 6390 class="cmtt-8">&#x00A0;</span>
Chris@1 6391 <br class="fancyvrb" /><a
Chris@1 6392 id="x1-99056r28"></a><span
Chris@1 6393 class="cmr-6">28</span><span
Chris@1 6394 class="cmtt-8">&#x00A0;</span><span
Chris@1 6395 class="cmtt-8">&#x00A0;</span><span
Chris@1 6396 class="cmtt-8">&#x00A0;13)</span><span
Chris@1 6397 class="cmtt-8">&#x00A0;[floor1_multiplier]</span><span
Chris@1 6398 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6399 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6400 class="cmtt-8">&#x00A0;2</span><span
Chris@1 6401 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6402 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6403 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6404 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 6405 class="cmtt-8">&#x00A0;and</span><span
Chris@1 6406 class="cmtt-8">&#x00A0;add</span><span
Chris@1 6407 class="cmtt-8">&#x00A0;one</span>
Chris@1 6408 <br class="fancyvrb" /><a
Chris@1 6409 id="x1-99058r29"></a><span
Chris@1 6410 class="cmr-6">29</span><span
Chris@1 6411 class="cmtt-8">&#x00A0;</span><span
Chris@1 6412 class="cmtt-8">&#x00A0;</span><span
Chris@1 6413 class="cmtt-8">&#x00A0;14)</span><span
Chris@1 6414 class="cmtt-8">&#x00A0;[rangebits]</span><span
Chris@1 6415 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6416 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6417 class="cmtt-8">&#x00A0;4</span><span
Chris@1 6418 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6419 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6420 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6421 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6422 <br class="fancyvrb" /><a
Chris@1 6423 id="x1-99060r30"></a><span
Chris@1 6424 class="cmr-6">30</span><span
Chris@1 6425 class="cmtt-8">&#x00A0;</span><span
Chris@1 6426 class="cmtt-8">&#x00A0;</span><span
Chris@1 6427 class="cmtt-8">&#x00A0;15)</span><span
Chris@1 6428 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6429 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
Chris@1 6430 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6431 class="cmtt-8">&#x00A0;[0]</span><span
Chris@1 6432 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6433 class="cmtt-8">&#x00A0;0</span>
Chris@1 6434 <br class="fancyvrb" /><a
Chris@1 6435 id="x1-99062r31"></a><span
Chris@1 6436 class="cmr-6">31</span><span
Chris@1 6437 class="cmtt-8">&#x00A0;</span><span
Chris@1 6438 class="cmtt-8">&#x00A0;</span><span
Chris@1 6439 class="cmtt-8">&#x00A0;16)</span><span
Chris@1 6440 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6441 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
Chris@1 6442 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6443 class="cmtt-8">&#x00A0;[1]</span><span
Chris@1 6444 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6445 class="cmtt-8">&#x00A0;2</span><span
Chris@1 6446 class="cmtt-8">&#x00A0;exponent</span><span
Chris@1 6447 class="cmtt-8">&#x00A0;[rangebits];</span>
Chris@1 6448 <br class="fancyvrb" /><a
Chris@1 6449 id="x1-99064r32"></a><span
Chris@1 6450 class="cmr-6">32</span><span
Chris@1 6451 class="cmtt-8">&#x00A0;</span><span
Chris@1 6452 class="cmtt-8">&#x00A0;</span><span
Chris@1 6453 class="cmtt-8">&#x00A0;17)</span><span
Chris@1 6454 class="cmtt-8">&#x00A0;[floor1_values]</span><span
Chris@1 6455 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6456 class="cmtt-8">&#x00A0;2</span>
Chris@1 6457 <br class="fancyvrb" /><a
Chris@1 6458 id="x1-99066r33"></a><span
Chris@1 6459 class="cmr-6">33</span><span
Chris@1 6460 class="cmtt-8">&#x00A0;</span><span
Chris@1 6461 class="cmtt-8">&#x00A0;</span><span
Chris@1 6462 class="cmtt-8">&#x00A0;18)</span><span
Chris@1 6463 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 6464 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6465 class="cmtt-8">&#x00A0;over</span><span
Chris@1 6466 class="cmtt-8">&#x00A0;the</span><span
Chris@1 6467 class="cmtt-8">&#x00A0;range</span><span
Chris@1 6468 class="cmtt-8">&#x00A0;0</span><span
Chris@1 6469 class="cmtt-8">&#x00A0;...</span><span
Chris@1 6470 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
Chris@1 6471 class="cmtt-8">&#x00A0;</span><span
Chris@1 6472 class="cmsy-8">{</span>
Chris@1 6473 <br class="fancyvrb" /><a
Chris@1 6474 id="x1-99068r34"></a><span
Chris@1 6475 class="cmr-6">34</span><span
Chris@1 6476 class="cmtt-8">&#x00A0;</span><span
Chris@1 6477 class="cmtt-8">&#x00A0;</span>
Chris@1 6478 <br class="fancyvrb" /><a
Chris@1 6479 id="x1-99070r35"></a><span
Chris@1 6480 class="cmr-6">35</span><span
Chris@1 6481 class="cmtt-8">&#x00A0;</span><span
Chris@1 6482 class="cmtt-8">&#x00A0;</span><span
Chris@1 6483 class="cmtt-8">&#x00A0;</span><span
Chris@1 6484 class="cmtt-8">&#x00A0;</span><span
Chris@1 6485 class="cmtt-8">&#x00A0;</span><span
Chris@1 6486 class="cmtt-8">&#x00A0;</span><span
Chris@1 6487 class="cmtt-8">&#x00A0;</span><span
Chris@1 6488 class="cmtt-8">&#x00A0;</span><span
Chris@1 6489 class="cmtt-8">&#x00A0;19)</span><span
Chris@1 6490 class="cmtt-8">&#x00A0;[current_class_number]</span><span
Chris@1 6491 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6492 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6493 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
Chris@1 6494 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6495 class="cmtt-8">&#x00A0;[i]</span>
Chris@1 6496 <br class="fancyvrb" /><a
Chris@1 6497 id="x1-99072r36"></a><span
Chris@1 6498 class="cmr-6">36</span><span
Chris@1 6499 class="cmtt-8">&#x00A0;</span><span
Chris@1 6500 class="cmtt-8">&#x00A0;</span><span
Chris@1 6501 class="cmtt-8">&#x00A0;</span><span
Chris@1 6502 class="cmtt-8">&#x00A0;</span><span
Chris@1 6503 class="cmtt-8">&#x00A0;</span><span
Chris@1 6504 class="cmtt-8">&#x00A0;</span><span
Chris@1 6505 class="cmtt-8">&#x00A0;</span><span
Chris@1 6506 class="cmtt-8">&#x00A0;</span><span
Chris@1 6507 class="cmtt-8">&#x00A0;20)</span><span
Chris@1 6508 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 6509 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 6510 class="cmtt-8">&#x00A0;over</span><span
Chris@1 6511 class="cmtt-8">&#x00A0;the</span><span
Chris@1 6512 class="cmtt-8">&#x00A0;range</span><span
Chris@1 6513 class="cmtt-8">&#x00A0;0</span><span
Chris@1 6514 class="cmtt-8">&#x00A0;...</span><span
Chris@1 6515 class="cmtt-8">&#x00A0;([floor1_class_dimensions]</span><span
Chris@1 6516 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6517 class="cmtt-8">&#x00A0;[current_class_number])-1</span><span
Chris@1 6518 class="cmtt-8">&#x00A0;</span><span
Chris@1 6519 class="cmsy-8">{</span>
Chris@1 6520 <br class="fancyvrb" /><a
Chris@1 6521 id="x1-99074r37"></a><span
Chris@1 6522 class="cmr-6">37</span><span
Chris@1 6523 class="cmtt-8">&#x00A0;</span><span
Chris@1 6524 class="cmtt-8">&#x00A0;</span><span
Chris@1 6525 class="cmtt-8">&#x00A0;</span><span
Chris@1 6526 class="cmtt-8">&#x00A0;</span><span
Chris@1 6527 class="cmtt-8">&#x00A0;</span><span
Chris@1 6528 class="cmtt-8">&#x00A0;</span><span
Chris@1 6529 class="cmtt-8">&#x00A0;</span><span
Chris@1 6530 class="cmtt-8">&#x00A0;</span><span
Chris@1 6531 class="cmtt-8">&#x00A0;</span><span
Chris@1 6532 class="cmtt-8">&#x00A0;</span><span
Chris@1 6533 class="cmtt-8">&#x00A0;</span><span
Chris@1 6534 class="cmtt-8">&#x00A0;</span><span
Chris@1 6535 class="cmtt-8">&#x00A0;</span><span
Chris@1 6536 class="cmtt-8">&#x00A0;</span><span
Chris@1 6537 class="cmtt-8">&#x00A0;21)</span><span
Chris@1 6538 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6539 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
Chris@1 6540 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6541 class="cmtt-8">&#x00A0;([floor1_values])</span><span
Chris@1 6542 class="cmtt-8">&#x00A0;=</span>
Chris@1 6543 <br class="fancyvrb" /><a
Chris@1 6544 id="x1-99076r38"></a><span
Chris@1 6545 class="cmr-6">38</span><span
Chris@1 6546 class="cmtt-8">&#x00A0;</span><span
Chris@1 6547 class="cmtt-8">&#x00A0;</span><span
Chris@1 6548 class="cmtt-8">&#x00A0;</span><span
Chris@1 6549 class="cmtt-8">&#x00A0;</span><span
Chris@1 6550 class="cmtt-8">&#x00A0;</span><span
Chris@1 6551 class="cmtt-8">&#x00A0;</span><span
Chris@1 6552 class="cmtt-8">&#x00A0;</span><span
Chris@1 6553 class="cmtt-8">&#x00A0;</span><span
Chris@1 6554 class="cmtt-8">&#x00A0;</span><span
Chris@1 6555 class="cmtt-8">&#x00A0;</span><span
Chris@1 6556 class="cmtt-8">&#x00A0;</span><span
Chris@1 6557 class="cmtt-8">&#x00A0;</span><span
Chris@1 6558 class="cmtt-8">&#x00A0;</span><span
Chris@1 6559 class="cmtt-8">&#x00A0;</span><span
Chris@1 6560 class="cmtt-8">&#x00A0;</span><span
Chris@1 6561 class="cmtt-8">&#x00A0;</span><span
Chris@1 6562 class="cmtt-8">&#x00A0;</span><span
Chris@1 6563 class="cmtt-8">&#x00A0;</span><span
Chris@1 6564 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6565 class="cmtt-8">&#x00A0;[rangebits]</span><span
Chris@1 6566 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6567 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6568 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6569 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6570 <br class="fancyvrb" /><a
Chris@1 6571 id="x1-99078r39"></a><span
Chris@1 6572 class="cmr-6">39</span><span
Chris@1 6573 class="cmtt-8">&#x00A0;</span><span
Chris@1 6574 class="cmtt-8">&#x00A0;</span><span
Chris@1 6575 class="cmtt-8">&#x00A0;</span><span
Chris@1 6576 class="cmtt-8">&#x00A0;</span><span
Chris@1 6577 class="cmtt-8">&#x00A0;</span><span
Chris@1 6578 class="cmtt-8">&#x00A0;</span><span
Chris@1 6579 class="cmtt-8">&#x00A0;</span><span
Chris@1 6580 class="cmtt-8">&#x00A0;</span><span
Chris@1 6581 class="cmtt-8">&#x00A0;</span><span
Chris@1 6582 class="cmtt-8">&#x00A0;</span><span
Chris@1 6583 class="cmtt-8">&#x00A0;</span><span
Chris@1 6584 class="cmtt-8">&#x00A0;</span><span
Chris@1 6585 class="cmtt-8">&#x00A0;</span><span
Chris@1 6586 class="cmtt-8">&#x00A0;</span><span
Chris@1 6587 class="cmtt-8">&#x00A0;22)</span><span
Chris@1 6588 class="cmtt-8">&#x00A0;increment</span><span
Chris@1 6589 class="cmtt-8">&#x00A0;[floor1_values]</span><span
Chris@1 6590 class="cmtt-8">&#x00A0;by</span><span
Chris@1 6591 class="cmtt-8">&#x00A0;one</span>
Chris@1 6592 <br class="fancyvrb" /><a
Chris@1 6593 id="x1-99080r40"></a><span
Chris@1 6594 class="cmr-6">40</span><span
Chris@1 6595 class="cmtt-8">&#x00A0;</span><span
Chris@1 6596 class="cmtt-8">&#x00A0;</span><span
Chris@1 6597 class="cmtt-8">&#x00A0;</span><span
Chris@1 6598 class="cmtt-8">&#x00A0;</span><span
Chris@1 6599 class="cmtt-8">&#x00A0;</span><span
Chris@1 6600 class="cmtt-8">&#x00A0;</span><span
Chris@1 6601 class="cmtt-8">&#x00A0;</span><span
Chris@1 6602 class="cmtt-8">&#x00A0;</span><span
Chris@1 6603 class="cmtt-8">&#x00A0;</span><span
Chris@1 6604 class="cmtt-8">&#x00A0;</span><span
Chris@1 6605 class="cmtt-8">&#x00A0;</span><span
Chris@1 6606 class="cmtt-8">&#x00A0;</span><span
Chris@1 6607 class="cmtt-8">&#x00A0;</span><span
Chris@1 6608 class="cmsy-8">}</span>
Chris@1 6609 <br class="fancyvrb" /><a
Chris@1 6610 id="x1-99082r41"></a><span
Chris@1 6611 class="cmr-6">41</span><span
Chris@1 6612 class="cmtt-8">&#x00A0;</span><span
Chris@1 6613 class="cmtt-8">&#x00A0;</span><span
Chris@1 6614 class="cmtt-8">&#x00A0;</span><span
Chris@1 6615 class="cmtt-8">&#x00A0;</span><span
Chris@1 6616 class="cmtt-8">&#x00A0;</span><span
Chris@1 6617 class="cmtt-8">&#x00A0;</span><span
Chris@1 6618 class="cmtt-8">&#x00A0;</span><span
Chris@1 6619 class="cmsy-8">}</span>
Chris@1 6620 <br class="fancyvrb" /><a
Chris@1 6621 id="x1-99084r42"></a><span
Chris@1 6622 class="cmr-6">42</span><span
Chris@1 6623 class="cmtt-8">&#x00A0;</span><span
Chris@1 6624 class="cmtt-8">&#x00A0;</span>
Chris@1 6625 <br class="fancyvrb" /><a
Chris@1 6626 id="x1-99086r43"></a><span
Chris@1 6627 class="cmr-6">43</span><span
Chris@1 6628 class="cmtt-8">&#x00A0;</span><span
Chris@1 6629 class="cmtt-8">&#x00A0;</span><span
Chris@1 6630 class="cmtt-8">&#x00A0;23)</span><span
Chris@1 6631 class="cmtt-8">&#x00A0;done</span>
Chris@1 6632 </div>
Chris@1 6633 <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
Chris@1 6634 setup renders a stream undecodable. In addition, a <span
Chris@1 6635 class="cmtt-12">[floor1_class_masterbooks] </span>or
Chris@1 6636 <span
Chris@1 6637 class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
Chris@1 6638 configured in this stream is an error condition that renders the stream undecodable. Vector
Chris@1 6639 [floor1_x_list] is limited to a maximum length of 65 elements; a setup indicating more than 65
Chris@1 6640 total elements (including elements 0 and 1 set prior to the read loop) renders the stream
Chris@1 6641 undecodable. All vector [floor1_x_list] element values must be unique within the vector; a
Chris@1 6642 non-unique value renders the stream undecodable.
Chris@1 6643
Chris@1 6644
Chris@1 6645
Chris@1 6646 <!--l. 170--><p class="noindent" >
Chris@1 6647 <h5 class="subsubsectionHead"><span class="titlemark">7.2.3. </span> <a
Chris@1 6648 id="x1-1000007.2.3"></a>packet decode</h5>
Chris@1 6649 <!--l. 172--><p class="noindent" >Packet decode begins by checking the <span
Chris@1 6650 class="cmtt-12">[nonzero] </span>flag:
Chris@1 6651 <!--l. 174--><p class="noindent" >
Chris@1 6652 <div class="fancyvrb" id="fancyvrb29">
Chris@1 6653 <a
Chris@1 6654 id="x1-100002r1"></a><span
Chris@1 6655 class="cmr-6">1</span><span
Chris@1 6656 class="cmtt-8">&#x00A0;</span><span
Chris@1 6657 class="cmtt-8">&#x00A0;</span><span
Chris@1 6658 class="cmtt-8">&#x00A0;</span><span
Chris@1 6659 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 6660 class="cmtt-8">&#x00A0;[nonzero]</span><span
Chris@1 6661 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6662 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6663 class="cmtt-8">&#x00A0;1</span><span
Chris@1 6664 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 6665 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6666 class="cmtt-8">&#x00A0;boolean</span>
Chris@1 6667 </div>
Chris@1 6668 <!--l. 178--><p class="noindent" >If <span
Chris@1 6669 class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
Chris@1 6670 Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
Chris@1 6671 this frame. (A return status of &#8217;unused&#8217; is different from decoding a floor that has all
Chris@1 6672 points set to minimum representation amplitude, which happens to be approximately
Chris@1 6673 -140dB).
Chris@1 6674 <!--l. 186--><p class="noindent" >Assuming <span
Chris@1 6675 class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
Chris@1 6676 <!--l. 188--><p class="noindent" >
Chris@1 6677 <div class="fancyvrb" id="fancyvrb30">
Chris@1 6678 <a
Chris@1 6679 id="x1-100004r1"></a><span
Chris@1 6680 class="cmr-6">1</span><span
Chris@1 6681 class="cmtt-8">&#x00A0;</span><span
Chris@1 6682 class="cmtt-8">&#x00A0;</span><span
Chris@1 6683 class="cmtt-8">&#x00A0;</span><span
Chris@1 6684 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 6685 class="cmtt-8">&#x00A0;[range]</span><span
Chris@1 6686 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6687 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6688 class="cmtt-8">&#x00A0;</span><span
Chris@1 6689 class="cmsy-8">{</span><span
Chris@1 6690 class="cmtt-8">&#x00A0;256,</span><span
Chris@1 6691 class="cmtt-8">&#x00A0;128,</span><span
Chris@1 6692 class="cmtt-8">&#x00A0;86,</span><span
Chris@1 6693 class="cmtt-8">&#x00A0;64</span><span
Chris@1 6694 class="cmtt-8">&#x00A0;</span><span
Chris@1 6695 class="cmsy-8">}</span><span
Chris@1 6696 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6697 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
Chris@1 6698 <br class="fancyvrb" /><a
Chris@1 6699 id="x1-100006r2"></a><span
Chris@1 6700 class="cmr-6">2</span><span
Chris@1 6701 class="cmtt-8">&#x00A0;</span><span
Chris@1 6702 class="cmtt-8">&#x00A0;</span><span
Chris@1 6703 class="cmtt-8">&#x00A0;</span><span
Chris@1 6704 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 6705 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6706 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
Chris@1 6707 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6708 class="cmtt-8">&#x00A0;[0]</span><span
Chris@1 6709 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6710 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6711 class="cmtt-8">&#x00A0;</span><a
Chris@1 6712 href="#x1-1170009.2.1"><span
Chris@1 6713 class="cmtt-8">ilog</span></a><span
Chris@1 6714 class="cmtt-8">([range]-1)</span><span
Chris@1 6715 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6716 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6717 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6718 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6719 <br class="fancyvrb" /><a
Chris@1 6720 id="x1-100008r3"></a><span
Chris@1 6721 class="cmr-6">3</span><span
Chris@1 6722 class="cmtt-8">&#x00A0;</span><span
Chris@1 6723 class="cmtt-8">&#x00A0;</span><span
Chris@1 6724 class="cmtt-8">&#x00A0;</span><span
Chris@1 6725 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 6726 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6727 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
Chris@1 6728 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6729 class="cmtt-8">&#x00A0;[1]</span><span
Chris@1 6730 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6731 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6732 class="cmtt-8">&#x00A0;</span><a
Chris@1 6733 href="#x1-1170009.2.1"><span
Chris@1 6734 class="cmtt-8">ilog</span></a><span
Chris@1 6735 class="cmtt-8">([range]-1)</span><span
Chris@1 6736 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 6737 class="cmtt-8">&#x00A0;as</span><span
Chris@1 6738 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 6739 class="cmtt-8">&#x00A0;integer</span>
Chris@1 6740 <br class="fancyvrb" /><a
Chris@1 6741 id="x1-100010r4"></a><span
Chris@1 6742 class="cmr-6">4</span><span
Chris@1 6743 class="cmtt-8">&#x00A0;</span><span
Chris@1 6744 class="cmtt-8">&#x00A0;</span><span
Chris@1 6745 class="cmtt-8">&#x00A0;</span><span
Chris@1 6746 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 6747 class="cmtt-8">&#x00A0;[offset]</span><span
Chris@1 6748 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6749 class="cmtt-8">&#x00A0;2;</span>
Chris@1 6750 <br class="fancyvrb" /><a
Chris@1 6751 id="x1-100012r5"></a><span
Chris@1 6752 class="cmr-6">5</span><span
Chris@1 6753 class="cmtt-8">&#x00A0;</span><span
Chris@1 6754 class="cmtt-8">&#x00A0;</span><span
Chris@1 6755 class="cmtt-8">&#x00A0;</span><span
Chris@1 6756 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 6757 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 6758 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 6759 class="cmtt-8">&#x00A0;over</span><span
Chris@1 6760 class="cmtt-8">&#x00A0;the</span><span
Chris@1 6761 class="cmtt-8">&#x00A0;range</span><span
Chris@1 6762 class="cmtt-8">&#x00A0;0</span><span
Chris@1 6763 class="cmtt-8">&#x00A0;...</span><span
Chris@1 6764 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
Chris@1 6765 class="cmtt-8">&#x00A0;</span><span
Chris@1 6766 class="cmsy-8">{</span>
Chris@1 6767 <br class="fancyvrb" /><a
Chris@1 6768 id="x1-100014r6"></a><span
Chris@1 6769 class="cmr-6">6</span><span
Chris@1 6770 class="cmtt-8">&#x00A0;</span><span
Chris@1 6771 class="cmtt-8">&#x00A0;</span>
Chris@1 6772 <br class="fancyvrb" /><a
Chris@1 6773 id="x1-100016r7"></a><span
Chris@1 6774 class="cmr-6">7</span><span
Chris@1 6775 class="cmtt-8">&#x00A0;</span><span
Chris@1 6776 class="cmtt-8">&#x00A0;</span><span
Chris@1 6777 class="cmtt-8">&#x00A0;</span><span
Chris@1 6778 class="cmtt-8">&#x00A0;</span><span
Chris@1 6779 class="cmtt-8">&#x00A0;</span><span
Chris@1 6780 class="cmtt-8">&#x00A0;</span><span
Chris@1 6781 class="cmtt-8">&#x00A0;</span><span
Chris@1 6782 class="cmtt-8">&#x00A0;</span><span
Chris@1 6783 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 6784 class="cmtt-8">&#x00A0;[class]</span><span
Chris@1 6785 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6786 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6787 class="cmtt-8">&#x00A0;[floor1_partition_class]</span><span
Chris@1 6788 class="cmtt-8">&#x00A0;</span><span
Chris@1 6789 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6790 class="cmtt-8">&#x00A0;[i]</span>
Chris@1 6791 <br class="fancyvrb" /><a
Chris@1 6792 id="x1-100018r8"></a><span
Chris@1 6793 class="cmr-6">8</span><span
Chris@1 6794 class="cmtt-8">&#x00A0;</span><span
Chris@1 6795 class="cmtt-8">&#x00A0;</span><span
Chris@1 6796 class="cmtt-8">&#x00A0;</span><span
Chris@1 6797 class="cmtt-8">&#x00A0;</span><span
Chris@1 6798 class="cmtt-8">&#x00A0;</span><span
Chris@1 6799 class="cmtt-8">&#x00A0;</span><span
Chris@1 6800 class="cmtt-8">&#x00A0;</span><span
Chris@1 6801 class="cmtt-8">&#x00A0;</span><span
Chris@1 6802 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 6803 class="cmtt-8">&#x00A0;[cdim]</span><span
Chris@1 6804 class="cmtt-8">&#x00A0;</span><span
Chris@1 6805 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6806 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6807 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
Chris@1 6808 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6809 class="cmtt-8">&#x00A0;[class]</span>
Chris@1 6810 <br class="fancyvrb" /><a
Chris@1 6811 id="x1-100020r9"></a><span
Chris@1 6812 class="cmr-6">9</span><span
Chris@1 6813 class="cmtt-8">&#x00A0;</span><span
Chris@1 6814 class="cmtt-8">&#x00A0;</span><span
Chris@1 6815 class="cmtt-8">&#x00A0;</span><span
Chris@1 6816 class="cmtt-8">&#x00A0;</span><span
Chris@1 6817 class="cmtt-8">&#x00A0;</span><span
Chris@1 6818 class="cmtt-8">&#x00A0;</span><span
Chris@1 6819 class="cmtt-8">&#x00A0;</span><span
Chris@1 6820 class="cmtt-8">&#x00A0;</span><span
Chris@1 6821 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 6822 class="cmtt-8">&#x00A0;[cbits]</span><span
Chris@1 6823 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6824 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 6825 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
Chris@1 6826 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6827 class="cmtt-8">&#x00A0;[class]</span>
Chris@1 6828 <br class="fancyvrb" /><a
Chris@1 6829 id="x1-100022r10"></a><span
Chris@1 6830 class="cmr-6">10</span><span
Chris@1 6831 class="cmtt-8">&#x00A0;</span><span
Chris@1 6832 class="cmtt-8">&#x00A0;</span><span
Chris@1 6833 class="cmtt-8">&#x00A0;</span><span
Chris@1 6834 class="cmtt-8">&#x00A0;</span><span
Chris@1 6835 class="cmtt-8">&#x00A0;</span><span
Chris@1 6836 class="cmtt-8">&#x00A0;</span><span
Chris@1 6837 class="cmtt-8">&#x00A0;</span><span
Chris@1 6838 class="cmtt-8">&#x00A0;</span><span
Chris@1 6839 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 6840 class="cmtt-8">&#x00A0;[csub]</span><span
Chris@1 6841 class="cmtt-8">&#x00A0;</span><span
Chris@1 6842 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6843 class="cmtt-8">&#x00A0;(2</span><span
Chris@1 6844 class="cmtt-8">&#x00A0;exponent</span><span
Chris@1 6845 class="cmtt-8">&#x00A0;[cbits])-1</span>
Chris@1 6846 <br class="fancyvrb" /><a
Chris@1 6847 id="x1-100024r11"></a><span
Chris@1 6848 class="cmr-6">11</span><span
Chris@1 6849 class="cmtt-8">&#x00A0;</span><span
Chris@1 6850 class="cmtt-8">&#x00A0;</span><span
Chris@1 6851 class="cmtt-8">&#x00A0;</span><span
Chris@1 6852 class="cmtt-8">&#x00A0;</span><span
Chris@1 6853 class="cmtt-8">&#x00A0;</span><span
Chris@1 6854 class="cmtt-8">&#x00A0;</span><span
Chris@1 6855 class="cmtt-8">&#x00A0;</span><span
Chris@1 6856 class="cmtt-8">&#x00A0;10)</span><span
Chris@1 6857 class="cmtt-8">&#x00A0;[cval]</span><span
Chris@1 6858 class="cmtt-8">&#x00A0;</span><span
Chris@1 6859 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6860 class="cmtt-8">&#x00A0;0</span>
Chris@1 6861 <br class="fancyvrb" /><a
Chris@1 6862 id="x1-100026r12"></a><span
Chris@1 6863 class="cmr-6">12</span><span
Chris@1 6864 class="cmtt-8">&#x00A0;</span><span
Chris@1 6865 class="cmtt-8">&#x00A0;</span><span
Chris@1 6866 class="cmtt-8">&#x00A0;</span><span
Chris@1 6867 class="cmtt-8">&#x00A0;</span><span
Chris@1 6868 class="cmtt-8">&#x00A0;</span><span
Chris@1 6869 class="cmtt-8">&#x00A0;</span><span
Chris@1 6870 class="cmtt-8">&#x00A0;</span><span
Chris@1 6871 class="cmtt-8">&#x00A0;11)</span><span
Chris@1 6872 class="cmtt-8">&#x00A0;if</span><span
Chris@1 6873 class="cmtt-8">&#x00A0;(</span><span
Chris@1 6874 class="cmtt-8">&#x00A0;[cbits]</span><span
Chris@1 6875 class="cmtt-8">&#x00A0;is</span><span
Chris@1 6876 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 6877 class="cmtt-8">&#x00A0;than</span><span
Chris@1 6878 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 6879 class="cmtt-8">&#x00A0;)</span><span
Chris@1 6880 class="cmtt-8">&#x00A0;</span><span
Chris@1 6881 class="cmsy-8">{</span>
Chris@1 6882 <br class="fancyvrb" /><a
Chris@1 6883 id="x1-100028r13"></a><span
Chris@1 6884 class="cmr-6">13</span><span
Chris@1 6885 class="cmtt-8">&#x00A0;</span><span
Chris@1 6886 class="cmtt-8">&#x00A0;</span>
Chris@1 6887 <br class="fancyvrb" /><a
Chris@1 6888 id="x1-100030r14"></a><span
Chris@1 6889 class="cmr-6">14</span><span
Chris@1 6890 class="cmtt-8">&#x00A0;</span><span
Chris@1 6891 class="cmtt-8">&#x00A0;</span><span
Chris@1 6892 class="cmtt-8">&#x00A0;</span><span
Chris@1 6893 class="cmtt-8">&#x00A0;</span><span
Chris@1 6894 class="cmtt-8">&#x00A0;</span><span
Chris@1 6895 class="cmtt-8">&#x00A0;</span><span
Chris@1 6896 class="cmtt-8">&#x00A0;</span><span
Chris@1 6897 class="cmtt-8">&#x00A0;</span><span
Chris@1 6898 class="cmtt-8">&#x00A0;</span><span
Chris@1 6899 class="cmtt-8">&#x00A0;</span><span
Chris@1 6900 class="cmtt-8">&#x00A0;</span><span
Chris@1 6901 class="cmtt-8">&#x00A0;</span><span
Chris@1 6902 class="cmtt-8">&#x00A0;</span><span
Chris@1 6903 class="cmtt-8">&#x00A0;</span><span
Chris@1 6904 class="cmtt-8">&#x00A0;12)</span><span
Chris@1 6905 class="cmtt-8">&#x00A0;[cval]</span><span
Chris@1 6906 class="cmtt-8">&#x00A0;=</span><span
Chris@1 6907 class="cmtt-8">&#x00A0;read</span><span
Chris@1 6908 class="cmtt-8">&#x00A0;from</span><span
Chris@1 6909 class="cmtt-8">&#x00A0;packet</span><span
Chris@1 6910 class="cmtt-8">&#x00A0;using</span><span
Chris@1 6911 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 6912 class="cmtt-8">&#x00A0;number</span>
Chris@1 6913 <br class="fancyvrb" /><a
Chris@1 6914 id="x1-100032r15"></a><span
Chris@1 6915 class="cmr-6">15</span><span
Chris@1 6916 class="cmtt-8">&#x00A0;</span><span
Chris@1 6917 class="cmtt-8">&#x00A0;</span><span
Chris@1 6918 class="cmtt-8">&#x00A0;</span><span
Chris@1 6919 class="cmtt-8">&#x00A0;</span><span
Chris@1 6920 class="cmtt-8">&#x00A0;</span><span
Chris@1 6921 class="cmtt-8">&#x00A0;</span><span
Chris@1 6922 class="cmtt-8">&#x00A0;</span><span
Chris@1 6923 class="cmtt-8">&#x00A0;</span><span
Chris@1 6924 class="cmtt-8">&#x00A0;</span><span
Chris@1 6925 class="cmtt-8">&#x00A0;</span><span
Chris@1 6926 class="cmtt-8">&#x00A0;</span><span
Chris@1 6927 class="cmtt-8">&#x00A0;</span><span
Chris@1 6928 class="cmtt-8">&#x00A0;</span><span
Chris@1 6929 class="cmtt-8">&#x00A0;</span><span
Chris@1 6930 class="cmtt-8">&#x00A0;</span><span
Chris@1 6931 class="cmtt-8">&#x00A0;</span><span
Chris@1 6932 class="cmtt-8">&#x00A0;</span><span
Chris@1 6933 class="cmtt-8">&#x00A0;</span><span
Chris@1 6934 class="cmtt-8">&#x00A0;(vector</span><span
Chris@1 6935 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
Chris@1 6936 class="cmtt-8">&#x00A0;element</span><span
Chris@1 6937 class="cmtt-8">&#x00A0;[class])</span><span
Chris@1 6938 class="cmtt-8">&#x00A0;in</span><span
Chris@1 6939 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 6940 class="cmtt-8">&#x00A0;context</span>
Chris@1 6941 <br class="fancyvrb" /><a
Chris@1 6942 id="x1-100034r16"></a><span
Chris@1 6943 class="cmr-6">16</span><span
Chris@1 6944 class="cmtt-8">&#x00A0;</span><span
Chris@1 6945 class="cmtt-8">&#x00A0;</span><span
Chris@1 6946 class="cmtt-8">&#x00A0;</span><span
Chris@1 6947 class="cmtt-8">&#x00A0;</span><span
Chris@1 6948 class="cmtt-8">&#x00A0;</span><span
Chris@1 6949 class="cmtt-8">&#x00A0;</span><span
Chris@1 6950 class="cmtt-8">&#x00A0;</span><span
Chris@1 6951 class="cmtt-8">&#x00A0;</span><span
Chris@1 6952 class="cmtt-8">&#x00A0;</span><span
Chris@1 6953 class="cmtt-8">&#x00A0;</span><span
Chris@1 6954 class="cmtt-8">&#x00A0;</span><span
Chris@1 6955 class="cmtt-8">&#x00A0;</span><span
Chris@1 6956 class="cmsy-8">}</span>
Chris@1 6957 <br class="fancyvrb" /><a
Chris@1 6958 id="x1-100036r17"></a><span
Chris@1 6959 class="cmr-6">17</span><span
Chris@1 6960 class="cmtt-8">&#x00A0;</span><span
Chris@1 6961 class="cmtt-8">&#x00A0;</span>
Chris@1 6962 <br class="fancyvrb" /><a
Chris@1 6963 id="x1-100038r18"></a><span
Chris@1 6964 class="cmr-6">18</span><span
Chris@1 6965 class="cmtt-8">&#x00A0;</span><span
Chris@1 6966 class="cmtt-8">&#x00A0;</span><span
Chris@1 6967 class="cmtt-8">&#x00A0;</span><span
Chris@1 6968 class="cmtt-8">&#x00A0;</span><span
Chris@1 6969 class="cmtt-8">&#x00A0;</span><span
Chris@1 6970 class="cmtt-8">&#x00A0;</span><span
Chris@1 6971 class="cmtt-8">&#x00A0;</span><span
Chris@1 6972 class="cmtt-8">&#x00A0;13)</span><span
Chris@1 6973 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 6974 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 6975 class="cmtt-8">&#x00A0;over</span><span
Chris@1 6976 class="cmtt-8">&#x00A0;the</span><span
Chris@1 6977 class="cmtt-8">&#x00A0;range</span><span
Chris@1 6978 class="cmtt-8">&#x00A0;0</span><span
Chris@1 6979 class="cmtt-8">&#x00A0;...</span><span
Chris@1 6980 class="cmtt-8">&#x00A0;[cdim]-1</span><span
Chris@1 6981 class="cmtt-8">&#x00A0;</span><span
Chris@1 6982 class="cmsy-8">{</span>
Chris@1 6983 <br class="fancyvrb" /><a
Chris@1 6984 id="x1-100040r19"></a><span
Chris@1 6985 class="cmr-6">19</span><span
Chris@1 6986 class="cmtt-8">&#x00A0;</span><span
Chris@1 6987 class="cmtt-8">&#x00A0;</span>
Chris@1 6988 <br class="fancyvrb" /><a
Chris@1 6989 id="x1-100042r20"></a><span
Chris@1 6990 class="cmr-6">20</span><span
Chris@1 6991 class="cmtt-8">&#x00A0;</span><span
Chris@1 6992 class="cmtt-8">&#x00A0;</span><span
Chris@1 6993 class="cmtt-8">&#x00A0;</span><span
Chris@1 6994 class="cmtt-8">&#x00A0;</span><span
Chris@1 6995 class="cmtt-8">&#x00A0;</span><span
Chris@1 6996 class="cmtt-8">&#x00A0;</span><span
Chris@1 6997 class="cmtt-8">&#x00A0;</span><span
Chris@1 6998 class="cmtt-8">&#x00A0;</span><span
Chris@1 6999 class="cmtt-8">&#x00A0;</span><span
Chris@1 7000 class="cmtt-8">&#x00A0;</span><span
Chris@1 7001 class="cmtt-8">&#x00A0;</span><span
Chris@1 7002 class="cmtt-8">&#x00A0;</span><span
Chris@1 7003 class="cmtt-8">&#x00A0;</span><span
Chris@1 7004 class="cmtt-8">&#x00A0;</span><span
Chris@1 7005 class="cmtt-8">&#x00A0;14)</span><span
Chris@1 7006 class="cmtt-8">&#x00A0;[book]</span><span
Chris@1 7007 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7008 class="cmtt-8">&#x00A0;array</span><span
Chris@1 7009 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
Chris@1 7010 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7011 class="cmtt-8">&#x00A0;[class],([cval]</span><span
Chris@1 7012 class="cmtt-8">&#x00A0;bitwise</span><span
Chris@1 7013 class="cmtt-8">&#x00A0;AND</span><span
Chris@1 7014 class="cmtt-8">&#x00A0;[csub])</span>
Chris@1 7015 <br class="fancyvrb" /><a
Chris@1 7016 id="x1-100044r21"></a><span
Chris@1 7017 class="cmr-6">21</span><span
Chris@1 7018 class="cmtt-8">&#x00A0;</span><span
Chris@1 7019 class="cmtt-8">&#x00A0;</span><span
Chris@1 7020 class="cmtt-8">&#x00A0;</span><span
Chris@1 7021 class="cmtt-8">&#x00A0;</span><span
Chris@1 7022 class="cmtt-8">&#x00A0;</span><span
Chris@1 7023 class="cmtt-8">&#x00A0;</span><span
Chris@1 7024 class="cmtt-8">&#x00A0;</span><span
Chris@1 7025 class="cmtt-8">&#x00A0;</span><span
Chris@1 7026 class="cmtt-8">&#x00A0;</span><span
Chris@1 7027 class="cmtt-8">&#x00A0;</span><span
Chris@1 7028 class="cmtt-8">&#x00A0;</span><span
Chris@1 7029 class="cmtt-8">&#x00A0;</span><span
Chris@1 7030 class="cmtt-8">&#x00A0;</span><span
Chris@1 7031 class="cmtt-8">&#x00A0;</span><span
Chris@1 7032 class="cmtt-8">&#x00A0;15)</span><span
Chris@1 7033 class="cmtt-8">&#x00A0;[cval]</span><span
Chris@1 7034 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7035 class="cmtt-8">&#x00A0;[cval]</span><span
Chris@1 7036 class="cmtt-8">&#x00A0;right</span><span
Chris@1 7037 class="cmtt-8">&#x00A0;shifted</span><span
Chris@1 7038 class="cmtt-8">&#x00A0;[cbits]</span><span
Chris@1 7039 class="cmtt-8">&#x00A0;bits</span>
Chris@1 7040 <br class="fancyvrb" /><a
Chris@1 7041 id="x1-100046r22"></a><span
Chris@1 7042 class="cmr-6">22</span><span
Chris@1 7043 class="cmtt-8">&#x00A0;</span><span
Chris@1 7044 class="cmtt-8">&#x00A0; </span><span
Chris@1 7045 class="cmtt-8">&#x00A0;</span><span
Chris@1 7046 class="cmtt-8">&#x00A0;</span><span
Chris@1 7047 class="cmtt-8">&#x00A0;</span><span
Chris@1 7048 class="cmtt-8">&#x00A0;</span><span
Chris@1 7049 class="cmtt-8">&#x00A0;16)</span><span
Chris@1 7050 class="cmtt-8">&#x00A0;if</span><span
Chris@1 7051 class="cmtt-8">&#x00A0;(</span><span
Chris@1 7052 class="cmtt-8">&#x00A0;[book]</span><span
Chris@1 7053 class="cmtt-8">&#x00A0;is</span><span
Chris@1 7054 class="cmtt-8">&#x00A0;not</span><span
Chris@1 7055 class="cmtt-8">&#x00A0;less</span><span
Chris@1 7056 class="cmtt-8">&#x00A0;than</span><span
Chris@1 7057 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 7058 class="cmtt-8">&#x00A0;)</span><span
Chris@1 7059 class="cmtt-8">&#x00A0;</span><span
Chris@1 7060 class="cmsy-8">{</span>
Chris@1 7061 <br class="fancyvrb" /><a
Chris@1 7062 id="x1-100048r23"></a><span
Chris@1 7063 class="cmr-6">23</span><span
Chris@1 7064 class="cmtt-8">&#x00A0;</span><span
Chris@1 7065 class="cmtt-8">&#x00A0;</span>
Chris@1 7066 <br class="fancyvrb" /><a
Chris@1 7067 id="x1-100050r24"></a><span
Chris@1 7068 class="cmr-6">24</span><span
Chris@1 7069 class="cmtt-8">&#x00A0;</span><span
Chris@1 7070 class="cmtt-8">&#x00A0; </span><span
Chris@1 7071 class="cmtt-8">&#x00A0;</span><span
Chris@1 7072 class="cmtt-8">&#x00A0;</span><span
Chris@1 7073 class="cmtt-8">&#x00A0;</span><span
Chris@1 7074 class="cmtt-8">&#x00A0;</span><span
Chris@1 7075 class="cmtt-8">&#x00A0;</span><span
Chris@1 7076 class="cmtt-8">&#x00A0;</span><span
Chris@1 7077 class="cmtt-8">&#x00A0;</span><span
Chris@1 7078 class="cmtt-8">&#x00A0;</span><span
Chris@1 7079 class="cmtt-8">&#x00A0;</span><span
Chris@1 7080 class="cmtt-8">&#x00A0;</span><span
Chris@1 7081 class="cmtt-8">&#x00A0;17)</span><span
Chris@1 7082 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7083 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
Chris@1 7084 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7085 class="cmtt-8">&#x00A0;([j]+[offset])</span><span
Chris@1 7086 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7087 class="cmtt-8">&#x00A0;read</span><span
Chris@1 7088 class="cmtt-8">&#x00A0;from</span><span
Chris@1 7089 class="cmtt-8">&#x00A0;packet</span><span
Chris@1 7090 class="cmtt-8">&#x00A0;using</span><span
Chris@1 7091 class="cmtt-8">&#x00A0;codebook</span>
Chris@1 7092 <br class="fancyvrb" /><a
Chris@1 7093 id="x1-100052r25"></a><span
Chris@1 7094 class="cmr-6">25</span><span
Chris@1 7095 class="cmtt-8">&#x00A0;</span><span
Chris@1 7096 class="cmtt-8">&#x00A0;</span><span
Chris@1 7097 class="cmtt-8">&#x00A0;</span><span
Chris@1 7098 class="cmtt-8">&#x00A0;</span><span
Chris@1 7099 class="cmtt-8">&#x00A0;</span><span
Chris@1 7100 class="cmtt-8">&#x00A0;</span><span
Chris@1 7101 class="cmtt-8">&#x00A0;</span><span
Chris@1 7102 class="cmtt-8">&#x00A0;</span><span
Chris@1 7103 class="cmtt-8">&#x00A0;</span><span
Chris@1 7104 class="cmtt-8">&#x00A0;</span><span
Chris@1 7105 class="cmtt-8">&#x00A0;</span><span
Chris@1 7106 class="cmtt-8">&#x00A0;</span><span
Chris@1 7107 class="cmtt-8">&#x00A0;</span><span
Chris@1 7108 class="cmtt-8">&#x00A0;</span><span
Chris@1 7109 class="cmtt-8">&#x00A0;</span><span
Chris@1 7110 class="cmtt-8">&#x00A0;</span><span
Chris@1 7111 class="cmtt-8">&#x00A0;</span><span
Chris@1 7112 class="cmtt-8">&#x00A0;</span><span
Chris@1 7113 class="cmtt-8">&#x00A0;</span><span
Chris@1 7114 class="cmtt-8">&#x00A0;</span><span
Chris@1 7115 class="cmtt-8">&#x00A0;</span><span
Chris@1 7116 class="cmtt-8">&#x00A0;</span><span
Chris@1 7117 class="cmtt-8">&#x00A0;</span><span
Chris@1 7118 class="cmtt-8">&#x00A0;</span><span
Chris@1 7119 class="cmtt-8">&#x00A0;[book]</span><span
Chris@1 7120 class="cmtt-8">&#x00A0;in</span><span
Chris@1 7121 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 7122 class="cmtt-8">&#x00A0;context</span>
Chris@1 7123 <br class="fancyvrb" /><a
Chris@1 7124 id="x1-100054r26"></a><span
Chris@1 7125 class="cmr-6">26</span><span
Chris@1 7126 class="cmtt-8">&#x00A0;</span><span
Chris@1 7127 class="cmtt-8">&#x00A0;</span>
Chris@1 7128 <br class="fancyvrb" /><a
Chris@1 7129 id="x1-100056r27"></a><span
Chris@1 7130 class="cmr-6">27</span><span
Chris@1 7131 class="cmtt-8">&#x00A0;</span><span
Chris@1 7132 class="cmtt-8">&#x00A0;</span><span
Chris@1 7133 class="cmtt-8">&#x00A0;</span><span
Chris@1 7134 class="cmtt-8">&#x00A0;</span><span
Chris@1 7135 class="cmtt-8">&#x00A0;</span><span
Chris@1 7136 class="cmtt-8">&#x00A0;</span><span
Chris@1 7137 class="cmtt-8">&#x00A0;</span><span
Chris@1 7138 class="cmtt-8">&#x00A0;</span><span
Chris@1 7139 class="cmtt-8">&#x00A0;</span><span
Chris@1 7140 class="cmtt-8">&#x00A0;</span><span
Chris@1 7141 class="cmtt-8">&#x00A0;</span><span
Chris@1 7142 class="cmtt-8">&#x00A0;</span><span
Chris@1 7143 class="cmtt-8">&#x00A0;</span><span
Chris@1 7144 class="cmtt-8">&#x00A0;</span><span
Chris@1 7145 class="cmtt-8">&#x00A0;</span><span
Chris@1 7146 class="cmtt-8">&#x00A0;</span><span
Chris@1 7147 class="cmtt-8">&#x00A0;</span><span
Chris@1 7148 class="cmtt-8">&#x00A0;</span><span
Chris@1 7149 class="cmtt-8">&#x00A0;</span><span
Chris@1 7150 class="cmsy-8">}</span><span
Chris@1 7151 class="cmtt-8">&#x00A0;else</span><span
Chris@1 7152 class="cmtt-8">&#x00A0;[book]</span><span
Chris@1 7153 class="cmtt-8">&#x00A0;is</span><span
Chris@1 7154 class="cmtt-8">&#x00A0;less</span><span
Chris@1 7155 class="cmtt-8">&#x00A0;than</span><span
Chris@1 7156 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 7157 class="cmtt-8">&#x00A0;</span><span
Chris@1 7158 class="cmsy-8">{</span>
Chris@1 7159 <br class="fancyvrb" /><a
Chris@1 7160 id="x1-100058r28"></a><span
Chris@1 7161 class="cmr-6">28</span><span
Chris@1 7162 class="cmtt-8">&#x00A0;</span><span
Chris@1 7163 class="cmtt-8">&#x00A0;</span>
Chris@1 7164 <br class="fancyvrb" /><a
Chris@1 7165 id="x1-100060r29"></a><span
Chris@1 7166 class="cmr-6">29</span><span
Chris@1 7167 class="cmtt-8">&#x00A0;</span><span
Chris@1 7168 class="cmtt-8">&#x00A0; </span><span
Chris@1 7169 class="cmtt-8">&#x00A0;</span><span
Chris@1 7170 class="cmtt-8">&#x00A0;</span><span
Chris@1 7171 class="cmtt-8">&#x00A0;</span><span
Chris@1 7172 class="cmtt-8">&#x00A0;</span><span
Chris@1 7173 class="cmtt-8">&#x00A0;</span><span
Chris@1 7174 class="cmtt-8">&#x00A0;</span><span
Chris@1 7175 class="cmtt-8">&#x00A0;</span><span
Chris@1 7176 class="cmtt-8">&#x00A0;</span><span
Chris@1 7177 class="cmtt-8">&#x00A0;</span><span
Chris@1 7178 class="cmtt-8">&#x00A0;</span><span
Chris@1 7179 class="cmtt-8">&#x00A0;18)</span><span
Chris@1 7180 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7181 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
Chris@1 7182 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7183 class="cmtt-8">&#x00A0;([j]+[offset])</span><span
Chris@1 7184 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7185 class="cmtt-8">&#x00A0;0</span>
Chris@1 7186 <br class="fancyvrb" /><a
Chris@1 7187 id="x1-100062r30"></a><span
Chris@1 7188 class="cmr-6">30</span><span
Chris@1 7189 class="cmtt-8">&#x00A0;</span><span
Chris@1 7190 class="cmtt-8">&#x00A0;</span>
Chris@1 7191 <br class="fancyvrb" /><a
Chris@1 7192 id="x1-100064r31"></a><span
Chris@1 7193 class="cmr-6">31</span><span
Chris@1 7194 class="cmtt-8">&#x00A0;</span><span
Chris@1 7195 class="cmtt-8">&#x00A0;</span><span
Chris@1 7196 class="cmtt-8">&#x00A0;</span><span
Chris@1 7197 class="cmtt-8">&#x00A0;</span><span
Chris@1 7198 class="cmtt-8">&#x00A0;</span><span
Chris@1 7199 class="cmtt-8">&#x00A0;</span><span
Chris@1 7200 class="cmtt-8">&#x00A0;</span><span
Chris@1 7201 class="cmtt-8">&#x00A0;</span><span
Chris@1 7202 class="cmtt-8">&#x00A0;</span><span
Chris@1 7203 class="cmtt-8">&#x00A0;</span><span
Chris@1 7204 class="cmtt-8">&#x00A0;</span><span
Chris@1 7205 class="cmtt-8">&#x00A0;</span><span
Chris@1 7206 class="cmtt-8">&#x00A0;</span><span
Chris@1 7207 class="cmtt-8">&#x00A0;</span><span
Chris@1 7208 class="cmtt-8">&#x00A0;</span><span
Chris@1 7209 class="cmtt-8">&#x00A0;</span><span
Chris@1 7210 class="cmtt-8">&#x00A0;</span><span
Chris@1 7211 class="cmtt-8">&#x00A0;</span><span
Chris@1 7212 class="cmtt-8">&#x00A0;</span><span
Chris@1 7213 class="cmsy-8">}</span>
Chris@1 7214 <br class="fancyvrb" /><a
Chris@1 7215 id="x1-100066r32"></a><span
Chris@1 7216 class="cmr-6">32</span><span
Chris@1 7217 class="cmtt-8">&#x00A0;</span><span
Chris@1 7218 class="cmtt-8">&#x00A0;</span><span
Chris@1 7219 class="cmtt-8">&#x00A0;</span><span
Chris@1 7220 class="cmtt-8">&#x00A0;</span><span
Chris@1 7221 class="cmtt-8">&#x00A0;</span><span
Chris@1 7222 class="cmtt-8">&#x00A0;</span><span
Chris@1 7223 class="cmtt-8">&#x00A0;</span><span
Chris@1 7224 class="cmtt-8">&#x00A0;</span><span
Chris@1 7225 class="cmtt-8">&#x00A0;</span><span
Chris@1 7226 class="cmtt-8">&#x00A0;</span><span
Chris@1 7227 class="cmtt-8">&#x00A0;</span><span
Chris@1 7228 class="cmtt-8">&#x00A0;</span><span
Chris@1 7229 class="cmsy-8">}</span>
Chris@1 7230 <br class="fancyvrb" /><a
Chris@1 7231 id="x1-100068r33"></a><span
Chris@1 7232 class="cmr-6">33</span><span
Chris@1 7233 class="cmtt-8">&#x00A0;</span><span
Chris@1 7234 class="cmtt-8">&#x00A0;</span>
Chris@1 7235 <br class="fancyvrb" /><a
Chris@1 7236 id="x1-100070r34"></a><span
Chris@1 7237 class="cmr-6">34</span><span
Chris@1 7238 class="cmtt-8">&#x00A0;</span><span
Chris@1 7239 class="cmtt-8">&#x00A0;</span><span
Chris@1 7240 class="cmtt-8">&#x00A0;</span><span
Chris@1 7241 class="cmtt-8">&#x00A0;</span><span
Chris@1 7242 class="cmtt-8">&#x00A0;</span><span
Chris@1 7243 class="cmtt-8">&#x00A0;</span><span
Chris@1 7244 class="cmtt-8">&#x00A0;</span><span
Chris@1 7245 class="cmtt-8">&#x00A0;19)</span><span
Chris@1 7246 class="cmtt-8">&#x00A0;[offset]</span><span
Chris@1 7247 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7248 class="cmtt-8">&#x00A0;[offset]</span><span
Chris@1 7249 class="cmtt-8">&#x00A0;+</span><span
Chris@1 7250 class="cmtt-8">&#x00A0;[cdim]</span>
Chris@1 7251
Chris@1 7252
Chris@1 7253
Chris@1 7254 <br class="fancyvrb" /><a
Chris@1 7255 id="x1-100072r35"></a><span
Chris@1 7256 class="cmr-6">35</span><span
Chris@1 7257 class="cmtt-8">&#x00A0;</span><span
Chris@1 7258 class="cmtt-8">&#x00A0;</span>
Chris@1 7259 <br class="fancyvrb" /><a
Chris@1 7260 id="x1-100074r36"></a><span
Chris@1 7261 class="cmr-6">36</span><span
Chris@1 7262 class="cmtt-8">&#x00A0;</span><span
Chris@1 7263 class="cmtt-8">&#x00A0;</span><span
Chris@1 7264 class="cmtt-8">&#x00A0;</span><span
Chris@1 7265 class="cmtt-8">&#x00A0;</span><span
Chris@1 7266 class="cmtt-8">&#x00A0;</span><span
Chris@1 7267 class="cmtt-8">&#x00A0;</span><span
Chris@1 7268 class="cmtt-8">&#x00A0;</span><span
Chris@1 7269 class="cmsy-8">}</span>
Chris@1 7270 <br class="fancyvrb" /><a
Chris@1 7271 id="x1-100076r37"></a><span
Chris@1 7272 class="cmr-6">37</span><span
Chris@1 7273 class="cmtt-8">&#x00A0;</span><span
Chris@1 7274 class="cmtt-8">&#x00A0;</span>
Chris@1 7275 <br class="fancyvrb" /><a
Chris@1 7276 id="x1-100078r38"></a><span
Chris@1 7277 class="cmr-6">38</span><span
Chris@1 7278 class="cmtt-8">&#x00A0;</span><span
Chris@1 7279 class="cmtt-8">&#x00A0;</span><span
Chris@1 7280 class="cmtt-8">&#x00A0;20)</span><span
Chris@1 7281 class="cmtt-8">&#x00A0;done</span>
Chris@1 7282 </div>
Chris@1 7283 <!--l. 229--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
Chris@1 7284 end-of-packet is reached during any read operation above, floor decode is to return &#8217;unused&#8217;
Chris@1 7285 status as if the <span
Chris@1 7286 class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
Chris@1 7287 <!--l. 235--><p class="noindent" >Vector <span
Chris@1 7288 class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
Chris@1 7289 <!--l. 240--><p class="noindent" >
Chris@1 7290 <h5 class="subsubsectionHead"><span class="titlemark">7.2.4. </span> <a
Chris@1 7291 id="x1-1010007.2.4"></a>curve computation</h5>
Chris@1 7292 <!--l. 242--><p class="noindent" >Curve computation is split into two logical steps; the first step derives final Y amplitude values
Chris@1 7293 from the encoded, wrapped difference values taken from the bitstream. The second step
Chris@1 7294 plots the curve lines. Also, although zero-difference values are used in the iterative
Chris@1 7295 prediction to find final Y values, these points are conditionally skipped during final
Chris@1 7296 line computation in step two. Skipping zero-difference values allows a smoother line
Chris@1 7297 fit.
Chris@1 7298 <!--l. 250--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
Chris@1 7299 implementors are warned to follow the details closely. Deviation from implementing a strictly
Chris@1 7300 equivalent algorithm can result in serious decoding errors.
Chris@1 7301 <!--l. 255--><p class="noindent" ><span
Chris@1 7302 class="cmti-12">Additional note: </span>Although <span
Chris@1 7303 class="cmtt-12">[floor1_final_Y] </span>values in the prediction loop and at the end of
Chris@1 7304 step 1 are inherently limited by the prediction algorithm to [0, <span
Chris@1 7305 class="cmtt-12">[range]</span>), it is possible to abuse
Chris@1 7306 the setup and codebook machinery to produce negative or over-range results. We suggest that
Chris@1 7307 decoder implementations guard the values in vector <span
Chris@1 7308 class="cmtt-12">[floor1_final_Y] </span>by clamping each
Chris@1 7309 element to [0, <span
Chris@1 7310 class="cmtt-12">[range]</span>) after step 1. Variants of this suggestion are acceptable as valid floor1
Chris@1 7311 setups cannot produce out of range values.
Chris@1 7312 <!--l. 266--><p class="noindent" >
Chris@1 7313 <dl class="description"><dt class="description">
Chris@1 7314 <span
Chris@1 7315 class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd
Chris@1 7316 class="description">
Chris@1 7317 <!--l. 268--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
Chris@1 7318 values, then apply to line prediction.
Chris@1 7319 <!--l. 271--><p class="noindent" >
Chris@1 7320 <div class="fancyvrb" id="fancyvrb31">
Chris@1 7321
Chris@1 7322
Chris@1 7323
Chris@1 7324 <a
Chris@1 7325 id="x1-101002r1"></a><span
Chris@1 7326 class="cmr-6">1</span><span
Chris@1 7327 class="cmtt-8">&#x00A0;</span><span
Chris@1 7328 class="cmtt-8">&#x00A0;</span><span
Chris@1 7329 class="cmtt-8">&#x00A0;</span><span
Chris@1 7330 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 7331 class="cmtt-8">&#x00A0;[range]</span><span
Chris@1 7332 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7333 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7334 class="cmtt-8">&#x00A0;</span><span
Chris@1 7335 class="cmsy-8">{</span><span
Chris@1 7336 class="cmtt-8">&#x00A0;256,</span><span
Chris@1 7337 class="cmtt-8">&#x00A0;128,</span><span
Chris@1 7338 class="cmtt-8">&#x00A0;86,</span><span
Chris@1 7339 class="cmtt-8">&#x00A0;64</span><span
Chris@1 7340 class="cmtt-8">&#x00A0;</span><span
Chris@1 7341 class="cmsy-8">}</span><span
Chris@1 7342 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7343 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
Chris@1 7344 <br class="fancyvrb" /><a
Chris@1 7345 id="x1-101004r2"></a><span
Chris@1 7346 class="cmr-6">2</span><span
Chris@1 7347 class="cmtt-8">&#x00A0;</span><span
Chris@1 7348 class="cmtt-8">&#x00A0;</span><span
Chris@1 7349 class="cmtt-8">&#x00A0;</span><span
Chris@1 7350 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 7351 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7352 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
Chris@1 7353 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7354 class="cmtt-8">&#x00A0;[0]</span><span
Chris@1 7355 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7356 class="cmtt-8">&#x00A0;set</span>
Chris@1 7357 <br class="fancyvrb" /><a
Chris@1 7358 id="x1-101006r3"></a><span
Chris@1 7359 class="cmr-6">3</span><span
Chris@1 7360 class="cmtt-8">&#x00A0;</span><span
Chris@1 7361 class="cmtt-8">&#x00A0;</span><span
Chris@1 7362 class="cmtt-8">&#x00A0;</span><span
Chris@1 7363 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 7364 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7365 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
Chris@1 7366 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7367 class="cmtt-8">&#x00A0;[1]</span><span
Chris@1 7368 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7369 class="cmtt-8">&#x00A0;set</span>
Chris@1 7370 <br class="fancyvrb" /><a
Chris@1 7371 id="x1-101008r4"></a><span
Chris@1 7372 class="cmr-6">4</span><span
Chris@1 7373 class="cmtt-8">&#x00A0;</span><span
Chris@1 7374 class="cmtt-8">&#x00A0;</span><span
Chris@1 7375 class="cmtt-8">&#x00A0;</span><span
Chris@1 7376 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 7377 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7378 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 7379 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7380 class="cmtt-8">&#x00A0;[0]</span><span
Chris@1 7381 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7382 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7383 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
Chris@1 7384 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7385 class="cmtt-8">&#x00A0;[0]</span>
Chris@1 7386 <br class="fancyvrb" /><a
Chris@1 7387 id="x1-101010r5"></a><span
Chris@1 7388 class="cmr-6">5</span><span
Chris@1 7389 class="cmtt-8">&#x00A0;</span><span
Chris@1 7390 class="cmtt-8">&#x00A0;</span><span
Chris@1 7391 class="cmtt-8">&#x00A0;</span><span
Chris@1 7392 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 7393 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7394 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 7395 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7396 class="cmtt-8">&#x00A0;[1]</span><span
Chris@1 7397 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7398 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7399 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
Chris@1 7400 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7401 class="cmtt-8">&#x00A0;[1]</span>
Chris@1 7402 <br class="fancyvrb" /><a
Chris@1 7403 id="x1-101012r6"></a><span
Chris@1 7404 class="cmr-6">6</span><span
Chris@1 7405 class="cmtt-8">&#x00A0;</span><span
Chris@1 7406 class="cmtt-8">&#x00A0;</span><span
Chris@1 7407 class="cmtt-8">&#x00A0;</span><span
Chris@1 7408 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 7409 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 7410 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 7411 class="cmtt-8">&#x00A0;over</span><span
Chris@1 7412 class="cmtt-8">&#x00A0;the</span><span
Chris@1 7413 class="cmtt-8">&#x00A0;range</span><span
Chris@1 7414 class="cmtt-8">&#x00A0;2</span><span
Chris@1 7415 class="cmtt-8">&#x00A0;...</span><span
Chris@1 7416 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
Chris@1 7417 class="cmtt-8">&#x00A0;</span><span
Chris@1 7418 class="cmsy-8">{</span>
Chris@1 7419 <br class="fancyvrb" /><a
Chris@1 7420 id="x1-101014r7"></a><span
Chris@1 7421 class="cmr-6">7</span><span
Chris@1 7422 class="cmtt-8">&#x00A0;</span><span
Chris@1 7423 class="cmtt-8">&#x00A0;</span>
Chris@1 7424 <br class="fancyvrb" /><a
Chris@1 7425 id="x1-101016r8"></a><span
Chris@1 7426 class="cmr-6">8</span><span
Chris@1 7427 class="cmtt-8">&#x00A0;</span><span
Chris@1 7428 class="cmtt-8">&#x00A0;</span><span
Chris@1 7429 class="cmtt-8">&#x00A0;</span><span
Chris@1 7430 class="cmtt-8">&#x00A0;</span><span
Chris@1 7431 class="cmtt-8">&#x00A0;</span><span
Chris@1 7432 class="cmtt-8">&#x00A0;</span><span
Chris@1 7433 class="cmtt-8">&#x00A0;</span><span
Chris@1 7434 class="cmtt-8">&#x00A0;</span><span
Chris@1 7435 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 7436 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
Chris@1 7437 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7438 class="cmtt-8">&#x00A0;</span><a
Chris@1 7439 href="#x1-1200009.2.4"><span
Chris@1 7440 class="cmtt-8">low_neighbor</span></a><span
Chris@1 7441 class="cmtt-8">([floor1_X_list],[i])</span>
Chris@1 7442 <br class="fancyvrb" /><a
Chris@1 7443 id="x1-101018r9"></a><span
Chris@1 7444 class="cmr-6">9</span><span
Chris@1 7445 class="cmtt-8">&#x00A0;</span><span
Chris@1 7446 class="cmtt-8">&#x00A0;</span><span
Chris@1 7447 class="cmtt-8">&#x00A0;</span><span
Chris@1 7448 class="cmtt-8">&#x00A0;</span><span
Chris@1 7449 class="cmtt-8">&#x00A0;</span><span
Chris@1 7450 class="cmtt-8">&#x00A0;</span><span
Chris@1 7451 class="cmtt-8">&#x00A0;</span><span
Chris@1 7452 class="cmtt-8">&#x00A0;</span><span
Chris@1 7453 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 7454 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
Chris@1 7455 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7456 class="cmtt-8">&#x00A0;</span><a
Chris@1 7457 href="#x1-1210009.2.5"><span
Chris@1 7458 class="cmtt-8">high_neighbor</span></a><span
Chris@1 7459 class="cmtt-8">([floor1_X_list],[i])</span>
Chris@1 7460 <br class="fancyvrb" /><a
Chris@1 7461 id="x1-101020r10"></a><span
Chris@1 7462 class="cmr-6">10</span><span
Chris@1 7463 class="cmtt-8">&#x00A0;</span><span
Chris@1 7464 class="cmtt-8">&#x00A0;</span>
Chris@1 7465 <br class="fancyvrb" /><a
Chris@1 7466 id="x1-101022r11"></a><span
Chris@1 7467 class="cmr-6">11</span><span
Chris@1 7468 class="cmtt-8">&#x00A0;</span><span
Chris@1 7469 class="cmtt-8">&#x00A0;</span><span
Chris@1 7470 class="cmtt-8">&#x00A0;</span><span
Chris@1 7471 class="cmtt-8">&#x00A0;</span><span
Chris@1 7472 class="cmtt-8">&#x00A0;</span><span
Chris@1 7473 class="cmtt-8">&#x00A0;</span><span
Chris@1 7474 class="cmtt-8">&#x00A0;</span><span
Chris@1 7475 class="cmtt-8">&#x00A0;</span><span
Chris@1 7476 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 7477 class="cmtt-8">&#x00A0;[predicted]</span><span
Chris@1 7478 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7479 class="cmtt-8">&#x00A0;</span><a
Chris@1 7480 href="#x1-1220009.2.6"><span
Chris@1 7481 class="cmtt-8">render_point</span></a><span
Chris@1 7482 class="cmtt-8">(</span><span
Chris@1 7483 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7484 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
Chris@1 7485 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7486 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
Chris@1 7487 <br class="fancyvrb" /><a
Chris@1 7488 id="x1-101024r12"></a><span
Chris@1 7489 class="cmr-6">12</span><span
Chris@1 7490 class="cmtt-8">&#x00A0;</span><span
Chris@1 7491 class="cmtt-8">&#x00A0; </span><span
Chris@1 7492 class="cmtt-8">&#x00A0;</span><span
Chris@1 7493 class="cmtt-8">&#x00A0;</span><span
Chris@1 7494 class="cmtt-8">&#x00A0;</span><span
Chris@1 7495 class="cmtt-8">&#x00A0;</span><span
Chris@1 7496 class="cmtt-8">&#x00A0;</span><span
Chris@1 7497 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7498 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 7499 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7500 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
Chris@1 7501 <br class="fancyvrb" /><a
Chris@1 7502 id="x1-101026r13"></a><span
Chris@1 7503 class="cmr-6">13</span><span
Chris@1 7504 class="cmtt-8">&#x00A0;</span><span
Chris@1 7505 class="cmtt-8">&#x00A0;</span><span
Chris@1 7506 class="cmtt-8">&#x00A0;</span><span
Chris@1 7507 class="cmtt-8">&#x00A0;</span><span
Chris@1 7508 class="cmtt-8">&#x00A0;</span><span
Chris@1 7509 class="cmtt-8">&#x00A0;</span><span
Chris@1 7510 class="cmtt-8">&#x00A0;</span><span
Chris@1 7511 class="cmtt-8">&#x00A0;</span><span
Chris@1 7512 class="cmtt-8">&#x00A0;</span><span
Chris@1 7513 class="cmtt-8">&#x00A0;</span><span
Chris@1 7514 class="cmtt-8">&#x00A0;</span><span
Chris@1 7515 class="cmtt-8">&#x00A0;</span><span
Chris@1 7516 class="cmtt-8">&#x00A0;</span><span
Chris@1 7517 class="cmtt-8">&#x00A0;</span><span
Chris@1 7518 class="cmtt-8">&#x00A0;</span><span
Chris@1 7519 class="cmtt-8">&#x00A0;</span><span
Chris@1 7520 class="cmtt-8">&#x00A0;</span><span
Chris@1 7521 class="cmtt-8">&#x00A0;</span><span
Chris@1 7522 class="cmtt-8">&#x00A0;</span><span
Chris@1 7523 class="cmtt-8">&#x00A0;</span><span
Chris@1 7524 class="cmtt-8">&#x00A0;</span><span
Chris@1 7525 class="cmtt-8">&#x00A0;</span><span
Chris@1 7526 class="cmtt-8">&#x00A0;</span><span
Chris@1 7527 class="cmtt-8">&#x00A0;</span><span
Chris@1 7528 class="cmtt-8">&#x00A0;</span><span
Chris@1 7529 class="cmtt-8">&#x00A0;</span><span
Chris@1 7530 class="cmtt-8">&#x00A0;</span><span
Chris@1 7531 class="cmtt-8">&#x00A0;</span><span
Chris@1 7532 class="cmtt-8">&#x00A0;</span><span
Chris@1 7533 class="cmtt-8">&#x00A0;</span><span
Chris@1 7534 class="cmtt-8">&#x00A0;</span><span
Chris@1 7535 class="cmtt-8">&#x00A0;</span><span
Chris@1 7536 class="cmtt-8">&#x00A0;</span><span
Chris@1 7537 class="cmtt-8">&#x00A0;</span><span
Chris@1 7538 class="cmtt-8">&#x00A0;</span><span
Chris@1 7539 class="cmtt-8">&#x00A0;</span><span
Chris@1 7540 class="cmtt-8">&#x00A0;</span><span
Chris@1 7541 class="cmtt-8">&#x00A0;</span><span
Chris@1 7542 class="cmtt-8">&#x00A0;</span><span
Chris@1 7543 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7544 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
Chris@1 7545 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7546 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
Chris@1 7547 <br class="fancyvrb" /><a
Chris@1 7548 id="x1-101028r14"></a><span
Chris@1 7549 class="cmr-6">14</span><span
Chris@1 7550 class="cmtt-8">&#x00A0;</span><span
Chris@1 7551 class="cmtt-8">&#x00A0; </span><span
Chris@1 7552 class="cmtt-8">&#x00A0;</span><span
Chris@1 7553 class="cmtt-8">&#x00A0;</span><span
Chris@1 7554 class="cmtt-8">&#x00A0;</span><span
Chris@1 7555 class="cmtt-8">&#x00A0;</span><span
Chris@1 7556 class="cmtt-8">&#x00A0;</span><span
Chris@1 7557 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7558 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 7559 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7560 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
Chris@1 7561 <br class="fancyvrb" /><a
Chris@1 7562 id="x1-101030r15"></a><span
Chris@1 7563 class="cmr-6">15</span><span
Chris@1 7564 class="cmtt-8">&#x00A0;</span><span
Chris@1 7565 class="cmtt-8">&#x00A0;</span><span
Chris@1 7566 class="cmtt-8">&#x00A0;</span><span
Chris@1 7567 class="cmtt-8">&#x00A0;</span><span
Chris@1 7568 class="cmtt-8">&#x00A0;</span><span
Chris@1 7569 class="cmtt-8">&#x00A0;</span><span
Chris@1 7570 class="cmtt-8">&#x00A0;</span><span
Chris@1 7571 class="cmtt-8">&#x00A0;</span><span
Chris@1 7572 class="cmtt-8">&#x00A0;</span><span
Chris@1 7573 class="cmtt-8">&#x00A0;</span><span
Chris@1 7574 class="cmtt-8">&#x00A0;</span><span
Chris@1 7575 class="cmtt-8">&#x00A0;</span><span
Chris@1 7576 class="cmtt-8">&#x00A0;</span><span
Chris@1 7577 class="cmtt-8">&#x00A0;</span><span
Chris@1 7578 class="cmtt-8">&#x00A0;</span><span
Chris@1 7579 class="cmtt-8">&#x00A0;</span><span
Chris@1 7580 class="cmtt-8">&#x00A0;</span><span
Chris@1 7581 class="cmtt-8">&#x00A0;</span><span
Chris@1 7582 class="cmtt-8">&#x00A0;</span><span
Chris@1 7583 class="cmtt-8">&#x00A0;</span><span
Chris@1 7584 class="cmtt-8">&#x00A0;</span><span
Chris@1 7585 class="cmtt-8">&#x00A0;</span><span
Chris@1 7586 class="cmtt-8">&#x00A0;</span><span
Chris@1 7587 class="cmtt-8">&#x00A0;</span><span
Chris@1 7588 class="cmtt-8">&#x00A0;</span><span
Chris@1 7589 class="cmtt-8">&#x00A0;</span><span
Chris@1 7590 class="cmtt-8">&#x00A0;</span><span
Chris@1 7591 class="cmtt-8">&#x00A0;</span><span
Chris@1 7592 class="cmtt-8">&#x00A0;</span><span
Chris@1 7593 class="cmtt-8">&#x00A0;</span><span
Chris@1 7594 class="cmtt-8">&#x00A0;</span><span
Chris@1 7595 class="cmtt-8">&#x00A0;</span><span
Chris@1 7596 class="cmtt-8">&#x00A0;</span><span
Chris@1 7597 class="cmtt-8">&#x00A0;</span><span
Chris@1 7598 class="cmtt-8">&#x00A0;</span><span
Chris@1 7599 class="cmtt-8">&#x00A0;</span><span
Chris@1 7600 class="cmtt-8">&#x00A0;</span><span
Chris@1 7601 class="cmtt-8">&#x00A0;</span><span
Chris@1 7602 class="cmtt-8">&#x00A0;</span><span
Chris@1 7603 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7604 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
Chris@1 7605 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7606 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 7607 class="cmtt-8">&#x00A0;)</span>
Chris@1 7608 <br class="fancyvrb" /><a
Chris@1 7609 id="x1-101032r16"></a><span
Chris@1 7610 class="cmr-6">16</span><span
Chris@1 7611 class="cmtt-8">&#x00A0;</span><span
Chris@1 7612 class="cmtt-8">&#x00A0;</span>
Chris@1 7613 <br class="fancyvrb" /><a
Chris@1 7614 id="x1-101034r17"></a><span
Chris@1 7615 class="cmr-6">17</span><span
Chris@1 7616 class="cmtt-8">&#x00A0;</span><span
Chris@1 7617 class="cmtt-8">&#x00A0;</span><span
Chris@1 7618 class="cmtt-8">&#x00A0;</span><span
Chris@1 7619 class="cmtt-8">&#x00A0;</span><span
Chris@1 7620 class="cmtt-8">&#x00A0;</span><span
Chris@1 7621 class="cmtt-8">&#x00A0;</span><span
Chris@1 7622 class="cmtt-8">&#x00A0;</span><span
Chris@1 7623 class="cmtt-8">&#x00A0;10)</span><span
Chris@1 7624 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 7625 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7626 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7627 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
Chris@1 7628 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7629 class="cmtt-8">&#x00A0;[i]</span>
Chris@1 7630 <br class="fancyvrb" /><a
Chris@1 7631 id="x1-101036r18"></a><span
Chris@1 7632 class="cmr-6">18</span><span
Chris@1 7633 class="cmtt-8">&#x00A0;</span><span
Chris@1 7634 class="cmtt-8">&#x00A0;</span><span
Chris@1 7635 class="cmtt-8">&#x00A0;</span><span
Chris@1 7636 class="cmtt-8">&#x00A0;</span><span
Chris@1 7637 class="cmtt-8">&#x00A0;</span><span
Chris@1 7638 class="cmtt-8">&#x00A0;</span><span
Chris@1 7639 class="cmtt-8">&#x00A0;</span><span
Chris@1 7640 class="cmtt-8">&#x00A0;11)</span><span
Chris@1 7641 class="cmtt-8">&#x00A0;[highroom]</span><span
Chris@1 7642 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7643 class="cmtt-8">&#x00A0;[range]</span><span
Chris@1 7644 class="cmtt-8">&#x00A0;-</span><span
Chris@1 7645 class="cmtt-8">&#x00A0;[predicted]</span>
Chris@1 7646 <br class="fancyvrb" /><a
Chris@1 7647 id="x1-101038r19"></a><span
Chris@1 7648 class="cmr-6">19</span><span
Chris@1 7649 class="cmtt-8">&#x00A0;</span><span
Chris@1 7650 class="cmtt-8">&#x00A0;</span><span
Chris@1 7651 class="cmtt-8">&#x00A0;</span><span
Chris@1 7652 class="cmtt-8">&#x00A0;</span><span
Chris@1 7653 class="cmtt-8">&#x00A0;</span><span
Chris@1 7654 class="cmtt-8">&#x00A0;</span><span
Chris@1 7655 class="cmtt-8">&#x00A0;</span><span
Chris@1 7656 class="cmtt-8">&#x00A0;12)</span><span
Chris@1 7657 class="cmtt-8">&#x00A0;[lowroom]</span><span
Chris@1 7658 class="cmtt-8">&#x00A0;</span><span
Chris@1 7659 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7660 class="cmtt-8">&#x00A0;[predicted]</span>
Chris@1 7661 <br class="fancyvrb" /><a
Chris@1 7662 id="x1-101040r20"></a><span
Chris@1 7663 class="cmr-6">20</span><span
Chris@1 7664 class="cmtt-8">&#x00A0;</span><span
Chris@1 7665 class="cmtt-8">&#x00A0;</span><span
Chris@1 7666 class="cmtt-8">&#x00A0;</span><span
Chris@1 7667 class="cmtt-8">&#x00A0;</span><span
Chris@1 7668 class="cmtt-8">&#x00A0;</span><span
Chris@1 7669 class="cmtt-8">&#x00A0;</span><span
Chris@1 7670 class="cmtt-8">&#x00A0;</span><span
Chris@1 7671 class="cmtt-8">&#x00A0;13)</span><span
Chris@1 7672 class="cmtt-8">&#x00A0;if</span><span
Chris@1 7673 class="cmtt-8">&#x00A0;(</span><span
Chris@1 7674 class="cmtt-8">&#x00A0;[highroom]</span><span
Chris@1 7675 class="cmtt-8">&#x00A0;is</span><span
Chris@1 7676 class="cmtt-8">&#x00A0;less</span><span
Chris@1 7677 class="cmtt-8">&#x00A0;than</span><span
Chris@1 7678 class="cmtt-8">&#x00A0;[lowroom]</span><span
Chris@1 7679 class="cmtt-8">&#x00A0;)</span><span
Chris@1 7680 class="cmtt-8">&#x00A0;</span><span
Chris@1 7681 class="cmsy-8">{</span>
Chris@1 7682 <br class="fancyvrb" /><a
Chris@1 7683 id="x1-101042r21"></a><span
Chris@1 7684 class="cmr-6">21</span><span
Chris@1 7685 class="cmtt-8">&#x00A0;</span><span
Chris@1 7686 class="cmtt-8">&#x00A0;</span>
Chris@1 7687 <br class="fancyvrb" /><a
Chris@1 7688 id="x1-101044r22"></a><span
Chris@1 7689 class="cmr-6">22</span><span
Chris@1 7690 class="cmtt-8">&#x00A0;</span><span
Chris@1 7691 class="cmtt-8">&#x00A0;</span><span
Chris@1 7692 class="cmtt-8">&#x00A0;</span><span
Chris@1 7693 class="cmtt-8">&#x00A0;</span><span
Chris@1 7694 class="cmtt-8">&#x00A0;</span><span
Chris@1 7695 class="cmtt-8">&#x00A0;</span><span
Chris@1 7696 class="cmtt-8">&#x00A0;</span><span
Chris@1 7697 class="cmtt-8">&#x00A0;</span><span
Chris@1 7698 class="cmtt-8">&#x00A0;</span><span
Chris@1 7699 class="cmtt-8">&#x00A0;</span><span
Chris@1 7700 class="cmtt-8">&#x00A0;</span><span
Chris@1 7701 class="cmtt-8">&#x00A0;</span><span
Chris@1 7702 class="cmtt-8">&#x00A0;</span><span
Chris@1 7703 class="cmtt-8">&#x00A0;14)</span><span
Chris@1 7704 class="cmtt-8">&#x00A0;[room]</span><span
Chris@1 7705 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7706 class="cmtt-8">&#x00A0;[highroom]</span><span
Chris@1 7707 class="cmtt-8">&#x00A0;*</span><span
Chris@1 7708 class="cmtt-8">&#x00A0;2</span>
Chris@1 7709 <br class="fancyvrb" /><a
Chris@1 7710 id="x1-101046r23"></a><span
Chris@1 7711 class="cmr-6">23</span><span
Chris@1 7712 class="cmtt-8">&#x00A0;</span><span
Chris@1 7713 class="cmtt-8">&#x00A0;</span>
Chris@1 7714 <br class="fancyvrb" /><a
Chris@1 7715 id="x1-101048r24"></a><span
Chris@1 7716 class="cmr-6">24</span><span
Chris@1 7717 class="cmtt-8">&#x00A0;</span><span
Chris@1 7718 class="cmtt-8">&#x00A0;</span><span
Chris@1 7719 class="cmtt-8">&#x00A0;</span><span
Chris@1 7720 class="cmtt-8">&#x00A0;</span><span
Chris@1 7721 class="cmtt-8">&#x00A0;</span><span
Chris@1 7722 class="cmtt-8">&#x00A0;</span><span
Chris@1 7723 class="cmtt-8">&#x00A0;</span><span
Chris@1 7724 class="cmtt-8">&#x00A0;</span><span
Chris@1 7725 class="cmtt-8">&#x00A0;</span><span
Chris@1 7726 class="cmtt-8">&#x00A0;</span><span
Chris@1 7727 class="cmtt-8">&#x00A0;</span><span
Chris@1 7728 class="cmtt-8">&#x00A0;</span><span
Chris@1 7729 class="cmsy-8">}</span><span
Chris@1 7730 class="cmtt-8">&#x00A0;else</span><span
Chris@1 7731 class="cmtt-8">&#x00A0;[highroom]</span><span
Chris@1 7732 class="cmtt-8">&#x00A0;is</span><span
Chris@1 7733 class="cmtt-8">&#x00A0;not</span><span
Chris@1 7734 class="cmtt-8">&#x00A0;less</span><span
Chris@1 7735 class="cmtt-8">&#x00A0;than</span><span
Chris@1 7736 class="cmtt-8">&#x00A0;[lowroom]</span><span
Chris@1 7737 class="cmtt-8">&#x00A0;</span><span
Chris@1 7738 class="cmsy-8">{</span>
Chris@1 7739 <br class="fancyvrb" /><a
Chris@1 7740 id="x1-101050r25"></a><span
Chris@1 7741 class="cmr-6">25</span><span
Chris@1 7742 class="cmtt-8">&#x00A0;</span><span
Chris@1 7743 class="cmtt-8">&#x00A0;</span>
Chris@1 7744 <br class="fancyvrb" /><a
Chris@1 7745 id="x1-101052r26"></a><span
Chris@1 7746 class="cmr-6">26</span><span
Chris@1 7747 class="cmtt-8">&#x00A0;</span><span
Chris@1 7748 class="cmtt-8">&#x00A0;</span><span
Chris@1 7749 class="cmtt-8">&#x00A0;</span><span
Chris@1 7750 class="cmtt-8">&#x00A0;</span><span
Chris@1 7751 class="cmtt-8">&#x00A0;</span><span
Chris@1 7752 class="cmtt-8">&#x00A0;</span><span
Chris@1 7753 class="cmtt-8">&#x00A0;</span><span
Chris@1 7754 class="cmtt-8">&#x00A0;</span><span
Chris@1 7755 class="cmtt-8">&#x00A0;</span><span
Chris@1 7756 class="cmtt-8">&#x00A0;</span><span
Chris@1 7757 class="cmtt-8">&#x00A0;</span><span
Chris@1 7758 class="cmtt-8">&#x00A0;</span><span
Chris@1 7759 class="cmtt-8">&#x00A0;</span><span
Chris@1 7760 class="cmtt-8">&#x00A0;15)</span><span
Chris@1 7761 class="cmtt-8">&#x00A0;[room]</span><span
Chris@1 7762 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7763 class="cmtt-8">&#x00A0;[lowroom]</span><span
Chris@1 7764 class="cmtt-8">&#x00A0;*</span><span
Chris@1 7765 class="cmtt-8">&#x00A0;2</span>
Chris@1 7766 <br class="fancyvrb" /><a
Chris@1 7767 id="x1-101054r27"></a><span
Chris@1 7768 class="cmr-6">27</span><span
Chris@1 7769 class="cmtt-8">&#x00A0;</span><span
Chris@1 7770 class="cmtt-8">&#x00A0;</span>
Chris@1 7771 <br class="fancyvrb" /><a
Chris@1 7772 id="x1-101056r28"></a><span
Chris@1 7773 class="cmr-6">28</span><span
Chris@1 7774 class="cmtt-8">&#x00A0;</span><span
Chris@1 7775 class="cmtt-8">&#x00A0;</span><span
Chris@1 7776 class="cmtt-8">&#x00A0;</span><span
Chris@1 7777 class="cmtt-8">&#x00A0;</span><span
Chris@1 7778 class="cmtt-8">&#x00A0;</span><span
Chris@1 7779 class="cmtt-8">&#x00A0;</span><span
Chris@1 7780 class="cmtt-8">&#x00A0;</span><span
Chris@1 7781 class="cmtt-8">&#x00A0;</span><span
Chris@1 7782 class="cmtt-8">&#x00A0;</span><span
Chris@1 7783 class="cmtt-8">&#x00A0;</span><span
Chris@1 7784 class="cmtt-8">&#x00A0;</span><span
Chris@1 7785 class="cmtt-8">&#x00A0;</span><span
Chris@1 7786 class="cmsy-8">}</span>
Chris@1 7787 <br class="fancyvrb" /><a
Chris@1 7788 id="x1-101058r29"></a><span
Chris@1 7789 class="cmr-6">29</span><span
Chris@1 7790 class="cmtt-8">&#x00A0;</span><span
Chris@1 7791 class="cmtt-8">&#x00A0;</span>
Chris@1 7792 <br class="fancyvrb" /><a
Chris@1 7793 id="x1-101060r30"></a><span
Chris@1 7794 class="cmr-6">30</span><span
Chris@1 7795 class="cmtt-8">&#x00A0;</span><span
Chris@1 7796 class="cmtt-8">&#x00A0;</span><span
Chris@1 7797 class="cmtt-8">&#x00A0;</span><span
Chris@1 7798 class="cmtt-8">&#x00A0;</span><span
Chris@1 7799 class="cmtt-8">&#x00A0;</span><span
Chris@1 7800 class="cmtt-8">&#x00A0;</span><span
Chris@1 7801 class="cmtt-8">&#x00A0;</span><span
Chris@1 7802 class="cmtt-8">&#x00A0;16)</span><span
Chris@1 7803 class="cmtt-8">&#x00A0;if</span><span
Chris@1 7804 class="cmtt-8">&#x00A0;(</span><span
Chris@1 7805 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 7806 class="cmtt-8">&#x00A0;is</span><span
Chris@1 7807 class="cmtt-8">&#x00A0;nonzero</span><span
Chris@1 7808 class="cmtt-8">&#x00A0;)</span><span
Chris@1 7809 class="cmtt-8">&#x00A0;</span><span
Chris@1 7810 class="cmsy-8">{</span>
Chris@1 7811 <br class="fancyvrb" /><a
Chris@1 7812 id="x1-101062r31"></a><span
Chris@1 7813 class="cmr-6">31</span><span
Chris@1 7814 class="cmtt-8">&#x00A0;</span><span
Chris@1 7815 class="cmtt-8">&#x00A0;</span>
Chris@1 7816 <br class="fancyvrb" /><a
Chris@1 7817 id="x1-101064r32"></a><span
Chris@1 7818 class="cmr-6">32</span><span
Chris@1 7819 class="cmtt-8">&#x00A0;</span><span
Chris@1 7820 class="cmtt-8">&#x00A0;</span><span
Chris@1 7821 class="cmtt-8">&#x00A0;</span><span
Chris@1 7822 class="cmtt-8">&#x00A0;</span><span
Chris@1 7823 class="cmtt-8">&#x00A0;</span><span
Chris@1 7824 class="cmtt-8">&#x00A0;</span><span
Chris@1 7825 class="cmtt-8">&#x00A0;</span><span
Chris@1 7826 class="cmtt-8">&#x00A0;</span><span
Chris@1 7827 class="cmtt-8">&#x00A0;</span><span
Chris@1 7828 class="cmtt-8">&#x00A0;</span><span
Chris@1 7829 class="cmtt-8">&#x00A0;</span><span
Chris@1 7830 class="cmtt-8">&#x00A0;</span><span
Chris@1 7831 class="cmtt-8">&#x00A0;</span><span
Chris@1 7832 class="cmtt-8">&#x00A0;17)</span><span
Chris@1 7833 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7834 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
Chris@1 7835 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7836 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
Chris@1 7837 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7838 class="cmtt-8">&#x00A0;set</span>
Chris@1 7839 <br class="fancyvrb" /><a
Chris@1 7840 id="x1-101066r33"></a><span
Chris@1 7841 class="cmr-6">33</span><span
Chris@1 7842 class="cmtt-8">&#x00A0;</span><span
Chris@1 7843 class="cmtt-8">&#x00A0;</span><span
Chris@1 7844 class="cmtt-8">&#x00A0;</span><span
Chris@1 7845 class="cmtt-8">&#x00A0;</span><span
Chris@1 7846 class="cmtt-8">&#x00A0;</span><span
Chris@1 7847 class="cmtt-8">&#x00A0;</span><span
Chris@1 7848 class="cmtt-8">&#x00A0;</span><span
Chris@1 7849 class="cmtt-8">&#x00A0;</span><span
Chris@1 7850 class="cmtt-8">&#x00A0;</span><span
Chris@1 7851 class="cmtt-8">&#x00A0;</span><span
Chris@1 7852 class="cmtt-8">&#x00A0;</span><span
Chris@1 7853 class="cmtt-8">&#x00A0;</span><span
Chris@1 7854 class="cmtt-8">&#x00A0;</span><span
Chris@1 7855 class="cmtt-8">&#x00A0;18)</span><span
Chris@1 7856 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7857 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
Chris@1 7858 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7859 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
Chris@1 7860 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7861 class="cmtt-8">&#x00A0;set</span>
Chris@1 7862 <br class="fancyvrb" /><a
Chris@1 7863 id="x1-101068r34"></a><span
Chris@1 7864 class="cmr-6">34</span><span
Chris@1 7865 class="cmtt-8">&#x00A0;</span><span
Chris@1 7866 class="cmtt-8">&#x00A0;</span><span
Chris@1 7867 class="cmtt-8">&#x00A0;</span><span
Chris@1 7868 class="cmtt-8">&#x00A0;</span><span
Chris@1 7869 class="cmtt-8">&#x00A0;</span><span
Chris@1 7870 class="cmtt-8">&#x00A0;</span><span
Chris@1 7871 class="cmtt-8">&#x00A0;</span><span
Chris@1 7872 class="cmtt-8">&#x00A0;</span><span
Chris@1 7873 class="cmtt-8">&#x00A0;</span><span
Chris@1 7874 class="cmtt-8">&#x00A0;</span><span
Chris@1 7875 class="cmtt-8">&#x00A0;</span><span
Chris@1 7876 class="cmtt-8">&#x00A0;</span><span
Chris@1 7877 class="cmtt-8">&#x00A0;</span><span
Chris@1 7878 class="cmtt-8">&#x00A0;19)</span><span
Chris@1 7879 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7880 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
Chris@1 7881 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7882 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 7883 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7884 class="cmtt-8">&#x00A0;set</span>
Chris@1 7885 <br class="fancyvrb" /><a
Chris@1 7886 id="x1-101070r35"></a><span
Chris@1 7887 class="cmr-6">35</span><span
Chris@1 7888 class="cmtt-8">&#x00A0;</span><span
Chris@1 7889 class="cmtt-8">&#x00A0;</span><span
Chris@1 7890 class="cmtt-8">&#x00A0;</span><span
Chris@1 7891 class="cmtt-8">&#x00A0;</span><span
Chris@1 7892 class="cmtt-8">&#x00A0;</span><span
Chris@1 7893 class="cmtt-8">&#x00A0;</span><span
Chris@1 7894 class="cmtt-8">&#x00A0;</span><span
Chris@1 7895 class="cmtt-8">&#x00A0;</span><span
Chris@1 7896 class="cmtt-8">&#x00A0;</span><span
Chris@1 7897 class="cmtt-8">&#x00A0;</span><span
Chris@1 7898 class="cmtt-8">&#x00A0;</span><span
Chris@1 7899 class="cmtt-8">&#x00A0;</span><span
Chris@1 7900 class="cmtt-8">&#x00A0;</span><span
Chris@1 7901 class="cmtt-8">&#x00A0;20)</span><span
Chris@1 7902 class="cmtt-8">&#x00A0;if</span><span
Chris@1 7903 class="cmtt-8">&#x00A0;(</span><span
Chris@1 7904 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 7905 class="cmtt-8">&#x00A0;is</span><span
Chris@1 7906 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 7907 class="cmtt-8">&#x00A0;than</span><span
Chris@1 7908 class="cmtt-8">&#x00A0;or</span><span
Chris@1 7909 class="cmtt-8">&#x00A0;equal</span><span
Chris@1 7910 class="cmtt-8">&#x00A0;to</span><span
Chris@1 7911 class="cmtt-8">&#x00A0;[room]</span><span
Chris@1 7912 class="cmtt-8">&#x00A0;)</span><span
Chris@1 7913 class="cmtt-8">&#x00A0;</span><span
Chris@1 7914 class="cmsy-8">{</span>
Chris@1 7915 <br class="fancyvrb" /><a
Chris@1 7916 id="x1-101072r36"></a><span
Chris@1 7917 class="cmr-6">36</span><span
Chris@1 7918 class="cmtt-8">&#x00A0;</span><span
Chris@1 7919 class="cmtt-8">&#x00A0;</span>
Chris@1 7920 <br class="fancyvrb" /><a
Chris@1 7921 id="x1-101074r37"></a><span
Chris@1 7922 class="cmr-6">37</span><span
Chris@1 7923 class="cmtt-8">&#x00A0;</span><span
Chris@1 7924 class="cmtt-8">&#x00A0;</span><span
Chris@1 7925 class="cmtt-8">&#x00A0;</span><span
Chris@1 7926 class="cmtt-8">&#x00A0;</span><span
Chris@1 7927 class="cmtt-8">&#x00A0;</span><span
Chris@1 7928 class="cmtt-8">&#x00A0;</span><span
Chris@1 7929 class="cmtt-8">&#x00A0;</span><span
Chris@1 7930 class="cmtt-8">&#x00A0;</span><span
Chris@1 7931 class="cmtt-8">&#x00A0;</span><span
Chris@1 7932 class="cmtt-8">&#x00A0;</span><span
Chris@1 7933 class="cmtt-8">&#x00A0;</span><span
Chris@1 7934 class="cmtt-8">&#x00A0;</span><span
Chris@1 7935 class="cmtt-8">&#x00A0;</span><span
Chris@1 7936 class="cmtt-8">&#x00A0;</span><span
Chris@1 7937 class="cmtt-8">&#x00A0;</span><span
Chris@1 7938 class="cmtt-8">&#x00A0;</span><span
Chris@1 7939 class="cmtt-8">&#x00A0;</span><span
Chris@1 7940 class="cmtt-8">&#x00A0;</span><span
Chris@1 7941 class="cmtt-8">&#x00A0;</span><span
Chris@1 7942 class="cmtt-8">&#x00A0;21)</span><span
Chris@1 7943 class="cmtt-8">&#x00A0;if</span><span
Chris@1 7944 class="cmtt-8">&#x00A0;(</span><span
Chris@1 7945 class="cmtt-8">&#x00A0;[highroom]</span><span
Chris@1 7946 class="cmtt-8">&#x00A0;is</span><span
Chris@1 7947 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 7948 class="cmtt-8">&#x00A0;than</span><span
Chris@1 7949 class="cmtt-8">&#x00A0;[lowroom]</span><span
Chris@1 7950 class="cmtt-8">&#x00A0;)</span><span
Chris@1 7951 class="cmtt-8">&#x00A0;</span><span
Chris@1 7952 class="cmsy-8">{</span>
Chris@1 7953 <br class="fancyvrb" /><a
Chris@1 7954 id="x1-101076r38"></a><span
Chris@1 7955 class="cmr-6">38</span><span
Chris@1 7956 class="cmtt-8">&#x00A0;</span><span
Chris@1 7957 class="cmtt-8">&#x00A0;</span>
Chris@1 7958 <br class="fancyvrb" /><a
Chris@1 7959 id="x1-101078r39"></a><span
Chris@1 7960 class="cmr-6">39</span><span
Chris@1 7961 class="cmtt-8">&#x00A0;</span><span
Chris@1 7962 class="cmtt-8">&#x00A0;</span><span
Chris@1 7963 class="cmtt-8">&#x00A0;</span><span
Chris@1 7964 class="cmtt-8">&#x00A0;</span><span
Chris@1 7965 class="cmtt-8">&#x00A0;</span><span
Chris@1 7966 class="cmtt-8">&#x00A0;</span><span
Chris@1 7967 class="cmtt-8">&#x00A0;</span><span
Chris@1 7968 class="cmtt-8">&#x00A0;</span><span
Chris@1 7969 class="cmtt-8">&#x00A0;</span><span
Chris@1 7970 class="cmtt-8">&#x00A0;</span><span
Chris@1 7971 class="cmtt-8">&#x00A0;</span><span
Chris@1 7972 class="cmtt-8">&#x00A0;</span><span
Chris@1 7973 class="cmtt-8">&#x00A0;</span><span
Chris@1 7974 class="cmtt-8">&#x00A0;</span><span
Chris@1 7975 class="cmtt-8">&#x00A0;</span><span
Chris@1 7976 class="cmtt-8">&#x00A0;</span><span
Chris@1 7977 class="cmtt-8">&#x00A0;</span><span
Chris@1 7978 class="cmtt-8">&#x00A0;</span><span
Chris@1 7979 class="cmtt-8">&#x00A0;</span><span
Chris@1 7980 class="cmtt-8">&#x00A0;</span><span
Chris@1 7981 class="cmtt-8">&#x00A0;</span><span
Chris@1 7982 class="cmtt-8">&#x00A0;</span><span
Chris@1 7983 class="cmtt-8">&#x00A0;</span><span
Chris@1 7984 class="cmtt-8">&#x00A0;</span><span
Chris@1 7985 class="cmtt-8">&#x00A0;</span><span
Chris@1 7986 class="cmtt-8">&#x00A0;22)</span><span
Chris@1 7987 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 7988 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 7989 class="cmtt-8">&#x00A0;element</span><span
Chris@1 7990 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 7991 class="cmtt-8">&#x00A0;=</span><span
Chris@1 7992 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 7993 class="cmtt-8">&#x00A0;-</span><span
Chris@1 7994 class="cmtt-8">&#x00A0;[lowroom]</span><span
Chris@1 7995 class="cmtt-8">&#x00A0;+</span><span
Chris@1 7996 class="cmtt-8">&#x00A0;[predicted]</span>
Chris@1 7997 <br class="fancyvrb" /><a
Chris@1 7998 id="x1-101080r40"></a><span
Chris@1 7999 class="cmr-6">40</span><span
Chris@1 8000 class="cmtt-8">&#x00A0;</span><span
Chris@1 8001 class="cmtt-8">&#x00A0;</span>
Chris@1 8002 <br class="fancyvrb" /><a
Chris@1 8003 id="x1-101082r41"></a><span
Chris@1 8004 class="cmr-6">41</span><span
Chris@1 8005 class="cmtt-8">&#x00A0;</span><span
Chris@1 8006 class="cmtt-8">&#x00A0; </span><span
Chris@1 8007 class="cmtt-8">&#x00A0;</span><span
Chris@1 8008 class="cmtt-8">&#x00A0;</span><span
Chris@1 8009 class="cmtt-8">&#x00A0;</span><span
Chris@1 8010 class="cmtt-8">&#x00A0;</span><span
Chris@1 8011 class="cmtt-8">&#x00A0;</span><span
Chris@1 8012 class="cmtt-8">&#x00A0;</span><span
Chris@1 8013 class="cmsy-8">}</span><span
Chris@1 8014 class="cmtt-8">&#x00A0;else</span><span
Chris@1 8015 class="cmtt-8">&#x00A0;[highroom]</span><span
Chris@1 8016 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8017 class="cmtt-8">&#x00A0;not</span><span
Chris@1 8018 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 8019 class="cmtt-8">&#x00A0;than</span><span
Chris@1 8020 class="cmtt-8">&#x00A0;[lowroom]</span><span
Chris@1 8021 class="cmtt-8">&#x00A0;</span><span
Chris@1 8022 class="cmsy-8">{</span>
Chris@1 8023 <br class="fancyvrb" /><a
Chris@1 8024 id="x1-101084r42"></a><span
Chris@1 8025 class="cmr-6">42</span><span
Chris@1 8026 class="cmtt-8">&#x00A0;</span><span
Chris@1 8027 class="cmtt-8">&#x00A0;</span>
Chris@1 8028 <br class="fancyvrb" /><a
Chris@1 8029 id="x1-101086r43"></a><span
Chris@1 8030 class="cmr-6">43</span><span
Chris@1 8031 class="cmtt-8">&#x00A0;</span><span
Chris@1 8032 class="cmtt-8">&#x00A0;</span><span
Chris@1 8033 class="cmtt-8">&#x00A0;</span><span
Chris@1 8034 class="cmtt-8">&#x00A0;</span><span
Chris@1 8035 class="cmtt-8">&#x00A0;</span><span
Chris@1 8036 class="cmtt-8">&#x00A0;</span><span
Chris@1 8037 class="cmtt-8">&#x00A0;</span><span
Chris@1 8038 class="cmtt-8">&#x00A0;</span><span
Chris@1 8039 class="cmtt-8">&#x00A0;</span><span
Chris@1 8040 class="cmtt-8">&#x00A0;</span><span
Chris@1 8041 class="cmtt-8">&#x00A0;</span><span
Chris@1 8042 class="cmtt-8">&#x00A0;</span><span
Chris@1 8043 class="cmtt-8">&#x00A0;</span><span
Chris@1 8044 class="cmtt-8">&#x00A0;</span><span
Chris@1 8045 class="cmtt-8">&#x00A0;</span><span
Chris@1 8046 class="cmtt-8">&#x00A0;</span><span
Chris@1 8047 class="cmtt-8">&#x00A0;</span><span
Chris@1 8048 class="cmtt-8">&#x00A0;</span><span
Chris@1 8049 class="cmtt-8">&#x00A0;</span><span
Chris@1 8050 class="cmtt-8">&#x00A0;</span><span
Chris@1 8051 class="cmtt-8">&#x00A0;</span><span
Chris@1 8052 class="cmtt-8">&#x00A0;</span><span
Chris@1 8053 class="cmtt-8">&#x00A0;</span><span
Chris@1 8054 class="cmtt-8">&#x00A0;</span><span
Chris@1 8055 class="cmtt-8">&#x00A0;</span><span
Chris@1 8056 class="cmtt-8">&#x00A0;23)</span><span
Chris@1 8057 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8058 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 8059 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8060 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8061 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8062 class="cmtt-8">&#x00A0;[predicted]</span><span
Chris@1 8063 class="cmtt-8">&#x00A0;-</span><span
Chris@1 8064 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 8065 class="cmtt-8">&#x00A0;+</span><span
Chris@1 8066 class="cmtt-8">&#x00A0;[highroom]</span><span
Chris@1 8067 class="cmtt-8">&#x00A0;-</span><span
Chris@1 8068 class="cmtt-8">&#x00A0;1</span>
Chris@1 8069 <br class="fancyvrb" /><a
Chris@1 8070 id="x1-101088r44"></a><span
Chris@1 8071 class="cmr-6">44</span><span
Chris@1 8072 class="cmtt-8">&#x00A0;</span><span
Chris@1 8073 class="cmtt-8">&#x00A0;</span>
Chris@1 8074 <br class="fancyvrb" /><a
Chris@1 8075 id="x1-101090r45"></a><span
Chris@1 8076 class="cmr-6">45</span><span
Chris@1 8077 class="cmtt-8">&#x00A0;</span><span
Chris@1 8078 class="cmtt-8">&#x00A0;</span><span
Chris@1 8079 class="cmtt-8">&#x00A0;</span><span
Chris@1 8080 class="cmtt-8">&#x00A0;</span><span
Chris@1 8081 class="cmtt-8">&#x00A0;</span><span
Chris@1 8082 class="cmtt-8">&#x00A0;</span><span
Chris@1 8083 class="cmtt-8">&#x00A0;</span><span
Chris@1 8084 class="cmtt-8">&#x00A0;</span><span
Chris@1 8085 class="cmtt-8">&#x00A0;</span><span
Chris@1 8086 class="cmtt-8">&#x00A0;</span><span
Chris@1 8087 class="cmtt-8">&#x00A0;</span><span
Chris@1 8088 class="cmtt-8">&#x00A0;</span><span
Chris@1 8089 class="cmtt-8">&#x00A0;</span><span
Chris@1 8090 class="cmtt-8">&#x00A0;</span><span
Chris@1 8091 class="cmtt-8">&#x00A0;</span><span
Chris@1 8092 class="cmtt-8">&#x00A0;</span><span
Chris@1 8093 class="cmtt-8">&#x00A0;</span><span
Chris@1 8094 class="cmtt-8">&#x00A0;</span><span
Chris@1 8095 class="cmtt-8">&#x00A0;</span><span
Chris@1 8096 class="cmtt-8">&#x00A0;</span><span
Chris@1 8097 class="cmtt-8">&#x00A0;</span><span
Chris@1 8098 class="cmtt-8">&#x00A0;</span><span
Chris@1 8099 class="cmtt-8">&#x00A0;</span><span
Chris@1 8100 class="cmtt-8">&#x00A0;</span><span
Chris@1 8101 class="cmsy-8">}</span>
Chris@1 8102 <br class="fancyvrb" /><a
Chris@1 8103 id="x1-101092r46"></a><span
Chris@1 8104 class="cmr-6">46</span><span
Chris@1 8105 class="cmtt-8">&#x00A0;</span><span
Chris@1 8106 class="cmtt-8">&#x00A0;</span>
Chris@1 8107 <br class="fancyvrb" /><a
Chris@1 8108 id="x1-101094r47"></a><span
Chris@1 8109 class="cmr-6">47</span><span
Chris@1 8110 class="cmtt-8">&#x00A0;</span><span
Chris@1 8111 class="cmtt-8">&#x00A0;</span><span
Chris@1 8112 class="cmtt-8">&#x00A0;</span><span
Chris@1 8113 class="cmtt-8">&#x00A0;</span><span
Chris@1 8114 class="cmtt-8">&#x00A0;</span><span
Chris@1 8115 class="cmtt-8">&#x00A0;</span><span
Chris@1 8116 class="cmtt-8">&#x00A0;</span><span
Chris@1 8117 class="cmtt-8">&#x00A0;</span><span
Chris@1 8118 class="cmtt-8">&#x00A0;</span><span
Chris@1 8119 class="cmtt-8">&#x00A0;</span><span
Chris@1 8120 class="cmtt-8">&#x00A0;</span><span
Chris@1 8121 class="cmtt-8">&#x00A0;</span><span
Chris@1 8122 class="cmtt-8">&#x00A0;</span><span
Chris@1 8123 class="cmtt-8">&#x00A0;</span><span
Chris@1 8124 class="cmtt-8">&#x00A0;</span><span
Chris@1 8125 class="cmtt-8">&#x00A0;</span><span
Chris@1 8126 class="cmtt-8">&#x00A0;</span><span
Chris@1 8127 class="cmtt-8">&#x00A0;</span><span
Chris@1 8128 class="cmsy-8">}</span><span
Chris@1 8129 class="cmtt-8">&#x00A0;else</span><span
Chris@1 8130 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 8131 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8132 class="cmtt-8">&#x00A0;less</span><span
Chris@1 8133 class="cmtt-8">&#x00A0;than</span><span
Chris@1 8134 class="cmtt-8">&#x00A0;[room]</span><span
Chris@1 8135 class="cmtt-8">&#x00A0;</span><span
Chris@1 8136 class="cmsy-8">{</span>
Chris@1 8137 <br class="fancyvrb" /><a
Chris@1 8138 id="x1-101096r48"></a><span
Chris@1 8139 class="cmr-6">48</span><span
Chris@1 8140 class="cmtt-8">&#x00A0;</span><span
Chris@1 8141 class="cmtt-8">&#x00A0;</span>
Chris@1 8142 <br class="fancyvrb" /><a
Chris@1 8143 id="x1-101098r49"></a><span
Chris@1 8144 class="cmr-6">49</span><span
Chris@1 8145 class="cmtt-8">&#x00A0;</span><span
Chris@1 8146 class="cmtt-8">&#x00A0;</span><span
Chris@1 8147 class="cmtt-8">&#x00A0;</span><span
Chris@1 8148 class="cmtt-8">&#x00A0;</span><span
Chris@1 8149 class="cmtt-8">&#x00A0;</span><span
Chris@1 8150 class="cmtt-8">&#x00A0;</span><span
Chris@1 8151 class="cmtt-8">&#x00A0;</span><span
Chris@1 8152 class="cmtt-8">&#x00A0;</span><span
Chris@1 8153 class="cmtt-8">&#x00A0;</span><span
Chris@1 8154 class="cmtt-8">&#x00A0;</span><span
Chris@1 8155 class="cmtt-8">&#x00A0;</span><span
Chris@1 8156 class="cmtt-8">&#x00A0;</span><span
Chris@1 8157 class="cmtt-8">&#x00A0;</span><span
Chris@1 8158 class="cmtt-8">&#x00A0;</span><span
Chris@1 8159 class="cmtt-8">&#x00A0;</span><span
Chris@1 8160 class="cmtt-8">&#x00A0;</span><span
Chris@1 8161 class="cmtt-8">&#x00A0;</span><span
Chris@1 8162 class="cmtt-8">&#x00A0;</span><span
Chris@1 8163 class="cmtt-8">&#x00A0;</span><span
Chris@1 8164 class="cmtt-8">&#x00A0;</span><span
Chris@1 8165 class="cmtt-8">&#x00A0;</span><span
Chris@1 8166 class="cmtt-8">&#x00A0;24)</span><span
Chris@1 8167 class="cmtt-8">&#x00A0;if</span><span
Chris@1 8168 class="cmtt-8">&#x00A0;([val]</span><span
Chris@1 8169 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8170 class="cmtt-8">&#x00A0;odd)</span><span
Chris@1 8171 class="cmtt-8">&#x00A0;</span><span
Chris@1 8172 class="cmsy-8">{</span>
Chris@1 8173 <br class="fancyvrb" /><a
Chris@1 8174 id="x1-101100r50"></a><span
Chris@1 8175 class="cmr-6">50</span><span
Chris@1 8176 class="cmtt-8">&#x00A0;</span><span
Chris@1 8177 class="cmtt-8">&#x00A0;</span>
Chris@1 8178 <br class="fancyvrb" /><a
Chris@1 8179 id="x1-101102r51"></a><span
Chris@1 8180 class="cmr-6">51</span><span
Chris@1 8181 class="cmtt-8">&#x00A0;</span><span
Chris@1 8182 class="cmtt-8">&#x00A0;</span><span
Chris@1 8183 class="cmtt-8">&#x00A0;</span><span
Chris@1 8184 class="cmtt-8">&#x00A0;</span><span
Chris@1 8185 class="cmtt-8">&#x00A0;</span><span
Chris@1 8186 class="cmtt-8">&#x00A0;</span><span
Chris@1 8187 class="cmtt-8">&#x00A0;</span><span
Chris@1 8188 class="cmtt-8">&#x00A0;</span><span
Chris@1 8189 class="cmtt-8">&#x00A0;</span><span
Chris@1 8190 class="cmtt-8">&#x00A0;</span><span
Chris@1 8191 class="cmtt-8">&#x00A0;</span><span
Chris@1 8192 class="cmtt-8">&#x00A0;</span><span
Chris@1 8193 class="cmtt-8">&#x00A0;</span><span
Chris@1 8194 class="cmtt-8">&#x00A0;</span><span
Chris@1 8195 class="cmtt-8">&#x00A0;</span><span
Chris@1 8196 class="cmtt-8">&#x00A0;</span><span
Chris@1 8197 class="cmtt-8">&#x00A0;</span><span
Chris@1 8198 class="cmtt-8">&#x00A0;</span><span
Chris@1 8199 class="cmtt-8">&#x00A0;</span><span
Chris@1 8200 class="cmtt-8">&#x00A0;</span><span
Chris@1 8201 class="cmtt-8">&#x00A0;</span><span
Chris@1 8202 class="cmtt-8">&#x00A0;</span><span
Chris@1 8203 class="cmtt-8">&#x00A0;</span><span
Chris@1 8204 class="cmtt-8">&#x00A0;</span><span
Chris@1 8205 class="cmtt-8">&#x00A0;</span><span
Chris@1 8206 class="cmtt-8">&#x00A0;25)</span><span
Chris@1 8207 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8208 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 8209 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8210 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8211 class="cmtt-8">&#x00A0;=</span>
Chris@1 8212 <br class="fancyvrb" /><a
Chris@1 8213 id="x1-101104r52"></a><span
Chris@1 8214 class="cmr-6">52</span><span
Chris@1 8215 class="cmtt-8">&#x00A0;</span><span
Chris@1 8216 class="cmtt-8">&#x00A0;</span><span
Chris@1 8217 class="cmtt-8">&#x00A0;</span><span
Chris@1 8218 class="cmtt-8">&#x00A0;</span><span
Chris@1 8219 class="cmtt-8">&#x00A0;</span><span
Chris@1 8220 class="cmtt-8">&#x00A0;</span><span
Chris@1 8221 class="cmtt-8">&#x00A0;</span><span
Chris@1 8222 class="cmtt-8">&#x00A0;</span><span
Chris@1 8223 class="cmtt-8">&#x00A0;</span><span
Chris@1 8224 class="cmtt-8">&#x00A0;</span><span
Chris@1 8225 class="cmtt-8">&#x00A0;</span><span
Chris@1 8226 class="cmtt-8">&#x00A0;</span><span
Chris@1 8227 class="cmtt-8">&#x00A0;</span><span
Chris@1 8228 class="cmtt-8">&#x00A0;</span><span
Chris@1 8229 class="cmtt-8">&#x00A0;</span><span
Chris@1 8230 class="cmtt-8">&#x00A0;</span><span
Chris@1 8231 class="cmtt-8">&#x00A0;</span><span
Chris@1 8232 class="cmtt-8">&#x00A0;</span><span
Chris@1 8233 class="cmtt-8">&#x00A0;</span><span
Chris@1 8234 class="cmtt-8">&#x00A0;</span><span
Chris@1 8235 class="cmtt-8">&#x00A0;</span><span
Chris@1 8236 class="cmtt-8">&#x00A0;</span><span
Chris@1 8237 class="cmtt-8">&#x00A0;</span><span
Chris@1 8238 class="cmtt-8">&#x00A0;</span><span
Chris@1 8239 class="cmtt-8">&#x00A0;</span><span
Chris@1 8240 class="cmtt-8">&#x00A0;</span><span
Chris@1 8241 class="cmtt-8">&#x00A0;</span><span
Chris@1 8242 class="cmtt-8">&#x00A0;</span><span
Chris@1 8243 class="cmtt-8">&#x00A0;</span><span
Chris@1 8244 class="cmtt-8">&#x00A0;[predicted]</span><span
Chris@1 8245 class="cmtt-8">&#x00A0;-</span><span
Chris@1 8246 class="cmtt-8">&#x00A0;(([val]</span><span
Chris@1 8247 class="cmtt-8">&#x00A0;+</span><span
Chris@1 8248 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 8249 class="cmtt-8">&#x00A0;divided</span><span
Chris@1 8250 class="cmtt-8">&#x00A0;by</span><span
Chris@1 8251 class="cmtt-8">&#x00A0;</span><span
Chris@1 8252 class="cmtt-8">&#x00A0;2</span><span
Chris@1 8253 class="cmtt-8">&#x00A0;using</span><span
Chris@1 8254 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 8255 class="cmtt-8">&#x00A0;division)</span>
Chris@1 8256 <br class="fancyvrb" /><a
Chris@1 8257 id="x1-101106r53"></a><span
Chris@1 8258 class="cmr-6">53</span><span
Chris@1 8259 class="cmtt-8">&#x00A0;</span><span
Chris@1 8260 class="cmtt-8">&#x00A0;</span>
Chris@1 8261 <br class="fancyvrb" /><a
Chris@1 8262 id="x1-101108r54"></a><span
Chris@1 8263 class="cmr-6">54</span><span
Chris@1 8264 class="cmtt-8">&#x00A0;</span><span
Chris@1 8265 class="cmtt-8">&#x00A0;</span><span
Chris@1 8266 class="cmtt-8">&#x00A0;</span><span
Chris@1 8267 class="cmtt-8">&#x00A0;</span><span
Chris@1 8268 class="cmtt-8">&#x00A0;</span><span
Chris@1 8269 class="cmtt-8">&#x00A0;</span><span
Chris@1 8270 class="cmtt-8">&#x00A0;</span><span
Chris@1 8271 class="cmtt-8">&#x00A0;</span><span
Chris@1 8272 class="cmtt-8">&#x00A0;</span><span
Chris@1 8273 class="cmtt-8">&#x00A0;</span><span
Chris@1 8274 class="cmtt-8">&#x00A0;</span><span
Chris@1 8275 class="cmtt-8">&#x00A0;</span><span
Chris@1 8276 class="cmtt-8">&#x00A0;</span><span
Chris@1 8277 class="cmtt-8">&#x00A0;</span><span
Chris@1 8278 class="cmtt-8">&#x00A0;</span><span
Chris@1 8279 class="cmtt-8">&#x00A0;</span><span
Chris@1 8280 class="cmtt-8">&#x00A0;</span><span
Chris@1 8281 class="cmtt-8">&#x00A0;</span><span
Chris@1 8282 class="cmtt-8">&#x00A0;</span><span
Chris@1 8283 class="cmtt-8">&#x00A0;</span><span
Chris@1 8284 class="cmtt-8">&#x00A0;</span><span
Chris@1 8285 class="cmtt-8">&#x00A0;</span><span
Chris@1 8286 class="cmtt-8">&#x00A0;</span><span
Chris@1 8287 class="cmtt-8">&#x00A0;</span><span
Chris@1 8288 class="cmsy-8">}</span><span
Chris@1 8289 class="cmtt-8">&#x00A0;else</span><span
Chris@1 8290 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 8291 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8292 class="cmtt-8">&#x00A0;even</span><span
Chris@1 8293 class="cmtt-8">&#x00A0;</span><span
Chris@1 8294 class="cmsy-8">{</span>
Chris@1 8295 <br class="fancyvrb" /><a
Chris@1 8296 id="x1-101110r55"></a><span
Chris@1 8297 class="cmr-6">55</span><span
Chris@1 8298 class="cmtt-8">&#x00A0;</span><span
Chris@1 8299 class="cmtt-8">&#x00A0;</span>
Chris@1 8300 <br class="fancyvrb" /><a
Chris@1 8301 id="x1-101112r56"></a><span
Chris@1 8302 class="cmr-6">56</span><span
Chris@1 8303 class="cmtt-8">&#x00A0;</span><span
Chris@1 8304 class="cmtt-8">&#x00A0;</span><span
Chris@1 8305 class="cmtt-8">&#x00A0;</span><span
Chris@1 8306 class="cmtt-8">&#x00A0;</span><span
Chris@1 8307 class="cmtt-8">&#x00A0;</span><span
Chris@1 8308 class="cmtt-8">&#x00A0;</span><span
Chris@1 8309 class="cmtt-8">&#x00A0;</span><span
Chris@1 8310 class="cmtt-8">&#x00A0;</span><span
Chris@1 8311 class="cmtt-8">&#x00A0;</span><span
Chris@1 8312 class="cmtt-8">&#x00A0;</span><span
Chris@1 8313 class="cmtt-8">&#x00A0;</span><span
Chris@1 8314 class="cmtt-8">&#x00A0;</span><span
Chris@1 8315 class="cmtt-8">&#x00A0;</span><span
Chris@1 8316 class="cmtt-8">&#x00A0;</span><span
Chris@1 8317 class="cmtt-8">&#x00A0;</span><span
Chris@1 8318 class="cmtt-8">&#x00A0;</span><span
Chris@1 8319 class="cmtt-8">&#x00A0;</span><span
Chris@1 8320 class="cmtt-8">&#x00A0;</span><span
Chris@1 8321 class="cmtt-8">&#x00A0;</span><span
Chris@1 8322 class="cmtt-8">&#x00A0;</span><span
Chris@1 8323 class="cmtt-8">&#x00A0;</span><span
Chris@1 8324 class="cmtt-8">&#x00A0;</span><span
Chris@1 8325 class="cmtt-8">&#x00A0;</span><span
Chris@1 8326 class="cmtt-8">&#x00A0;</span><span
Chris@1 8327 class="cmtt-8">&#x00A0;</span><span
Chris@1 8328 class="cmtt-8">&#x00A0;26)</span><span
Chris@1 8329 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8330 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 8331 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8332 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8333 class="cmtt-8">&#x00A0;=</span>
Chris@1 8334 <br class="fancyvrb" /><a
Chris@1 8335 id="x1-101114r57"></a><span
Chris@1 8336 class="cmr-6">57</span><span
Chris@1 8337 class="cmtt-8">&#x00A0;</span><span
Chris@1 8338 class="cmtt-8">&#x00A0;</span><span
Chris@1 8339 class="cmtt-8">&#x00A0;</span><span
Chris@1 8340 class="cmtt-8">&#x00A0;</span><span
Chris@1 8341 class="cmtt-8">&#x00A0;</span><span
Chris@1 8342 class="cmtt-8">&#x00A0;</span><span
Chris@1 8343 class="cmtt-8">&#x00A0;</span><span
Chris@1 8344 class="cmtt-8">&#x00A0;</span><span
Chris@1 8345 class="cmtt-8">&#x00A0;</span><span
Chris@1 8346 class="cmtt-8">&#x00A0;</span><span
Chris@1 8347 class="cmtt-8">&#x00A0;</span><span
Chris@1 8348 class="cmtt-8">&#x00A0;</span><span
Chris@1 8349 class="cmtt-8">&#x00A0;</span><span
Chris@1 8350 class="cmtt-8">&#x00A0;</span><span
Chris@1 8351 class="cmtt-8">&#x00A0;</span><span
Chris@1 8352 class="cmtt-8">&#x00A0;</span><span
Chris@1 8353 class="cmtt-8">&#x00A0;</span><span
Chris@1 8354 class="cmtt-8">&#x00A0;</span><span
Chris@1 8355 class="cmtt-8">&#x00A0;</span><span
Chris@1 8356 class="cmtt-8">&#x00A0;</span><span
Chris@1 8357 class="cmtt-8">&#x00A0;</span><span
Chris@1 8358 class="cmtt-8">&#x00A0;</span><span
Chris@1 8359 class="cmtt-8">&#x00A0;</span><span
Chris@1 8360 class="cmtt-8">&#x00A0;</span><span
Chris@1 8361 class="cmtt-8">&#x00A0;</span><span
Chris@1 8362 class="cmtt-8">&#x00A0;</span><span
Chris@1 8363 class="cmtt-8">&#x00A0;</span><span
Chris@1 8364 class="cmtt-8">&#x00A0;</span><span
Chris@1 8365 class="cmtt-8">&#x00A0;</span><span
Chris@1 8366 class="cmtt-8">&#x00A0;[predicted]</span><span
Chris@1 8367 class="cmtt-8">&#x00A0;+</span><span
Chris@1 8368 class="cmtt-8">&#x00A0;([val]</span><span
Chris@1 8369 class="cmtt-8">&#x00A0;/</span><span
Chris@1 8370 class="cmtt-8">&#x00A0;2</span><span
Chris@1 8371 class="cmtt-8">&#x00A0;using</span><span
Chris@1 8372 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 8373 class="cmtt-8">&#x00A0;division)</span>
Chris@1 8374 <br class="fancyvrb" /><a
Chris@1 8375 id="x1-101116r58"></a><span
Chris@1 8376 class="cmr-6">58</span><span
Chris@1 8377 class="cmtt-8">&#x00A0;</span><span
Chris@1 8378 class="cmtt-8">&#x00A0;</span>
Chris@1 8379 <br class="fancyvrb" /><a
Chris@1 8380 id="x1-101118r59"></a><span
Chris@1 8381 class="cmr-6">59</span><span
Chris@1 8382 class="cmtt-8">&#x00A0;</span><span
Chris@1 8383 class="cmtt-8">&#x00A0;</span><span
Chris@1 8384 class="cmtt-8">&#x00A0;</span><span
Chris@1 8385 class="cmtt-8">&#x00A0;</span><span
Chris@1 8386 class="cmtt-8">&#x00A0;</span><span
Chris@1 8387 class="cmtt-8">&#x00A0;</span><span
Chris@1 8388 class="cmtt-8">&#x00A0;</span><span
Chris@1 8389 class="cmtt-8">&#x00A0;</span><span
Chris@1 8390 class="cmtt-8">&#x00A0;</span><span
Chris@1 8391 class="cmtt-8">&#x00A0;</span><span
Chris@1 8392 class="cmtt-8">&#x00A0;</span><span
Chris@1 8393 class="cmtt-8">&#x00A0;</span><span
Chris@1 8394 class="cmtt-8">&#x00A0;</span><span
Chris@1 8395 class="cmtt-8">&#x00A0;</span><span
Chris@1 8396 class="cmtt-8">&#x00A0;</span><span
Chris@1 8397 class="cmtt-8">&#x00A0;</span><span
Chris@1 8398 class="cmtt-8">&#x00A0;</span><span
Chris@1 8399 class="cmtt-8">&#x00A0;</span><span
Chris@1 8400 class="cmtt-8">&#x00A0;</span><span
Chris@1 8401 class="cmtt-8">&#x00A0;</span><span
Chris@1 8402 class="cmtt-8">&#x00A0;</span><span
Chris@1 8403 class="cmtt-8">&#x00A0;</span><span
Chris@1 8404 class="cmtt-8">&#x00A0;</span><span
Chris@1 8405 class="cmtt-8">&#x00A0;</span><span
Chris@1 8406 class="cmsy-8">}</span>
Chris@1 8407 <br class="fancyvrb" /><a
Chris@1 8408 id="x1-101120r60"></a><span
Chris@1 8409 class="cmr-6">60</span><span
Chris@1 8410 class="cmtt-8">&#x00A0;</span><span
Chris@1 8411 class="cmtt-8">&#x00A0;</span>
Chris@1 8412 <br class="fancyvrb" /><a
Chris@1 8413 id="x1-101122r61"></a><span
Chris@1 8414 class="cmr-6">61</span><span
Chris@1 8415 class="cmtt-8">&#x00A0;</span><span
Chris@1 8416 class="cmtt-8">&#x00A0;</span><span
Chris@1 8417 class="cmtt-8">&#x00A0;</span><span
Chris@1 8418 class="cmtt-8">&#x00A0;</span><span
Chris@1 8419 class="cmtt-8">&#x00A0;</span><span
Chris@1 8420 class="cmtt-8">&#x00A0;</span><span
Chris@1 8421 class="cmtt-8">&#x00A0;</span><span
Chris@1 8422 class="cmtt-8">&#x00A0;</span><span
Chris@1 8423 class="cmtt-8">&#x00A0;</span><span
Chris@1 8424 class="cmtt-8">&#x00A0;</span><span
Chris@1 8425 class="cmtt-8">&#x00A0;</span><span
Chris@1 8426 class="cmtt-8">&#x00A0;</span><span
Chris@1 8427 class="cmtt-8">&#x00A0;</span><span
Chris@1 8428 class="cmtt-8">&#x00A0;</span><span
Chris@1 8429 class="cmtt-8">&#x00A0;</span><span
Chris@1 8430 class="cmtt-8">&#x00A0;</span><span
Chris@1 8431 class="cmtt-8">&#x00A0;</span><span
Chris@1 8432 class="cmtt-8">&#x00A0;</span><span
Chris@1 8433 class="cmsy-8">}</span>
Chris@1 8434 <br class="fancyvrb" /><a
Chris@1 8435 id="x1-101124r62"></a><span
Chris@1 8436 class="cmr-6">62</span><span
Chris@1 8437 class="cmtt-8">&#x00A0;</span><span
Chris@1 8438 class="cmtt-8">&#x00A0;</span>
Chris@1 8439 <br class="fancyvrb" /><a
Chris@1 8440 id="x1-101126r63"></a><span
Chris@1 8441 class="cmr-6">63</span><span
Chris@1 8442 class="cmtt-8">&#x00A0;</span><span
Chris@1 8443 class="cmtt-8">&#x00A0;</span><span
Chris@1 8444 class="cmtt-8">&#x00A0;</span><span
Chris@1 8445 class="cmtt-8">&#x00A0;</span><span
Chris@1 8446 class="cmtt-8">&#x00A0;</span><span
Chris@1 8447 class="cmtt-8">&#x00A0;</span><span
Chris@1 8448 class="cmtt-8">&#x00A0;</span><span
Chris@1 8449 class="cmtt-8">&#x00A0;</span><span
Chris@1 8450 class="cmtt-8">&#x00A0;</span><span
Chris@1 8451 class="cmtt-8">&#x00A0;</span><span
Chris@1 8452 class="cmtt-8">&#x00A0;</span><span
Chris@1 8453 class="cmtt-8">&#x00A0;</span><span
Chris@1 8454 class="cmsy-8">}</span><span
Chris@1 8455 class="cmtt-8">&#x00A0;else</span><span
Chris@1 8456 class="cmtt-8">&#x00A0;[val]</span><span
Chris@1 8457 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8458 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 8459 class="cmtt-8">&#x00A0;</span><span
Chris@1 8460 class="cmsy-8">{</span>
Chris@1 8461 <br class="fancyvrb" /><a
Chris@1 8462 id="x1-101128r64"></a><span
Chris@1 8463 class="cmr-6">64</span><span
Chris@1 8464 class="cmtt-8">&#x00A0;</span><span
Chris@1 8465 class="cmtt-8">&#x00A0;</span>
Chris@1 8466 <br class="fancyvrb" /><a
Chris@1 8467 id="x1-101130r65"></a><span
Chris@1 8468 class="cmr-6">65</span><span
Chris@1 8469 class="cmtt-8">&#x00A0;</span><span
Chris@1 8470 class="cmtt-8">&#x00A0;</span><span
Chris@1 8471 class="cmtt-8">&#x00A0;</span><span
Chris@1 8472 class="cmtt-8">&#x00A0;</span><span
Chris@1 8473 class="cmtt-8">&#x00A0;</span><span
Chris@1 8474 class="cmtt-8">&#x00A0;</span><span
Chris@1 8475 class="cmtt-8">&#x00A0;</span><span
Chris@1 8476 class="cmtt-8">&#x00A0;</span><span
Chris@1 8477 class="cmtt-8">&#x00A0;</span><span
Chris@1 8478 class="cmtt-8">&#x00A0;</span><span
Chris@1 8479 class="cmtt-8">&#x00A0;</span><span
Chris@1 8480 class="cmtt-8">&#x00A0;</span><span
Chris@1 8481 class="cmtt-8">&#x00A0;</span><span
Chris@1 8482 class="cmtt-8">&#x00A0;27)</span><span
Chris@1 8483 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8484 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
Chris@1 8485 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8486 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8487 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8488 class="cmtt-8">&#x00A0;unset</span>
Chris@1 8489
Chris@1 8490
Chris@1 8491
Chris@1 8492 <br class="fancyvrb" /><a
Chris@1 8493 id="x1-101132r66"></a><span
Chris@1 8494 class="cmr-6">66</span><span
Chris@1 8495 class="cmtt-8">&#x00A0;</span><span
Chris@1 8496 class="cmtt-8">&#x00A0;</span><span
Chris@1 8497 class="cmtt-8">&#x00A0;</span><span
Chris@1 8498 class="cmtt-8">&#x00A0;</span><span
Chris@1 8499 class="cmtt-8">&#x00A0;</span><span
Chris@1 8500 class="cmtt-8">&#x00A0;</span><span
Chris@1 8501 class="cmtt-8">&#x00A0;</span><span
Chris@1 8502 class="cmtt-8">&#x00A0;</span><span
Chris@1 8503 class="cmtt-8">&#x00A0;</span><span
Chris@1 8504 class="cmtt-8">&#x00A0;</span><span
Chris@1 8505 class="cmtt-8">&#x00A0;</span><span
Chris@1 8506 class="cmtt-8">&#x00A0;</span><span
Chris@1 8507 class="cmtt-8">&#x00A0;</span><span
Chris@1 8508 class="cmtt-8">&#x00A0;28)</span><span
Chris@1 8509 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8510 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
Chris@1 8511 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8512 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8513 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8514 class="cmtt-8">&#x00A0;[predicted]</span>
Chris@1 8515 <br class="fancyvrb" /><a
Chris@1 8516 id="x1-101134r67"></a><span
Chris@1 8517 class="cmr-6">67</span><span
Chris@1 8518 class="cmtt-8">&#x00A0;</span><span
Chris@1 8519 class="cmtt-8">&#x00A0;</span>
Chris@1 8520 <br class="fancyvrb" /><a
Chris@1 8521 id="x1-101136r68"></a><span
Chris@1 8522 class="cmr-6">68</span><span
Chris@1 8523 class="cmtt-8">&#x00A0;</span><span
Chris@1 8524 class="cmtt-8">&#x00A0;</span><span
Chris@1 8525 class="cmtt-8">&#x00A0;</span><span
Chris@1 8526 class="cmtt-8">&#x00A0;</span><span
Chris@1 8527 class="cmtt-8">&#x00A0;</span><span
Chris@1 8528 class="cmtt-8">&#x00A0;</span><span
Chris@1 8529 class="cmtt-8">&#x00A0;</span><span
Chris@1 8530 class="cmtt-8">&#x00A0;</span><span
Chris@1 8531 class="cmtt-8">&#x00A0;</span><span
Chris@1 8532 class="cmtt-8">&#x00A0;</span><span
Chris@1 8533 class="cmtt-8">&#x00A0;</span><span
Chris@1 8534 class="cmtt-8">&#x00A0;</span><span
Chris@1 8535 class="cmsy-8">}</span>
Chris@1 8536 <br class="fancyvrb" /><a
Chris@1 8537 id="x1-101138r69"></a><span
Chris@1 8538 class="cmr-6">69</span><span
Chris@1 8539 class="cmtt-8">&#x00A0;</span><span
Chris@1 8540 class="cmtt-8">&#x00A0;</span>
Chris@1 8541 <br class="fancyvrb" /><a
Chris@1 8542 id="x1-101140r70"></a><span
Chris@1 8543 class="cmr-6">70</span><span
Chris@1 8544 class="cmtt-8">&#x00A0;</span><span
Chris@1 8545 class="cmtt-8">&#x00A0;</span><span
Chris@1 8546 class="cmtt-8">&#x00A0;</span><span
Chris@1 8547 class="cmtt-8">&#x00A0;</span><span
Chris@1 8548 class="cmtt-8">&#x00A0;</span><span
Chris@1 8549 class="cmtt-8">&#x00A0;</span><span
Chris@1 8550 class="cmtt-8">&#x00A0;</span><span
Chris@1 8551 class="cmsy-8">}</span>
Chris@1 8552 <br class="fancyvrb" /><a
Chris@1 8553 id="x1-101142r71"></a><span
Chris@1 8554 class="cmr-6">71</span><span
Chris@1 8555 class="cmtt-8">&#x00A0;</span><span
Chris@1 8556 class="cmtt-8">&#x00A0;</span>
Chris@1 8557 <br class="fancyvrb" /><a
Chris@1 8558 id="x1-101144r72"></a><span
Chris@1 8559 class="cmr-6">72</span><span
Chris@1 8560 class="cmtt-8">&#x00A0;</span><span
Chris@1 8561 class="cmtt-8">&#x00A0;</span><span
Chris@1 8562 class="cmtt-8">&#x00A0;29)</span><span
Chris@1 8563 class="cmtt-8">&#x00A0;done</span>
Chris@1 8564 <br class="fancyvrb" /><a
Chris@1 8565 id="x1-101146r73"></a><span
Chris@1 8566 class="cmr-6">73</span><span
Chris@1 8567 class="cmtt-8">&#x00A0;</span><span
Chris@1 8568 class="cmtt-8">&#x00A0;</span>
Chris@1 8569 </div>
Chris@1 8570 </dd><dt class="description">
Chris@1 8571 <span
Chris@1 8572 class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd
Chris@1 8573 class="description">
Chris@1 8574 <!--l. 351--><p class="noindent" >Curve synthesis generates a return vector <span
Chris@1 8575 class="cmtt-12">[floor] </span>of length <span
Chris@1 8576 class="cmtt-12">[n] </span>(where <span
Chris@1 8577 class="cmtt-12">[n] </span>is provided by
Chris@1 8578 the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
Chris@1 8579 <span
Chris@1 8580 class="cmtt-12">[floor1_X_list]</span>, <span
Chris@1 8581 class="cmtt-12">[floor1_final_Y] </span>and <span
Chris@1 8582 class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
Chris@1 8583 [floor1_multiplier] and [floor1_values] values.
Chris@1 8584 <!--l. 358--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
Chris@1 8585 class="cmtt-12">[floor1_X_list]</span>, <span
Chris@1 8586 class="cmtt-12">[floor1_final_Y] </span>and
Chris@1 8587 <span
Chris@1 8588 class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span
Chris@1 8589 class="cmtt-12">[floor1_X_list]&#8217;</span>, <span
Chris@1 8590 class="cmtt-12">[floor1_final_Y]&#8217;</span>
Chris@1 8591 and <span
Chris@1 8592 class="cmtt-12">[floor1_step2_flag]&#8217; </span>according to ascending sort order of the values in
Chris@1 8593 <span
Chris@1 8594 class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span
Chris@1 8595 class="cmtt-12">[floor1_X_list] </span>and then apply the same
Chris@1 8596 permutation to elements of the other two vectors so that the X, Y and step2_flag values
Chris@1 8597 still match.
Chris@1 8598 <!--l. 368--><p class="noindent" >Then compute the final curve in one pass:
Chris@1 8599 <!--l. 370--><p class="noindent" >
Chris@1 8600 <div class="fancyvrb" id="fancyvrb32">
Chris@1 8601 <a
Chris@1 8602 id="x1-101148r1"></a><span
Chris@1 8603 class="cmr-6">1</span><span
Chris@1 8604 class="cmtt-8">&#x00A0;</span><span
Chris@1 8605 class="cmtt-8">&#x00A0;</span><span
Chris@1 8606 class="cmtt-8">&#x00A0;</span><span
Chris@1 8607 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 8608 class="cmtt-8">&#x00A0;[hx]</span><span
Chris@1 8609 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8610 class="cmtt-8">&#x00A0;0</span>
Chris@1 8611 <br class="fancyvrb" /><a
Chris@1 8612 id="x1-101150r2"></a><span
Chris@1 8613 class="cmr-6">2</span><span
Chris@1 8614 class="cmtt-8">&#x00A0;</span><span
Chris@1 8615 class="cmtt-8">&#x00A0;</span><span
Chris@1 8616 class="cmtt-8">&#x00A0;</span><span
Chris@1 8617 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 8618 class="cmtt-8">&#x00A0;[lx]</span><span
Chris@1 8619 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8620 class="cmtt-8">&#x00A0;0</span>
Chris@1 8621 <br class="fancyvrb" /><a
Chris@1 8622 id="x1-101152r3"></a><span
Chris@1 8623 class="cmr-6">3</span><span
Chris@1 8624 class="cmtt-8">&#x00A0;</span><span
Chris@1 8625 class="cmtt-8">&#x00A0;</span><span
Chris@1 8626 class="cmtt-8">&#x00A0;</span><span
Chris@1 8627 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 8628 class="cmtt-8">&#x00A0;[ly]</span><span
Chris@1 8629 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8630 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8631 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
Chris@1 8632 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8633 class="cmtt-8">&#x00A0;[0]</span><span
Chris@1 8634 class="cmtt-8">&#x00A0;*</span><span
Chris@1 8635 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
Chris@1 8636 <br class="fancyvrb" /><a
Chris@1 8637 id="x1-101154r4"></a><span
Chris@1 8638 class="cmr-6">4</span><span
Chris@1 8639 class="cmtt-8">&#x00A0;</span><span
Chris@1 8640 class="cmtt-8">&#x00A0;</span><span
Chris@1 8641 class="cmtt-8">&#x00A0;</span><span
Chris@1 8642 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 8643 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 8644 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8645 class="cmtt-8">&#x00A0;over</span><span
Chris@1 8646 class="cmtt-8">&#x00A0;the</span><span
Chris@1 8647 class="cmtt-8">&#x00A0;range</span><span
Chris@1 8648 class="cmtt-8">&#x00A0;1</span><span
Chris@1 8649 class="cmtt-8">&#x00A0;...</span><span
Chris@1 8650 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
Chris@1 8651 class="cmtt-8">&#x00A0;</span><span
Chris@1 8652 class="cmsy-8">{</span>
Chris@1 8653 <br class="fancyvrb" /><a
Chris@1 8654 id="x1-101156r5"></a><span
Chris@1 8655 class="cmr-6">5</span><span
Chris@1 8656 class="cmtt-8">&#x00A0;</span><span
Chris@1 8657 class="cmtt-8">&#x00A0;</span>
Chris@1 8658 <br class="fancyvrb" /><a
Chris@1 8659 id="x1-101158r6"></a><span
Chris@1 8660 class="cmr-6">6</span><span
Chris@1 8661 class="cmtt-8">&#x00A0;</span><span
Chris@1 8662 class="cmtt-8">&#x00A0;</span><span
Chris@1 8663 class="cmtt-8">&#x00A0;</span><span
Chris@1 8664 class="cmtt-8">&#x00A0;</span><span
Chris@1 8665 class="cmtt-8">&#x00A0;</span><span
Chris@1 8666 class="cmtt-8">&#x00A0;</span><span
Chris@1 8667 class="cmtt-8">&#x00A0;</span><span
Chris@1 8668 class="cmtt-8">&#x00A0;</span><span
Chris@1 8669 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 8670 class="cmtt-8">&#x00A0;if</span><span
Chris@1 8671 class="cmtt-8">&#x00A0;(</span><span
Chris@1 8672 class="cmtt-8">&#x00A0;[floor1_step2_flag]&#8217;</span><span
Chris@1 8673 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8674 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8675 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8676 class="cmtt-8">&#x00A0;set</span><span
Chris@1 8677 class="cmtt-8">&#x00A0;)</span><span
Chris@1 8678 class="cmtt-8">&#x00A0;</span><span
Chris@1 8679 class="cmsy-8">{</span>
Chris@1 8680 <br class="fancyvrb" /><a
Chris@1 8681 id="x1-101160r7"></a><span
Chris@1 8682 class="cmr-6">7</span><span
Chris@1 8683 class="cmtt-8">&#x00A0;</span><span
Chris@1 8684 class="cmtt-8">&#x00A0;</span>
Chris@1 8685 <br class="fancyvrb" /><a
Chris@1 8686 id="x1-101162r8"></a><span
Chris@1 8687 class="cmr-6">8</span><span
Chris@1 8688 class="cmtt-8">&#x00A0;</span><span
Chris@1 8689 class="cmtt-8">&#x00A0;</span><span
Chris@1 8690 class="cmtt-8">&#x00A0;</span><span
Chris@1 8691 class="cmtt-8">&#x00A0;</span><span
Chris@1 8692 class="cmtt-8">&#x00A0;</span><span
Chris@1 8693 class="cmtt-8">&#x00A0;</span><span
Chris@1 8694 class="cmtt-8">&#x00A0;</span><span
Chris@1 8695 class="cmtt-8">&#x00A0;</span><span
Chris@1 8696 class="cmtt-8">&#x00A0;</span><span
Chris@1 8697 class="cmtt-8">&#x00A0;</span><span
Chris@1 8698 class="cmtt-8">&#x00A0;</span><span
Chris@1 8699 class="cmtt-8">&#x00A0;</span><span
Chris@1 8700 class="cmtt-8">&#x00A0;</span><span
Chris@1 8701 class="cmtt-8">&#x00A0;</span><span
Chris@1 8702 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 8703 class="cmtt-8">&#x00A0;[hy]</span><span
Chris@1 8704 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8705 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
Chris@1 8706 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8707 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 8708 class="cmtt-8">&#x00A0;*</span><span
Chris@1 8709 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
Chris@1 8710 <br class="fancyvrb" /><a
Chris@1 8711 id="x1-101164r9"></a><span
Chris@1 8712 class="cmr-6">9</span><span
Chris@1 8713 class="cmtt-8">&#x00A0;</span><span
Chris@1 8714 class="cmtt-8">&#x00A0;</span><span
Chris@1 8715 class="cmtt-8">&#x00A0; </span><span
Chris@1 8716 class="cmtt-8">&#x00A0;</span><span
Chris@1 8717 class="cmtt-8">&#x00A0;</span><span
Chris@1 8718 class="cmtt-8">&#x00A0;</span><span
Chris@1 8719 class="cmtt-8">&#x00A0;</span><span
Chris@1 8720 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 8721 class="cmtt-8">&#x00A0;[hx]</span><span
Chris@1 8722 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8723 class="cmtt-8">&#x00A0;[floor1_X_list]&#8217;</span><span
Chris@1 8724 class="cmtt-8">&#x00A0;element</span><span
Chris@1 8725 class="cmtt-8">&#x00A0;[i]</span>
Chris@1 8726 <br class="fancyvrb" /><a
Chris@1 8727 id="x1-101166r10"></a><span
Chris@1 8728 class="cmr-6">10</span><span
Chris@1 8729 class="cmtt-8">&#x00A0;</span><span
Chris@1 8730 class="cmtt-8">&#x00A0;</span><span
Chris@1 8731 class="cmtt-8">&#x00A0;</span><span
Chris@1 8732 class="cmtt-8">&#x00A0;</span><span
Chris@1 8733 class="cmtt-8">&#x00A0;</span><span
Chris@1 8734 class="cmtt-8">&#x00A0;</span><span
Chris@1 8735 class="cmtt-8">&#x00A0;</span><span
Chris@1 8736 class="cmtt-8">&#x00A0;</span><span
Chris@1 8737 class="cmtt-8">&#x00A0;</span><span
Chris@1 8738 class="cmtt-8">&#x00A0;</span><span
Chris@1 8739 class="cmtt-8">&#x00A0;</span><span
Chris@1 8740 class="cmtt-8">&#x00A0;</span><span
Chris@1 8741 class="cmtt-8">&#x00A0;</span><span
Chris@1 8742 class="cmtt-8">&#x00A0;</span><span
Chris@1 8743 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 8744 class="cmtt-8">&#x00A0;</span><a
Chris@1 8745 href="#x1-1230009.2.7"><span
Chris@1 8746 class="cmtt-8">render_line</span></a><span
Chris@1 8747 class="cmtt-8">(</span><span
Chris@1 8748 class="cmtt-8">&#x00A0;[lx],</span><span
Chris@1 8749 class="cmtt-8">&#x00A0;[ly],</span><span
Chris@1 8750 class="cmtt-8">&#x00A0;[hx],</span><span
Chris@1 8751 class="cmtt-8">&#x00A0;[hy],</span><span
Chris@1 8752 class="cmtt-8">&#x00A0;[floor]</span><span
Chris@1 8753 class="cmtt-8">&#x00A0;)</span>
Chris@1 8754 <br class="fancyvrb" /><a
Chris@1 8755 id="x1-101168r11"></a><span
Chris@1 8756 class="cmr-6">11</span><span
Chris@1 8757 class="cmtt-8">&#x00A0;</span><span
Chris@1 8758 class="cmtt-8">&#x00A0;</span><span
Chris@1 8759 class="cmtt-8">&#x00A0;</span><span
Chris@1 8760 class="cmtt-8">&#x00A0;</span><span
Chris@1 8761 class="cmtt-8">&#x00A0;</span><span
Chris@1 8762 class="cmtt-8">&#x00A0;</span><span
Chris@1 8763 class="cmtt-8">&#x00A0;</span><span
Chris@1 8764 class="cmtt-8">&#x00A0;</span><span
Chris@1 8765 class="cmtt-8">&#x00A0;</span><span
Chris@1 8766 class="cmtt-8">&#x00A0;</span><span
Chris@1 8767 class="cmtt-8">&#x00A0;</span><span
Chris@1 8768 class="cmtt-8">&#x00A0;</span><span
Chris@1 8769 class="cmtt-8">&#x00A0;</span><span
Chris@1 8770 class="cmtt-8">&#x00A0;</span><span
Chris@1 8771 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 8772 class="cmtt-8">&#x00A0;[lx]</span><span
Chris@1 8773 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8774 class="cmtt-8">&#x00A0;[hx]</span>
Chris@1 8775 <br class="fancyvrb" /><a
Chris@1 8776 id="x1-101170r12"></a><span
Chris@1 8777 class="cmr-6">12</span><span
Chris@1 8778 class="cmtt-8">&#x00A0;</span><span
Chris@1 8779 class="cmtt-8">&#x00A0; </span><span
Chris@1 8780 class="cmtt-8">&#x00A0;</span><span
Chris@1 8781 class="cmtt-8">&#x00A0;</span><span
Chris@1 8782 class="cmtt-8">&#x00A0;</span><span
Chris@1 8783 class="cmtt-8">&#x00A0;10)</span><span
Chris@1 8784 class="cmtt-8">&#x00A0;[ly]</span><span
Chris@1 8785 class="cmtt-8">&#x00A0;=</span><span
Chris@1 8786 class="cmtt-8">&#x00A0;[hy]</span>
Chris@1 8787 <br class="fancyvrb" /><a
Chris@1 8788 id="x1-101172r13"></a><span
Chris@1 8789 class="cmr-6">13</span><span
Chris@1 8790 class="cmtt-8">&#x00A0;</span><span
Chris@1 8791 class="cmtt-8">&#x00A0;</span><span
Chris@1 8792 class="cmtt-8">&#x00A0;</span><span
Chris@1 8793 class="cmtt-8">&#x00A0;</span><span
Chris@1 8794 class="cmtt-8">&#x00A0;</span><span
Chris@1 8795 class="cmtt-8">&#x00A0;</span><span
Chris@1 8796 class="cmtt-8">&#x00A0;</span><span
Chris@1 8797 class="cmtt-8">&#x00A0;</span><span
Chris@1 8798 class="cmtt-8">&#x00A0;</span><span
Chris@1 8799 class="cmtt-8">&#x00A0;</span><span
Chris@1 8800 class="cmtt-8">&#x00A0;</span><span
Chris@1 8801 class="cmtt-8">&#x00A0;</span><span
Chris@1 8802 class="cmsy-8">}</span>
Chris@1 8803 <br class="fancyvrb" /><a
Chris@1 8804 id="x1-101174r14"></a><span
Chris@1 8805 class="cmr-6">14</span><span
Chris@1 8806 class="cmtt-8">&#x00A0;</span><span
Chris@1 8807 class="cmtt-8">&#x00A0;</span><span
Chris@1 8808 class="cmtt-8">&#x00A0;</span><span
Chris@1 8809 class="cmtt-8">&#x00A0;</span><span
Chris@1 8810 class="cmtt-8">&#x00A0;</span><span
Chris@1 8811 class="cmtt-8">&#x00A0;</span><span
Chris@1 8812 class="cmtt-8">&#x00A0;</span><span
Chris@1 8813 class="cmsy-8">}</span>
Chris@1 8814 <br class="fancyvrb" /><a
Chris@1 8815 id="x1-101176r15"></a><span
Chris@1 8816 class="cmr-6">15</span><span
Chris@1 8817 class="cmtt-8">&#x00A0;</span><span
Chris@1 8818 class="cmtt-8">&#x00A0;</span>
Chris@1 8819 <br class="fancyvrb" /><a
Chris@1 8820 id="x1-101178r16"></a><span
Chris@1 8821 class="cmr-6">16</span><span
Chris@1 8822 class="cmtt-8">&#x00A0;</span><span
Chris@1 8823 class="cmtt-8">&#x00A0;</span><span
Chris@1 8824 class="cmtt-8">&#x00A0;11)</span><span
Chris@1 8825 class="cmtt-8">&#x00A0;if</span><span
Chris@1 8826 class="cmtt-8">&#x00A0;(</span><span
Chris@1 8827 class="cmtt-8">&#x00A0;[hx]</span><span
Chris@1 8828 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8829 class="cmtt-8">&#x00A0;less</span><span
Chris@1 8830 class="cmtt-8">&#x00A0;than</span><span
Chris@1 8831 class="cmtt-8">&#x00A0;[n]</span><span
Chris@1 8832 class="cmtt-8">&#x00A0;)</span><span
Chris@1 8833 class="cmtt-8">&#x00A0;</span><span
Chris@1 8834 class="cmsy-8">{</span>
Chris@1 8835 <br class="fancyvrb" /><a
Chris@1 8836 id="x1-101180r17"></a><span
Chris@1 8837 class="cmr-6">17</span><span
Chris@1 8838 class="cmtt-8">&#x00A0;</span><span
Chris@1 8839 class="cmtt-8">&#x00A0;</span>
Chris@1 8840 <br class="fancyvrb" /><a
Chris@1 8841 id="x1-101182r18"></a><span
Chris@1 8842 class="cmr-6">18</span><span
Chris@1 8843 class="cmtt-8">&#x00A0;</span><span
Chris@1 8844 class="cmtt-8">&#x00A0;</span><span
Chris@1 8845 class="cmtt-8">&#x00A0;</span><span
Chris@1 8846 class="cmtt-8">&#x00A0;</span><span
Chris@1 8847 class="cmtt-8">&#x00A0;</span><span
Chris@1 8848 class="cmtt-8">&#x00A0;</span><span
Chris@1 8849 class="cmtt-8">&#x00A0;</span><span
Chris@1 8850 class="cmtt-8">&#x00A0;</span><span
Chris@1 8851 class="cmtt-8">&#x00A0;</span><span
Chris@1 8852 class="cmtt-8">&#x00A0;12)</span><span
Chris@1 8853 class="cmtt-8">&#x00A0;</span><a
Chris@1 8854 href="#x1-1230009.2.7"><span
Chris@1 8855 class="cmtt-8">render_line</span></a><span
Chris@1 8856 class="cmtt-8">(</span><span
Chris@1 8857 class="cmtt-8">&#x00A0;[hx],</span><span
Chris@1 8858 class="cmtt-8">&#x00A0;[hy],</span><span
Chris@1 8859 class="cmtt-8">&#x00A0;[n],</span><span
Chris@1 8860 class="cmtt-8">&#x00A0;[hy],</span><span
Chris@1 8861 class="cmtt-8">&#x00A0;[floor]</span><span
Chris@1 8862 class="cmtt-8">&#x00A0;)</span>
Chris@1 8863 <br class="fancyvrb" /><a
Chris@1 8864 id="x1-101184r19"></a><span
Chris@1 8865 class="cmr-6">19</span><span
Chris@1 8866 class="cmtt-8">&#x00A0;</span><span
Chris@1 8867 class="cmtt-8">&#x00A0;</span>
Chris@1 8868 <br class="fancyvrb" /><a
Chris@1 8869 id="x1-101186r20"></a><span
Chris@1 8870 class="cmr-6">20</span><span
Chris@1 8871 class="cmtt-8">&#x00A0;</span><span
Chris@1 8872 class="cmtt-8">&#x00A0;</span><span
Chris@1 8873 class="cmtt-8">&#x00A0;</span><span
Chris@1 8874 class="cmtt-8">&#x00A0;</span><span
Chris@1 8875 class="cmtt-8">&#x00A0;</span><span
Chris@1 8876 class="cmtt-8">&#x00A0;</span><span
Chris@1 8877 class="cmtt-8">&#x00A0;</span><span
Chris@1 8878 class="cmsy-8">}</span>
Chris@1 8879 <br class="fancyvrb" /><a
Chris@1 8880 id="x1-101188r21"></a><span
Chris@1 8881 class="cmr-6">21</span><span
Chris@1 8882 class="cmtt-8">&#x00A0;</span><span
Chris@1 8883 class="cmtt-8">&#x00A0;</span>
Chris@1 8884 <br class="fancyvrb" /><a
Chris@1 8885 id="x1-101190r22"></a><span
Chris@1 8886 class="cmr-6">22</span><span
Chris@1 8887 class="cmtt-8">&#x00A0;</span><span
Chris@1 8888 class="cmtt-8">&#x00A0;</span><span
Chris@1 8889 class="cmtt-8">&#x00A0;13)</span><span
Chris@1 8890 class="cmtt-8">&#x00A0;if</span><span
Chris@1 8891 class="cmtt-8">&#x00A0;(</span><span
Chris@1 8892 class="cmtt-8">&#x00A0;[hx]</span><span
Chris@1 8893 class="cmtt-8">&#x00A0;is</span><span
Chris@1 8894 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 8895 class="cmtt-8">&#x00A0;than</span><span
Chris@1 8896 class="cmtt-8">&#x00A0;[n]</span><span
Chris@1 8897 class="cmtt-8">&#x00A0;)</span><span
Chris@1 8898 class="cmtt-8">&#x00A0;</span><span
Chris@1 8899 class="cmsy-8">{</span>
Chris@1 8900 <br class="fancyvrb" /><a
Chris@1 8901 id="x1-101192r23"></a><span
Chris@1 8902 class="cmr-6">23</span><span
Chris@1 8903 class="cmtt-8">&#x00A0;</span><span
Chris@1 8904 class="cmtt-8">&#x00A0;</span>
Chris@1 8905 <br class="fancyvrb" /><a
Chris@1 8906 id="x1-101194r24"></a><span
Chris@1 8907 class="cmr-6">24</span><span
Chris@1 8908 class="cmtt-8">&#x00A0;</span><span
Chris@1 8909 class="cmtt-8">&#x00A0;</span><span
Chris@1 8910 class="cmtt-8">&#x00A0;</span><span
Chris@1 8911 class="cmtt-8">&#x00A0;</span><span
Chris@1 8912 class="cmtt-8">&#x00A0;</span><span
Chris@1 8913 class="cmtt-8">&#x00A0;</span><span
Chris@1 8914 class="cmtt-8">&#x00A0;</span><span
Chris@1 8915 class="cmtt-8">&#x00A0;</span><span
Chris@1 8916 class="cmtt-8">&#x00A0;</span><span
Chris@1 8917 class="cmtt-8">&#x00A0;</span><span
Chris@1 8918 class="cmtt-8">&#x00A0;</span><span
Chris@1 8919 class="cmtt-8">&#x00A0;</span><span
Chris@1 8920 class="cmtt-8">&#x00A0;</span><span
Chris@1 8921 class="cmtt-8">&#x00A0;14)</span><span
Chris@1 8922 class="cmtt-8">&#x00A0;truncate</span><span
Chris@1 8923 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8924 class="cmtt-8">&#x00A0;[floor]</span><span
Chris@1 8925 class="cmtt-8">&#x00A0;to</span><span
Chris@1 8926 class="cmtt-8">&#x00A0;[n]</span><span
Chris@1 8927 class="cmtt-8">&#x00A0;elements</span>
Chris@1 8928 <br class="fancyvrb" /><a
Chris@1 8929 id="x1-101196r25"></a><span
Chris@1 8930 class="cmr-6">25</span><span
Chris@1 8931 class="cmtt-8">&#x00A0;</span><span
Chris@1 8932 class="cmtt-8">&#x00A0;</span>
Chris@1 8933 <br class="fancyvrb" /><a
Chris@1 8934 id="x1-101198r26"></a><span
Chris@1 8935 class="cmr-6">26</span><span
Chris@1 8936 class="cmtt-8">&#x00A0;</span><span
Chris@1 8937 class="cmtt-8">&#x00A0;</span><span
Chris@1 8938 class="cmtt-8">&#x00A0;</span><span
Chris@1 8939 class="cmtt-8">&#x00A0;</span><span
Chris@1 8940 class="cmtt-8">&#x00A0;</span><span
Chris@1 8941 class="cmtt-8">&#x00A0;</span><span
Chris@1 8942 class="cmtt-8">&#x00A0;</span><span
Chris@1 8943 class="cmsy-8">}</span>
Chris@1 8944 <br class="fancyvrb" /><a
Chris@1 8945 id="x1-101200r27"></a><span
Chris@1 8946 class="cmr-6">27</span><span
Chris@1 8947 class="cmtt-8">&#x00A0;</span><span
Chris@1 8948 class="cmtt-8">&#x00A0;</span>
Chris@1 8949
Chris@1 8950
Chris@1 8951
Chris@1 8952 <br class="fancyvrb" /><a
Chris@1 8953 id="x1-101202r28"></a><span
Chris@1 8954 class="cmr-6">28</span><span
Chris@1 8955 class="cmtt-8">&#x00A0;</span><span
Chris@1 8956 class="cmtt-8">&#x00A0;</span><span
Chris@1 8957 class="cmtt-8">&#x00A0;15)</span><span
Chris@1 8958 class="cmtt-8">&#x00A0;for</span><span
Chris@1 8959 class="cmtt-8">&#x00A0;each</span><span
Chris@1 8960 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 8961 class="cmtt-8">&#x00A0;in</span><span
Chris@1 8962 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8963 class="cmtt-8">&#x00A0;[floor],</span><span
Chris@1 8964 class="cmtt-8">&#x00A0;perform</span><span
Chris@1 8965 class="cmtt-8">&#x00A0;a</span><span
Chris@1 8966 class="cmtt-8">&#x00A0;lookup</span><span
Chris@1 8967 class="cmtt-8">&#x00A0;substitution</span><span
Chris@1 8968 class="cmtt-8">&#x00A0;using</span>
Chris@1 8969 <br class="fancyvrb" /><a
Chris@1 8970 id="x1-101204r29"></a><span
Chris@1 8971 class="cmr-6">29</span><span
Chris@1 8972 class="cmtt-8">&#x00A0;</span><span
Chris@1 8973 class="cmtt-8">&#x00A0;</span><span
Chris@1 8974 class="cmtt-8">&#x00A0;</span><span
Chris@1 8975 class="cmtt-8">&#x00A0;</span><span
Chris@1 8976 class="cmtt-8">&#x00A0;</span><span
Chris@1 8977 class="cmtt-8">&#x00A0;</span><span
Chris@1 8978 class="cmtt-8">&#x00A0;the</span><span
Chris@1 8979 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 8980 class="cmtt-8">&#x00A0;value</span><span
Chris@1 8981 class="cmtt-8">&#x00A0;from</span><span
Chris@1 8982 class="cmtt-8">&#x00A0;[floor]</span><span
Chris@1 8983 class="cmtt-8">&#x00A0;as</span><span
Chris@1 8984 class="cmtt-8">&#x00A0;an</span><span
Chris@1 8985 class="cmtt-8">&#x00A0;offset</span><span
Chris@1 8986 class="cmtt-8">&#x00A0;into</span><span
Chris@1 8987 class="cmtt-8">&#x00A0;the</span><span
Chris@1 8988 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 8989 class="cmtt-8">&#x00A0;</span><a
Chris@1 8990 href="#x1-12500010.1"><span
Chris@1 8991 class="cmtt-8">[floor1_inverse_dB_static_table]</span></a>
Chris@1 8992 <br class="fancyvrb" /><a
Chris@1 8993 id="x1-101206r30"></a><span
Chris@1 8994 class="cmr-6">30</span><span
Chris@1 8995 class="cmtt-8">&#x00A0;</span><span
Chris@1 8996 class="cmtt-8">&#x00A0;</span>
Chris@1 8997 <br class="fancyvrb" /><a
Chris@1 8998 id="x1-101208r31"></a><span
Chris@1 8999 class="cmr-6">31</span><span
Chris@1 9000 class="cmtt-8">&#x00A0;</span><span
Chris@1 9001 class="cmtt-8">&#x00A0;</span><span
Chris@1 9002 class="cmtt-8">&#x00A0;16)</span><span
Chris@1 9003 class="cmtt-8">&#x00A0;done</span>
Chris@1 9004 <br class="fancyvrb" /><a
Chris@1 9005 id="x1-101210r32"></a><span
Chris@1 9006 class="cmr-6">32</span><span
Chris@1 9007 class="cmtt-8">&#x00A0;</span><span
Chris@1 9008 class="cmtt-8">&#x00A0;</span>
Chris@1 9009 </div>
Chris@1 9010 </dd></dl>
Chris@1 9011
Chris@1 9012
Chris@1 9013
Chris@1 9014 <h3 class="sectionHead"><span class="titlemark">8. </span> <a
Chris@1 9015 id="x1-1020008"></a>Residue setup and decode</h3>
Chris@1 9016 <!--l. 6--><p class="noindent" >
Chris@1 9017 <h4 class="subsectionHead"><span class="titlemark">8.1. </span> <a
Chris@1 9018 id="x1-1030008.1"></a>Overview</h4>
Chris@1 9019 <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
Chris@1 9020 after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
Chris@1 9021 may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
Chris@1 9022 coupling. The exact semantic content of the vector does not matter to the residue
Chris@1 9023 abstraction.
Chris@1 9024 <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
Chris@1 9025 bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
Chris@1 9026 different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
Chris@1 9027 abstraction.
Chris@1 9028 <!--l. 23--><p class="noindent" >
Chris@1 9029 <h4 class="subsectionHead"><span class="titlemark">8.2. </span> <a
Chris@1 9030 id="x1-1040008.2"></a>Residue format</h4>
Chris@1 9031 <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
Chris@1 9032 chunk, encodes the chunk classifications and finally encodes the chunks themselves
Chris@1 9033 using the the specific VQ arrangement defined for each selected classification. The
Chris@1 9034 exact interleaving and partitioning vary by residue encoding number, however the
Chris@1 9035 high-level process used to classify and encode the residue vector is the same in all three
Chris@1 9036 variants.
Chris@1 9037 <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
Chris@1 9038 the moment exactly how a partition is encoded and simply trusting that it is, is as
Chris@1 9039 follows:
Chris@1 9040 <ul class="itemize1">
Chris@1 9041 <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
Chris@1 9042 specified. If we have a vector size of <span
Chris@1 9043 class="cmti-12">n</span>, a partition size <span
Chris@1 9044 class="cmti-12">residue</span><span
Chris@1 9045 class="cmti-12">_partition</span><span
Chris@1 9046 class="cmti-12">_size</span>,
Chris@1 9047 and a total of <span
Chris@1 9048 class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded
Chris@1 9049
Chris@1 9050
Chris@1 9051
Chris@1 9052 is <span
Chris@1 9053 class="cmti-12">n</span>/<span
Chris@1 9054 class="cmti-12">residue</span><span
Chris@1 9055 class="cmti-12">_partition</span><span
Chris@1 9056 class="cmti-12">_size</span>*<span
Chris@1 9057 class="cmti-12">ch</span>. It is important to note that the integer division
Chris@1 9058 truncates. In the below example, we assume an example <span
Chris@1 9059 class="cmti-12">residue</span><span
Chris@1 9060 class="cmti-12">_partition</span><span
Chris@1 9061 class="cmti-12">_size </span>of 8.
Chris@1 9062 </li>
Chris@1 9063 <li class="itemize">Each partition in each vector has a classification number that specifies which of
Chris@1 9064 multiple configured VQ codebook setups are used to decode that partition. The
Chris@1 9065 classification numbers of each partition can be thought of as forming a vector in
Chris@1 9066 their own right, as in the illustration below. Just as the residue vectors are coded
Chris@1 9067 in grouped partitions to increase encoding efficiency, the classification vector is also
Chris@1 9068 partitioned into chunks. The integer elements of each scalar in a classification chunk
Chris@1 9069 are built into a single scalar that represents the classification numbers in that chunk.
Chris@1 9070 In the below example, the classification codeword encodes two classification numbers.
Chris@1 9071 </li>
Chris@1 9072 <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
Chris@1 9073 the residue vector, but more often efficient codebook design dictates that each vector
Chris@1 9074 is encoded as the additive sum of several passes through the residue vector using
Chris@1 9075 more than one VQ codebook. Thus, each residue value potentially accumulates values
Chris@1 9076 from multiple decode passes. The classification value associated with a partition is
Chris@1 9077 the same in each pass, thus the classification codeword is coded only in the first pass.
Chris@1 9078 </li></ul>
Chris@1 9079 <div class="center"
Chris@1 9080 >
Chris@1 9081 <!--l. 70--><p class="noindent" >
Chris@1 9082
Chris@1 9083 <!--l. 71--><p class="noindent" ><img
Chris@1 9084 src="residue-pack.png" alt="PIC"
Chris@1 9085 >
Chris@1 9086 <br /> <div class="caption"
Chris@1 9087 ><span class="id">Figure&#x00A0;11: </span><span
Chris@1 9088 class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 -->
Chris@1 9089 </div>
Chris@1 9090 <!--l. 77--><p class="noindent" >
Chris@1 9091 <h4 class="subsectionHead"><span class="titlemark">8.3. </span> <a
Chris@1 9092 id="x1-1050008.3"></a>residue 0</h4>
Chris@1 9093 <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
Chris@1 9094 partition encoding (visually treated as a black box&#8211;or cyan box or brown box&#8211;in the above
Chris@1 9095 figure).
Chris@1 9096 <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
Chris@1 9097
Chris@1 9098
Chris@1 9099
Chris@1 9100 encode a partition in a specific pass. The dimension of the codebook need not be the same in
Chris@1 9101 multiple passes, however the partition size must be an even multiple of the codebook
Chris@1 9102 dimension.
Chris@1 9103 <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
Chris@1 9104 codebook sizes of 8, 4, 2 and 1:
Chris@1 9105 <!--l. 92--><p class="noindent" >
Chris@1 9106 <div class="fancyvrb" id="fancyvrb33">
Chris@1 9107 <a
Chris@1 9108 id="x1-105002r1"></a><span
Chris@1 9109 class="cmr-6">1</span><span
Chris@1 9110 class="cmtt-8">&#x00A0;</span><span
Chris@1 9111 class="cmtt-8">&#x00A0;</span>
Chris@1 9112 <br class="fancyvrb" /><a
Chris@1 9113 id="x1-105004r2"></a><span
Chris@1 9114 class="cmr-6">2</span><span
Chris@1 9115 class="cmtt-8">&#x00A0;</span><span
Chris@1 9116 class="cmtt-8">&#x00A0;</span><span
Chris@1 9117 class="cmtt-8">&#x00A0;</span><span
Chris@1 9118 class="cmtt-8">&#x00A0;</span><span
Chris@1 9119 class="cmtt-8">&#x00A0;</span><span
Chris@1 9120 class="cmtt-8">&#x00A0;</span><span
Chris@1 9121 class="cmtt-8">&#x00A0;</span><span
Chris@1 9122 class="cmtt-8">&#x00A0;</span><span
Chris@1 9123 class="cmtt-8">&#x00A0;</span><span
Chris@1 9124 class="cmtt-8">&#x00A0;</span><span
Chris@1 9125 class="cmtt-8">&#x00A0;</span><span
Chris@1 9126 class="cmtt-8">&#x00A0;</span><span
Chris@1 9127 class="cmtt-8">&#x00A0;</span><span
Chris@1 9128 class="cmtt-8">&#x00A0;original</span><span
Chris@1 9129 class="cmtt-8">&#x00A0;residue</span><span
Chris@1 9130 class="cmtt-8">&#x00A0;vector:</span><span
Chris@1 9131 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9132 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9133 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9134 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9135 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9136 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9137 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9138 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9139 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9140 class="cmtt-8">&#x00A0;]</span>
Chris@1 9141 <br class="fancyvrb" /><a
Chris@1 9142 id="x1-105006r3"></a><span
Chris@1 9143 class="cmr-6">3</span><span
Chris@1 9144 class="cmtt-8">&#x00A0;</span><span
Chris@1 9145 class="cmtt-8">&#x00A0;</span>
Chris@1 9146 <br class="fancyvrb" /><a
Chris@1 9147 id="x1-105008r4"></a><span
Chris@1 9148 class="cmr-6">4</span><span
Chris@1 9149 class="cmtt-8">&#x00A0;</span><span
Chris@1 9150 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9151 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9152 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9153 class="cmtt-8">&#x00A0;8</span><span
Chris@1 9154 class="cmtt-8">&#x00A0;</span><span
Chris@1 9155 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9156 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9157 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9158 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9159 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9160 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9161 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9162 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9163 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9164 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9165 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9166 class="cmtt-8">&#x00A0;]</span>
Chris@1 9167 <br class="fancyvrb" /><a
Chris@1 9168 id="x1-105010r5"></a><span
Chris@1 9169 class="cmr-6">5</span><span
Chris@1 9170 class="cmtt-8">&#x00A0;</span><span
Chris@1 9171 class="cmtt-8">&#x00A0;</span>
Chris@1 9172 <br class="fancyvrb" /><a
Chris@1 9173 id="x1-105012r6"></a><span
Chris@1 9174 class="cmr-6">6</span><span
Chris@1 9175 class="cmtt-8">&#x00A0;</span><span
Chris@1 9176 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9177 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9178 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9179 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9180 class="cmtt-8">&#x00A0;</span><span
Chris@1 9181 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9182 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9183 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9184 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9185 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9186 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9187 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9188 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9189 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9190 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9191 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9192 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9193 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9194 class="cmtt-8">&#x00A0;]</span>
Chris@1 9195 <br class="fancyvrb" /><a
Chris@1 9196 id="x1-105014r7"></a><span
Chris@1 9197 class="cmr-6">7</span><span
Chris@1 9198 class="cmtt-8">&#x00A0;</span><span
Chris@1 9199 class="cmtt-8">&#x00A0;</span>
Chris@1 9200 <br class="fancyvrb" /><a
Chris@1 9201 id="x1-105016r8"></a><span
Chris@1 9202 class="cmr-6">8</span><span
Chris@1 9203 class="cmtt-8">&#x00A0;</span><span
Chris@1 9204 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9205 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9206 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9207 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9208 class="cmtt-8">&#x00A0;</span><span
Chris@1 9209 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9210 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9211 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9212 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9213 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9214 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9215 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9216 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9217 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9218 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9219 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9220 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9221 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9222 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9223 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9224 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9225 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9226 class="cmtt-8">&#x00A0;]</span>
Chris@1 9227 <br class="fancyvrb" /><a
Chris@1 9228 id="x1-105018r9"></a><span
Chris@1 9229 class="cmr-6">9</span><span
Chris@1 9230 class="cmtt-8">&#x00A0;</span><span
Chris@1 9231 class="cmtt-8">&#x00A0;</span>
Chris@1 9232 <br class="fancyvrb" /><a
Chris@1 9233 id="x1-105020r10"></a><span
Chris@1 9234 class="cmr-6">10</span><span
Chris@1 9235 class="cmtt-8">&#x00A0;</span><span
Chris@1 9236 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9237 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9238 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9239 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9240 class="cmtt-8">&#x00A0;</span><span
Chris@1 9241 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9242 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9243 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9244 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9245 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9246 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9247 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9248 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9249 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9250 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9251 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9252 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9253 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9254 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9255 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9256 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9257 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9258 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9259 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9260 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9261 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9262 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9263 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9264 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9265 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9266 class="cmtt-8">&#x00A0;]</span>
Chris@1 9267 <br class="fancyvrb" /><a
Chris@1 9268 id="x1-105022r11"></a><span
Chris@1 9269 class="cmr-6">11</span><span
Chris@1 9270 class="cmtt-8">&#x00A0;</span><span
Chris@1 9271 class="cmtt-8">&#x00A0;</span>
Chris@1 9272 </div>
Chris@1 9273 <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
Chris@1 9274 restricted to a power of two.
Chris@1 9275 <!--l. 111--><p class="noindent" >
Chris@1 9276 <h4 class="subsectionHead"><span class="titlemark">8.4. </span> <a
Chris@1 9277 id="x1-1060008.4"></a>residue 1</h4>
Chris@1 9278 <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
Chris@1 9279 with residue 0, however, partition length must be an integer multiple of the codebook dimension,
Chris@1 9280 although dimension may vary from pass to pass.
Chris@1 9281 <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
Chris@1 9282 codebook sizes of 8, 4, 2 and 1:
Chris@1 9283 <!--l. 121--><p class="noindent" >
Chris@1 9284 <div class="fancyvrb" id="fancyvrb34">
Chris@1 9285 <a
Chris@1 9286 id="x1-106002r1"></a><span
Chris@1 9287 class="cmr-6">1</span><span
Chris@1 9288 class="cmtt-8">&#x00A0;</span><span
Chris@1 9289 class="cmtt-8">&#x00A0;</span>
Chris@1 9290 <br class="fancyvrb" /><a
Chris@1 9291 id="x1-106004r2"></a><span
Chris@1 9292 class="cmr-6">2</span><span
Chris@1 9293 class="cmtt-8">&#x00A0;</span><span
Chris@1 9294 class="cmtt-8">&#x00A0;</span><span
Chris@1 9295 class="cmtt-8">&#x00A0;</span><span
Chris@1 9296 class="cmtt-8">&#x00A0;</span><span
Chris@1 9297 class="cmtt-8">&#x00A0;</span><span
Chris@1 9298 class="cmtt-8">&#x00A0;</span><span
Chris@1 9299 class="cmtt-8">&#x00A0;</span><span
Chris@1 9300 class="cmtt-8">&#x00A0;</span><span
Chris@1 9301 class="cmtt-8">&#x00A0;</span><span
Chris@1 9302 class="cmtt-8">&#x00A0;</span><span
Chris@1 9303 class="cmtt-8">&#x00A0;</span><span
Chris@1 9304 class="cmtt-8">&#x00A0;</span><span
Chris@1 9305 class="cmtt-8">&#x00A0;</span><span
Chris@1 9306 class="cmtt-8">&#x00A0;original</span><span
Chris@1 9307 class="cmtt-8">&#x00A0;residue</span><span
Chris@1 9308 class="cmtt-8">&#x00A0;vector:</span><span
Chris@1 9309 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9310 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9311 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9312 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9313 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9314 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9315 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9316 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9317 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9318 class="cmtt-8">&#x00A0;]</span>
Chris@1 9319 <br class="fancyvrb" /><a
Chris@1 9320 id="x1-106006r3"></a><span
Chris@1 9321 class="cmr-6">3</span><span
Chris@1 9322 class="cmtt-8">&#x00A0;</span><span
Chris@1 9323 class="cmtt-8">&#x00A0;</span>
Chris@1 9324 <br class="fancyvrb" /><a
Chris@1 9325 id="x1-106008r4"></a><span
Chris@1 9326 class="cmr-6">4</span><span
Chris@1 9327 class="cmtt-8">&#x00A0;</span><span
Chris@1 9328 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9329 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9330 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9331 class="cmtt-8">&#x00A0;8</span><span
Chris@1 9332 class="cmtt-8">&#x00A0;</span><span
Chris@1 9333 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9334 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9335 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9336 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9337 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9338 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9339 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9340 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9341 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9342 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9343 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9344 class="cmtt-8">&#x00A0;]</span>
Chris@1 9345 <br class="fancyvrb" /><a
Chris@1 9346 id="x1-106010r5"></a><span
Chris@1 9347 class="cmr-6">5</span><span
Chris@1 9348 class="cmtt-8">&#x00A0;</span><span
Chris@1 9349 class="cmtt-8">&#x00A0;</span>
Chris@1 9350 <br class="fancyvrb" /><a
Chris@1 9351 id="x1-106012r6"></a><span
Chris@1 9352 class="cmr-6">6</span><span
Chris@1 9353 class="cmtt-8">&#x00A0;</span><span
Chris@1 9354 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9355 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9356 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9357 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9358 class="cmtt-8">&#x00A0;</span><span
Chris@1 9359 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9360 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9361 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9362 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9363 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9364 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9365 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9366 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9367 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9368 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9369 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9370 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9371 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9372 class="cmtt-8">&#x00A0;]</span>
Chris@1 9373 <br class="fancyvrb" /><a
Chris@1 9374 id="x1-106014r7"></a><span
Chris@1 9375 class="cmr-6">7</span><span
Chris@1 9376 class="cmtt-8">&#x00A0;</span><span
Chris@1 9377 class="cmtt-8">&#x00A0;</span>
Chris@1 9378 <br class="fancyvrb" /><a
Chris@1 9379 id="x1-106016r8"></a><span
Chris@1 9380 class="cmr-6">8</span><span
Chris@1 9381 class="cmtt-8">&#x00A0;</span><span
Chris@1 9382 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9383 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9384 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9385 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9386 class="cmtt-8">&#x00A0;</span><span
Chris@1 9387 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9388 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9389 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9390 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9391 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9392 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9393 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9394 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9395 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9396 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9397 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9398 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9399 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9400 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9401 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9402 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9403 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9404 class="cmtt-8">&#x00A0;]</span>
Chris@1 9405 <br class="fancyvrb" /><a
Chris@1 9406 id="x1-106018r9"></a><span
Chris@1 9407 class="cmr-6">9</span><span
Chris@1 9408 class="cmtt-8">&#x00A0;</span><span
Chris@1 9409 class="cmtt-8">&#x00A0;</span>
Chris@1 9410 <br class="fancyvrb" /><a
Chris@1 9411 id="x1-106020r10"></a><span
Chris@1 9412 class="cmr-6">10</span><span
Chris@1 9413 class="cmtt-8">&#x00A0;</span><span
Chris@1 9414 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 9415 class="cmtt-8">&#x00A0;dimensions</span><span
Chris@1 9416 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9417 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9418 class="cmtt-8">&#x00A0;</span><span
Chris@1 9419 class="cmtt-8">&#x00A0;encoded</span><span
Chris@1 9420 class="cmtt-8">&#x00A0;as:</span><span
Chris@1 9421 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9422 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9423 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9424 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9425 class="cmtt-8">&#x00A0;1</span><span
Chris@1 9426 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9427 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9428 class="cmtt-8">&#x00A0;2</span><span
Chris@1 9429 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9430 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9431 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9432 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9433 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9434 class="cmtt-8">&#x00A0;4</span><span
Chris@1 9435 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9436 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9437 class="cmtt-8">&#x00A0;5</span><span
Chris@1 9438 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9439 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9440 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9441 class="cmtt-8">&#x00A0;],</span><span
Chris@1 9442 class="cmtt-8">&#x00A0;[</span><span
Chris@1 9443 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9444 class="cmtt-8">&#x00A0;]</span>
Chris@1 9445 <br class="fancyvrb" /><a
Chris@1 9446 id="x1-106022r11"></a><span
Chris@1 9447 class="cmr-6">11</span><span
Chris@1 9448 class="cmtt-8">&#x00A0;</span><span
Chris@1 9449 class="cmtt-8">&#x00A0;</span>
Chris@1 9450
Chris@1 9451
Chris@1 9452
Chris@1 9453 </div>
Chris@1 9454 <!--l. 137--><p class="noindent" >
Chris@1 9455 <h4 class="subsectionHead"><span class="titlemark">8.5. </span> <a
Chris@1 9456 id="x1-1070008.5"></a>residue 2</h4>
Chris@1 9457 <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
Chris@1 9458 passed-in vectors as in residue type 1, the <span
Chris@1 9459 class="cmti-12">ch </span>passed in vectors of length <span
Chris@1 9460 class="cmti-12">n </span>are first interleaved
Chris@1 9461 and flattened into a single vector of length <span
Chris@1 9462 class="cmti-12">ch</span>*<span
Chris@1 9463 class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
Chris@1 9464 is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
Chris@1 9465 residue type 1 and type 2 are equivalent.
Chris@1 9466 <div class="center"
Chris@1 9467 >
Chris@1 9468 <!--l. 147--><p class="noindent" >
Chris@1 9469
Chris@1 9470 <!--l. 148--><p class="noindent" ><img
Chris@1 9471 src="residue2.png" alt="PIC"
Chris@1 9472 >
Chris@1 9473 <br /> <div class="caption"
Chris@1 9474 ><span class="id">Figure&#x00A0;12: </span><span
Chris@1 9475 class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 -->
Chris@1 9476 </div>
Chris@1 9477 <!--l. 153--><p class="noindent" >
Chris@1 9478 <h4 class="subsectionHead"><span class="titlemark">8.6. </span> <a
Chris@1 9479 id="x1-1080008.6"></a>Residue decode</h4>
Chris@1 9480 <!--l. 155--><p class="noindent" >
Chris@1 9481 <h5 class="subsubsectionHead"><span class="titlemark">8.6.1. </span> <a
Chris@1 9482 id="x1-1090008.6.1"></a>header decode</h5>
Chris@1 9483 <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
Chris@1 9484 <div class="fancyvrb" id="fancyvrb35">
Chris@1 9485 <a
Chris@1 9486 id="x1-109002r1"></a><span
Chris@1 9487 class="cmr-6">1</span><span
Chris@1 9488 class="cmtt-8">&#x00A0;</span><span
Chris@1 9489 class="cmtt-8">&#x00A0;</span><span
Chris@1 9490 class="cmtt-8">&#x00A0;</span><span
Chris@1 9491 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 9492 class="cmtt-8">&#x00A0;[residue\_begin]</span><span
Chris@1 9493 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9494 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9495 class="cmtt-8">&#x00A0;24</span><span
Chris@1 9496 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9497 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9498 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9499 class="cmtt-8">&#x00A0;integer</span>
Chris@1 9500 <br class="fancyvrb" /><a
Chris@1 9501 id="x1-109004r2"></a><span
Chris@1 9502 class="cmr-6">2</span><span
Chris@1 9503 class="cmtt-8">&#x00A0;</span><span
Chris@1 9504 class="cmtt-8">&#x00A0;</span><span
Chris@1 9505 class="cmtt-8">&#x00A0;</span><span
Chris@1 9506 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 9507 class="cmtt-8">&#x00A0;[residue\_end]</span><span
Chris@1 9508 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9509 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9510 class="cmtt-8">&#x00A0;24</span><span
Chris@1 9511 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9512 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9513 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9514 class="cmtt-8">&#x00A0;integer</span>
Chris@1 9515 <br class="fancyvrb" /><a
Chris@1 9516 id="x1-109006r3"></a><span
Chris@1 9517 class="cmr-6">3</span><span
Chris@1 9518 class="cmtt-8">&#x00A0;</span><span
Chris@1 9519 class="cmtt-8">&#x00A0;</span><span
Chris@1 9520 class="cmtt-8">&#x00A0;</span><span
Chris@1 9521 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 9522 class="cmtt-8">&#x00A0;[residue\_partition\_size]</span><span
Chris@1 9523 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9524 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9525 class="cmtt-8">&#x00A0;24</span><span
Chris@1 9526 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9527 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9528 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9529 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 9530 class="cmtt-8">&#x00A0;and</span><span
Chris@1 9531 class="cmtt-8">&#x00A0;add</span><span
Chris@1 9532 class="cmtt-8">&#x00A0;one</span>
Chris@1 9533 <br class="fancyvrb" /><a
Chris@1 9534 id="x1-109008r4"></a><span
Chris@1 9535 class="cmr-6">4</span><span
Chris@1 9536 class="cmtt-8">&#x00A0;</span><span
Chris@1 9537 class="cmtt-8">&#x00A0;</span><span
Chris@1 9538 class="cmtt-8">&#x00A0;</span><span
Chris@1 9539 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 9540 class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
Chris@1 9541 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9542 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9543 class="cmtt-8">&#x00A0;6</span><span
Chris@1 9544 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9545 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9546 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9547 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 9548 class="cmtt-8">&#x00A0;and</span><span
Chris@1 9549 class="cmtt-8">&#x00A0;add</span><span
Chris@1 9550 class="cmtt-8">&#x00A0;one</span>
Chris@1 9551
Chris@1 9552
Chris@1 9553
Chris@1 9554 <br class="fancyvrb" /><a
Chris@1 9555 id="x1-109010r5"></a><span
Chris@1 9556 class="cmr-6">5</span><span
Chris@1 9557 class="cmtt-8">&#x00A0;</span><span
Chris@1 9558 class="cmtt-8">&#x00A0;</span><span
Chris@1 9559 class="cmtt-8">&#x00A0;</span><span
Chris@1 9560 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 9561 class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
Chris@1 9562 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9563 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9564 class="cmtt-8">&#x00A0;8</span><span
Chris@1 9565 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9566 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9567 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9568 class="cmtt-8">&#x00A0;integer</span>
Chris@1 9569 </div>
Chris@1 9570 <!--l. 166--><p class="noindent" ><span
Chris@1 9571 class="cmtt-12">[residue_begin] </span>and <span
Chris@1 9572 class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
Chris@1 9573 actually coded; it implements akin to a bandpass where, for coding purposes, the vector
Chris@1 9574 effectively begins at element <span
Chris@1 9575 class="cmtt-12">[residue_begin] </span>and ends at <span
Chris@1 9576 class="cmtt-12">[residue_end]</span>. Preceding and
Chris@1 9577 following values in the unpacked vectors are zeroed. Note that for residue type 2, these
Chris@1 9578 values as well as <span
Chris@1 9579 class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
Chris@1 9580 individual vectors before interleave. <span
Chris@1 9581 class="cmtt-12">[residue_partition_size] </span>is as explained above,
Chris@1 9582 <span
Chris@1 9583 class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
Chris@1 9584 belong and <span
Chris@1 9585 class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
Chris@1 9586 codewords. The number of dimensions in book <span
Chris@1 9587 class="cmtt-12">[residue_classbook] </span>determines how
Chris@1 9588 many classification values are grouped into a single classification codeword. Note that
Chris@1 9589 the number of entries and dimensions in book <span
Chris@1 9590 class="cmtt-12">[residue_classbook]</span>, along with
Chris@1 9591 <span
Chris@1 9592 class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
Chris@1 9593 codewords. If <span
Chris@1 9594 class="cmtt-12">[residue_classifications]</span>&#x02C6;<span
Chris@1 9595 class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
Chris@1 9596 <span
Chris@1 9597 class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
Chris@1 9598 <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
Chris@1 9599 passes.
Chris@1 9600 <!--l. 193--><p class="noindent" >
Chris@1 9601 <div class="fancyvrb" id="fancyvrb36">
Chris@1 9602 <a
Chris@1 9603 id="x1-109012r1"></a><span
Chris@1 9604 class="cmr-6">1</span><span
Chris@1 9605 class="cmtt-8">&#x00A0;</span><span
Chris@1 9606 class="cmtt-8">&#x00A0;</span><span
Chris@1 9607 class="cmtt-8">&#x00A0;</span><span
Chris@1 9608 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 9609 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 9610 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 9611 class="cmtt-8">&#x00A0;over</span><span
Chris@1 9612 class="cmtt-8">&#x00A0;the</span><span
Chris@1 9613 class="cmtt-8">&#x00A0;range</span><span
Chris@1 9614 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9615 class="cmtt-8">&#x00A0;...</span><span
Chris@1 9616 class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
Chris@1 9617 class="cmtt-8">&#x00A0;{</span>
Chris@1 9618 <br class="fancyvrb" /><a
Chris@1 9619 id="x1-109014r2"></a><span
Chris@1 9620 class="cmr-6">2</span><span
Chris@1 9621 class="cmtt-8">&#x00A0;</span><span
Chris@1 9622 class="cmtt-8">&#x00A0;</span>
Chris@1 9623 <br class="fancyvrb" /><a
Chris@1 9624 id="x1-109016r3"></a><span
Chris@1 9625 class="cmr-6">3</span><span
Chris@1 9626 class="cmtt-8">&#x00A0;</span><span
Chris@1 9627 class="cmtt-8">&#x00A0;</span><span
Chris@1 9628 class="cmtt-8">&#x00A0;</span><span
Chris@1 9629 class="cmtt-8">&#x00A0;</span><span
Chris@1 9630 class="cmtt-8">&#x00A0;</span><span
Chris@1 9631 class="cmtt-8">&#x00A0;</span><span
Chris@1 9632 class="cmtt-8">&#x00A0;</span><span
Chris@1 9633 class="cmtt-8">&#x00A0;</span><span
Chris@1 9634 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 9635 class="cmtt-8">&#x00A0;[high\_bits]</span><span
Chris@1 9636 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9637 class="cmtt-8">&#x00A0;0</span>
Chris@1 9638 <br class="fancyvrb" /><a
Chris@1 9639 id="x1-109018r4"></a><span
Chris@1 9640 class="cmr-6">4</span><span
Chris@1 9641 class="cmtt-8">&#x00A0;</span><span
Chris@1 9642 class="cmtt-8">&#x00A0;</span><span
Chris@1 9643 class="cmtt-8">&#x00A0;</span><span
Chris@1 9644 class="cmtt-8">&#x00A0;</span><span
Chris@1 9645 class="cmtt-8">&#x00A0;</span><span
Chris@1 9646 class="cmtt-8">&#x00A0;</span><span
Chris@1 9647 class="cmtt-8">&#x00A0;</span><span
Chris@1 9648 class="cmtt-8">&#x00A0;</span><span
Chris@1 9649 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 9650 class="cmtt-8">&#x00A0;[low\_bits]</span><span
Chris@1 9651 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9652 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9653 class="cmtt-8">&#x00A0;3</span><span
Chris@1 9654 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9655 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9656 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9657 class="cmtt-8">&#x00A0;integer</span>
Chris@1 9658 <br class="fancyvrb" /><a
Chris@1 9659 id="x1-109020r5"></a><span
Chris@1 9660 class="cmr-6">5</span><span
Chris@1 9661 class="cmtt-8">&#x00A0;</span><span
Chris@1 9662 class="cmtt-8">&#x00A0;</span><span
Chris@1 9663 class="cmtt-8">&#x00A0;</span><span
Chris@1 9664 class="cmtt-8">&#x00A0;</span><span
Chris@1 9665 class="cmtt-8">&#x00A0;</span><span
Chris@1 9666 class="cmtt-8">&#x00A0;</span><span
Chris@1 9667 class="cmtt-8">&#x00A0;</span><span
Chris@1 9668 class="cmtt-8">&#x00A0;</span><span
Chris@1 9669 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 9670 class="cmtt-8">&#x00A0;[bitflag]</span><span
Chris@1 9671 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9672 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9673 class="cmtt-8">&#x00A0;one</span><span
Chris@1 9674 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 9675 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9676 class="cmtt-8">&#x00A0;boolean</span>
Chris@1 9677 <br class="fancyvrb" /><a
Chris@1 9678 id="x1-109022r6"></a><span
Chris@1 9679 class="cmr-6">6</span><span
Chris@1 9680 class="cmtt-8">&#x00A0;</span><span
Chris@1 9681 class="cmtt-8">&#x00A0;</span><span
Chris@1 9682 class="cmtt-8">&#x00A0;</span><span
Chris@1 9683 class="cmtt-8">&#x00A0;</span><span
Chris@1 9684 class="cmtt-8">&#x00A0;</span><span
Chris@1 9685 class="cmtt-8">&#x00A0;</span><span
Chris@1 9686 class="cmtt-8">&#x00A0;</span><span
Chris@1 9687 class="cmtt-8">&#x00A0;</span><span
Chris@1 9688 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 9689 class="cmtt-8">&#x00A0;if</span><span
Chris@1 9690 class="cmtt-8">&#x00A0;(</span><span
Chris@1 9691 class="cmtt-8">&#x00A0;[bitflag]</span><span
Chris@1 9692 class="cmtt-8">&#x00A0;is</span><span
Chris@1 9693 class="cmtt-8">&#x00A0;set</span><span
Chris@1 9694 class="cmtt-8">&#x00A0;)</span><span
Chris@1 9695 class="cmtt-8">&#x00A0;then</span><span
Chris@1 9696 class="cmtt-8">&#x00A0;[high\_bits]</span><span
Chris@1 9697 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9698 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9699 class="cmtt-8">&#x00A0;five</span><span
Chris@1 9700 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9701 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9702 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9703 class="cmtt-8">&#x00A0;integer</span>
Chris@1 9704 <br class="fancyvrb" /><a
Chris@1 9705 id="x1-109024r7"></a><span
Chris@1 9706 class="cmr-6">7</span><span
Chris@1 9707 class="cmtt-8">&#x00A0;</span><span
Chris@1 9708 class="cmtt-8">&#x00A0;</span><span
Chris@1 9709 class="cmtt-8">&#x00A0;</span><span
Chris@1 9710 class="cmtt-8">&#x00A0;</span><span
Chris@1 9711 class="cmtt-8">&#x00A0;</span><span
Chris@1 9712 class="cmtt-8">&#x00A0;</span><span
Chris@1 9713 class="cmtt-8">&#x00A0;</span><span
Chris@1 9714 class="cmtt-8">&#x00A0;</span><span
Chris@1 9715 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 9716 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 9717 class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
Chris@1 9718 class="cmtt-8">&#x00A0;element</span><span
Chris@1 9719 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 9720 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9721 class="cmtt-8">&#x00A0;[high\_bits]</span><span
Chris@1 9722 class="cmtt-8">&#x00A0;*</span><span
Chris@1 9723 class="cmtt-8">&#x00A0;8</span><span
Chris@1 9724 class="cmtt-8">&#x00A0;+</span><span
Chris@1 9725 class="cmtt-8">&#x00A0;[low\_bits]</span>
Chris@1 9726 <br class="fancyvrb" /><a
Chris@1 9727 id="x1-109026r8"></a><span
Chris@1 9728 class="cmr-6">8</span><span
Chris@1 9729 class="cmtt-8">&#x00A0;</span><span
Chris@1 9730 class="cmtt-8">&#x00A0;</span><span
Chris@1 9731 class="cmtt-8">&#x00A0;</span><span
Chris@1 9732 class="cmtt-8">&#x00A0;</span><span
Chris@1 9733 class="cmtt-8">&#x00A0;</span><span
Chris@1 9734 class="cmtt-8">&#x00A0;</span><span
Chris@1 9735 class="cmtt-8">&#x00A0;}</span>
Chris@1 9736 <br class="fancyvrb" /><a
Chris@1 9737 id="x1-109028r9"></a><span
Chris@1 9738 class="cmr-6">9</span><span
Chris@1 9739 class="cmtt-8">&#x00A0;</span><span
Chris@1 9740 class="cmtt-8">&#x00A0;</span><span
Chris@1 9741 class="cmtt-8">&#x00A0;</span><span
Chris@1 9742 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 9743 class="cmtt-8">&#x00A0;done</span>
Chris@1 9744 </div>
Chris@1 9745 <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
Chris@1 9746 bitmap. We loop over the possible codebook classifications and the maximum possible number of
Chris@1 9747 encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
Chris@1 9748 bits):
Chris@1 9749 <!--l. 211--><p class="noindent" >
Chris@1 9750 <div class="fancyvrb" id="fancyvrb37">
Chris@1 9751 <a
Chris@1 9752 id="x1-109030r1"></a><span
Chris@1 9753 class="cmr-6">1</span><span
Chris@1 9754 class="cmtt-8">&#x00A0;</span><span
Chris@1 9755 class="cmtt-8">&#x00A0;</span><span
Chris@1 9756 class="cmtt-8">&#x00A0;</span><span
Chris@1 9757 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 9758 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 9759 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 9760 class="cmtt-8">&#x00A0;over</span><span
Chris@1 9761 class="cmtt-8">&#x00A0;the</span><span
Chris@1 9762 class="cmtt-8">&#x00A0;range</span><span
Chris@1 9763 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9764 class="cmtt-8">&#x00A0;...</span><span
Chris@1 9765 class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
Chris@1 9766 class="cmtt-8">&#x00A0;{</span>
Chris@1 9767 <br class="fancyvrb" /><a
Chris@1 9768 id="x1-109032r2"></a><span
Chris@1 9769 class="cmr-6">2</span><span
Chris@1 9770 class="cmtt-8">&#x00A0;</span><span
Chris@1 9771 class="cmtt-8">&#x00A0;</span>
Chris@1 9772 <br class="fancyvrb" /><a
Chris@1 9773 id="x1-109034r3"></a><span
Chris@1 9774 class="cmr-6">3</span><span
Chris@1 9775 class="cmtt-8">&#x00A0;</span><span
Chris@1 9776 class="cmtt-8">&#x00A0;</span><span
Chris@1 9777 class="cmtt-8">&#x00A0;</span><span
Chris@1 9778 class="cmtt-8">&#x00A0;</span><span
Chris@1 9779 class="cmtt-8">&#x00A0;</span><span
Chris@1 9780 class="cmtt-8">&#x00A0;</span><span
Chris@1 9781 class="cmtt-8">&#x00A0;</span><span
Chris@1 9782 class="cmtt-8">&#x00A0;</span><span
Chris@1 9783 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 9784 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 9785 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 9786 class="cmtt-8">&#x00A0;over</span><span
Chris@1 9787 class="cmtt-8">&#x00A0;the</span><span
Chris@1 9788 class="cmtt-8">&#x00A0;range</span><span
Chris@1 9789 class="cmtt-8">&#x00A0;0</span><span
Chris@1 9790 class="cmtt-8">&#x00A0;...</span><span
Chris@1 9791 class="cmtt-8">&#x00A0;7</span><span
Chris@1 9792 class="cmtt-8">&#x00A0;{</span>
Chris@1 9793 <br class="fancyvrb" /><a
Chris@1 9794 id="x1-109036r4"></a><span
Chris@1 9795 class="cmr-6">4</span><span
Chris@1 9796 class="cmtt-8">&#x00A0;</span><span
Chris@1 9797 class="cmtt-8">&#x00A0;</span>
Chris@1 9798 <br class="fancyvrb" /><a
Chris@1 9799 id="x1-109038r5"></a><span
Chris@1 9800 class="cmr-6">5</span><span
Chris@1 9801 class="cmtt-8">&#x00A0;</span><span
Chris@1 9802 class="cmtt-8">&#x00A0;</span><span
Chris@1 9803 class="cmtt-8">&#x00A0;</span><span
Chris@1 9804 class="cmtt-8">&#x00A0;</span><span
Chris@1 9805 class="cmtt-8">&#x00A0;</span><span
Chris@1 9806 class="cmtt-8">&#x00A0;</span><span
Chris@1 9807 class="cmtt-8">&#x00A0;</span><span
Chris@1 9808 class="cmtt-8">&#x00A0;</span><span
Chris@1 9809 class="cmtt-8">&#x00A0;</span><span
Chris@1 9810 class="cmtt-8">&#x00A0;</span><span
Chris@1 9811 class="cmtt-8">&#x00A0;</span><span
Chris@1 9812 class="cmtt-8">&#x00A0;</span><span
Chris@1 9813 class="cmtt-8">&#x00A0;</span><span
Chris@1 9814 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 9815 class="cmtt-8">&#x00A0;if</span><span
Chris@1 9816 class="cmtt-8">&#x00A0;(</span><span
Chris@1 9817 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 9818 class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
Chris@1 9819 class="cmtt-8">&#x00A0;element</span><span
Chris@1 9820 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 9821 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 9822 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 9823 class="cmtt-8">&#x00A0;is</span><span
Chris@1 9824 class="cmtt-8">&#x00A0;set</span><span
Chris@1 9825 class="cmtt-8">&#x00A0;)</span><span
Chris@1 9826 class="cmtt-8">&#x00A0;{</span>
Chris@1 9827 <br class="fancyvrb" /><a
Chris@1 9828 id="x1-109040r6"></a><span
Chris@1 9829 class="cmr-6">6</span><span
Chris@1 9830 class="cmtt-8">&#x00A0;</span><span
Chris@1 9831 class="cmtt-8">&#x00A0;</span>
Chris@1 9832 <br class="fancyvrb" /><a
Chris@1 9833 id="x1-109042r7"></a><span
Chris@1 9834 class="cmr-6">7</span><span
Chris@1 9835 class="cmtt-8">&#x00A0;</span><span
Chris@1 9836 class="cmtt-8">&#x00A0;</span><span
Chris@1 9837 class="cmtt-8">&#x00A0;</span><span
Chris@1 9838 class="cmtt-8">&#x00A0;</span><span
Chris@1 9839 class="cmtt-8">&#x00A0;</span><span
Chris@1 9840 class="cmtt-8">&#x00A0;</span><span
Chris@1 9841 class="cmtt-8">&#x00A0;</span><span
Chris@1 9842 class="cmtt-8">&#x00A0;</span><span
Chris@1 9843 class="cmtt-8">&#x00A0;</span><span
Chris@1 9844 class="cmtt-8">&#x00A0;</span><span
Chris@1 9845 class="cmtt-8">&#x00A0;</span><span
Chris@1 9846 class="cmtt-8">&#x00A0;</span><span
Chris@1 9847 class="cmtt-8">&#x00A0;</span><span
Chris@1 9848 class="cmtt-8">&#x00A0;</span><span
Chris@1 9849 class="cmtt-8">&#x00A0;</span><span
Chris@1 9850 class="cmtt-8">&#x00A0;</span><span
Chris@1 9851 class="cmtt-8">&#x00A0;</span><span
Chris@1 9852 class="cmtt-8">&#x00A0;</span><span
Chris@1 9853 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 9854 class="cmtt-8">&#x00A0;array</span><span
Chris@1 9855 class="cmtt-8">&#x00A0;[residue\_books]</span><span
Chris@1 9856 class="cmtt-8">&#x00A0;element</span><span
Chris@1 9857 class="cmtt-8">&#x00A0;[i][j]</span><span
Chris@1 9858 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9859 class="cmtt-8">&#x00A0;read</span><span
Chris@1 9860 class="cmtt-8">&#x00A0;8</span><span
Chris@1 9861 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 9862 class="cmtt-8">&#x00A0;as</span><span
Chris@1 9863 class="cmtt-8">&#x00A0;unsigned</span><span
Chris@1 9864 class="cmtt-8">&#x00A0;integer</span>
Chris@1 9865 <br class="fancyvrb" /><a
Chris@1 9866 id="x1-109044r8"></a><span
Chris@1 9867 class="cmr-6">8</span><span
Chris@1 9868 class="cmtt-8">&#x00A0;</span><span
Chris@1 9869 class="cmtt-8">&#x00A0;</span>
Chris@1 9870 <br class="fancyvrb" /><a
Chris@1 9871 id="x1-109046r9"></a><span
Chris@1 9872 class="cmr-6">9</span><span
Chris@1 9873 class="cmtt-8">&#x00A0;</span><span
Chris@1 9874 class="cmtt-8">&#x00A0;</span><span
Chris@1 9875 class="cmtt-8">&#x00A0;</span><span
Chris@1 9876 class="cmtt-8">&#x00A0;</span><span
Chris@1 9877 class="cmtt-8">&#x00A0;</span><span
Chris@1 9878 class="cmtt-8">&#x00A0;</span><span
Chris@1 9879 class="cmtt-8">&#x00A0;</span><span
Chris@1 9880 class="cmtt-8">&#x00A0;</span><span
Chris@1 9881 class="cmtt-8">&#x00A0;</span><span
Chris@1 9882 class="cmtt-8">&#x00A0;</span><span
Chris@1 9883 class="cmtt-8">&#x00A0;</span><span
Chris@1 9884 class="cmtt-8">&#x00A0;</span><span
Chris@1 9885 class="cmtt-8">&#x00A0;</span><span
Chris@1 9886 class="cmtt-8">&#x00A0;</span><span
Chris@1 9887 class="cmtt-8">&#x00A0;</span><span
Chris@1 9888 class="cmtt-8">&#x00A0;</span><span
Chris@1 9889 class="cmtt-8">&#x00A0;}</span><span
Chris@1 9890 class="cmtt-8">&#x00A0;else</span><span
Chris@1 9891 class="cmtt-8">&#x00A0;{</span>
Chris@1 9892
Chris@1 9893
Chris@1 9894
Chris@1 9895 <br class="fancyvrb" /><a
Chris@1 9896 id="x1-109048r10"></a><span
Chris@1 9897 class="cmr-6">10</span><span
Chris@1 9898 class="cmtt-8">&#x00A0;</span><span
Chris@1 9899 class="cmtt-8">&#x00A0;</span>
Chris@1 9900 <br class="fancyvrb" /><a
Chris@1 9901 id="x1-109050r11"></a><span
Chris@1 9902 class="cmr-6">11</span><span
Chris@1 9903 class="cmtt-8">&#x00A0;</span><span
Chris@1 9904 class="cmtt-8">&#x00A0;</span><span
Chris@1 9905 class="cmtt-8">&#x00A0;</span><span
Chris@1 9906 class="cmtt-8">&#x00A0;</span><span
Chris@1 9907 class="cmtt-8">&#x00A0;</span><span
Chris@1 9908 class="cmtt-8">&#x00A0;</span><span
Chris@1 9909 class="cmtt-8">&#x00A0;</span><span
Chris@1 9910 class="cmtt-8">&#x00A0;</span><span
Chris@1 9911 class="cmtt-8">&#x00A0;</span><span
Chris@1 9912 class="cmtt-8">&#x00A0;</span><span
Chris@1 9913 class="cmtt-8">&#x00A0;</span><span
Chris@1 9914 class="cmtt-8">&#x00A0;</span><span
Chris@1 9915 class="cmtt-8">&#x00A0;</span><span
Chris@1 9916 class="cmtt-8">&#x00A0;</span><span
Chris@1 9917 class="cmtt-8">&#x00A0;</span><span
Chris@1 9918 class="cmtt-8">&#x00A0;</span><span
Chris@1 9919 class="cmtt-8">&#x00A0;</span><span
Chris@1 9920 class="cmtt-8">&#x00A0;</span><span
Chris@1 9921 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 9922 class="cmtt-8">&#x00A0;array</span><span
Chris@1 9923 class="cmtt-8">&#x00A0;[residue\_books]</span><span
Chris@1 9924 class="cmtt-8">&#x00A0;element</span><span
Chris@1 9925 class="cmtt-8">&#x00A0;[i][j]</span><span
Chris@1 9926 class="cmtt-8">&#x00A0;=</span><span
Chris@1 9927 class="cmtt-8">&#x00A0;unused</span>
Chris@1 9928 <br class="fancyvrb" /><a
Chris@1 9929 id="x1-109052r12"></a><span
Chris@1 9930 class="cmr-6">12</span><span
Chris@1 9931 class="cmtt-8">&#x00A0;</span><span
Chris@1 9932 class="cmtt-8">&#x00A0;</span>
Chris@1 9933 <br class="fancyvrb" /><a
Chris@1 9934 id="x1-109054r13"></a><span
Chris@1 9935 class="cmr-6">13</span><span
Chris@1 9936 class="cmtt-8">&#x00A0;</span><span
Chris@1 9937 class="cmtt-8">&#x00A0;</span><span
Chris@1 9938 class="cmtt-8">&#x00A0;</span><span
Chris@1 9939 class="cmtt-8">&#x00A0;</span><span
Chris@1 9940 class="cmtt-8">&#x00A0;</span><span
Chris@1 9941 class="cmtt-8">&#x00A0;</span><span
Chris@1 9942 class="cmtt-8">&#x00A0;</span><span
Chris@1 9943 class="cmtt-8">&#x00A0;</span><span
Chris@1 9944 class="cmtt-8">&#x00A0;</span><span
Chris@1 9945 class="cmtt-8">&#x00A0;</span><span
Chris@1 9946 class="cmtt-8">&#x00A0;</span><span
Chris@1 9947 class="cmtt-8">&#x00A0;</span><span
Chris@1 9948 class="cmtt-8">&#x00A0;</span><span
Chris@1 9949 class="cmtt-8">&#x00A0;</span><span
Chris@1 9950 class="cmtt-8">&#x00A0;</span><span
Chris@1 9951 class="cmtt-8">&#x00A0;</span><span
Chris@1 9952 class="cmtt-8">&#x00A0;}</span>
Chris@1 9953 <br class="fancyvrb" /><a
Chris@1 9954 id="x1-109056r14"></a><span
Chris@1 9955 class="cmr-6">14</span><span
Chris@1 9956 class="cmtt-8">&#x00A0;</span><span
Chris@1 9957 class="cmtt-8">&#x00A0;</span><span
Chris@1 9958 class="cmtt-8">&#x00A0;</span><span
Chris@1 9959 class="cmtt-8">&#x00A0;</span><span
Chris@1 9960 class="cmtt-8">&#x00A0;</span><span
Chris@1 9961 class="cmtt-8">&#x00A0;</span><span
Chris@1 9962 class="cmtt-8">&#x00A0;</span><span
Chris@1 9963 class="cmtt-8">&#x00A0;</span><span
Chris@1 9964 class="cmtt-8">&#x00A0;</span><span
Chris@1 9965 class="cmtt-8">&#x00A0;</span><span
Chris@1 9966 class="cmtt-8">&#x00A0;</span><span
Chris@1 9967 class="cmtt-8">&#x00A0;}</span>
Chris@1 9968 <br class="fancyvrb" /><a
Chris@1 9969 id="x1-109058r15"></a><span
Chris@1 9970 class="cmr-6">15</span><span
Chris@1 9971 class="cmtt-8">&#x00A0;</span><span
Chris@1 9972 class="cmtt-8">&#x00A0;</span><span
Chris@1 9973 class="cmtt-8">&#x00A0;</span><span
Chris@1 9974 class="cmtt-8">&#x00A0;</span><span
Chris@1 9975 class="cmtt-8">&#x00A0;</span><span
Chris@1 9976 class="cmtt-8">&#x00A0;</span><span
Chris@1 9977 class="cmtt-8">&#x00A0;</span><span
Chris@1 9978 class="cmtt-8">&#x00A0;}</span>
Chris@1 9979 <br class="fancyvrb" /><a
Chris@1 9980 id="x1-109060r16"></a><span
Chris@1 9981 class="cmr-6">16</span><span
Chris@1 9982 class="cmtt-8">&#x00A0;</span><span
Chris@1 9983 class="cmtt-8">&#x00A0;</span>
Chris@1 9984 <br class="fancyvrb" /><a
Chris@1 9985 id="x1-109062r17"></a><span
Chris@1 9986 class="cmr-6">17</span><span
Chris@1 9987 class="cmtt-8">&#x00A0;</span><span
Chris@1 9988 class="cmtt-8">&#x00A0;</span><span
Chris@1 9989 class="cmtt-8">&#x00A0;</span><span
Chris@1 9990 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 9991 class="cmtt-8">&#x00A0;done</span>
Chris@1 9992 </div>
Chris@1 9993 <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
Chris@1 9994 In addition, any codebook number greater than the maximum numbered codebook
Chris@1 9995 set up in this stream also renders the stream undecodable. All codebooks in array
Chris@1 9996 [residue_books] are required to have a value mapping. The presence of codebook in array
Chris@1 9997 [residue_books] without a value mapping (maptype equals zero) renders the stream
Chris@1 9998 undecodable.
Chris@1 9999 <!--l. 241--><p class="noindent" >
Chris@1 10000 <h5 class="subsubsectionHead"><span class="titlemark">8.6.2. </span> <a
Chris@1 10001 id="x1-1100008.6.2"></a>packet decode</h5>
Chris@1 10002 <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
Chris@1 10003 decode can be built out of the format 1 decode process. Thus we describe first the decode
Chris@1 10004 infrastructure identical to all three formats.
Chris@1 10005 <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
Chris@1 10006 vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
Chris@1 10007 decoded. If the passed in number of vectors is 3 and vector number 1 is marked &#8217;do not decode&#8217;,
Chris@1 10008 decode skips vector 1 during the decode loop. However, even &#8217;do not decode&#8217; vectors are
Chris@1 10009 allocated and zeroed.
Chris@1 10010 <!--l. 255--><p class="noindent" >Depending on the values of <span
Chris@1 10011 class="cmtt-12">[residue_begin] </span>and <span
Chris@1 10012 class="cmtt-12">[residue_end]</span>, it is obvious that the
Chris@1 10013 encoded portion of a residue vector may be the entire possible residue vector or some other strict
Chris@1 10014 subset of the actual residue vector size with zero padding at either uncoded end. However, it is
Chris@1 10015 also possible to set <span
Chris@1 10016 class="cmtt-12">[residue_begin] </span>and <span
Chris@1 10017 class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
Chris@1 10018 beyond the maximum vector size. Before beginning residue decode, limit <span
Chris@1 10019 class="cmtt-12">[residue_begin]</span>
Chris@1 10020 and <span
Chris@1 10021 class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
Chris@1 10022 the number of vectors being encoded, <span
Chris@1 10023 class="cmtt-12">[ch] </span>is provided by the higher level decoding
Chris@1 10024 process.
Chris@1 10025 <!--l. 269--><p class="noindent" >
Chris@1 10026 <div class="fancyvrb" id="fancyvrb38">
Chris@1 10027 <a
Chris@1 10028 id="x1-110002r1"></a><span
Chris@1 10029 class="cmr-6">1</span><span
Chris@1 10030 class="cmtt-8">&#x00A0;</span><span
Chris@1 10031 class="cmtt-8">&#x00A0;</span><span
Chris@1 10032 class="cmtt-8">&#x00A0;</span><span
Chris@1 10033 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 10034 class="cmtt-8">&#x00A0;[actual\_size]</span><span
Chris@1 10035 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10036 class="cmtt-8">&#x00A0;current</span><span
Chris@1 10037 class="cmtt-8">&#x00A0;blocksize/2;</span>
Chris@1 10038 <br class="fancyvrb" /><a
Chris@1 10039 id="x1-110004r2"></a><span
Chris@1 10040 class="cmr-6">2</span><span
Chris@1 10041 class="cmtt-8">&#x00A0;</span><span
Chris@1 10042 class="cmtt-8">&#x00A0;</span><span
Chris@1 10043 class="cmtt-8">&#x00A0;</span><span
Chris@1 10044 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 10045 class="cmtt-8">&#x00A0;if</span><span
Chris@1 10046 class="cmtt-8">&#x00A0;residue</span><span
Chris@1 10047 class="cmtt-8">&#x00A0;encoding</span><span
Chris@1 10048 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10049 class="cmtt-8">&#x00A0;format</span><span
Chris@1 10050 class="cmtt-8">&#x00A0;2</span>
Chris@1 10051 <br class="fancyvrb" /><a
Chris@1 10052 id="x1-110006r3"></a><span
Chris@1 10053 class="cmr-6">3</span><span
Chris@1 10054 class="cmtt-8">&#x00A0;</span><span
Chris@1 10055 class="cmtt-8">&#x00A0;</span><span
Chris@1 10056 class="cmtt-8">&#x00A0;</span><span
Chris@1 10057 class="cmtt-8">&#x00A0;</span><span
Chris@1 10058 class="cmtt-8">&#x00A0;</span><span
Chris@1 10059 class="cmtt-8">&#x00A0;</span><span
Chris@1 10060 class="cmtt-8">&#x00A0;</span><span
Chris@1 10061 class="cmtt-8">&#x00A0;</span><span
Chris@1 10062 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 10063 class="cmtt-8">&#x00A0;[actual\_size]</span><span
Chris@1 10064 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10065 class="cmtt-8">&#x00A0;[actual\_size]</span><span
Chris@1 10066 class="cmtt-8">&#x00A0;*</span><span
Chris@1 10067 class="cmtt-8">&#x00A0;[ch];</span>
Chris@1 10068
Chris@1 10069
Chris@1 10070
Chris@1 10071 <br class="fancyvrb" /><a
Chris@1 10072 id="x1-110008r4"></a><span
Chris@1 10073 class="cmr-6">4</span><span
Chris@1 10074 class="cmtt-8">&#x00A0;</span><span
Chris@1 10075 class="cmtt-8">&#x00A0;</span><span
Chris@1 10076 class="cmtt-8">&#x00A0;</span><span
Chris@1 10077 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 10078 class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span><span
Chris@1 10079 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10080 class="cmtt-8">&#x00A0;maximum</span><span
Chris@1 10081 class="cmtt-8">&#x00A0;of</span><span
Chris@1 10082 class="cmtt-8">&#x00A0;([residue\_begin],[actual\_size]);</span>
Chris@1 10083 <br class="fancyvrb" /><a
Chris@1 10084 id="x1-110010r5"></a><span
Chris@1 10085 class="cmr-6">5</span><span
Chris@1 10086 class="cmtt-8">&#x00A0;</span><span
Chris@1 10087 class="cmtt-8">&#x00A0;</span><span
Chris@1 10088 class="cmtt-8">&#x00A0;</span><span
Chris@1 10089 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 10090 class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
Chris@1 10091 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10092 class="cmtt-8">&#x00A0;maximum</span><span
Chris@1 10093 class="cmtt-8">&#x00A0;of</span><span
Chris@1 10094 class="cmtt-8">&#x00A0;([residue\_end],[actual\_size]);</span>
Chris@1 10095 </div>
Chris@1 10096 <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
Chris@1 10097 <!--l. 280--><p class="noindent" >
Chris@1 10098 <div class="fancyvrb" id="fancyvrb39">
Chris@1 10099 <a
Chris@1 10100 id="x1-110012r1"></a><span
Chris@1 10101 class="cmr-6">1</span><span
Chris@1 10102 class="cmtt-8">&#x00A0;</span><span
Chris@1 10103 class="cmtt-8">&#x00A0;</span><span
Chris@1 10104 class="cmtt-8">&#x00A0;</span><span
Chris@1 10105 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 10106 class="cmtt-8">&#x00A0;[classwords\_per\_codeword]</span><span
Chris@1 10107 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10108 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span><span
Chris@1 10109 class="cmtt-8">&#x00A0;value</span><span
Chris@1 10110 class="cmtt-8">&#x00A0;of</span><span
Chris@1 10111 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 10112 class="cmtt-8">&#x00A0;[residue\_classbook]</span>
Chris@1 10113 <br class="fancyvrb" /><a
Chris@1 10114 id="x1-110014r2"></a><span
Chris@1 10115 class="cmr-6">2</span><span
Chris@1 10116 class="cmtt-8">&#x00A0;</span><span
Chris@1 10117 class="cmtt-8">&#x00A0;</span><span
Chris@1 10118 class="cmtt-8">&#x00A0;</span><span
Chris@1 10119 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 10120 class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
Chris@1 10121 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10122 class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
Chris@1 10123 class="cmtt-8">&#x00A0;-</span><span
Chris@1 10124 class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span>
Chris@1 10125 <br class="fancyvrb" /><a
Chris@1 10126 id="x1-110016r3"></a><span
Chris@1 10127 class="cmr-6">3</span><span
Chris@1 10128 class="cmtt-8">&#x00A0;</span><span
Chris@1 10129 class="cmtt-8">&#x00A0;</span><span
Chris@1 10130 class="cmtt-8">&#x00A0;</span><span
Chris@1 10131 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 10132 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
Chris@1 10133 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10134 class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
Chris@1 10135 class="cmtt-8">&#x00A0;/</span><span
Chris@1 10136 class="cmtt-8">&#x00A0;[residue\_partition\_size]</span>
Chris@1 10137 </div>
Chris@1 10138 <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
Chris@1 10139 <div class="fancyvrb" id="fancyvrb40">
Chris@1 10140 <a
Chris@1 10141 id="x1-110018r1"></a><span
Chris@1 10142 class="cmr-6">1</span><span
Chris@1 10143 class="cmtt-8">&#x00A0;</span><span
Chris@1 10144 class="cmtt-8">&#x00A0;</span><span
Chris@1 10145 class="cmtt-8">&#x00A0;</span><span
Chris@1 10146 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 10147 class="cmtt-8">&#x00A0;allocate</span><span
Chris@1 10148 class="cmtt-8">&#x00A0;and</span><span
Chris@1 10149 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 10150 class="cmtt-8">&#x00A0;all</span><span
Chris@1 10151 class="cmtt-8">&#x00A0;vectors</span><span
Chris@1 10152 class="cmtt-8">&#x00A0;that</span><span
Chris@1 10153 class="cmtt-8">&#x00A0;will</span><span
Chris@1 10154 class="cmtt-8">&#x00A0;be</span><span
Chris@1 10155 class="cmtt-8">&#x00A0;returned.</span>
Chris@1 10156 <br class="fancyvrb" /><a
Chris@1 10157 id="x1-110020r2"></a><span
Chris@1 10158 class="cmr-6">2</span><span
Chris@1 10159 class="cmtt-8">&#x00A0;</span><span
Chris@1 10160 class="cmtt-8">&#x00A0;</span><span
Chris@1 10161 class="cmtt-8">&#x00A0;</span><span
Chris@1 10162 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 10163 class="cmtt-8">&#x00A0;if</span><span
Chris@1 10164 class="cmtt-8">&#x00A0;([n\_to\_read]</span><span
Chris@1 10165 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10166 class="cmtt-8">&#x00A0;zero),</span><span
Chris@1 10167 class="cmtt-8">&#x00A0;stop;</span><span
Chris@1 10168 class="cmtt-8">&#x00A0;there</span><span
Chris@1 10169 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10170 class="cmtt-8">&#x00A0;no</span><span
Chris@1 10171 class="cmtt-8">&#x00A0;residue</span><span
Chris@1 10172 class="cmtt-8">&#x00A0;to</span><span
Chris@1 10173 class="cmtt-8">&#x00A0;decode.</span>
Chris@1 10174 <br class="fancyvrb" /><a
Chris@1 10175 id="x1-110022r3"></a><span
Chris@1 10176 class="cmr-6">3</span><span
Chris@1 10177 class="cmtt-8">&#x00A0;</span><span
Chris@1 10178 class="cmtt-8">&#x00A0;</span><span
Chris@1 10179 class="cmtt-8">&#x00A0;</span><span
Chris@1 10180 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 10181 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 10182 class="cmtt-8">&#x00A0;[pass]</span><span
Chris@1 10183 class="cmtt-8">&#x00A0;over</span><span
Chris@1 10184 class="cmtt-8">&#x00A0;the</span><span
Chris@1 10185 class="cmtt-8">&#x00A0;range</span><span
Chris@1 10186 class="cmtt-8">&#x00A0;0</span><span
Chris@1 10187 class="cmtt-8">&#x00A0;...</span><span
Chris@1 10188 class="cmtt-8">&#x00A0;7</span><span
Chris@1 10189 class="cmtt-8">&#x00A0;{</span>
Chris@1 10190 <br class="fancyvrb" /><a
Chris@1 10191 id="x1-110024r4"></a><span
Chris@1 10192 class="cmr-6">4</span><span
Chris@1 10193 class="cmtt-8">&#x00A0;</span><span
Chris@1 10194 class="cmtt-8">&#x00A0;</span>
Chris@1 10195 <br class="fancyvrb" /><a
Chris@1 10196 id="x1-110026r5"></a><span
Chris@1 10197 class="cmr-6">5</span><span
Chris@1 10198 class="cmtt-8">&#x00A0;</span><span
Chris@1 10199 class="cmtt-8">&#x00A0;</span><span
Chris@1 10200 class="cmtt-8">&#x00A0;</span><span
Chris@1 10201 class="cmtt-8">&#x00A0;</span><span
Chris@1 10202 class="cmtt-8">&#x00A0;</span><span
Chris@1 10203 class="cmtt-8">&#x00A0;</span><span
Chris@1 10204 class="cmtt-8">&#x00A0;</span><span
Chris@1 10205 class="cmtt-8">&#x00A0;</span><span
Chris@1 10206 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 10207 class="cmtt-8">&#x00A0;[partition\_count]</span><span
Chris@1 10208 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10209 class="cmtt-8">&#x00A0;0</span>
Chris@1 10210 <br class="fancyvrb" /><a
Chris@1 10211 id="x1-110028r6"></a><span
Chris@1 10212 class="cmr-6">6</span><span
Chris@1 10213 class="cmtt-8">&#x00A0;</span><span
Chris@1 10214 class="cmtt-8">&#x00A0;</span>
Chris@1 10215 <br class="fancyvrb" /><a
Chris@1 10216 id="x1-110030r7"></a><span
Chris@1 10217 class="cmr-6">7</span><span
Chris@1 10218 class="cmtt-8">&#x00A0;</span><span
Chris@1 10219 class="cmtt-8">&#x00A0;</span><span
Chris@1 10220 class="cmtt-8">&#x00A0;</span><span
Chris@1 10221 class="cmtt-8">&#x00A0;</span><span
Chris@1 10222 class="cmtt-8">&#x00A0;</span><span
Chris@1 10223 class="cmtt-8">&#x00A0;</span><span
Chris@1 10224 class="cmtt-8">&#x00A0;</span><span
Chris@1 10225 class="cmtt-8">&#x00A0;</span><span
Chris@1 10226 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 10227 class="cmtt-8">&#x00A0;while</span><span
Chris@1 10228 class="cmtt-8">&#x00A0;[partition\_count]</span><span
Chris@1 10229 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10230 class="cmtt-8">&#x00A0;less</span><span
Chris@1 10231 class="cmtt-8">&#x00A0;than</span><span
Chris@1 10232 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span>
Chris@1 10233 <br class="fancyvrb" /><a
Chris@1 10234 id="x1-110032r8"></a><span
Chris@1 10235 class="cmr-6">8</span><span
Chris@1 10236 class="cmtt-8">&#x00A0;</span><span
Chris@1 10237 class="cmtt-8">&#x00A0;</span>
Chris@1 10238 <br class="fancyvrb" /><a
Chris@1 10239 id="x1-110034r9"></a><span
Chris@1 10240 class="cmr-6">9</span><span
Chris@1 10241 class="cmtt-8">&#x00A0;</span><span
Chris@1 10242 class="cmtt-8">&#x00A0;</span><span
Chris@1 10243 class="cmtt-8">&#x00A0;</span><span
Chris@1 10244 class="cmtt-8">&#x00A0;</span><span
Chris@1 10245 class="cmtt-8">&#x00A0;</span><span
Chris@1 10246 class="cmtt-8">&#x00A0;</span><span
Chris@1 10247 class="cmtt-8">&#x00A0;</span><span
Chris@1 10248 class="cmtt-8">&#x00A0;</span><span
Chris@1 10249 class="cmtt-8">&#x00A0;</span><span
Chris@1 10250 class="cmtt-8">&#x00A0;</span><span
Chris@1 10251 class="cmtt-8">&#x00A0;</span><span
Chris@1 10252 class="cmtt-8">&#x00A0;</span><span
Chris@1 10253 class="cmtt-8">&#x00A0;</span><span
Chris@1 10254 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 10255 class="cmtt-8">&#x00A0;if</span><span
Chris@1 10256 class="cmtt-8">&#x00A0;([pass]</span><span
Chris@1 10257 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10258 class="cmtt-8">&#x00A0;zero)</span><span
Chris@1 10259 class="cmtt-8">&#x00A0;{</span>
Chris@1 10260 <br class="fancyvrb" /><a
Chris@1 10261 id="x1-110036r10"></a><span
Chris@1 10262 class="cmr-6">10</span><span
Chris@1 10263 class="cmtt-8">&#x00A0;</span><span
Chris@1 10264 class="cmtt-8">&#x00A0;</span>
Chris@1 10265 <br class="fancyvrb" /><a
Chris@1 10266 id="x1-110038r11"></a><span
Chris@1 10267 class="cmr-6">11</span><span
Chris@1 10268 class="cmtt-8">&#x00A0;</span><span
Chris@1 10269 class="cmtt-8">&#x00A0;</span><span
Chris@1 10270 class="cmtt-8">&#x00A0;</span><span
Chris@1 10271 class="cmtt-8">&#x00A0;</span><span
Chris@1 10272 class="cmtt-8">&#x00A0;</span><span
Chris@1 10273 class="cmtt-8">&#x00A0;</span><span
Chris@1 10274 class="cmtt-8">&#x00A0;</span><span
Chris@1 10275 class="cmtt-8">&#x00A0;</span><span
Chris@1 10276 class="cmtt-8">&#x00A0;</span><span
Chris@1 10277 class="cmtt-8">&#x00A0;</span><span
Chris@1 10278 class="cmtt-8">&#x00A0;</span><span
Chris@1 10279 class="cmtt-8">&#x00A0;</span><span
Chris@1 10280 class="cmtt-8">&#x00A0;</span><span
Chris@1 10281 class="cmtt-8">&#x00A0;</span><span
Chris@1 10282 class="cmtt-8">&#x00A0;</span><span
Chris@1 10283 class="cmtt-8">&#x00A0;</span><span
Chris@1 10284 class="cmtt-8">&#x00A0;</span><span
Chris@1 10285 class="cmtt-8">&#x00A0;</span><span
Chris@1 10286 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 10287 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 10288 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 10289 class="cmtt-8">&#x00A0;over</span><span
Chris@1 10290 class="cmtt-8">&#x00A0;the</span><span
Chris@1 10291 class="cmtt-8">&#x00A0;range</span><span
Chris@1 10292 class="cmtt-8">&#x00A0;0</span><span
Chris@1 10293 class="cmtt-8">&#x00A0;..</span><span
Chris@1 10294 class="cmtt-8">&#x00A0;[ch]-1</span><span
Chris@1 10295 class="cmtt-8">&#x00A0;{</span>
Chris@1 10296 <br class="fancyvrb" /><a
Chris@1 10297 id="x1-110040r12"></a><span
Chris@1 10298 class="cmr-6">12</span><span
Chris@1 10299 class="cmtt-8">&#x00A0;</span><span
Chris@1 10300 class="cmtt-8">&#x00A0;</span>
Chris@1 10301 <br class="fancyvrb" /><a
Chris@1 10302 id="x1-110042r13"></a><span
Chris@1 10303 class="cmr-6">13</span><span
Chris@1 10304 class="cmtt-8">&#x00A0;</span><span
Chris@1 10305 class="cmtt-8">&#x00A0;</span><span
Chris@1 10306 class="cmtt-8">&#x00A0;</span><span
Chris@1 10307 class="cmtt-8">&#x00A0;</span><span
Chris@1 10308 class="cmtt-8">&#x00A0;</span><span
Chris@1 10309 class="cmtt-8">&#x00A0;</span><span
Chris@1 10310 class="cmtt-8">&#x00A0;</span><span
Chris@1 10311 class="cmtt-8">&#x00A0;</span><span
Chris@1 10312 class="cmtt-8">&#x00A0;</span><span
Chris@1 10313 class="cmtt-8">&#x00A0;</span><span
Chris@1 10314 class="cmtt-8">&#x00A0;</span><span
Chris@1 10315 class="cmtt-8">&#x00A0;</span><span
Chris@1 10316 class="cmtt-8">&#x00A0;</span><span
Chris@1 10317 class="cmtt-8">&#x00A0;</span><span
Chris@1 10318 class="cmtt-8">&#x00A0;</span><span
Chris@1 10319 class="cmtt-8">&#x00A0;</span><span
Chris@1 10320 class="cmtt-8">&#x00A0;</span><span
Chris@1 10321 class="cmtt-8">&#x00A0;</span><span
Chris@1 10322 class="cmtt-8">&#x00A0;</span><span
Chris@1 10323 class="cmtt-8">&#x00A0;</span><span
Chris@1 10324 class="cmtt-8">&#x00A0;</span><span
Chris@1 10325 class="cmtt-8">&#x00A0;</span><span
Chris@1 10326 class="cmtt-8">&#x00A0;</span><span
Chris@1 10327 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 10328 class="cmtt-8">&#x00A0;if</span><span
Chris@1 10329 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 10330 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 10331 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10332 class="cmtt-8">&#x00A0;not</span><span
Chris@1 10333 class="cmtt-8">&#x00A0;marked</span><span
Chris@1 10334 class="cmtt-8">&#x00A0;&#8217;do</span><span
Chris@1 10335 class="cmtt-8">&#x00A0;not</span><span
Chris@1 10336 class="cmtt-8">&#x00A0;decode&#8217;</span><span
Chris@1 10337 class="cmtt-8">&#x00A0;{</span>
Chris@1 10338 <br class="fancyvrb" /><a
Chris@1 10339 id="x1-110044r14"></a><span
Chris@1 10340 class="cmr-6">14</span><span
Chris@1 10341 class="cmtt-8">&#x00A0;</span><span
Chris@1 10342 class="cmtt-8">&#x00A0;</span>
Chris@1 10343 <br class="fancyvrb" /><a
Chris@1 10344 id="x1-110046r15"></a><span
Chris@1 10345 class="cmr-6">15</span><span
Chris@1 10346 class="cmtt-8">&#x00A0;</span><span
Chris@1 10347 class="cmtt-8">&#x00A0;</span><span
Chris@1 10348 class="cmtt-8">&#x00A0;</span><span
Chris@1 10349 class="cmtt-8">&#x00A0;</span><span
Chris@1 10350 class="cmtt-8">&#x00A0;</span><span
Chris@1 10351 class="cmtt-8">&#x00A0;</span><span
Chris@1 10352 class="cmtt-8">&#x00A0;</span><span
Chris@1 10353 class="cmtt-8">&#x00A0;</span><span
Chris@1 10354 class="cmtt-8">&#x00A0;</span><span
Chris@1 10355 class="cmtt-8">&#x00A0;</span><span
Chris@1 10356 class="cmtt-8">&#x00A0;</span><span
Chris@1 10357 class="cmtt-8">&#x00A0;</span><span
Chris@1 10358 class="cmtt-8">&#x00A0;</span><span
Chris@1 10359 class="cmtt-8">&#x00A0;</span><span
Chris@1 10360 class="cmtt-8">&#x00A0;</span><span
Chris@1 10361 class="cmtt-8">&#x00A0;</span><span
Chris@1 10362 class="cmtt-8">&#x00A0;</span><span
Chris@1 10363 class="cmtt-8">&#x00A0;</span><span
Chris@1 10364 class="cmtt-8">&#x00A0;</span><span
Chris@1 10365 class="cmtt-8">&#x00A0;</span><span
Chris@1 10366 class="cmtt-8">&#x00A0;</span><span
Chris@1 10367 class="cmtt-8">&#x00A0;</span><span
Chris@1 10368 class="cmtt-8">&#x00A0;</span><span
Chris@1 10369 class="cmtt-8">&#x00A0;</span><span
Chris@1 10370 class="cmtt-8">&#x00A0;</span><span
Chris@1 10371 class="cmtt-8">&#x00A0;</span><span
Chris@1 10372 class="cmtt-8">&#x00A0;</span><span
Chris@1 10373 class="cmtt-8">&#x00A0;</span><span
Chris@1 10374 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 10375 class="cmtt-8">&#x00A0;[temp]</span><span
Chris@1 10376 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10377 class="cmtt-8">&#x00A0;read</span><span
Chris@1 10378 class="cmtt-8">&#x00A0;from</span><span
Chris@1 10379 class="cmtt-8">&#x00A0;packet</span><span
Chris@1 10380 class="cmtt-8">&#x00A0;using</span><span
Chris@1 10381 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 10382 class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
Chris@1 10383 class="cmtt-8">&#x00A0;in</span><span
Chris@1 10384 class="cmtt-8">&#x00A0;scalar</span><span
Chris@1 10385 class="cmtt-8">&#x00A0;context</span>
Chris@1 10386 <br class="fancyvrb" /><a
Chris@1 10387 id="x1-110048r16"></a><span
Chris@1 10388 class="cmr-6">16</span><span
Chris@1 10389 class="cmtt-8">&#x00A0;</span><span
Chris@1 10390 class="cmtt-8">&#x00A0;</span><span
Chris@1 10391 class="cmtt-8">&#x00A0;</span><span
Chris@1 10392 class="cmtt-8">&#x00A0;</span><span
Chris@1 10393 class="cmtt-8">&#x00A0;</span><span
Chris@1 10394 class="cmtt-8">&#x00A0;</span><span
Chris@1 10395 class="cmtt-8">&#x00A0;</span><span
Chris@1 10396 class="cmtt-8">&#x00A0;</span><span
Chris@1 10397 class="cmtt-8">&#x00A0;</span><span
Chris@1 10398 class="cmtt-8">&#x00A0;</span><span
Chris@1 10399 class="cmtt-8">&#x00A0;</span><span
Chris@1 10400 class="cmtt-8">&#x00A0;</span><span
Chris@1 10401 class="cmtt-8">&#x00A0;</span><span
Chris@1 10402 class="cmtt-8">&#x00A0;</span><span
Chris@1 10403 class="cmtt-8">&#x00A0;</span><span
Chris@1 10404 class="cmtt-8">&#x00A0;</span><span
Chris@1 10405 class="cmtt-8">&#x00A0;</span><span
Chris@1 10406 class="cmtt-8">&#x00A0;</span><span
Chris@1 10407 class="cmtt-8">&#x00A0;</span><span
Chris@1 10408 class="cmtt-8">&#x00A0;</span><span
Chris@1 10409 class="cmtt-8">&#x00A0;</span><span
Chris@1 10410 class="cmtt-8">&#x00A0;</span><span
Chris@1 10411 class="cmtt-8">&#x00A0;</span><span
Chris@1 10412 class="cmtt-8">&#x00A0;</span><span
Chris@1 10413 class="cmtt-8">&#x00A0;</span><span
Chris@1 10414 class="cmtt-8">&#x00A0;</span><span
Chris@1 10415 class="cmtt-8">&#x00A0;</span><span
Chris@1 10416 class="cmtt-8">&#x00A0;10)</span><span
Chris@1 10417 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 10418 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 10419 class="cmtt-8">&#x00A0;descending</span><span
Chris@1 10420 class="cmtt-8">&#x00A0;over</span><span
Chris@1 10421 class="cmtt-8">&#x00A0;the</span><span
Chris@1 10422 class="cmtt-8">&#x00A0;range</span><span
Chris@1 10423 class="cmtt-8">&#x00A0;[classwords\_per\_codeword]-1</span><span
Chris@1 10424 class="cmtt-8">&#x00A0;...</span><span
Chris@1 10425 class="cmtt-8">&#x00A0;0</span><span
Chris@1 10426 class="cmtt-8">&#x00A0;{</span>
Chris@1 10427 <br class="fancyvrb" /><a
Chris@1 10428 id="x1-110050r17"></a><span
Chris@1 10429 class="cmr-6">17</span><span
Chris@1 10430 class="cmtt-8">&#x00A0;</span><span
Chris@1 10431 class="cmtt-8">&#x00A0;</span>
Chris@1 10432 <br class="fancyvrb" /><a
Chris@1 10433 id="x1-110052r18"></a><span
Chris@1 10434 class="cmr-6">18</span><span
Chris@1 10435 class="cmtt-8">&#x00A0;</span><span
Chris@1 10436 class="cmtt-8">&#x00A0;</span><span
Chris@1 10437 class="cmtt-8">&#x00A0;</span><span
Chris@1 10438 class="cmtt-8">&#x00A0;</span><span
Chris@1 10439 class="cmtt-8">&#x00A0;</span><span
Chris@1 10440 class="cmtt-8">&#x00A0;</span><span
Chris@1 10441 class="cmtt-8">&#x00A0;</span><span
Chris@1 10442 class="cmtt-8">&#x00A0;</span><span
Chris@1 10443 class="cmtt-8">&#x00A0;</span><span
Chris@1 10444 class="cmtt-8">&#x00A0;</span><span
Chris@1 10445 class="cmtt-8">&#x00A0;</span><span
Chris@1 10446 class="cmtt-8">&#x00A0;</span><span
Chris@1 10447 class="cmtt-8">&#x00A0;</span><span
Chris@1 10448 class="cmtt-8">&#x00A0;</span><span
Chris@1 10449 class="cmtt-8">&#x00A0;</span><span
Chris@1 10450 class="cmtt-8">&#x00A0;</span><span
Chris@1 10451 class="cmtt-8">&#x00A0;</span><span
Chris@1 10452 class="cmtt-8">&#x00A0;</span><span
Chris@1 10453 class="cmtt-8">&#x00A0;</span><span
Chris@1 10454 class="cmtt-8">&#x00A0;</span><span
Chris@1 10455 class="cmtt-8">&#x00A0;</span><span
Chris@1 10456 class="cmtt-8">&#x00A0;</span><span
Chris@1 10457 class="cmtt-8">&#x00A0;</span><span
Chris@1 10458 class="cmtt-8">&#x00A0;</span><span
Chris@1 10459 class="cmtt-8">&#x00A0;</span><span
Chris@1 10460 class="cmtt-8">&#x00A0;</span><span
Chris@1 10461 class="cmtt-8">&#x00A0;</span><span
Chris@1 10462 class="cmtt-8">&#x00A0;</span><span
Chris@1 10463 class="cmtt-8">&#x00A0;</span><span
Chris@1 10464 class="cmtt-8">&#x00A0;</span><span
Chris@1 10465 class="cmtt-8">&#x00A0;</span><span
Chris@1 10466 class="cmtt-8">&#x00A0;</span><span
Chris@1 10467 class="cmtt-8">&#x00A0;11)</span><span
Chris@1 10468 class="cmtt-8">&#x00A0;array</span><span
Chris@1 10469 class="cmtt-8">&#x00A0;[classifications]</span><span
Chris@1 10470 class="cmtt-8">&#x00A0;element</span><span
Chris@1 10471 class="cmtt-8">&#x00A0;[j],([i]+[partition\_count])</span><span
Chris@1 10472 class="cmtt-8">&#x00A0;=</span>
Chris@1 10473 <br class="fancyvrb" /><a
Chris@1 10474 id="x1-110054r19"></a><span
Chris@1 10475 class="cmr-6">19</span><span
Chris@1 10476 class="cmtt-8">&#x00A0;</span><span
Chris@1 10477 class="cmtt-8">&#x00A0;</span><span
Chris@1 10478 class="cmtt-8">&#x00A0;</span><span
Chris@1 10479 class="cmtt-8">&#x00A0;</span><span
Chris@1 10480 class="cmtt-8">&#x00A0;</span><span
Chris@1 10481 class="cmtt-8">&#x00A0;</span><span
Chris@1 10482 class="cmtt-8">&#x00A0;</span><span
Chris@1 10483 class="cmtt-8">&#x00A0;</span><span
Chris@1 10484 class="cmtt-8">&#x00A0;</span><span
Chris@1 10485 class="cmtt-8">&#x00A0;</span><span
Chris@1 10486 class="cmtt-8">&#x00A0;</span><span
Chris@1 10487 class="cmtt-8">&#x00A0;</span><span
Chris@1 10488 class="cmtt-8">&#x00A0;</span><span
Chris@1 10489 class="cmtt-8">&#x00A0;</span><span
Chris@1 10490 class="cmtt-8">&#x00A0;</span><span
Chris@1 10491 class="cmtt-8">&#x00A0;</span><span
Chris@1 10492 class="cmtt-8">&#x00A0;</span><span
Chris@1 10493 class="cmtt-8">&#x00A0;</span><span
Chris@1 10494 class="cmtt-8">&#x00A0;</span><span
Chris@1 10495 class="cmtt-8">&#x00A0;</span><span
Chris@1 10496 class="cmtt-8">&#x00A0;</span><span
Chris@1 10497 class="cmtt-8">&#x00A0;</span><span
Chris@1 10498 class="cmtt-8">&#x00A0;</span><span
Chris@1 10499 class="cmtt-8">&#x00A0;</span><span
Chris@1 10500 class="cmtt-8">&#x00A0;</span><span
Chris@1 10501 class="cmtt-8">&#x00A0;</span><span
Chris@1 10502 class="cmtt-8">&#x00A0;</span><span
Chris@1 10503 class="cmtt-8">&#x00A0;</span><span
Chris@1 10504 class="cmtt-8">&#x00A0;</span><span
Chris@1 10505 class="cmtt-8">&#x00A0;</span><span
Chris@1 10506 class="cmtt-8">&#x00A0;</span><span
Chris@1 10507 class="cmtt-8">&#x00A0;</span><span
Chris@1 10508 class="cmtt-8">&#x00A0;</span><span
Chris@1 10509 class="cmtt-8">&#x00A0;</span><span
Chris@1 10510 class="cmtt-8">&#x00A0;</span><span
Chris@1 10511 class="cmtt-8">&#x00A0;</span><span
Chris@1 10512 class="cmtt-8">&#x00A0;[temp]</span><span
Chris@1 10513 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 10514 class="cmtt-8">&#x00A0;modulo</span><span
Chris@1 10515 class="cmtt-8">&#x00A0;[residue\_classifications]</span>
Chris@1 10516 <br class="fancyvrb" /><a
Chris@1 10517 id="x1-110056r20"></a><span
Chris@1 10518 class="cmr-6">20</span><span
Chris@1 10519 class="cmtt-8">&#x00A0;</span><span
Chris@1 10520 class="cmtt-8">&#x00A0;</span><span
Chris@1 10521 class="cmtt-8">&#x00A0;</span><span
Chris@1 10522 class="cmtt-8">&#x00A0;</span><span
Chris@1 10523 class="cmtt-8">&#x00A0;</span><span
Chris@1 10524 class="cmtt-8">&#x00A0;</span><span
Chris@1 10525 class="cmtt-8">&#x00A0;</span><span
Chris@1 10526 class="cmtt-8">&#x00A0;</span><span
Chris@1 10527 class="cmtt-8">&#x00A0;</span><span
Chris@1 10528 class="cmtt-8">&#x00A0;</span><span
Chris@1 10529 class="cmtt-8">&#x00A0;</span><span
Chris@1 10530 class="cmtt-8">&#x00A0;</span><span
Chris@1 10531 class="cmtt-8">&#x00A0;</span><span
Chris@1 10532 class="cmtt-8">&#x00A0;</span><span
Chris@1 10533 class="cmtt-8">&#x00A0;</span><span
Chris@1 10534 class="cmtt-8">&#x00A0;</span><span
Chris@1 10535 class="cmtt-8">&#x00A0;</span><span
Chris@1 10536 class="cmtt-8">&#x00A0;</span><span
Chris@1 10537 class="cmtt-8">&#x00A0;</span><span
Chris@1 10538 class="cmtt-8">&#x00A0;</span><span
Chris@1 10539 class="cmtt-8">&#x00A0;</span><span
Chris@1 10540 class="cmtt-8">&#x00A0;</span><span
Chris@1 10541 class="cmtt-8">&#x00A0;</span><span
Chris@1 10542 class="cmtt-8">&#x00A0;</span><span
Chris@1 10543 class="cmtt-8">&#x00A0;</span><span
Chris@1 10544 class="cmtt-8">&#x00A0;</span><span
Chris@1 10545 class="cmtt-8">&#x00A0;</span><span
Chris@1 10546 class="cmtt-8">&#x00A0;</span><span
Chris@1 10547 class="cmtt-8">&#x00A0;</span><span
Chris@1 10548 class="cmtt-8">&#x00A0;</span><span
Chris@1 10549 class="cmtt-8">&#x00A0;</span><span
Chris@1 10550 class="cmtt-8">&#x00A0;</span><span
Chris@1 10551 class="cmtt-8">&#x00A0;12)</span><span
Chris@1 10552 class="cmtt-8">&#x00A0;[temp]</span><span
Chris@1 10553 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10554 class="cmtt-8">&#x00A0;[temp]</span><span
Chris@1 10555 class="cmtt-8">&#x00A0;/</span><span
Chris@1 10556 class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
Chris@1 10557 class="cmtt-8">&#x00A0;using</span><span
Chris@1 10558 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 10559 class="cmtt-8">&#x00A0;division</span>
Chris@1 10560 <br class="fancyvrb" /><a
Chris@1 10561 id="x1-110058r21"></a><span
Chris@1 10562 class="cmr-6">21</span><span
Chris@1 10563 class="cmtt-8">&#x00A0;</span><span
Chris@1 10564 class="cmtt-8">&#x00A0;</span>
Chris@1 10565 <br class="fancyvrb" /><a
Chris@1 10566 id="x1-110060r22"></a><span
Chris@1 10567 class="cmr-6">22</span><span
Chris@1 10568 class="cmtt-8">&#x00A0;</span><span
Chris@1 10569 class="cmtt-8">&#x00A0;</span><span
Chris@1 10570 class="cmtt-8">&#x00A0;</span><span
Chris@1 10571 class="cmtt-8">&#x00A0;</span><span
Chris@1 10572 class="cmtt-8">&#x00A0;</span><span
Chris@1 10573 class="cmtt-8">&#x00A0;</span><span
Chris@1 10574 class="cmtt-8">&#x00A0;</span><span
Chris@1 10575 class="cmtt-8">&#x00A0;</span><span
Chris@1 10576 class="cmtt-8">&#x00A0;</span><span
Chris@1 10577 class="cmtt-8">&#x00A0;</span><span
Chris@1 10578 class="cmtt-8">&#x00A0;</span><span
Chris@1 10579 class="cmtt-8">&#x00A0;</span><span
Chris@1 10580 class="cmtt-8">&#x00A0;</span><span
Chris@1 10581 class="cmtt-8">&#x00A0;</span><span
Chris@1 10582 class="cmtt-8">&#x00A0;</span><span
Chris@1 10583 class="cmtt-8">&#x00A0;</span><span
Chris@1 10584 class="cmtt-8">&#x00A0;</span><span
Chris@1 10585 class="cmtt-8">&#x00A0;</span><span
Chris@1 10586 class="cmtt-8">&#x00A0;</span><span
Chris@1 10587 class="cmtt-8">&#x00A0;</span><span
Chris@1 10588 class="cmtt-8">&#x00A0;</span><span
Chris@1 10589 class="cmtt-8">&#x00A0;</span><span
Chris@1 10590 class="cmtt-8">&#x00A0;</span><span
Chris@1 10591 class="cmtt-8">&#x00A0;</span><span
Chris@1 10592 class="cmtt-8">&#x00A0;</span><span
Chris@1 10593 class="cmtt-8">&#x00A0;</span><span
Chris@1 10594 class="cmtt-8">&#x00A0;</span><span
Chris@1 10595 class="cmtt-8">&#x00A0;</span><span
Chris@1 10596 class="cmtt-8">&#x00A0;</span><span
Chris@1 10597 class="cmtt-8">&#x00A0;</span><span
Chris@1 10598 class="cmtt-8">&#x00A0;</span><span
Chris@1 10599 class="cmtt-8">&#x00A0;}</span>
Chris@1 10600 <br class="fancyvrb" /><a
Chris@1 10601 id="x1-110062r23"></a><span
Chris@1 10602 class="cmr-6">23</span><span
Chris@1 10603 class="cmtt-8">&#x00A0;</span><span
Chris@1 10604 class="cmtt-8">&#x00A0;</span>
Chris@1 10605 <br class="fancyvrb" /><a
Chris@1 10606 id="x1-110064r24"></a><span
Chris@1 10607 class="cmr-6">24</span><span
Chris@1 10608 class="cmtt-8">&#x00A0;</span><span
Chris@1 10609 class="cmtt-8">&#x00A0;</span><span
Chris@1 10610 class="cmtt-8">&#x00A0;</span><span
Chris@1 10611 class="cmtt-8">&#x00A0;</span><span
Chris@1 10612 class="cmtt-8">&#x00A0;</span><span
Chris@1 10613 class="cmtt-8">&#x00A0;</span><span
Chris@1 10614 class="cmtt-8">&#x00A0;</span><span
Chris@1 10615 class="cmtt-8">&#x00A0;</span><span
Chris@1 10616 class="cmtt-8">&#x00A0;</span><span
Chris@1 10617 class="cmtt-8">&#x00A0;</span><span
Chris@1 10618 class="cmtt-8">&#x00A0;</span><span
Chris@1 10619 class="cmtt-8">&#x00A0;</span><span
Chris@1 10620 class="cmtt-8">&#x00A0;</span><span
Chris@1 10621 class="cmtt-8">&#x00A0;</span><span
Chris@1 10622 class="cmtt-8">&#x00A0;</span><span
Chris@1 10623 class="cmtt-8">&#x00A0;</span><span
Chris@1 10624 class="cmtt-8">&#x00A0;</span><span
Chris@1 10625 class="cmtt-8">&#x00A0;</span><span
Chris@1 10626 class="cmtt-8">&#x00A0;</span><span
Chris@1 10627 class="cmtt-8">&#x00A0;</span><span
Chris@1 10628 class="cmtt-8">&#x00A0;</span><span
Chris@1 10629 class="cmtt-8">&#x00A0;</span><span
Chris@1 10630 class="cmtt-8">&#x00A0;</span><span
Chris@1 10631 class="cmtt-8">&#x00A0;</span><span
Chris@1 10632 class="cmtt-8">&#x00A0;</span><span
Chris@1 10633 class="cmtt-8">&#x00A0;</span><span
Chris@1 10634 class="cmtt-8">&#x00A0;}</span>
Chris@1 10635 <br class="fancyvrb" /><a
Chris@1 10636 id="x1-110066r25"></a><span
Chris@1 10637 class="cmr-6">25</span><span
Chris@1 10638 class="cmtt-8">&#x00A0;</span><span
Chris@1 10639 class="cmtt-8">&#x00A0;</span>
Chris@1 10640 <br class="fancyvrb" /><a
Chris@1 10641 id="x1-110068r26"></a><span
Chris@1 10642 class="cmr-6">26</span><span
Chris@1 10643 class="cmtt-8">&#x00A0;</span><span
Chris@1 10644 class="cmtt-8">&#x00A0;</span><span
Chris@1 10645 class="cmtt-8">&#x00A0;</span><span
Chris@1 10646 class="cmtt-8">&#x00A0;</span><span
Chris@1 10647 class="cmtt-8">&#x00A0;</span><span
Chris@1 10648 class="cmtt-8">&#x00A0;</span><span
Chris@1 10649 class="cmtt-8">&#x00A0;</span><span
Chris@1 10650 class="cmtt-8">&#x00A0;</span><span
Chris@1 10651 class="cmtt-8">&#x00A0;</span><span
Chris@1 10652 class="cmtt-8">&#x00A0;</span><span
Chris@1 10653 class="cmtt-8">&#x00A0;</span><span
Chris@1 10654 class="cmtt-8">&#x00A0;</span><span
Chris@1 10655 class="cmtt-8">&#x00A0;</span><span
Chris@1 10656 class="cmtt-8">&#x00A0;</span><span
Chris@1 10657 class="cmtt-8">&#x00A0;</span><span
Chris@1 10658 class="cmtt-8">&#x00A0;</span><span
Chris@1 10659 class="cmtt-8">&#x00A0;</span><span
Chris@1 10660 class="cmtt-8">&#x00A0;</span><span
Chris@1 10661 class="cmtt-8">&#x00A0;</span><span
Chris@1 10662 class="cmtt-8">&#x00A0;</span><span
Chris@1 10663 class="cmtt-8">&#x00A0;</span><span
Chris@1 10664 class="cmtt-8">&#x00A0;}</span>
Chris@1 10665 <br class="fancyvrb" /><a
Chris@1 10666 id="x1-110070r27"></a><span
Chris@1 10667 class="cmr-6">27</span><span
Chris@1 10668 class="cmtt-8">&#x00A0;</span><span
Chris@1 10669 class="cmtt-8">&#x00A0;</span>
Chris@1 10670 <br class="fancyvrb" /><a
Chris@1 10671 id="x1-110072r28"></a><span
Chris@1 10672 class="cmr-6">28</span><span
Chris@1 10673 class="cmtt-8">&#x00A0;</span><span
Chris@1 10674 class="cmtt-8">&#x00A0;</span><span
Chris@1 10675 class="cmtt-8">&#x00A0;</span><span
Chris@1 10676 class="cmtt-8">&#x00A0;</span><span
Chris@1 10677 class="cmtt-8">&#x00A0;</span><span
Chris@1 10678 class="cmtt-8">&#x00A0;</span><span
Chris@1 10679 class="cmtt-8">&#x00A0;</span><span
Chris@1 10680 class="cmtt-8">&#x00A0;</span><span
Chris@1 10681 class="cmtt-8">&#x00A0;</span><span
Chris@1 10682 class="cmtt-8">&#x00A0;</span><span
Chris@1 10683 class="cmtt-8">&#x00A0;</span><span
Chris@1 10684 class="cmtt-8">&#x00A0;</span><span
Chris@1 10685 class="cmtt-8">&#x00A0;</span><span
Chris@1 10686 class="cmtt-8">&#x00A0;</span><span
Chris@1 10687 class="cmtt-8">&#x00A0;</span><span
Chris@1 10688 class="cmtt-8">&#x00A0;</span><span
Chris@1 10689 class="cmtt-8">&#x00A0;}</span>
Chris@1 10690 <br class="fancyvrb" /><a
Chris@1 10691 id="x1-110074r29"></a><span
Chris@1 10692 class="cmr-6">29</span><span
Chris@1 10693 class="cmtt-8">&#x00A0;</span><span
Chris@1 10694 class="cmtt-8">&#x00A0;</span>
Chris@1 10695 <br class="fancyvrb" /><a
Chris@1 10696 id="x1-110076r30"></a><span
Chris@1 10697 class="cmr-6">30</span><span
Chris@1 10698 class="cmtt-8">&#x00A0;</span><span
Chris@1 10699 class="cmtt-8">&#x00A0;</span><span
Chris@1 10700 class="cmtt-8">&#x00A0;</span><span
Chris@1 10701 class="cmtt-8">&#x00A0;</span><span
Chris@1 10702 class="cmtt-8">&#x00A0;</span><span
Chris@1 10703 class="cmtt-8">&#x00A0;</span><span
Chris@1 10704 class="cmtt-8">&#x00A0;</span><span
Chris@1 10705 class="cmtt-8">&#x00A0;</span><span
Chris@1 10706 class="cmtt-8">&#x00A0;</span><span
Chris@1 10707 class="cmtt-8">&#x00A0;</span><span
Chris@1 10708 class="cmtt-8">&#x00A0;</span><span
Chris@1 10709 class="cmtt-8">&#x00A0;</span><span
Chris@1 10710 class="cmtt-8">&#x00A0;13)</span><span
Chris@1 10711 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 10712 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 10713 class="cmtt-8">&#x00A0;over</span><span
Chris@1 10714 class="cmtt-8">&#x00A0;the</span><span
Chris@1 10715 class="cmtt-8">&#x00A0;range</span><span
Chris@1 10716 class="cmtt-8">&#x00A0;0</span><span
Chris@1 10717 class="cmtt-8">&#x00A0;..</span><span
Chris@1 10718 class="cmtt-8">&#x00A0;([classwords\_per\_codeword]</span><span
Chris@1 10719 class="cmtt-8">&#x00A0;-</span><span
Chris@1 10720 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 10721 class="cmtt-8">&#x00A0;while</span><span
Chris@1 10722 class="cmtt-8">&#x00A0;[partition\_count]</span>
Chris@1 10723 <br class="fancyvrb" /><a
Chris@1 10724 id="x1-110078r31"></a><span
Chris@1 10725 class="cmr-6">31</span><span
Chris@1 10726 class="cmtt-8">&#x00A0;</span><span
Chris@1 10727 class="cmtt-8">&#x00A0;</span><span
Chris@1 10728 class="cmtt-8">&#x00A0;</span><span
Chris@1 10729 class="cmtt-8">&#x00A0;</span><span
Chris@1 10730 class="cmtt-8">&#x00A0;</span><span
Chris@1 10731 class="cmtt-8">&#x00A0;</span><span
Chris@1 10732 class="cmtt-8">&#x00A0;</span><span
Chris@1 10733 class="cmtt-8">&#x00A0;</span><span
Chris@1 10734 class="cmtt-8">&#x00A0;</span><span
Chris@1 10735 class="cmtt-8">&#x00A0;</span><span
Chris@1 10736 class="cmtt-8">&#x00A0;</span><span
Chris@1 10737 class="cmtt-8">&#x00A0;</span><span
Chris@1 10738 class="cmtt-8">&#x00A0;</span><span
Chris@1 10739 class="cmtt-8">&#x00A0;</span><span
Chris@1 10740 class="cmtt-8">&#x00A0;</span><span
Chris@1 10741 class="cmtt-8">&#x00A0;</span><span
Chris@1 10742 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10743 class="cmtt-8">&#x00A0;also</span><span
Chris@1 10744 class="cmtt-8">&#x00A0;less</span><span
Chris@1 10745 class="cmtt-8">&#x00A0;than</span><span
Chris@1 10746 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
Chris@1 10747 class="cmtt-8">&#x00A0;{</span>
Chris@1 10748 <br class="fancyvrb" /><a
Chris@1 10749 id="x1-110080r32"></a><span
Chris@1 10750 class="cmr-6">32</span><span
Chris@1 10751 class="cmtt-8">&#x00A0;</span><span
Chris@1 10752 class="cmtt-8">&#x00A0;</span>
Chris@1 10753 <br class="fancyvrb" /><a
Chris@1 10754 id="x1-110082r33"></a><span
Chris@1 10755 class="cmr-6">33</span><span
Chris@1 10756 class="cmtt-8">&#x00A0;</span><span
Chris@1 10757 class="cmtt-8">&#x00A0;</span><span
Chris@1 10758 class="cmtt-8">&#x00A0;</span><span
Chris@1 10759 class="cmtt-8">&#x00A0;</span><span
Chris@1 10760 class="cmtt-8">&#x00A0;</span><span
Chris@1 10761 class="cmtt-8">&#x00A0;</span><span
Chris@1 10762 class="cmtt-8">&#x00A0;</span><span
Chris@1 10763 class="cmtt-8">&#x00A0;</span><span
Chris@1 10764 class="cmtt-8">&#x00A0;</span><span
Chris@1 10765 class="cmtt-8">&#x00A0;</span><span
Chris@1 10766 class="cmtt-8">&#x00A0;</span><span
Chris@1 10767 class="cmtt-8">&#x00A0;</span><span
Chris@1 10768 class="cmtt-8">&#x00A0;</span><span
Chris@1 10769 class="cmtt-8">&#x00A0;</span><span
Chris@1 10770 class="cmtt-8">&#x00A0;</span><span
Chris@1 10771 class="cmtt-8">&#x00A0;</span><span
Chris@1 10772 class="cmtt-8">&#x00A0;</span><span
Chris@1 10773 class="cmtt-8">&#x00A0;</span><span
Chris@1 10774 class="cmtt-8">&#x00A0;14)</span><span
Chris@1 10775 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 10776 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 10777 class="cmtt-8">&#x00A0;over</span><span
Chris@1 10778 class="cmtt-8">&#x00A0;the</span><span
Chris@1 10779 class="cmtt-8">&#x00A0;range</span><span
Chris@1 10780 class="cmtt-8">&#x00A0;0</span><span
Chris@1 10781 class="cmtt-8">&#x00A0;..</span><span
Chris@1 10782 class="cmtt-8">&#x00A0;[ch]-1</span><span
Chris@1 10783 class="cmtt-8">&#x00A0;{</span>
Chris@1 10784 <br class="fancyvrb" /><a
Chris@1 10785 id="x1-110084r34"></a><span
Chris@1 10786 class="cmr-6">34</span><span
Chris@1 10787 class="cmtt-8">&#x00A0;</span><span
Chris@1 10788 class="cmtt-8">&#x00A0;</span>
Chris@1 10789 <br class="fancyvrb" /><a
Chris@1 10790 id="x1-110086r35"></a><span
Chris@1 10791 class="cmr-6">35</span><span
Chris@1 10792 class="cmtt-8">&#x00A0;</span><span
Chris@1 10793 class="cmtt-8">&#x00A0;</span><span
Chris@1 10794 class="cmtt-8">&#x00A0;</span><span
Chris@1 10795 class="cmtt-8">&#x00A0;</span><span
Chris@1 10796 class="cmtt-8">&#x00A0;</span><span
Chris@1 10797 class="cmtt-8">&#x00A0;</span><span
Chris@1 10798 class="cmtt-8">&#x00A0;</span><span
Chris@1 10799 class="cmtt-8">&#x00A0;</span><span
Chris@1 10800 class="cmtt-8">&#x00A0;</span><span
Chris@1 10801 class="cmtt-8">&#x00A0;</span><span
Chris@1 10802 class="cmtt-8">&#x00A0;</span><span
Chris@1 10803 class="cmtt-8">&#x00A0;</span><span
Chris@1 10804 class="cmtt-8">&#x00A0;</span><span
Chris@1 10805 class="cmtt-8">&#x00A0;</span><span
Chris@1 10806 class="cmtt-8">&#x00A0;</span><span
Chris@1 10807 class="cmtt-8">&#x00A0;</span><span
Chris@1 10808 class="cmtt-8">&#x00A0;</span><span
Chris@1 10809 class="cmtt-8">&#x00A0;</span><span
Chris@1 10810 class="cmtt-8">&#x00A0;</span><span
Chris@1 10811 class="cmtt-8">&#x00A0;</span><span
Chris@1 10812 class="cmtt-8">&#x00A0;</span><span
Chris@1 10813 class="cmtt-8">&#x00A0;</span><span
Chris@1 10814 class="cmtt-8">&#x00A0;</span><span
Chris@1 10815 class="cmtt-8">&#x00A0;15)</span><span
Chris@1 10816 class="cmtt-8">&#x00A0;if</span><span
Chris@1 10817 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 10818 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 10819 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10820 class="cmtt-8">&#x00A0;not</span><span
Chris@1 10821 class="cmtt-8">&#x00A0;marked</span><span
Chris@1 10822 class="cmtt-8">&#x00A0;&#8217;do</span><span
Chris@1 10823 class="cmtt-8">&#x00A0;not</span><span
Chris@1 10824 class="cmtt-8">&#x00A0;decode&#8217;</span><span
Chris@1 10825 class="cmtt-8">&#x00A0;{</span>
Chris@1 10826 <br class="fancyvrb" /><a
Chris@1 10827 id="x1-110088r36"></a><span
Chris@1 10828 class="cmr-6">36</span><span
Chris@1 10829 class="cmtt-8">&#x00A0;</span><span
Chris@1 10830 class="cmtt-8">&#x00A0;</span>
Chris@1 10831 <br class="fancyvrb" /><a
Chris@1 10832 id="x1-110090r37"></a><span
Chris@1 10833 class="cmr-6">37</span><span
Chris@1 10834 class="cmtt-8">&#x00A0;</span><span
Chris@1 10835 class="cmtt-8">&#x00A0;</span><span
Chris@1 10836 class="cmtt-8">&#x00A0;</span><span
Chris@1 10837 class="cmtt-8">&#x00A0;</span><span
Chris@1 10838 class="cmtt-8">&#x00A0;</span><span
Chris@1 10839 class="cmtt-8">&#x00A0;</span><span
Chris@1 10840 class="cmtt-8">&#x00A0;</span><span
Chris@1 10841 class="cmtt-8">&#x00A0;</span><span
Chris@1 10842 class="cmtt-8">&#x00A0;</span><span
Chris@1 10843 class="cmtt-8">&#x00A0;</span><span
Chris@1 10844 class="cmtt-8">&#x00A0;</span><span
Chris@1 10845 class="cmtt-8">&#x00A0;</span><span
Chris@1 10846 class="cmtt-8">&#x00A0;</span><span
Chris@1 10847 class="cmtt-8">&#x00A0;</span><span
Chris@1 10848 class="cmtt-8">&#x00A0;</span><span
Chris@1 10849 class="cmtt-8">&#x00A0;</span><span
Chris@1 10850 class="cmtt-8">&#x00A0;</span><span
Chris@1 10851 class="cmtt-8">&#x00A0;</span><span
Chris@1 10852 class="cmtt-8">&#x00A0;</span><span
Chris@1 10853 class="cmtt-8">&#x00A0;</span><span
Chris@1 10854 class="cmtt-8">&#x00A0;</span><span
Chris@1 10855 class="cmtt-8">&#x00A0;</span><span
Chris@1 10856 class="cmtt-8">&#x00A0;</span><span
Chris@1 10857 class="cmtt-8">&#x00A0;</span><span
Chris@1 10858 class="cmtt-8">&#x00A0;</span><span
Chris@1 10859 class="cmtt-8">&#x00A0;</span><span
Chris@1 10860 class="cmtt-8">&#x00A0;</span><span
Chris@1 10861 class="cmtt-8">&#x00A0;</span><span
Chris@1 10862 class="cmtt-8">&#x00A0;16)</span><span
Chris@1 10863 class="cmtt-8">&#x00A0;[vqclass]</span><span
Chris@1 10864 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10865 class="cmtt-8">&#x00A0;array</span><span
Chris@1 10866 class="cmtt-8">&#x00A0;[classifications]</span><span
Chris@1 10867 class="cmtt-8">&#x00A0;element</span><span
Chris@1 10868 class="cmtt-8">&#x00A0;[j],[partition\_count]</span>
Chris@1 10869 <br class="fancyvrb" /><a
Chris@1 10870 id="x1-110092r38"></a><span
Chris@1 10871 class="cmr-6">38</span><span
Chris@1 10872 class="cmtt-8">&#x00A0;</span><span
Chris@1 10873 class="cmtt-8">&#x00A0;</span><span
Chris@1 10874 class="cmtt-8">&#x00A0;</span><span
Chris@1 10875 class="cmtt-8">&#x00A0;</span><span
Chris@1 10876 class="cmtt-8">&#x00A0;</span><span
Chris@1 10877 class="cmtt-8">&#x00A0;</span><span
Chris@1 10878 class="cmtt-8">&#x00A0;</span><span
Chris@1 10879 class="cmtt-8">&#x00A0;</span><span
Chris@1 10880 class="cmtt-8">&#x00A0;</span><span
Chris@1 10881 class="cmtt-8">&#x00A0;</span><span
Chris@1 10882 class="cmtt-8">&#x00A0;</span><span
Chris@1 10883 class="cmtt-8">&#x00A0;</span><span
Chris@1 10884 class="cmtt-8">&#x00A0;</span><span
Chris@1 10885 class="cmtt-8">&#x00A0;</span><span
Chris@1 10886 class="cmtt-8">&#x00A0;</span><span
Chris@1 10887 class="cmtt-8">&#x00A0;</span><span
Chris@1 10888 class="cmtt-8">&#x00A0;</span><span
Chris@1 10889 class="cmtt-8">&#x00A0;</span><span
Chris@1 10890 class="cmtt-8">&#x00A0;</span><span
Chris@1 10891 class="cmtt-8">&#x00A0;</span><span
Chris@1 10892 class="cmtt-8">&#x00A0;</span><span
Chris@1 10893 class="cmtt-8">&#x00A0;</span><span
Chris@1 10894 class="cmtt-8">&#x00A0;</span><span
Chris@1 10895 class="cmtt-8">&#x00A0;</span><span
Chris@1 10896 class="cmtt-8">&#x00A0;</span><span
Chris@1 10897 class="cmtt-8">&#x00A0;</span><span
Chris@1 10898 class="cmtt-8">&#x00A0;</span><span
Chris@1 10899 class="cmtt-8">&#x00A0;</span><span
Chris@1 10900 class="cmtt-8">&#x00A0;17)</span><span
Chris@1 10901 class="cmtt-8">&#x00A0;[vqbook]</span><span
Chris@1 10902 class="cmtt-8">&#x00A0;=</span><span
Chris@1 10903 class="cmtt-8">&#x00A0;array</span><span
Chris@1 10904 class="cmtt-8">&#x00A0;[residue\_books]</span><span
Chris@1 10905 class="cmtt-8">&#x00A0;element</span><span
Chris@1 10906 class="cmtt-8">&#x00A0;[vqclass],[pass]</span>
Chris@1 10907 <br class="fancyvrb" /><a
Chris@1 10908 id="x1-110094r39"></a><span
Chris@1 10909 class="cmr-6">39</span><span
Chris@1 10910 class="cmtt-8">&#x00A0;</span><span
Chris@1 10911 class="cmtt-8">&#x00A0;</span><span
Chris@1 10912 class="cmtt-8">&#x00A0;</span><span
Chris@1 10913 class="cmtt-8">&#x00A0;</span><span
Chris@1 10914 class="cmtt-8">&#x00A0;</span><span
Chris@1 10915 class="cmtt-8">&#x00A0;</span><span
Chris@1 10916 class="cmtt-8">&#x00A0;</span><span
Chris@1 10917 class="cmtt-8">&#x00A0;</span><span
Chris@1 10918 class="cmtt-8">&#x00A0;</span><span
Chris@1 10919 class="cmtt-8">&#x00A0;</span><span
Chris@1 10920 class="cmtt-8">&#x00A0;</span><span
Chris@1 10921 class="cmtt-8">&#x00A0;</span><span
Chris@1 10922 class="cmtt-8">&#x00A0;</span><span
Chris@1 10923 class="cmtt-8">&#x00A0;</span><span
Chris@1 10924 class="cmtt-8">&#x00A0;</span><span
Chris@1 10925 class="cmtt-8">&#x00A0;</span><span
Chris@1 10926 class="cmtt-8">&#x00A0;</span><span
Chris@1 10927 class="cmtt-8">&#x00A0;</span><span
Chris@1 10928 class="cmtt-8">&#x00A0;</span><span
Chris@1 10929 class="cmtt-8">&#x00A0;</span><span
Chris@1 10930 class="cmtt-8">&#x00A0;</span><span
Chris@1 10931 class="cmtt-8">&#x00A0;</span><span
Chris@1 10932 class="cmtt-8">&#x00A0;</span><span
Chris@1 10933 class="cmtt-8">&#x00A0;</span><span
Chris@1 10934 class="cmtt-8">&#x00A0;</span><span
Chris@1 10935 class="cmtt-8">&#x00A0;</span><span
Chris@1 10936 class="cmtt-8">&#x00A0;</span><span
Chris@1 10937 class="cmtt-8">&#x00A0;</span><span
Chris@1 10938 class="cmtt-8">&#x00A0;18)</span><span
Chris@1 10939 class="cmtt-8">&#x00A0;if</span><span
Chris@1 10940 class="cmtt-8">&#x00A0;([vqbook]</span><span
Chris@1 10941 class="cmtt-8">&#x00A0;is</span><span
Chris@1 10942 class="cmtt-8">&#x00A0;not</span><span
Chris@1 10943 class="cmtt-8">&#x00A0;&#8217;unused&#8217;)</span><span
Chris@1 10944 class="cmtt-8">&#x00A0;{</span>
Chris@1 10945 <br class="fancyvrb" /><a
Chris@1 10946 id="x1-110096r40"></a><span
Chris@1 10947 class="cmr-6">40</span><span
Chris@1 10948 class="cmtt-8">&#x00A0;</span><span
Chris@1 10949 class="cmtt-8">&#x00A0;</span>
Chris@1 10950 <br class="fancyvrb" /><a
Chris@1 10951 id="x1-110098r41"></a><span
Chris@1 10952 class="cmr-6">41</span><span
Chris@1 10953 class="cmtt-8">&#x00A0;</span><span
Chris@1 10954 class="cmtt-8">&#x00A0;</span><span
Chris@1 10955 class="cmtt-8">&#x00A0;</span><span
Chris@1 10956 class="cmtt-8">&#x00A0;</span><span
Chris@1 10957 class="cmtt-8">&#x00A0;</span><span
Chris@1 10958 class="cmtt-8">&#x00A0;</span><span
Chris@1 10959 class="cmtt-8">&#x00A0;</span><span
Chris@1 10960 class="cmtt-8">&#x00A0;</span><span
Chris@1 10961 class="cmtt-8">&#x00A0;</span><span
Chris@1 10962 class="cmtt-8">&#x00A0;</span><span
Chris@1 10963 class="cmtt-8">&#x00A0;</span><span
Chris@1 10964 class="cmtt-8">&#x00A0;</span><span
Chris@1 10965 class="cmtt-8">&#x00A0;</span><span
Chris@1 10966 class="cmtt-8">&#x00A0;</span><span
Chris@1 10967 class="cmtt-8">&#x00A0;</span><span
Chris@1 10968 class="cmtt-8">&#x00A0;</span><span
Chris@1 10969 class="cmtt-8">&#x00A0;</span><span
Chris@1 10970 class="cmtt-8">&#x00A0;</span><span
Chris@1 10971 class="cmtt-8">&#x00A0;</span><span
Chris@1 10972 class="cmtt-8">&#x00A0;</span><span
Chris@1 10973 class="cmtt-8">&#x00A0;</span><span
Chris@1 10974 class="cmtt-8">&#x00A0;</span><span
Chris@1 10975 class="cmtt-8">&#x00A0;</span><span
Chris@1 10976 class="cmtt-8">&#x00A0;</span><span
Chris@1 10977 class="cmtt-8">&#x00A0;</span><span
Chris@1 10978 class="cmtt-8">&#x00A0;</span><span
Chris@1 10979 class="cmtt-8">&#x00A0;</span><span
Chris@1 10980 class="cmtt-8">&#x00A0;</span><span
Chris@1 10981 class="cmtt-8">&#x00A0;</span><span
Chris@1 10982 class="cmtt-8">&#x00A0;</span><span
Chris@1 10983 class="cmtt-8">&#x00A0;</span><span
Chris@1 10984 class="cmtt-8">&#x00A0;</span><span
Chris@1 10985 class="cmtt-8">&#x00A0;</span><span
Chris@1 10986 class="cmtt-8">&#x00A0;19)</span><span
Chris@1 10987 class="cmtt-8">&#x00A0;decode</span><span
Chris@1 10988 class="cmtt-8">&#x00A0;partition</span><span
Chris@1 10989 class="cmtt-8">&#x00A0;into</span><span
Chris@1 10990 class="cmtt-8">&#x00A0;output</span><span
Chris@1 10991 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 10992 class="cmtt-8">&#x00A0;number</span><span
Chris@1 10993 class="cmtt-8">&#x00A0;[j],</span><span
Chris@1 10994 class="cmtt-8">&#x00A0;starting</span><span
Chris@1 10995 class="cmtt-8">&#x00A0;at</span><span
Chris@1 10996 class="cmtt-8">&#x00A0;scalar</span>
Chris@1 10997 <br class="fancyvrb" /><a
Chris@1 10998 id="x1-110100r42"></a><span
Chris@1 10999 class="cmr-6">42</span><span
Chris@1 11000 class="cmtt-8">&#x00A0;</span><span
Chris@1 11001 class="cmtt-8">&#x00A0;</span><span
Chris@1 11002 class="cmtt-8">&#x00A0;</span><span
Chris@1 11003 class="cmtt-8">&#x00A0;</span><span
Chris@1 11004 class="cmtt-8">&#x00A0;</span><span
Chris@1 11005 class="cmtt-8">&#x00A0;</span><span
Chris@1 11006 class="cmtt-8">&#x00A0;</span><span
Chris@1 11007 class="cmtt-8">&#x00A0;</span><span
Chris@1 11008 class="cmtt-8">&#x00A0;</span><span
Chris@1 11009 class="cmtt-8">&#x00A0;</span><span
Chris@1 11010 class="cmtt-8">&#x00A0;</span><span
Chris@1 11011 class="cmtt-8">&#x00A0;</span><span
Chris@1 11012 class="cmtt-8">&#x00A0;</span><span
Chris@1 11013 class="cmtt-8">&#x00A0;</span><span
Chris@1 11014 class="cmtt-8">&#x00A0;</span><span
Chris@1 11015 class="cmtt-8">&#x00A0;</span><span
Chris@1 11016 class="cmtt-8">&#x00A0;</span><span
Chris@1 11017 class="cmtt-8">&#x00A0;</span><span
Chris@1 11018 class="cmtt-8">&#x00A0;</span><span
Chris@1 11019 class="cmtt-8">&#x00A0;</span><span
Chris@1 11020 class="cmtt-8">&#x00A0;</span><span
Chris@1 11021 class="cmtt-8">&#x00A0;</span><span
Chris@1 11022 class="cmtt-8">&#x00A0;</span><span
Chris@1 11023 class="cmtt-8">&#x00A0;</span><span
Chris@1 11024 class="cmtt-8">&#x00A0;</span><span
Chris@1 11025 class="cmtt-8">&#x00A0;</span><span
Chris@1 11026 class="cmtt-8">&#x00A0;</span><span
Chris@1 11027 class="cmtt-8">&#x00A0;</span><span
Chris@1 11028 class="cmtt-8">&#x00A0;</span><span
Chris@1 11029 class="cmtt-8">&#x00A0;</span><span
Chris@1 11030 class="cmtt-8">&#x00A0;</span><span
Chris@1 11031 class="cmtt-8">&#x00A0;</span><span
Chris@1 11032 class="cmtt-8">&#x00A0;</span><span
Chris@1 11033 class="cmtt-8">&#x00A0;</span><span
Chris@1 11034 class="cmtt-8">&#x00A0;</span><span
Chris@1 11035 class="cmtt-8">&#x00A0;</span><span
Chris@1 11036 class="cmtt-8">&#x00A0;</span><span
Chris@1 11037 class="cmtt-8">&#x00A0;offset</span><span
Chris@1 11038 class="cmtt-8">&#x00A0;[limit\_residue\_begin]+[partition\_count]*[residue\_partition\_size]</span><span
Chris@1 11039 class="cmtt-8">&#x00A0;using</span>
Chris@1 11040 <br class="fancyvrb" /><a
Chris@1 11041 id="x1-110102r43"></a><span
Chris@1 11042 class="cmr-6">43</span><span
Chris@1 11043 class="cmtt-8">&#x00A0;</span><span
Chris@1 11044 class="cmtt-8">&#x00A0;</span><span
Chris@1 11045 class="cmtt-8">&#x00A0;</span><span
Chris@1 11046 class="cmtt-8">&#x00A0;</span><span
Chris@1 11047 class="cmtt-8">&#x00A0;</span><span
Chris@1 11048 class="cmtt-8">&#x00A0;</span><span
Chris@1 11049 class="cmtt-8">&#x00A0;</span><span
Chris@1 11050 class="cmtt-8">&#x00A0;</span><span
Chris@1 11051 class="cmtt-8">&#x00A0;</span><span
Chris@1 11052 class="cmtt-8">&#x00A0;</span><span
Chris@1 11053 class="cmtt-8">&#x00A0;</span><span
Chris@1 11054 class="cmtt-8">&#x00A0;</span><span
Chris@1 11055 class="cmtt-8">&#x00A0;</span><span
Chris@1 11056 class="cmtt-8">&#x00A0;</span><span
Chris@1 11057 class="cmtt-8">&#x00A0;</span><span
Chris@1 11058 class="cmtt-8">&#x00A0;</span><span
Chris@1 11059 class="cmtt-8">&#x00A0;</span><span
Chris@1 11060 class="cmtt-8">&#x00A0;</span><span
Chris@1 11061 class="cmtt-8">&#x00A0;</span><span
Chris@1 11062 class="cmtt-8">&#x00A0;</span><span
Chris@1 11063 class="cmtt-8">&#x00A0;</span><span
Chris@1 11064 class="cmtt-8">&#x00A0;</span><span
Chris@1 11065 class="cmtt-8">&#x00A0;</span><span
Chris@1 11066 class="cmtt-8">&#x00A0;</span><span
Chris@1 11067 class="cmtt-8">&#x00A0;</span><span
Chris@1 11068 class="cmtt-8">&#x00A0;</span><span
Chris@1 11069 class="cmtt-8">&#x00A0;</span><span
Chris@1 11070 class="cmtt-8">&#x00A0;</span><span
Chris@1 11071 class="cmtt-8">&#x00A0;</span><span
Chris@1 11072 class="cmtt-8">&#x00A0;</span><span
Chris@1 11073 class="cmtt-8">&#x00A0;</span><span
Chris@1 11074 class="cmtt-8">&#x00A0;</span><span
Chris@1 11075 class="cmtt-8">&#x00A0;</span><span
Chris@1 11076 class="cmtt-8">&#x00A0;</span><span
Chris@1 11077 class="cmtt-8">&#x00A0;</span><span
Chris@1 11078 class="cmtt-8">&#x00A0;</span><span
Chris@1 11079 class="cmtt-8">&#x00A0;</span><span
Chris@1 11080 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 11081 class="cmtt-8">&#x00A0;number</span><span
Chris@1 11082 class="cmtt-8">&#x00A0;[vqbook]</span><span
Chris@1 11083 class="cmtt-8">&#x00A0;in</span><span
Chris@1 11084 class="cmtt-8">&#x00A0;VQ</span><span
Chris@1 11085 class="cmtt-8">&#x00A0;context</span>
Chris@1 11086 <br class="fancyvrb" /><a
Chris@1 11087 id="x1-110104r44"></a><span
Chris@1 11088 class="cmr-6">44</span><span
Chris@1 11089 class="cmtt-8">&#x00A0;</span><span
Chris@1 11090 class="cmtt-8">&#x00A0;</span><span
Chris@1 11091 class="cmtt-8">&#x00A0;</span><span
Chris@1 11092 class="cmtt-8">&#x00A0;</span><span
Chris@1 11093 class="cmtt-8">&#x00A0;</span><span
Chris@1 11094 class="cmtt-8">&#x00A0;</span><span
Chris@1 11095 class="cmtt-8">&#x00A0;</span><span
Chris@1 11096 class="cmtt-8">&#x00A0;</span><span
Chris@1 11097 class="cmtt-8">&#x00A0;</span><span
Chris@1 11098 class="cmtt-8">&#x00A0;</span><span
Chris@1 11099 class="cmtt-8">&#x00A0;</span><span
Chris@1 11100 class="cmtt-8">&#x00A0;</span><span
Chris@1 11101 class="cmtt-8">&#x00A0;</span><span
Chris@1 11102 class="cmtt-8">&#x00A0;</span><span
Chris@1 11103 class="cmtt-8">&#x00A0;</span><span
Chris@1 11104 class="cmtt-8">&#x00A0;</span><span
Chris@1 11105 class="cmtt-8">&#x00A0;</span><span
Chris@1 11106 class="cmtt-8">&#x00A0;</span><span
Chris@1 11107 class="cmtt-8">&#x00A0;</span><span
Chris@1 11108 class="cmtt-8">&#x00A0;</span><span
Chris@1 11109 class="cmtt-8">&#x00A0;</span><span
Chris@1 11110 class="cmtt-8">&#x00A0;</span><span
Chris@1 11111 class="cmtt-8">&#x00A0;</span><span
Chris@1 11112 class="cmtt-8">&#x00A0;</span><span
Chris@1 11113 class="cmtt-8">&#x00A0;</span><span
Chris@1 11114 class="cmtt-8">&#x00A0;</span><span
Chris@1 11115 class="cmtt-8">&#x00A0;</span><span
Chris@1 11116 class="cmtt-8">&#x00A0;}</span>
Chris@1 11117
Chris@1 11118
Chris@1 11119
Chris@1 11120 <br class="fancyvrb" /><a
Chris@1 11121 id="x1-110106r45"></a><span
Chris@1 11122 class="cmr-6">45</span><span
Chris@1 11123 class="cmtt-8">&#x00A0;</span><span
Chris@1 11124 class="cmtt-8">&#x00A0;</span><span
Chris@1 11125 class="cmtt-8">&#x00A0;</span><span
Chris@1 11126 class="cmtt-8">&#x00A0;</span><span
Chris@1 11127 class="cmtt-8">&#x00A0;</span><span
Chris@1 11128 class="cmtt-8">&#x00A0;</span><span
Chris@1 11129 class="cmtt-8">&#x00A0;</span><span
Chris@1 11130 class="cmtt-8">&#x00A0;</span><span
Chris@1 11131 class="cmtt-8">&#x00A0;</span><span
Chris@1 11132 class="cmtt-8">&#x00A0;</span><span
Chris@1 11133 class="cmtt-8">&#x00A0;</span><span
Chris@1 11134 class="cmtt-8">&#x00A0;</span><span
Chris@1 11135 class="cmtt-8">&#x00A0;</span><span
Chris@1 11136 class="cmtt-8">&#x00A0;</span><span
Chris@1 11137 class="cmtt-8">&#x00A0;</span><span
Chris@1 11138 class="cmtt-8">&#x00A0;</span><span
Chris@1 11139 class="cmtt-8">&#x00A0;</span><span
Chris@1 11140 class="cmtt-8">&#x00A0;</span><span
Chris@1 11141 class="cmtt-8">&#x00A0;</span><span
Chris@1 11142 class="cmtt-8">&#x00A0;</span><span
Chris@1 11143 class="cmtt-8">&#x00A0;</span><span
Chris@1 11144 class="cmtt-8">&#x00A0;</span><span
Chris@1 11145 class="cmtt-8">&#x00A0;}</span>
Chris@1 11146 <br class="fancyvrb" /><a
Chris@1 11147 id="x1-110108r46"></a><span
Chris@1 11148 class="cmr-6">46</span><span
Chris@1 11149 class="cmtt-8">&#x00A0;</span><span
Chris@1 11150 class="cmtt-8">&#x00A0;</span>
Chris@1 11151 <br class="fancyvrb" /><a
Chris@1 11152 id="x1-110110r47"></a><span
Chris@1 11153 class="cmr-6">47</span><span
Chris@1 11154 class="cmtt-8">&#x00A0;</span><span
Chris@1 11155 class="cmtt-8">&#x00A0;</span><span
Chris@1 11156 class="cmtt-8">&#x00A0;</span><span
Chris@1 11157 class="cmtt-8">&#x00A0;</span><span
Chris@1 11158 class="cmtt-8">&#x00A0;</span><span
Chris@1 11159 class="cmtt-8">&#x00A0;</span><span
Chris@1 11160 class="cmtt-8">&#x00A0;</span><span
Chris@1 11161 class="cmtt-8">&#x00A0;</span><span
Chris@1 11162 class="cmtt-8">&#x00A0;</span><span
Chris@1 11163 class="cmtt-8">&#x00A0;</span><span
Chris@1 11164 class="cmtt-8">&#x00A0;</span><span
Chris@1 11165 class="cmtt-8">&#x00A0;</span><span
Chris@1 11166 class="cmtt-8">&#x00A0;</span><span
Chris@1 11167 class="cmtt-8">&#x00A0;</span><span
Chris@1 11168 class="cmtt-8">&#x00A0;</span><span
Chris@1 11169 class="cmtt-8">&#x00A0;</span><span
Chris@1 11170 class="cmtt-8">&#x00A0;</span><span
Chris@1 11171 class="cmtt-8">&#x00A0;</span><span
Chris@1 11172 class="cmtt-8">&#x00A0;20)</span><span
Chris@1 11173 class="cmtt-8">&#x00A0;increment</span><span
Chris@1 11174 class="cmtt-8">&#x00A0;[partition\_count]</span><span
Chris@1 11175 class="cmtt-8">&#x00A0;by</span><span
Chris@1 11176 class="cmtt-8">&#x00A0;one</span>
Chris@1 11177 <br class="fancyvrb" /><a
Chris@1 11178 id="x1-110112r48"></a><span
Chris@1 11179 class="cmr-6">48</span><span
Chris@1 11180 class="cmtt-8">&#x00A0;</span><span
Chris@1 11181 class="cmtt-8">&#x00A0;</span>
Chris@1 11182 <br class="fancyvrb" /><a
Chris@1 11183 id="x1-110114r49"></a><span
Chris@1 11184 class="cmr-6">49</span><span
Chris@1 11185 class="cmtt-8">&#x00A0;</span><span
Chris@1 11186 class="cmtt-8">&#x00A0;</span><span
Chris@1 11187 class="cmtt-8">&#x00A0;</span><span
Chris@1 11188 class="cmtt-8">&#x00A0;</span><span
Chris@1 11189 class="cmtt-8">&#x00A0;</span><span
Chris@1 11190 class="cmtt-8">&#x00A0;</span><span
Chris@1 11191 class="cmtt-8">&#x00A0;</span><span
Chris@1 11192 class="cmtt-8">&#x00A0;</span><span
Chris@1 11193 class="cmtt-8">&#x00A0;</span><span
Chris@1 11194 class="cmtt-8">&#x00A0;</span><span
Chris@1 11195 class="cmtt-8">&#x00A0;</span><span
Chris@1 11196 class="cmtt-8">&#x00A0;</span><span
Chris@1 11197 class="cmtt-8">&#x00A0;</span><span
Chris@1 11198 class="cmtt-8">&#x00A0;</span><span
Chris@1 11199 class="cmtt-8">&#x00A0;</span><span
Chris@1 11200 class="cmtt-8">&#x00A0;</span><span
Chris@1 11201 class="cmtt-8">&#x00A0;}</span>
Chris@1 11202 <br class="fancyvrb" /><a
Chris@1 11203 id="x1-110116r50"></a><span
Chris@1 11204 class="cmr-6">50</span><span
Chris@1 11205 class="cmtt-8">&#x00A0;</span><span
Chris@1 11206 class="cmtt-8">&#x00A0;</span><span
Chris@1 11207 class="cmtt-8">&#x00A0;</span><span
Chris@1 11208 class="cmtt-8">&#x00A0;</span><span
Chris@1 11209 class="cmtt-8">&#x00A0;</span><span
Chris@1 11210 class="cmtt-8">&#x00A0;</span><span
Chris@1 11211 class="cmtt-8">&#x00A0;</span><span
Chris@1 11212 class="cmtt-8">&#x00A0;</span><span
Chris@1 11213 class="cmtt-8">&#x00A0;</span><span
Chris@1 11214 class="cmtt-8">&#x00A0;</span><span
Chris@1 11215 class="cmtt-8">&#x00A0;</span><span
Chris@1 11216 class="cmtt-8">&#x00A0;}</span>
Chris@1 11217 <br class="fancyvrb" /><a
Chris@1 11218 id="x1-110118r51"></a><span
Chris@1 11219 class="cmr-6">51</span><span
Chris@1 11220 class="cmtt-8">&#x00A0;</span><span
Chris@1 11221 class="cmtt-8">&#x00A0;</span><span
Chris@1 11222 class="cmtt-8">&#x00A0;</span><span
Chris@1 11223 class="cmtt-8">&#x00A0;</span><span
Chris@1 11224 class="cmtt-8">&#x00A0;</span><span
Chris@1 11225 class="cmtt-8">&#x00A0;</span><span
Chris@1 11226 class="cmtt-8">&#x00A0;}</span>
Chris@1 11227 <br class="fancyvrb" /><a
Chris@1 11228 id="x1-110120r52"></a><span
Chris@1 11229 class="cmr-6">52</span><span
Chris@1 11230 class="cmtt-8">&#x00A0;</span><span
Chris@1 11231 class="cmtt-8">&#x00A0;</span>
Chris@1 11232 <br class="fancyvrb" /><a
Chris@1 11233 id="x1-110122r53"></a><span
Chris@1 11234 class="cmr-6">53</span><span
Chris@1 11235 class="cmtt-8">&#x00A0;</span><span
Chris@1 11236 class="cmtt-8">&#x00A0;</span><span
Chris@1 11237 class="cmtt-8">&#x00A0;21)</span><span
Chris@1 11238 class="cmtt-8">&#x00A0;done</span>
Chris@1 11239 <br class="fancyvrb" /><a
Chris@1 11240 id="x1-110124r54"></a><span
Chris@1 11241 class="cmr-6">54</span><span
Chris@1 11242 class="cmtt-8">&#x00A0;</span><span
Chris@1 11243 class="cmtt-8">&#x00A0;</span>
Chris@1 11244 </div>
Chris@1 11245 <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
Chris@1 11246 Decode returns the result of vector decode up to that point.
Chris@1 11247 <!--l. 350--><p class="noindent" >
Chris@1 11248 <h5 class="subsubsectionHead"><span class="titlemark">8.6.3. </span> <a
Chris@1 11249 id="x1-1110008.6.3"></a>format 0 specifics</h5>
Chris@1 11250 <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 0&#8217;
Chris@1 11251 section. The following pseudocode presents the same algorithm. Assume:
Chris@1 11252 <ul class="itemize1">
Chris@1 11253 <li class="itemize"><span
Chris@1 11254 class="cmtt-12">[n] </span>is the value in <span
Chris@1 11255 class="cmtt-12">[residue_partition_size]</span>
Chris@1 11256 </li>
Chris@1 11257 <li class="itemize"><span
Chris@1 11258 class="cmtt-12">[v] </span>is the residue vector
Chris@1 11259 </li>
Chris@1 11260 <li class="itemize"><span
Chris@1 11261 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
Chris@1 11262 <!--l. 363--><p class="noindent" >
Chris@1 11263 <div class="fancyvrb" id="fancyvrb41">
Chris@1 11264 <a
Chris@1 11265 id="x1-111002r1"></a><span
Chris@1 11266 class="cmr-6">1</span><span
Chris@1 11267 class="cmtt-8">&#x00A0;</span><span
Chris@1 11268 class="cmtt-8">&#x00A0;</span><span
Chris@1 11269 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 11270 class="cmtt-8">&#x00A0;[step]</span><span
Chris@1 11271 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11272 class="cmtt-8">&#x00A0;[n]</span><span
Chris@1 11273 class="cmtt-8">&#x00A0;/</span><span
Chris@1 11274 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
Chris@1 11275 <br class="fancyvrb" /><a
Chris@1 11276 id="x1-111004r2"></a><span
Chris@1 11277 class="cmr-6">2</span><span
Chris@1 11278 class="cmtt-8">&#x00A0;</span><span
Chris@1 11279 class="cmtt-8">&#x00A0;</span><span
Chris@1 11280 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 11281 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 11282 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 11283 class="cmtt-8">&#x00A0;over</span><span
Chris@1 11284 class="cmtt-8">&#x00A0;the</span><span
Chris@1 11285 class="cmtt-8">&#x00A0;range</span><span
Chris@1 11286 class="cmtt-8">&#x00A0;0</span><span
Chris@1 11287 class="cmtt-8">&#x00A0;...</span><span
Chris@1 11288 class="cmtt-8">&#x00A0;[step]-1</span><span
Chris@1 11289 class="cmtt-8">&#x00A0;{</span>
Chris@1 11290 <br class="fancyvrb" /><a
Chris@1 11291 id="x1-111006r3"></a><span
Chris@1 11292 class="cmr-6">3</span><span
Chris@1 11293 class="cmtt-8">&#x00A0;</span><span
Chris@1 11294 class="cmtt-8">&#x00A0;</span>
Chris@1 11295 <br class="fancyvrb" /><a
Chris@1 11296 id="x1-111008r4"></a><span
Chris@1 11297 class="cmr-6">4</span><span
Chris@1 11298 class="cmtt-8">&#x00A0;</span><span
Chris@1 11299 class="cmtt-8">&#x00A0;</span><span
Chris@1 11300 class="cmtt-8">&#x00A0;</span><span
Chris@1 11301 class="cmtt-8">&#x00A0;</span><span
Chris@1 11302 class="cmtt-8">&#x00A0;</span><span
Chris@1 11303 class="cmtt-8">&#x00A0;</span><span
Chris@1 11304 class="cmtt-8">&#x00A0;</span><span
Chris@1 11305 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 11306 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11307 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
Chris@1 11308 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11309 class="cmtt-8">&#x00A0;read</span><span
Chris@1 11310 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11311 class="cmtt-8">&#x00A0;from</span><span
Chris@1 11312 class="cmtt-8">&#x00A0;packet</span><span
Chris@1 11313 class="cmtt-8">&#x00A0;using</span><span
Chris@1 11314 class="cmtt-8">&#x00A0;current</span><span
Chris@1 11315 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 11316 class="cmtt-8">&#x00A0;in</span><span
Chris@1 11317 class="cmtt-8">&#x00A0;VQ</span><span
Chris@1 11318 class="cmtt-8">&#x00A0;context</span>
Chris@1 11319 <br class="fancyvrb" /><a
Chris@1 11320 id="x1-111010r5"></a><span
Chris@1 11321 class="cmr-6">5</span><span
Chris@1 11322 class="cmtt-8">&#x00A0;</span><span
Chris@1 11323 class="cmtt-8">&#x00A0;</span><span
Chris@1 11324 class="cmtt-8">&#x00A0;</span><span
Chris@1 11325 class="cmtt-8">&#x00A0;</span><span
Chris@1 11326 class="cmtt-8">&#x00A0;</span><span
Chris@1 11327 class="cmtt-8">&#x00A0;</span><span
Chris@1 11328 class="cmtt-8">&#x00A0;</span><span
Chris@1 11329 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 11330 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 11331 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 11332 class="cmtt-8">&#x00A0;over</span><span
Chris@1 11333 class="cmtt-8">&#x00A0;the</span><span
Chris@1 11334 class="cmtt-8">&#x00A0;range</span><span
Chris@1 11335 class="cmtt-8">&#x00A0;0</span><span
Chris@1 11336 class="cmtt-8">&#x00A0;...</span><span
Chris@1 11337 class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
Chris@1 11338 class="cmtt-8">&#x00A0;{</span>
Chris@1 11339 <br class="fancyvrb" /><a
Chris@1 11340 id="x1-111012r6"></a><span
Chris@1 11341 class="cmr-6">6</span><span
Chris@1 11342 class="cmtt-8">&#x00A0;</span><span
Chris@1 11343 class="cmtt-8">&#x00A0;</span>
Chris@1 11344 <br class="fancyvrb" /><a
Chris@1 11345 id="x1-111014r7"></a><span
Chris@1 11346 class="cmr-6">7</span><span
Chris@1 11347 class="cmtt-8">&#x00A0;</span><span
Chris@1 11348 class="cmtt-8">&#x00A0;</span><span
Chris@1 11349 class="cmtt-8">&#x00A0;</span><span
Chris@1 11350 class="cmtt-8">&#x00A0;</span><span
Chris@1 11351 class="cmtt-8">&#x00A0;</span><span
Chris@1 11352 class="cmtt-8">&#x00A0;</span><span
Chris@1 11353 class="cmtt-8">&#x00A0;</span><span
Chris@1 11354 class="cmtt-8">&#x00A0;</span><span
Chris@1 11355 class="cmtt-8">&#x00A0;</span><span
Chris@1 11356 class="cmtt-8">&#x00A0;</span><span
Chris@1 11357 class="cmtt-8">&#x00A0;</span><span
Chris@1 11358 class="cmtt-8">&#x00A0;</span><span
Chris@1 11359 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 11360 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11361 class="cmtt-8">&#x00A0;[v]</span><span
Chris@1 11362 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11363 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
Chris@1 11364 class="cmtt-8">&#x00A0;=</span>
Chris@1 11365 <br class="fancyvrb" /><a
Chris@1 11366 id="x1-111016r8"></a><span
Chris@1 11367 class="cmr-6">8</span><span
Chris@1 11368 class="cmtt-8">&#x00A0;</span><span
Chris@1 11369 class="cmtt-8">&#x00A0; </span><span
Chris@1 11370 class="cmtt-8">&#x00A0;</span><span
Chris@1 11371 class="cmtt-8">&#x00A0;</span><span
Chris@1 11372 class="cmtt-8">&#x00A0;</span><span
Chris@1 11373 class="cmtt-8">&#x00A0;</span><span
Chris@1 11374 class="cmtt-8">&#x00A0;</span><span
Chris@1 11375 class="cmtt-8">&#x00A0;</span><span
Chris@1 11376 class="cmtt-8">&#x00A0;</span><span
Chris@1 11377 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11378 class="cmtt-8">&#x00A0;[v]</span><span
Chris@1 11379 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11380 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
Chris@1 11381 class="cmtt-8">&#x00A0;+</span>
Chris@1 11382 <br class="fancyvrb" /><a
Chris@1 11383 id="x1-111018r9"></a><span
Chris@1 11384 class="cmr-6">9</span><span
Chris@1 11385 class="cmtt-8">&#x00A0;</span><span
Chris@1 11386 class="cmtt-8">&#x00A0;</span><span
Chris@1 11387 class="cmtt-8">&#x00A0;</span><span
Chris@1 11388 class="cmtt-8">&#x00A0;</span><span
Chris@1 11389 class="cmtt-8">&#x00A0;</span><span
Chris@1 11390 class="cmtt-8">&#x00A0;</span><span
Chris@1 11391 class="cmtt-8">&#x00A0;</span><span
Chris@1 11392 class="cmtt-8">&#x00A0;</span><span
Chris@1 11393 class="cmtt-8">&#x00A0;</span><span
Chris@1 11394 class="cmtt-8">&#x00A0;</span><span
Chris@1 11395 class="cmtt-8">&#x00A0;</span><span
Chris@1 11396 class="cmtt-8">&#x00A0;</span><span
Chris@1 11397 class="cmtt-8">&#x00A0;</span><span
Chris@1 11398 class="cmtt-8">&#x00A0;</span><span
Chris@1 11399 class="cmtt-8">&#x00A0;</span><span
Chris@1 11400 class="cmtt-8">&#x00A0;</span><span
Chris@1 11401 class="cmtt-8">&#x00A0;</span><span
Chris@1 11402 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11403 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
Chris@1 11404 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11405 class="cmtt-8">&#x00A0;[j]</span>
Chris@1 11406 <br class="fancyvrb" /><a
Chris@1 11407 id="x1-111020r10"></a><span
Chris@1 11408 class="cmr-6">10</span><span
Chris@1 11409 class="cmtt-8">&#x00A0;</span><span
Chris@1 11410 class="cmtt-8">&#x00A0;</span>
Chris@1 11411 <br class="fancyvrb" /><a
Chris@1 11412 id="x1-111022r11"></a><span
Chris@1 11413 class="cmr-6">11</span><span
Chris@1 11414 class="cmtt-8">&#x00A0;</span><span
Chris@1 11415 class="cmtt-8">&#x00A0;</span><span
Chris@1 11416 class="cmtt-8">&#x00A0;</span><span
Chris@1 11417 class="cmtt-8">&#x00A0;</span><span
Chris@1 11418 class="cmtt-8">&#x00A0;</span><span
Chris@1 11419 class="cmtt-8">&#x00A0;</span><span
Chris@1 11420 class="cmtt-8">&#x00A0;</span><span
Chris@1 11421 class="cmtt-8">&#x00A0;</span><span
Chris@1 11422 class="cmtt-8">&#x00A0;</span><span
Chris@1 11423 class="cmtt-8">&#x00A0;</span><span
Chris@1 11424 class="cmtt-8">&#x00A0;}</span>
Chris@1 11425 <br class="fancyvrb" /><a
Chris@1 11426 id="x1-111024r12"></a><span
Chris@1 11427 class="cmr-6">12</span><span
Chris@1 11428 class="cmtt-8">&#x00A0;</span><span
Chris@1 11429 class="cmtt-8">&#x00A0;</span>
Chris@1 11430 <br class="fancyvrb" /><a
Chris@1 11431 id="x1-111026r13"></a><span
Chris@1 11432 class="cmr-6">13</span><span
Chris@1 11433 class="cmtt-8">&#x00A0;</span><span
Chris@1 11434 class="cmtt-8">&#x00A0;</span><span
Chris@1 11435 class="cmtt-8">&#x00A0;</span><span
Chris@1 11436 class="cmtt-8">&#x00A0;</span><span
Chris@1 11437 class="cmtt-8">&#x00A0;</span><span
Chris@1 11438 class="cmtt-8">&#x00A0;}</span>
Chris@1 11439 <br class="fancyvrb" /><a
Chris@1 11440 id="x1-111028r14"></a><span
Chris@1 11441 class="cmr-6">14</span><span
Chris@1 11442 class="cmtt-8">&#x00A0;</span><span
Chris@1 11443 class="cmtt-8">&#x00A0;</span>
Chris@1 11444 <br class="fancyvrb" /><a
Chris@1 11445 id="x1-111030r15"></a><span
Chris@1 11446 class="cmr-6">15</span><span
Chris@1 11447 class="cmtt-8">&#x00A0;</span><span
Chris@1 11448 class="cmtt-8">&#x00A0;</span><span
Chris@1 11449 class="cmtt-8">&#x00A0;</span><span
Chris@1 11450 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 11451 class="cmtt-8">&#x00A0;done</span>
Chris@1 11452 <br class="fancyvrb" /><a
Chris@1 11453 id="x1-111032r16"></a><span
Chris@1 11454 class="cmr-6">16</span><span
Chris@1 11455 class="cmtt-8">&#x00A0;</span><span
Chris@1 11456 class="cmtt-8">&#x00A0;</span>
Chris@1 11457
Chris@1 11458
Chris@1 11459
Chris@1 11460 </div>
Chris@1 11461 <!--l. 384--><p class="noindent" >
Chris@1 11462 <h5 class="subsubsectionHead"><span class="titlemark">8.6.4. </span> <a
Chris@1 11463 id="x1-1120008.6.4"></a>format 1 specifics</h5>
Chris@1 11464 <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 1&#8217;
Chris@1 11465 section. The following pseudocode presents the same algorithm. Assume:
Chris@1 11466 <ul class="itemize1">
Chris@1 11467 <li class="itemize"><span
Chris@1 11468 class="cmtt-12">[n] </span>is the value in <span
Chris@1 11469 class="cmtt-12">[residue_partition_size]</span>
Chris@1 11470 </li>
Chris@1 11471 <li class="itemize"><span
Chris@1 11472 class="cmtt-12">[v] </span>is the residue vector
Chris@1 11473 </li>
Chris@1 11474 <li class="itemize"><span
Chris@1 11475 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
Chris@1 11476 <!--l. 398--><p class="noindent" >
Chris@1 11477 <div class="fancyvrb" id="fancyvrb42">
Chris@1 11478 <a
Chris@1 11479 id="x1-112002r1"></a><span
Chris@1 11480 class="cmr-6">1</span><span
Chris@1 11481 class="cmtt-8">&#x00A0;</span><span
Chris@1 11482 class="cmtt-8">&#x00A0;</span><span
Chris@1 11483 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 11484 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 11485 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11486 class="cmtt-8">&#x00A0;0</span>
Chris@1 11487 <br class="fancyvrb" /><a
Chris@1 11488 id="x1-112004r2"></a><span
Chris@1 11489 class="cmr-6">2</span><span
Chris@1 11490 class="cmtt-8">&#x00A0;</span><span
Chris@1 11491 class="cmtt-8">&#x00A0;</span><span
Chris@1 11492 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 11493 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11494 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
Chris@1 11495 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11496 class="cmtt-8">&#x00A0;read</span><span
Chris@1 11497 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11498 class="cmtt-8">&#x00A0;from</span><span
Chris@1 11499 class="cmtt-8">&#x00A0;packet</span><span
Chris@1 11500 class="cmtt-8">&#x00A0;using</span><span
Chris@1 11501 class="cmtt-8">&#x00A0;current</span><span
Chris@1 11502 class="cmtt-8">&#x00A0;codebook</span><span
Chris@1 11503 class="cmtt-8">&#x00A0;in</span><span
Chris@1 11504 class="cmtt-8">&#x00A0;VQ</span><span
Chris@1 11505 class="cmtt-8">&#x00A0;context</span>
Chris@1 11506 <br class="fancyvrb" /><a
Chris@1 11507 id="x1-112006r3"></a><span
Chris@1 11508 class="cmr-6">3</span><span
Chris@1 11509 class="cmtt-8">&#x00A0;</span><span
Chris@1 11510 class="cmtt-8">&#x00A0;</span><span
Chris@1 11511 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 11512 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 11513 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 11514 class="cmtt-8">&#x00A0;over</span><span
Chris@1 11515 class="cmtt-8">&#x00A0;the</span><span
Chris@1 11516 class="cmtt-8">&#x00A0;range</span><span
Chris@1 11517 class="cmtt-8">&#x00A0;0</span><span
Chris@1 11518 class="cmtt-8">&#x00A0;...</span><span
Chris@1 11519 class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
Chris@1 11520 class="cmtt-8">&#x00A0;{</span>
Chris@1 11521 <br class="fancyvrb" /><a
Chris@1 11522 id="x1-112008r4"></a><span
Chris@1 11523 class="cmr-6">4</span><span
Chris@1 11524 class="cmtt-8">&#x00A0;</span><span
Chris@1 11525 class="cmtt-8">&#x00A0;</span>
Chris@1 11526 <br class="fancyvrb" /><a
Chris@1 11527 id="x1-112010r5"></a><span
Chris@1 11528 class="cmr-6">5</span><span
Chris@1 11529 class="cmtt-8">&#x00A0;</span><span
Chris@1 11530 class="cmtt-8">&#x00A0;</span><span
Chris@1 11531 class="cmtt-8">&#x00A0;</span><span
Chris@1 11532 class="cmtt-8">&#x00A0;</span><span
Chris@1 11533 class="cmtt-8">&#x00A0;</span><span
Chris@1 11534 class="cmtt-8">&#x00A0;</span><span
Chris@1 11535 class="cmtt-8">&#x00A0;</span><span
Chris@1 11536 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 11537 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11538 class="cmtt-8">&#x00A0;[v]</span><span
Chris@1 11539 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11540 class="cmtt-8">&#x00A0;([offset]+[i])</span><span
Chris@1 11541 class="cmtt-8">&#x00A0;=</span>
Chris@1 11542 <br class="fancyvrb" /><a
Chris@1 11543 id="x1-112012r6"></a><span
Chris@1 11544 class="cmr-6">6</span><span
Chris@1 11545 class="cmtt-8">&#x00A0;</span><span
Chris@1 11546 class="cmtt-8">&#x00A0; </span><span
Chris@1 11547 class="cmtt-8">&#x00A0;</span><span
Chris@1 11548 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11549 class="cmtt-8">&#x00A0;[v]</span><span
Chris@1 11550 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11551 class="cmtt-8">&#x00A0;([offset]+[i])</span><span
Chris@1 11552 class="cmtt-8">&#x00A0;+</span>
Chris@1 11553 <br class="fancyvrb" /><a
Chris@1 11554 id="x1-112014r7"></a><span
Chris@1 11555 class="cmr-6">7</span><span
Chris@1 11556 class="cmtt-8">&#x00A0;</span><span
Chris@1 11557 class="cmtt-8">&#x00A0;</span><span
Chris@1 11558 class="cmtt-8">&#x00A0;</span><span
Chris@1 11559 class="cmtt-8">&#x00A0;</span><span
Chris@1 11560 class="cmtt-8">&#x00A0;</span><span
Chris@1 11561 class="cmtt-8">&#x00A0;</span><span
Chris@1 11562 class="cmtt-8">&#x00A0;</span><span
Chris@1 11563 class="cmtt-8">&#x00A0;</span><span
Chris@1 11564 class="cmtt-8">&#x00A0;</span><span
Chris@1 11565 class="cmtt-8">&#x00A0;</span><span
Chris@1 11566 class="cmtt-8">&#x00A0;</span><span
Chris@1 11567 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11568 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
Chris@1 11569 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11570 class="cmtt-8">&#x00A0;[j]</span>
Chris@1 11571 <br class="fancyvrb" /><a
Chris@1 11572 id="x1-112016r8"></a><span
Chris@1 11573 class="cmr-6">8</span><span
Chris@1 11574 class="cmtt-8">&#x00A0;</span><span
Chris@1 11575 class="cmtt-8">&#x00A0;</span><span
Chris@1 11576 class="cmtt-8">&#x00A0;</span><span
Chris@1 11577 class="cmtt-8">&#x00A0;</span><span
Chris@1 11578 class="cmtt-8">&#x00A0;</span><span
Chris@1 11579 class="cmtt-8">&#x00A0;</span><span
Chris@1 11580 class="cmtt-8">&#x00A0;</span><span
Chris@1 11581 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 11582 class="cmtt-8">&#x00A0;increment</span><span
Chris@1 11583 class="cmtt-8">&#x00A0;[i]</span>
Chris@1 11584 <br class="fancyvrb" /><a
Chris@1 11585 id="x1-112018r9"></a><span
Chris@1 11586 class="cmr-6">9</span><span
Chris@1 11587 class="cmtt-8">&#x00A0;</span><span
Chris@1 11588 class="cmtt-8">&#x00A0;</span>
Chris@1 11589 <br class="fancyvrb" /><a
Chris@1 11590 id="x1-112020r10"></a><span
Chris@1 11591 class="cmr-6">10</span><span
Chris@1 11592 class="cmtt-8">&#x00A0;</span><span
Chris@1 11593 class="cmtt-8">&#x00A0;</span><span
Chris@1 11594 class="cmtt-8">&#x00A0;</span><span
Chris@1 11595 class="cmtt-8">&#x00A0;</span><span
Chris@1 11596 class="cmtt-8">&#x00A0;</span><span
Chris@1 11597 class="cmtt-8">&#x00A0;}</span>
Chris@1 11598 <br class="fancyvrb" /><a
Chris@1 11599 id="x1-112022r11"></a><span
Chris@1 11600 class="cmr-6">11</span><span
Chris@1 11601 class="cmtt-8">&#x00A0;</span><span
Chris@1 11602 class="cmtt-8">&#x00A0;</span>
Chris@1 11603 <br class="fancyvrb" /><a
Chris@1 11604 id="x1-112024r12"></a><span
Chris@1 11605 class="cmr-6">12</span><span
Chris@1 11606 class="cmtt-8">&#x00A0;</span><span
Chris@1 11607 class="cmtt-8">&#x00A0;</span><span
Chris@1 11608 class="cmtt-8">&#x00A0;</span><span
Chris@1 11609 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 11610 class="cmtt-8">&#x00A0;if</span><span
Chris@1 11611 class="cmtt-8">&#x00A0;(</span><span
Chris@1 11612 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 11613 class="cmtt-8">&#x00A0;is</span><span
Chris@1 11614 class="cmtt-8">&#x00A0;less</span><span
Chris@1 11615 class="cmtt-8">&#x00A0;than</span><span
Chris@1 11616 class="cmtt-8">&#x00A0;[n]</span><span
Chris@1 11617 class="cmtt-8">&#x00A0;)</span><span
Chris@1 11618 class="cmtt-8">&#x00A0;continue</span><span
Chris@1 11619 class="cmtt-8">&#x00A0;at</span><span
Chris@1 11620 class="cmtt-8">&#x00A0;step</span><span
Chris@1 11621 class="cmtt-8">&#x00A0;2</span>
Chris@1 11622 <br class="fancyvrb" /><a
Chris@1 11623 id="x1-112026r13"></a><span
Chris@1 11624 class="cmr-6">13</span><span
Chris@1 11625 class="cmtt-8">&#x00A0;</span><span
Chris@1 11626 class="cmtt-8">&#x00A0;</span><span
Chris@1 11627 class="cmtt-8">&#x00A0;</span><span
Chris@1 11628 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 11629 class="cmtt-8">&#x00A0;done</span>
Chris@1 11630 </div>
Chris@1 11631 <!--l. 416--><p class="noindent" >
Chris@1 11632 <h5 class="subsubsectionHead"><span class="titlemark">8.6.5. </span> <a
Chris@1 11633 id="x1-1130008.6.5"></a>format 2 specifics</h5>
Chris@1 11634 <!--l. 418--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
Chris@1 11635 additional post-decode step after a normal format 1 decode.
Chris@1 11636
Chris@1 11637
Chris@1 11638
Chris@1 11639 <!--l. 421--><p class="noindent" >Format 2 handles &#8217;do not decode&#8217; vectors differently than residue 0 or 1; if all vectors are marked
Chris@1 11640 &#8217;do not decode&#8217;, no decode occurrs. However, if at least one vector is to be decoded, all
Chris@1 11641 the vectors are decoded. We then request normal format 1 to decode a single vector
Chris@1 11642 representing all output channels, rather than a vector for each channel. After decode,
Chris@1 11643 deinterleave the vector into independent vectors, one for each output channel. That
Chris@1 11644 is:
Chris@1 11645 <!--l. 429--><p class="noindent" >
Chris@1 11646 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
Chris@1 11647 1. </dt><dd
Chris@1 11648 class="enumerate-enumitem">If all vectors 0 through <span
Chris@1 11649 class="cmti-12">ch</span>-1 are marked &#8217;do not decode&#8217;, allocate and clear a single
Chris@1 11650 vector <span
Chris@1 11651 class="cmtt-12">[v]</span>of length <span
Chris@1 11652 class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
Chris@1 11653 step.
Chris@1 11654 </dd><dt class="enumerate-enumitem">
Chris@1 11655 2. </dt><dd
Chris@1 11656 class="enumerate-enumitem">Rather than performing format 1 decode to produce <span
Chris@1 11657 class="cmti-12">ch </span>vectors of length <span
Chris@1 11658 class="cmti-12">n </span>each, call
Chris@1 11659 format 1 decode to produce a single vector <span
Chris@1 11660 class="cmtt-12">[v] </span>of length <span
Chris@1 11661 class="cmti-12">ch*n</span>.
Chris@1 11662 </dd><dt class="enumerate-enumitem">
Chris@1 11663 3. </dt><dd
Chris@1 11664 class="enumerate-enumitem">Post decode: Deinterleave the single vector <span
Chris@1 11665 class="cmtt-12">[v] </span>returned by format 1 decode as
Chris@1 11666 described above into <span
Chris@1 11667 class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
Chris@1 11668 to:
Chris@1 11669 <div class="fancyvrb" id="fancyvrb43">
Chris@1 11670 <a
Chris@1 11671 id="x1-113005r1"></a><span
Chris@1 11672 class="cmr-6">1</span><span
Chris@1 11673 class="cmtt-8">&#x00A0;</span><span
Chris@1 11674 class="cmtt-8">&#x00A0;</span><span
Chris@1 11675 class="cmtt-8">&#x00A0;</span><span
Chris@1 11676 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 11677 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 11678 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 11679 class="cmtt-8">&#x00A0;over</span><span
Chris@1 11680 class="cmtt-8">&#x00A0;the</span><span
Chris@1 11681 class="cmtt-8">&#x00A0;range</span><span
Chris@1 11682 class="cmtt-8">&#x00A0;0</span><span
Chris@1 11683 class="cmtt-8">&#x00A0;...</span><span
Chris@1 11684 class="cmtt-8">&#x00A0;[n]-1</span><span
Chris@1 11685 class="cmtt-8">&#x00A0;{</span>
Chris@1 11686 <br class="fancyvrb" /><a
Chris@1 11687 id="x1-113007r2"></a><span
Chris@1 11688 class="cmr-6">2</span><span
Chris@1 11689 class="cmtt-8">&#x00A0;</span><span
Chris@1 11690 class="cmtt-8">&#x00A0;</span>
Chris@1 11691 <br class="fancyvrb" /><a
Chris@1 11692 id="x1-113009r3"></a><span
Chris@1 11693 class="cmr-6">3</span><span
Chris@1 11694 class="cmtt-8">&#x00A0;</span><span
Chris@1 11695 class="cmtt-8">&#x00A0;</span><span
Chris@1 11696 class="cmtt-8">&#x00A0;</span><span
Chris@1 11697 class="cmtt-8">&#x00A0;</span><span
Chris@1 11698 class="cmtt-8">&#x00A0;</span><span
Chris@1 11699 class="cmtt-8">&#x00A0;</span><span
Chris@1 11700 class="cmtt-8">&#x00A0;</span><span
Chris@1 11701 class="cmtt-8">&#x00A0;</span><span
Chris@1 11702 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 11703 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 11704 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 11705 class="cmtt-8">&#x00A0;over</span><span
Chris@1 11706 class="cmtt-8">&#x00A0;the</span><span
Chris@1 11707 class="cmtt-8">&#x00A0;range</span><span
Chris@1 11708 class="cmtt-8">&#x00A0;0</span><span
Chris@1 11709 class="cmtt-8">&#x00A0;...</span><span
Chris@1 11710 class="cmtt-8">&#x00A0;[ch]-1</span><span
Chris@1 11711 class="cmtt-8">&#x00A0;{</span>
Chris@1 11712 <br class="fancyvrb" /><a
Chris@1 11713 id="x1-113011r4"></a><span
Chris@1 11714 class="cmr-6">4</span><span
Chris@1 11715 class="cmtt-8">&#x00A0;</span><span
Chris@1 11716 class="cmtt-8">&#x00A0;</span>
Chris@1 11717 <br class="fancyvrb" /><a
Chris@1 11718 id="x1-113013r5"></a><span
Chris@1 11719 class="cmr-6">5</span><span
Chris@1 11720 class="cmtt-8">&#x00A0;</span><span
Chris@1 11721 class="cmtt-8">&#x00A0;</span><span
Chris@1 11722 class="cmtt-8">&#x00A0;</span><span
Chris@1 11723 class="cmtt-8">&#x00A0;</span><span
Chris@1 11724 class="cmtt-8">&#x00A0;</span><span
Chris@1 11725 class="cmtt-8">&#x00A0;</span><span
Chris@1 11726 class="cmtt-8">&#x00A0;</span><span
Chris@1 11727 class="cmtt-8">&#x00A0;</span><span
Chris@1 11728 class="cmtt-8">&#x00A0;</span><span
Chris@1 11729 class="cmtt-8">&#x00A0;</span><span
Chris@1 11730 class="cmtt-8">&#x00A0;</span><span
Chris@1 11731 class="cmtt-8">&#x00A0;</span><span
Chris@1 11732 class="cmtt-8">&#x00A0;</span><span
Chris@1 11733 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 11734 class="cmtt-8">&#x00A0;output</span><span
Chris@1 11735 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11736 class="cmtt-8">&#x00A0;number</span><span
Chris@1 11737 class="cmtt-8">&#x00A0;[j]</span><span
Chris@1 11738 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11739 class="cmtt-8">&#x00A0;[i]</span><span
Chris@1 11740 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11741 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 11742 class="cmtt-8">&#x00A0;[v]</span><span
Chris@1 11743 class="cmtt-8">&#x00A0;element</span><span
Chris@1 11744 class="cmtt-8">&#x00A0;([i]</span><span
Chris@1 11745 class="cmtt-8">&#x00A0;*</span><span
Chris@1 11746 class="cmtt-8">&#x00A0;[ch]</span><span
Chris@1 11747 class="cmtt-8">&#x00A0;+</span><span
Chris@1 11748 class="cmtt-8">&#x00A0;[j])</span>
Chris@1 11749 <br class="fancyvrb" /><a
Chris@1 11750 id="x1-113015r6"></a><span
Chris@1 11751 class="cmr-6">6</span><span
Chris@1 11752 class="cmtt-8">&#x00A0;</span><span
Chris@1 11753 class="cmtt-8">&#x00A0;</span>
Chris@1 11754 <br class="fancyvrb" /><a
Chris@1 11755 id="x1-113017r7"></a><span
Chris@1 11756 class="cmr-6">7</span><span
Chris@1 11757 class="cmtt-8">&#x00A0;</span><span
Chris@1 11758 class="cmtt-8">&#x00A0;</span><span
Chris@1 11759 class="cmtt-8">&#x00A0;</span><span
Chris@1 11760 class="cmtt-8">&#x00A0;</span><span
Chris@1 11761 class="cmtt-8">&#x00A0;</span><span
Chris@1 11762 class="cmtt-8">&#x00A0;</span><span
Chris@1 11763 class="cmtt-8">&#x00A0;</span><span
Chris@1 11764 class="cmtt-8">&#x00A0;</span><span
Chris@1 11765 class="cmtt-8">&#x00A0;</span><span
Chris@1 11766 class="cmtt-8">&#x00A0;</span><span
Chris@1 11767 class="cmtt-8">&#x00A0;</span><span
Chris@1 11768 class="cmtt-8">&#x00A0;}</span>
Chris@1 11769 <br class="fancyvrb" /><a
Chris@1 11770 id="x1-113019r8"></a><span
Chris@1 11771 class="cmr-6">8</span><span
Chris@1 11772 class="cmtt-8">&#x00A0;</span><span
Chris@1 11773 class="cmtt-8">&#x00A0;</span><span
Chris@1 11774 class="cmtt-8">&#x00A0;</span><span
Chris@1 11775 class="cmtt-8">&#x00A0;</span><span
Chris@1 11776 class="cmtt-8">&#x00A0;</span><span
Chris@1 11777 class="cmtt-8">&#x00A0;</span><span
Chris@1 11778 class="cmtt-8">&#x00A0;}</span>
Chris@1 11779 <br class="fancyvrb" /><a
Chris@1 11780 id="x1-113021r9"></a><span
Chris@1 11781 class="cmr-6">9</span><span
Chris@1 11782 class="cmtt-8">&#x00A0;</span><span
Chris@1 11783 class="cmtt-8">&#x00A0;</span>
Chris@1 11784 <br class="fancyvrb" /><a
Chris@1 11785 id="x1-113023r10"></a><span
Chris@1 11786 class="cmr-6">10</span><span
Chris@1 11787 class="cmtt-8">&#x00A0;</span><span
Chris@1 11788 class="cmtt-8">&#x00A0;</span><span
Chris@1 11789 class="cmtt-8">&#x00A0;</span><span
Chris@1 11790 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 11791 class="cmtt-8">&#x00A0;done</span>
Chris@1 11792 </div>
Chris@1 11793 </dd></dl>
Chris@1 11794
Chris@1 11795
Chris@1 11796
Chris@1 11797
Chris@1 11798
Chris@1 11799
Chris@1 11800 <h3 class="sectionHead"><span class="titlemark">9. </span> <a
Chris@1 11801 id="x1-1140009"></a>Helper equations</h3>
Chris@1 11802 <!--l. 6--><p class="noindent" >
Chris@1 11803 <h4 class="subsectionHead"><span class="titlemark">9.1. </span> <a
Chris@1 11804 id="x1-1150009.1"></a>Overview</h4>
Chris@1 11805 <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
Chris@1 11806 cluttering up the main specification documents, they are defined here and referenced where
Chris@1 11807 appropriate.
Chris@1 11808 <!--l. 13--><p class="noindent" >
Chris@1 11809 <h4 class="subsectionHead"><span class="titlemark">9.2. </span> <a
Chris@1 11810 id="x1-1160009.2"></a>Functions</h4>
Chris@1 11811 <!--l. 15--><p class="noindent" >
Chris@1 11812 <h5 class="subsubsectionHead"><span class="titlemark">9.2.1. </span> <a
Chris@1 11813 id="x1-1170009.2.1"></a>ilog</h5>
Chris@1 11814 <!--l. 17--><p class="noindent" >The &#8221;ilog(x)&#8221; function returns the position number (1 through n) of the highest set bit in the
Chris@1 11815 two&#8217;s complement integer value <span
Chris@1 11816 class="cmtt-12">[x]</span>. Values of <span
Chris@1 11817 class="cmtt-12">[x] </span>less than zero are defined to return
Chris@1 11818 zero.
Chris@1 11819 <!--l. 20--><p class="noindent" >
Chris@1 11820 <div class="fancyvrb" id="fancyvrb44">
Chris@1 11821 <a
Chris@1 11822 id="x1-117002r1"></a><span
Chris@1 11823 class="cmr-6">1</span><span
Chris@1 11824 class="cmtt-8">&#x00A0;</span><span
Chris@1 11825 class="cmtt-8">&#x00A0;</span><span
Chris@1 11826 class="cmtt-8">&#x00A0;</span><span
Chris@1 11827 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 11828 class="cmtt-8">&#x00A0;[return\_value]</span><span
Chris@1 11829 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11830 class="cmtt-8">&#x00A0;0;</span>
Chris@1 11831 <br class="fancyvrb" /><a
Chris@1 11832 id="x1-117004r2"></a><span
Chris@1 11833 class="cmr-6">2</span><span
Chris@1 11834 class="cmtt-8">&#x00A0;</span><span
Chris@1 11835 class="cmtt-8">&#x00A0;</span><span
Chris@1 11836 class="cmtt-8">&#x00A0;</span><span
Chris@1 11837 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 11838 class="cmtt-8">&#x00A0;if</span><span
Chris@1 11839 class="cmtt-8">&#x00A0;(</span><span
Chris@1 11840 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 11841 class="cmtt-8">&#x00A0;is</span><span
Chris@1 11842 class="cmtt-8">&#x00A0;greater</span><span
Chris@1 11843 class="cmtt-8">&#x00A0;than</span><span
Chris@1 11844 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 11845 class="cmtt-8">&#x00A0;)</span><span
Chris@1 11846 class="cmtt-8">&#x00A0;{</span>
Chris@1 11847 <br class="fancyvrb" /><a
Chris@1 11848 id="x1-117006r3"></a><span
Chris@1 11849 class="cmr-6">3</span><span
Chris@1 11850 class="cmtt-8">&#x00A0;</span><span
Chris@1 11851 class="cmtt-8">&#x00A0;</span>
Chris@1 11852 <br class="fancyvrb" /><a
Chris@1 11853 id="x1-117008r4"></a><span
Chris@1 11854 class="cmr-6">4</span><span
Chris@1 11855 class="cmtt-8">&#x00A0;</span><span
Chris@1 11856 class="cmtt-8">&#x00A0;</span><span
Chris@1 11857 class="cmtt-8">&#x00A0;</span><span
Chris@1 11858 class="cmtt-8">&#x00A0;</span><span
Chris@1 11859 class="cmtt-8">&#x00A0;</span><span
Chris@1 11860 class="cmtt-8">&#x00A0;</span><span
Chris@1 11861 class="cmtt-8">&#x00A0;</span><span
Chris@1 11862 class="cmtt-8">&#x00A0;</span><span
Chris@1 11863 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 11864 class="cmtt-8">&#x00A0;increment</span><span
Chris@1 11865 class="cmtt-8">&#x00A0;[return\_value];</span>
Chris@1 11866 <br class="fancyvrb" /><a
Chris@1 11867 id="x1-117010r5"></a><span
Chris@1 11868 class="cmr-6">5</span><span
Chris@1 11869 class="cmtt-8">&#x00A0;</span><span
Chris@1 11870 class="cmtt-8">&#x00A0;</span><span
Chris@1 11871 class="cmtt-8">&#x00A0;</span><span
Chris@1 11872 class="cmtt-8">&#x00A0;</span><span
Chris@1 11873 class="cmtt-8">&#x00A0;</span><span
Chris@1 11874 class="cmtt-8">&#x00A0;</span><span
Chris@1 11875 class="cmtt-8">&#x00A0;</span><span
Chris@1 11876 class="cmtt-8">&#x00A0;</span><span
Chris@1 11877 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 11878 class="cmtt-8">&#x00A0;logical</span><span
Chris@1 11879 class="cmtt-8">&#x00A0;shift</span><span
Chris@1 11880 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 11881 class="cmtt-8">&#x00A0;one</span><span
Chris@1 11882 class="cmtt-8">&#x00A0;bit</span><span
Chris@1 11883 class="cmtt-8">&#x00A0;to</span><span
Chris@1 11884 class="cmtt-8">&#x00A0;the</span><span
Chris@1 11885 class="cmtt-8">&#x00A0;right,</span><span
Chris@1 11886 class="cmtt-8">&#x00A0;padding</span><span
Chris@1 11887 class="cmtt-8">&#x00A0;the</span><span
Chris@1 11888 class="cmtt-8">&#x00A0;MSb</span><span
Chris@1 11889 class="cmtt-8">&#x00A0;with</span><span
Chris@1 11890 class="cmtt-8">&#x00A0;zero</span>
Chris@1 11891 <br class="fancyvrb" /><a
Chris@1 11892 id="x1-117012r6"></a><span
Chris@1 11893 class="cmr-6">6</span><span
Chris@1 11894 class="cmtt-8">&#x00A0;</span><span
Chris@1 11895 class="cmtt-8">&#x00A0;</span><span
Chris@1 11896 class="cmtt-8">&#x00A0;</span><span
Chris@1 11897 class="cmtt-8">&#x00A0;</span><span
Chris@1 11898 class="cmtt-8">&#x00A0;</span><span
Chris@1 11899 class="cmtt-8">&#x00A0;</span><span
Chris@1 11900 class="cmtt-8">&#x00A0;</span><span
Chris@1 11901 class="cmtt-8">&#x00A0;</span><span
Chris@1 11902 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 11903 class="cmtt-8">&#x00A0;repeat</span><span
Chris@1 11904 class="cmtt-8">&#x00A0;at</span><span
Chris@1 11905 class="cmtt-8">&#x00A0;step</span><span
Chris@1 11906 class="cmtt-8">&#x00A0;2)</span>
Chris@1 11907 <br class="fancyvrb" /><a
Chris@1 11908 id="x1-117014r7"></a><span
Chris@1 11909 class="cmr-6">7</span><span
Chris@1 11910 class="cmtt-8">&#x00A0;</span><span
Chris@1 11911 class="cmtt-8">&#x00A0;</span>
Chris@1 11912 <br class="fancyvrb" /><a
Chris@1 11913 id="x1-117016r8"></a><span
Chris@1 11914 class="cmr-6">8</span><span
Chris@1 11915 class="cmtt-8">&#x00A0;</span><span
Chris@1 11916 class="cmtt-8">&#x00A0;</span><span
Chris@1 11917 class="cmtt-8">&#x00A0;</span><span
Chris@1 11918 class="cmtt-8">&#x00A0;</span><span
Chris@1 11919 class="cmtt-8">&#x00A0;</span><span
Chris@1 11920 class="cmtt-8">&#x00A0;</span><span
Chris@1 11921 class="cmtt-8">&#x00A0;}</span>
Chris@1 11922 <br class="fancyvrb" /><a
Chris@1 11923 id="x1-117018r9"></a><span
Chris@1 11924 class="cmr-6">9</span><span
Chris@1 11925 class="cmtt-8">&#x00A0;</span><span
Chris@1 11926 class="cmtt-8">&#x00A0;</span>
Chris@1 11927 <br class="fancyvrb" /><a
Chris@1 11928 id="x1-117020r10"></a><span
Chris@1 11929 class="cmr-6">10</span><span
Chris@1 11930 class="cmtt-8">&#x00A0;</span><span
Chris@1 11931 class="cmtt-8">&#x00A0;</span><span
Chris@1 11932 class="cmtt-8">&#x00A0;</span><span
Chris@1 11933 class="cmtt-8">&#x00A0;</span><span
Chris@1 11934 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 11935 class="cmtt-8">&#x00A0;done</span>
Chris@1 11936 </div>
Chris@1 11937
Chris@1 11938
Chris@1 11939
Chris@1 11940 <!--l. 33--><p class="noindent" >Examples:
Chris@1 11941 <ul class="itemize1">
Chris@1 11942 <li class="itemize">ilog(0) = 0;
Chris@1 11943 </li>
Chris@1 11944 <li class="itemize">ilog(1) = 1;
Chris@1 11945 </li>
Chris@1 11946 <li class="itemize">ilog(2) = 2;
Chris@1 11947 </li>
Chris@1 11948 <li class="itemize">ilog(3) = 2;
Chris@1 11949 </li>
Chris@1 11950 <li class="itemize">ilog(4) = 3;
Chris@1 11951 </li>
Chris@1 11952 <li class="itemize">ilog(7) = 3;
Chris@1 11953 </li>
Chris@1 11954 <li class="itemize">ilog(negative number) = 0;</li></ul>
Chris@1 11955 <!--l. 48--><p class="noindent" >
Chris@1 11956 <h5 class="subsubsectionHead"><span class="titlemark">9.2.2. </span> <a
Chris@1 11957 id="x1-1180009.2.2"></a>float32_unpack</h5>
Chris@1 11958 <!--l. 50--><p class="noindent" >&#8221;float32_unpack(x)&#8221; is intended to translate the packed binary representation of a Vorbis
Chris@1 11959 codebook float value into the representation used by the decoder for floating point numbers. For
Chris@1 11960 purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
Chris@1 11961 number.
Chris@1 11962 <!--l. 56--><p class="noindent" >
Chris@1 11963 <div class="fancyvrb" id="fancyvrb45">
Chris@1 11964 <a
Chris@1 11965 id="x1-118002r1"></a><span
Chris@1 11966 class="cmr-6">1</span><span
Chris@1 11967 class="cmtt-8">&#x00A0;</span><span
Chris@1 11968 class="cmtt-8">&#x00A0;</span><span
Chris@1 11969 class="cmtt-8">&#x00A0;</span><span
Chris@1 11970 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 11971 class="cmtt-8">&#x00A0;[mantissa]</span><span
Chris@1 11972 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11973 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 11974 class="cmtt-8">&#x00A0;bitwise</span><span
Chris@1 11975 class="cmtt-8">&#x00A0;AND</span><span
Chris@1 11976 class="cmtt-8">&#x00A0;0x1fffff</span><span
Chris@1 11977 class="cmtt-8">&#x00A0;(unsigned</span><span
Chris@1 11978 class="cmtt-8">&#x00A0;result)</span>
Chris@1 11979 <br class="fancyvrb" /><a
Chris@1 11980 id="x1-118004r2"></a><span
Chris@1 11981 class="cmr-6">2</span><span
Chris@1 11982 class="cmtt-8">&#x00A0;</span><span
Chris@1 11983 class="cmtt-8">&#x00A0;</span><span
Chris@1 11984 class="cmtt-8">&#x00A0;</span><span
Chris@1 11985 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 11986 class="cmtt-8">&#x00A0;[sign]</span><span
Chris@1 11987 class="cmtt-8">&#x00A0;=</span><span
Chris@1 11988 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 11989 class="cmtt-8">&#x00A0;bitwise</span><span
Chris@1 11990 class="cmtt-8">&#x00A0;AND</span><span
Chris@1 11991 class="cmtt-8">&#x00A0;0x80000000</span><span
Chris@1 11992 class="cmtt-8">&#x00A0;(unsigned</span><span
Chris@1 11993 class="cmtt-8">&#x00A0;result)</span>
Chris@1 11994 <br class="fancyvrb" /><a
Chris@1 11995 id="x1-118006r3"></a><span
Chris@1 11996 class="cmr-6">3</span><span
Chris@1 11997 class="cmtt-8">&#x00A0;</span><span
Chris@1 11998 class="cmtt-8">&#x00A0;</span><span
Chris@1 11999 class="cmtt-8">&#x00A0;</span><span
Chris@1 12000 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 12001 class="cmtt-8">&#x00A0;[exponent]</span><span
Chris@1 12002 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12003 class="cmtt-8">&#x00A0;(</span><span
Chris@1 12004 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 12005 class="cmtt-8">&#x00A0;bitwise</span><span
Chris@1 12006 class="cmtt-8">&#x00A0;AND</span><span
Chris@1 12007 class="cmtt-8">&#x00A0;0x7fe00000)</span><span
Chris@1 12008 class="cmtt-8">&#x00A0;shifted</span><span
Chris@1 12009 class="cmtt-8">&#x00A0;right</span><span
Chris@1 12010 class="cmtt-8">&#x00A0;21</span><span
Chris@1 12011 class="cmtt-8">&#x00A0;bits</span><span
Chris@1 12012 class="cmtt-8">&#x00A0;(unsigned</span><span
Chris@1 12013 class="cmtt-8">&#x00A0;result)</span>
Chris@1 12014 <br class="fancyvrb" /><a
Chris@1 12015 id="x1-118008r4"></a><span
Chris@1 12016 class="cmr-6">4</span><span
Chris@1 12017 class="cmtt-8">&#x00A0;</span><span
Chris@1 12018 class="cmtt-8">&#x00A0;</span><span
Chris@1 12019 class="cmtt-8">&#x00A0;</span><span
Chris@1 12020 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 12021 class="cmtt-8">&#x00A0;if</span><span
Chris@1 12022 class="cmtt-8">&#x00A0;(</span><span
Chris@1 12023 class="cmtt-8">&#x00A0;[sign]</span><span
Chris@1 12024 class="cmtt-8">&#x00A0;is</span><span
Chris@1 12025 class="cmtt-8">&#x00A0;nonzero</span><span
Chris@1 12026 class="cmtt-8">&#x00A0;)</span><span
Chris@1 12027 class="cmtt-8">&#x00A0;then</span><span
Chris@1 12028 class="cmtt-8">&#x00A0;negate</span><span
Chris@1 12029 class="cmtt-8">&#x00A0;[mantissa]</span>
Chris@1 12030 <br class="fancyvrb" /><a
Chris@1 12031 id="x1-118010r5"></a><span
Chris@1 12032 class="cmr-6">5</span><span
Chris@1 12033 class="cmtt-8">&#x00A0;</span><span
Chris@1 12034 class="cmtt-8">&#x00A0;</span><span
Chris@1 12035 class="cmtt-8">&#x00A0;</span><span
Chris@1 12036 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 12037 class="cmtt-8">&#x00A0;return</span><span
Chris@1 12038 class="cmtt-8">&#x00A0;[mantissa]</span><span
Chris@1 12039 class="cmtt-8">&#x00A0;*</span><span
Chris@1 12040 class="cmtt-8">&#x00A0;(</span><span
Chris@1 12041 class="cmtt-8">&#x00A0;2</span><span
Chris@1 12042 class="cmtt-8">&#x00A0;^</span><span
Chris@1 12043 class="cmtt-8">&#x00A0;(</span><span
Chris@1 12044 class="cmtt-8">&#x00A0;[exponent]</span><span
Chris@1 12045 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12046 class="cmtt-8">&#x00A0;788</span><span
Chris@1 12047 class="cmtt-8">&#x00A0;)</span><span
Chris@1 12048 class="cmtt-8">&#x00A0;)</span>
Chris@1 12049 </div>
Chris@1 12050
Chris@1 12051
Chris@1 12052
Chris@1 12053 <!--l. 66--><p class="noindent" >
Chris@1 12054 <h5 class="subsubsectionHead"><span class="titlemark">9.2.3. </span> <a
Chris@1 12055 id="x1-1190009.2.3"></a>lookup1_values</h5>
Chris@1 12056 <!--l. 68--><p class="noindent" >&#8221;lookup1_values(codebook_entries,codebook_dimensions)&#8221; is used to compute the
Chris@1 12057 correct length of the value index for a codebook VQ lookup table of lookup type 1.
Chris@1 12058 The values on this list are permuted to construct the VQ vector lookup table of size
Chris@1 12059 <span
Chris@1 12060 class="cmtt-12">[codebook_entries]</span>.
Chris@1 12061 <!--l. 74--><p class="noindent" >The return value for this function is defined to be &#8217;the greatest integer value for which
Chris@1 12062 <span
Chris@1 12063 class="cmtt-12">[return_value] </span>to the power of <span
Chris@1 12064 class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
Chris@1 12065 <span
Chris@1 12066 class="cmtt-12">[codebook_entries]</span>&#8217;.
Chris@1 12067 <!--l. 81--><p class="noindent" >
Chris@1 12068 <h5 class="subsubsectionHead"><span class="titlemark">9.2.4. </span> <a
Chris@1 12069 id="x1-1200009.2.4"></a>low_neighbor</h5>
Chris@1 12070 <!--l. 83--><p class="noindent" >&#8221;low_neighbor(v,x)&#8221; finds the position <span
Chris@1 12071 class="cmtt-12">n </span>in vector <span
Chris@1 12072 class="cmtt-12">[v] </span>of the greatest value scalar element for
Chris@1 12073 which <span
Chris@1 12074 class="cmtt-12">n </span>is less than <span
Chris@1 12075 class="cmtt-12">[x] </span>and vector <span
Chris@1 12076 class="cmtt-12">[v] </span>element <span
Chris@1 12077 class="cmtt-12">n </span>is less than vector <span
Chris@1 12078 class="cmtt-12">[v] </span>element
Chris@1 12079 <span
Chris@1 12080 class="cmtt-12">[x]</span>.
Chris@1 12081 <!--l. 88--><p class="noindent" >
Chris@1 12082 <h5 class="subsubsectionHead"><span class="titlemark">9.2.5. </span> <a
Chris@1 12083 id="x1-1210009.2.5"></a>high_neighbor</h5>
Chris@1 12084 <!--l. 90--><p class="noindent" >&#8221;high_neighbor(v,x)&#8221; finds the position <span
Chris@1 12085 class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
Chris@1 12086 which <span
Chris@1 12087 class="cmtt-12">n </span>is less than <span
Chris@1 12088 class="cmtt-12">[x] </span>and vector <span
Chris@1 12089 class="cmtt-12">[v] </span>element <span
Chris@1 12090 class="cmtt-12">n </span>is greater than vector <span
Chris@1 12091 class="cmtt-12">[v] </span>element
Chris@1 12092 <span
Chris@1 12093 class="cmtt-12">[x]</span>.
Chris@1 12094 <!--l. 97--><p class="noindent" >
Chris@1 12095 <h5 class="subsubsectionHead"><span class="titlemark">9.2.6. </span> <a
Chris@1 12096 id="x1-1220009.2.6"></a>render_point</h5>
Chris@1 12097 <!--l. 99--><p class="noindent" >&#8221;render_point(x0,y0,x1,y1,X)&#8221; is used to find the Y value at point X along the line specified by
Chris@1 12098 x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
Chris@1 12099 calculating intervening values along the line.
Chris@1 12100
Chris@1 12101
Chris@1 12102
Chris@1 12103 <!--l. 104--><p class="noindent" >
Chris@1 12104 <div class="fancyvrb" id="fancyvrb46">
Chris@1 12105 <a
Chris@1 12106 id="x1-122002r1"></a><span
Chris@1 12107 class="cmr-6">1</span><span
Chris@1 12108 class="cmtt-8">&#x00A0;</span><span
Chris@1 12109 class="cmtt-8">&#x00A0;</span><span
Chris@1 12110 class="cmtt-8">&#x00A0;</span><span
Chris@1 12111 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 12112 class="cmtt-8">&#x00A0;</span><span
Chris@1 12113 class="cmtt-8">&#x00A0;[dy]</span><span
Chris@1 12114 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12115 class="cmtt-8">&#x00A0;[y1]</span><span
Chris@1 12116 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12117 class="cmtt-8">&#x00A0;[y0]</span>
Chris@1 12118 <br class="fancyvrb" /><a
Chris@1 12119 id="x1-122004r2"></a><span
Chris@1 12120 class="cmr-6">2</span><span
Chris@1 12121 class="cmtt-8">&#x00A0;</span><span
Chris@1 12122 class="cmtt-8">&#x00A0;</span><span
Chris@1 12123 class="cmtt-8">&#x00A0;</span><span
Chris@1 12124 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 12125 class="cmtt-8">&#x00A0;[adx]</span><span
Chris@1 12126 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12127 class="cmtt-8">&#x00A0;[x1]</span><span
Chris@1 12128 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12129 class="cmtt-8">&#x00A0;[x0]</span>
Chris@1 12130 <br class="fancyvrb" /><a
Chris@1 12131 id="x1-122006r3"></a><span
Chris@1 12132 class="cmr-6">3</span><span
Chris@1 12133 class="cmtt-8">&#x00A0;</span><span
Chris@1 12134 class="cmtt-8">&#x00A0;</span><span
Chris@1 12135 class="cmtt-8">&#x00A0;</span><span
Chris@1 12136 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 12137 class="cmtt-8">&#x00A0;[ady]</span><span
Chris@1 12138 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12139 class="cmtt-8">&#x00A0;absolute</span><span
Chris@1 12140 class="cmtt-8">&#x00A0;value</span><span
Chris@1 12141 class="cmtt-8">&#x00A0;of</span><span
Chris@1 12142 class="cmtt-8">&#x00A0;[dy]</span>
Chris@1 12143 <br class="fancyvrb" /><a
Chris@1 12144 id="x1-122008r4"></a><span
Chris@1 12145 class="cmr-6">4</span><span
Chris@1 12146 class="cmtt-8">&#x00A0;</span><span
Chris@1 12147 class="cmtt-8">&#x00A0;</span><span
Chris@1 12148 class="cmtt-8">&#x00A0;</span><span
Chris@1 12149 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 12150 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12151 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12152 class="cmtt-8">&#x00A0;[ady]</span><span
Chris@1 12153 class="cmtt-8">&#x00A0;*</span><span
Chris@1 12154 class="cmtt-8">&#x00A0;([X]</span><span
Chris@1 12155 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12156 class="cmtt-8">&#x00A0;[x0])</span>
Chris@1 12157 <br class="fancyvrb" /><a
Chris@1 12158 id="x1-122010r5"></a><span
Chris@1 12159 class="cmr-6">5</span><span
Chris@1 12160 class="cmtt-8">&#x00A0;</span><span
Chris@1 12161 class="cmtt-8">&#x00A0;</span><span
Chris@1 12162 class="cmtt-8">&#x00A0;</span><span
Chris@1 12163 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 12164 class="cmtt-8">&#x00A0;[off]</span><span
Chris@1 12165 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12166 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12167 class="cmtt-8">&#x00A0;/</span><span
Chris@1 12168 class="cmtt-8">&#x00A0;[adx]</span><span
Chris@1 12169 class="cmtt-8">&#x00A0;using</span><span
Chris@1 12170 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 12171 class="cmtt-8">&#x00A0;division</span>
Chris@1 12172 <br class="fancyvrb" /><a
Chris@1 12173 id="x1-122012r6"></a><span
Chris@1 12174 class="cmr-6">6</span><span
Chris@1 12175 class="cmtt-8">&#x00A0;</span><span
Chris@1 12176 class="cmtt-8">&#x00A0;</span><span
Chris@1 12177 class="cmtt-8">&#x00A0;</span><span
Chris@1 12178 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 12179 class="cmtt-8">&#x00A0;if</span><span
Chris@1 12180 class="cmtt-8">&#x00A0;(</span><span
Chris@1 12181 class="cmtt-8">&#x00A0;[dy]</span><span
Chris@1 12182 class="cmtt-8">&#x00A0;is</span><span
Chris@1 12183 class="cmtt-8">&#x00A0;less</span><span
Chris@1 12184 class="cmtt-8">&#x00A0;than</span><span
Chris@1 12185 class="cmtt-8">&#x00A0;zero</span><span
Chris@1 12186 class="cmtt-8">&#x00A0;)</span><span
Chris@1 12187 class="cmtt-8">&#x00A0;{</span>
Chris@1 12188 <br class="fancyvrb" /><a
Chris@1 12189 id="x1-122014r7"></a><span
Chris@1 12190 class="cmr-6">7</span><span
Chris@1 12191 class="cmtt-8">&#x00A0;</span><span
Chris@1 12192 class="cmtt-8">&#x00A0;</span>
Chris@1 12193 <br class="fancyvrb" /><a
Chris@1 12194 id="x1-122016r8"></a><span
Chris@1 12195 class="cmr-6">8</span><span
Chris@1 12196 class="cmtt-8">&#x00A0;</span><span
Chris@1 12197 class="cmtt-8">&#x00A0;</span><span
Chris@1 12198 class="cmtt-8">&#x00A0;</span><span
Chris@1 12199 class="cmtt-8">&#x00A0;</span><span
Chris@1 12200 class="cmtt-8">&#x00A0;</span><span
Chris@1 12201 class="cmtt-8">&#x00A0;</span><span
Chris@1 12202 class="cmtt-8">&#x00A0;</span><span
Chris@1 12203 class="cmtt-8">&#x00A0;</span><span
Chris@1 12204 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 12205 class="cmtt-8">&#x00A0;[Y]</span><span
Chris@1 12206 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12207 class="cmtt-8">&#x00A0;[y0]</span><span
Chris@1 12208 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12209 class="cmtt-8">&#x00A0;[off]</span>
Chris@1 12210 <br class="fancyvrb" /><a
Chris@1 12211 id="x1-122018r9"></a><span
Chris@1 12212 class="cmr-6">9</span><span
Chris@1 12213 class="cmtt-8">&#x00A0;</span><span
Chris@1 12214 class="cmtt-8">&#x00A0;</span>
Chris@1 12215 <br class="fancyvrb" /><a
Chris@1 12216 id="x1-122020r10"></a><span
Chris@1 12217 class="cmr-6">10</span><span
Chris@1 12218 class="cmtt-8">&#x00A0;</span><span
Chris@1 12219 class="cmtt-8">&#x00A0;</span><span
Chris@1 12220 class="cmtt-8">&#x00A0;</span><span
Chris@1 12221 class="cmtt-8">&#x00A0;</span><span
Chris@1 12222 class="cmtt-8">&#x00A0;</span><span
Chris@1 12223 class="cmtt-8">&#x00A0;</span><span
Chris@1 12224 class="cmtt-8">&#x00A0;}</span><span
Chris@1 12225 class="cmtt-8">&#x00A0;else</span><span
Chris@1 12226 class="cmtt-8">&#x00A0;{</span>
Chris@1 12227 <br class="fancyvrb" /><a
Chris@1 12228 id="x1-122022r11"></a><span
Chris@1 12229 class="cmr-6">11</span><span
Chris@1 12230 class="cmtt-8">&#x00A0;</span><span
Chris@1 12231 class="cmtt-8">&#x00A0;</span>
Chris@1 12232 <br class="fancyvrb" /><a
Chris@1 12233 id="x1-122024r12"></a><span
Chris@1 12234 class="cmr-6">12</span><span
Chris@1 12235 class="cmtt-8">&#x00A0;</span><span
Chris@1 12236 class="cmtt-8">&#x00A0;</span><span
Chris@1 12237 class="cmtt-8">&#x00A0;</span><span
Chris@1 12238 class="cmtt-8">&#x00A0;</span><span
Chris@1 12239 class="cmtt-8">&#x00A0;</span><span
Chris@1 12240 class="cmtt-8">&#x00A0;</span><span
Chris@1 12241 class="cmtt-8">&#x00A0;</span><span
Chris@1 12242 class="cmtt-8">&#x00A0;</span><span
Chris@1 12243 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 12244 class="cmtt-8">&#x00A0;[Y]</span><span
Chris@1 12245 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12246 class="cmtt-8">&#x00A0;[y0]</span><span
Chris@1 12247 class="cmtt-8">&#x00A0;+</span><span
Chris@1 12248 class="cmtt-8">&#x00A0;[off]</span>
Chris@1 12249 <br class="fancyvrb" /><a
Chris@1 12250 id="x1-122026r13"></a><span
Chris@1 12251 class="cmr-6">13</span><span
Chris@1 12252 class="cmtt-8">&#x00A0;</span><span
Chris@1 12253 class="cmtt-8">&#x00A0;</span>
Chris@1 12254 <br class="fancyvrb" /><a
Chris@1 12255 id="x1-122028r14"></a><span
Chris@1 12256 class="cmr-6">14</span><span
Chris@1 12257 class="cmtt-8">&#x00A0;</span><span
Chris@1 12258 class="cmtt-8">&#x00A0;</span><span
Chris@1 12259 class="cmtt-8">&#x00A0;</span><span
Chris@1 12260 class="cmtt-8">&#x00A0;</span><span
Chris@1 12261 class="cmtt-8">&#x00A0;</span><span
Chris@1 12262 class="cmtt-8">&#x00A0;</span><span
Chris@1 12263 class="cmtt-8">&#x00A0;}</span>
Chris@1 12264 <br class="fancyvrb" /><a
Chris@1 12265 id="x1-122030r15"></a><span
Chris@1 12266 class="cmr-6">15</span><span
Chris@1 12267 class="cmtt-8">&#x00A0;</span><span
Chris@1 12268 class="cmtt-8">&#x00A0;</span>
Chris@1 12269 <br class="fancyvrb" /><a
Chris@1 12270 id="x1-122032r16"></a><span
Chris@1 12271 class="cmr-6">16</span><span
Chris@1 12272 class="cmtt-8">&#x00A0;</span><span
Chris@1 12273 class="cmtt-8">&#x00A0;</span><span
Chris@1 12274 class="cmtt-8">&#x00A0;</span><span
Chris@1 12275 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 12276 class="cmtt-8">&#x00A0;done</span>
Chris@1 12277 </div>
Chris@1 12278 <!--l. 125--><p class="noindent" >
Chris@1 12279 <h5 class="subsubsectionHead"><span class="titlemark">9.2.7. </span> <a
Chris@1 12280 id="x1-1230009.2.7"></a>render_line</h5>
Chris@1 12281 <!--l. 127--><p class="noindent" >Floor decode type one uses the integer line drawing algorithm of &#8221;render_line(x0, y0, x1, y1, v)&#8221;
Chris@1 12282 to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
Chris@1 12283 been relevant elsewhere, but here we must define integer division as rounding division of both
Chris@1 12284 positive and negative numbers toward zero.
Chris@1 12285 <!--l. 134--><p class="noindent" >
Chris@1 12286 <div class="fancyvrb" id="fancyvrb47">
Chris@1 12287 <a
Chris@1 12288 id="x1-123002r1"></a><span
Chris@1 12289 class="cmr-6">1</span><span
Chris@1 12290 class="cmtt-8">&#x00A0;</span><span
Chris@1 12291 class="cmtt-8">&#x00A0;</span><span
Chris@1 12292 class="cmtt-8">&#x00A0;</span><span
Chris@1 12293 class="cmtt-8">&#x00A0;1)</span><span
Chris@1 12294 class="cmtt-8">&#x00A0;</span><span
Chris@1 12295 class="cmtt-8">&#x00A0;</span><span
Chris@1 12296 class="cmtt-8">&#x00A0;[dy]</span><span
Chris@1 12297 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12298 class="cmtt-8">&#x00A0;[y1]</span><span
Chris@1 12299 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12300 class="cmtt-8">&#x00A0;[y0]</span>
Chris@1 12301 <br class="fancyvrb" /><a
Chris@1 12302 id="x1-123004r2"></a><span
Chris@1 12303 class="cmr-6">2</span><span
Chris@1 12304 class="cmtt-8">&#x00A0;</span><span
Chris@1 12305 class="cmtt-8">&#x00A0;</span><span
Chris@1 12306 class="cmtt-8">&#x00A0;</span><span
Chris@1 12307 class="cmtt-8">&#x00A0;2)</span><span
Chris@1 12308 class="cmtt-8">&#x00A0;</span><span
Chris@1 12309 class="cmtt-8">&#x00A0;[adx]</span><span
Chris@1 12310 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12311 class="cmtt-8">&#x00A0;[x1]</span><span
Chris@1 12312 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12313 class="cmtt-8">&#x00A0;[x0]</span>
Chris@1 12314 <br class="fancyvrb" /><a
Chris@1 12315 id="x1-123006r3"></a><span
Chris@1 12316 class="cmr-6">3</span><span
Chris@1 12317 class="cmtt-8">&#x00A0;</span><span
Chris@1 12318 class="cmtt-8">&#x00A0;</span><span
Chris@1 12319 class="cmtt-8">&#x00A0;</span><span
Chris@1 12320 class="cmtt-8">&#x00A0;3)</span><span
Chris@1 12321 class="cmtt-8">&#x00A0;</span><span
Chris@1 12322 class="cmtt-8">&#x00A0;[ady]</span><span
Chris@1 12323 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12324 class="cmtt-8">&#x00A0;absolute</span><span
Chris@1 12325 class="cmtt-8">&#x00A0;value</span><span
Chris@1 12326 class="cmtt-8">&#x00A0;of</span><span
Chris@1 12327 class="cmtt-8">&#x00A0;[dy]</span>
Chris@1 12328 <br class="fancyvrb" /><a
Chris@1 12329 id="x1-123008r4"></a><span
Chris@1 12330 class="cmr-6">4</span><span
Chris@1 12331 class="cmtt-8">&#x00A0;</span><span
Chris@1 12332 class="cmtt-8">&#x00A0;</span><span
Chris@1 12333 class="cmtt-8">&#x00A0;</span><span
Chris@1 12334 class="cmtt-8">&#x00A0;4)</span><span
Chris@1 12335 class="cmtt-8">&#x00A0;[base]</span><span
Chris@1 12336 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12337 class="cmtt-8">&#x00A0;[dy]</span><span
Chris@1 12338 class="cmtt-8">&#x00A0;/</span><span
Chris@1 12339 class="cmtt-8">&#x00A0;[adx]</span><span
Chris@1 12340 class="cmtt-8">&#x00A0;using</span><span
Chris@1 12341 class="cmtt-8">&#x00A0;integer</span><span
Chris@1 12342 class="cmtt-8">&#x00A0;division</span>
Chris@1 12343 <br class="fancyvrb" /><a
Chris@1 12344 id="x1-123010r5"></a><span
Chris@1 12345 class="cmr-6">5</span><span
Chris@1 12346 class="cmtt-8">&#x00A0;</span><span
Chris@1 12347 class="cmtt-8">&#x00A0;</span><span
Chris@1 12348 class="cmtt-8">&#x00A0;</span><span
Chris@1 12349 class="cmtt-8">&#x00A0;5)</span><span
Chris@1 12350 class="cmtt-8">&#x00A0;</span><span
Chris@1 12351 class="cmtt-8">&#x00A0;</span><span
Chris@1 12352 class="cmtt-8">&#x00A0;</span><span
Chris@1 12353 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 12354 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12355 class="cmtt-8">&#x00A0;[x0]</span>
Chris@1 12356 <br class="fancyvrb" /><a
Chris@1 12357 id="x1-123012r6"></a><span
Chris@1 12358 class="cmr-6">6</span><span
Chris@1 12359 class="cmtt-8">&#x00A0;</span><span
Chris@1 12360 class="cmtt-8">&#x00A0;</span><span
Chris@1 12361 class="cmtt-8">&#x00A0;</span><span
Chris@1 12362 class="cmtt-8">&#x00A0;6)</span><span
Chris@1 12363 class="cmtt-8">&#x00A0;</span><span
Chris@1 12364 class="cmtt-8">&#x00A0;</span><span
Chris@1 12365 class="cmtt-8">&#x00A0;</span><span
Chris@1 12366 class="cmtt-8">&#x00A0;[y]</span><span
Chris@1 12367 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12368 class="cmtt-8">&#x00A0;[y0]</span>
Chris@1 12369 <br class="fancyvrb" /><a
Chris@1 12370 id="x1-123014r7"></a><span
Chris@1 12371 class="cmr-6">7</span><span
Chris@1 12372 class="cmtt-8">&#x00A0;</span><span
Chris@1 12373 class="cmtt-8">&#x00A0;</span><span
Chris@1 12374 class="cmtt-8">&#x00A0;</span><span
Chris@1 12375 class="cmtt-8">&#x00A0;7)</span><span
Chris@1 12376 class="cmtt-8">&#x00A0;</span><span
Chris@1 12377 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12378 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12379 class="cmtt-8">&#x00A0;0</span>
Chris@1 12380 <br class="fancyvrb" /><a
Chris@1 12381 id="x1-123016r8"></a><span
Chris@1 12382 class="cmr-6">8</span><span
Chris@1 12383 class="cmtt-8">&#x00A0;</span><span
Chris@1 12384 class="cmtt-8">&#x00A0;</span>
Chris@1 12385 <br class="fancyvrb" /><a
Chris@1 12386 id="x1-123018r9"></a><span
Chris@1 12387 class="cmr-6">9</span><span
Chris@1 12388 class="cmtt-8">&#x00A0;</span><span
Chris@1 12389 class="cmtt-8">&#x00A0;</span><span
Chris@1 12390 class="cmtt-8">&#x00A0;</span><span
Chris@1 12391 class="cmtt-8">&#x00A0;8)</span><span
Chris@1 12392 class="cmtt-8">&#x00A0;if</span><span
Chris@1 12393 class="cmtt-8">&#x00A0;(</span><span
Chris@1 12394 class="cmtt-8">&#x00A0;[dy]</span><span
Chris@1 12395 class="cmtt-8">&#x00A0;is</span><span
Chris@1 12396 class="cmtt-8">&#x00A0;less</span><span
Chris@1 12397 class="cmtt-8">&#x00A0;than</span><span
Chris@1 12398 class="cmtt-8">&#x00A0;0</span><span
Chris@1 12399 class="cmtt-8">&#x00A0;)</span><span
Chris@1 12400 class="cmtt-8">&#x00A0;{</span>
Chris@1 12401 <br class="fancyvrb" /><a
Chris@1 12402 id="x1-123020r10"></a><span
Chris@1 12403 class="cmr-6">10</span><span
Chris@1 12404 class="cmtt-8">&#x00A0;</span><span
Chris@1 12405 class="cmtt-8">&#x00A0;</span>
Chris@1 12406 <br class="fancyvrb" /><a
Chris@1 12407 id="x1-123022r11"></a><span
Chris@1 12408 class="cmr-6">11</span><span
Chris@1 12409 class="cmtt-8">&#x00A0;</span><span
Chris@1 12410 class="cmtt-8">&#x00A0;</span><span
Chris@1 12411 class="cmtt-8">&#x00A0;</span><span
Chris@1 12412 class="cmtt-8">&#x00A0;</span><span
Chris@1 12413 class="cmtt-8">&#x00A0;</span><span
Chris@1 12414 class="cmtt-8">&#x00A0;</span><span
Chris@1 12415 class="cmtt-8">&#x00A0;</span><span
Chris@1 12416 class="cmtt-8">&#x00A0;</span><span
Chris@1 12417 class="cmtt-8">&#x00A0;</span><span
Chris@1 12418 class="cmtt-8">&#x00A0;9)</span><span
Chris@1 12419 class="cmtt-8">&#x00A0;[sy]</span><span
Chris@1 12420 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12421 class="cmtt-8">&#x00A0;[base]</span><span
Chris@1 12422 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12423 class="cmtt-8">&#x00A0;1</span>
Chris@1 12424 <br class="fancyvrb" /><a
Chris@1 12425 id="x1-123024r12"></a><span
Chris@1 12426 class="cmr-6">12</span><span
Chris@1 12427 class="cmtt-8">&#x00A0;</span><span
Chris@1 12428 class="cmtt-8">&#x00A0;</span>
Chris@1 12429 <br class="fancyvrb" /><a
Chris@1 12430 id="x1-123026r13"></a><span
Chris@1 12431 class="cmr-6">13</span><span
Chris@1 12432 class="cmtt-8">&#x00A0;</span><span
Chris@1 12433 class="cmtt-8">&#x00A0;</span><span
Chris@1 12434 class="cmtt-8">&#x00A0;</span><span
Chris@1 12435 class="cmtt-8">&#x00A0;</span><span
Chris@1 12436 class="cmtt-8">&#x00A0;</span><span
Chris@1 12437 class="cmtt-8">&#x00A0;</span><span
Chris@1 12438 class="cmtt-8">&#x00A0;}</span><span
Chris@1 12439 class="cmtt-8">&#x00A0;else</span><span
Chris@1 12440 class="cmtt-8">&#x00A0;{</span>
Chris@1 12441 <br class="fancyvrb" /><a
Chris@1 12442 id="x1-123028r14"></a><span
Chris@1 12443 class="cmr-6">14</span><span
Chris@1 12444 class="cmtt-8">&#x00A0;</span><span
Chris@1 12445 class="cmtt-8">&#x00A0;</span>
Chris@1 12446 <br class="fancyvrb" /><a
Chris@1 12447 id="x1-123030r15"></a><span
Chris@1 12448 class="cmr-6">15</span><span
Chris@1 12449 class="cmtt-8">&#x00A0;</span><span
Chris@1 12450 class="cmtt-8">&#x00A0;</span><span
Chris@1 12451 class="cmtt-8">&#x00A0;</span><span
Chris@1 12452 class="cmtt-8">&#x00A0;</span><span
Chris@1 12453 class="cmtt-8">&#x00A0;</span><span
Chris@1 12454 class="cmtt-8">&#x00A0;</span><span
Chris@1 12455 class="cmtt-8">&#x00A0;</span><span
Chris@1 12456 class="cmtt-8">&#x00A0;</span><span
Chris@1 12457 class="cmtt-8">&#x00A0;10)</span><span
Chris@1 12458 class="cmtt-8">&#x00A0;[sy]</span><span
Chris@1 12459 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12460 class="cmtt-8">&#x00A0;[base]</span><span
Chris@1 12461 class="cmtt-8">&#x00A0;+</span><span
Chris@1 12462 class="cmtt-8">&#x00A0;1</span>
Chris@1 12463 <br class="fancyvrb" /><a
Chris@1 12464 id="x1-123032r16"></a><span
Chris@1 12465 class="cmr-6">16</span><span
Chris@1 12466 class="cmtt-8">&#x00A0;</span><span
Chris@1 12467 class="cmtt-8">&#x00A0;</span>
Chris@1 12468 <br class="fancyvrb" /><a
Chris@1 12469 id="x1-123034r17"></a><span
Chris@1 12470 class="cmr-6">17</span><span
Chris@1 12471 class="cmtt-8">&#x00A0;</span><span
Chris@1 12472 class="cmtt-8">&#x00A0;</span><span
Chris@1 12473 class="cmtt-8">&#x00A0;</span><span
Chris@1 12474 class="cmtt-8">&#x00A0;</span><span
Chris@1 12475 class="cmtt-8">&#x00A0;</span><span
Chris@1 12476 class="cmtt-8">&#x00A0;</span><span
Chris@1 12477 class="cmtt-8">&#x00A0;}</span>
Chris@1 12478 <br class="fancyvrb" /><a
Chris@1 12479 id="x1-123036r18"></a><span
Chris@1 12480 class="cmr-6">18</span><span
Chris@1 12481 class="cmtt-8">&#x00A0;</span><span
Chris@1 12482 class="cmtt-8">&#x00A0;</span>
Chris@1 12483 <br class="fancyvrb" /><a
Chris@1 12484 id="x1-123038r19"></a><span
Chris@1 12485 class="cmr-6">19</span><span
Chris@1 12486 class="cmtt-8">&#x00A0;</span><span
Chris@1 12487 class="cmtt-8">&#x00A0;</span><span
Chris@1 12488 class="cmtt-8">&#x00A0;11)</span><span
Chris@1 12489 class="cmtt-8">&#x00A0;[ady]</span><span
Chris@1 12490 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12491 class="cmtt-8">&#x00A0;[ady]</span><span
Chris@1 12492 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12493 class="cmtt-8">&#x00A0;(absolute</span><span
Chris@1 12494 class="cmtt-8">&#x00A0;value</span><span
Chris@1 12495 class="cmtt-8">&#x00A0;of</span><span
Chris@1 12496 class="cmtt-8">&#x00A0;[base])</span><span
Chris@1 12497 class="cmtt-8">&#x00A0;*</span><span
Chris@1 12498 class="cmtt-8">&#x00A0;[adx]</span>
Chris@1 12499 <br class="fancyvrb" /><a
Chris@1 12500 id="x1-123040r20"></a><span
Chris@1 12501 class="cmr-6">20</span><span
Chris@1 12502 class="cmtt-8">&#x00A0;</span><span
Chris@1 12503 class="cmtt-8">&#x00A0;</span><span
Chris@1 12504 class="cmtt-8">&#x00A0;12)</span><span
Chris@1 12505 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 12506 class="cmtt-8">&#x00A0;[v]</span><span
Chris@1 12507 class="cmtt-8">&#x00A0;element</span><span
Chris@1 12508 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 12509 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12510 class="cmtt-8">&#x00A0;[y]</span>
Chris@1 12511 <br class="fancyvrb" /><a
Chris@1 12512 id="x1-123042r21"></a><span
Chris@1 12513 class="cmr-6">21</span><span
Chris@1 12514 class="cmtt-8">&#x00A0;</span><span
Chris@1 12515 class="cmtt-8">&#x00A0;</span>
Chris@1 12516 <br class="fancyvrb" /><a
Chris@1 12517 id="x1-123044r22"></a><span
Chris@1 12518 class="cmr-6">22</span><span
Chris@1 12519 class="cmtt-8">&#x00A0;</span><span
Chris@1 12520 class="cmtt-8">&#x00A0;</span><span
Chris@1 12521 class="cmtt-8">&#x00A0;13)</span><span
Chris@1 12522 class="cmtt-8">&#x00A0;iterate</span><span
Chris@1 12523 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 12524 class="cmtt-8">&#x00A0;over</span><span
Chris@1 12525 class="cmtt-8">&#x00A0;the</span><span
Chris@1 12526 class="cmtt-8">&#x00A0;range</span><span
Chris@1 12527 class="cmtt-8">&#x00A0;[x0]+1</span><span
Chris@1 12528 class="cmtt-8">&#x00A0;...</span><span
Chris@1 12529 class="cmtt-8">&#x00A0;[x1]-1</span><span
Chris@1 12530 class="cmtt-8">&#x00A0;{</span>
Chris@1 12531
Chris@1 12532
Chris@1 12533
Chris@1 12534 <br class="fancyvrb" /><a
Chris@1 12535 id="x1-123046r23"></a><span
Chris@1 12536 class="cmr-6">23</span><span
Chris@1 12537 class="cmtt-8">&#x00A0;</span><span
Chris@1 12538 class="cmtt-8">&#x00A0;</span>
Chris@1 12539 <br class="fancyvrb" /><a
Chris@1 12540 id="x1-123048r24"></a><span
Chris@1 12541 class="cmr-6">24</span><span
Chris@1 12542 class="cmtt-8">&#x00A0;</span><span
Chris@1 12543 class="cmtt-8">&#x00A0;</span><span
Chris@1 12544 class="cmtt-8">&#x00A0;</span><span
Chris@1 12545 class="cmtt-8">&#x00A0;</span><span
Chris@1 12546 class="cmtt-8">&#x00A0;</span><span
Chris@1 12547 class="cmtt-8">&#x00A0;</span><span
Chris@1 12548 class="cmtt-8">&#x00A0;</span><span
Chris@1 12549 class="cmtt-8">&#x00A0;</span><span
Chris@1 12550 class="cmtt-8">&#x00A0;14)</span><span
Chris@1 12551 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12552 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12553 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12554 class="cmtt-8">&#x00A0;+</span><span
Chris@1 12555 class="cmtt-8">&#x00A0;[ady];</span>
Chris@1 12556 <br class="fancyvrb" /><a
Chris@1 12557 id="x1-123050r25"></a><span
Chris@1 12558 class="cmr-6">25</span><span
Chris@1 12559 class="cmtt-8">&#x00A0;</span><span
Chris@1 12560 class="cmtt-8">&#x00A0;</span><span
Chris@1 12561 class="cmtt-8">&#x00A0;</span><span
Chris@1 12562 class="cmtt-8">&#x00A0;</span><span
Chris@1 12563 class="cmtt-8">&#x00A0;</span><span
Chris@1 12564 class="cmtt-8">&#x00A0;</span><span
Chris@1 12565 class="cmtt-8">&#x00A0;</span><span
Chris@1 12566 class="cmtt-8">&#x00A0;</span><span
Chris@1 12567 class="cmtt-8">&#x00A0;15)</span><span
Chris@1 12568 class="cmtt-8">&#x00A0;if</span><span
Chris@1 12569 class="cmtt-8">&#x00A0;(</span><span
Chris@1 12570 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12571 class="cmtt-8">&#x00A0;&#x003E;=</span><span
Chris@1 12572 class="cmtt-8">&#x00A0;[adx]</span><span
Chris@1 12573 class="cmtt-8">&#x00A0;)</span><span
Chris@1 12574 class="cmtt-8">&#x00A0;{</span>
Chris@1 12575 <br class="fancyvrb" /><a
Chris@1 12576 id="x1-123052r26"></a><span
Chris@1 12577 class="cmr-6">26</span><span
Chris@1 12578 class="cmtt-8">&#x00A0;</span><span
Chris@1 12579 class="cmtt-8">&#x00A0;</span>
Chris@1 12580 <br class="fancyvrb" /><a
Chris@1 12581 id="x1-123054r27"></a><span
Chris@1 12582 class="cmr-6">27</span><span
Chris@1 12583 class="cmtt-8">&#x00A0;</span><span
Chris@1 12584 class="cmtt-8">&#x00A0;</span><span
Chris@1 12585 class="cmtt-8">&#x00A0;</span><span
Chris@1 12586 class="cmtt-8">&#x00A0;</span><span
Chris@1 12587 class="cmtt-8">&#x00A0;</span><span
Chris@1 12588 class="cmtt-8">&#x00A0;</span><span
Chris@1 12589 class="cmtt-8">&#x00A0;</span><span
Chris@1 12590 class="cmtt-8">&#x00A0;</span><span
Chris@1 12591 class="cmtt-8">&#x00A0;</span><span
Chris@1 12592 class="cmtt-8">&#x00A0;</span><span
Chris@1 12593 class="cmtt-8">&#x00A0;</span><span
Chris@1 12594 class="cmtt-8">&#x00A0;</span><span
Chris@1 12595 class="cmtt-8">&#x00A0;</span><span
Chris@1 12596 class="cmtt-8">&#x00A0;</span><span
Chris@1 12597 class="cmtt-8">&#x00A0;16)</span><span
Chris@1 12598 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12599 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12600 class="cmtt-8">&#x00A0;[err]</span><span
Chris@1 12601 class="cmtt-8">&#x00A0;-</span><span
Chris@1 12602 class="cmtt-8">&#x00A0;[adx]</span>
Chris@1 12603 <br class="fancyvrb" /><a
Chris@1 12604 id="x1-123056r28"></a><span
Chris@1 12605 class="cmr-6">28</span><span
Chris@1 12606 class="cmtt-8">&#x00A0;</span><span
Chris@1 12607 class="cmtt-8">&#x00A0;</span><span
Chris@1 12608 class="cmtt-8">&#x00A0;</span><span
Chris@1 12609 class="cmtt-8">&#x00A0;</span><span
Chris@1 12610 class="cmtt-8">&#x00A0;</span><span
Chris@1 12611 class="cmtt-8">&#x00A0;</span><span
Chris@1 12612 class="cmtt-8">&#x00A0;</span><span
Chris@1 12613 class="cmtt-8">&#x00A0;</span><span
Chris@1 12614 class="cmtt-8">&#x00A0;</span><span
Chris@1 12615 class="cmtt-8">&#x00A0;</span><span
Chris@1 12616 class="cmtt-8">&#x00A0;</span><span
Chris@1 12617 class="cmtt-8">&#x00A0;</span><span
Chris@1 12618 class="cmtt-8">&#x00A0;</span><span
Chris@1 12619 class="cmtt-8">&#x00A0;</span><span
Chris@1 12620 class="cmtt-8">&#x00A0;17)</span><span
Chris@1 12621 class="cmtt-8">&#x00A0;</span><span
Chris@1 12622 class="cmtt-8">&#x00A0;</span><span
Chris@1 12623 class="cmtt-8">&#x00A0;[y]</span><span
Chris@1 12624 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12625 class="cmtt-8">&#x00A0;[y]</span><span
Chris@1 12626 class="cmtt-8">&#x00A0;+</span><span
Chris@1 12627 class="cmtt-8">&#x00A0;[sy]</span>
Chris@1 12628 <br class="fancyvrb" /><a
Chris@1 12629 id="x1-123058r29"></a><span
Chris@1 12630 class="cmr-6">29</span><span
Chris@1 12631 class="cmtt-8">&#x00A0;</span><span
Chris@1 12632 class="cmtt-8">&#x00A0;</span>
Chris@1 12633 <br class="fancyvrb" /><a
Chris@1 12634 id="x1-123060r30"></a><span
Chris@1 12635 class="cmr-6">30</span><span
Chris@1 12636 class="cmtt-8">&#x00A0;</span><span
Chris@1 12637 class="cmtt-8">&#x00A0;</span><span
Chris@1 12638 class="cmtt-8">&#x00A0;</span><span
Chris@1 12639 class="cmtt-8">&#x00A0;</span><span
Chris@1 12640 class="cmtt-8">&#x00A0;</span><span
Chris@1 12641 class="cmtt-8">&#x00A0;</span><span
Chris@1 12642 class="cmtt-8">&#x00A0;</span><span
Chris@1 12643 class="cmtt-8">&#x00A0;</span><span
Chris@1 12644 class="cmtt-8">&#x00A0;</span><span
Chris@1 12645 class="cmtt-8">&#x00A0;</span><span
Chris@1 12646 class="cmtt-8">&#x00A0;</span><span
Chris@1 12647 class="cmtt-8">&#x00A0;</span><span
Chris@1 12648 class="cmtt-8">&#x00A0;}</span><span
Chris@1 12649 class="cmtt-8">&#x00A0;else</span><span
Chris@1 12650 class="cmtt-8">&#x00A0;{</span>
Chris@1 12651 <br class="fancyvrb" /><a
Chris@1 12652 id="x1-123062r31"></a><span
Chris@1 12653 class="cmr-6">31</span><span
Chris@1 12654 class="cmtt-8">&#x00A0;</span><span
Chris@1 12655 class="cmtt-8">&#x00A0;</span>
Chris@1 12656 <br class="fancyvrb" /><a
Chris@1 12657 id="x1-123064r32"></a><span
Chris@1 12658 class="cmr-6">32</span><span
Chris@1 12659 class="cmtt-8">&#x00A0;</span><span
Chris@1 12660 class="cmtt-8">&#x00A0;</span><span
Chris@1 12661 class="cmtt-8">&#x00A0;</span><span
Chris@1 12662 class="cmtt-8">&#x00A0;</span><span
Chris@1 12663 class="cmtt-8">&#x00A0;</span><span
Chris@1 12664 class="cmtt-8">&#x00A0;</span><span
Chris@1 12665 class="cmtt-8">&#x00A0;</span><span
Chris@1 12666 class="cmtt-8">&#x00A0;</span><span
Chris@1 12667 class="cmtt-8">&#x00A0;</span><span
Chris@1 12668 class="cmtt-8">&#x00A0;</span><span
Chris@1 12669 class="cmtt-8">&#x00A0;</span><span
Chris@1 12670 class="cmtt-8">&#x00A0;</span><span
Chris@1 12671 class="cmtt-8">&#x00A0;</span><span
Chris@1 12672 class="cmtt-8">&#x00A0;</span><span
Chris@1 12673 class="cmtt-8">&#x00A0;18)</span><span
Chris@1 12674 class="cmtt-8">&#x00A0;[y]</span><span
Chris@1 12675 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12676 class="cmtt-8">&#x00A0;[y]</span><span
Chris@1 12677 class="cmtt-8">&#x00A0;+</span><span
Chris@1 12678 class="cmtt-8">&#x00A0;[base]</span>
Chris@1 12679 <br class="fancyvrb" /><a
Chris@1 12680 id="x1-123066r33"></a><span
Chris@1 12681 class="cmr-6">33</span><span
Chris@1 12682 class="cmtt-8">&#x00A0;</span><span
Chris@1 12683 class="cmtt-8">&#x00A0;</span>
Chris@1 12684 <br class="fancyvrb" /><a
Chris@1 12685 id="x1-123068r34"></a><span
Chris@1 12686 class="cmr-6">34</span><span
Chris@1 12687 class="cmtt-8">&#x00A0;</span><span
Chris@1 12688 class="cmtt-8">&#x00A0;</span><span
Chris@1 12689 class="cmtt-8">&#x00A0;</span><span
Chris@1 12690 class="cmtt-8">&#x00A0;</span><span
Chris@1 12691 class="cmtt-8">&#x00A0;</span><span
Chris@1 12692 class="cmtt-8">&#x00A0;</span><span
Chris@1 12693 class="cmtt-8">&#x00A0;</span><span
Chris@1 12694 class="cmtt-8">&#x00A0;</span><span
Chris@1 12695 class="cmtt-8">&#x00A0;</span><span
Chris@1 12696 class="cmtt-8">&#x00A0;</span><span
Chris@1 12697 class="cmtt-8">&#x00A0;</span><span
Chris@1 12698 class="cmtt-8">&#x00A0;</span><span
Chris@1 12699 class="cmtt-8">&#x00A0;}</span>
Chris@1 12700 <br class="fancyvrb" /><a
Chris@1 12701 id="x1-123070r35"></a><span
Chris@1 12702 class="cmr-6">35</span><span
Chris@1 12703 class="cmtt-8">&#x00A0;</span><span
Chris@1 12704 class="cmtt-8">&#x00A0;</span>
Chris@1 12705 <br class="fancyvrb" /><a
Chris@1 12706 id="x1-123072r36"></a><span
Chris@1 12707 class="cmr-6">36</span><span
Chris@1 12708 class="cmtt-8">&#x00A0;</span><span
Chris@1 12709 class="cmtt-8">&#x00A0;</span><span
Chris@1 12710 class="cmtt-8">&#x00A0;</span><span
Chris@1 12711 class="cmtt-8">&#x00A0;</span><span
Chris@1 12712 class="cmtt-8">&#x00A0;</span><span
Chris@1 12713 class="cmtt-8">&#x00A0;</span><span
Chris@1 12714 class="cmtt-8">&#x00A0;</span><span
Chris@1 12715 class="cmtt-8">&#x00A0;</span><span
Chris@1 12716 class="cmtt-8">&#x00A0;19)</span><span
Chris@1 12717 class="cmtt-8">&#x00A0;vector</span><span
Chris@1 12718 class="cmtt-8">&#x00A0;[v]</span><span
Chris@1 12719 class="cmtt-8">&#x00A0;element</span><span
Chris@1 12720 class="cmtt-8">&#x00A0;[x]</span><span
Chris@1 12721 class="cmtt-8">&#x00A0;=</span><span
Chris@1 12722 class="cmtt-8">&#x00A0;[y]</span>
Chris@1 12723 <br class="fancyvrb" /><a
Chris@1 12724 id="x1-123074r37"></a><span
Chris@1 12725 class="cmr-6">37</span><span
Chris@1 12726 class="cmtt-8">&#x00A0;</span><span
Chris@1 12727 class="cmtt-8">&#x00A0;</span>
Chris@1 12728 <br class="fancyvrb" /><a
Chris@1 12729 id="x1-123076r38"></a><span
Chris@1 12730 class="cmr-6">38</span><span
Chris@1 12731 class="cmtt-8">&#x00A0;</span><span
Chris@1 12732 class="cmtt-8">&#x00A0;</span><span
Chris@1 12733 class="cmtt-8">&#x00A0;</span><span
Chris@1 12734 class="cmtt-8">&#x00A0;</span><span
Chris@1 12735 class="cmtt-8">&#x00A0;</span><span
Chris@1 12736 class="cmtt-8">&#x00A0;</span><span
Chris@1 12737 class="cmtt-8">&#x00A0;}</span>
Chris@1 12738 </div>
Chris@1 12739
Chris@1 12740
Chris@1 12741
Chris@1 12742
Chris@1 12743
Chris@1 12744
Chris@1 12745 <h3 class="sectionHead"><span class="titlemark">10. </span> <a
Chris@1 12746 id="x1-12400010"></a>Tables</h3>
Chris@1 12747 <!--l. 6--><p class="noindent" >
Chris@1 12748 <h4 class="subsectionHead"><span class="titlemark">10.1. </span> <a
Chris@1 12749 id="x1-12500010.1"></a>floor1_inverse_dB_table</h4>
Chris@1 12750 <!--l. 8--><p class="noindent" >The vector <span
Chris@1 12751 class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the
Chris@1 12752 following values (read left to right then top to bottom):
Chris@1 12753 <!--l. 12--><p class="noindent" >
Chris@1 12754 <div class="fancyvrb" id="fancyvrb48">
Chris@1 12755 <a
Chris@1 12756 id="x1-125002r1"></a><span
Chris@1 12757 class="cmr-6">1</span><span
Chris@1 12758 class="cmtt-8">&#x00A0;</span><span
Chris@1 12759 class="cmtt-8">&#x00A0;</span><span
Chris@1 12760 class="cmtt-8">&#x00A0;</span><span
Chris@1 12761 class="cmtt-8">&#x00A0;1.0649863e-07,</span><span
Chris@1 12762 class="cmtt-8">&#x00A0;1.1341951e-07,</span><span
Chris@1 12763 class="cmtt-8">&#x00A0;1.2079015e-07,</span><span
Chris@1 12764 class="cmtt-8">&#x00A0;1.2863978e-07,</span>
Chris@1 12765 <br class="fancyvrb" /><a
Chris@1 12766 id="x1-125004r2"></a><span
Chris@1 12767 class="cmr-6">2</span><span
Chris@1 12768 class="cmtt-8">&#x00A0;</span><span
Chris@1 12769 class="cmtt-8">&#x00A0;</span><span
Chris@1 12770 class="cmtt-8">&#x00A0;</span><span
Chris@1 12771 class="cmtt-8">&#x00A0;1.3699951e-07,</span><span
Chris@1 12772 class="cmtt-8">&#x00A0;1.4590251e-07,</span><span
Chris@1 12773 class="cmtt-8">&#x00A0;1.5538408e-07,</span><span
Chris@1 12774 class="cmtt-8">&#x00A0;1.6548181e-07,</span>
Chris@1 12775 <br class="fancyvrb" /><a
Chris@1 12776 id="x1-125006r3"></a><span
Chris@1 12777 class="cmr-6">3</span><span
Chris@1 12778 class="cmtt-8">&#x00A0;</span><span
Chris@1 12779 class="cmtt-8">&#x00A0;</span><span
Chris@1 12780 class="cmtt-8">&#x00A0;</span><span
Chris@1 12781 class="cmtt-8">&#x00A0;1.7623575e-07,</span><span
Chris@1 12782 class="cmtt-8">&#x00A0;1.8768855e-07,</span><span
Chris@1 12783 class="cmtt-8">&#x00A0;1.9988561e-07,</span><span
Chris@1 12784 class="cmtt-8">&#x00A0;2.1287530e-07,</span>
Chris@1 12785 <br class="fancyvrb" /><a
Chris@1 12786 id="x1-125008r4"></a><span
Chris@1 12787 class="cmr-6">4</span><span
Chris@1 12788 class="cmtt-8">&#x00A0;</span><span
Chris@1 12789 class="cmtt-8">&#x00A0;</span><span
Chris@1 12790 class="cmtt-8">&#x00A0;</span><span
Chris@1 12791 class="cmtt-8">&#x00A0;2.2670913e-07,</span><span
Chris@1 12792 class="cmtt-8">&#x00A0;2.4144197e-07,</span><span
Chris@1 12793 class="cmtt-8">&#x00A0;2.5713223e-07,</span><span
Chris@1 12794 class="cmtt-8">&#x00A0;2.7384213e-07,</span>
Chris@1 12795 <br class="fancyvrb" /><a
Chris@1 12796 id="x1-125010r5"></a><span
Chris@1 12797 class="cmr-6">5</span><span
Chris@1 12798 class="cmtt-8">&#x00A0;</span><span
Chris@1 12799 class="cmtt-8">&#x00A0;</span><span
Chris@1 12800 class="cmtt-8">&#x00A0;</span><span
Chris@1 12801 class="cmtt-8">&#x00A0;2.9163793e-07,</span><span
Chris@1 12802 class="cmtt-8">&#x00A0;3.1059021e-07,</span><span
Chris@1 12803 class="cmtt-8">&#x00A0;3.3077411e-07,</span><span
Chris@1 12804 class="cmtt-8">&#x00A0;3.5226968e-07,</span>
Chris@1 12805 <br class="fancyvrb" /><a
Chris@1 12806 id="x1-125012r6"></a><span
Chris@1 12807 class="cmr-6">6</span><span
Chris@1 12808 class="cmtt-8">&#x00A0;</span><span
Chris@1 12809 class="cmtt-8">&#x00A0;</span><span
Chris@1 12810 class="cmtt-8">&#x00A0;</span><span
Chris@1 12811 class="cmtt-8">&#x00A0;3.7516214e-07,</span><span
Chris@1 12812 class="cmtt-8">&#x00A0;3.9954229e-07,</span><span
Chris@1 12813 class="cmtt-8">&#x00A0;4.2550680e-07,</span><span
Chris@1 12814 class="cmtt-8">&#x00A0;4.5315863e-07,</span>
Chris@1 12815 <br class="fancyvrb" /><a
Chris@1 12816 id="x1-125014r7"></a><span
Chris@1 12817 class="cmr-6">7</span><span
Chris@1 12818 class="cmtt-8">&#x00A0;</span><span
Chris@1 12819 class="cmtt-8">&#x00A0;</span><span
Chris@1 12820 class="cmtt-8">&#x00A0;</span><span
Chris@1 12821 class="cmtt-8">&#x00A0;4.8260743e-07,</span><span
Chris@1 12822 class="cmtt-8">&#x00A0;5.1396998e-07,</span><span
Chris@1 12823 class="cmtt-8">&#x00A0;5.4737065e-07,</span><span
Chris@1 12824 class="cmtt-8">&#x00A0;5.8294187e-07,</span>
Chris@1 12825 <br class="fancyvrb" /><a
Chris@1 12826 id="x1-125016r8"></a><span
Chris@1 12827 class="cmr-6">8</span><span
Chris@1 12828 class="cmtt-8">&#x00A0;</span><span
Chris@1 12829 class="cmtt-8">&#x00A0;</span><span
Chris@1 12830 class="cmtt-8">&#x00A0;</span><span
Chris@1 12831 class="cmtt-8">&#x00A0;6.2082472e-07,</span><span
Chris@1 12832 class="cmtt-8">&#x00A0;6.6116941e-07,</span><span
Chris@1 12833 class="cmtt-8">&#x00A0;7.0413592e-07,</span><span
Chris@1 12834 class="cmtt-8">&#x00A0;7.4989464e-07,</span>
Chris@1 12835 <br class="fancyvrb" /><a
Chris@1 12836 id="x1-125018r9"></a><span
Chris@1 12837 class="cmr-6">9</span><span
Chris@1 12838 class="cmtt-8">&#x00A0;</span><span
Chris@1 12839 class="cmtt-8">&#x00A0;</span><span
Chris@1 12840 class="cmtt-8">&#x00A0;</span><span
Chris@1 12841 class="cmtt-8">&#x00A0;7.9862701e-07,</span><span
Chris@1 12842 class="cmtt-8">&#x00A0;8.5052630e-07,</span><span
Chris@1 12843 class="cmtt-8">&#x00A0;9.0579828e-07,</span><span
Chris@1 12844 class="cmtt-8">&#x00A0;9.6466216e-07,</span>
Chris@1 12845 <br class="fancyvrb" /><a
Chris@1 12846 id="x1-125020r10"></a><span
Chris@1 12847 class="cmr-6">10</span><span
Chris@1 12848 class="cmtt-8">&#x00A0;</span><span
Chris@1 12849 class="cmtt-8">&#x00A0;</span><span
Chris@1 12850 class="cmtt-8">&#x00A0;</span><span
Chris@1 12851 class="cmtt-8">&#x00A0;1.0273513e-06,</span><span
Chris@1 12852 class="cmtt-8">&#x00A0;1.0941144e-06,</span><span
Chris@1 12853 class="cmtt-8">&#x00A0;1.1652161e-06,</span><span
Chris@1 12854 class="cmtt-8">&#x00A0;1.2409384e-06,</span>
Chris@1 12855 <br class="fancyvrb" /><a
Chris@1 12856 id="x1-125022r11"></a><span
Chris@1 12857 class="cmr-6">11</span><span
Chris@1 12858 class="cmtt-8">&#x00A0;</span><span
Chris@1 12859 class="cmtt-8">&#x00A0;</span><span
Chris@1 12860 class="cmtt-8">&#x00A0;</span><span
Chris@1 12861 class="cmtt-8">&#x00A0;1.3215816e-06,</span><span
Chris@1 12862 class="cmtt-8">&#x00A0;1.4074654e-06,</span><span
Chris@1 12863 class="cmtt-8">&#x00A0;1.4989305e-06,</span><span
Chris@1 12864 class="cmtt-8">&#x00A0;1.5963394e-06,</span>
Chris@1 12865 <br class="fancyvrb" /><a
Chris@1 12866 id="x1-125024r12"></a><span
Chris@1 12867 class="cmr-6">12</span><span
Chris@1 12868 class="cmtt-8">&#x00A0;</span><span
Chris@1 12869 class="cmtt-8">&#x00A0;</span><span
Chris@1 12870 class="cmtt-8">&#x00A0;</span><span
Chris@1 12871 class="cmtt-8">&#x00A0;1.7000785e-06,</span><span
Chris@1 12872 class="cmtt-8">&#x00A0;1.8105592e-06,</span><span
Chris@1 12873 class="cmtt-8">&#x00A0;1.9282195e-06,</span><span
Chris@1 12874 class="cmtt-8">&#x00A0;2.0535261e-06,</span>
Chris@1 12875 <br class="fancyvrb" /><a
Chris@1 12876 id="x1-125026r13"></a><span
Chris@1 12877 class="cmr-6">13</span><span
Chris@1 12878 class="cmtt-8">&#x00A0;</span><span
Chris@1 12879 class="cmtt-8">&#x00A0;</span><span
Chris@1 12880 class="cmtt-8">&#x00A0;</span><span
Chris@1 12881 class="cmtt-8">&#x00A0;2.1869758e-06,</span><span
Chris@1 12882 class="cmtt-8">&#x00A0;2.3290978e-06,</span><span
Chris@1 12883 class="cmtt-8">&#x00A0;2.4804557e-06,</span><span
Chris@1 12884 class="cmtt-8">&#x00A0;2.6416497e-06,</span>
Chris@1 12885 <br class="fancyvrb" /><a
Chris@1 12886 id="x1-125028r14"></a><span
Chris@1 12887 class="cmr-6">14</span><span
Chris@1 12888 class="cmtt-8">&#x00A0;</span><span
Chris@1 12889 class="cmtt-8">&#x00A0;</span><span
Chris@1 12890 class="cmtt-8">&#x00A0;</span><span
Chris@1 12891 class="cmtt-8">&#x00A0;2.8133190e-06,</span><span
Chris@1 12892 class="cmtt-8">&#x00A0;2.9961443e-06,</span><span
Chris@1 12893 class="cmtt-8">&#x00A0;3.1908506e-06,</span><span
Chris@1 12894 class="cmtt-8">&#x00A0;3.3982101e-06,</span>
Chris@1 12895 <br class="fancyvrb" /><a
Chris@1 12896 id="x1-125030r15"></a><span
Chris@1 12897 class="cmr-6">15</span><span
Chris@1 12898 class="cmtt-8">&#x00A0;</span><span
Chris@1 12899 class="cmtt-8">&#x00A0;</span><span
Chris@1 12900 class="cmtt-8">&#x00A0;</span><span
Chris@1 12901 class="cmtt-8">&#x00A0;3.6190449e-06,</span><span
Chris@1 12902 class="cmtt-8">&#x00A0;3.8542308e-06,</span><span
Chris@1 12903 class="cmtt-8">&#x00A0;4.1047004e-06,</span><span
Chris@1 12904 class="cmtt-8">&#x00A0;4.3714470e-06,</span>
Chris@1 12905 <br class="fancyvrb" /><a
Chris@1 12906 id="x1-125032r16"></a><span
Chris@1 12907 class="cmr-6">16</span><span
Chris@1 12908 class="cmtt-8">&#x00A0;</span><span
Chris@1 12909 class="cmtt-8">&#x00A0;</span><span
Chris@1 12910 class="cmtt-8">&#x00A0;</span><span
Chris@1 12911 class="cmtt-8">&#x00A0;4.6555282e-06,</span><span
Chris@1 12912 class="cmtt-8">&#x00A0;4.9580707e-06,</span><span
Chris@1 12913 class="cmtt-8">&#x00A0;5.2802740e-06,</span><span
Chris@1 12914 class="cmtt-8">&#x00A0;5.6234160e-06,</span>
Chris@1 12915 <br class="fancyvrb" /><a
Chris@1 12916 id="x1-125034r17"></a><span
Chris@1 12917 class="cmr-6">17</span><span
Chris@1 12918 class="cmtt-8">&#x00A0;</span><span
Chris@1 12919 class="cmtt-8">&#x00A0;</span><span
Chris@1 12920 class="cmtt-8">&#x00A0;</span><span
Chris@1 12921 class="cmtt-8">&#x00A0;5.9888572e-06,</span><span
Chris@1 12922 class="cmtt-8">&#x00A0;6.3780469e-06,</span><span
Chris@1 12923 class="cmtt-8">&#x00A0;6.7925283e-06,</span><span
Chris@1 12924 class="cmtt-8">&#x00A0;7.2339451e-06,</span>
Chris@1 12925 <br class="fancyvrb" /><a
Chris@1 12926 id="x1-125036r18"></a><span
Chris@1 12927 class="cmr-6">18</span><span
Chris@1 12928 class="cmtt-8">&#x00A0;</span><span
Chris@1 12929 class="cmtt-8">&#x00A0;</span><span
Chris@1 12930 class="cmtt-8">&#x00A0;</span><span
Chris@1 12931 class="cmtt-8">&#x00A0;7.7040476e-06,</span><span
Chris@1 12932 class="cmtt-8">&#x00A0;8.2047000e-06,</span><span
Chris@1 12933 class="cmtt-8">&#x00A0;8.7378876e-06,</span><span
Chris@1 12934 class="cmtt-8">&#x00A0;9.3057248e-06,</span>
Chris@1 12935 <br class="fancyvrb" /><a
Chris@1 12936 id="x1-125038r19"></a><span
Chris@1 12937 class="cmr-6">19</span><span
Chris@1 12938 class="cmtt-8">&#x00A0;</span><span
Chris@1 12939 class="cmtt-8">&#x00A0;</span><span
Chris@1 12940 class="cmtt-8">&#x00A0;</span><span
Chris@1 12941 class="cmtt-8">&#x00A0;9.9104632e-06,</span><span
Chris@1 12942 class="cmtt-8">&#x00A0;1.0554501e-05,</span><span
Chris@1 12943 class="cmtt-8">&#x00A0;1.1240392e-05,</span><span
Chris@1 12944 class="cmtt-8">&#x00A0;1.1970856e-05,</span>
Chris@1 12945 <br class="fancyvrb" /><a
Chris@1 12946 id="x1-125040r20"></a><span
Chris@1 12947 class="cmr-6">20</span><span
Chris@1 12948 class="cmtt-8">&#x00A0;</span><span
Chris@1 12949 class="cmtt-8">&#x00A0;</span><span
Chris@1 12950 class="cmtt-8">&#x00A0;</span><span
Chris@1 12951 class="cmtt-8">&#x00A0;1.2748789e-05,</span><span
Chris@1 12952 class="cmtt-8">&#x00A0;1.3577278e-05,</span><span
Chris@1 12953 class="cmtt-8">&#x00A0;1.4459606e-05,</span><span
Chris@1 12954 class="cmtt-8">&#x00A0;1.5399272e-05,</span>
Chris@1 12955 <br class="fancyvrb" /><a
Chris@1 12956 id="x1-125042r21"></a><span
Chris@1 12957 class="cmr-6">21</span><span
Chris@1 12958 class="cmtt-8">&#x00A0;</span><span
Chris@1 12959 class="cmtt-8">&#x00A0;</span><span
Chris@1 12960 class="cmtt-8">&#x00A0;</span><span
Chris@1 12961 class="cmtt-8">&#x00A0;1.6400004e-05,</span><span
Chris@1 12962 class="cmtt-8">&#x00A0;1.7465768e-05,</span><span
Chris@1 12963 class="cmtt-8">&#x00A0;1.8600792e-05,</span><span
Chris@1 12964 class="cmtt-8">&#x00A0;1.9809576e-05,</span>
Chris@1 12965 <br class="fancyvrb" /><a
Chris@1 12966 id="x1-125044r22"></a><span
Chris@1 12967 class="cmr-6">22</span><span
Chris@1 12968 class="cmtt-8">&#x00A0;</span><span
Chris@1 12969 class="cmtt-8">&#x00A0;</span><span
Chris@1 12970 class="cmtt-8">&#x00A0;</span><span
Chris@1 12971 class="cmtt-8">&#x00A0;2.1096914e-05,</span><span
Chris@1 12972 class="cmtt-8">&#x00A0;2.2467911e-05,</span><span
Chris@1 12973 class="cmtt-8">&#x00A0;2.3928002e-05,</span><span
Chris@1 12974 class="cmtt-8">&#x00A0;2.5482978e-05,</span>
Chris@1 12975 <br class="fancyvrb" /><a
Chris@1 12976 id="x1-125046r23"></a><span
Chris@1 12977 class="cmr-6">23</span><span
Chris@1 12978 class="cmtt-8">&#x00A0;</span><span
Chris@1 12979 class="cmtt-8">&#x00A0;</span><span
Chris@1 12980 class="cmtt-8">&#x00A0;</span><span
Chris@1 12981 class="cmtt-8">&#x00A0;2.7139006e-05,</span><span
Chris@1 12982 class="cmtt-8">&#x00A0;2.8902651e-05,</span><span
Chris@1 12983 class="cmtt-8">&#x00A0;3.0780908e-05,</span><span
Chris@1 12984 class="cmtt-8">&#x00A0;3.2781225e-05,</span>
Chris@1 12985 <br class="fancyvrb" /><a
Chris@1 12986 id="x1-125048r24"></a><span
Chris@1 12987 class="cmr-6">24</span><span
Chris@1 12988 class="cmtt-8">&#x00A0;</span><span
Chris@1 12989 class="cmtt-8">&#x00A0;</span><span
Chris@1 12990 class="cmtt-8">&#x00A0;</span><span
Chris@1 12991 class="cmtt-8">&#x00A0;3.4911534e-05,</span><span
Chris@1 12992 class="cmtt-8">&#x00A0;3.7180282e-05,</span><span
Chris@1 12993 class="cmtt-8">&#x00A0;3.9596466e-05,</span><span
Chris@1 12994 class="cmtt-8">&#x00A0;4.2169667e-05,</span>
Chris@1 12995 <br class="fancyvrb" /><a
Chris@1 12996 id="x1-125050r25"></a><span
Chris@1 12997 class="cmr-6">25</span><span
Chris@1 12998 class="cmtt-8">&#x00A0;</span><span
Chris@1 12999 class="cmtt-8">&#x00A0;</span><span
Chris@1 13000 class="cmtt-8">&#x00A0;</span><span
Chris@1 13001 class="cmtt-8">&#x00A0;4.4910090e-05,</span><span
Chris@1 13002 class="cmtt-8">&#x00A0;4.7828601e-05,</span><span
Chris@1 13003 class="cmtt-8">&#x00A0;5.0936773e-05,</span><span
Chris@1 13004 class="cmtt-8">&#x00A0;5.4246931e-05,</span>
Chris@1 13005 <br class="fancyvrb" /><a
Chris@1 13006 id="x1-125052r26"></a><span
Chris@1 13007 class="cmr-6">26</span><span
Chris@1 13008 class="cmtt-8">&#x00A0;</span><span
Chris@1 13009 class="cmtt-8">&#x00A0;</span><span
Chris@1 13010 class="cmtt-8">&#x00A0;</span><span
Chris@1 13011 class="cmtt-8">&#x00A0;5.7772202e-05,</span><span
Chris@1 13012 class="cmtt-8">&#x00A0;6.1526565e-05,</span><span
Chris@1 13013 class="cmtt-8">&#x00A0;6.5524908e-05,</span><span
Chris@1 13014 class="cmtt-8">&#x00A0;6.9783085e-05,</span>
Chris@1 13015 <br class="fancyvrb" /><a
Chris@1 13016 id="x1-125054r27"></a><span
Chris@1 13017 class="cmr-6">27</span><span
Chris@1 13018 class="cmtt-8">&#x00A0;</span><span
Chris@1 13019 class="cmtt-8">&#x00A0;</span><span
Chris@1 13020 class="cmtt-8">&#x00A0;</span><span
Chris@1 13021 class="cmtt-8">&#x00A0;7.4317983e-05,</span><span
Chris@1 13022 class="cmtt-8">&#x00A0;7.9147585e-05,</span><span
Chris@1 13023 class="cmtt-8">&#x00A0;8.4291040e-05,</span><span
Chris@1 13024 class="cmtt-8">&#x00A0;8.9768747e-05,</span>
Chris@1 13025 <br class="fancyvrb" /><a
Chris@1 13026 id="x1-125056r28"></a><span
Chris@1 13027 class="cmr-6">28</span><span
Chris@1 13028 class="cmtt-8">&#x00A0;</span><span
Chris@1 13029 class="cmtt-8">&#x00A0;</span><span
Chris@1 13030 class="cmtt-8">&#x00A0;</span><span
Chris@1 13031 class="cmtt-8">&#x00A0;9.5602426e-05,</span><span
Chris@1 13032 class="cmtt-8">&#x00A0;0.00010181521,</span><span
Chris@1 13033 class="cmtt-8">&#x00A0;0.00010843174,</span><span
Chris@1 13034 class="cmtt-8">&#x00A0;0.00011547824,</span>
Chris@1 13035 <br class="fancyvrb" /><a
Chris@1 13036 id="x1-125058r29"></a><span
Chris@1 13037 class="cmr-6">29</span><span
Chris@1 13038 class="cmtt-8">&#x00A0;</span><span
Chris@1 13039 class="cmtt-8">&#x00A0;</span><span
Chris@1 13040 class="cmtt-8">&#x00A0;</span><span
Chris@1 13041 class="cmtt-8">&#x00A0;0.00012298267,</span><span
Chris@1 13042 class="cmtt-8">&#x00A0;0.00013097477,</span><span
Chris@1 13043 class="cmtt-8">&#x00A0;0.00013948625,</span><span
Chris@1 13044 class="cmtt-8">&#x00A0;0.00014855085,</span>
Chris@1 13045 <br class="fancyvrb" /><a
Chris@1 13046 id="x1-125060r30"></a><span
Chris@1 13047 class="cmr-6">30</span><span
Chris@1 13048 class="cmtt-8">&#x00A0;</span><span
Chris@1 13049 class="cmtt-8">&#x00A0;</span><span
Chris@1 13050 class="cmtt-8">&#x00A0;</span><span
Chris@1 13051 class="cmtt-8">&#x00A0;0.00015820453,</span><span
Chris@1 13052 class="cmtt-8">&#x00A0;0.00016848555,</span><span
Chris@1 13053 class="cmtt-8">&#x00A0;0.00017943469,</span><span
Chris@1 13054 class="cmtt-8">&#x00A0;0.00019109536,</span>
Chris@1 13055 <br class="fancyvrb" /><a
Chris@1 13056 id="x1-125062r31"></a><span
Chris@1 13057 class="cmr-6">31</span><span
Chris@1 13058 class="cmtt-8">&#x00A0;</span><span
Chris@1 13059 class="cmtt-8">&#x00A0;</span><span
Chris@1 13060 class="cmtt-8">&#x00A0;</span><span
Chris@1 13061 class="cmtt-8">&#x00A0;0.00020351382,</span><span
Chris@1 13062 class="cmtt-8">&#x00A0;0.00021673929,</span><span
Chris@1 13063 class="cmtt-8">&#x00A0;0.00023082423,</span><span
Chris@1 13064 class="cmtt-8">&#x00A0;0.00024582449,</span>
Chris@1 13065 <br class="fancyvrb" /><a
Chris@1 13066 id="x1-125064r32"></a><span
Chris@1 13067 class="cmr-6">32</span><span
Chris@1 13068 class="cmtt-8">&#x00A0;</span><span
Chris@1 13069 class="cmtt-8">&#x00A0;</span><span
Chris@1 13070 class="cmtt-8">&#x00A0;</span><span
Chris@1 13071 class="cmtt-8">&#x00A0;0.00026179955,</span><span
Chris@1 13072 class="cmtt-8">&#x00A0;0.00027881276,</span><span
Chris@1 13073 class="cmtt-8">&#x00A0;0.00029693158,</span><span
Chris@1 13074 class="cmtt-8">&#x00A0;0.00031622787,</span>
Chris@1 13075 <br class="fancyvrb" /><a
Chris@1 13076 id="x1-125066r33"></a><span
Chris@1 13077 class="cmr-6">33</span><span
Chris@1 13078 class="cmtt-8">&#x00A0;</span><span
Chris@1 13079 class="cmtt-8">&#x00A0;</span><span
Chris@1 13080 class="cmtt-8">&#x00A0;</span><span
Chris@1 13081 class="cmtt-8">&#x00A0;0.00033677814,</span><span
Chris@1 13082 class="cmtt-8">&#x00A0;0.00035866388,</span><span
Chris@1 13083 class="cmtt-8">&#x00A0;0.00038197188,</span><span
Chris@1 13084 class="cmtt-8">&#x00A0;0.00040679456,</span>
Chris@1 13085 <br class="fancyvrb" /><a
Chris@1 13086 id="x1-125068r34"></a><span
Chris@1 13087 class="cmr-6">34</span><span
Chris@1 13088 class="cmtt-8">&#x00A0;</span><span
Chris@1 13089 class="cmtt-8">&#x00A0;</span><span
Chris@1 13090 class="cmtt-8">&#x00A0;</span><span
Chris@1 13091 class="cmtt-8">&#x00A0;0.00043323036,</span><span
Chris@1 13092 class="cmtt-8">&#x00A0;0.00046138411,</span><span
Chris@1 13093 class="cmtt-8">&#x00A0;0.00049136745,</span><span
Chris@1 13094 class="cmtt-8">&#x00A0;0.00052329927,</span>
Chris@1 13095 <br class="fancyvrb" /><a
Chris@1 13096 id="x1-125070r35"></a><span
Chris@1 13097 class="cmr-6">35</span><span
Chris@1 13098 class="cmtt-8">&#x00A0;</span><span
Chris@1 13099 class="cmtt-8">&#x00A0;</span><span
Chris@1 13100 class="cmtt-8">&#x00A0;</span><span
Chris@1 13101 class="cmtt-8">&#x00A0;0.00055730621,</span><span
Chris@1 13102 class="cmtt-8">&#x00A0;0.00059352311,</span><span
Chris@1 13103 class="cmtt-8">&#x00A0;0.00063209358,</span><span
Chris@1 13104 class="cmtt-8">&#x00A0;0.00067317058,</span>
Chris@1 13105 <br class="fancyvrb" /><a
Chris@1 13106 id="x1-125072r36"></a><span
Chris@1 13107 class="cmr-6">36</span><span
Chris@1 13108 class="cmtt-8">&#x00A0;</span><span
Chris@1 13109 class="cmtt-8">&#x00A0;</span><span
Chris@1 13110 class="cmtt-8">&#x00A0;</span><span
Chris@1 13111 class="cmtt-8">&#x00A0;0.00071691700,</span><span
Chris@1 13112 class="cmtt-8">&#x00A0;0.00076350630,</span><span
Chris@1 13113 class="cmtt-8">&#x00A0;0.00081312324,</span><span
Chris@1 13114 class="cmtt-8">&#x00A0;0.00086596457,</span>
Chris@1 13115 <br class="fancyvrb" /><a
Chris@1 13116 id="x1-125074r37"></a><span
Chris@1 13117 class="cmr-6">37</span><span
Chris@1 13118 class="cmtt-8">&#x00A0;</span><span
Chris@1 13119 class="cmtt-8">&#x00A0;</span><span
Chris@1 13120 class="cmtt-8">&#x00A0;</span><span
Chris@1 13121 class="cmtt-8">&#x00A0;0.00092223983,</span><span
Chris@1 13122 class="cmtt-8">&#x00A0;0.00098217216,</span><span
Chris@1 13123 class="cmtt-8">&#x00A0;0.0010459992,</span><span
Chris@1 13124 class="cmtt-8">&#x00A0;</span><span
Chris@1 13125 class="cmtt-8">&#x00A0;0.0011139742,</span>
Chris@1 13126 <br class="fancyvrb" /><a
Chris@1 13127 id="x1-125076r38"></a><span
Chris@1 13128 class="cmr-6">38</span><span
Chris@1 13129 class="cmtt-8">&#x00A0;</span><span
Chris@1 13130 class="cmtt-8">&#x00A0;</span><span
Chris@1 13131 class="cmtt-8">&#x00A0;</span><span
Chris@1 13132 class="cmtt-8">&#x00A0;0.0011863665,</span><span
Chris@1 13133 class="cmtt-8">&#x00A0;</span><span
Chris@1 13134 class="cmtt-8">&#x00A0;0.0012634633,</span><span
Chris@1 13135 class="cmtt-8">&#x00A0;</span><span
Chris@1 13136 class="cmtt-8">&#x00A0;0.0013455702,</span><span
Chris@1 13137 class="cmtt-8">&#x00A0;</span><span
Chris@1 13138 class="cmtt-8">&#x00A0;0.0014330129,</span>
Chris@1 13139 <br class="fancyvrb" /><a
Chris@1 13140 id="x1-125078r39"></a><span
Chris@1 13141 class="cmr-6">39</span><span
Chris@1 13142 class="cmtt-8">&#x00A0;</span><span
Chris@1 13143 class="cmtt-8">&#x00A0;</span><span
Chris@1 13144 class="cmtt-8">&#x00A0;</span><span
Chris@1 13145 class="cmtt-8">&#x00A0;0.0015261382,</span><span
Chris@1 13146 class="cmtt-8">&#x00A0;</span><span
Chris@1 13147 class="cmtt-8">&#x00A0;0.0016253153,</span><span
Chris@1 13148 class="cmtt-8">&#x00A0;</span><span
Chris@1 13149 class="cmtt-8">&#x00A0;0.0017309374,</span><span
Chris@1 13150 class="cmtt-8">&#x00A0;</span><span
Chris@1 13151 class="cmtt-8">&#x00A0;0.0018434235,</span>
Chris@1 13152 <br class="fancyvrb" /><a
Chris@1 13153 id="x1-125080r40"></a><span
Chris@1 13154 class="cmr-6">40</span><span
Chris@1 13155 class="cmtt-8">&#x00A0;</span><span
Chris@1 13156 class="cmtt-8">&#x00A0;</span><span
Chris@1 13157 class="cmtt-8">&#x00A0;</span><span
Chris@1 13158 class="cmtt-8">&#x00A0;0.0019632195,</span><span
Chris@1 13159 class="cmtt-8">&#x00A0;</span><span
Chris@1 13160 class="cmtt-8">&#x00A0;0.0020908006,</span><span
Chris@1 13161 class="cmtt-8">&#x00A0;</span><span
Chris@1 13162 class="cmtt-8">&#x00A0;0.0022266726,</span><span
Chris@1 13163 class="cmtt-8">&#x00A0;</span><span
Chris@1 13164 class="cmtt-8">&#x00A0;0.0023713743,</span>
Chris@1 13165 <br class="fancyvrb" /><a
Chris@1 13166 id="x1-125082r41"></a><span
Chris@1 13167 class="cmr-6">41</span><span
Chris@1 13168 class="cmtt-8">&#x00A0;</span><span
Chris@1 13169 class="cmtt-8">&#x00A0;</span><span
Chris@1 13170 class="cmtt-8">&#x00A0;</span><span
Chris@1 13171 class="cmtt-8">&#x00A0;0.0025254795,</span><span
Chris@1 13172 class="cmtt-8">&#x00A0;</span><span
Chris@1 13173 class="cmtt-8">&#x00A0;0.0026895994,</span><span
Chris@1 13174 class="cmtt-8">&#x00A0;</span><span
Chris@1 13175 class="cmtt-8">&#x00A0;0.0028643847,</span><span
Chris@1 13176 class="cmtt-8">&#x00A0;</span><span
Chris@1 13177 class="cmtt-8">&#x00A0;0.0030505286,</span>
Chris@1 13178 <br class="fancyvrb" /><a
Chris@1 13179 id="x1-125084r42"></a><span
Chris@1 13180 class="cmr-6">42</span><span
Chris@1 13181 class="cmtt-8">&#x00A0;</span><span
Chris@1 13182 class="cmtt-8">&#x00A0;</span><span
Chris@1 13183 class="cmtt-8">&#x00A0;</span><span
Chris@1 13184 class="cmtt-8">&#x00A0;0.0032487691,</span><span
Chris@1 13185 class="cmtt-8">&#x00A0;</span><span
Chris@1 13186 class="cmtt-8">&#x00A0;0.0034598925,</span><span
Chris@1 13187 class="cmtt-8">&#x00A0;</span><span
Chris@1 13188 class="cmtt-8">&#x00A0;0.0036847358,</span><span
Chris@1 13189 class="cmtt-8">&#x00A0;</span><span
Chris@1 13190 class="cmtt-8">&#x00A0;0.0039241906,</span>
Chris@1 13191
Chris@1 13192
Chris@1 13193
Chris@1 13194 <br class="fancyvrb" /><a
Chris@1 13195 id="x1-125086r43"></a><span
Chris@1 13196 class="cmr-6">43</span><span
Chris@1 13197 class="cmtt-8">&#x00A0;</span><span
Chris@1 13198 class="cmtt-8">&#x00A0;</span><span
Chris@1 13199 class="cmtt-8">&#x00A0;</span><span
Chris@1 13200 class="cmtt-8">&#x00A0;0.0041792066,</span><span
Chris@1 13201 class="cmtt-8">&#x00A0;</span><span
Chris@1 13202 class="cmtt-8">&#x00A0;0.0044507950,</span><span
Chris@1 13203 class="cmtt-8">&#x00A0;</span><span
Chris@1 13204 class="cmtt-8">&#x00A0;0.0047400328,</span><span
Chris@1 13205 class="cmtt-8">&#x00A0;</span><span
Chris@1 13206 class="cmtt-8">&#x00A0;0.0050480668,</span>
Chris@1 13207 <br class="fancyvrb" /><a
Chris@1 13208 id="x1-125088r44"></a><span
Chris@1 13209 class="cmr-6">44</span><span
Chris@1 13210 class="cmtt-8">&#x00A0;</span><span
Chris@1 13211 class="cmtt-8">&#x00A0;</span><span
Chris@1 13212 class="cmtt-8">&#x00A0;</span><span
Chris@1 13213 class="cmtt-8">&#x00A0;0.0053761186,</span><span
Chris@1 13214 class="cmtt-8">&#x00A0;</span><span
Chris@1 13215 class="cmtt-8">&#x00A0;0.0057254891,</span><span
Chris@1 13216 class="cmtt-8">&#x00A0;</span><span
Chris@1 13217 class="cmtt-8">&#x00A0;0.0060975636,</span><span
Chris@1 13218 class="cmtt-8">&#x00A0;</span><span
Chris@1 13219 class="cmtt-8">&#x00A0;0.0064938176,</span>
Chris@1 13220 <br class="fancyvrb" /><a
Chris@1 13221 id="x1-125090r45"></a><span
Chris@1 13222 class="cmr-6">45</span><span
Chris@1 13223 class="cmtt-8">&#x00A0;</span><span
Chris@1 13224 class="cmtt-8">&#x00A0;</span><span
Chris@1 13225 class="cmtt-8">&#x00A0;</span><span
Chris@1 13226 class="cmtt-8">&#x00A0;0.0069158225,</span><span
Chris@1 13227 class="cmtt-8">&#x00A0;</span><span
Chris@1 13228 class="cmtt-8">&#x00A0;0.0073652516,</span><span
Chris@1 13229 class="cmtt-8">&#x00A0;</span><span
Chris@1 13230 class="cmtt-8">&#x00A0;0.0078438871,</span><span
Chris@1 13231 class="cmtt-8">&#x00A0;</span><span
Chris@1 13232 class="cmtt-8">&#x00A0;0.0083536271,</span>
Chris@1 13233 <br class="fancyvrb" /><a
Chris@1 13234 id="x1-125092r46"></a><span
Chris@1 13235 class="cmr-6">46</span><span
Chris@1 13236 class="cmtt-8">&#x00A0;</span><span
Chris@1 13237 class="cmtt-8">&#x00A0;</span><span
Chris@1 13238 class="cmtt-8">&#x00A0;</span><span
Chris@1 13239 class="cmtt-8">&#x00A0;0.0088964928,</span><span
Chris@1 13240 class="cmtt-8">&#x00A0;</span><span
Chris@1 13241 class="cmtt-8">&#x00A0;0.009474637,</span><span
Chris@1 13242 class="cmtt-8">&#x00A0;</span><span
Chris@1 13243 class="cmtt-8">&#x00A0;</span><span
Chris@1 13244 class="cmtt-8">&#x00A0;0.010090352,</span><span
Chris@1 13245 class="cmtt-8">&#x00A0;</span><span
Chris@1 13246 class="cmtt-8">&#x00A0;</span><span
Chris@1 13247 class="cmtt-8">&#x00A0;0.010746080,</span>
Chris@1 13248 <br class="fancyvrb" /><a
Chris@1 13249 id="x1-125094r47"></a><span
Chris@1 13250 class="cmr-6">47</span><span
Chris@1 13251 class="cmtt-8">&#x00A0;</span><span
Chris@1 13252 class="cmtt-8">&#x00A0;</span><span
Chris@1 13253 class="cmtt-8">&#x00A0;</span><span
Chris@1 13254 class="cmtt-8">&#x00A0;0.011444421,</span><span
Chris@1 13255 class="cmtt-8">&#x00A0;</span><span
Chris@1 13256 class="cmtt-8">&#x00A0;</span><span
Chris@1 13257 class="cmtt-8">&#x00A0;0.012188144,</span><span
Chris@1 13258 class="cmtt-8">&#x00A0;</span><span
Chris@1 13259 class="cmtt-8">&#x00A0;</span><span
Chris@1 13260 class="cmtt-8">&#x00A0;0.012980198,</span><span
Chris@1 13261 class="cmtt-8">&#x00A0;</span><span
Chris@1 13262 class="cmtt-8">&#x00A0;</span><span
Chris@1 13263 class="cmtt-8">&#x00A0;0.013823725,</span>
Chris@1 13264 <br class="fancyvrb" /><a
Chris@1 13265 id="x1-125096r48"></a><span
Chris@1 13266 class="cmr-6">48</span><span
Chris@1 13267 class="cmtt-8">&#x00A0;</span><span
Chris@1 13268 class="cmtt-8">&#x00A0;</span><span
Chris@1 13269 class="cmtt-8">&#x00A0;</span><span
Chris@1 13270 class="cmtt-8">&#x00A0;0.014722068,</span><span
Chris@1 13271 class="cmtt-8">&#x00A0;</span><span
Chris@1 13272 class="cmtt-8">&#x00A0;</span><span
Chris@1 13273 class="cmtt-8">&#x00A0;0.015678791,</span><span
Chris@1 13274 class="cmtt-8">&#x00A0;</span><span
Chris@1 13275 class="cmtt-8">&#x00A0;</span><span
Chris@1 13276 class="cmtt-8">&#x00A0;0.016697687,</span><span
Chris@1 13277 class="cmtt-8">&#x00A0;</span><span
Chris@1 13278 class="cmtt-8">&#x00A0;</span><span
Chris@1 13279 class="cmtt-8">&#x00A0;0.017782797,</span>
Chris@1 13280 <br class="fancyvrb" /><a
Chris@1 13281 id="x1-125098r49"></a><span
Chris@1 13282 class="cmr-6">49</span><span
Chris@1 13283 class="cmtt-8">&#x00A0;</span><span
Chris@1 13284 class="cmtt-8">&#x00A0;</span><span
Chris@1 13285 class="cmtt-8">&#x00A0;</span><span
Chris@1 13286 class="cmtt-8">&#x00A0;0.018938423,</span><span
Chris@1 13287 class="cmtt-8">&#x00A0;</span><span
Chris@1 13288 class="cmtt-8">&#x00A0;</span><span
Chris@1 13289 class="cmtt-8">&#x00A0;0.020169149,</span><span
Chris@1 13290 class="cmtt-8">&#x00A0;</span><span
Chris@1 13291 class="cmtt-8">&#x00A0;</span><span
Chris@1 13292 class="cmtt-8">&#x00A0;0.021479854,</span><span
Chris@1 13293 class="cmtt-8">&#x00A0;</span><span
Chris@1 13294 class="cmtt-8">&#x00A0;</span><span
Chris@1 13295 class="cmtt-8">&#x00A0;0.022875735,</span>
Chris@1 13296 <br class="fancyvrb" /><a
Chris@1 13297 id="x1-125100r50"></a><span
Chris@1 13298 class="cmr-6">50</span><span
Chris@1 13299 class="cmtt-8">&#x00A0;</span><span
Chris@1 13300 class="cmtt-8">&#x00A0;</span><span
Chris@1 13301 class="cmtt-8">&#x00A0;</span><span
Chris@1 13302 class="cmtt-8">&#x00A0;0.024362330,</span><span
Chris@1 13303 class="cmtt-8">&#x00A0;</span><span
Chris@1 13304 class="cmtt-8">&#x00A0;</span><span
Chris@1 13305 class="cmtt-8">&#x00A0;0.025945531,</span><span
Chris@1 13306 class="cmtt-8">&#x00A0;</span><span
Chris@1 13307 class="cmtt-8">&#x00A0;</span><span
Chris@1 13308 class="cmtt-8">&#x00A0;0.027631618,</span><span
Chris@1 13309 class="cmtt-8">&#x00A0;</span><span
Chris@1 13310 class="cmtt-8">&#x00A0;</span><span
Chris@1 13311 class="cmtt-8">&#x00A0;0.029427276,</span>
Chris@1 13312 <br class="fancyvrb" /><a
Chris@1 13313 id="x1-125102r51"></a><span
Chris@1 13314 class="cmr-6">51</span><span
Chris@1 13315 class="cmtt-8">&#x00A0;</span><span
Chris@1 13316 class="cmtt-8">&#x00A0;</span><span
Chris@1 13317 class="cmtt-8">&#x00A0;</span><span
Chris@1 13318 class="cmtt-8">&#x00A0;0.031339626,</span><span
Chris@1 13319 class="cmtt-8">&#x00A0;</span><span
Chris@1 13320 class="cmtt-8">&#x00A0;</span><span
Chris@1 13321 class="cmtt-8">&#x00A0;0.033376252,</span><span
Chris@1 13322 class="cmtt-8">&#x00A0;</span><span
Chris@1 13323 class="cmtt-8">&#x00A0;</span><span
Chris@1 13324 class="cmtt-8">&#x00A0;0.035545228,</span><span
Chris@1 13325 class="cmtt-8">&#x00A0;</span><span
Chris@1 13326 class="cmtt-8">&#x00A0;</span><span
Chris@1 13327 class="cmtt-8">&#x00A0;0.037855157,</span>
Chris@1 13328 <br class="fancyvrb" /><a
Chris@1 13329 id="x1-125104r52"></a><span
Chris@1 13330 class="cmr-6">52</span><span
Chris@1 13331 class="cmtt-8">&#x00A0;</span><span
Chris@1 13332 class="cmtt-8">&#x00A0;</span><span
Chris@1 13333 class="cmtt-8">&#x00A0;</span><span
Chris@1 13334 class="cmtt-8">&#x00A0;0.040315199,</span><span
Chris@1 13335 class="cmtt-8">&#x00A0;</span><span
Chris@1 13336 class="cmtt-8">&#x00A0;</span><span
Chris@1 13337 class="cmtt-8">&#x00A0;0.042935108,</span><span
Chris@1 13338 class="cmtt-8">&#x00A0;</span><span
Chris@1 13339 class="cmtt-8">&#x00A0;</span><span
Chris@1 13340 class="cmtt-8">&#x00A0;0.045725273,</span><span
Chris@1 13341 class="cmtt-8">&#x00A0;</span><span
Chris@1 13342 class="cmtt-8">&#x00A0;</span><span
Chris@1 13343 class="cmtt-8">&#x00A0;0.048696758,</span>
Chris@1 13344 <br class="fancyvrb" /><a
Chris@1 13345 id="x1-125106r53"></a><span
Chris@1 13346 class="cmr-6">53</span><span
Chris@1 13347 class="cmtt-8">&#x00A0;</span><span
Chris@1 13348 class="cmtt-8">&#x00A0;</span><span
Chris@1 13349 class="cmtt-8">&#x00A0;</span><span
Chris@1 13350 class="cmtt-8">&#x00A0;0.051861348,</span><span
Chris@1 13351 class="cmtt-8">&#x00A0;</span><span
Chris@1 13352 class="cmtt-8">&#x00A0;</span><span
Chris@1 13353 class="cmtt-8">&#x00A0;0.055231591,</span><span
Chris@1 13354 class="cmtt-8">&#x00A0;</span><span
Chris@1 13355 class="cmtt-8">&#x00A0;</span><span
Chris@1 13356 class="cmtt-8">&#x00A0;0.058820850,</span><span
Chris@1 13357 class="cmtt-8">&#x00A0;</span><span
Chris@1 13358 class="cmtt-8">&#x00A0;</span><span
Chris@1 13359 class="cmtt-8">&#x00A0;0.062643361,</span>
Chris@1 13360 <br class="fancyvrb" /><a
Chris@1 13361 id="x1-125108r54"></a><span
Chris@1 13362 class="cmr-6">54</span><span
Chris@1 13363 class="cmtt-8">&#x00A0;</span><span
Chris@1 13364 class="cmtt-8">&#x00A0;</span><span
Chris@1 13365 class="cmtt-8">&#x00A0;</span><span
Chris@1 13366 class="cmtt-8">&#x00A0;0.066714279,</span><span
Chris@1 13367 class="cmtt-8">&#x00A0;</span><span
Chris@1 13368 class="cmtt-8">&#x00A0;</span><span
Chris@1 13369 class="cmtt-8">&#x00A0;0.071049749,</span><span
Chris@1 13370 class="cmtt-8">&#x00A0;</span><span
Chris@1 13371 class="cmtt-8">&#x00A0;</span><span
Chris@1 13372 class="cmtt-8">&#x00A0;0.075666962,</span><span
Chris@1 13373 class="cmtt-8">&#x00A0;</span><span
Chris@1 13374 class="cmtt-8">&#x00A0;</span><span
Chris@1 13375 class="cmtt-8">&#x00A0;0.080584227,</span>
Chris@1 13376 <br class="fancyvrb" /><a
Chris@1 13377 id="x1-125110r55"></a><span
Chris@1 13378 class="cmr-6">55</span><span
Chris@1 13379 class="cmtt-8">&#x00A0;</span><span
Chris@1 13380 class="cmtt-8">&#x00A0;</span><span
Chris@1 13381 class="cmtt-8">&#x00A0;</span><span
Chris@1 13382 class="cmtt-8">&#x00A0;0.085821044,</span><span
Chris@1 13383 class="cmtt-8">&#x00A0;</span><span
Chris@1 13384 class="cmtt-8">&#x00A0;</span><span
Chris@1 13385 class="cmtt-8">&#x00A0;0.091398179,</span><span
Chris@1 13386 class="cmtt-8">&#x00A0;</span><span
Chris@1 13387 class="cmtt-8">&#x00A0;</span><span
Chris@1 13388 class="cmtt-8">&#x00A0;0.097337747,</span><span
Chris@1 13389 class="cmtt-8">&#x00A0;</span><span
Chris@1 13390 class="cmtt-8">&#x00A0;</span><span
Chris@1 13391 class="cmtt-8">&#x00A0;0.10366330,</span>
Chris@1 13392 <br class="fancyvrb" /><a
Chris@1 13393 id="x1-125112r56"></a><span
Chris@1 13394 class="cmr-6">56</span><span
Chris@1 13395 class="cmtt-8">&#x00A0;</span><span
Chris@1 13396 class="cmtt-8">&#x00A0;</span><span
Chris@1 13397 class="cmtt-8">&#x00A0;</span><span
Chris@1 13398 class="cmtt-8">&#x00A0;0.11039993,</span><span
Chris@1 13399 class="cmtt-8">&#x00A0;</span><span
Chris@1 13400 class="cmtt-8">&#x00A0;</span><span
Chris@1 13401 class="cmtt-8">&#x00A0;</span><span
Chris@1 13402 class="cmtt-8">&#x00A0;0.11757434,</span><span
Chris@1 13403 class="cmtt-8">&#x00A0;</span><span
Chris@1 13404 class="cmtt-8">&#x00A0;</span><span
Chris@1 13405 class="cmtt-8">&#x00A0;</span><span
Chris@1 13406 class="cmtt-8">&#x00A0;0.12521498,</span><span
Chris@1 13407 class="cmtt-8">&#x00A0;</span><span
Chris@1 13408 class="cmtt-8">&#x00A0;</span><span
Chris@1 13409 class="cmtt-8">&#x00A0;</span><span
Chris@1 13410 class="cmtt-8">&#x00A0;0.13335215,</span>
Chris@1 13411 <br class="fancyvrb" /><a
Chris@1 13412 id="x1-125114r57"></a><span
Chris@1 13413 class="cmr-6">57</span><span
Chris@1 13414 class="cmtt-8">&#x00A0;</span><span
Chris@1 13415 class="cmtt-8">&#x00A0;</span><span
Chris@1 13416 class="cmtt-8">&#x00A0;</span><span
Chris@1 13417 class="cmtt-8">&#x00A0;0.14201813,</span><span
Chris@1 13418 class="cmtt-8">&#x00A0;</span><span
Chris@1 13419 class="cmtt-8">&#x00A0;</span><span
Chris@1 13420 class="cmtt-8">&#x00A0;</span><span
Chris@1 13421 class="cmtt-8">&#x00A0;0.15124727,</span><span
Chris@1 13422 class="cmtt-8">&#x00A0;</span><span
Chris@1 13423 class="cmtt-8">&#x00A0;</span><span
Chris@1 13424 class="cmtt-8">&#x00A0;</span><span
Chris@1 13425 class="cmtt-8">&#x00A0;0.16107617,</span><span
Chris@1 13426 class="cmtt-8">&#x00A0;</span><span
Chris@1 13427 class="cmtt-8">&#x00A0;</span><span
Chris@1 13428 class="cmtt-8">&#x00A0;</span><span
Chris@1 13429 class="cmtt-8">&#x00A0;0.17154380,</span>
Chris@1 13430 <br class="fancyvrb" /><a
Chris@1 13431 id="x1-125116r58"></a><span
Chris@1 13432 class="cmr-6">58</span><span
Chris@1 13433 class="cmtt-8">&#x00A0;</span><span
Chris@1 13434 class="cmtt-8">&#x00A0;</span><span
Chris@1 13435 class="cmtt-8">&#x00A0;</span><span
Chris@1 13436 class="cmtt-8">&#x00A0;0.18269168,</span><span
Chris@1 13437 class="cmtt-8">&#x00A0;</span><span
Chris@1 13438 class="cmtt-8">&#x00A0;</span><span
Chris@1 13439 class="cmtt-8">&#x00A0;</span><span
Chris@1 13440 class="cmtt-8">&#x00A0;0.19456402,</span><span
Chris@1 13441 class="cmtt-8">&#x00A0;</span><span
Chris@1 13442 class="cmtt-8">&#x00A0;</span><span
Chris@1 13443 class="cmtt-8">&#x00A0;</span><span
Chris@1 13444 class="cmtt-8">&#x00A0;0.20720788,</span><span
Chris@1 13445 class="cmtt-8">&#x00A0;</span><span
Chris@1 13446 class="cmtt-8">&#x00A0;</span><span
Chris@1 13447 class="cmtt-8">&#x00A0;</span><span
Chris@1 13448 class="cmtt-8">&#x00A0;0.22067342,</span>
Chris@1 13449 <br class="fancyvrb" /><a
Chris@1 13450 id="x1-125118r59"></a><span
Chris@1 13451 class="cmr-6">59</span><span
Chris@1 13452 class="cmtt-8">&#x00A0;</span><span
Chris@1 13453 class="cmtt-8">&#x00A0;</span><span
Chris@1 13454 class="cmtt-8">&#x00A0;</span><span
Chris@1 13455 class="cmtt-8">&#x00A0;0.23501402,</span><span
Chris@1 13456 class="cmtt-8">&#x00A0;</span><span
Chris@1 13457 class="cmtt-8">&#x00A0;</span><span
Chris@1 13458 class="cmtt-8">&#x00A0;</span><span
Chris@1 13459 class="cmtt-8">&#x00A0;0.25028656,</span><span
Chris@1 13460 class="cmtt-8">&#x00A0;</span><span
Chris@1 13461 class="cmtt-8">&#x00A0;</span><span
Chris@1 13462 class="cmtt-8">&#x00A0;</span><span
Chris@1 13463 class="cmtt-8">&#x00A0;0.26655159,</span><span
Chris@1 13464 class="cmtt-8">&#x00A0;</span><span
Chris@1 13465 class="cmtt-8">&#x00A0;</span><span
Chris@1 13466 class="cmtt-8">&#x00A0;</span><span
Chris@1 13467 class="cmtt-8">&#x00A0;0.28387361,</span>
Chris@1 13468 <br class="fancyvrb" /><a
Chris@1 13469 id="x1-125120r60"></a><span
Chris@1 13470 class="cmr-6">60</span><span
Chris@1 13471 class="cmtt-8">&#x00A0;</span><span
Chris@1 13472 class="cmtt-8">&#x00A0;</span><span
Chris@1 13473 class="cmtt-8">&#x00A0;</span><span
Chris@1 13474 class="cmtt-8">&#x00A0;0.30232132,</span><span
Chris@1 13475 class="cmtt-8">&#x00A0;</span><span
Chris@1 13476 class="cmtt-8">&#x00A0;</span><span
Chris@1 13477 class="cmtt-8">&#x00A0;</span><span
Chris@1 13478 class="cmtt-8">&#x00A0;0.32196786,</span><span
Chris@1 13479 class="cmtt-8">&#x00A0;</span><span
Chris@1 13480 class="cmtt-8">&#x00A0;</span><span
Chris@1 13481 class="cmtt-8">&#x00A0;</span><span
Chris@1 13482 class="cmtt-8">&#x00A0;0.34289114,</span><span
Chris@1 13483 class="cmtt-8">&#x00A0;</span><span
Chris@1 13484 class="cmtt-8">&#x00A0;</span><span
Chris@1 13485 class="cmtt-8">&#x00A0;</span><span
Chris@1 13486 class="cmtt-8">&#x00A0;0.36517414,</span>
Chris@1 13487 <br class="fancyvrb" /><a
Chris@1 13488 id="x1-125122r61"></a><span
Chris@1 13489 class="cmr-6">61</span><span
Chris@1 13490 class="cmtt-8">&#x00A0;</span><span
Chris@1 13491 class="cmtt-8">&#x00A0;</span><span
Chris@1 13492 class="cmtt-8">&#x00A0;</span><span
Chris@1 13493 class="cmtt-8">&#x00A0;0.38890521,</span><span
Chris@1 13494 class="cmtt-8">&#x00A0;</span><span
Chris@1 13495 class="cmtt-8">&#x00A0;</span><span
Chris@1 13496 class="cmtt-8">&#x00A0;</span><span
Chris@1 13497 class="cmtt-8">&#x00A0;0.41417847,</span><span
Chris@1 13498 class="cmtt-8">&#x00A0;</span><span
Chris@1 13499 class="cmtt-8">&#x00A0;</span><span
Chris@1 13500 class="cmtt-8">&#x00A0;</span><span
Chris@1 13501 class="cmtt-8">&#x00A0;0.44109412,</span><span
Chris@1 13502 class="cmtt-8">&#x00A0;</span><span
Chris@1 13503 class="cmtt-8">&#x00A0;</span><span
Chris@1 13504 class="cmtt-8">&#x00A0;</span><span
Chris@1 13505 class="cmtt-8">&#x00A0;0.46975890,</span>
Chris@1 13506 <br class="fancyvrb" /><a
Chris@1 13507 id="x1-125124r62"></a><span
Chris@1 13508 class="cmr-6">62</span><span
Chris@1 13509 class="cmtt-8">&#x00A0;</span><span
Chris@1 13510 class="cmtt-8">&#x00A0;</span><span
Chris@1 13511 class="cmtt-8">&#x00A0;</span><span
Chris@1 13512 class="cmtt-8">&#x00A0;0.50028648,</span><span
Chris@1 13513 class="cmtt-8">&#x00A0;</span><span
Chris@1 13514 class="cmtt-8">&#x00A0;</span><span
Chris@1 13515 class="cmtt-8">&#x00A0;</span><span
Chris@1 13516 class="cmtt-8">&#x00A0;0.53279791,</span><span
Chris@1 13517 class="cmtt-8">&#x00A0;</span><span
Chris@1 13518 class="cmtt-8">&#x00A0;</span><span
Chris@1 13519 class="cmtt-8">&#x00A0;</span><span
Chris@1 13520 class="cmtt-8">&#x00A0;0.56742212,</span><span
Chris@1 13521 class="cmtt-8">&#x00A0;</span><span
Chris@1 13522 class="cmtt-8">&#x00A0;</span><span
Chris@1 13523 class="cmtt-8">&#x00A0;</span><span
Chris@1 13524 class="cmtt-8">&#x00A0;0.60429640,</span>
Chris@1 13525 <br class="fancyvrb" /><a
Chris@1 13526 id="x1-125126r63"></a><span
Chris@1 13527 class="cmr-6">63</span><span
Chris@1 13528 class="cmtt-8">&#x00A0;</span><span
Chris@1 13529 class="cmtt-8">&#x00A0;</span><span
Chris@1 13530 class="cmtt-8">&#x00A0;</span><span
Chris@1 13531 class="cmtt-8">&#x00A0;0.64356699,</span><span
Chris@1 13532 class="cmtt-8">&#x00A0;</span><span
Chris@1 13533 class="cmtt-8">&#x00A0;</span><span
Chris@1 13534 class="cmtt-8">&#x00A0;</span><span
Chris@1 13535 class="cmtt-8">&#x00A0;0.68538959,</span><span
Chris@1 13536 class="cmtt-8">&#x00A0;</span><span
Chris@1 13537 class="cmtt-8">&#x00A0;</span><span
Chris@1 13538 class="cmtt-8">&#x00A0;</span><span
Chris@1 13539 class="cmtt-8">&#x00A0;0.72993007,</span><span
Chris@1 13540 class="cmtt-8">&#x00A0;</span><span
Chris@1 13541 class="cmtt-8">&#x00A0;</span><span
Chris@1 13542 class="cmtt-8">&#x00A0;</span><span
Chris@1 13543 class="cmtt-8">&#x00A0;0.77736504,</span>
Chris@1 13544 <br class="fancyvrb" /><a
Chris@1 13545 id="x1-125128r64"></a><span
Chris@1 13546 class="cmr-6">64</span><span
Chris@1 13547 class="cmtt-8">&#x00A0;</span><span
Chris@1 13548 class="cmtt-8">&#x00A0;</span><span
Chris@1 13549 class="cmtt-8">&#x00A0;</span><span
Chris@1 13550 class="cmtt-8">&#x00A0;0.82788260,</span><span
Chris@1 13551 class="cmtt-8">&#x00A0;</span><span
Chris@1 13552 class="cmtt-8">&#x00A0;</span><span
Chris@1 13553 class="cmtt-8">&#x00A0;</span><span
Chris@1 13554 class="cmtt-8">&#x00A0;0.88168307,</span><span
Chris@1 13555 class="cmtt-8">&#x00A0;</span><span
Chris@1 13556 class="cmtt-8">&#x00A0;</span><span
Chris@1 13557 class="cmtt-8">&#x00A0;</span><span
Chris@1 13558 class="cmtt-8">&#x00A0;0.9389798,</span><span
Chris@1 13559 class="cmtt-8">&#x00A0;</span><span
Chris@1 13560 class="cmtt-8">&#x00A0;</span><span
Chris@1 13561 class="cmtt-8">&#x00A0;</span><span
Chris@1 13562 class="cmtt-8">&#x00A0;</span><span
Chris@1 13563 class="cmtt-8">&#x00A0;1.</span>
Chris@1 13564 </div>
Chris@1 13565
Chris@1 13566
Chris@1 13567
Chris@1 13568
Chris@1 13569
Chris@1 13570
Chris@1 13571 <h3 class="sectionHead"><span class="titlemark">A. </span> <a
Chris@1 13572 id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3>
Chris@1 13573 <!--l. 6--><p class="noindent" >
Chris@1 13574 <h4 class="subsectionHead"><span class="titlemark">A.1. </span> <a
Chris@1 13575 id="x1-127000A.1"></a>Overview</h4>
Chris@1 13576 <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
Chris@1 13577 compressed audio packet data into file form.
Chris@1 13578 <!--l. 12--><p class="noindent" >The <a
Chris@1 13579 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a
Chris@1 13580 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221; provides an overview of the construction of
Chris@1 13581 Vorbis audio packets.
Chris@1 13582 <!--l. 15--><p class="noindent" >The <a
Chris@1 13583 href="oggstream.html" >Ogg bitstream overview</a> and <a
Chris@1 13584 href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
Chris@1 13585 descriptions of Ogg transport streams. This specification document assumes a working
Chris@1 13586 knowledge of the concepts covered in these named backround documents. Please read them
Chris@1 13587 first.
Chris@1 13588 <!--l. 22--><p class="noindent" >
Chris@1 13589 <h5 class="subsubsectionHead"><span class="titlemark">A.1.1. </span> <a
Chris@1 13590 id="x1-128000A.1.1"></a>Restrictions</h5>
Chris@1 13591 <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
Chris@1 13592 streams in degenerate, unmultiplexed form only. That is:
Chris@1 13593 <ul class="itemize1">
Chris@1 13594 <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
Chris@1 13595 </li>
Chris@1 13596 <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
Chris@1 13597 (links).
Chris@1 13598 </li>
Chris@1 13599 <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
Chris@1 13600 per link)
Chris@1 13601 </li></ul>
Chris@1 13602
Chris@1 13603
Chris@1 13604
Chris@1 13605 <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
Chris@1 13606 types into a multi-stream Ogg file. At the time this document was written, Ogg was
Chris@1 13607 becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
Chris@1 13608 audio. However, a &#8217;Vorbis I audio file&#8217; is taken to imply Vorbis audio existing alone
Chris@1 13609 within a degenerate Ogg stream. A compliant &#8217;Vorbis audio player&#8217; is not required to
Chris@1 13610 implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
Chris@1 13611 stream (naturally, application authors are encouraged to support full multiplexed Ogg
Chris@1 13612 handling).
Chris@1 13613 <!--l. 55--><p class="noindent" >
Chris@1 13614 <h5 class="subsubsectionHead"><span class="titlemark">A.1.2. </span> <a
Chris@1 13615 id="x1-129000A.1.2"></a>MIME type</h5>
Chris@1 13616 <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
Chris@1 13617 applications should use <span
Chris@1 13618 class="cmtt-12">application/ogg</span>, while visual media should use <span
Chris@1 13619 class="cmtt-12">video/ogg</span>, and audio
Chris@1 13620 <span
Chris@1 13621 class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
Chris@1 13622 encapsulated Vorbis should use <span
Chris@1 13623 class="cmtt-12">audio/vorbis </span>+ <span
Chris@1 13624 class="cmtt-12">audio/vorbis-config</span>.
Chris@1 13625 <!--l. 65--><p class="noindent" >
Chris@1 13626 <h4 class="subsectionHead"><span class="titlemark">A.2. </span> <a
Chris@1 13627 id="x1-130000A.2"></a>Encapsulation</h4>
Chris@1 13628 <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
Chris@1 13629 <ul class="itemize1">
Chris@1 13630 <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
Chris@1 13631 as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
Chris@1 13632 results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
Chris@1 13633 stream.
Chris@1 13634 </li>
Chris@1 13635 <li class="itemize">This first page is marked &#8217;beginning of stream&#8217; in the page flags.
Chris@1 13636 </li>
Chris@1 13637 <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
Chris@1 13638 more pages beginning on the second page of the logical stream. However many pages
Chris@1 13639 they span, the third header packet finishes the page on which it ends. The next (first
Chris@1 13640 audio) packet must begin on a fresh page.
Chris@1 13641
Chris@1 13642
Chris@1 13643
Chris@1 13644 </li>
Chris@1 13645 <li class="itemize">The granule position of these first pages containing only headers is zero.
Chris@1 13646 </li>
Chris@1 13647 <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
Chris@1 13648 </li>
Chris@1 13649 <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
Chris@1 13650 </li>
Chris@1 13651 <li class="itemize">The last page is marked &#8217;end of stream&#8217; in the page flags.
Chris@1 13652 </li>
Chris@1 13653 <li class="itemize">Vorbis packets may span page boundaries.
Chris@1 13654 </li>
Chris@1 13655 <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
Chris@1 13656 samples (per channel; a stereo stream&#8217;s granule position does not increment at twice
Chris@1 13657 the speed of a mono stream).
Chris@1 13658 </li>
Chris@1 13659 <li class="itemize">The granule position of a page represents the end PCM sample position of the last
Chris@1 13660 packet <span
Chris@1 13661 class="cmti-12">completed </span>on that page. The &#8217;last PCM sample&#8217; is the last complete sample
Chris@1 13662 returned by decode, not an internal sample awaiting lapping with a subsequent block.
Chris@1 13663 A page that is entirely spanned by a single packet (that completes on a subsequent
Chris@1 13664 page) has no granule position, and the granule position is set to &#8217;-1&#8217;.
Chris@1 13665 <!--l. 126--><p class="noindent" >Note that the last decoded (fully lapped) PCM sample from a packet is not
Chris@1 13666 necessarily the middle sample from that block. If, eg, the current Vorbis packet
Chris@1 13667 encodes a &#8221;long block&#8221; and the next Vorbis packet encodes a &#8221;short block&#8221;, the last
Chris@1 13668 decodable sample from the current packet be at position (3*long_block_length/4) -
Chris@1 13669 (short_block_length/4).
Chris@1 13670 </li>
Chris@1 13671 <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
Chris@1 13672 started at position zero. Although the granule position belongs to the last completed
Chris@1 13673 packet on the page and a valid granule position must be positive, by inference it may
Chris@1 13674 indicate that the PCM position of the beginning of audio is positive or negative.
Chris@1 13675 <ul class="itemize2">
Chris@1 13676 <li class="itemize">A positive starting value simply indicates that this stream begins at some
Chris@1 13677 positive time offset, potentially within a larger program. This is a common case
Chris@1 13678 when connecting to the middle of broadcast stream.
Chris@1 13679 </li>
Chris@1 13680 <li class="itemize">A negative value indicates that output samples preceeding time zero should be
Chris@1 13681
Chris@1 13682
Chris@1 13683
Chris@1 13684 discarded during decoding; this technique is used to allow sample-granularity
Chris@1 13685 editing of the stream start time of already-encoded Vorbis streams. The number
Chris@1 13686 of samples to be discarded must not exceed the overlap-add span of the first two
Chris@1 13687 audio packets.
Chris@1 13688 </li></ul>
Chris@1 13689 <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
Chris@1 13690 second finished audio packet must flush the page on which it appears and the
Chris@1 13691 third packet begin a fresh page. This allows the decoder to always be able to
Chris@1 13692 perform PCM position adjustments before needing to return any PCM data from
Chris@1 13693 synthesis, resulting in correct positioning information without any aditional seeking
Chris@1 13694 logic.
Chris@1 13695 <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a
Chris@1 13696 id="x1-131000A.2"></a><span
Chris@1 13697 class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
Chris@1 13698 incorrect positioning information for seeking operations at the very beginning of the
Chris@1 13699 stream.
Chris@1 13700 </li>
Chris@1 13701 <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
Chris@1 13702 final packet would normally return is used to end the stream on other than even frame
Chris@1 13703 boundaries. The difference between the actual available data returned and the
Chris@1 13704 declared amount indicates how many trailing samples to discard from the decoding
Chris@1 13705 process.
Chris@1 13706 </li></ul>
Chris@1 13707
Chris@1 13708
Chris@1 13709
Chris@1 13710 <h3 class="sectionHead"><span class="titlemark">B. </span> <a
Chris@1 13711 id="x1-132000B"></a>Vorbis encapsulation in RTP</h3>
Chris@1 13712 <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span
Chris@1 13713 class="cmti-12">&#8220;RTP Payload Format for Vorbis Encoded Audio&#8221; </span>for description of
Chris@1 13714 how to embed Vorbis audio in an RTP stream.
Chris@1 13715
Chris@1 13716
Chris@1 13717
Chris@1 13718
Chris@1 13719
Chris@1 13720
Chris@1 13721 <h3 class="likesectionHead"><a
Chris@1 13722 id="x1-133000B"></a>Colophon</h3>
Chris@1 13723 <!--l. 6--><p class="noindent" ><img
Chris@1 13724 src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics
Chris@1 13725 name="Vorbis_I_spec13x.png" src="xifish.pdf"
Chris@1 13726 -->
Chris@1 13727 <!--l. 10--><p class="noindent" >Ogg is a <a
Chris@1 13728 href="http://www.xiph.org/" >Xiph.Org Foundation</a> effort to protect essential tenets of Internet multimedia from
Chris@1 13729 corporate hostage-taking; Open Source is the net&#8217;s greatest tool to keep everyone honest. See
Chris@1 13730 <a
Chris@1 13731 href="http://www.xiph.org/about.html" >About the Xiph.Org Foundation</a> for details.
Chris@1 13732 <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
Chris@1 13733 Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.Org
Chris@1 13734 Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
Chris@1 13735 and certify specification compliance.
Chris@1 13736 <!--l. 23--><p class="noindent" >Xiph.Org&#8217;s Vorbis software CODEC implementation is distributed under a BSD-like license. This
Chris@1 13737 does not restrict third parties from distributing independent implementations of Vorbis software
Chris@1 13738 under other licenses.
Chris@1 13739 <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.Org Foundation and their logos are trademarks (tm) of the <a
Chris@1 13740 href="http://www.xiph.org/" >Xiph.Org
Chris@1 13741 Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.Org Foundation. All rights
Chris@1 13742 reserved.
Chris@1 13743 <!--l. 33--><p class="noindent" >This document is set using <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span
Chris@1 13744 class="E">E</span>X</span></span>.
Chris@1 13745
Chris@1 13746
Chris@1 13747
Chris@1 13748 <h3 class="likesectionHead"><a
Chris@1 13749 id="x1-134000B"></a>References</h3>
Chris@1 13750 <!--l. 125--><p class="noindent" >
Chris@1 13751 <div class="thebibliography">
Chris@1 13752 <p class="bibitem" ><span class="biblabel">
Chris@1 13753 [1]<span class="bibsp">&#x00A0;&#x00A0;&#x00A0;</span></span><a
Chris@1 13754 id="XSporer/Brandenburg/Edler"></a>T.&#x00A0;Sporer, K.&#x00A0;Brandenburg and
Chris@1 13755 B.&#x00A0;Edler, The use of multirate filter banks for coding of high quality digital audio,
Chris@1 13756 <a
Chris@1 13757 href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span
Chris@1 13758 class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
Chris@1 13759 </p>
Chris@1 13760 </div>
Chris@1 13761
Chris@1 13762 </body></html>
Chris@1 13763
Chris@1 13764
Chris@1 13765
Chris@1 13766