annotate src/libvorbis-1.3.3/doc/Vorbis_I_spec.html @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 98c1576536ae
children
rev   line source
cannam@86 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
cannam@86 2 "http://www.w3.org/TR/html4/loose.dtd">
cannam@86 3 <html >
cannam@86 4 <head><title>Vorbis I specification</title>
cannam@86 5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
cannam@86 6 <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
cannam@86 7 <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
cannam@86 8 <!-- html -->
cannam@86 9 <meta name="src" content="Vorbis_I_spec.tex">
cannam@86 10 <meta name="date" content="2012-02-03 17:22:00">
cannam@86 11 <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css">
cannam@86 12 </head><body
cannam@86 13 >
cannam@86 14 <div class="maketitle">
cannam@86 15
cannam@86 16
cannam@86 17
cannam@86 18
cannam@86 19
cannam@86 20
cannam@86 21
cannam@86 22 <h2 class="titleHead">Vorbis I specification</h2>
cannam@86 23 <div class="author" ><span
cannam@86 24 class="cmr-17">Xiph.Org Foundation</span></div><br />
cannam@86 25 <div class="date" ><span
cannam@86 26 class="cmr-17">February 3, 2012</span></div>
cannam@86 27 </div>
cannam@86 28 <h3 class="likesectionHead"><a
cannam@86 29 id="x1-1000"></a>Contents</h3>
cannam@86 30 <div class="tableofcontents">
cannam@86 31 &#x00A0;<span class="sectionToc" >1 <a
cannam@86 32 href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span>
cannam@86 33 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.1 <a
cannam@86 34 href="#x1-30001.1" id="QQ2-1-3">Overview</a></span>
cannam@86 35 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.1 <a
cannam@86 36 href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span>
cannam@86 37 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.2 <a
cannam@86 38 href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span>
cannam@86 39 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.3 <a
cannam@86 40 href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span>
cannam@86 41 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.4 <a
cannam@86 42 href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span>
cannam@86 43 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.5 <a
cannam@86 44 href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span>
cannam@86 45 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.6 <a
cannam@86 46 href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span>
cannam@86 47 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.2 <a
cannam@86 48 href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span>
cannam@86 49 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.1 <a
cannam@86 50 href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span>
cannam@86 51 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.2 <a
cannam@86 52 href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span>
cannam@86 53 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.3 <a
cannam@86 54 href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span>
cannam@86 55
cannam@86 56
cannam@86 57
cannam@86 58 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.4 <a
cannam@86 59 href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span>
cannam@86 60 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.5 <a
cannam@86 61 href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span>
cannam@86 62 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.6 <a
cannam@86 63 href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span>
cannam@86 64 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.3 <a
cannam@86 65 href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span>
cannam@86 66 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.1 <a
cannam@86 67 href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span>
cannam@86 68 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.2 <a
cannam@86 69 href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span>
cannam@86 70 <br />&#x00A0;<span class="sectionToc" >2 <a
cannam@86 71 href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span>
cannam@86 72 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >2.1 <a
cannam@86 73 href="#x1-370002.1" id="QQ2-1-40">Overview</a></span>
cannam@86 74 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.1 <a
cannam@86 75 href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span>
cannam@86 76 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.2 <a
cannam@86 77 href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span>
cannam@86 78 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.3 <a
cannam@86 79 href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span>
cannam@86 80 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.4 <a
cannam@86 81 href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span>
cannam@86 82 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.5 <a
cannam@86 83 href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span>
cannam@86 84 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.6 <a
cannam@86 85 href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span>
cannam@86 86 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.7 <a
cannam@86 87 href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span>
cannam@86 88 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.8 <a
cannam@86 89 href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span>
cannam@86 90 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.9 <a
cannam@86 91 href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span>
cannam@86 92 <br />&#x00A0;<span class="sectionToc" >3 <a
cannam@86 93 href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span>
cannam@86 94 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.1 <a
cannam@86 95 href="#x1-480003.1" id="QQ2-1-51">Overview</a></span>
cannam@86 96 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.1 <a
cannam@86 97 href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span>
cannam@86 98 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.2 <a
cannam@86 99 href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span>
cannam@86 100 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.2.1 <a
cannam@86 101 href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span>
cannam@86 102 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.3 <a
cannam@86 103 href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span>
cannam@86 104 <br />&#x00A0;<span class="sectionToc" >4 <a
cannam@86 105 href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span>
cannam@86 106 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.1 <a
cannam@86 107 href="#x1-590004.1" id="QQ2-1-64">Overview</a></span>
cannam@86 108 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.2 <a
cannam@86 109 href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span>
cannam@86 110 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.1 <a
cannam@86 111 href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span>
cannam@86 112 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.2 <a
cannam@86 113 href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span>
cannam@86 114 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.3 <a
cannam@86 115 href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span>
cannam@86 116
cannam@86 117
cannam@86 118
cannam@86 119 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.4 <a
cannam@86 120 href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span>
cannam@86 121 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.3 <a
cannam@86 122 href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span>
cannam@86 123 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.1 <a
cannam@86 124 href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span>
cannam@86 125 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.2 <a
cannam@86 126 href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span>
cannam@86 127 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.3 <a
cannam@86 128 href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span>
cannam@86 129 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.4 <a
cannam@86 130 href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span>
cannam@86 131 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.5 <a
cannam@86 132 href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span>
cannam@86 133 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.6 <a
cannam@86 134 href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span>
cannam@86 135 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.7 <a
cannam@86 136 href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span>
cannam@86 137 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.8 <a
cannam@86 138 href="#x1-790004.3.8" id="QQ2-1-85">overlap_add</a></span>
cannam@86 139 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.9 <a
cannam@86 140 href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span>
cannam@86 141 <br />&#x00A0;<span class="sectionToc" >5 <a
cannam@86 142 href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span>
cannam@86 143 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.1 <a
cannam@86 144 href="#x1-820005.1" id="QQ2-1-88">Overview</a></span>
cannam@86 145 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.2 <a
cannam@86 146 href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span>
cannam@86 147 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.1 <a
cannam@86 148 href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span>
cannam@86 149 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.2 <a
cannam@86 150 href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span>
cannam@86 151 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.3 <a
cannam@86 152 href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span>
cannam@86 153 <br />&#x00A0;<span class="sectionToc" >6 <a
cannam@86 154 href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span>
cannam@86 155 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.1 <a
cannam@86 156 href="#x1-900006.1" id="QQ2-1-96">Overview</a></span>
cannam@86 157 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.2 <a
cannam@86 158 href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span>
cannam@86 159 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.1 <a
cannam@86 160 href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span>
cannam@86 161 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.2 <a
cannam@86 162 href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span>
cannam@86 163 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.3 <a
cannam@86 164 href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span>
cannam@86 165 <br />&#x00A0;<span class="sectionToc" >7 <a
cannam@86 166 href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span>
cannam@86 167 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.1 <a
cannam@86 168 href="#x1-960007.1" id="QQ2-1-102">Overview</a></span>
cannam@86 169 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.2 <a
cannam@86 170 href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span>
cannam@86 171 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.1 <a
cannam@86 172 href="#x1-980007.2.1" id="QQ2-1-104">model</a></span>
cannam@86 173 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.2 <a
cannam@86 174 href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span>
cannam@86 175 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.3 <a
cannam@86 176 href="#x1-1000007.2.3" id="QQ2-1-110">packet decode</a></span>
cannam@86 177
cannam@86 178
cannam@86 179
cannam@86 180 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.4 <a
cannam@86 181 href="#x1-1010007.2.4" id="QQ2-1-111">curve computation</a></span>
cannam@86 182 <br />&#x00A0;<span class="sectionToc" >8 <a
cannam@86 183 href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span>
cannam@86 184 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.1 <a
cannam@86 185 href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span>
cannam@86 186 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.2 <a
cannam@86 187 href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span>
cannam@86 188 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.3 <a
cannam@86 189 href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span>
cannam@86 190 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.4 <a
cannam@86 191 href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span>
cannam@86 192 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.5 <a
cannam@86 193 href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span>
cannam@86 194 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.6 <a
cannam@86 195 href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span>
cannam@86 196 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.1 <a
cannam@86 197 href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span>
cannam@86 198 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.2 <a
cannam@86 199 href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span>
cannam@86 200 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.3 <a
cannam@86 201 href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span>
cannam@86 202 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.4 <a
cannam@86 203 href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span>
cannam@86 204 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.5 <a
cannam@86 205 href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span>
cannam@86 206 <br />&#x00A0;<span class="sectionToc" >9 <a
cannam@86 207 href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span>
cannam@86 208 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.1 <a
cannam@86 209 href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span>
cannam@86 210 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.2 <a
cannam@86 211 href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span>
cannam@86 212 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.1 <a
cannam@86 213 href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span>
cannam@86 214 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.2 <a
cannam@86 215 href="#x1-1180009.2.2" id="QQ2-1-130">float32_unpack</a></span>
cannam@86 216 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.3 <a
cannam@86 217 href="#x1-1190009.2.3" id="QQ2-1-131">lookup1_values</a></span>
cannam@86 218 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.4 <a
cannam@86 219 href="#x1-1200009.2.4" id="QQ2-1-132">low_neighbor</a></span>
cannam@86 220 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.5 <a
cannam@86 221 href="#x1-1210009.2.5" id="QQ2-1-133">high_neighbor</a></span>
cannam@86 222 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.6 <a
cannam@86 223 href="#x1-1220009.2.6" id="QQ2-1-134">render_point</a></span>
cannam@86 224 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.7 <a
cannam@86 225 href="#x1-1230009.2.7" id="QQ2-1-135">render_line</a></span>
cannam@86 226 <br />&#x00A0;<span class="sectionToc" >10 <a
cannam@86 227 href="#x1-12400010" id="QQ2-1-136">Tables</a></span>
cannam@86 228 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >10.1 <a
cannam@86 229 href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span>
cannam@86 230 <br />&#x00A0;<span class="sectionToc" >A <a
cannam@86 231 href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span>
cannam@86 232 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.1 <a
cannam@86 233 href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span>
cannam@86 234 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.1 <a
cannam@86 235 href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span>
cannam@86 236 <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.2 <a
cannam@86 237 href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span>
cannam@86 238
cannam@86 239
cannam@86 240
cannam@86 241 <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.2 <a
cannam@86 242 href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span>
cannam@86 243 <br />&#x00A0;<span class="sectionToc" >B <a
cannam@86 244 href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span>
cannam@86 245 </div>
cannam@86 246
cannam@86 247
cannam@86 248
cannam@86 249 <h3 class="sectionHead"><span class="titlemark">1. </span> <a
cannam@86 250 id="x1-20001"></a>Introduction and Description</h3>
cannam@86 251 <!--l. 6--><p class="noindent" >
cannam@86 252 <h4 class="subsectionHead"><span class="titlemark">1.1. </span> <a
cannam@86 253 id="x1-30001.1"></a>Overview</h4>
cannam@86 254 <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec&#8217;s construction. A bit-by-bit
cannam@86 255 specification appears beginning in <a
cannam@86 256 href="#x1-580004">Section&#x00A0;4</a>, &#8220;<a
cannam@86 257 href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>&#8221;. The later
cannam@86 258 sections assume a high-level understanding of the Vorbis decode process, which is provided
cannam@86 259 here.
cannam@86 260 <!--l. 15--><p class="noindent" >
cannam@86 261 <h5 class="subsubsectionHead"><span class="titlemark">1.1.1. </span> <a
cannam@86 262 id="x1-40001.1.1"></a>Application</h5>
cannam@86 263 <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder
cannam@86 264 flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At
cannam@86 265 the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same
cannam@86 266 league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT
cannam@86 267 rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower
cannam@86 268 and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel
cannam@86 269 representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
cannam@86 270 discrete channels).
cannam@86 271 <!--l. 29--><p class="noindent" >
cannam@86 272 <h5 class="subsubsectionHead"><span class="titlemark">1.1.2. </span> <a
cannam@86 273 id="x1-50001.1.2"></a>Classification</h5>
cannam@86 274 <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete
cannam@86 275 Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in
cannam@86 276 Vorbis II to offer better transient response and reproduction using a transform better suited to
cannam@86 277 localized time events.
cannam@86 278
cannam@86 279
cannam@86 280
cannam@86 281 <!--l. 37--><p class="noindent" >
cannam@86 282 <h5 class="subsubsectionHead"><span class="titlemark">1.1.3. </span> <a
cannam@86 283 id="x1-60001.1.3"></a>Assumptions</h5>
cannam@86 284 <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple,
cannam@86 285 low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does
cannam@86 286 require more working memory as Vorbis has no static probability model; the vector codebooks
cannam@86 287 used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis
cannam@86 288 bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to
cannam@86 289 which they are pre-decoded into a cache is the dominant factor in decoder memory
cannam@86 290 usage.
cannam@86 291 <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it
cannam@86 292 is solely a method of accepting input audio, dividing it into individual frames and
cannam@86 293 compressing these frames into raw, unformatted &#8217;packets&#8217;. The decoder then accepts
cannam@86 294 these raw packets in sequence, decodes them, synthesizes audio frames from them, and
cannam@86 295 reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form
cannam@86 296 variable bit rate (VBR) codec and packets have no minimum size, maximum size, or
cannam@86 297 fixed/expected size. Packets are designed that they may be truncated (or padded)
cannam@86 298 and remain decodable; this is not to be considered an error condition and is used
cannam@86 299 extensively in bitrate management in peeling. Both the transport mechanism and
cannam@86 300 decoder must allow that a packet may be any size, or end before or after packet decode
cannam@86 301 expects.
cannam@86 302 <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form
cannam@86 303 framing, sync, positioning and error correction in accordance with these design assumptions, such
cannam@86 304 as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this
cannam@86 305 document, we will assume that Vorbis is to be embedded in an Ogg stream specifically,
cannam@86 306 although this is by no means a requirement or fundamental assumption in the Vorbis
cannam@86 307 design.
cannam@86 308 <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a
cannam@86 309 href="#x1-126000A">Section&#x00A0;A</a>,
cannam@86 310 &#8220;<a
cannam@86 311 href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>&#8221;.
cannam@86 312 <!--l. 77--><p class="noindent" >
cannam@86 313 <h5 class="subsubsectionHead"><span class="titlemark">1.1.4. </span> <a
cannam@86 314 id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5>
cannam@86 315 <!--l. 79--><p class="noindent" >Vorbis&#8217; heritage is as a research CODEC and its current design reflects a desire to allow multiple
cannam@86 316 decades of continuous encoder improvement before running out of room within the codec
cannam@86 317 specification. For these reasons, configurable aspects of codec setup intentionally lean toward the
cannam@86 318 extreme of forward adaptive.
cannam@86 319
cannam@86 320
cannam@86 321
cannam@86 322 <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis
cannam@86 323 developer to keep in mind) is that the entire probability model of the codec, the Huffman and
cannam@86 324 VQ codebooks, is packed into the bitstream header along with extensive CODEC setup
cannam@86 325 parameters (often several hundred fields). This makes it impossible, as it would be with
cannam@86 326 MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin
cannam@86 327 decode at any frame in the stream without having previously fetched the codec setup
cannam@86 328 header.
cannam@86 329 <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a
cannam@86 330 id="x1-80001.1.4"></a><span
cannam@86 331 class="cmbx-12">Note:</span></span> Vorbis <span
cannam@86 332 class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec
cannam@86 333 has been initialized/setup with the setup headers.
cannam@86 334 <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream
cannam@86 335 headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less
cannam@86 336 is recommended (and Xiph.Org&#8217;s Vorbis encoder follows this suggestion).
cannam@86 337 <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is
cannam@86 338 an unusual design and thus causes some amount of complaint among engineers as this runs
cannam@86 339 against current design trends (and also points out limitations in some existing software/interface
cannam@86 340 designs, such as Windows&#8217; ACM codec framework). However, we find that it does not
cannam@86 341 fundamentally limit Vorbis&#8217; suitable application space.
cannam@86 342 <!--l. 115--><p class="noindent" >
cannam@86 343 <h5 class="subsubsectionHead"><span class="titlemark">1.1.5. </span> <a
cannam@86 344 id="x1-90001.1.5"></a>Format Specification</h5>
cannam@86 345 <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets
cannam@86 346 that are correctly decoded by the reference Vorbis decoder described below may be considered
cannam@86 347 a proper Vorbis encoder. A decoder must faithfully and completely implement the
cannam@86 348 specification defined below (except where noted) to be considered a proper Vorbis
cannam@86 349 decoder.
cannam@86 350 <!--l. 123--><p class="noindent" >
cannam@86 351 <h5 class="subsubsectionHead"><span class="titlemark">1.1.6. </span> <a
cannam@86 352 id="x1-100001.1.6"></a>Hardware Profile</h5>
cannam@86 353
cannam@86 354
cannam@86 355
cannam@86 356 <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an
cannam@86 357 embedded design. For this reason, embedded designs are allowed to deviate in limited ways from
cannam@86 358 the &#8216;full&#8217; decode specification yet still be certified compliant. These optional omissions are
cannam@86 359 labelled in the spec where relevant.
cannam@86 360 <!--l. 131--><p class="noindent" >
cannam@86 361 <h4 class="subsectionHead"><span class="titlemark">1.2. </span> <a
cannam@86 362 id="x1-110001.2"></a>Decoder Configuration</h4>
cannam@86 363 <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that
cannam@86 364 perform specific functions in the decode pipeline. Each different component instance of a specific
cannam@86 365 type is semantically interchangeable; decoder configuration consists both of internal component
cannam@86 366 configuration, as well as arrangement of specific instances into a decode pipeline. Componentry
cannam@86 367 arrangement is roughly as follows:
cannam@86 368 <div class="center"
cannam@86 369 >
cannam@86 370 <!--l. 141--><p class="noindent" >
cannam@86 371
cannam@86 372 <!--l. 142--><p class="noindent" ><img
cannam@86 373 src="components.png" alt="PIC"
cannam@86 374 >
cannam@86 375 <br /> <div class="caption"
cannam@86 376 ><span class="id">Figure&#x00A0;1: </span><span
cannam@86 377 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 -->
cannam@86 378 </div>
cannam@86 379 <!--l. 146--><p class="noindent" >
cannam@86 380 <h5 class="subsubsectionHead"><span class="titlemark">1.2.1. </span> <a
cannam@86 381 id="x1-120001.2.1"></a>Global Config</h5>
cannam@86 382 <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis
cannam@86 383 version (always &#8217;0&#8217; in Vorbis I), bitrate hints, and the lists of component instances. All other
cannam@86 384 configuration is in the context of specific components.
cannam@86 385 <!--l. 152--><p class="noindent" >
cannam@86 386 <h5 class="subsubsectionHead"><span class="titlemark">1.2.2. </span> <a
cannam@86 387 id="x1-130001.2.2"></a>Mode</h5>
cannam@86 388
cannam@86 389
cannam@86 390
cannam@86 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
cannam@86 392 modes.
cannam@86 393 <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible
cannam@86 394 methods with the intention of choosing a method best suited to that frame. Different
cannam@86 395 modes are, e.g. how frame size is changed from frame to frame. The mode number of a
cannam@86 396 frame serves as a top level configuration switch for all other specific aspects of frame
cannam@86 397 decode.
cannam@86 398 <!--l. 164--><p class="noindent" >A &#8217;mode&#8217; configuration consists of a frame size setting, window type (always 0, the Vorbis
cannam@86 399 window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping
cannam@86 400 number. The mapping number specifies which mapping configuration instance to use for low-level
cannam@86 401 packet decode and synthesis.
cannam@86 402 <!--l. 171--><p class="noindent" >
cannam@86 403 <h5 class="subsubsectionHead"><span class="titlemark">1.2.3. </span> <a
cannam@86 404 id="x1-140001.2.3"></a>Mapping</h5>
cannam@86 405 <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of &#8217;submaps&#8217; that bundle sets
cannam@86 406 of channel vectors together for grouped encoding and decoding. These submaps are
cannam@86 407 not references to external components; the submap list is internal and specific to a
cannam@86 408 mapping.
cannam@86 409 <!--l. 178--><p class="noindent" >A &#8217;submap&#8217; is a configuration/grouping that applies to a subset of floor and residue vectors
cannam@86 410 within a mapping. The submap functions as a last layer of indirection such that specific special
cannam@86 411 floor or residue settings can be applied not only to all the vectors in a given mode, but also
cannam@86 412 specific vectors in a specific mode. Each submap specifies the proper floor and residue
cannam@86 413 instance number to use for decoding that submap&#8217;s spectral floor and spectral residue
cannam@86 414 vectors.
cannam@86 415 <!--l. 186--><p class="noindent" >As an example:
cannam@86 416 <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth
cannam@86 417 channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a
cannam@86 418 full-spectrum version of it as with the other channels. The submapping mechanism can be used
cannam@86 419 to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only
cannam@86 420 representation to the bass channel, thus saving space. In this example, channels 0-4 belong to
cannam@86 421 submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which
cannam@86 422 uses a bass-only representation.
cannam@86 423
cannam@86 424
cannam@86 425
cannam@86 426 <!--l. 199--><p class="noindent" >
cannam@86 427 <h5 class="subsubsectionHead"><span class="titlemark">1.2.4. </span> <a
cannam@86 428 id="x1-150001.2.4"></a>Floor</h5>
cannam@86 429 <!--l. 201--><p class="noindent" >Vorbis encodes a spectral &#8217;floor&#8217; vector for each PCM channel. This vector is a low-resolution
cannam@86 430 representation of the audio spectrum for the given channel in the current frame, generally used
cannam@86 431 akin to a whitening filter. It is named a &#8217;floor&#8217; because the Xiph.Org reference encoder has
cannam@86 432 historically used it as a unit-baseline for spectral resolution.
cannam@86 433 <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB
cannam@86 434 amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear
cannam@86 435 interpolated representation on a dB amplitude scale and linear frequency scale. The two floors
cannam@86 436 are semantically interchangeable in encoding/decoding. However, floor type 1 provides more
cannam@86 437 stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and
cannam@86 438 high bitrate modes. Floor 1 is also considerably less expensive to decode than floor
cannam@86 439 0.
cannam@86 440 <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis
cannam@86 441 encoder past Xiph.Org&#8217;s own beta 4 makes use of floor 0.
cannam@86 442 <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy
cannam@86 443 coding to save space. For this reason, a floor configuration generally refers to multiple
cannam@86 444 codebooks in the codebook component list. Entropy coding is thus provided as an
cannam@86 445 abstraction, and each floor instance may choose from any and all available codebooks when
cannam@86 446 coding/decoding.
cannam@86 447 <!--l. 230--><p class="noindent" >
cannam@86 448 <h5 class="subsubsectionHead"><span class="titlemark">1.2.5. </span> <a
cannam@86 449 id="x1-160001.2.5"></a>Residue</h5>
cannam@86 450 <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been
cannam@86 451 subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector
cannam@86 452 quantization according to one of three specific packing/coding algorithms numbered
cannam@86 453 0 through 2. The packing algorithm details are configured by residue instance. As
cannam@86 454 with the floor components, the final VQ/entropy encoding is provided by external
cannam@86 455 codebook instances and each residue instance may choose from any and all available
cannam@86 456 codebooks.
cannam@86 457 <!--l. 241--><p class="noindent" >
cannam@86 458
cannam@86 459
cannam@86 460
cannam@86 461 <h5 class="subsubsectionHead"><span class="titlemark">1.2.6. </span> <a
cannam@86 462 id="x1-170001.2.6"></a>Codebooks</h5>
cannam@86 463 <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use
cannam@86 464 the entropy-decoded integer value as an offset into an index of output value vectors, returning
cannam@86 465 the indicated vector of values.
cannam@86 466 <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree
cannam@86 467 representation. This tree is tightly packed using one of several methods, depending on whether
cannam@86 468 codeword lengths are ordered or unordered, or the tree is sparse.
cannam@86 469 <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly,
cannam@86 470 the vector index is encoded as a single list of values of possible values that are then permuted
cannam@86 471 into a list of n-dimensional rows (lattice VQ).
cannam@86 472 <!--l. 260--><p class="noindent" >
cannam@86 473 <h4 class="subsectionHead"><span class="titlemark">1.3. </span> <a
cannam@86 474 id="x1-180001.3"></a>High-level Decode Process</h4>
cannam@86 475 <!--l. 262--><p class="noindent" >
cannam@86 476 <h5 class="subsubsectionHead"><span class="titlemark">1.3.1. </span> <a
cannam@86 477 id="x1-190001.3.1"></a>Decode Setup</h5>
cannam@86 478 <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the
cannam@86 479 stream to be decoded. Vorbis uses three header packets; all are required, in-order, by
cannam@86 480 this specification. Once set up, decode may begin at any audio packet belonging to
cannam@86 481 the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio
cannam@86 482 packets.
cannam@86 483 <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup
cannam@86 484 header.
cannam@86 485 <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 486 id="x1-200001.3.1"></a><span
cannam@86 487 class="cmbx-12">Identification Header</span></span>
cannam@86 488 The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio
cannam@86 489 characteristics of the stream such as sample rate and number of channels.
cannam@86 490
cannam@86 491
cannam@86 492
cannam@86 493 <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 494 id="x1-210001.3.1"></a><span
cannam@86 495 class="cmbx-12">Comment Header</span></span>
cannam@86 496 The comment header includes user text comments (&#8220;tags&#8221;) and a vendor string for the
cannam@86 497 application/library that produced the bitstream. The encoding and proper use of the comment
cannam@86 498 header is described in <a
cannam@86 499 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a
cannam@86 500 href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
cannam@86 501 <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 502 id="x1-220001.3.1"></a><span
cannam@86 503 class="cmbx-12">Setup Header</span></span>
cannam@86 504 The setup header includes extensive CODEC setup information as well as the complete VQ and
cannam@86 505 Huffman codebooks needed for decode.
cannam@86 506 <!--l. 289--><p class="noindent" >
cannam@86 507 <h5 class="subsubsectionHead"><span class="titlemark">1.3.2. </span> <a
cannam@86 508 id="x1-230001.3.2"></a>Decode Procedure</h5>
cannam@86 509 <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same.
cannam@86 510 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 511 1. </dt><dd
cannam@86 512 class="enumerate-enumitem">decode packet type flag
cannam@86 513 </dd><dt class="enumerate-enumitem">
cannam@86 514 2. </dt><dd
cannam@86 515 class="enumerate-enumitem">decode mode number
cannam@86 516 </dd><dt class="enumerate-enumitem">
cannam@86 517 3. </dt><dd
cannam@86 518 class="enumerate-enumitem">decode window shape (long windows only)
cannam@86 519 </dd><dt class="enumerate-enumitem">
cannam@86 520 4. </dt><dd
cannam@86 521 class="enumerate-enumitem">decode floor
cannam@86 522 </dd><dt class="enumerate-enumitem">
cannam@86 523 5. </dt><dd
cannam@86 524 class="enumerate-enumitem">decode residue into residue vectors
cannam@86 525 </dd><dt class="enumerate-enumitem">
cannam@86 526 6. </dt><dd
cannam@86 527 class="enumerate-enumitem">inverse channel coupling of residue vectors
cannam@86 528 </dd><dt class="enumerate-enumitem">
cannam@86 529 7. </dt><dd
cannam@86 530 class="enumerate-enumitem">generate floor curve from decoded floor data
cannam@86 531 </dd><dt class="enumerate-enumitem">
cannam@86 532 8. </dt><dd
cannam@86 533 class="enumerate-enumitem">compute dot product of floor and residue, producing audio spectrum vector
cannam@86 534 </dd><dt class="enumerate-enumitem">
cannam@86 535 9. </dt><dd
cannam@86 536 class="enumerate-enumitem">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis
cannam@86 537 I
cannam@86 538
cannam@86 539
cannam@86 540
cannam@86 541 </dd><dt class="enumerate-enumitem">
cannam@86 542 10. </dt><dd
cannam@86 543 class="enumerate-enumitem">overlap/add left-hand output of transform with right-hand output of previous frame
cannam@86 544 </dd><dt class="enumerate-enumitem">
cannam@86 545 11. </dt><dd
cannam@86 546 class="enumerate-enumitem">store right hand-data from transform of current frame for future lapping
cannam@86 547 </dd><dt class="enumerate-enumitem">
cannam@86 548 12. </dt><dd
cannam@86 549 class="enumerate-enumitem">if not first frame, return results of overlap/add as audio result of current frame</dd></dl>
cannam@86 550 <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can
cannam@86 551 take advantage of symmetries in the MDCT to store the right-hand transform data of a partial
cannam@86 552 MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before
cannam@86 553 overlap/add with the next frame. This optimization produces entirely equivalent output and is
cannam@86 554 naturally perfectly legal. The decoder must be <span
cannam@86 555 class="cmti-12">entirely mathematically equivalent </span>to the
cannam@86 556 specification, it need not be a literal semantic implementation.
cannam@86 557 <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 558 id="x1-240001.3.2"></a><span
cannam@86 559 class="cmbx-12">Packet type decode</span></span>
cannam@86 560 Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis
cannam@86 561 headers described above. The fourth packet type marks an audio packet. All other packet types
cannam@86 562 are reserved; packets marked with a reserved type should be ignored.
cannam@86 563 <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
cannam@86 564 audio packet decode is to read and verify the packet type; <span
cannam@86 565 class="cmti-12">a non-audio packet when audio is</span>
cannam@86 566 <span
cannam@86 567 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
cannam@86 568 <span
cannam@86 569 class="cmti-12">packet and not attempt decoding it to audio</span>.
cannam@86 570 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 571 id="x1-250001.3.2"></a><span
cannam@86 572 class="cmbx-12">Mode decode</span></span>
cannam@86 573 Vorbis allows an encoder to set up multiple, numbered packet &#8217;modes&#8217;, as described earlier, all of
cannam@86 574 which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct
cannam@86 575 offset into the mode instance index.
cannam@86 576 <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 577 id="x1-260001.3.2"></a><span
cannam@86 578 class="cmbx-12">Window shape decode (long windows only)</span></span>
cannam@86 579 Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I,
cannam@86 580 legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis
cannam@86 581 handles channels as independent vectors and these frame sizes are in samples per
cannam@86 582 channel.
cannam@86 583
cannam@86 584
cannam@86 585
cannam@86 586 <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next,
cannam@86 587 avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed
cannam@86 588 according to MDCT requirements, overlapped 50% with the output of the previous frame and
cannam@86 589 added. The window shape assures seamless reconstruction.
cannam@86 590 <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows:
cannam@86 591 <div class="center"
cannam@86 592 >
cannam@86 593 <!--l. 356--><p class="noindent" >
cannam@86 594
cannam@86 595 <!--l. 357--><p class="noindent" ><img
cannam@86 596 src="window1.png" alt="PIC"
cannam@86 597 >
cannam@86 598 <br /> <div class="caption"
cannam@86 599 ><span class="id">Figure&#x00A0;2: </span><span
cannam@86 600 class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 -->
cannam@86 601 </div>
cannam@86 602 <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
cannam@86 603 <div class="center"
cannam@86 604 >
cannam@86 605 <!--l. 364--><p class="noindent" >
cannam@86 606
cannam@86 607 <!--l. 365--><p class="noindent" ><img
cannam@86 608 src="window2.png" alt="PIC"
cannam@86 609 >
cannam@86 610 <br /> <div class="caption"
cannam@86 611 ><span class="id">Figure&#x00A0;3: </span><span
cannam@86 612 class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 -->
cannam@86 613 </div>
cannam@86 614 <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
cannam@86 615 seamless lapping as above. It is possible to correctly infer window shape to be applied to the
cannam@86 616 current window from knowing the sizes of the current, previous and next window. It is legal for a
cannam@86 617 decoder to use this method. However, in the case of a long window (short windows require no
cannam@86 618 modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although
cannam@86 619 not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to
cannam@86 620 the point of lapping entirely independently of any other packet, allowing easier abstraction of
cannam@86 621 decode layers as well as allowing a greater level of easy parallelism in encode and
cannam@86 622 decode.
cannam@86 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
cannam@86 624 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
cannam@86 625 Vorbis windows all use the slope function
cannam@86 626 <center class="math-display" >
cannam@86 627 <img
cannam@86 628 src="Vorbis_I_spec0x.png" alt="y = sin (.5 &lowast; &pi; sin2((x + .5)&#x2215;n &lowast; &pi;)).
cannam@86 629
cannam@86 630
cannam@86 631
cannam@86 632 " class="math-display" ></center>
cannam@86 633 <!--l. 385--><p class="nopar" >
cannam@86 634 <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 635 id="x1-270001.3.2"></a><span
cannam@86 636 class="cmbx-12">floor decode</span></span>
cannam@86 637 Each floor is encoded/decoded in channel order, however each floor belongs to a &#8217;submap&#8217; that
cannam@86 638 specifies which floor configuration to use. All floors are decoded before residue decode
cannam@86 639 begins.
cannam@86 640 <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 641 id="x1-280001.3.2"></a><span
cannam@86 642 class="cmbx-12">residue decode</span></span>
cannam@86 643 Although the number of residue vectors equals the number of channels, channel coupling may
cannam@86 644 mean that the raw residue vectors extracted during decode do not map directly to specific
cannam@86 645 channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or
cannam@86 646 angle. The coupling relationships are described in the codec setup and may differ from frame to
cannam@86 647 frame, due to different mode numbers.
cannam@86 648 <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from
cannam@86 649 submap 0 through n-1. This differs from floors which are coded using a configuration provided by
cannam@86 650 submap number, but are coded individually in channel order.
cannam@86 651 <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 652 id="x1-290001.3.2"></a><span
cannam@86 653 class="cmbx-12">inverse channel coupling</span></span>
cannam@86 654 A detailed discussion of stereo in the Vorbis codec can be found in the document
cannam@86 655 <a
cannam@86 656 href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo
cannam@86 657 coupling, but the stereo document also gives a good overview of the generic coupling
cannam@86 658 mechanism.
cannam@86 659 <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a
cannam@86 660 pair at a time in the order and using the vectors specified in the current mapping
cannam@86 661 configuration. The decoupling operation is the same for all pairs, converting square polar
cannam@86 662 representation (where one vector is magnitude and the second angle) back to Cartesian
cannam@86 663 representation.
cannam@86 664 <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors
cannam@86 665 represent the fine spectral detail of each output channel.
cannam@86 666
cannam@86 667
cannam@86 668
cannam@86 669 <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 670 id="x1-300001.3.2"></a><span
cannam@86 671 class="cmbx-12">generate floor curve</span></span>
cannam@86 672 The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to
cannam@86 673 generate the output curve when the floor data is decoded from the raw packet, or it
cannam@86 674 can be generated after inverse coupling and applied to the spectral residue directly,
cannam@86 675 combining generation and the dot product into one step and eliminating some working
cannam@86 676 space.
cannam@86 677 <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied
cannam@86 678 (dot product) by the linear-range, linear-domain spectral residue.
cannam@86 679 <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 680 id="x1-310001.3.2"></a><span
cannam@86 681 class="cmbx-12">compute floor/residue dot product</span></span>
cannam@86 682 This step is straightforward; for each output channel, the decoder multiplies the floor curve and
cannam@86 683 residue vectors element by element, producing the finished audio spectrum of each
cannam@86 684 channel.
cannam@86 685 <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
cannam@86 686 implementation might be to assume that a 32 bit fixed-point representation for floor and
cannam@86 687 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
cannam@86 688 in all cases because it happens to mostly work with the current Xiph.Org reference
cannam@86 689 encoder.
cannam@86 690 <!--l. 462--><p class="noindent" >However, floor vector values can span <span
cannam@86 691 class="cmsy-10x-x-120">&sim;</span>140dB (<span
cannam@86 692 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
cannam@86 693 vector should represent a minimum of 120dB (<span
cannam@86 694 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
cannam@86 695 bit PCM device. For the residue vector to represent full scale if the floor is nailed
cannam@86 696 to <span
cannam@86 697 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
cannam@86 698 full scale if the floor is nailed at 0dB, it must be able to represent <span
cannam@86 699 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
cannam@86 700 Thus, in order to handle full range dynamics, a residue vector may span <span
cannam@86 701 class="cmsy-10x-x-120">&minus;</span>140dB to
cannam@86 702 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
cannam@86 703 residue vector must be able to represent a 48 bit range and the dot product must
cannam@86 704 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
cannam@86 705 achieved using large (64 bit or larger) integers, or implementing a movable binary point
cannam@86 706 representation.
cannam@86 707 <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 708 id="x1-320001.3.2"></a><span
cannam@86 709 class="cmbx-12">inverse monolithic transform (MDCT)</span></span>
cannam@86 710 The audio spectrum is converted back into time domain PCM audio via an inverse Modified
cannam@86 711 Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in
cannam@86 712 <span class="cite">[<a
cannam@86 713 href="#XSporer/Brandenburg/Edler">1</a>]</span>.
cannam@86 714 <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be
cannam@86 715
cannam@86 716
cannam@86 717
cannam@86 718 lapped with surrounding frames using an appropriate window (such as the Vorbis window) before
cannam@86 719 the MDCT can be considered orthogonal.
cannam@86 720 <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 721 id="x1-330001.3.2"></a><span
cannam@86 722 class="cmbx-12">overlap/add data</span></span>
cannam@86 723 Windowed MDCT output is overlapped and added with the right hand data of the previous
cannam@86 724 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
cannam@86 725 current window (as illustrated in the window overlap diagram). At this point, the audio data
cannam@86 726 between the center of the previous frame and the center of the current frame is now finished and
cannam@86 727 ready to be returned.
cannam@86 728 <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 729 id="x1-340001.3.2"></a><span
cannam@86 730 class="cmbx-12">cache right hand data</span></span>
cannam@86 731 The decoder must cache the right hand portion of the current frame to be lapped with the left
cannam@86 732 hand portion of the next frame.
cannam@86 733 <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 734 id="x1-350001.3.2"></a><span
cannam@86 735 class="cmbx-12">return finished audio data</span></span>
cannam@86 736 The overlapped portion produced from overlapping the previous and current frame data
cannam@86 737 is finished data to be returned by the decoder. This data spans from the center of
cannam@86 738 the previous window to the center of the current window. In the case of same-sized
cannam@86 739 windows, the amount of data to return is one-half block consisting of and only of the
cannam@86 740 overlapped portions. When overlapping a short and long window, much of the returned
cannam@86 741 range is not actually overlap. This does not damage transform orthogonality. Pay
cannam@86 742 attention however to returning the correct data range; the amount of data to be returned
cannam@86 743 is:
cannam@86 744 <!--l. 519--><p class="noindent" >
cannam@86 745 <div class="fancyvrb" id="fancyvrb1">
cannam@86 746 <a
cannam@86 747 id="x1-35002r1"></a><span
cannam@86 748 class="cmr-6">1</span><span
cannam@86 749 class="cmtt-8">&#x00A0;</span><span
cannam@86 750 class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
cannam@86 751 </div>
cannam@86 752 <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
cannam@86 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
cannam@86 754 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
cannam@86 755 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
cannam@86 756
cannam@86 757
cannam@86 758
cannam@86 759
cannam@86 760
cannam@86 761
cannam@86 762 <h3 class="sectionHead"><span class="titlemark">2. </span> <a
cannam@86 763 id="x1-360002"></a>Bitpacking Convention</h3>
cannam@86 764 <!--l. 6--><p class="noindent" >
cannam@86 765 <h4 class="subsectionHead"><span class="titlemark">2.1. </span> <a
cannam@86 766 id="x1-370002.1"></a>Overview</h4>
cannam@86 767 <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
cannam@86 768 integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
cannam@86 769 encoder and then read one-by-one in the same monotonically increasing order by the decoder.
cannam@86 770 Most current binary storage arrangements group bits into a native word size of eight bits
cannam@86 771 (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
cannam@86 772 bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
cannam@86 773 representation in fixed-width words.
cannam@86 774 <!--l. 19--><p class="noindent" >
cannam@86 775 <h5 class="subsubsectionHead"><span class="titlemark">2.1.1. </span> <a
cannam@86 776 id="x1-380002.1.1"></a>octets, bytes and words</h5>
cannam@86 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.
cannam@86 778 This has not always been the case; seven, ten, eleven and sixteen bit &#8217;bytes&#8217; have been used.
cannam@86 779 For purposes of the bitpacking convention, a byte implies the native, smallest integer
cannam@86 780 storage representation offered by a platform. On modern platforms, this is generally
cannam@86 781 assumed to be eight bits (not necessarily because of the processor but because of the
cannam@86 782 filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
cannam@86 783 atom of storage). A &#8217;word&#8217; is an integer size that is a grouped multiple of this smallest
cannam@86 784 size.
cannam@86 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
cannam@86 786 to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
cannam@86 787 bitpacking convention is still well defined for any native byte size; Vorbis uses the native
cannam@86 788 bit-width of a given storage system. This document assumes that a byte is one octet for purposes
cannam@86 789 of example.
cannam@86 790 <!--l. 39--><p class="noindent" >
cannam@86 791
cannam@86 792
cannam@86 793
cannam@86 794 <h5 class="subsubsectionHead"><span class="titlemark">2.1.2. </span> <a
cannam@86 795 id="x1-390002.1.2"></a>bit order</h5>
cannam@86 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
cannam@86 797 storing the two&#8217;s complement integer value +1. A byte&#8217;s &#8217;most significant&#8217; bit (MSb) is at the
cannam@86 798 opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span
cannam@86 799 class="cmmi-12">n </span>(<span
cannam@86 800 class="cmmi-12">n </span>= 7 in an
cannam@86 801 octet) for the MSb.
cannam@86 802 <!--l. 50--><p class="noindent" >
cannam@86 803 <h5 class="subsubsectionHead"><span class="titlemark">2.1.3. </span> <a
cannam@86 804 id="x1-400002.1.3"></a>byte order</h5>
cannam@86 805 <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
cannam@86 806 common ones are 3-2-1-0 (&#8217;big endian&#8217; or &#8217;most significant byte first&#8217; in which the
cannam@86 807 highest-valued byte comes first), 0-1-2-3 (&#8217;little endian&#8217; or &#8217;least significant byte first&#8217; in
cannam@86 808 which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (&#8217;mixed
cannam@86 809 endian&#8217;).
cannam@86 810 <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
cannam@86 811 word, level, thus host word ordering is of a concern only during optimization when writing high
cannam@86 812 performance code that operates on a word of storage at a time rather than by byte.
cannam@86 813 Logically, bytes are always coded and decoded in order from byte zero through byte
cannam@86 814 <span
cannam@86 815 class="cmmi-12">n</span>.
cannam@86 816 <!--l. 68--><p class="noindent" >
cannam@86 817 <h5 class="subsubsectionHead"><span class="titlemark">2.1.4. </span> <a
cannam@86 818 id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
cannam@86 819 <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
cannam@86 820 wide, into packets. These integer fields are not aligned to the boundaries of the byte
cannam@86 821 representation; the next field is written at the bit position at which the previous field
cannam@86 822 ends.
cannam@86 823 <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
cannam@86 824 bitstream first, followed by next least significant bit, etc, until the requested number of bits
cannam@86 825 have been coded. When packing the bits into bytes, the encoder begins by placing
cannam@86 826 the LSb of the integer to be written into the least significant unused bit position of
cannam@86 827 the destination byte, followed by the next-least significant bit of the source integer
cannam@86 828 and so on up to the requested number of bits. When all bits of the destination byte
cannam@86 829 have been filled, encoding continues by zeroing all bits of the next byte and writing
cannam@86 830 the next bit into the bit position 0 of that byte. Decoding follows the same process
cannam@86 831
cannam@86 832
cannam@86 833
cannam@86 834 as encoding, but by reading bits from the byte stream and reassembling them into
cannam@86 835 integers.
cannam@86 836 <!--l. 90--><p class="noindent" >
cannam@86 837 <h5 class="subsubsectionHead"><span class="titlemark">2.1.5. </span> <a
cannam@86 838 id="x1-420002.1.5"></a>signedness</h5>
cannam@86 839 <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
cannam@86 840 given decode context. That is, the three bit binary pattern &#8217;b111&#8217; can be taken to represent
cannam@86 841 either &#8217;seven&#8217; as an unsigned integer, or &#8217;-1&#8217; as a signed, two&#8217;s complement integer. The
cannam@86 842 encoder and decoder are responsible for knowing if fields are to be treated as signed or
cannam@86 843 unsigned.
cannam@86 844 <!--l. 101--><p class="noindent" >
cannam@86 845 <h5 class="subsubsectionHead"><span class="titlemark">2.1.6. </span> <a
cannam@86 846 id="x1-430002.1.6"></a>coding example</h5>
cannam@86 847 <!--l. 103--><p class="noindent" >Code the 4 bit integer value &#8217;12&#8217; [b1100] into an empty bytestream. Bytestream result:
cannam@86 848 <!--l. 106--><p class="noindent" >
cannam@86 849 <div class="fancyvrb" id="fancyvrb2">
cannam@86 850 <a
cannam@86 851 id="x1-43002r1"></a><span
cannam@86 852 class="cmr-6">1</span><span
cannam@86 853 class="cmtt-8">&#x00A0;</span><span
cannam@86 854 class="cmtt-8">&#x00A0;</span><span
cannam@86 855 class="cmtt-8">&#x00A0;</span><span
cannam@86 856 class="cmtt-8">&#x00A0;</span><span
cannam@86 857 class="cmtt-8">&#x00A0;</span><span
cannam@86 858 class="cmtt-8">&#x00A0;</span><span
cannam@86 859 class="cmtt-8">&#x00A0;</span><span
cannam@86 860 class="cmtt-8">&#x00A0;</span><span
cannam@86 861 class="cmtt-8">&#x00A0;</span><span
cannam@86 862 class="cmtt-8">&#x00A0;</span><span
cannam@86 863 class="cmtt-8">&#x00A0;</span><span
cannam@86 864 class="cmtt-8">&#x00A0;</span><span
cannam@86 865 class="cmtt-8">&#x00A0;</span><span
cannam@86 866 class="cmtt-8">&#x00A0;</span><span
cannam@86 867 class="cmtt-8">&#x00A0;</span><span
cannam@86 868 class="cmtt-8">&#x00A0;|</span>
cannam@86 869 <br class="fancyvrb" /><a
cannam@86 870 id="x1-43004r2"></a><span
cannam@86 871 class="cmr-6">2</span><span
cannam@86 872 class="cmtt-8">&#x00A0;</span><span
cannam@86 873 class="cmtt-8">&#x00A0;</span><span
cannam@86 874 class="cmtt-8">&#x00A0;</span><span
cannam@86 875 class="cmtt-8">&#x00A0;</span><span
cannam@86 876 class="cmtt-8">&#x00A0;</span><span
cannam@86 877 class="cmtt-8">&#x00A0;</span><span
cannam@86 878 class="cmtt-8">&#x00A0;</span><span
cannam@86 879 class="cmtt-8">&#x00A0;</span><span
cannam@86 880 class="cmtt-8">&#x00A0;</span><span
cannam@86 881 class="cmtt-8">&#x00A0;</span><span
cannam@86 882 class="cmtt-8">&#x00A0;</span><span
cannam@86 883 class="cmtt-8">&#x00A0;</span><span
cannam@86 884 class="cmtt-8">&#x00A0;</span><span
cannam@86 885 class="cmtt-8">&#x00A0;</span><span
cannam@86 886 class="cmtt-8">&#x00A0;</span><span
cannam@86 887 class="cmtt-8">&#x00A0;V</span>
cannam@86 888 <br class="fancyvrb" /><a
cannam@86 889 id="x1-43006r3"></a><span
cannam@86 890 class="cmr-6">3</span><span
cannam@86 891 class="cmtt-8">&#x00A0;</span><span
cannam@86 892 class="cmtt-8">&#x00A0;</span>
cannam@86 893 <br class="fancyvrb" /><a
cannam@86 894 id="x1-43008r4"></a><span
cannam@86 895 class="cmr-6">4</span><span
cannam@86 896 class="cmtt-8">&#x00A0;</span><span
cannam@86 897 class="cmtt-8">&#x00A0;</span><span
cannam@86 898 class="cmtt-8">&#x00A0;</span><span
cannam@86 899 class="cmtt-8">&#x00A0;</span><span
cannam@86 900 class="cmtt-8">&#x00A0;</span><span
cannam@86 901 class="cmtt-8">&#x00A0;</span><span
cannam@86 902 class="cmtt-8">&#x00A0;</span><span
cannam@86 903 class="cmtt-8">&#x00A0;</span><span
cannam@86 904 class="cmtt-8">&#x00A0;</span><span
cannam@86 905 class="cmtt-8">&#x00A0;7</span><span
cannam@86 906 class="cmtt-8">&#x00A0;6</span><span
cannam@86 907 class="cmtt-8">&#x00A0;5</span><span
cannam@86 908 class="cmtt-8">&#x00A0;4</span><span
cannam@86 909 class="cmtt-8">&#x00A0;3</span><span
cannam@86 910 class="cmtt-8">&#x00A0;2</span><span
cannam@86 911 class="cmtt-8">&#x00A0;1</span><span
cannam@86 912 class="cmtt-8">&#x00A0;0</span>
cannam@86 913 <br class="fancyvrb" /><a
cannam@86 914 id="x1-43010r5"></a><span
cannam@86 915 class="cmr-6">5</span><span
cannam@86 916 class="cmtt-8">&#x00A0;</span><span
cannam@86 917 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 918 class="cmtt-8">&#x00A0;0</span><span
cannam@86 919 class="cmtt-8">&#x00A0;[0</span><span
cannam@86 920 class="cmtt-8">&#x00A0;0</span><span
cannam@86 921 class="cmtt-8">&#x00A0;0</span><span
cannam@86 922 class="cmtt-8">&#x00A0;0</span><span
cannam@86 923 class="cmtt-8">&#x00A0;1</span><span
cannam@86 924 class="cmtt-8">&#x00A0;1</span><span
cannam@86 925 class="cmtt-8">&#x00A0;0</span><span
cannam@86 926 class="cmtt-8">&#x00A0;0]</span><span
cannam@86 927 class="cmtt-8">&#x00A0;</span><span
cannam@86 928 class="cmtt-8">&#x00A0;&#x003C;-</span>
cannam@86 929 <br class="fancyvrb" /><a
cannam@86 930 id="x1-43012r6"></a><span
cannam@86 931 class="cmr-6">6</span><span
cannam@86 932 class="cmtt-8">&#x00A0;</span><span
cannam@86 933 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 934 class="cmtt-8">&#x00A0;1</span><span
cannam@86 935 class="cmtt-8">&#x00A0;[</span><span
cannam@86 936 class="cmtt-8">&#x00A0;</span><span
cannam@86 937 class="cmtt-8">&#x00A0;</span><span
cannam@86 938 class="cmtt-8">&#x00A0;</span><span
cannam@86 939 class="cmtt-8">&#x00A0;</span><span
cannam@86 940 class="cmtt-8">&#x00A0;</span><span
cannam@86 941 class="cmtt-8">&#x00A0;</span><span
cannam@86 942 class="cmtt-8">&#x00A0;</span><span
cannam@86 943 class="cmtt-8">&#x00A0;</span><span
cannam@86 944 class="cmtt-8">&#x00A0;</span><span
cannam@86 945 class="cmtt-8">&#x00A0;</span><span
cannam@86 946 class="cmtt-8">&#x00A0;</span><span
cannam@86 947 class="cmtt-8">&#x00A0;</span><span
cannam@86 948 class="cmtt-8">&#x00A0;</span><span
cannam@86 949 class="cmtt-8">&#x00A0;</span><span
cannam@86 950 class="cmtt-8">&#x00A0;]</span>
cannam@86 951 <br class="fancyvrb" /><a
cannam@86 952 id="x1-43014r7"></a><span
cannam@86 953 class="cmr-6">7</span><span
cannam@86 954 class="cmtt-8">&#x00A0;</span><span
cannam@86 955 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 956 class="cmtt-8">&#x00A0;2</span><span
cannam@86 957 class="cmtt-8">&#x00A0;[</span><span
cannam@86 958 class="cmtt-8">&#x00A0;</span><span
cannam@86 959 class="cmtt-8">&#x00A0;</span><span
cannam@86 960 class="cmtt-8">&#x00A0;</span><span
cannam@86 961 class="cmtt-8">&#x00A0;</span><span
cannam@86 962 class="cmtt-8">&#x00A0;</span><span
cannam@86 963 class="cmtt-8">&#x00A0;</span><span
cannam@86 964 class="cmtt-8">&#x00A0;</span><span
cannam@86 965 class="cmtt-8">&#x00A0;</span><span
cannam@86 966 class="cmtt-8">&#x00A0;</span><span
cannam@86 967 class="cmtt-8">&#x00A0;</span><span
cannam@86 968 class="cmtt-8">&#x00A0;</span><span
cannam@86 969 class="cmtt-8">&#x00A0;</span><span
cannam@86 970 class="cmtt-8">&#x00A0;</span><span
cannam@86 971 class="cmtt-8">&#x00A0;</span><span
cannam@86 972 class="cmtt-8">&#x00A0;]</span>
cannam@86 973 <br class="fancyvrb" /><a
cannam@86 974 id="x1-43016r8"></a><span
cannam@86 975 class="cmr-6">8</span><span
cannam@86 976 class="cmtt-8">&#x00A0;</span><span
cannam@86 977 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 978 class="cmtt-8">&#x00A0;3</span><span
cannam@86 979 class="cmtt-8">&#x00A0;[</span><span
cannam@86 980 class="cmtt-8">&#x00A0;</span><span
cannam@86 981 class="cmtt-8">&#x00A0;</span><span
cannam@86 982 class="cmtt-8">&#x00A0;</span><span
cannam@86 983 class="cmtt-8">&#x00A0;</span><span
cannam@86 984 class="cmtt-8">&#x00A0;</span><span
cannam@86 985 class="cmtt-8">&#x00A0;</span><span
cannam@86 986 class="cmtt-8">&#x00A0;</span><span
cannam@86 987 class="cmtt-8">&#x00A0;</span><span
cannam@86 988 class="cmtt-8">&#x00A0;</span><span
cannam@86 989 class="cmtt-8">&#x00A0;</span><span
cannam@86 990 class="cmtt-8">&#x00A0;</span><span
cannam@86 991 class="cmtt-8">&#x00A0;</span><span
cannam@86 992 class="cmtt-8">&#x00A0;</span><span
cannam@86 993 class="cmtt-8">&#x00A0;</span><span
cannam@86 994 class="cmtt-8">&#x00A0;]</span>
cannam@86 995 <br class="fancyvrb" /><a
cannam@86 996 id="x1-43018r9"></a><span
cannam@86 997 class="cmr-6">9</span><span
cannam@86 998 class="cmtt-8">&#x00A0;</span><span
cannam@86 999 class="cmtt-8">&#x00A0;</span><span
cannam@86 1000 class="cmtt-8">&#x00A0;</span><span
cannam@86 1001 class="cmtt-8">&#x00A0;</span><span
cannam@86 1002 class="cmtt-8">&#x00A0;</span><span
cannam@86 1003 class="cmtt-8">&#x00A0;</span><span
cannam@86 1004 class="cmtt-8">&#x00A0;</span><span
cannam@86 1005 class="cmtt-8">&#x00A0;</span><span
cannam@86 1006 class="cmtt-8">&#x00A0;</span><span
cannam@86 1007 class="cmtt-8">&#x00A0;</span><span
cannam@86 1008 class="cmtt-8">&#x00A0;</span><span
cannam@86 1009 class="cmtt-8">&#x00A0;</span><span
cannam@86 1010 class="cmtt-8">&#x00A0;</span><span
cannam@86 1011 class="cmtt-8">&#x00A0;</span><span
cannam@86 1012 class="cmtt-8">&#x00A0;...</span>
cannam@86 1013 <br class="fancyvrb" /><a
cannam@86 1014 id="x1-43020r10"></a><span
cannam@86 1015 class="cmr-6">10</span><span
cannam@86 1016 class="cmtt-8">&#x00A0;</span><span
cannam@86 1017 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1018 class="cmtt-8">&#x00A0;n</span><span
cannam@86 1019 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1020 class="cmtt-8">&#x00A0;</span><span
cannam@86 1021 class="cmtt-8">&#x00A0;</span><span
cannam@86 1022 class="cmtt-8">&#x00A0;</span><span
cannam@86 1023 class="cmtt-8">&#x00A0;</span><span
cannam@86 1024 class="cmtt-8">&#x00A0;</span><span
cannam@86 1025 class="cmtt-8">&#x00A0;</span><span
cannam@86 1026 class="cmtt-8">&#x00A0;</span><span
cannam@86 1027 class="cmtt-8">&#x00A0;</span><span
cannam@86 1028 class="cmtt-8">&#x00A0;</span><span
cannam@86 1029 class="cmtt-8">&#x00A0;</span><span
cannam@86 1030 class="cmtt-8">&#x00A0;</span><span
cannam@86 1031 class="cmtt-8">&#x00A0;</span><span
cannam@86 1032 class="cmtt-8">&#x00A0;</span><span
cannam@86 1033 class="cmtt-8">&#x00A0;</span><span
cannam@86 1034 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1035 class="cmtt-8">&#x00A0;</span><span
cannam@86 1036 class="cmtt-8">&#x00A0;bytestream</span><span
cannam@86 1037 class="cmtt-8">&#x00A0;length</span><span
cannam@86 1038 class="cmtt-8">&#x00A0;==</span><span
cannam@86 1039 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1040 class="cmtt-8">&#x00A0;byte</span>
cannam@86 1041 <br class="fancyvrb" /><a
cannam@86 1042 id="x1-43022r11"></a><span
cannam@86 1043 class="cmr-6">11</span><span
cannam@86 1044 class="cmtt-8">&#x00A0;</span><span
cannam@86 1045 class="cmtt-8">&#x00A0;</span>
cannam@86 1046 </div>
cannam@86 1047 <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value &#8217;-1&#8217; [b111]:
cannam@86 1048 <!--l. 123--><p class="noindent" >
cannam@86 1049 <div class="fancyvrb" id="fancyvrb3">
cannam@86 1050 <a
cannam@86 1051 id="x1-43024r1"></a><span
cannam@86 1052 class="cmr-6">1</span><span
cannam@86 1053 class="cmtt-8">&#x00A0;</span><span
cannam@86 1054 class="cmtt-8">&#x00A0;</span><span
cannam@86 1055 class="cmtt-8">&#x00A0;</span><span
cannam@86 1056 class="cmtt-8">&#x00A0;</span><span
cannam@86 1057 class="cmtt-8">&#x00A0;</span><span
cannam@86 1058 class="cmtt-8">&#x00A0;</span><span
cannam@86 1059 class="cmtt-8">&#x00A0;</span><span
cannam@86 1060 class="cmtt-8">&#x00A0;</span><span
cannam@86 1061 class="cmtt-8">&#x00A0;</span><span
cannam@86 1062 class="cmtt-8">&#x00A0;|</span>
cannam@86 1063 <br class="fancyvrb" /><a
cannam@86 1064 id="x1-43026r2"></a><span
cannam@86 1065 class="cmr-6">2</span><span
cannam@86 1066 class="cmtt-8">&#x00A0;</span><span
cannam@86 1067 class="cmtt-8">&#x00A0;</span><span
cannam@86 1068 class="cmtt-8">&#x00A0;</span><span
cannam@86 1069 class="cmtt-8">&#x00A0;</span><span
cannam@86 1070 class="cmtt-8">&#x00A0;</span><span
cannam@86 1071 class="cmtt-8">&#x00A0;</span><span
cannam@86 1072 class="cmtt-8">&#x00A0;</span><span
cannam@86 1073 class="cmtt-8">&#x00A0;</span><span
cannam@86 1074 class="cmtt-8">&#x00A0;</span><span
cannam@86 1075 class="cmtt-8">&#x00A0;V</span>
cannam@86 1076 <br class="fancyvrb" /><a
cannam@86 1077 id="x1-43028r3"></a><span
cannam@86 1078 class="cmr-6">3</span><span
cannam@86 1079 class="cmtt-8">&#x00A0;</span><span
cannam@86 1080 class="cmtt-8">&#x00A0;</span>
cannam@86 1081 <br class="fancyvrb" /><a
cannam@86 1082 id="x1-43030r4"></a><span
cannam@86 1083 class="cmr-6">4</span><span
cannam@86 1084 class="cmtt-8">&#x00A0;</span><span
cannam@86 1085 class="cmtt-8">&#x00A0;</span><span
cannam@86 1086 class="cmtt-8">&#x00A0;</span><span
cannam@86 1087 class="cmtt-8">&#x00A0;</span><span
cannam@86 1088 class="cmtt-8">&#x00A0;</span><span
cannam@86 1089 class="cmtt-8">&#x00A0;</span><span
cannam@86 1090 class="cmtt-8">&#x00A0;</span><span
cannam@86 1091 class="cmtt-8">&#x00A0;</span><span
cannam@86 1092 class="cmtt-8">&#x00A0;</span><span
cannam@86 1093 class="cmtt-8">&#x00A0;7</span><span
cannam@86 1094 class="cmtt-8">&#x00A0;6</span><span
cannam@86 1095 class="cmtt-8">&#x00A0;5</span><span
cannam@86 1096 class="cmtt-8">&#x00A0;4</span><span
cannam@86 1097 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1098 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1099 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1100 class="cmtt-8">&#x00A0;0</span>
cannam@86 1101 <br class="fancyvrb" /><a
cannam@86 1102 id="x1-43032r5"></a><span
cannam@86 1103 class="cmr-6">5</span><span
cannam@86 1104 class="cmtt-8">&#x00A0;</span><span
cannam@86 1105 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1106 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1107 class="cmtt-8">&#x00A0;[0</span><span
cannam@86 1108 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1109 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1110 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1111 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1112 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1113 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1114 class="cmtt-8">&#x00A0;0]</span><span
cannam@86 1115 class="cmtt-8">&#x00A0;</span><span
cannam@86 1116 class="cmtt-8">&#x00A0;&#x003C;-</span>
cannam@86 1117 <br class="fancyvrb" /><a
cannam@86 1118 id="x1-43034r6"></a><span
cannam@86 1119 class="cmr-6">6</span><span
cannam@86 1120 class="cmtt-8">&#x00A0;</span><span
cannam@86 1121 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1122 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1123 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1124 class="cmtt-8">&#x00A0;</span><span
cannam@86 1125 class="cmtt-8">&#x00A0;</span><span
cannam@86 1126 class="cmtt-8">&#x00A0;</span><span
cannam@86 1127 class="cmtt-8">&#x00A0;</span><span
cannam@86 1128 class="cmtt-8">&#x00A0;</span><span
cannam@86 1129 class="cmtt-8">&#x00A0;</span><span
cannam@86 1130 class="cmtt-8">&#x00A0;</span><span
cannam@86 1131 class="cmtt-8">&#x00A0;</span><span
cannam@86 1132 class="cmtt-8">&#x00A0;</span><span
cannam@86 1133 class="cmtt-8">&#x00A0;</span><span
cannam@86 1134 class="cmtt-8">&#x00A0;</span><span
cannam@86 1135 class="cmtt-8">&#x00A0;</span><span
cannam@86 1136 class="cmtt-8">&#x00A0;</span><span
cannam@86 1137 class="cmtt-8">&#x00A0;</span><span
cannam@86 1138 class="cmtt-8">&#x00A0;]</span>
cannam@86 1139
cannam@86 1140
cannam@86 1141
cannam@86 1142 <br class="fancyvrb" /><a
cannam@86 1143 id="x1-43036r7"></a><span
cannam@86 1144 class="cmr-6">7</span><span
cannam@86 1145 class="cmtt-8">&#x00A0;</span><span
cannam@86 1146 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1147 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1148 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1149 class="cmtt-8">&#x00A0;</span><span
cannam@86 1150 class="cmtt-8">&#x00A0;</span><span
cannam@86 1151 class="cmtt-8">&#x00A0;</span><span
cannam@86 1152 class="cmtt-8">&#x00A0;</span><span
cannam@86 1153 class="cmtt-8">&#x00A0;</span><span
cannam@86 1154 class="cmtt-8">&#x00A0;</span><span
cannam@86 1155 class="cmtt-8">&#x00A0;</span><span
cannam@86 1156 class="cmtt-8">&#x00A0;</span><span
cannam@86 1157 class="cmtt-8">&#x00A0;</span><span
cannam@86 1158 class="cmtt-8">&#x00A0;</span><span
cannam@86 1159 class="cmtt-8">&#x00A0;</span><span
cannam@86 1160 class="cmtt-8">&#x00A0;</span><span
cannam@86 1161 class="cmtt-8">&#x00A0;</span><span
cannam@86 1162 class="cmtt-8">&#x00A0;</span><span
cannam@86 1163 class="cmtt-8">&#x00A0;]</span>
cannam@86 1164 <br class="fancyvrb" /><a
cannam@86 1165 id="x1-43038r8"></a><span
cannam@86 1166 class="cmr-6">8</span><span
cannam@86 1167 class="cmtt-8">&#x00A0;</span><span
cannam@86 1168 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1169 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1170 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1171 class="cmtt-8">&#x00A0;</span><span
cannam@86 1172 class="cmtt-8">&#x00A0;</span><span
cannam@86 1173 class="cmtt-8">&#x00A0;</span><span
cannam@86 1174 class="cmtt-8">&#x00A0;</span><span
cannam@86 1175 class="cmtt-8">&#x00A0;</span><span
cannam@86 1176 class="cmtt-8">&#x00A0;</span><span
cannam@86 1177 class="cmtt-8">&#x00A0;</span><span
cannam@86 1178 class="cmtt-8">&#x00A0;</span><span
cannam@86 1179 class="cmtt-8">&#x00A0;</span><span
cannam@86 1180 class="cmtt-8">&#x00A0;</span><span
cannam@86 1181 class="cmtt-8">&#x00A0;</span><span
cannam@86 1182 class="cmtt-8">&#x00A0;</span><span
cannam@86 1183 class="cmtt-8">&#x00A0;</span><span
cannam@86 1184 class="cmtt-8">&#x00A0;</span><span
cannam@86 1185 class="cmtt-8">&#x00A0;]</span>
cannam@86 1186 <br class="fancyvrb" /><a
cannam@86 1187 id="x1-43040r9"></a><span
cannam@86 1188 class="cmr-6">9</span><span
cannam@86 1189 class="cmtt-8">&#x00A0;</span><span
cannam@86 1190 class="cmtt-8">&#x00A0;</span><span
cannam@86 1191 class="cmtt-8">&#x00A0;</span><span
cannam@86 1192 class="cmtt-8">&#x00A0;</span><span
cannam@86 1193 class="cmtt-8">&#x00A0;</span><span
cannam@86 1194 class="cmtt-8">&#x00A0;</span><span
cannam@86 1195 class="cmtt-8">&#x00A0;</span><span
cannam@86 1196 class="cmtt-8">&#x00A0;</span><span
cannam@86 1197 class="cmtt-8">&#x00A0;</span><span
cannam@86 1198 class="cmtt-8">&#x00A0;</span><span
cannam@86 1199 class="cmtt-8">&#x00A0;</span><span
cannam@86 1200 class="cmtt-8">&#x00A0;</span><span
cannam@86 1201 class="cmtt-8">&#x00A0;</span><span
cannam@86 1202 class="cmtt-8">&#x00A0;</span><span
cannam@86 1203 class="cmtt-8">&#x00A0;...</span>
cannam@86 1204 <br class="fancyvrb" /><a
cannam@86 1205 id="x1-43042r10"></a><span
cannam@86 1206 class="cmr-6">10</span><span
cannam@86 1207 class="cmtt-8">&#x00A0;</span><span
cannam@86 1208 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1209 class="cmtt-8">&#x00A0;n</span><span
cannam@86 1210 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1211 class="cmtt-8">&#x00A0;</span><span
cannam@86 1212 class="cmtt-8">&#x00A0;</span><span
cannam@86 1213 class="cmtt-8">&#x00A0;</span><span
cannam@86 1214 class="cmtt-8">&#x00A0;</span><span
cannam@86 1215 class="cmtt-8">&#x00A0;</span><span
cannam@86 1216 class="cmtt-8">&#x00A0;</span><span
cannam@86 1217 class="cmtt-8">&#x00A0;</span><span
cannam@86 1218 class="cmtt-8">&#x00A0;</span><span
cannam@86 1219 class="cmtt-8">&#x00A0;</span><span
cannam@86 1220 class="cmtt-8">&#x00A0;</span><span
cannam@86 1221 class="cmtt-8">&#x00A0;</span><span
cannam@86 1222 class="cmtt-8">&#x00A0;</span><span
cannam@86 1223 class="cmtt-8">&#x00A0;</span><span
cannam@86 1224 class="cmtt-8">&#x00A0;</span><span
cannam@86 1225 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1226 class="cmtt-8">&#x00A0;</span><span
cannam@86 1227 class="cmtt-8">&#x00A0;bytestream</span><span
cannam@86 1228 class="cmtt-8">&#x00A0;length</span><span
cannam@86 1229 class="cmtt-8">&#x00A0;==</span><span
cannam@86 1230 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1231 class="cmtt-8">&#x00A0;byte</span>
cannam@86 1232 </div>
cannam@86 1233 <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value &#8217;17&#8217; [b0010001]:
cannam@86 1234 <!--l. 139--><p class="noindent" >
cannam@86 1235 <div class="fancyvrb" id="fancyvrb4">
cannam@86 1236 <a
cannam@86 1237 id="x1-43044r1"></a><span
cannam@86 1238 class="cmr-6">1</span><span
cannam@86 1239 class="cmtt-8">&#x00A0;</span><span
cannam@86 1240 class="cmtt-8">&#x00A0;</span><span
cannam@86 1241 class="cmtt-8">&#x00A0;</span><span
cannam@86 1242 class="cmtt-8">&#x00A0;</span><span
cannam@86 1243 class="cmtt-8">&#x00A0;</span><span
cannam@86 1244 class="cmtt-8">&#x00A0;</span><span
cannam@86 1245 class="cmtt-8">&#x00A0;</span><span
cannam@86 1246 class="cmtt-8">&#x00A0;</span><span
cannam@86 1247 class="cmtt-8">&#x00A0;</span><span
cannam@86 1248 class="cmtt-8">&#x00A0;</span><span
cannam@86 1249 class="cmtt-8">&#x00A0;</span><span
cannam@86 1250 class="cmtt-8">&#x00A0;|</span>
cannam@86 1251 <br class="fancyvrb" /><a
cannam@86 1252 id="x1-43046r2"></a><span
cannam@86 1253 class="cmr-6">2</span><span
cannam@86 1254 class="cmtt-8">&#x00A0;</span><span
cannam@86 1255 class="cmtt-8">&#x00A0;</span><span
cannam@86 1256 class="cmtt-8">&#x00A0;</span><span
cannam@86 1257 class="cmtt-8">&#x00A0;</span><span
cannam@86 1258 class="cmtt-8">&#x00A0;</span><span
cannam@86 1259 class="cmtt-8">&#x00A0;</span><span
cannam@86 1260 class="cmtt-8">&#x00A0;</span><span
cannam@86 1261 class="cmtt-8">&#x00A0;</span><span
cannam@86 1262 class="cmtt-8">&#x00A0;</span><span
cannam@86 1263 class="cmtt-8">&#x00A0;</span><span
cannam@86 1264 class="cmtt-8">&#x00A0;</span><span
cannam@86 1265 class="cmtt-8">&#x00A0;V</span>
cannam@86 1266 <br class="fancyvrb" /><a
cannam@86 1267 id="x1-43048r3"></a><span
cannam@86 1268 class="cmr-6">3</span><span
cannam@86 1269 class="cmtt-8">&#x00A0;</span><span
cannam@86 1270 class="cmtt-8">&#x00A0;</span>
cannam@86 1271 <br class="fancyvrb" /><a
cannam@86 1272 id="x1-43050r4"></a><span
cannam@86 1273 class="cmr-6">4</span><span
cannam@86 1274 class="cmtt-8">&#x00A0;</span><span
cannam@86 1275 class="cmtt-8">&#x00A0;</span><span
cannam@86 1276 class="cmtt-8">&#x00A0;</span><span
cannam@86 1277 class="cmtt-8">&#x00A0;</span><span
cannam@86 1278 class="cmtt-8">&#x00A0;</span><span
cannam@86 1279 class="cmtt-8">&#x00A0;</span><span
cannam@86 1280 class="cmtt-8">&#x00A0;</span><span
cannam@86 1281 class="cmtt-8">&#x00A0;</span><span
cannam@86 1282 class="cmtt-8">&#x00A0;</span><span
cannam@86 1283 class="cmtt-8">&#x00A0;7</span><span
cannam@86 1284 class="cmtt-8">&#x00A0;6</span><span
cannam@86 1285 class="cmtt-8">&#x00A0;5</span><span
cannam@86 1286 class="cmtt-8">&#x00A0;4</span><span
cannam@86 1287 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1288 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1289 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1290 class="cmtt-8">&#x00A0;0</span>
cannam@86 1291 <br class="fancyvrb" /><a
cannam@86 1292 id="x1-43052r5"></a><span
cannam@86 1293 class="cmr-6">5</span><span
cannam@86 1294 class="cmtt-8">&#x00A0;</span><span
cannam@86 1295 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1296 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1297 class="cmtt-8">&#x00A0;[1</span><span
cannam@86 1298 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1299 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1300 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1301 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1302 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1303 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1304 class="cmtt-8">&#x00A0;0]</span>
cannam@86 1305 <br class="fancyvrb" /><a
cannam@86 1306 id="x1-43054r6"></a><span
cannam@86 1307 class="cmr-6">6</span><span
cannam@86 1308 class="cmtt-8">&#x00A0;</span><span
cannam@86 1309 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1310 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1311 class="cmtt-8">&#x00A0;[0</span><span
cannam@86 1312 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1313 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1314 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1315 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1316 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1317 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1318 class="cmtt-8">&#x00A0;0]</span><span
cannam@86 1319 class="cmtt-8">&#x00A0;</span><span
cannam@86 1320 class="cmtt-8">&#x00A0;&#x003C;-</span>
cannam@86 1321 <br class="fancyvrb" /><a
cannam@86 1322 id="x1-43056r7"></a><span
cannam@86 1323 class="cmr-6">7</span><span
cannam@86 1324 class="cmtt-8">&#x00A0;</span><span
cannam@86 1325 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1326 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1327 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1328 class="cmtt-8">&#x00A0;</span><span
cannam@86 1329 class="cmtt-8">&#x00A0;</span><span
cannam@86 1330 class="cmtt-8">&#x00A0;</span><span
cannam@86 1331 class="cmtt-8">&#x00A0;</span><span
cannam@86 1332 class="cmtt-8">&#x00A0;</span><span
cannam@86 1333 class="cmtt-8">&#x00A0;</span><span
cannam@86 1334 class="cmtt-8">&#x00A0;</span><span
cannam@86 1335 class="cmtt-8">&#x00A0;</span><span
cannam@86 1336 class="cmtt-8">&#x00A0;</span><span
cannam@86 1337 class="cmtt-8">&#x00A0;</span><span
cannam@86 1338 class="cmtt-8">&#x00A0;</span><span
cannam@86 1339 class="cmtt-8">&#x00A0;</span><span
cannam@86 1340 class="cmtt-8">&#x00A0;</span><span
cannam@86 1341 class="cmtt-8">&#x00A0;</span><span
cannam@86 1342 class="cmtt-8">&#x00A0;]</span>
cannam@86 1343 <br class="fancyvrb" /><a
cannam@86 1344 id="x1-43058r8"></a><span
cannam@86 1345 class="cmr-6">8</span><span
cannam@86 1346 class="cmtt-8">&#x00A0;</span><span
cannam@86 1347 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1348 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1349 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1350 class="cmtt-8">&#x00A0;</span><span
cannam@86 1351 class="cmtt-8">&#x00A0;</span><span
cannam@86 1352 class="cmtt-8">&#x00A0;</span><span
cannam@86 1353 class="cmtt-8">&#x00A0;</span><span
cannam@86 1354 class="cmtt-8">&#x00A0;</span><span
cannam@86 1355 class="cmtt-8">&#x00A0;</span><span
cannam@86 1356 class="cmtt-8">&#x00A0;</span><span
cannam@86 1357 class="cmtt-8">&#x00A0;</span><span
cannam@86 1358 class="cmtt-8">&#x00A0;</span><span
cannam@86 1359 class="cmtt-8">&#x00A0;</span><span
cannam@86 1360 class="cmtt-8">&#x00A0;</span><span
cannam@86 1361 class="cmtt-8">&#x00A0;</span><span
cannam@86 1362 class="cmtt-8">&#x00A0;</span><span
cannam@86 1363 class="cmtt-8">&#x00A0;</span><span
cannam@86 1364 class="cmtt-8">&#x00A0;]</span>
cannam@86 1365 <br class="fancyvrb" /><a
cannam@86 1366 id="x1-43060r9"></a><span
cannam@86 1367 class="cmr-6">9</span><span
cannam@86 1368 class="cmtt-8">&#x00A0;</span><span
cannam@86 1369 class="cmtt-8">&#x00A0;</span><span
cannam@86 1370 class="cmtt-8">&#x00A0;</span><span
cannam@86 1371 class="cmtt-8">&#x00A0;</span><span
cannam@86 1372 class="cmtt-8">&#x00A0;</span><span
cannam@86 1373 class="cmtt-8">&#x00A0;</span><span
cannam@86 1374 class="cmtt-8">&#x00A0;</span><span
cannam@86 1375 class="cmtt-8">&#x00A0;</span><span
cannam@86 1376 class="cmtt-8">&#x00A0;</span><span
cannam@86 1377 class="cmtt-8">&#x00A0;</span><span
cannam@86 1378 class="cmtt-8">&#x00A0;</span><span
cannam@86 1379 class="cmtt-8">&#x00A0;</span><span
cannam@86 1380 class="cmtt-8">&#x00A0;</span><span
cannam@86 1381 class="cmtt-8">&#x00A0;</span><span
cannam@86 1382 class="cmtt-8">&#x00A0;...</span>
cannam@86 1383 <br class="fancyvrb" /><a
cannam@86 1384 id="x1-43062r10"></a><span
cannam@86 1385 class="cmr-6">10</span><span
cannam@86 1386 class="cmtt-8">&#x00A0;</span><span
cannam@86 1387 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1388 class="cmtt-8">&#x00A0;n</span><span
cannam@86 1389 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1390 class="cmtt-8">&#x00A0;</span><span
cannam@86 1391 class="cmtt-8">&#x00A0;</span><span
cannam@86 1392 class="cmtt-8">&#x00A0;</span><span
cannam@86 1393 class="cmtt-8">&#x00A0;</span><span
cannam@86 1394 class="cmtt-8">&#x00A0;</span><span
cannam@86 1395 class="cmtt-8">&#x00A0;</span><span
cannam@86 1396 class="cmtt-8">&#x00A0;</span><span
cannam@86 1397 class="cmtt-8">&#x00A0;</span><span
cannam@86 1398 class="cmtt-8">&#x00A0;</span><span
cannam@86 1399 class="cmtt-8">&#x00A0;</span><span
cannam@86 1400 class="cmtt-8">&#x00A0;</span><span
cannam@86 1401 class="cmtt-8">&#x00A0;</span><span
cannam@86 1402 class="cmtt-8">&#x00A0;</span><span
cannam@86 1403 class="cmtt-8">&#x00A0;</span><span
cannam@86 1404 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1405 class="cmtt-8">&#x00A0;</span><span
cannam@86 1406 class="cmtt-8">&#x00A0;bytestream</span><span
cannam@86 1407 class="cmtt-8">&#x00A0;length</span><span
cannam@86 1408 class="cmtt-8">&#x00A0;==</span><span
cannam@86 1409 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1410 class="cmtt-8">&#x00A0;bytes</span>
cannam@86 1411 <br class="fancyvrb" /><a
cannam@86 1412 id="x1-43064r11"></a><span
cannam@86 1413 class="cmr-6">11</span><span
cannam@86 1414 class="cmtt-8">&#x00A0;</span><span
cannam@86 1415 class="cmtt-8">&#x00A0;</span><span
cannam@86 1416 class="cmtt-8">&#x00A0;</span><span
cannam@86 1417 class="cmtt-8">&#x00A0;</span><span
cannam@86 1418 class="cmtt-8">&#x00A0;</span><span
cannam@86 1419 class="cmtt-8">&#x00A0;</span><span
cannam@86 1420 class="cmtt-8">&#x00A0;</span><span
cannam@86 1421 class="cmtt-8">&#x00A0;</span><span
cannam@86 1422 class="cmtt-8">&#x00A0;</span><span
cannam@86 1423 class="cmtt-8">&#x00A0;</span><span
cannam@86 1424 class="cmtt-8">&#x00A0;</span><span
cannam@86 1425 class="cmtt-8">&#x00A0;</span><span
cannam@86 1426 class="cmtt-8">&#x00A0;</span><span
cannam@86 1427 class="cmtt-8">&#x00A0;</span><span
cannam@86 1428 class="cmtt-8">&#x00A0;</span><span
cannam@86 1429 class="cmtt-8">&#x00A0;</span><span
cannam@86 1430 class="cmtt-8">&#x00A0;</span><span
cannam@86 1431 class="cmtt-8">&#x00A0;</span><span
cannam@86 1432 class="cmtt-8">&#x00A0;</span><span
cannam@86 1433 class="cmtt-8">&#x00A0;</span><span
cannam@86 1434 class="cmtt-8">&#x00A0;</span><span
cannam@86 1435 class="cmtt-8">&#x00A0;</span><span
cannam@86 1436 class="cmtt-8">&#x00A0;</span><span
cannam@86 1437 class="cmtt-8">&#x00A0;</span><span
cannam@86 1438 class="cmtt-8">&#x00A0;</span><span
cannam@86 1439 class="cmtt-8">&#x00A0;</span><span
cannam@86 1440 class="cmtt-8">&#x00A0;</span><span
cannam@86 1441 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 1442 class="cmtt-8">&#x00A0;cursor</span><span
cannam@86 1443 class="cmtt-8">&#x00A0;==</span><span
cannam@86 1444 class="cmtt-8">&#x00A0;6</span>
cannam@86 1445 </div>
cannam@86 1446 <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value &#8217;6969&#8217; [b110 11001110 01]:
cannam@86 1447 <!--l. 156--><p class="noindent" >
cannam@86 1448 <div class="fancyvrb" id="fancyvrb5">
cannam@86 1449 <a
cannam@86 1450 id="x1-43066r1"></a><span
cannam@86 1451 class="cmr-6">1</span><span
cannam@86 1452 class="cmtt-8">&#x00A0;</span><span
cannam@86 1453 class="cmtt-8">&#x00A0;</span><span
cannam@86 1454 class="cmtt-8">&#x00A0;</span><span
cannam@86 1455 class="cmtt-8">&#x00A0;</span><span
cannam@86 1456 class="cmtt-8">&#x00A0;</span><span
cannam@86 1457 class="cmtt-8">&#x00A0;</span><span
cannam@86 1458 class="cmtt-8">&#x00A0;</span><span
cannam@86 1459 class="cmtt-8">&#x00A0;</span><span
cannam@86 1460 class="cmtt-8">&#x00A0;</span><span
cannam@86 1461 class="cmtt-8">&#x00A0;</span><span
cannam@86 1462 class="cmtt-8">&#x00A0;</span><span
cannam@86 1463 class="cmtt-8">&#x00A0;</span><span
cannam@86 1464 class="cmtt-8">&#x00A0;</span><span
cannam@86 1465 class="cmtt-8">&#x00A0;</span><span
cannam@86 1466 class="cmtt-8">&#x00A0;</span><span
cannam@86 1467 class="cmtt-8">&#x00A0;</span><span
cannam@86 1468 class="cmtt-8">&#x00A0;</span><span
cannam@86 1469 class="cmtt-8">&#x00A0;|</span>
cannam@86 1470 <br class="fancyvrb" /><a
cannam@86 1471 id="x1-43068r2"></a><span
cannam@86 1472 class="cmr-6">2</span><span
cannam@86 1473 class="cmtt-8">&#x00A0;</span><span
cannam@86 1474 class="cmtt-8">&#x00A0;</span><span
cannam@86 1475 class="cmtt-8">&#x00A0;</span><span
cannam@86 1476 class="cmtt-8">&#x00A0;</span><span
cannam@86 1477 class="cmtt-8">&#x00A0;</span><span
cannam@86 1478 class="cmtt-8">&#x00A0;</span><span
cannam@86 1479 class="cmtt-8">&#x00A0;</span><span
cannam@86 1480 class="cmtt-8">&#x00A0;</span><span
cannam@86 1481 class="cmtt-8">&#x00A0;</span><span
cannam@86 1482 class="cmtt-8">&#x00A0;</span><span
cannam@86 1483 class="cmtt-8">&#x00A0;</span><span
cannam@86 1484 class="cmtt-8">&#x00A0;</span><span
cannam@86 1485 class="cmtt-8">&#x00A0;</span><span
cannam@86 1486 class="cmtt-8">&#x00A0;</span><span
cannam@86 1487 class="cmtt-8">&#x00A0;</span><span
cannam@86 1488 class="cmtt-8">&#x00A0;</span><span
cannam@86 1489 class="cmtt-8">&#x00A0;</span><span
cannam@86 1490 class="cmtt-8">&#x00A0;V</span>
cannam@86 1491 <br class="fancyvrb" /><a
cannam@86 1492 id="x1-43070r3"></a><span
cannam@86 1493 class="cmr-6">3</span><span
cannam@86 1494 class="cmtt-8">&#x00A0;</span><span
cannam@86 1495 class="cmtt-8">&#x00A0;</span>
cannam@86 1496 <br class="fancyvrb" /><a
cannam@86 1497 id="x1-43072r4"></a><span
cannam@86 1498 class="cmr-6">4</span><span
cannam@86 1499 class="cmtt-8">&#x00A0;</span><span
cannam@86 1500 class="cmtt-8">&#x00A0;</span><span
cannam@86 1501 class="cmtt-8">&#x00A0;</span><span
cannam@86 1502 class="cmtt-8">&#x00A0;</span><span
cannam@86 1503 class="cmtt-8">&#x00A0;</span><span
cannam@86 1504 class="cmtt-8">&#x00A0;</span><span
cannam@86 1505 class="cmtt-8">&#x00A0;</span><span
cannam@86 1506 class="cmtt-8">&#x00A0;</span><span
cannam@86 1507 class="cmtt-8">&#x00A0;</span><span
cannam@86 1508 class="cmtt-8">&#x00A0;7</span><span
cannam@86 1509 class="cmtt-8">&#x00A0;6</span><span
cannam@86 1510 class="cmtt-8">&#x00A0;5</span><span
cannam@86 1511 class="cmtt-8">&#x00A0;4</span><span
cannam@86 1512 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1513 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1514 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1515 class="cmtt-8">&#x00A0;0</span>
cannam@86 1516 <br class="fancyvrb" /><a
cannam@86 1517 id="x1-43074r5"></a><span
cannam@86 1518 class="cmr-6">5</span><span
cannam@86 1519 class="cmtt-8">&#x00A0;</span><span
cannam@86 1520 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1521 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1522 class="cmtt-8">&#x00A0;[1</span><span
cannam@86 1523 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1524 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1525 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1526 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1527 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1528 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1529 class="cmtt-8">&#x00A0;0]</span>
cannam@86 1530 <br class="fancyvrb" /><a
cannam@86 1531 id="x1-43076r6"></a><span
cannam@86 1532 class="cmr-6">6</span><span
cannam@86 1533 class="cmtt-8">&#x00A0;</span><span
cannam@86 1534 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1535 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1536 class="cmtt-8">&#x00A0;[0</span><span
cannam@86 1537 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1538 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1539 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1540 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1541 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1542 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1543 class="cmtt-8">&#x00A0;0]</span>
cannam@86 1544 <br class="fancyvrb" /><a
cannam@86 1545 id="x1-43078r7"></a><span
cannam@86 1546 class="cmr-6">7</span><span
cannam@86 1547 class="cmtt-8">&#x00A0;</span><span
cannam@86 1548 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1549 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1550 class="cmtt-8">&#x00A0;[1</span><span
cannam@86 1551 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1552 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1553 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1554 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1555 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1556 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1557 class="cmtt-8">&#x00A0;0]</span>
cannam@86 1558 <br class="fancyvrb" /><a
cannam@86 1559 id="x1-43080r8"></a><span
cannam@86 1560 class="cmr-6">8</span><span
cannam@86 1561 class="cmtt-8">&#x00A0;</span><span
cannam@86 1562 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1563 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1564 class="cmtt-8">&#x00A0;[0</span><span
cannam@86 1565 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1566 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1567 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1568 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1569 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1570 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1571 class="cmtt-8">&#x00A0;0]</span><span
cannam@86 1572 class="cmtt-8">&#x00A0;</span><span
cannam@86 1573 class="cmtt-8">&#x00A0;&#x003C;-</span>
cannam@86 1574 <br class="fancyvrb" /><a
cannam@86 1575 id="x1-43082r9"></a><span
cannam@86 1576 class="cmr-6">9</span><span
cannam@86 1577 class="cmtt-8">&#x00A0;</span><span
cannam@86 1578 class="cmtt-8">&#x00A0;</span><span
cannam@86 1579 class="cmtt-8">&#x00A0;</span><span
cannam@86 1580 class="cmtt-8">&#x00A0;</span><span
cannam@86 1581 class="cmtt-8">&#x00A0;</span><span
cannam@86 1582 class="cmtt-8">&#x00A0;</span><span
cannam@86 1583 class="cmtt-8">&#x00A0;</span><span
cannam@86 1584 class="cmtt-8">&#x00A0;</span><span
cannam@86 1585 class="cmtt-8">&#x00A0;</span><span
cannam@86 1586 class="cmtt-8">&#x00A0;</span><span
cannam@86 1587 class="cmtt-8">&#x00A0;</span><span
cannam@86 1588 class="cmtt-8">&#x00A0;</span><span
cannam@86 1589 class="cmtt-8">&#x00A0;</span><span
cannam@86 1590 class="cmtt-8">&#x00A0;</span><span
cannam@86 1591 class="cmtt-8">&#x00A0;...</span>
cannam@86 1592 <br class="fancyvrb" /><a
cannam@86 1593 id="x1-43084r10"></a><span
cannam@86 1594 class="cmr-6">10</span><span
cannam@86 1595 class="cmtt-8">&#x00A0;</span><span
cannam@86 1596 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1597 class="cmtt-8">&#x00A0;n</span><span
cannam@86 1598 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1599 class="cmtt-8">&#x00A0;</span><span
cannam@86 1600 class="cmtt-8">&#x00A0;</span><span
cannam@86 1601 class="cmtt-8">&#x00A0;</span><span
cannam@86 1602 class="cmtt-8">&#x00A0;</span><span
cannam@86 1603 class="cmtt-8">&#x00A0;</span><span
cannam@86 1604 class="cmtt-8">&#x00A0;</span><span
cannam@86 1605 class="cmtt-8">&#x00A0;</span><span
cannam@86 1606 class="cmtt-8">&#x00A0;</span><span
cannam@86 1607 class="cmtt-8">&#x00A0;</span><span
cannam@86 1608 class="cmtt-8">&#x00A0;</span><span
cannam@86 1609 class="cmtt-8">&#x00A0;</span><span
cannam@86 1610 class="cmtt-8">&#x00A0;</span><span
cannam@86 1611 class="cmtt-8">&#x00A0;</span><span
cannam@86 1612 class="cmtt-8">&#x00A0;</span><span
cannam@86 1613 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1614 class="cmtt-8">&#x00A0;</span><span
cannam@86 1615 class="cmtt-8">&#x00A0;bytestream</span><span
cannam@86 1616 class="cmtt-8">&#x00A0;length</span><span
cannam@86 1617 class="cmtt-8">&#x00A0;==</span><span
cannam@86 1618 class="cmtt-8">&#x00A0;4</span><span
cannam@86 1619 class="cmtt-8">&#x00A0;bytes</span>
cannam@86 1620 <br class="fancyvrb" /><a
cannam@86 1621 id="x1-43086r11"></a><span
cannam@86 1622 class="cmr-6">11</span><span
cannam@86 1623 class="cmtt-8">&#x00A0;</span><span
cannam@86 1624 class="cmtt-8">&#x00A0;</span>
cannam@86 1625 </div>
cannam@86 1626 <!--l. 173--><p class="noindent" >
cannam@86 1627 <h5 class="subsubsectionHead"><span class="titlemark">2.1.7. </span> <a
cannam@86 1628 id="x1-440002.1.7"></a>decoding example</h5>
cannam@86 1629 <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
cannam@86 1630 <!--l. 177--><p class="noindent" >
cannam@86 1631 <div class="fancyvrb" id="fancyvrb6">
cannam@86 1632
cannam@86 1633
cannam@86 1634
cannam@86 1635 <a
cannam@86 1636 id="x1-44002r1"></a><span
cannam@86 1637 class="cmr-6">1</span><span
cannam@86 1638 class="cmtt-8">&#x00A0;</span><span
cannam@86 1639 class="cmtt-8">&#x00A0;</span><span
cannam@86 1640 class="cmtt-8">&#x00A0;</span><span
cannam@86 1641 class="cmtt-8">&#x00A0;</span><span
cannam@86 1642 class="cmtt-8">&#x00A0;</span><span
cannam@86 1643 class="cmtt-8">&#x00A0;</span><span
cannam@86 1644 class="cmtt-8">&#x00A0;</span><span
cannam@86 1645 class="cmtt-8">&#x00A0;</span><span
cannam@86 1646 class="cmtt-8">&#x00A0;</span><span
cannam@86 1647 class="cmtt-8">&#x00A0;</span><span
cannam@86 1648 class="cmtt-8">&#x00A0;</span><span
cannam@86 1649 class="cmtt-8">&#x00A0;</span><span
cannam@86 1650 class="cmtt-8">&#x00A0;</span><span
cannam@86 1651 class="cmtt-8">&#x00A0;</span><span
cannam@86 1652 class="cmtt-8">&#x00A0;</span><span
cannam@86 1653 class="cmtt-8">&#x00A0;</span><span
cannam@86 1654 class="cmtt-8">&#x00A0;</span><span
cannam@86 1655 class="cmtt-8">&#x00A0;</span><span
cannam@86 1656 class="cmtt-8">&#x00A0;</span><span
cannam@86 1657 class="cmtt-8">&#x00A0;</span><span
cannam@86 1658 class="cmtt-8">&#x00A0;</span><span
cannam@86 1659 class="cmtt-8">&#x00A0;</span><span
cannam@86 1660 class="cmtt-8">&#x00A0;</span><span
cannam@86 1661 class="cmtt-8">&#x00A0;|</span>
cannam@86 1662 <br class="fancyvrb" /><a
cannam@86 1663 id="x1-44004r2"></a><span
cannam@86 1664 class="cmr-6">2</span><span
cannam@86 1665 class="cmtt-8">&#x00A0;</span><span
cannam@86 1666 class="cmtt-8">&#x00A0;</span><span
cannam@86 1667 class="cmtt-8">&#x00A0;</span><span
cannam@86 1668 class="cmtt-8">&#x00A0;</span><span
cannam@86 1669 class="cmtt-8">&#x00A0;</span><span
cannam@86 1670 class="cmtt-8">&#x00A0;</span><span
cannam@86 1671 class="cmtt-8">&#x00A0;</span><span
cannam@86 1672 class="cmtt-8">&#x00A0;</span><span
cannam@86 1673 class="cmtt-8">&#x00A0;</span><span
cannam@86 1674 class="cmtt-8">&#x00A0;</span><span
cannam@86 1675 class="cmtt-8">&#x00A0;</span><span
cannam@86 1676 class="cmtt-8">&#x00A0;</span><span
cannam@86 1677 class="cmtt-8">&#x00A0;</span><span
cannam@86 1678 class="cmtt-8">&#x00A0;</span><span
cannam@86 1679 class="cmtt-8">&#x00A0;</span><span
cannam@86 1680 class="cmtt-8">&#x00A0;</span><span
cannam@86 1681 class="cmtt-8">&#x00A0;</span><span
cannam@86 1682 class="cmtt-8">&#x00A0;</span><span
cannam@86 1683 class="cmtt-8">&#x00A0;</span><span
cannam@86 1684 class="cmtt-8">&#x00A0;</span><span
cannam@86 1685 class="cmtt-8">&#x00A0;</span><span
cannam@86 1686 class="cmtt-8">&#x00A0;</span><span
cannam@86 1687 class="cmtt-8">&#x00A0;</span><span
cannam@86 1688 class="cmtt-8">&#x00A0;V</span>
cannam@86 1689 <br class="fancyvrb" /><a
cannam@86 1690 id="x1-44006r3"></a><span
cannam@86 1691 class="cmr-6">3</span><span
cannam@86 1692 class="cmtt-8">&#x00A0;</span><span
cannam@86 1693 class="cmtt-8">&#x00A0;</span>
cannam@86 1694 <br class="fancyvrb" /><a
cannam@86 1695 id="x1-44008r4"></a><span
cannam@86 1696 class="cmr-6">4</span><span
cannam@86 1697 class="cmtt-8">&#x00A0;</span><span
cannam@86 1698 class="cmtt-8">&#x00A0;</span><span
cannam@86 1699 class="cmtt-8">&#x00A0;</span><span
cannam@86 1700 class="cmtt-8">&#x00A0;</span><span
cannam@86 1701 class="cmtt-8">&#x00A0;</span><span
cannam@86 1702 class="cmtt-8">&#x00A0;</span><span
cannam@86 1703 class="cmtt-8">&#x00A0;</span><span
cannam@86 1704 class="cmtt-8">&#x00A0;</span><span
cannam@86 1705 class="cmtt-8">&#x00A0;</span><span
cannam@86 1706 class="cmtt-8">&#x00A0;7</span><span
cannam@86 1707 class="cmtt-8">&#x00A0;6</span><span
cannam@86 1708 class="cmtt-8">&#x00A0;5</span><span
cannam@86 1709 class="cmtt-8">&#x00A0;4</span><span
cannam@86 1710 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1711 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1712 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1713 class="cmtt-8">&#x00A0;0</span>
cannam@86 1714 <br class="fancyvrb" /><a
cannam@86 1715 id="x1-44010r5"></a><span
cannam@86 1716 class="cmr-6">5</span><span
cannam@86 1717 class="cmtt-8">&#x00A0;</span><span
cannam@86 1718 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1719 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1720 class="cmtt-8">&#x00A0;[1</span><span
cannam@86 1721 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1722 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1723 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1724 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1725 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1726 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1727 class="cmtt-8">&#x00A0;0]</span><span
cannam@86 1728 class="cmtt-8">&#x00A0;</span><span
cannam@86 1729 class="cmtt-8">&#x00A0;&#x003C;-</span>
cannam@86 1730 <br class="fancyvrb" /><a
cannam@86 1731 id="x1-44012r6"></a><span
cannam@86 1732 class="cmr-6">6</span><span
cannam@86 1733 class="cmtt-8">&#x00A0;</span><span
cannam@86 1734 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1735 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1736 class="cmtt-8">&#x00A0;[0</span><span
cannam@86 1737 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1738 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1739 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1740 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1741 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1742 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1743 class="cmtt-8">&#x00A0;0]</span>
cannam@86 1744 <br class="fancyvrb" /><a
cannam@86 1745 id="x1-44014r7"></a><span
cannam@86 1746 class="cmr-6">7</span><span
cannam@86 1747 class="cmtt-8">&#x00A0;</span><span
cannam@86 1748 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1749 class="cmtt-8">&#x00A0;2</span><span
cannam@86 1750 class="cmtt-8">&#x00A0;[1</span><span
cannam@86 1751 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1752 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1753 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1754 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1755 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1756 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1757 class="cmtt-8">&#x00A0;0]</span>
cannam@86 1758 <br class="fancyvrb" /><a
cannam@86 1759 id="x1-44016r8"></a><span
cannam@86 1760 class="cmr-6">8</span><span
cannam@86 1761 class="cmtt-8">&#x00A0;</span><span
cannam@86 1762 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1763 class="cmtt-8">&#x00A0;3</span><span
cannam@86 1764 class="cmtt-8">&#x00A0;[0</span><span
cannam@86 1765 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1766 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1767 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1768 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1769 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1770 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1771 class="cmtt-8">&#x00A0;0]</span><span
cannam@86 1772 class="cmtt-8">&#x00A0;</span><span
cannam@86 1773 class="cmtt-8">&#x00A0;bytestream</span><span
cannam@86 1774 class="cmtt-8">&#x00A0;length</span><span
cannam@86 1775 class="cmtt-8">&#x00A0;==</span><span
cannam@86 1776 class="cmtt-8">&#x00A0;4</span><span
cannam@86 1777 class="cmtt-8">&#x00A0;bytes</span>
cannam@86 1778 <br class="fancyvrb" /><a
cannam@86 1779 id="x1-44018r9"></a><span
cannam@86 1780 class="cmr-6">9</span><span
cannam@86 1781 class="cmtt-8">&#x00A0;</span><span
cannam@86 1782 class="cmtt-8">&#x00A0;</span>
cannam@86 1783 </div>
cannam@86 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
cannam@86 1785 are worth noting here:
cannam@86 1786 <ul class="itemize1">
cannam@86 1787 <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
cannam@86 1788 some other combination of bit-widths from the bitstream is well defined. There are
cannam@86 1789 no artificial alignment boundaries maintained in the bitstream.
cannam@86 1790 </li>
cannam@86 1791 <li class="itemize">The second value is the two-bit-wide integer &#8217;b11&#8217;. This value may be interpreted
cannam@86 1792 either as the unsigned value &#8217;3&#8217;, or the signed value &#8217;-1&#8217;. Signedness is dependent on
cannam@86 1793 decode context.</li></ul>
cannam@86 1794 <!--l. 208--><p class="noindent" >
cannam@86 1795 <h5 class="subsubsectionHead"><span class="titlemark">2.1.8. </span> <a
cannam@86 1796 id="x1-450002.1.8"></a>end-of-packet alignment</h5>
cannam@86 1797 <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
cannam@86 1798 embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
cannam@86 1799 Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
cannam@86 1800 the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
cannam@86 1801 in the last byte of a packet.
cannam@86 1802 <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
cannam@86 1803 should this unused space be read, it will return binary zeroes.
cannam@86 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.
cannam@86 1805 End-of-packet is not to be considered an error; it is merely a state indicating that there is
cannam@86 1806 insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
cannam@86 1807 normal mode of operation, and as such, decoders must handle reading past the end of a packet as
cannam@86 1808 a typical mode of operation. Any further read operations after an &#8217;end-of-packet&#8217; condition shall
cannam@86 1809 also return &#8217;end-of-packet&#8217;.
cannam@86 1810
cannam@86 1811
cannam@86 1812
cannam@86 1813 <!--l. 233--><p class="noindent" >
cannam@86 1814 <h5 class="subsubsectionHead"><span class="titlemark">2.1.9. </span> <a
cannam@86 1815 id="x1-460002.1.9"></a>reading zero bits</h5>
cannam@86 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.
cannam@86 1817 Reading to the end of the packet (but not past, such that an &#8217;end-of-packet&#8217; condition has not
cannam@86 1818 triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
cannam@86 1819 end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets &#8217;end-of-packet&#8217;
cannam@86 1820 shall also fail with &#8217;end-of-packet&#8217;.
cannam@86 1821
cannam@86 1822
cannam@86 1823
cannam@86 1824
cannam@86 1825
cannam@86 1826
cannam@86 1827 <h3 class="sectionHead"><span class="titlemark">3. </span> <a
cannam@86 1828 id="x1-470003"></a>Probability Model and Codebooks</h3>
cannam@86 1829 <!--l. 6--><p class="noindent" >
cannam@86 1830 <h4 class="subsectionHead"><span class="titlemark">3.1. </span> <a
cannam@86 1831 id="x1-480003.1"></a>Overview</h4>
cannam@86 1832 <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
cannam@86 1833 probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
cannam@86 1834 bitstream itself in the third header, the codec setup header. This packed configuration consists of
cannam@86 1835 multiple &#8217;codebooks&#8217;, each containing a specific Huffman-equivalent representation for decoding
cannam@86 1836 compressed codewords as well as an optional lookup table of output vector values to which a
cannam@86 1837 decoded Huffman value is applied as an offset, generating the final decoded output corresponding
cannam@86 1838 to a given compressed codeword.
cannam@86 1839 <!--l. 18--><p class="noindent" >
cannam@86 1840 <h5 class="subsubsectionHead"><span class="titlemark">3.1.1. </span> <a
cannam@86 1841 id="x1-490003.1.1"></a>Bitwise operation</h5>
cannam@86 1842 <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
cannam@86 1843 and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
cannam@86 1844 read from the stream according to <a
cannam@86 1845 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a
cannam@86 1846 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221;.
cannam@86 1847 <!--l. 27--><p class="noindent" >
cannam@86 1848 <h4 class="subsectionHead"><span class="titlemark">3.2. </span> <a
cannam@86 1849 id="x1-500003.2"></a>Packed codebook format</h4>
cannam@86 1850 <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system&#8217;s native byte width is
cannam@86 1851 eight bits. This is not universally true; see <a
cannam@86 1852 href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a
cannam@86 1853 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; for discussion
cannam@86 1854 relating to non-eight-bit bytes.
cannam@86 1855
cannam@86 1856
cannam@86 1857
cannam@86 1858 <!--l. 34--><p class="noindent" >
cannam@86 1859 <h5 class="subsubsectionHead"><span class="titlemark">3.2.1. </span> <a
cannam@86 1860 id="x1-510003.2.1"></a>codebook decode</h5>
cannam@86 1861 <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
cannam@86 1862 <!--l. 38--><p class="noindent" >
cannam@86 1863 <div class="fancyvrb" id="fancyvrb7">
cannam@86 1864 <a
cannam@86 1865 id="x1-51002r1"></a><span
cannam@86 1866 class="cmr-6">1</span><span
cannam@86 1867 class="cmtt-8">&#x00A0;</span><span
cannam@86 1868 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1869 class="cmtt-8">&#x00A0;0:</span><span
cannam@86 1870 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1871 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1872 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1873 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1874 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1875 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1876 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1877 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1878 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1879 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1880 class="cmtt-8">&#x00A0;(0x42)</span>
cannam@86 1881 <br class="fancyvrb" /><a
cannam@86 1882 id="x1-51004r2"></a><span
cannam@86 1883 class="cmr-6">2</span><span
cannam@86 1884 class="cmtt-8">&#x00A0;</span><span
cannam@86 1885 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1886 class="cmtt-8">&#x00A0;1:</span><span
cannam@86 1887 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1888 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1889 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1890 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1891 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1892 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1893 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1894 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1895 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1896 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1897 class="cmtt-8">&#x00A0;(0x43)</span>
cannam@86 1898 <br class="fancyvrb" /><a
cannam@86 1899 id="x1-51006r3"></a><span
cannam@86 1900 class="cmr-6">3</span><span
cannam@86 1901 class="cmtt-8">&#x00A0;</span><span
cannam@86 1902 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1903 class="cmtt-8">&#x00A0;2:</span><span
cannam@86 1904 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1905 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1906 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1907 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1908 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1909 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1910 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1911 class="cmtt-8">&#x00A0;1</span><span
cannam@86 1912 class="cmtt-8">&#x00A0;0</span><span
cannam@86 1913 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1914 class="cmtt-8">&#x00A0;(0x56)</span>
cannam@86 1915 </div>
cannam@86 1916 <!--l. 44--><p class="noindent" >16 bit <span
cannam@86 1917 class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span
cannam@86 1918 class="cmtt-12">[codebook_entries] </span>fields:
cannam@86 1919 <!--l. 46--><p class="noindent" >
cannam@86 1920 <div class="fancyvrb" id="fancyvrb8">
cannam@86 1921 <a
cannam@86 1922 id="x1-51008r1"></a><span
cannam@86 1923 class="cmr-6">1</span><span
cannam@86 1924 class="cmtt-8">&#x00A0;</span><span
cannam@86 1925 class="cmtt-8">&#x00A0;</span>
cannam@86 1926 <br class="fancyvrb" /><a
cannam@86 1927 id="x1-51010r2"></a><span
cannam@86 1928 class="cmr-6">2</span><span
cannam@86 1929 class="cmtt-8">&#x00A0;</span><span
cannam@86 1930 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1931 class="cmtt-8">&#x00A0;3:</span><span
cannam@86 1932 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1933 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1934 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1935 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1936 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1937 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1938 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1939 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1940 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1941 class="cmtt-8">&#x00A0;]</span>
cannam@86 1942 <br class="fancyvrb" /><a
cannam@86 1943 id="x1-51012r3"></a><span
cannam@86 1944 class="cmr-6">3</span><span
cannam@86 1945 class="cmtt-8">&#x00A0;</span><span
cannam@86 1946 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1947 class="cmtt-8">&#x00A0;4:</span><span
cannam@86 1948 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1949 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1950 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1951 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1952 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1953 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1954 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1955 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1956 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1957 class="cmtt-8">&#x00A0;]</span><span
cannam@86 1958 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
cannam@86 1959 class="cmtt-8">&#x00A0;(16</span><span
cannam@86 1960 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 1961 class="cmtt-8">&#x00A0;unsigned)</span>
cannam@86 1962 <br class="fancyvrb" /><a
cannam@86 1963 id="x1-51014r4"></a><span
cannam@86 1964 class="cmr-6">4</span><span
cannam@86 1965 class="cmtt-8">&#x00A0;</span><span
cannam@86 1966 class="cmtt-8">&#x00A0;</span>
cannam@86 1967 <br class="fancyvrb" /><a
cannam@86 1968 id="x1-51016r5"></a><span
cannam@86 1969 class="cmr-6">5</span><span
cannam@86 1970 class="cmtt-8">&#x00A0;</span><span
cannam@86 1971 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1972 class="cmtt-8">&#x00A0;5:</span><span
cannam@86 1973 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1974 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1975 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1976 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1977 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1978 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1979 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1980 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1981 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1982 class="cmtt-8">&#x00A0;]</span>
cannam@86 1983 <br class="fancyvrb" /><a
cannam@86 1984 id="x1-51018r6"></a><span
cannam@86 1985 class="cmr-6">6</span><span
cannam@86 1986 class="cmtt-8">&#x00A0;</span><span
cannam@86 1987 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 1988 class="cmtt-8">&#x00A0;6:</span><span
cannam@86 1989 class="cmtt-8">&#x00A0;[</span><span
cannam@86 1990 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1991 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1992 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1993 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1994 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1995 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1996 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1997 class="cmtt-8">&#x00A0;X</span><span
cannam@86 1998 class="cmtt-8">&#x00A0;]</span>
cannam@86 1999 <br class="fancyvrb" /><a
cannam@86 2000 id="x1-51020r7"></a><span
cannam@86 2001 class="cmr-6">7</span><span
cannam@86 2002 class="cmtt-8">&#x00A0;</span><span
cannam@86 2003 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 2004 class="cmtt-8">&#x00A0;7:</span><span
cannam@86 2005 class="cmtt-8">&#x00A0;[</span><span
cannam@86 2006 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2007 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2008 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2009 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2010 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2011 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2012 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2013 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2014 class="cmtt-8">&#x00A0;]</span><span
cannam@86 2015 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
cannam@86 2016 class="cmtt-8">&#x00A0;(24</span><span
cannam@86 2017 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 2018 class="cmtt-8">&#x00A0;unsigned)</span>
cannam@86 2019 <br class="fancyvrb" /><a
cannam@86 2020 id="x1-51022r8"></a><span
cannam@86 2021 class="cmr-6">8</span><span
cannam@86 2022 class="cmtt-8">&#x00A0;</span><span
cannam@86 2023 class="cmtt-8">&#x00A0;</span>
cannam@86 2024 </div>
cannam@86 2025 <!--l. 57--><p class="noindent" >Next is the <span
cannam@86 2026 class="cmtt-12">[ordered] </span>bit flag:
cannam@86 2027 <!--l. 59--><p class="noindent" >
cannam@86 2028 <div class="fancyvrb" id="fancyvrb9">
cannam@86 2029 <a
cannam@86 2030 id="x1-51024r1"></a><span
cannam@86 2031 class="cmr-6">1</span><span
cannam@86 2032 class="cmtt-8">&#x00A0;</span><span
cannam@86 2033 class="cmtt-8">&#x00A0;</span>
cannam@86 2034 <br class="fancyvrb" /><a
cannam@86 2035 id="x1-51026r2"></a><span
cannam@86 2036 class="cmr-6">2</span><span
cannam@86 2037 class="cmtt-8">&#x00A0;</span><span
cannam@86 2038 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 2039 class="cmtt-8">&#x00A0;8:</span><span
cannam@86 2040 class="cmtt-8">&#x00A0;[</span><span
cannam@86 2041 class="cmtt-8">&#x00A0;</span><span
cannam@86 2042 class="cmtt-8">&#x00A0;</span><span
cannam@86 2043 class="cmtt-8">&#x00A0;</span><span
cannam@86 2044 class="cmtt-8">&#x00A0;</span><span
cannam@86 2045 class="cmtt-8">&#x00A0;</span><span
cannam@86 2046 class="cmtt-8">&#x00A0;</span><span
cannam@86 2047 class="cmtt-8">&#x00A0;</span><span
cannam@86 2048 class="cmtt-8">&#x00A0;</span><span
cannam@86 2049 class="cmtt-8">&#x00A0;</span><span
cannam@86 2050 class="cmtt-8">&#x00A0;</span><span
cannam@86 2051 class="cmtt-8">&#x00A0;</span><span
cannam@86 2052 class="cmtt-8">&#x00A0;</span><span
cannam@86 2053 class="cmtt-8">&#x00A0;</span><span
cannam@86 2054 class="cmtt-8">&#x00A0;</span><span
cannam@86 2055 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2056 class="cmtt-8">&#x00A0;]</span><span
cannam@86 2057 class="cmtt-8">&#x00A0;[ordered]</span><span
cannam@86 2058 class="cmtt-8">&#x00A0;(1</span><span
cannam@86 2059 class="cmtt-8">&#x00A0;bit)</span>
cannam@86 2060 <br class="fancyvrb" /><a
cannam@86 2061 id="x1-51028r3"></a><span
cannam@86 2062 class="cmr-6">3</span><span
cannam@86 2063 class="cmtt-8">&#x00A0;</span><span
cannam@86 2064 class="cmtt-8">&#x00A0;</span>
cannam@86 2065 </div>
cannam@86 2066 <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span
cannam@86 2067 class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
cannam@86 2068 We now read the list of codeword lengths and store these lengths in the array
cannam@86 2069 <span
cannam@86 2070 class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span
cannam@86 2071 class="cmtt-12">[ordered] </span>flag
cannam@86 2072 is set or unset.
cannam@86 2073 <ul class="itemize1">
cannam@86 2074 <li class="itemize">If the <span
cannam@86 2075 class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
cannam@86 2076 needs to read each codeword length one-by-one.
cannam@86 2077 <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span
cannam@86 2078 class="cmtt-12">[sparse] </span>flag. This flag determines
cannam@86 2079 whether or not the codebook contains unused entries that are not to be included in
cannam@86 2080
cannam@86 2081
cannam@86 2082
cannam@86 2083 the codeword decode tree:
cannam@86 2084 <!--l. 82--><p class="noindent" >
cannam@86 2085 <div class="fancyvrb" id="fancyvrb10">
cannam@86 2086 <a
cannam@86 2087 id="x1-51030r1"></a><span
cannam@86 2088 class="cmr-6">1</span><span
cannam@86 2089 class="cmtt-8">&#x00A0;</span><span
cannam@86 2090 class="cmtt-8">&#x00A0;byte</span><span
cannam@86 2091 class="cmtt-8">&#x00A0;8:</span><span
cannam@86 2092 class="cmtt-8">&#x00A0;[</span><span
cannam@86 2093 class="cmtt-8">&#x00A0;</span><span
cannam@86 2094 class="cmtt-8">&#x00A0;</span><span
cannam@86 2095 class="cmtt-8">&#x00A0;</span><span
cannam@86 2096 class="cmtt-8">&#x00A0;</span><span
cannam@86 2097 class="cmtt-8">&#x00A0;</span><span
cannam@86 2098 class="cmtt-8">&#x00A0;</span><span
cannam@86 2099 class="cmtt-8">&#x00A0;</span><span
cannam@86 2100 class="cmtt-8">&#x00A0;</span><span
cannam@86 2101 class="cmtt-8">&#x00A0;</span><span
cannam@86 2102 class="cmtt-8">&#x00A0;</span><span
cannam@86 2103 class="cmtt-8">&#x00A0;</span><span
cannam@86 2104 class="cmtt-8">&#x00A0;</span><span
cannam@86 2105 class="cmtt-8">&#x00A0;X</span><span
cannam@86 2106 class="cmtt-8">&#x00A0;1</span><span
cannam@86 2107 class="cmtt-8">&#x00A0;]</span><span
cannam@86 2108 class="cmtt-8">&#x00A0;[sparse]</span><span
cannam@86 2109 class="cmtt-8">&#x00A0;flag</span><span
cannam@86 2110 class="cmtt-8">&#x00A0;(1</span><span
cannam@86 2111 class="cmtt-8">&#x00A0;bit)</span>
cannam@86 2112 </div>
cannam@86 2113 <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span
cannam@86 2114 class="cmtt-12">[codebook_entries] </span>codebook entries:
cannam@86 2115 <!--l. 89--><p class="noindent" >
cannam@86 2116 <div class="fancyvrb" id="fancyvrb11">
cannam@86 2117 <a
cannam@86 2118 id="x1-51032r1"></a><span
cannam@86 2119 class="cmr-6">1</span><span
cannam@86 2120 class="cmtt-8">&#x00A0;</span><span
cannam@86 2121 class="cmtt-8">&#x00A0;</span>
cannam@86 2122 <br class="fancyvrb" /><a
cannam@86 2123 id="x1-51034r2"></a><span
cannam@86 2124 class="cmr-6">2</span><span
cannam@86 2125 class="cmtt-8">&#x00A0;</span><span
cannam@86 2126 class="cmtt-8">&#x00A0;</span><span
cannam@86 2127 class="cmtt-8">&#x00A0;</span><span
cannam@86 2128 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 2129 class="cmtt-8">&#x00A0;if([sparse]</span><span
cannam@86 2130 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2131 class="cmtt-8">&#x00A0;set)</span><span
cannam@86 2132 class="cmtt-8">&#x00A0;</span><span
cannam@86 2133 class="cmsy-8">{</span>
cannam@86 2134 <br class="fancyvrb" /><a
cannam@86 2135 id="x1-51036r3"></a><span
cannam@86 2136 class="cmr-6">3</span><span
cannam@86 2137 class="cmtt-8">&#x00A0;</span><span
cannam@86 2138 class="cmtt-8">&#x00A0;</span>
cannam@86 2139 <br class="fancyvrb" /><a
cannam@86 2140 id="x1-51038r4"></a><span
cannam@86 2141 class="cmr-6">4</span><span
cannam@86 2142 class="cmtt-8">&#x00A0;</span><span
cannam@86 2143 class="cmtt-8">&#x00A0;</span><span
cannam@86 2144 class="cmtt-8">&#x00A0;</span><span
cannam@86 2145 class="cmtt-8">&#x00A0;</span><span
cannam@86 2146 class="cmtt-8">&#x00A0;</span><span
cannam@86 2147 class="cmtt-8">&#x00A0;</span><span
cannam@86 2148 class="cmtt-8">&#x00A0;</span><span
cannam@86 2149 class="cmtt-8">&#x00A0;</span><span
cannam@86 2150 class="cmtt-8">&#x00A0;</span><span
cannam@86 2151 class="cmtt-8">&#x00A0;</span><span
cannam@86 2152 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 2153 class="cmtt-8">&#x00A0;[flag]</span><span
cannam@86 2154 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2155 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2156 class="cmtt-8">&#x00A0;one</span><span
cannam@86 2157 class="cmtt-8">&#x00A0;bit;</span>
cannam@86 2158 <br class="fancyvrb" /><a
cannam@86 2159 id="x1-51040r5"></a><span
cannam@86 2160 class="cmr-6">5</span><span
cannam@86 2161 class="cmtt-8">&#x00A0;</span><span
cannam@86 2162 class="cmtt-8">&#x00A0;</span><span
cannam@86 2163 class="cmtt-8">&#x00A0;</span><span
cannam@86 2164 class="cmtt-8">&#x00A0;</span><span
cannam@86 2165 class="cmtt-8">&#x00A0;</span><span
cannam@86 2166 class="cmtt-8">&#x00A0;</span><span
cannam@86 2167 class="cmtt-8">&#x00A0;</span><span
cannam@86 2168 class="cmtt-8">&#x00A0;</span><span
cannam@86 2169 class="cmtt-8">&#x00A0;</span><span
cannam@86 2170 class="cmtt-8">&#x00A0;</span><span
cannam@86 2171 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 2172 class="cmtt-8">&#x00A0;if([flag]</span><span
cannam@86 2173 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2174 class="cmtt-8">&#x00A0;set)</span><span
cannam@86 2175 class="cmtt-8">&#x00A0;</span><span
cannam@86 2176 class="cmsy-8">{</span>
cannam@86 2177 <br class="fancyvrb" /><a
cannam@86 2178 id="x1-51042r6"></a><span
cannam@86 2179 class="cmr-6">6</span><span
cannam@86 2180 class="cmtt-8">&#x00A0;</span><span
cannam@86 2181 class="cmtt-8">&#x00A0;</span>
cannam@86 2182 <br class="fancyvrb" /><a
cannam@86 2183 id="x1-51044r7"></a><span
cannam@86 2184 class="cmr-6">7</span><span
cannam@86 2185 class="cmtt-8">&#x00A0;</span><span
cannam@86 2186 class="cmtt-8">&#x00A0;</span><span
cannam@86 2187 class="cmtt-8">&#x00A0;</span><span
cannam@86 2188 class="cmtt-8">&#x00A0;</span><span
cannam@86 2189 class="cmtt-8">&#x00A0;</span><span
cannam@86 2190 class="cmtt-8">&#x00A0;</span><span
cannam@86 2191 class="cmtt-8">&#x00A0;</span><span
cannam@86 2192 class="cmtt-8">&#x00A0;</span><span
cannam@86 2193 class="cmtt-8">&#x00A0;</span><span
cannam@86 2194 class="cmtt-8">&#x00A0;</span><span
cannam@86 2195 class="cmtt-8">&#x00A0;</span><span
cannam@86 2196 class="cmtt-8">&#x00A0;</span><span
cannam@86 2197 class="cmtt-8">&#x00A0;</span><span
cannam@86 2198 class="cmtt-8">&#x00A0;</span><span
cannam@86 2199 class="cmtt-8">&#x00A0;</span><span
cannam@86 2200 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 2201 class="cmtt-8">&#x00A0;[length]</span><span
cannam@86 2202 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2203 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2204 class="cmtt-8">&#x00A0;a</span><span
cannam@86 2205 class="cmtt-8">&#x00A0;five</span><span
cannam@86 2206 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 2207 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2208 class="cmtt-8">&#x00A0;integer;</span>
cannam@86 2209 <br class="fancyvrb" /><a
cannam@86 2210 id="x1-51046r8"></a><span
cannam@86 2211 class="cmr-6">8</span><span
cannam@86 2212 class="cmtt-8">&#x00A0;</span><span
cannam@86 2213 class="cmtt-8">&#x00A0;</span><span
cannam@86 2214 class="cmtt-8">&#x00A0;</span><span
cannam@86 2215 class="cmtt-8">&#x00A0;</span><span
cannam@86 2216 class="cmtt-8">&#x00A0;</span><span
cannam@86 2217 class="cmtt-8">&#x00A0;</span><span
cannam@86 2218 class="cmtt-8">&#x00A0;</span><span
cannam@86 2219 class="cmtt-8">&#x00A0;</span><span
cannam@86 2220 class="cmtt-8">&#x00A0;</span><span
cannam@86 2221 class="cmtt-8">&#x00A0;</span><span
cannam@86 2222 class="cmtt-8">&#x00A0;</span><span
cannam@86 2223 class="cmtt-8">&#x00A0;</span><span
cannam@86 2224 class="cmtt-8">&#x00A0;</span><span
cannam@86 2225 class="cmtt-8">&#x00A0;</span><span
cannam@86 2226 class="cmtt-8">&#x00A0;</span><span
cannam@86 2227 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 2228 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2229 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2230 class="cmtt-8">&#x00A0;for</span><span
cannam@86 2231 class="cmtt-8">&#x00A0;this</span><span
cannam@86 2232 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2233 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2234 class="cmtt-8">&#x00A0;[length]+1;</span>
cannam@86 2235 <br class="fancyvrb" /><a
cannam@86 2236 id="x1-51048r9"></a><span
cannam@86 2237 class="cmr-6">9</span><span
cannam@86 2238 class="cmtt-8">&#x00A0;</span><span
cannam@86 2239 class="cmtt-8">&#x00A0;</span>
cannam@86 2240 <br class="fancyvrb" /><a
cannam@86 2241 id="x1-51050r10"></a><span
cannam@86 2242 class="cmr-6">10</span><span
cannam@86 2243 class="cmtt-8">&#x00A0;</span><span
cannam@86 2244 class="cmtt-8">&#x00A0;</span><span
cannam@86 2245 class="cmtt-8">&#x00A0;</span><span
cannam@86 2246 class="cmtt-8">&#x00A0;</span><span
cannam@86 2247 class="cmtt-8">&#x00A0;</span><span
cannam@86 2248 class="cmtt-8">&#x00A0;</span><span
cannam@86 2249 class="cmtt-8">&#x00A0;</span><span
cannam@86 2250 class="cmtt-8">&#x00A0;</span><span
cannam@86 2251 class="cmtt-8">&#x00A0;</span><span
cannam@86 2252 class="cmtt-8">&#x00A0;</span><span
cannam@86 2253 class="cmtt-8">&#x00A0;</span><span
cannam@86 2254 class="cmtt-8">&#x00A0;</span><span
cannam@86 2255 class="cmtt-8">&#x00A0;</span><span
cannam@86 2256 class="cmtt-8">&#x00A0;</span><span
cannam@86 2257 class="cmsy-8">}</span><span
cannam@86 2258 class="cmtt-8">&#x00A0;else</span><span
cannam@86 2259 class="cmtt-8">&#x00A0;</span><span
cannam@86 2260 class="cmsy-8">{</span>
cannam@86 2261 <br class="fancyvrb" /><a
cannam@86 2262 id="x1-51052r11"></a><span
cannam@86 2263 class="cmr-6">11</span><span
cannam@86 2264 class="cmtt-8">&#x00A0;</span><span
cannam@86 2265 class="cmtt-8">&#x00A0;</span>
cannam@86 2266 <br class="fancyvrb" /><a
cannam@86 2267 id="x1-51054r12"></a><span
cannam@86 2268 class="cmr-6">12</span><span
cannam@86 2269 class="cmtt-8">&#x00A0;</span><span
cannam@86 2270 class="cmtt-8">&#x00A0;</span><span
cannam@86 2271 class="cmtt-8">&#x00A0;</span><span
cannam@86 2272 class="cmtt-8">&#x00A0;</span><span
cannam@86 2273 class="cmtt-8">&#x00A0;</span><span
cannam@86 2274 class="cmtt-8">&#x00A0;</span><span
cannam@86 2275 class="cmtt-8">&#x00A0;</span><span
cannam@86 2276 class="cmtt-8">&#x00A0;</span><span
cannam@86 2277 class="cmtt-8">&#x00A0;</span><span
cannam@86 2278 class="cmtt-8">&#x00A0;</span><span
cannam@86 2279 class="cmtt-8">&#x00A0;</span><span
cannam@86 2280 class="cmtt-8">&#x00A0;</span><span
cannam@86 2281 class="cmtt-8">&#x00A0;</span><span
cannam@86 2282 class="cmtt-8">&#x00A0;</span><span
cannam@86 2283 class="cmtt-8">&#x00A0;</span><span
cannam@86 2284 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 2285 class="cmtt-8">&#x00A0;this</span><span
cannam@86 2286 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2287 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2288 class="cmtt-8">&#x00A0;unused.</span><span
cannam@86 2289 class="cmtt-8">&#x00A0;</span><span
cannam@86 2290 class="cmtt-8">&#x00A0;mark</span><span
cannam@86 2291 class="cmtt-8">&#x00A0;it</span><span
cannam@86 2292 class="cmtt-8">&#x00A0;as</span><span
cannam@86 2293 class="cmtt-8">&#x00A0;such.</span>
cannam@86 2294 <br class="fancyvrb" /><a
cannam@86 2295 id="x1-51056r13"></a><span
cannam@86 2296 class="cmr-6">13</span><span
cannam@86 2297 class="cmtt-8">&#x00A0;</span><span
cannam@86 2298 class="cmtt-8">&#x00A0;</span>
cannam@86 2299 <br class="fancyvrb" /><a
cannam@86 2300 id="x1-51058r14"></a><span
cannam@86 2301 class="cmr-6">14</span><span
cannam@86 2302 class="cmtt-8">&#x00A0;</span><span
cannam@86 2303 class="cmtt-8">&#x00A0;</span><span
cannam@86 2304 class="cmtt-8">&#x00A0;</span><span
cannam@86 2305 class="cmtt-8">&#x00A0;</span><span
cannam@86 2306 class="cmtt-8">&#x00A0;</span><span
cannam@86 2307 class="cmtt-8">&#x00A0;</span><span
cannam@86 2308 class="cmtt-8">&#x00A0;</span><span
cannam@86 2309 class="cmtt-8">&#x00A0;</span><span
cannam@86 2310 class="cmtt-8">&#x00A0;</span><span
cannam@86 2311 class="cmtt-8">&#x00A0;</span><span
cannam@86 2312 class="cmtt-8">&#x00A0;</span><span
cannam@86 2313 class="cmtt-8">&#x00A0;</span><span
cannam@86 2314 class="cmtt-8">&#x00A0;</span><span
cannam@86 2315 class="cmtt-8">&#x00A0;</span><span
cannam@86 2316 class="cmsy-8">}</span>
cannam@86 2317 <br class="fancyvrb" /><a
cannam@86 2318 id="x1-51060r15"></a><span
cannam@86 2319 class="cmr-6">15</span><span
cannam@86 2320 class="cmtt-8">&#x00A0;</span><span
cannam@86 2321 class="cmtt-8">&#x00A0;</span>
cannam@86 2322 <br class="fancyvrb" /><a
cannam@86 2323 id="x1-51062r16"></a><span
cannam@86 2324 class="cmr-6">16</span><span
cannam@86 2325 class="cmtt-8">&#x00A0;</span><span
cannam@86 2326 class="cmtt-8">&#x00A0;</span><span
cannam@86 2327 class="cmtt-8">&#x00A0;</span><span
cannam@86 2328 class="cmtt-8">&#x00A0;</span><span
cannam@86 2329 class="cmtt-8">&#x00A0;</span><span
cannam@86 2330 class="cmtt-8">&#x00A0;</span><span
cannam@86 2331 class="cmtt-8">&#x00A0;</span><span
cannam@86 2332 class="cmsy-8">}</span><span
cannam@86 2333 class="cmtt-8">&#x00A0;else</span><span
cannam@86 2334 class="cmtt-8">&#x00A0;the</span><span
cannam@86 2335 class="cmtt-8">&#x00A0;sparse</span><span
cannam@86 2336 class="cmtt-8">&#x00A0;flag</span><span
cannam@86 2337 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2338 class="cmtt-8">&#x00A0;not</span><span
cannam@86 2339 class="cmtt-8">&#x00A0;set</span><span
cannam@86 2340 class="cmtt-8">&#x00A0;</span><span
cannam@86 2341 class="cmsy-8">{</span>
cannam@86 2342 <br class="fancyvrb" /><a
cannam@86 2343 id="x1-51064r17"></a><span
cannam@86 2344 class="cmr-6">17</span><span
cannam@86 2345 class="cmtt-8">&#x00A0;</span><span
cannam@86 2346 class="cmtt-8">&#x00A0;</span>
cannam@86 2347 <br class="fancyvrb" /><a
cannam@86 2348 id="x1-51066r18"></a><span
cannam@86 2349 class="cmr-6">18</span><span
cannam@86 2350 class="cmtt-8">&#x00A0;</span><span
cannam@86 2351 class="cmtt-8">&#x00A0;</span><span
cannam@86 2352 class="cmtt-8">&#x00A0;</span><span
cannam@86 2353 class="cmtt-8">&#x00A0;</span><span
cannam@86 2354 class="cmtt-8">&#x00A0;</span><span
cannam@86 2355 class="cmtt-8">&#x00A0;</span><span
cannam@86 2356 class="cmtt-8">&#x00A0;</span><span
cannam@86 2357 class="cmtt-8">&#x00A0;</span><span
cannam@86 2358 class="cmtt-8">&#x00A0;</span><span
cannam@86 2359 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 2360 class="cmtt-8">&#x00A0;[length]</span><span
cannam@86 2361 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2362 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2363 class="cmtt-8">&#x00A0;a</span><span
cannam@86 2364 class="cmtt-8">&#x00A0;five</span><span
cannam@86 2365 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 2366 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2367 class="cmtt-8">&#x00A0;integer;</span>
cannam@86 2368 <br class="fancyvrb" /><a
cannam@86 2369 id="x1-51068r19"></a><span
cannam@86 2370 class="cmr-6">19</span><span
cannam@86 2371 class="cmtt-8">&#x00A0;</span><span
cannam@86 2372 class="cmtt-8">&#x00A0;</span><span
cannam@86 2373 class="cmtt-8">&#x00A0;</span><span
cannam@86 2374 class="cmtt-8">&#x00A0;</span><span
cannam@86 2375 class="cmtt-8">&#x00A0;</span><span
cannam@86 2376 class="cmtt-8">&#x00A0;</span><span
cannam@86 2377 class="cmtt-8">&#x00A0;</span><span
cannam@86 2378 class="cmtt-8">&#x00A0;</span><span
cannam@86 2379 class="cmtt-8">&#x00A0;</span><span
cannam@86 2380 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 2381 class="cmtt-8">&#x00A0;the</span><span
cannam@86 2382 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2383 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2384 class="cmtt-8">&#x00A0;for</span><span
cannam@86 2385 class="cmtt-8">&#x00A0;this</span><span
cannam@86 2386 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2387 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2388 class="cmtt-8">&#x00A0;[length]+1;</span>
cannam@86 2389 <br class="fancyvrb" /><a
cannam@86 2390 id="x1-51070r20"></a><span
cannam@86 2391 class="cmr-6">20</span><span
cannam@86 2392 class="cmtt-8">&#x00A0;</span><span
cannam@86 2393 class="cmtt-8">&#x00A0;</span>
cannam@86 2394 <br class="fancyvrb" /><a
cannam@86 2395 id="x1-51072r21"></a><span
cannam@86 2396 class="cmr-6">21</span><span
cannam@86 2397 class="cmtt-8">&#x00A0;</span><span
cannam@86 2398 class="cmtt-8">&#x00A0;</span><span
cannam@86 2399 class="cmtt-8">&#x00A0;</span><span
cannam@86 2400 class="cmtt-8">&#x00A0;</span><span
cannam@86 2401 class="cmtt-8">&#x00A0;</span><span
cannam@86 2402 class="cmtt-8">&#x00A0;</span><span
cannam@86 2403 class="cmtt-8">&#x00A0;</span><span
cannam@86 2404 class="cmsy-8">}</span>
cannam@86 2405 <br class="fancyvrb" /><a
cannam@86 2406 id="x1-51074r22"></a><span
cannam@86 2407 class="cmr-6">22</span><span
cannam@86 2408 class="cmtt-8">&#x00A0;</span><span
cannam@86 2409 class="cmtt-8">&#x00A0;</span>
cannam@86 2410 </div>
cannam@86 2411 </li>
cannam@86 2412 <li class="itemize">If the <span
cannam@86 2413 class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
cannam@86 2414 ascending length order. Rather than reading a length for every codeword, the
cannam@86 2415 encoder reads the number of codewords per length. That is, beginning at entry
cannam@86 2416 zero:
cannam@86 2417 <!--l. 120--><p class="noindent" >
cannam@86 2418 <div class="fancyvrb" id="fancyvrb12">
cannam@86 2419 <a
cannam@86 2420 id="x1-51076r1"></a><span
cannam@86 2421 class="cmr-6">1</span><span
cannam@86 2422 class="cmtt-8">&#x00A0;</span><span
cannam@86 2423 class="cmtt-8">&#x00A0;</span><span
cannam@86 2424 class="cmtt-8">&#x00A0;</span><span
cannam@86 2425 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 2426 class="cmtt-8">&#x00A0;[current_entry]</span><span
cannam@86 2427 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2428 class="cmtt-8">&#x00A0;0;</span>
cannam@86 2429 <br class="fancyvrb" /><a
cannam@86 2430 id="x1-51078r2"></a><span
cannam@86 2431 class="cmr-6">2</span><span
cannam@86 2432 class="cmtt-8">&#x00A0;</span><span
cannam@86 2433 class="cmtt-8">&#x00A0;</span><span
cannam@86 2434 class="cmtt-8">&#x00A0;</span><span
cannam@86 2435 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 2436 class="cmtt-8">&#x00A0;[current_length]</span><span
cannam@86 2437 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2438 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2439 class="cmtt-8">&#x00A0;a</span><span
cannam@86 2440 class="cmtt-8">&#x00A0;five</span><span
cannam@86 2441 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 2442 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2443 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 2444 class="cmtt-8">&#x00A0;and</span><span
cannam@86 2445 class="cmtt-8">&#x00A0;add</span><span
cannam@86 2446 class="cmtt-8">&#x00A0;1;</span>
cannam@86 2447 <br class="fancyvrb" /><a
cannam@86 2448 id="x1-51080r3"></a><span
cannam@86 2449 class="cmr-6">3</span><span
cannam@86 2450 class="cmtt-8">&#x00A0;</span><span
cannam@86 2451 class="cmtt-8">&#x00A0;</span><span
cannam@86 2452 class="cmtt-8">&#x00A0;</span><span
cannam@86 2453 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 2454 class="cmtt-8">&#x00A0;[number]</span><span
cannam@86 2455 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2456 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2457 class="cmtt-8">&#x00A0;</span><a
cannam@86 2458 href="#x1-1170009.2.1"><span
cannam@86 2459 class="cmtt-8">ilog</span></a><span
cannam@86 2460 class="cmtt-8">([codebook_entries]</span><span
cannam@86 2461 class="cmtt-8">&#x00A0;-</span><span
cannam@86 2462 class="cmtt-8">&#x00A0;[current_entry])</span><span
cannam@86 2463 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 2464 class="cmtt-8">&#x00A0;as</span><span
cannam@86 2465 class="cmtt-8">&#x00A0;an</span><span
cannam@86 2466 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2467 class="cmtt-8">&#x00A0;integer</span>
cannam@86 2468 <br class="fancyvrb" /><a
cannam@86 2469 id="x1-51082r4"></a><span
cannam@86 2470 class="cmr-6">4</span><span
cannam@86 2471 class="cmtt-8">&#x00A0;</span><span
cannam@86 2472 class="cmtt-8">&#x00A0;</span><span
cannam@86 2473 class="cmtt-8">&#x00A0;</span><span
cannam@86 2474 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 2475 class="cmtt-8">&#x00A0;set</span><span
cannam@86 2476 class="cmtt-8">&#x00A0;the</span><span
cannam@86 2477 class="cmtt-8">&#x00A0;entries</span><span
cannam@86 2478 class="cmtt-8">&#x00A0;[current_entry]</span><span
cannam@86 2479 class="cmtt-8">&#x00A0;through</span><span
cannam@86 2480 class="cmtt-8">&#x00A0;[current_entry]+[number]-1,</span><span
cannam@86 2481 class="cmtt-8">&#x00A0;inclusive,</span>
cannam@86 2482 <br class="fancyvrb" /><a
cannam@86 2483 id="x1-51084r5"></a><span
cannam@86 2484 class="cmr-6">5</span><span
cannam@86 2485 class="cmtt-8">&#x00A0;</span><span
cannam@86 2486 class="cmtt-8">&#x00A0;</span><span
cannam@86 2487 class="cmtt-8">&#x00A0;</span><span
cannam@86 2488 class="cmtt-8">&#x00A0;</span><span
cannam@86 2489 class="cmtt-8">&#x00A0;</span><span
cannam@86 2490 class="cmtt-8">&#x00A0;of</span><span
cannam@86 2491 class="cmtt-8">&#x00A0;the</span><span
cannam@86 2492 class="cmtt-8">&#x00A0;[codebook_codeword_lengths]</span><span
cannam@86 2493 class="cmtt-8">&#x00A0;array</span><span
cannam@86 2494 class="cmtt-8">&#x00A0;to</span><span
cannam@86 2495 class="cmtt-8">&#x00A0;[current_length]</span>
cannam@86 2496 <br class="fancyvrb" /><a
cannam@86 2497 id="x1-51086r6"></a><span
cannam@86 2498 class="cmr-6">6</span><span
cannam@86 2499 class="cmtt-8">&#x00A0;</span><span
cannam@86 2500 class="cmtt-8">&#x00A0;</span><span
cannam@86 2501 class="cmtt-8">&#x00A0;</span><span
cannam@86 2502 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 2503 class="cmtt-8">&#x00A0;set</span><span
cannam@86 2504 class="cmtt-8">&#x00A0;[current_entry]</span><span
cannam@86 2505 class="cmtt-8">&#x00A0;to</span><span
cannam@86 2506 class="cmtt-8">&#x00A0;[number]</span><span
cannam@86 2507 class="cmtt-8">&#x00A0;+</span><span
cannam@86 2508 class="cmtt-8">&#x00A0;[current_entry]</span>
cannam@86 2509 <br class="fancyvrb" /><a
cannam@86 2510 id="x1-51088r7"></a><span
cannam@86 2511 class="cmr-6">7</span><span
cannam@86 2512 class="cmtt-8">&#x00A0;</span><span
cannam@86 2513 class="cmtt-8">&#x00A0;</span><span
cannam@86 2514 class="cmtt-8">&#x00A0;</span><span
cannam@86 2515 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 2516 class="cmtt-8">&#x00A0;increment</span><span
cannam@86 2517 class="cmtt-8">&#x00A0;[current_length]</span><span
cannam@86 2518 class="cmtt-8">&#x00A0;by</span><span
cannam@86 2519 class="cmtt-8">&#x00A0;1</span>
cannam@86 2520 <br class="fancyvrb" /><a
cannam@86 2521 id="x1-51090r8"></a><span
cannam@86 2522 class="cmr-6">8</span><span
cannam@86 2523 class="cmtt-8">&#x00A0;</span><span
cannam@86 2524 class="cmtt-8">&#x00A0;</span><span
cannam@86 2525 class="cmtt-8">&#x00A0;</span><span
cannam@86 2526 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 2527 class="cmtt-8">&#x00A0;if</span><span
cannam@86 2528 class="cmtt-8">&#x00A0;[current_entry]</span><span
cannam@86 2529 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2530 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 2531 class="cmtt-8">&#x00A0;than</span><span
cannam@86 2532 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
cannam@86 2533 class="cmtt-8">&#x00A0;ERROR</span><span
cannam@86 2534 class="cmtt-8">&#x00A0;CONDITION;</span>
cannam@86 2535 <br class="fancyvrb" /><a
cannam@86 2536 id="x1-51092r9"></a><span
cannam@86 2537 class="cmr-6">9</span><span
cannam@86 2538 class="cmtt-8">&#x00A0;</span><span
cannam@86 2539 class="cmtt-8">&#x00A0;</span><span
cannam@86 2540 class="cmtt-8">&#x00A0;</span><span
cannam@86 2541 class="cmtt-8">&#x00A0;</span><span
cannam@86 2542 class="cmtt-8">&#x00A0;</span><span
cannam@86 2543 class="cmtt-8">&#x00A0;the</span><span
cannam@86 2544 class="cmtt-8">&#x00A0;decoder</span><span
cannam@86 2545 class="cmtt-8">&#x00A0;will</span><span
cannam@86 2546 class="cmtt-8">&#x00A0;not</span><span
cannam@86 2547 class="cmtt-8">&#x00A0;be</span><span
cannam@86 2548 class="cmtt-8">&#x00A0;able</span><span
cannam@86 2549 class="cmtt-8">&#x00A0;to</span><span
cannam@86 2550 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2551 class="cmtt-8">&#x00A0;this</span><span
cannam@86 2552 class="cmtt-8">&#x00A0;stream.</span>
cannam@86 2553 <br class="fancyvrb" /><a
cannam@86 2554 id="x1-51094r10"></a><span
cannam@86 2555 class="cmr-6">10</span><span
cannam@86 2556 class="cmtt-8">&#x00A0;</span><span
cannam@86 2557 class="cmtt-8">&#x00A0;</span><span
cannam@86 2558 class="cmtt-8">&#x00A0;</span><span
cannam@86 2559 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 2560 class="cmtt-8">&#x00A0;if</span><span
cannam@86 2561 class="cmtt-8">&#x00A0;[current_entry]</span><span
cannam@86 2562 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2563 class="cmtt-8">&#x00A0;less</span><span
cannam@86 2564 class="cmtt-8">&#x00A0;than</span><span
cannam@86 2565 class="cmtt-8">&#x00A0;[codebook_entries],</span><span
cannam@86 2566 class="cmtt-8">&#x00A0;repeat</span><span
cannam@86 2567 class="cmtt-8">&#x00A0;process</span><span
cannam@86 2568 class="cmtt-8">&#x00A0;starting</span><span
cannam@86 2569 class="cmtt-8">&#x00A0;at</span><span
cannam@86 2570 class="cmtt-8">&#x00A0;3)</span>
cannam@86 2571 <br class="fancyvrb" /><a
cannam@86 2572 id="x1-51096r11"></a><span
cannam@86 2573 class="cmr-6">11</span><span
cannam@86 2574 class="cmtt-8">&#x00A0;</span><span
cannam@86 2575 class="cmtt-8">&#x00A0;</span><span
cannam@86 2576 class="cmtt-8">&#x00A0;</span><span
cannam@86 2577 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 2578 class="cmtt-8">&#x00A0;done.</span>
cannam@86 2579
cannam@86 2580
cannam@86 2581
cannam@86 2582 </div>
cannam@86 2583 </li></ul>
cannam@86 2584 <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
cannam@86 2585 I supports three lookup types:
cannam@86 2586 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 2587 1. </dt><dd
cannam@86 2588 class="enumerate-enumitem">No lookup
cannam@86 2589 </dd><dt class="enumerate-enumitem">
cannam@86 2590 2. </dt><dd
cannam@86 2591 class="enumerate-enumitem">Implicitly populated value mapping (lattice VQ)
cannam@86 2592 </dd><dt class="enumerate-enumitem">
cannam@86 2593 3. </dt><dd
cannam@86 2594 class="enumerate-enumitem">Explicitly populated value mapping (tessellated or &#8217;foam&#8217; VQ)</dd></dl>
cannam@86 2595 <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
cannam@86 2596 <div class="fancyvrb" id="fancyvrb13">
cannam@86 2597 <a
cannam@86 2598 id="x1-51101r1"></a><span
cannam@86 2599 class="cmr-6">1</span><span
cannam@86 2600 class="cmtt-8">&#x00A0;</span><span
cannam@86 2601 class="cmtt-8">&#x00A0;</span><span
cannam@86 2602 class="cmtt-8">&#x00A0;</span><span
cannam@86 2603 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 2604 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
cannam@86 2605 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2606 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2607 class="cmtt-8">&#x00A0;four</span><span
cannam@86 2608 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 2609 class="cmtt-8">&#x00A0;as</span><span
cannam@86 2610 class="cmtt-8">&#x00A0;an</span><span
cannam@86 2611 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2612 class="cmtt-8">&#x00A0;integer</span>
cannam@86 2613 </div>
cannam@86 2614 <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span
cannam@86 2615 class="cmtt-12">[codebook_lookup_type]</span>:
cannam@86 2616 <ul class="itemize1">
cannam@86 2617 <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
cannam@86 2618 </li>
cannam@86 2619 <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
cannam@86 2620 be read. Lookup type one reads a list of values that are permuted in a set pattern to
cannam@86 2621 build a list of vectors, each vector of order <span
cannam@86 2622 class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
cannam@86 2623 type two builds the same vector list, but reads each scalar for each vector explicitly,
cannam@86 2624 rather than building vectors from a smaller list of possible scalar values. Lookup
cannam@86 2625 decode proceeds as follows:
cannam@86 2626 <!--l. 168--><p class="noindent" >
cannam@86 2627 <div class="fancyvrb" id="fancyvrb14">
cannam@86 2628 <a
cannam@86 2629 id="x1-51103r1"></a><span
cannam@86 2630 class="cmr-6">1</span><span
cannam@86 2631 class="cmtt-8">&#x00A0;</span><span
cannam@86 2632 class="cmtt-8">&#x00A0;</span><span
cannam@86 2633 class="cmtt-8">&#x00A0;</span><span
cannam@86 2634 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 2635 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
cannam@86 2636 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2637 class="cmtt-8">&#x00A0;</span><a
cannam@86 2638 href="#x1-1180009.2.2"><span
cannam@86 2639 class="cmtt-8">float32_unpack</span></a><span
cannam@86 2640 class="cmtt-8">(</span><span
cannam@86 2641 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2642 class="cmtt-8">&#x00A0;32</span><span
cannam@86 2643 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 2644 class="cmtt-8">&#x00A0;as</span><span
cannam@86 2645 class="cmtt-8">&#x00A0;an</span><span
cannam@86 2646 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2647 class="cmtt-8">&#x00A0;integer)</span>
cannam@86 2648 <br class="fancyvrb" /><a
cannam@86 2649 id="x1-51105r2"></a><span
cannam@86 2650 class="cmr-6">2</span><span
cannam@86 2651 class="cmtt-8">&#x00A0;</span><span
cannam@86 2652 class="cmtt-8">&#x00A0;</span><span
cannam@86 2653 class="cmtt-8">&#x00A0;</span><span
cannam@86 2654 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 2655 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
cannam@86 2656 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2657 class="cmtt-8">&#x00A0;</span><a
cannam@86 2658 href="#x1-1180009.2.2"><span
cannam@86 2659 class="cmtt-8">float32_unpack</span></a><span
cannam@86 2660 class="cmtt-8">(</span><span
cannam@86 2661 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2662 class="cmtt-8">&#x00A0;32</span><span
cannam@86 2663 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 2664 class="cmtt-8">&#x00A0;as</span><span
cannam@86 2665 class="cmtt-8">&#x00A0;an</span><span
cannam@86 2666 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2667 class="cmtt-8">&#x00A0;integer)</span>
cannam@86 2668 <br class="fancyvrb" /><a
cannam@86 2669 id="x1-51107r3"></a><span
cannam@86 2670 class="cmr-6">3</span><span
cannam@86 2671 class="cmtt-8">&#x00A0;</span><span
cannam@86 2672 class="cmtt-8">&#x00A0;</span><span
cannam@86 2673 class="cmtt-8">&#x00A0;</span><span
cannam@86 2674 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 2675 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
cannam@86 2676 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2677 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2678 class="cmtt-8">&#x00A0;4</span><span
cannam@86 2679 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 2680 class="cmtt-8">&#x00A0;as</span><span
cannam@86 2681 class="cmtt-8">&#x00A0;an</span><span
cannam@86 2682 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2683 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 2684 class="cmtt-8">&#x00A0;and</span><span
cannam@86 2685 class="cmtt-8">&#x00A0;add</span><span
cannam@86 2686 class="cmtt-8">&#x00A0;1</span>
cannam@86 2687 <br class="fancyvrb" /><a
cannam@86 2688 id="x1-51109r4"></a><span
cannam@86 2689 class="cmr-6">4</span><span
cannam@86 2690 class="cmtt-8">&#x00A0;</span><span
cannam@86 2691 class="cmtt-8">&#x00A0;</span><span
cannam@86 2692 class="cmtt-8">&#x00A0;</span><span
cannam@86 2693 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 2694 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
cannam@86 2695 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2696 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2697 class="cmtt-8">&#x00A0;1</span><span
cannam@86 2698 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 2699 class="cmtt-8">&#x00A0;as</span><span
cannam@86 2700 class="cmtt-8">&#x00A0;a</span><span
cannam@86 2701 class="cmtt-8">&#x00A0;boolean</span><span
cannam@86 2702 class="cmtt-8">&#x00A0;flag</span>
cannam@86 2703 <br class="fancyvrb" /><a
cannam@86 2704 id="x1-51111r5"></a><span
cannam@86 2705 class="cmr-6">5</span><span
cannam@86 2706 class="cmtt-8">&#x00A0;</span><span
cannam@86 2707 class="cmtt-8">&#x00A0;</span>
cannam@86 2708 <br class="fancyvrb" /><a
cannam@86 2709 id="x1-51113r6"></a><span
cannam@86 2710 class="cmr-6">6</span><span
cannam@86 2711 class="cmtt-8">&#x00A0;</span><span
cannam@86 2712 class="cmtt-8">&#x00A0;</span><span
cannam@86 2713 class="cmtt-8">&#x00A0;</span><span
cannam@86 2714 class="cmtt-8">&#x00A0;if</span><span
cannam@86 2715 class="cmtt-8">&#x00A0;(</span><span
cannam@86 2716 class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
cannam@86 2717 class="cmtt-8">&#x00A0;is</span><span
cannam@86 2718 class="cmtt-8">&#x00A0;1</span><span
cannam@86 2719 class="cmtt-8">&#x00A0;)</span><span
cannam@86 2720 class="cmtt-8">&#x00A0;</span><span
cannam@86 2721 class="cmsy-8">{</span>
cannam@86 2722 <br class="fancyvrb" /><a
cannam@86 2723 id="x1-51115r7"></a><span
cannam@86 2724 class="cmr-6">7</span><span
cannam@86 2725 class="cmtt-8">&#x00A0;</span><span
cannam@86 2726 class="cmtt-8">&#x00A0;</span>
cannam@86 2727 <br class="fancyvrb" /><a
cannam@86 2728 id="x1-51117r8"></a><span
cannam@86 2729 class="cmr-6">8</span><span
cannam@86 2730 class="cmtt-8">&#x00A0;</span><span
cannam@86 2731 class="cmtt-8">&#x00A0;</span><span
cannam@86 2732 class="cmtt-8">&#x00A0;</span><span
cannam@86 2733 class="cmtt-8">&#x00A0;</span><span
cannam@86 2734 class="cmtt-8">&#x00A0;</span><span
cannam@86 2735 class="cmtt-8">&#x00A0;</span><span
cannam@86 2736 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 2737 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
cannam@86 2738 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2739 class="cmtt-8">&#x00A0;</span><a
cannam@86 2740 href="#x1-1190009.2.3"><span
cannam@86 2741 class="cmtt-8">lookup1_values</span></a><span
cannam@86 2742 class="cmtt-8">([codebook_entries],</span><span
cannam@86 2743 class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
cannam@86 2744 class="cmtt-8">&#x00A0;)</span>
cannam@86 2745 <br class="fancyvrb" /><a
cannam@86 2746 id="x1-51119r9"></a><span
cannam@86 2747 class="cmr-6">9</span><span
cannam@86 2748 class="cmtt-8">&#x00A0;</span><span
cannam@86 2749 class="cmtt-8">&#x00A0;</span>
cannam@86 2750 <br class="fancyvrb" /><a
cannam@86 2751 id="x1-51121r10"></a><span
cannam@86 2752 class="cmr-6">10</span><span
cannam@86 2753 class="cmtt-8">&#x00A0;</span><span
cannam@86 2754 class="cmtt-8">&#x00A0;</span><span
cannam@86 2755 class="cmtt-8">&#x00A0;</span><span
cannam@86 2756 class="cmtt-8">&#x00A0;</span><span
cannam@86 2757 class="cmsy-8">}</span><span
cannam@86 2758 class="cmtt-8">&#x00A0;else</span><span
cannam@86 2759 class="cmtt-8">&#x00A0;</span><span
cannam@86 2760 class="cmsy-8">{</span>
cannam@86 2761 <br class="fancyvrb" /><a
cannam@86 2762 id="x1-51123r11"></a><span
cannam@86 2763 class="cmr-6">11</span><span
cannam@86 2764 class="cmtt-8">&#x00A0;</span><span
cannam@86 2765 class="cmtt-8">&#x00A0;</span>
cannam@86 2766 <br class="fancyvrb" /><a
cannam@86 2767 id="x1-51125r12"></a><span
cannam@86 2768 class="cmr-6">12</span><span
cannam@86 2769 class="cmtt-8">&#x00A0;</span><span
cannam@86 2770 class="cmtt-8">&#x00A0;</span><span
cannam@86 2771 class="cmtt-8">&#x00A0;</span><span
cannam@86 2772 class="cmtt-8">&#x00A0;</span><span
cannam@86 2773 class="cmtt-8">&#x00A0;</span><span
cannam@86 2774 class="cmtt-8">&#x00A0;</span><span
cannam@86 2775 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 2776 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
cannam@86 2777 class="cmtt-8">&#x00A0;=</span><span
cannam@86 2778 class="cmtt-8">&#x00A0;[codebook_entries]</span><span
cannam@86 2779 class="cmtt-8">&#x00A0;*</span><span
cannam@86 2780 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
cannam@86 2781 <br class="fancyvrb" /><a
cannam@86 2782 id="x1-51127r13"></a><span
cannam@86 2783 class="cmr-6">13</span><span
cannam@86 2784 class="cmtt-8">&#x00A0;</span><span
cannam@86 2785 class="cmtt-8">&#x00A0;</span>
cannam@86 2786 <br class="fancyvrb" /><a
cannam@86 2787 id="x1-51129r14"></a><span
cannam@86 2788 class="cmr-6">14</span><span
cannam@86 2789 class="cmtt-8">&#x00A0;</span><span
cannam@86 2790 class="cmtt-8">&#x00A0;</span><span
cannam@86 2791 class="cmtt-8">&#x00A0;</span><span
cannam@86 2792 class="cmtt-8">&#x00A0;</span><span
cannam@86 2793 class="cmsy-8">}</span>
cannam@86 2794 <br class="fancyvrb" /><a
cannam@86 2795 id="x1-51131r15"></a><span
cannam@86 2796 class="cmr-6">15</span><span
cannam@86 2797 class="cmtt-8">&#x00A0;</span><span
cannam@86 2798 class="cmtt-8">&#x00A0;</span>
cannam@86 2799 <br class="fancyvrb" /><a
cannam@86 2800 id="x1-51133r16"></a><span
cannam@86 2801 class="cmr-6">16</span><span
cannam@86 2802 class="cmtt-8">&#x00A0;</span><span
cannam@86 2803 class="cmtt-8">&#x00A0;</span><span
cannam@86 2804 class="cmtt-8">&#x00A0;</span><span
cannam@86 2805 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 2806 class="cmtt-8">&#x00A0;read</span><span
cannam@86 2807 class="cmtt-8">&#x00A0;a</span><span
cannam@86 2808 class="cmtt-8">&#x00A0;total</span><span
cannam@86 2809 class="cmtt-8">&#x00A0;of</span><span
cannam@86 2810 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
cannam@86 2811 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 2812 class="cmtt-8">&#x00A0;integers</span><span
cannam@86 2813 class="cmtt-8">&#x00A0;of</span><span
cannam@86 2814 class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
cannam@86 2815 class="cmtt-8">&#x00A0;each;</span>
cannam@86 2816
cannam@86 2817
cannam@86 2818
cannam@86 2819 <br class="fancyvrb" /><a
cannam@86 2820 id="x1-51135r17"></a><span
cannam@86 2821 class="cmr-6">17</span><span
cannam@86 2822 class="cmtt-8">&#x00A0;</span><span
cannam@86 2823 class="cmtt-8">&#x00A0;</span><span
cannam@86 2824 class="cmtt-8">&#x00A0;</span><span
cannam@86 2825 class="cmtt-8">&#x00A0;</span><span
cannam@86 2826 class="cmtt-8">&#x00A0;</span><span
cannam@86 2827 class="cmtt-8">&#x00A0;</span><span
cannam@86 2828 class="cmtt-8">&#x00A0;store</span><span
cannam@86 2829 class="cmtt-8">&#x00A0;these</span><span
cannam@86 2830 class="cmtt-8">&#x00A0;in</span><span
cannam@86 2831 class="cmtt-8">&#x00A0;order</span><span
cannam@86 2832 class="cmtt-8">&#x00A0;in</span><span
cannam@86 2833 class="cmtt-8">&#x00A0;the</span><span
cannam@86 2834 class="cmtt-8">&#x00A0;array</span><span
cannam@86 2835 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span>
cannam@86 2836 </div>
cannam@86 2837 </li>
cannam@86 2838 <li class="itemize">A <span
cannam@86 2839 class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
cannam@86 2840 not decodable by the specification in this document.
cannam@86 2841 </li></ul>
cannam@86 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
cannam@86 2843 rendering the stream undecodable.
cannam@86 2844 <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 2845 id="x1-520003.2.1"></a><span
cannam@86 2846 class="cmbx-12">Huffman decision tree representation</span></span>
cannam@86 2847 The <span
cannam@86 2848 class="cmtt-12">[codebook_codeword_lengths] </span>array and <span
cannam@86 2849 class="cmtt-12">[codebook_entries] </span>value uniquely define the
cannam@86 2850 Huffman decision tree used for entropy decoding.
cannam@86 2851 <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
cannam@86 2852 codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
cannam@86 2853 possible. Assume the following codeword length list:
cannam@86 2854 <!--l. 209--><p class="noindent" >
cannam@86 2855 <div class="fancyvrb" id="fancyvrb15">
cannam@86 2856 <a
cannam@86 2857 id="x1-52002r1"></a><span
cannam@86 2858 class="cmr-6">1</span><span
cannam@86 2859 class="cmtt-8">&#x00A0;</span><span
cannam@86 2860 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2861 class="cmtt-8">&#x00A0;0:</span><span
cannam@86 2862 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2863 class="cmtt-8">&#x00A0;2</span>
cannam@86 2864 <br class="fancyvrb" /><a
cannam@86 2865 id="x1-52004r2"></a><span
cannam@86 2866 class="cmr-6">2</span><span
cannam@86 2867 class="cmtt-8">&#x00A0;</span><span
cannam@86 2868 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2869 class="cmtt-8">&#x00A0;1:</span><span
cannam@86 2870 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2871 class="cmtt-8">&#x00A0;4</span>
cannam@86 2872 <br class="fancyvrb" /><a
cannam@86 2873 id="x1-52006r3"></a><span
cannam@86 2874 class="cmr-6">3</span><span
cannam@86 2875 class="cmtt-8">&#x00A0;</span><span
cannam@86 2876 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2877 class="cmtt-8">&#x00A0;2:</span><span
cannam@86 2878 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2879 class="cmtt-8">&#x00A0;4</span>
cannam@86 2880 <br class="fancyvrb" /><a
cannam@86 2881 id="x1-52008r4"></a><span
cannam@86 2882 class="cmr-6">4</span><span
cannam@86 2883 class="cmtt-8">&#x00A0;</span><span
cannam@86 2884 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2885 class="cmtt-8">&#x00A0;3:</span><span
cannam@86 2886 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2887 class="cmtt-8">&#x00A0;4</span>
cannam@86 2888 <br class="fancyvrb" /><a
cannam@86 2889 id="x1-52010r5"></a><span
cannam@86 2890 class="cmr-6">5</span><span
cannam@86 2891 class="cmtt-8">&#x00A0;</span><span
cannam@86 2892 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2893 class="cmtt-8">&#x00A0;4:</span><span
cannam@86 2894 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2895 class="cmtt-8">&#x00A0;4</span>
cannam@86 2896 <br class="fancyvrb" /><a
cannam@86 2897 id="x1-52012r6"></a><span
cannam@86 2898 class="cmr-6">6</span><span
cannam@86 2899 class="cmtt-8">&#x00A0;</span><span
cannam@86 2900 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2901 class="cmtt-8">&#x00A0;5:</span><span
cannam@86 2902 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2903 class="cmtt-8">&#x00A0;2</span>
cannam@86 2904 <br class="fancyvrb" /><a
cannam@86 2905 id="x1-52014r7"></a><span
cannam@86 2906 class="cmr-6">7</span><span
cannam@86 2907 class="cmtt-8">&#x00A0;</span><span
cannam@86 2908 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2909 class="cmtt-8">&#x00A0;6:</span><span
cannam@86 2910 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2911 class="cmtt-8">&#x00A0;3</span>
cannam@86 2912 <br class="fancyvrb" /><a
cannam@86 2913 id="x1-52016r8"></a><span
cannam@86 2914 class="cmr-6">8</span><span
cannam@86 2915 class="cmtt-8">&#x00A0;</span><span
cannam@86 2916 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2917 class="cmtt-8">&#x00A0;7:</span><span
cannam@86 2918 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2919 class="cmtt-8">&#x00A0;3</span>
cannam@86 2920 </div>
cannam@86 2921 <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
cannam@86 2922 in the following codeword list:
cannam@86 2923 <!--l. 223--><p class="noindent" >
cannam@86 2924 <div class="fancyvrb" id="fancyvrb16">
cannam@86 2925 <a
cannam@86 2926 id="x1-52018r1"></a><span
cannam@86 2927 class="cmr-6">1</span><span
cannam@86 2928 class="cmtt-8">&#x00A0;</span><span
cannam@86 2929 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2930 class="cmtt-8">&#x00A0;0:</span><span
cannam@86 2931 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2932 class="cmtt-8">&#x00A0;2</span><span
cannam@86 2933 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2934 class="cmtt-8">&#x00A0;00</span>
cannam@86 2935 <br class="fancyvrb" /><a
cannam@86 2936 id="x1-52020r2"></a><span
cannam@86 2937 class="cmr-6">2</span><span
cannam@86 2938 class="cmtt-8">&#x00A0;</span><span
cannam@86 2939 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2940 class="cmtt-8">&#x00A0;1:</span><span
cannam@86 2941 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2942 class="cmtt-8">&#x00A0;4</span><span
cannam@86 2943 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2944 class="cmtt-8">&#x00A0;0100</span>
cannam@86 2945 <br class="fancyvrb" /><a
cannam@86 2946 id="x1-52022r3"></a><span
cannam@86 2947 class="cmr-6">3</span><span
cannam@86 2948 class="cmtt-8">&#x00A0;</span><span
cannam@86 2949 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2950 class="cmtt-8">&#x00A0;2:</span><span
cannam@86 2951 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2952 class="cmtt-8">&#x00A0;4</span><span
cannam@86 2953 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2954 class="cmtt-8">&#x00A0;0101</span>
cannam@86 2955 <br class="fancyvrb" /><a
cannam@86 2956 id="x1-52024r4"></a><span
cannam@86 2957 class="cmr-6">4</span><span
cannam@86 2958 class="cmtt-8">&#x00A0;</span><span
cannam@86 2959 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2960 class="cmtt-8">&#x00A0;3:</span><span
cannam@86 2961 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2962 class="cmtt-8">&#x00A0;4</span><span
cannam@86 2963 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2964 class="cmtt-8">&#x00A0;0110</span>
cannam@86 2965 <br class="fancyvrb" /><a
cannam@86 2966 id="x1-52026r5"></a><span
cannam@86 2967 class="cmr-6">5</span><span
cannam@86 2968 class="cmtt-8">&#x00A0;</span><span
cannam@86 2969 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2970 class="cmtt-8">&#x00A0;4:</span><span
cannam@86 2971 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2972 class="cmtt-8">&#x00A0;4</span><span
cannam@86 2973 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2974 class="cmtt-8">&#x00A0;0111</span>
cannam@86 2975 <br class="fancyvrb" /><a
cannam@86 2976 id="x1-52028r6"></a><span
cannam@86 2977 class="cmr-6">6</span><span
cannam@86 2978 class="cmtt-8">&#x00A0;</span><span
cannam@86 2979 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2980 class="cmtt-8">&#x00A0;5:</span><span
cannam@86 2981 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2982 class="cmtt-8">&#x00A0;2</span><span
cannam@86 2983 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2984 class="cmtt-8">&#x00A0;10</span>
cannam@86 2985 <br class="fancyvrb" /><a
cannam@86 2986 id="x1-52030r7"></a><span
cannam@86 2987 class="cmr-6">7</span><span
cannam@86 2988 class="cmtt-8">&#x00A0;</span><span
cannam@86 2989 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 2990 class="cmtt-8">&#x00A0;6:</span><span
cannam@86 2991 class="cmtt-8">&#x00A0;length</span><span
cannam@86 2992 class="cmtt-8">&#x00A0;3</span><span
cannam@86 2993 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 2994 class="cmtt-8">&#x00A0;110</span>
cannam@86 2995 <br class="fancyvrb" /><a
cannam@86 2996 id="x1-52032r8"></a><span
cannam@86 2997 class="cmr-6">8</span><span
cannam@86 2998 class="cmtt-8">&#x00A0;</span><span
cannam@86 2999 class="cmtt-8">&#x00A0;entry</span><span
cannam@86 3000 class="cmtt-8">&#x00A0;7:</span><span
cannam@86 3001 class="cmtt-8">&#x00A0;length</span><span
cannam@86 3002 class="cmtt-8">&#x00A0;3</span><span
cannam@86 3003 class="cmtt-8">&#x00A0;codeword</span><span
cannam@86 3004 class="cmtt-8">&#x00A0;111</span>
cannam@86 3005 </div>
cannam@86 3006
cannam@86 3007
cannam@86 3008
cannam@86 3009 <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a
cannam@86 3010 id="x1-530003.2.1"></a><span
cannam@86 3011 class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
cannam@86 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,
cannam@86 3013 one&#8217;. When determining &#8217;lowest possible value&#8217; in the assignment definition above, the leftmost
cannam@86 3014 bit is the MSb.
cannam@86 3015 <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
cannam@86 3016 numbers equivalent to the leaves numbered left-to-right:
cannam@86 3017 <div class="center"
cannam@86 3018 >
cannam@86 3019 <!--l. 247--><p class="noindent" >
cannam@86 3020
cannam@86 3021 <!--l. 248--><p class="noindent" ><img
cannam@86 3022 src="hufftree.png" alt="PIC"
cannam@86 3023 >
cannam@86 3024 <br /> <div class="caption"
cannam@86 3025 ><span class="id">Figure&#x00A0;4: </span><span
cannam@86 3026 class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
cannam@86 3027 </div>
cannam@86 3028 <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
cannam@86 3029 possible position.
cannam@86 3030 <!--l. 256--><p class="noindent" >Note that it&#8217;s possible to underspecify or overspecify a Huffman tree via the length list.
cannam@86 3031 In the above example, if codeword seven were eliminated, it&#8217;s clear that the tree is
cannam@86 3032 unfinished:
cannam@86 3033 <div class="center"
cannam@86 3034 >
cannam@86 3035 <!--l. 260--><p class="noindent" >
cannam@86 3036
cannam@86 3037 <!--l. 261--><p class="noindent" ><img
cannam@86 3038 src="hufftree-under.png" alt="PIC"
cannam@86 3039 >
cannam@86 3040 <br /> <div class="caption"
cannam@86 3041 ><span class="id">Figure&#x00A0;5: </span><span
cannam@86 3042 class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
cannam@86 3043 </div>
cannam@86 3044 <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it&#8217;s clear that the tree is fully populated and a ninth
cannam@86 3045 codeword is impossible. Both underspecified and overspecified trees are an error condition
cannam@86 3046 rendering the stream undecodable. Take special care that a codebook with a single used
cannam@86 3047 entry is handled properly; it consists of a single codework of zero bits and &#8217;reading&#8217;
cannam@86 3048 a value out of such a codebook always returns the single used value and sinks zero
cannam@86 3049 bits.
cannam@86 3050 <!--l. 274--><p class="noindent" >Codebook entries marked &#8217;unused&#8217; are simply skipped in the assigning process. They have no
cannam@86 3051 codeword and do not appear in the decision tree, thus it&#8217;s impossible for any bit pattern read
cannam@86 3052 from the stream to decode to that entry number.
cannam@86 3053
cannam@86 3054
cannam@86 3055
cannam@86 3056 <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3057 id="x1-540003.2.1"></a><span
cannam@86 3058 class="cmbx-12">VQ lookup table vector representation</span></span>
cannam@86 3059 Unpacking the VQ lookup table vectors relies on the following values:
cannam@86 3060 <div class="fancyvrb" id="fancyvrb17">
cannam@86 3061 <a
cannam@86 3062 id="x1-54002r1"></a><span
cannam@86 3063 class="cmr-6">1</span><span
cannam@86 3064 class="cmtt-8">&#x00A0;</span><span
cannam@86 3065 class="cmtt-8">&#x00A0;the</span><span
cannam@86 3066 class="cmtt-8">&#x00A0;[codebook\_multiplicands]</span><span
cannam@86 3067 class="cmtt-8">&#x00A0;array</span>
cannam@86 3068 <br class="fancyvrb" /><a
cannam@86 3069 id="x1-54004r2"></a><span
cannam@86 3070 class="cmr-6">2</span><span
cannam@86 3071 class="cmtt-8">&#x00A0;</span><span
cannam@86 3072 class="cmtt-8">&#x00A0;[codebook\_minimum\_value]</span>
cannam@86 3073 <br class="fancyvrb" /><a
cannam@86 3074 id="x1-54006r3"></a><span
cannam@86 3075 class="cmr-6">3</span><span
cannam@86 3076 class="cmtt-8">&#x00A0;</span><span
cannam@86 3077 class="cmtt-8">&#x00A0;[codebook\_delta\_value]</span>
cannam@86 3078 <br class="fancyvrb" /><a
cannam@86 3079 id="x1-54008r4"></a><span
cannam@86 3080 class="cmr-6">4</span><span
cannam@86 3081 class="cmtt-8">&#x00A0;</span><span
cannam@86 3082 class="cmtt-8">&#x00A0;[codebook\_sequence\_p]</span>
cannam@86 3083 <br class="fancyvrb" /><a
cannam@86 3084 id="x1-54010r5"></a><span
cannam@86 3085 class="cmr-6">5</span><span
cannam@86 3086 class="cmtt-8">&#x00A0;</span><span
cannam@86 3087 class="cmtt-8">&#x00A0;[codebook\_lookup\_type]</span>
cannam@86 3088 <br class="fancyvrb" /><a
cannam@86 3089 id="x1-54012r6"></a><span
cannam@86 3090 class="cmr-6">6</span><span
cannam@86 3091 class="cmtt-8">&#x00A0;</span><span
cannam@86 3092 class="cmtt-8">&#x00A0;[codebook\_entries]</span>
cannam@86 3093 <br class="fancyvrb" /><a
cannam@86 3094 id="x1-54014r7"></a><span
cannam@86 3095 class="cmr-6">7</span><span
cannam@86 3096 class="cmtt-8">&#x00A0;</span><span
cannam@86 3097 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
cannam@86 3098 <br class="fancyvrb" /><a
cannam@86 3099 id="x1-54016r8"></a><span
cannam@86 3100 class="cmr-6">8</span><span
cannam@86 3101 class="cmtt-8">&#x00A0;</span><span
cannam@86 3102 class="cmtt-8">&#x00A0;[codebook\_lookup\_values]</span>
cannam@86 3103 </div>
cannam@86 3104 <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
cannam@86 3105 <span
cannam@86 3106 class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
cannam@86 3107 during audio packet decode in a VQ context.
cannam@86 3108 <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3109 id="x1-550003.2.1"></a><span
cannam@86 3110 class="cmbx-12">Vector value decode: Lookup type 1</span></span>
cannam@86 3111 Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
cannam@86 3112 scalar values. Calculate (unpack) the final values of a codebook entry vector from
cannam@86 3113 the entries in <span
cannam@86 3114 class="cmtt-12">[codebook_multiplicands] </span>as follows (<span
cannam@86 3115 class="cmtt-12">[value_vector] </span>is the output
cannam@86 3116 vector representing the vector of values for entry number <span
cannam@86 3117 class="cmtt-12">[lookup_offset] </span>in this
cannam@86 3118 codebook):
cannam@86 3119 <!--l. 311--><p class="noindent" >
cannam@86 3120 <div class="fancyvrb" id="fancyvrb18">
cannam@86 3121 <a
cannam@86 3122 id="x1-55002r1"></a><span
cannam@86 3123 class="cmr-6">1</span><span
cannam@86 3124 class="cmtt-8">&#x00A0;</span><span
cannam@86 3125 class="cmtt-8">&#x00A0;</span><span
cannam@86 3126 class="cmtt-8">&#x00A0;</span><span
cannam@86 3127 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 3128 class="cmtt-8">&#x00A0;[last]</span><span
cannam@86 3129 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3130 class="cmtt-8">&#x00A0;0;</span>
cannam@86 3131 <br class="fancyvrb" /><a
cannam@86 3132 id="x1-55004r2"></a><span
cannam@86 3133 class="cmr-6">2</span><span
cannam@86 3134 class="cmtt-8">&#x00A0;</span><span
cannam@86 3135 class="cmtt-8">&#x00A0;</span><span
cannam@86 3136 class="cmtt-8">&#x00A0;</span><span
cannam@86 3137 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 3138 class="cmtt-8">&#x00A0;[index_divisor]</span><span
cannam@86 3139 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3140 class="cmtt-8">&#x00A0;1;</span>
cannam@86 3141 <br class="fancyvrb" /><a
cannam@86 3142 id="x1-55006r3"></a><span
cannam@86 3143 class="cmr-6">3</span><span
cannam@86 3144 class="cmtt-8">&#x00A0;</span><span
cannam@86 3145 class="cmtt-8">&#x00A0;</span><span
cannam@86 3146 class="cmtt-8">&#x00A0;</span><span
cannam@86 3147 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 3148 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 3149 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 3150 class="cmtt-8">&#x00A0;over</span><span
cannam@86 3151 class="cmtt-8">&#x00A0;the</span><span
cannam@86 3152 class="cmtt-8">&#x00A0;range</span><span
cannam@86 3153 class="cmtt-8">&#x00A0;0</span><span
cannam@86 3154 class="cmtt-8">&#x00A0;...</span><span
cannam@86 3155 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
cannam@86 3156 class="cmtt-8">&#x00A0;(once</span><span
cannam@86 3157 class="cmtt-8">&#x00A0;for</span><span
cannam@86 3158 class="cmtt-8">&#x00A0;each</span><span
cannam@86 3159 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 3160 class="cmtt-8">&#x00A0;value</span><span
cannam@86 3161 class="cmtt-8">&#x00A0;in</span><span
cannam@86 3162 class="cmtt-8">&#x00A0;the</span><span
cannam@86 3163 class="cmtt-8">&#x00A0;value</span><span
cannam@86 3164 class="cmtt-8">&#x00A0;vector)</span><span
cannam@86 3165 class="cmtt-8">&#x00A0;</span><span
cannam@86 3166 class="cmsy-8">{</span>
cannam@86 3167 <br class="fancyvrb" /><a
cannam@86 3168 id="x1-55008r4"></a><span
cannam@86 3169 class="cmr-6">4</span><span
cannam@86 3170 class="cmtt-8">&#x00A0;</span><span
cannam@86 3171 class="cmtt-8">&#x00A0;</span>
cannam@86 3172 <br class="fancyvrb" /><a
cannam@86 3173 id="x1-55010r5"></a><span
cannam@86 3174 class="cmr-6">5</span><span
cannam@86 3175 class="cmtt-8">&#x00A0;</span><span
cannam@86 3176 class="cmtt-8">&#x00A0;</span><span
cannam@86 3177 class="cmtt-8">&#x00A0;</span><span
cannam@86 3178 class="cmtt-8">&#x00A0;</span><span
cannam@86 3179 class="cmtt-8">&#x00A0;</span><span
cannam@86 3180 class="cmtt-8">&#x00A0;</span><span
cannam@86 3181 class="cmtt-8">&#x00A0;</span><span
cannam@86 3182 class="cmtt-8">&#x00A0;</span><span
cannam@86 3183 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 3184 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
cannam@86 3185 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3186 class="cmtt-8">&#x00A0;(</span><span
cannam@86 3187 class="cmtt-8">&#x00A0;[lookup_offset]</span><span
cannam@86 3188 class="cmtt-8">&#x00A0;divided</span><span
cannam@86 3189 class="cmtt-8">&#x00A0;by</span><span
cannam@86 3190 class="cmtt-8">&#x00A0;[index_divisor]</span><span
cannam@86 3191 class="cmtt-8">&#x00A0;using</span><span
cannam@86 3192 class="cmtt-8">&#x00A0;integer</span>
cannam@86 3193 <br class="fancyvrb" /><a
cannam@86 3194 id="x1-55012r6"></a><span
cannam@86 3195 class="cmr-6">6</span><span
cannam@86 3196 class="cmtt-8">&#x00A0;</span><span
cannam@86 3197 class="cmtt-8">&#x00A0;</span><span
cannam@86 3198 class="cmtt-8">&#x00A0;</span><span
cannam@86 3199 class="cmtt-8">&#x00A0;</span><span
cannam@86 3200 class="cmtt-8">&#x00A0;</span><span
cannam@86 3201 class="cmtt-8">&#x00A0;</span><span
cannam@86 3202 class="cmtt-8">&#x00A0;</span><span
cannam@86 3203 class="cmtt-8">&#x00A0;</span><span
cannam@86 3204 class="cmtt-8">&#x00A0;</span><span
cannam@86 3205 class="cmtt-8">&#x00A0;</span><span
cannam@86 3206 class="cmtt-8">&#x00A0;</span><span
cannam@86 3207 class="cmtt-8">&#x00A0;division</span><span
cannam@86 3208 class="cmtt-8">&#x00A0;)</span><span
cannam@86 3209 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 3210 class="cmtt-8">&#x00A0;modulo</span><span
cannam@86 3211 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
cannam@86 3212 <br class="fancyvrb" /><a
cannam@86 3213 id="x1-55014r7"></a><span
cannam@86 3214 class="cmr-6">7</span><span
cannam@86 3215 class="cmtt-8">&#x00A0;</span><span
cannam@86 3216 class="cmtt-8">&#x00A0;</span>
cannam@86 3217 <br class="fancyvrb" /><a
cannam@86 3218 id="x1-55016r8"></a><span
cannam@86 3219 class="cmr-6">8</span><span
cannam@86 3220 class="cmtt-8">&#x00A0;</span><span
cannam@86 3221 class="cmtt-8">&#x00A0;</span><span
cannam@86 3222 class="cmtt-8">&#x00A0;</span><span
cannam@86 3223 class="cmtt-8">&#x00A0;</span><span
cannam@86 3224 class="cmtt-8">&#x00A0;</span><span
cannam@86 3225 class="cmtt-8">&#x00A0;</span><span
cannam@86 3226 class="cmtt-8">&#x00A0;</span><span
cannam@86 3227 class="cmtt-8">&#x00A0;</span><span
cannam@86 3228 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 3229 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 3230 class="cmtt-8">&#x00A0;[value_vector]</span><span
cannam@86 3231 class="cmtt-8">&#x00A0;element</span><span
cannam@86 3232 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 3233 class="cmtt-8">&#x00A0;=</span>
cannam@86 3234 <br class="fancyvrb" /><a
cannam@86 3235 id="x1-55018r9"></a><span
cannam@86 3236 class="cmr-6">9</span><span
cannam@86 3237 class="cmtt-8">&#x00A0;</span><span
cannam@86 3238 class="cmtt-8">&#x00A0;</span><span
cannam@86 3239 class="cmtt-8">&#x00A0;</span><span
cannam@86 3240 class="cmtt-8">&#x00A0;</span><span
cannam@86 3241 class="cmtt-8">&#x00A0;</span><span
cannam@86 3242 class="cmtt-8">&#x00A0;</span><span
cannam@86 3243 class="cmtt-8">&#x00A0;</span><span
cannam@86 3244 class="cmtt-8">&#x00A0;</span><span
cannam@86 3245 class="cmtt-8">&#x00A0;</span><span
cannam@86 3246 class="cmtt-8">&#x00A0;</span><span
cannam@86 3247 class="cmtt-8">&#x00A0;</span><span
cannam@86 3248 class="cmtt-8">&#x00A0;</span><span
cannam@86 3249 class="cmtt-8">&#x00A0;</span><span
cannam@86 3250 class="cmtt-8">&#x00A0;(</span><span
cannam@86 3251 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
cannam@86 3252 class="cmtt-8">&#x00A0;array</span><span
cannam@86 3253 class="cmtt-8">&#x00A0;element</span><span
cannam@86 3254 class="cmtt-8">&#x00A0;number</span><span
cannam@86 3255 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
cannam@86 3256 class="cmtt-8">&#x00A0;)</span><span
cannam@86 3257 class="cmtt-8">&#x00A0;*</span>
cannam@86 3258 <br class="fancyvrb" /><a
cannam@86 3259 id="x1-55020r10"></a><span
cannam@86 3260 class="cmr-6">10</span><span
cannam@86 3261 class="cmtt-8">&#x00A0;</span><span
cannam@86 3262 class="cmtt-8">&#x00A0;</span><span
cannam@86 3263 class="cmtt-8">&#x00A0;</span><span
cannam@86 3264 class="cmtt-8">&#x00A0;</span><span
cannam@86 3265 class="cmtt-8">&#x00A0;</span><span
cannam@86 3266 class="cmtt-8">&#x00A0;</span><span
cannam@86 3267 class="cmtt-8">&#x00A0;</span><span
cannam@86 3268 class="cmtt-8">&#x00A0;</span><span
cannam@86 3269 class="cmtt-8">&#x00A0;</span><span
cannam@86 3270 class="cmtt-8">&#x00A0;</span><span
cannam@86 3271 class="cmtt-8">&#x00A0;</span><span
cannam@86 3272 class="cmtt-8">&#x00A0;</span><span
cannam@86 3273 class="cmtt-8">&#x00A0;</span><span
cannam@86 3274 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
cannam@86 3275 class="cmtt-8">&#x00A0;+</span><span
cannam@86 3276 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
cannam@86 3277 class="cmtt-8">&#x00A0;+</span><span
cannam@86 3278 class="cmtt-8">&#x00A0;[last];</span>
cannam@86 3279 <br class="fancyvrb" /><a
cannam@86 3280 id="x1-55022r11"></a><span
cannam@86 3281 class="cmr-6">11</span><span
cannam@86 3282 class="cmtt-8">&#x00A0;</span><span
cannam@86 3283 class="cmtt-8">&#x00A0;</span>
cannam@86 3284 <br class="fancyvrb" /><a
cannam@86 3285 id="x1-55024r12"></a><span
cannam@86 3286 class="cmr-6">12</span><span
cannam@86 3287 class="cmtt-8">&#x00A0;</span><span
cannam@86 3288 class="cmtt-8">&#x00A0;</span><span
cannam@86 3289 class="cmtt-8">&#x00A0;</span><span
cannam@86 3290 class="cmtt-8">&#x00A0;</span><span
cannam@86 3291 class="cmtt-8">&#x00A0;</span><span
cannam@86 3292 class="cmtt-8">&#x00A0;</span><span
cannam@86 3293 class="cmtt-8">&#x00A0;</span><span
cannam@86 3294 class="cmtt-8">&#x00A0;</span><span
cannam@86 3295 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 3296 class="cmtt-8">&#x00A0;if</span><span
cannam@86 3297 class="cmtt-8">&#x00A0;(</span><span
cannam@86 3298 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
cannam@86 3299 class="cmtt-8">&#x00A0;is</span><span
cannam@86 3300 class="cmtt-8">&#x00A0;set</span><span
cannam@86 3301 class="cmtt-8">&#x00A0;)</span><span
cannam@86 3302 class="cmtt-8">&#x00A0;then</span><span
cannam@86 3303 class="cmtt-8">&#x00A0;set</span><span
cannam@86 3304 class="cmtt-8">&#x00A0;[last]</span><span
cannam@86 3305 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3306 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 3307 class="cmtt-8">&#x00A0;[value_vector]</span><span
cannam@86 3308 class="cmtt-8">&#x00A0;element</span><span
cannam@86 3309 class="cmtt-8">&#x00A0;[i]</span>
cannam@86 3310 <br class="fancyvrb" /><a
cannam@86 3311 id="x1-55026r13"></a><span
cannam@86 3312 class="cmr-6">13</span><span
cannam@86 3313 class="cmtt-8">&#x00A0;</span><span
cannam@86 3314 class="cmtt-8">&#x00A0;</span>
cannam@86 3315 <br class="fancyvrb" /><a
cannam@86 3316 id="x1-55028r14"></a><span
cannam@86 3317 class="cmr-6">14</span><span
cannam@86 3318 class="cmtt-8">&#x00A0;</span><span
cannam@86 3319 class="cmtt-8">&#x00A0;</span><span
cannam@86 3320 class="cmtt-8">&#x00A0;</span><span
cannam@86 3321 class="cmtt-8">&#x00A0;</span><span
cannam@86 3322 class="cmtt-8">&#x00A0;</span><span
cannam@86 3323 class="cmtt-8">&#x00A0;</span><span
cannam@86 3324 class="cmtt-8">&#x00A0;</span><span
cannam@86 3325 class="cmtt-8">&#x00A0;</span><span
cannam@86 3326 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 3327 class="cmtt-8">&#x00A0;[index_divisor]</span><span
cannam@86 3328 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3329 class="cmtt-8">&#x00A0;[index_divisor]</span><span
cannam@86 3330 class="cmtt-8">&#x00A0;*</span><span
cannam@86 3331 class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
cannam@86 3332 <br class="fancyvrb" /><a
cannam@86 3333 id="x1-55030r15"></a><span
cannam@86 3334 class="cmr-6">15</span><span
cannam@86 3335 class="cmtt-8">&#x00A0;</span><span
cannam@86 3336 class="cmtt-8">&#x00A0;</span>
cannam@86 3337 <br class="fancyvrb" /><a
cannam@86 3338 id="x1-55032r16"></a><span
cannam@86 3339 class="cmr-6">16</span><span
cannam@86 3340 class="cmtt-8">&#x00A0;</span><span
cannam@86 3341 class="cmtt-8">&#x00A0;</span><span
cannam@86 3342 class="cmtt-8">&#x00A0;</span><span
cannam@86 3343 class="cmtt-8">&#x00A0;</span><span
cannam@86 3344 class="cmtt-8">&#x00A0;</span><span
cannam@86 3345 class="cmtt-8">&#x00A0;</span><span
cannam@86 3346 class="cmtt-8">&#x00A0;</span><span
cannam@86 3347 class="cmsy-8">}</span>
cannam@86 3348 <br class="fancyvrb" /><a
cannam@86 3349 id="x1-55034r17"></a><span
cannam@86 3350 class="cmr-6">17</span><span
cannam@86 3351 class="cmtt-8">&#x00A0;</span><span
cannam@86 3352 class="cmtt-8">&#x00A0;</span>
cannam@86 3353 <br class="fancyvrb" /><a
cannam@86 3354 id="x1-55036r18"></a><span
cannam@86 3355 class="cmr-6">18</span><span
cannam@86 3356 class="cmtt-8">&#x00A0;</span><span
cannam@86 3357 class="cmtt-8">&#x00A0;</span><span
cannam@86 3358 class="cmtt-8">&#x00A0;</span><span
cannam@86 3359 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 3360 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 3361 class="cmtt-8">&#x00A0;calculation</span><span
cannam@86 3362 class="cmtt-8">&#x00A0;completed.</span>
cannam@86 3363 </div>
cannam@86 3364
cannam@86 3365
cannam@86 3366
cannam@86 3367 <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3368 id="x1-560003.2.1"></a><span
cannam@86 3369 class="cmbx-12">Vector value decode: Lookup type 2</span></span>
cannam@86 3370 Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
cannam@86 3371 by the <span
cannam@86 3372 class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
cannam@86 3373 values of a codebook entry vector from the entries in <span
cannam@86 3374 class="cmtt-12">[codebook_multiplicands] </span>as follows
cannam@86 3375 (<span
cannam@86 3376 class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
cannam@86 3377 <span
cannam@86 3378 class="cmtt-12">[lookup_offset] </span>in this codebook):
cannam@86 3379 <!--l. 344--><p class="noindent" >
cannam@86 3380 <div class="fancyvrb" id="fancyvrb19">
cannam@86 3381 <a
cannam@86 3382 id="x1-56002r1"></a><span
cannam@86 3383 class="cmr-6">1</span><span
cannam@86 3384 class="cmtt-8">&#x00A0;</span><span
cannam@86 3385 class="cmtt-8">&#x00A0;</span><span
cannam@86 3386 class="cmtt-8">&#x00A0;</span><span
cannam@86 3387 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 3388 class="cmtt-8">&#x00A0;[last]</span><span
cannam@86 3389 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3390 class="cmtt-8">&#x00A0;0;</span>
cannam@86 3391 <br class="fancyvrb" /><a
cannam@86 3392 id="x1-56004r2"></a><span
cannam@86 3393 class="cmr-6">2</span><span
cannam@86 3394 class="cmtt-8">&#x00A0;</span><span
cannam@86 3395 class="cmtt-8">&#x00A0;</span><span
cannam@86 3396 class="cmtt-8">&#x00A0;</span><span
cannam@86 3397 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 3398 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
cannam@86 3399 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3400 class="cmtt-8">&#x00A0;[lookup_offset]</span><span
cannam@86 3401 class="cmtt-8">&#x00A0;*</span><span
cannam@86 3402 class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
cannam@86 3403 <br class="fancyvrb" /><a
cannam@86 3404 id="x1-56006r3"></a><span
cannam@86 3405 class="cmr-6">3</span><span
cannam@86 3406 class="cmtt-8">&#x00A0;</span><span
cannam@86 3407 class="cmtt-8">&#x00A0;</span><span
cannam@86 3408 class="cmtt-8">&#x00A0;</span><span
cannam@86 3409 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 3410 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 3411 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 3412 class="cmtt-8">&#x00A0;over</span><span
cannam@86 3413 class="cmtt-8">&#x00A0;the</span><span
cannam@86 3414 class="cmtt-8">&#x00A0;range</span><span
cannam@86 3415 class="cmtt-8">&#x00A0;0</span><span
cannam@86 3416 class="cmtt-8">&#x00A0;...</span><span
cannam@86 3417 class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
cannam@86 3418 class="cmtt-8">&#x00A0;(once</span><span
cannam@86 3419 class="cmtt-8">&#x00A0;for</span><span
cannam@86 3420 class="cmtt-8">&#x00A0;each</span><span
cannam@86 3421 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 3422 class="cmtt-8">&#x00A0;value</span><span
cannam@86 3423 class="cmtt-8">&#x00A0;in</span><span
cannam@86 3424 class="cmtt-8">&#x00A0;the</span><span
cannam@86 3425 class="cmtt-8">&#x00A0;value</span><span
cannam@86 3426 class="cmtt-8">&#x00A0;vector)</span><span
cannam@86 3427 class="cmtt-8">&#x00A0;</span><span
cannam@86 3428 class="cmsy-8">{</span>
cannam@86 3429 <br class="fancyvrb" /><a
cannam@86 3430 id="x1-56008r4"></a><span
cannam@86 3431 class="cmr-6">4</span><span
cannam@86 3432 class="cmtt-8">&#x00A0;</span><span
cannam@86 3433 class="cmtt-8">&#x00A0;</span>
cannam@86 3434 <br class="fancyvrb" /><a
cannam@86 3435 id="x1-56010r5"></a><span
cannam@86 3436 class="cmr-6">5</span><span
cannam@86 3437 class="cmtt-8">&#x00A0;</span><span
cannam@86 3438 class="cmtt-8">&#x00A0;</span><span
cannam@86 3439 class="cmtt-8">&#x00A0;</span><span
cannam@86 3440 class="cmtt-8">&#x00A0;</span><span
cannam@86 3441 class="cmtt-8">&#x00A0;</span><span
cannam@86 3442 class="cmtt-8">&#x00A0;</span><span
cannam@86 3443 class="cmtt-8">&#x00A0;</span><span
cannam@86 3444 class="cmtt-8">&#x00A0;</span><span
cannam@86 3445 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 3446 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 3447 class="cmtt-8">&#x00A0;[value_vector]</span><span
cannam@86 3448 class="cmtt-8">&#x00A0;element</span><span
cannam@86 3449 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 3450 class="cmtt-8">&#x00A0;=</span>
cannam@86 3451 <br class="fancyvrb" /><a
cannam@86 3452 id="x1-56012r6"></a><span
cannam@86 3453 class="cmr-6">6</span><span
cannam@86 3454 class="cmtt-8">&#x00A0;</span><span
cannam@86 3455 class="cmtt-8">&#x00A0;</span><span
cannam@86 3456 class="cmtt-8">&#x00A0;</span><span
cannam@86 3457 class="cmtt-8">&#x00A0;</span><span
cannam@86 3458 class="cmtt-8">&#x00A0;</span><span
cannam@86 3459 class="cmtt-8">&#x00A0;</span><span
cannam@86 3460 class="cmtt-8">&#x00A0;</span><span
cannam@86 3461 class="cmtt-8">&#x00A0;</span><span
cannam@86 3462 class="cmtt-8">&#x00A0;</span><span
cannam@86 3463 class="cmtt-8">&#x00A0;</span><span
cannam@86 3464 class="cmtt-8">&#x00A0;</span><span
cannam@86 3465 class="cmtt-8">&#x00A0;</span><span
cannam@86 3466 class="cmtt-8">&#x00A0;</span><span
cannam@86 3467 class="cmtt-8">&#x00A0;(</span><span
cannam@86 3468 class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
cannam@86 3469 class="cmtt-8">&#x00A0;array</span><span
cannam@86 3470 class="cmtt-8">&#x00A0;element</span><span
cannam@86 3471 class="cmtt-8">&#x00A0;number</span><span
cannam@86 3472 class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
cannam@86 3473 class="cmtt-8">&#x00A0;)</span><span
cannam@86 3474 class="cmtt-8">&#x00A0;*</span>
cannam@86 3475 <br class="fancyvrb" /><a
cannam@86 3476 id="x1-56014r7"></a><span
cannam@86 3477 class="cmr-6">7</span><span
cannam@86 3478 class="cmtt-8">&#x00A0;</span><span
cannam@86 3479 class="cmtt-8">&#x00A0;</span><span
cannam@86 3480 class="cmtt-8">&#x00A0;</span><span
cannam@86 3481 class="cmtt-8">&#x00A0;</span><span
cannam@86 3482 class="cmtt-8">&#x00A0;</span><span
cannam@86 3483 class="cmtt-8">&#x00A0;</span><span
cannam@86 3484 class="cmtt-8">&#x00A0;</span><span
cannam@86 3485 class="cmtt-8">&#x00A0;</span><span
cannam@86 3486 class="cmtt-8">&#x00A0;</span><span
cannam@86 3487 class="cmtt-8">&#x00A0;</span><span
cannam@86 3488 class="cmtt-8">&#x00A0;</span><span
cannam@86 3489 class="cmtt-8">&#x00A0;</span><span
cannam@86 3490 class="cmtt-8">&#x00A0;</span><span
cannam@86 3491 class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
cannam@86 3492 class="cmtt-8">&#x00A0;+</span><span
cannam@86 3493 class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
cannam@86 3494 class="cmtt-8">&#x00A0;+</span><span
cannam@86 3495 class="cmtt-8">&#x00A0;[last];</span>
cannam@86 3496 <br class="fancyvrb" /><a
cannam@86 3497 id="x1-56016r8"></a><span
cannam@86 3498 class="cmr-6">8</span><span
cannam@86 3499 class="cmtt-8">&#x00A0;</span><span
cannam@86 3500 class="cmtt-8">&#x00A0;</span>
cannam@86 3501 <br class="fancyvrb" /><a
cannam@86 3502 id="x1-56018r9"></a><span
cannam@86 3503 class="cmr-6">9</span><span
cannam@86 3504 class="cmtt-8">&#x00A0;</span><span
cannam@86 3505 class="cmtt-8">&#x00A0;</span><span
cannam@86 3506 class="cmtt-8">&#x00A0;</span><span
cannam@86 3507 class="cmtt-8">&#x00A0;</span><span
cannam@86 3508 class="cmtt-8">&#x00A0;</span><span
cannam@86 3509 class="cmtt-8">&#x00A0;</span><span
cannam@86 3510 class="cmtt-8">&#x00A0;</span><span
cannam@86 3511 class="cmtt-8">&#x00A0;</span><span
cannam@86 3512 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 3513 class="cmtt-8">&#x00A0;if</span><span
cannam@86 3514 class="cmtt-8">&#x00A0;(</span><span
cannam@86 3515 class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
cannam@86 3516 class="cmtt-8">&#x00A0;is</span><span
cannam@86 3517 class="cmtt-8">&#x00A0;set</span><span
cannam@86 3518 class="cmtt-8">&#x00A0;)</span><span
cannam@86 3519 class="cmtt-8">&#x00A0;then</span><span
cannam@86 3520 class="cmtt-8">&#x00A0;set</span><span
cannam@86 3521 class="cmtt-8">&#x00A0;[last]</span><span
cannam@86 3522 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3523 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 3524 class="cmtt-8">&#x00A0;[value_vector]</span><span
cannam@86 3525 class="cmtt-8">&#x00A0;element</span><span
cannam@86 3526 class="cmtt-8">&#x00A0;[i]</span>
cannam@86 3527 <br class="fancyvrb" /><a
cannam@86 3528 id="x1-56020r10"></a><span
cannam@86 3529 class="cmr-6">10</span><span
cannam@86 3530 class="cmtt-8">&#x00A0;</span><span
cannam@86 3531 class="cmtt-8">&#x00A0;</span>
cannam@86 3532 <br class="fancyvrb" /><a
cannam@86 3533 id="x1-56022r11"></a><span
cannam@86 3534 class="cmr-6">11</span><span
cannam@86 3535 class="cmtt-8">&#x00A0;</span><span
cannam@86 3536 class="cmtt-8">&#x00A0;</span><span
cannam@86 3537 class="cmtt-8">&#x00A0;</span><span
cannam@86 3538 class="cmtt-8">&#x00A0;</span><span
cannam@86 3539 class="cmtt-8">&#x00A0;</span><span
cannam@86 3540 class="cmtt-8">&#x00A0;</span><span
cannam@86 3541 class="cmtt-8">&#x00A0;</span><span
cannam@86 3542 class="cmtt-8">&#x00A0;</span><span
cannam@86 3543 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 3544 class="cmtt-8">&#x00A0;increment</span><span
cannam@86 3545 class="cmtt-8">&#x00A0;[multiplicand_offset]</span>
cannam@86 3546 <br class="fancyvrb" /><a
cannam@86 3547 id="x1-56024r12"></a><span
cannam@86 3548 class="cmr-6">12</span><span
cannam@86 3549 class="cmtt-8">&#x00A0;</span><span
cannam@86 3550 class="cmtt-8">&#x00A0;</span>
cannam@86 3551 <br class="fancyvrb" /><a
cannam@86 3552 id="x1-56026r13"></a><span
cannam@86 3553 class="cmr-6">13</span><span
cannam@86 3554 class="cmtt-8">&#x00A0;</span><span
cannam@86 3555 class="cmtt-8">&#x00A0;</span><span
cannam@86 3556 class="cmtt-8">&#x00A0;</span><span
cannam@86 3557 class="cmtt-8">&#x00A0;</span><span
cannam@86 3558 class="cmtt-8">&#x00A0;</span><span
cannam@86 3559 class="cmtt-8">&#x00A0;</span><span
cannam@86 3560 class="cmtt-8">&#x00A0;</span><span
cannam@86 3561 class="cmsy-8">}</span>
cannam@86 3562 <br class="fancyvrb" /><a
cannam@86 3563 id="x1-56028r14"></a><span
cannam@86 3564 class="cmr-6">14</span><span
cannam@86 3565 class="cmtt-8">&#x00A0;</span><span
cannam@86 3566 class="cmtt-8">&#x00A0;</span>
cannam@86 3567 <br class="fancyvrb" /><a
cannam@86 3568 id="x1-56030r15"></a><span
cannam@86 3569 class="cmr-6">15</span><span
cannam@86 3570 class="cmtt-8">&#x00A0;</span><span
cannam@86 3571 class="cmtt-8">&#x00A0;</span><span
cannam@86 3572 class="cmtt-8">&#x00A0;</span><span
cannam@86 3573 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 3574 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 3575 class="cmtt-8">&#x00A0;calculation</span><span
cannam@86 3576 class="cmtt-8">&#x00A0;completed.</span>
cannam@86 3577 </div>
cannam@86 3578 <!--l. 370--><p class="noindent" >
cannam@86 3579 <h4 class="subsectionHead"><span class="titlemark">3.3. </span> <a
cannam@86 3580 id="x1-570003.3"></a>Use of the codebook abstraction</h4>
cannam@86 3581 <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
cannam@86 3582 specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
cannam@86 3583 then returns that entry number to the decoder (when used in a scalar entropy coding context), or
cannam@86 3584 uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
cannam@86 3585 used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
cannam@86 3586 call to the codebook mechanism requests either a scalar entry number or a lookup
cannam@86 3587 vector.
cannam@86 3588 <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
cannam@86 3589 decode using a codebook of lookup type 0 in any context expecting a vector return
cannam@86 3590 value (even in a case where a vector of dimension one) is forbidden. If decoder setup
cannam@86 3591 or decode requests such an action, that is an error condition rendering the packet
cannam@86 3592
cannam@86 3593
cannam@86 3594
cannam@86 3595 undecodable.
cannam@86 3596 <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
cannam@86 3597 next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
cannam@86 3598 codeword in the codebook. This process can be though of as logically walking the
cannam@86 3599 Huffman decode tree by reading one bit at a time from the bitstream, and using the
cannam@86 3600 bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
cannam@86 3601 branch (right in the above examples). Walking the tree finishes when the decode process
cannam@86 3602 hits a leaf in the decision tree; the result is the entry number corresponding to that
cannam@86 3603 leaf. Reading past the end of a packet propagates the &#8217;end-of-stream&#8217; condition to the
cannam@86 3604 decoder.
cannam@86 3605 <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
cannam@86 3606 value.
cannam@86 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
cannam@86 3608 table. The value returned to the decoder is the vector of scalars corresponding to this
cannam@86 3609 offset.
cannam@86 3610
cannam@86 3611
cannam@86 3612
cannam@86 3613
cannam@86 3614
cannam@86 3615
cannam@86 3616 <h3 class="sectionHead"><span class="titlemark">4. </span> <a
cannam@86 3617 id="x1-580004"></a>Codec Setup and Packet Decode</h3>
cannam@86 3618 <!--l. 7--><p class="noindent" >
cannam@86 3619 <h4 class="subsectionHead"><span class="titlemark">4.1. </span> <a
cannam@86 3620 id="x1-590004.1"></a>Overview</h4>
cannam@86 3621 <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
cannam@86 3622 of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
cannam@86 3623 process, which is provided in <a
cannam@86 3624 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a
cannam@86 3625 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221;. <a
cannam@86 3626 href="#x1-360002">Section&#x00A0;2</a>,
cannam@86 3627 &#8220;<a
cannam@86 3628 href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; covers reading and writing bit fields from and to bitstream
cannam@86 3629 packets.
cannam@86 3630 <!--l. 17--><p class="noindent" >
cannam@86 3631 <h4 class="subsectionHead"><span class="titlemark">4.2. </span> <a
cannam@86 3632 id="x1-600004.2"></a>Header decode and decode setup</h4>
cannam@86 3633 <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
cannam@86 3634 identification header, the comments header, and the setup header. All are required for decode
cannam@86 3635 compliance. An end-of-packet condition during decoding the first or third header packet renders
cannam@86 3636 the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
cannam@86 3637 condition.
cannam@86 3638 <!--l. 26--><p class="noindent" >
cannam@86 3639 <h5 class="subsubsectionHead"><span class="titlemark">4.2.1. </span> <a
cannam@86 3640 id="x1-610004.2.1"></a>Common header decode</h5>
cannam@86 3641 <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields.
cannam@86 3642 <!--l. 31--><p class="noindent" >
cannam@86 3643 <div class="fancyvrb" id="fancyvrb20">
cannam@86 3644 <a
cannam@86 3645 id="x1-61002r1"></a><span
cannam@86 3646 class="cmr-6">1</span><span
cannam@86 3647 class="cmtt-8">&#x00A0;</span><span
cannam@86 3648 class="cmtt-8">&#x00A0;</span><span
cannam@86 3649 class="cmtt-8">&#x00A0;</span><span
cannam@86 3650 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 3651 class="cmtt-8">&#x00A0;[packet_type]</span><span
cannam@86 3652 class="cmtt-8">&#x00A0;:</span><span
cannam@86 3653 class="cmtt-8">&#x00A0;8</span><span
cannam@86 3654 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 3655 class="cmtt-8">&#x00A0;value</span>
cannam@86 3656 <br class="fancyvrb" /><a
cannam@86 3657 id="x1-61004r2"></a><span
cannam@86 3658 class="cmr-6">2</span><span
cannam@86 3659 class="cmtt-8">&#x00A0;</span><span
cannam@86 3660 class="cmtt-8">&#x00A0;</span><span
cannam@86 3661 class="cmtt-8">&#x00A0;</span><span
cannam@86 3662 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 3663 class="cmtt-8">&#x00A0;0x76,</span><span
cannam@86 3664 class="cmtt-8">&#x00A0;0x6f,</span><span
cannam@86 3665 class="cmtt-8">&#x00A0;0x72,</span><span
cannam@86 3666 class="cmtt-8">&#x00A0;0x62,</span><span
cannam@86 3667 class="cmtt-8">&#x00A0;0x69,</span><span
cannam@86 3668 class="cmtt-8">&#x00A0;0x73:</span><span
cannam@86 3669 class="cmtt-8">&#x00A0;the</span><span
cannam@86 3670 class="cmtt-8">&#x00A0;characters</span><span
cannam@86 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
cannam@86 3672 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3673 class="cmtt-8">&#x00A0;six</span><span
cannam@86 3674 class="cmtt-8">&#x00A0;octets</span>
cannam@86 3675 </div>
cannam@86 3676
cannam@86 3677
cannam@86 3678
cannam@86 3679 <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
cannam@86 3680 header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
cannam@86 3681 single bit of &#8217;0&#8217; is an audio packet). The packets must occur in the order of identification,
cannam@86 3682 comment, setup.
cannam@86 3683 <!--l. 44--><p class="noindent" >
cannam@86 3684 <h5 class="subsubsectionHead"><span class="titlemark">4.2.2. </span> <a
cannam@86 3685 id="x1-620004.2.2"></a>Identification header</h5>
cannam@86 3686 <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
cannam@86 3687 definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
cannam@86 3688 stream. The identification header is coded as follows:
cannam@86 3689 <!--l. 51--><p class="noindent" >
cannam@86 3690 <div class="fancyvrb" id="fancyvrb21">
cannam@86 3691 <a
cannam@86 3692 id="x1-62002r1"></a><span
cannam@86 3693 class="cmr-6">1</span><span
cannam@86 3694 class="cmtt-8">&#x00A0;</span><span
cannam@86 3695 class="cmtt-8">&#x00A0;</span><span
cannam@86 3696 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 3697 class="cmtt-8">&#x00A0;[vorbis_version]</span><span
cannam@86 3698 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3699 class="cmtt-8">&#x00A0;read</span><span
cannam@86 3700 class="cmtt-8">&#x00A0;32</span><span
cannam@86 3701 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 3702 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3703 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 3704 class="cmtt-8">&#x00A0;integer</span>
cannam@86 3705 <br class="fancyvrb" /><a
cannam@86 3706 id="x1-62004r2"></a><span
cannam@86 3707 class="cmr-6">2</span><span
cannam@86 3708 class="cmtt-8">&#x00A0;</span><span
cannam@86 3709 class="cmtt-8">&#x00A0;</span><span
cannam@86 3710 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 3711 class="cmtt-8">&#x00A0;[audio_channels]</span><span
cannam@86 3712 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3713 class="cmtt-8">&#x00A0;read</span><span
cannam@86 3714 class="cmtt-8">&#x00A0;8</span><span
cannam@86 3715 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 3716 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 3717 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3718 class="cmtt-8">&#x00A0;unsigned</span>
cannam@86 3719 <br class="fancyvrb" /><a
cannam@86 3720 id="x1-62006r3"></a><span
cannam@86 3721 class="cmr-6">3</span><span
cannam@86 3722 class="cmtt-8">&#x00A0;</span><span
cannam@86 3723 class="cmtt-8">&#x00A0;</span><span
cannam@86 3724 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 3725 class="cmtt-8">&#x00A0;[audio_sample_rate]</span><span
cannam@86 3726 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3727 class="cmtt-8">&#x00A0;read</span><span
cannam@86 3728 class="cmtt-8">&#x00A0;32</span><span
cannam@86 3729 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 3730 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3731 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 3732 class="cmtt-8">&#x00A0;integer</span>
cannam@86 3733 <br class="fancyvrb" /><a
cannam@86 3734 id="x1-62008r4"></a><span
cannam@86 3735 class="cmr-6">4</span><span
cannam@86 3736 class="cmtt-8">&#x00A0;</span><span
cannam@86 3737 class="cmtt-8">&#x00A0;</span><span
cannam@86 3738 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 3739 class="cmtt-8">&#x00A0;[bitrate_maximum]</span><span
cannam@86 3740 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3741 class="cmtt-8">&#x00A0;read</span><span
cannam@86 3742 class="cmtt-8">&#x00A0;32</span><span
cannam@86 3743 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 3744 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3745 class="cmtt-8">&#x00A0;signed</span><span
cannam@86 3746 class="cmtt-8">&#x00A0;integer</span>
cannam@86 3747 <br class="fancyvrb" /><a
cannam@86 3748 id="x1-62010r5"></a><span
cannam@86 3749 class="cmr-6">5</span><span
cannam@86 3750 class="cmtt-8">&#x00A0;</span><span
cannam@86 3751 class="cmtt-8">&#x00A0;</span><span
cannam@86 3752 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 3753 class="cmtt-8">&#x00A0;[bitrate_nominal]</span><span
cannam@86 3754 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3755 class="cmtt-8">&#x00A0;read</span><span
cannam@86 3756 class="cmtt-8">&#x00A0;32</span><span
cannam@86 3757 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 3758 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3759 class="cmtt-8">&#x00A0;signed</span><span
cannam@86 3760 class="cmtt-8">&#x00A0;integer</span>
cannam@86 3761 <br class="fancyvrb" /><a
cannam@86 3762 id="x1-62012r6"></a><span
cannam@86 3763 class="cmr-6">6</span><span
cannam@86 3764 class="cmtt-8">&#x00A0;</span><span
cannam@86 3765 class="cmtt-8">&#x00A0;</span><span
cannam@86 3766 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 3767 class="cmtt-8">&#x00A0;[bitrate_minimum]</span><span
cannam@86 3768 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3769 class="cmtt-8">&#x00A0;read</span><span
cannam@86 3770 class="cmtt-8">&#x00A0;32</span><span
cannam@86 3771 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 3772 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3773 class="cmtt-8">&#x00A0;signed</span><span
cannam@86 3774 class="cmtt-8">&#x00A0;integer</span>
cannam@86 3775 <br class="fancyvrb" /><a
cannam@86 3776 id="x1-62014r7"></a><span
cannam@86 3777 class="cmr-6">7</span><span
cannam@86 3778 class="cmtt-8">&#x00A0;</span><span
cannam@86 3779 class="cmtt-8">&#x00A0;</span><span
cannam@86 3780 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 3781 class="cmtt-8">&#x00A0;[blocksize_0]</span><span
cannam@86 3782 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3783 class="cmtt-8">&#x00A0;2</span><span
cannam@86 3784 class="cmtt-8">&#x00A0;exponent</span><span
cannam@86 3785 class="cmtt-8">&#x00A0;(read</span><span
cannam@86 3786 class="cmtt-8">&#x00A0;4</span><span
cannam@86 3787 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 3788 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3789 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 3790 class="cmtt-8">&#x00A0;integer)</span>
cannam@86 3791 <br class="fancyvrb" /><a
cannam@86 3792 id="x1-62016r8"></a><span
cannam@86 3793 class="cmr-6">8</span><span
cannam@86 3794 class="cmtt-8">&#x00A0;</span><span
cannam@86 3795 class="cmtt-8">&#x00A0;</span><span
cannam@86 3796 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 3797 class="cmtt-8">&#x00A0;[blocksize_1]</span><span
cannam@86 3798 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3799 class="cmtt-8">&#x00A0;2</span><span
cannam@86 3800 class="cmtt-8">&#x00A0;exponent</span><span
cannam@86 3801 class="cmtt-8">&#x00A0;(read</span><span
cannam@86 3802 class="cmtt-8">&#x00A0;4</span><span
cannam@86 3803 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 3804 class="cmtt-8">&#x00A0;as</span><span
cannam@86 3805 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 3806 class="cmtt-8">&#x00A0;integer)</span>
cannam@86 3807 <br class="fancyvrb" /><a
cannam@86 3808 id="x1-62018r9"></a><span
cannam@86 3809 class="cmr-6">9</span><span
cannam@86 3810 class="cmtt-8">&#x00A0;</span><span
cannam@86 3811 class="cmtt-8">&#x00A0;</span><span
cannam@86 3812 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 3813 class="cmtt-8">&#x00A0;[framing_flag]</span><span
cannam@86 3814 class="cmtt-8">&#x00A0;=</span><span
cannam@86 3815 class="cmtt-8">&#x00A0;read</span><span
cannam@86 3816 class="cmtt-8">&#x00A0;one</span><span
cannam@86 3817 class="cmtt-8">&#x00A0;bit</span>
cannam@86 3818 </div>
cannam@86 3819 <!--l. 63--><p class="noindent" ><span
cannam@86 3820 class="cmtt-12">[vorbis_version] </span>is to read &#8217;0&#8217; in order to be compatible with this document. Both
cannam@86 3821 <span
cannam@86 3822 class="cmtt-12">[audio_channels] </span>and <span
cannam@86 3823 class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
cannam@86 3824 blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span
cannam@86 3825 class="cmtt-12">[blocksize_0]</span>
cannam@86 3826 must be less than or equal to <span
cannam@86 3827 class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
cannam@86 3828 any of these conditions renders a stream undecodable.
cannam@86 3829 <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
cannam@86 3830 considerably off in purely VBR streams. The fields are meaningful only when greater than
cannam@86 3831 zero.
cannam@86 3832 <ul class="itemize1">
cannam@86 3833 <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
cannam@86 3834 fixed-rate bitstream
cannam@86 3835 </li>
cannam@86 3836 <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
cannam@86 3837
cannam@86 3838
cannam@86 3839
cannam@86 3840 </li>
cannam@86 3841 <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
cannam@86 3842 </li>
cannam@86 3843 <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
cannam@86 3844 <!--l. 85--><p class="noindent" >
cannam@86 3845 <h5 class="subsubsectionHead"><span class="titlemark">4.2.3. </span> <a
cannam@86 3846 id="x1-630004.2.3"></a>Comment header</h5>
cannam@86 3847 <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a
cannam@86 3848 href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a
cannam@86 3849 href="#x1-810005">comment field and
cannam@86 3850 header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
cannam@86 3851 <!--l. 90--><p class="noindent" >
cannam@86 3852 <h5 class="subsubsectionHead"><span class="titlemark">4.2.4. </span> <a
cannam@86 3853 id="x1-640004.2.4"></a>Setup header</h5>
cannam@86 3854 <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
cannam@86 3855 <div class="center"
cannam@86 3856 >
cannam@86 3857 <!--l. 94--><p class="noindent" >
cannam@86 3858
cannam@86 3859 <!--l. 95--><p class="noindent" ><img
cannam@86 3860 src="components.png" alt="PIC"
cannam@86 3861 >
cannam@86 3862 <br /> <div class="caption"
cannam@86 3863 ><span class="id">Figure&#x00A0;6: </span><span
cannam@86 3864 class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 -->
cannam@86 3865 </div>
cannam@86 3866 <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
cannam@86 3867 header contains, in order, the lists of codebook configurations, time-domain transform
cannam@86 3868 configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
cannam@86 3869 mapping configurations and mode configurations. It finishes with a framing bit of &#8217;1&#8217;. Header
cannam@86 3870 decode proceeds in the following order:
cannam@86 3871 <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3872 id="x1-650004.2.4"></a><span
cannam@86 3873 class="cmbx-12">Codebooks</span></span>
cannam@86 3874
cannam@86 3875
cannam@86 3876
cannam@86 3877 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 3878 1. </dt><dd
cannam@86 3879 class="enumerate-enumitem"><span
cannam@86 3880 class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
cannam@86 3881 </dd><dt class="enumerate-enumitem">
cannam@86 3882 2. </dt><dd
cannam@86 3883 class="enumerate-enumitem">Decode <span
cannam@86 3884 class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a
cannam@86 3885 href="#x1-470003">Section&#x00A0;3</a>,
cannam@86 3886 &#8220;<a
cannam@86 3887 href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>&#8221;. Save each configuration, in order, in an array
cannam@86 3888 of codebook configurations <span
cannam@86 3889 class="cmtt-12">[vorbis_codebook_configurations]</span>.</dd></dl>
cannam@86 3890 <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3891 id="x1-660004.2.4"></a><span
cannam@86 3892 class="cmbx-12">Time domain transforms</span></span>
cannam@86 3893 These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
cannam@86 3894 be read to maintain bitstream sync.
cannam@86 3895 <!--l. 127--><p class="noindent" >
cannam@86 3896 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 3897 1. </dt><dd
cannam@86 3898 class="enumerate-enumitem"><span
cannam@86 3899 class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
cannam@86 3900 </dd><dt class="enumerate-enumitem">
cannam@86 3901 2. </dt><dd
cannam@86 3902 class="enumerate-enumitem">read <span
cannam@86 3903 class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
cannam@86 3904 nonzero, this is an error condition and the stream is undecodable.</dd></dl>
cannam@86 3905 <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3906 id="x1-670004.2.4"></a><span
cannam@86 3907 class="cmbx-12">Floors</span></span>
cannam@86 3908 Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
cannam@86 3909 type.
cannam@86 3910 <!--l. 139--><p class="noindent" >
cannam@86 3911 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 3912 1. </dt><dd
cannam@86 3913 class="enumerate-enumitem"><span
cannam@86 3914 class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
cannam@86 3915 </dd><dt class="enumerate-enumitem">
cannam@86 3916 2. </dt><dd
cannam@86 3917 class="enumerate-enumitem">For each <span
cannam@86 3918 class="cmtt-12">[i] </span>of <span
cannam@86 3919 class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
cannam@86 3920 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 3921 a) </dt><dd
cannam@86 3922 class="enumerate-enumitem">read the floor type: vector <span
cannam@86 3923 class="cmtt-12">[vorbis_floor_types] </span>element <span
cannam@86 3924 class="cmtt-12">[i] </span>= read 16 bits
cannam@86 3925 as unsigned integer
cannam@86 3926 </dd><dt class="enumerate-enumitem">
cannam@86 3927 b) </dt><dd
cannam@86 3928 class="enumerate-enumitem">If the floor type is zero, decode the floor configuration as defined in <a
cannam@86 3929 href="#x1-890006">Section&#x00A0;6</a>,
cannam@86 3930 &#8220;<a
cannam@86 3931 href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>&#8221;; save this configuration in slot <span
cannam@86 3932 class="cmtt-12">[i] </span>of the floor
cannam@86 3933 configuration array <span
cannam@86 3934 class="cmtt-12">[vorbis_floor_configurations]</span>.
cannam@86 3935
cannam@86 3936
cannam@86 3937
cannam@86 3938 </dd><dt class="enumerate-enumitem">
cannam@86 3939 c) </dt><dd
cannam@86 3940 class="enumerate-enumitem">If the floor type is one, decode the floor configuration as defined in <a
cannam@86 3941 href="#x1-950007">Section&#x00A0;7</a>,
cannam@86 3942 &#8220;<a
cannam@86 3943 href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>&#8221;; save this configuration in slot <span
cannam@86 3944 class="cmtt-12">[i] </span>of the floor
cannam@86 3945 configuration array <span
cannam@86 3946 class="cmtt-12">[vorbis_floor_configurations]</span>.
cannam@86 3947 </dd><dt class="enumerate-enumitem">
cannam@86 3948 d) </dt><dd
cannam@86 3949 class="enumerate-enumitem">If the the floor type is greater than one, this stream is undecodable; ERROR
cannam@86 3950 CONDITION</dd></dl>
cannam@86 3951 </dd></dl>
cannam@86 3952 <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3953 id="x1-680004.2.4"></a><span
cannam@86 3954 class="cmbx-12">Residues</span></span>
cannam@86 3955 Vorbis uses three residue types; header decode of each type is identical.
cannam@86 3956 <!--l. 163--><p class="noindent" >
cannam@86 3957 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 3958 1. </dt><dd
cannam@86 3959 class="enumerate-enumitem"><span
cannam@86 3960 class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
cannam@86 3961 </dd><dt class="enumerate-enumitem">
cannam@86 3962 2. </dt><dd
cannam@86 3963 class="enumerate-enumitem">For each of <span
cannam@86 3964 class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
cannam@86 3965 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 3966 a) </dt><dd
cannam@86 3967 class="enumerate-enumitem">read the residue type; vector <span
cannam@86 3968 class="cmtt-12">[vorbis_residue_types] </span>element <span
cannam@86 3969 class="cmtt-12">[i] </span>= read 16
cannam@86 3970 bits as unsigned integer
cannam@86 3971 </dd><dt class="enumerate-enumitem">
cannam@86 3972 b) </dt><dd
cannam@86 3973 class="enumerate-enumitem">If the residue type is zero, one or two, decode the residue configuration as defined
cannam@86 3974 in <a
cannam@86 3975 href="#x1-1020008">Section&#x00A0;8</a>, &#8220;<a
cannam@86 3976 href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>&#8221;; save this configuration in slot <span
cannam@86 3977 class="cmtt-12">[i] </span>of
cannam@86 3978 the residue configuration array <span
cannam@86 3979 class="cmtt-12">[vorbis_residue_configurations]</span>.
cannam@86 3980 </dd><dt class="enumerate-enumitem">
cannam@86 3981 c) </dt><dd
cannam@86 3982 class="enumerate-enumitem">If the the residue type is greater than two, this stream is undecodable; ERROR
cannam@86 3983 CONDITION</dd></dl>
cannam@86 3984 </dd></dl>
cannam@86 3985 <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 3986 id="x1-690004.2.4"></a><span
cannam@86 3987 class="cmbx-12">Mappings</span></span>
cannam@86 3988 Mappings are used to set up specific pipelines for encoding multichannel audio with varying
cannam@86 3989 channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
cannam@86 3990 channel mappings.
cannam@86 3991
cannam@86 3992
cannam@86 3993
cannam@86 3994 <!--l. 188--><p class="noindent" >
cannam@86 3995 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 3996 1. </dt><dd
cannam@86 3997 class="enumerate-enumitem"><span
cannam@86 3998 class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
cannam@86 3999 </dd><dt class="enumerate-enumitem">
cannam@86 4000 2. </dt><dd
cannam@86 4001 class="enumerate-enumitem">For each <span
cannam@86 4002 class="cmtt-12">[i] </span>of <span
cannam@86 4003 class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
cannam@86 4004 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4005 a) </dt><dd
cannam@86 4006 class="enumerate-enumitem">read the mapping type: 16 bits as unsigned integer. There&#8217;s no reason to save
cannam@86 4007 the mapping type in Vorbis I.
cannam@86 4008 </dd><dt class="enumerate-enumitem">
cannam@86 4009 b) </dt><dd
cannam@86 4010 class="enumerate-enumitem">If the mapping type is nonzero, the stream is undecodable
cannam@86 4011 </dd><dt class="enumerate-enumitem">
cannam@86 4012 c) </dt><dd
cannam@86 4013 class="enumerate-enumitem">If the mapping type is zero:
cannam@86 4014 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4015 i. </dt><dd
cannam@86 4016 class="enumerate-enumitem">read 1 bit as a boolean flag
cannam@86 4017 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4018 A. </dt><dd
cannam@86 4019 class="enumerate-enumitem">if set, <span
cannam@86 4020 class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
cannam@86 4021 and add one
cannam@86 4022 </dd><dt class="enumerate-enumitem">
cannam@86 4023 B. </dt><dd
cannam@86 4024 class="enumerate-enumitem">if unset, <span
cannam@86 4025 class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</dd></dl>
cannam@86 4026 </dd><dt class="enumerate-enumitem">
cannam@86 4027 ii. </dt><dd
cannam@86 4028 class="enumerate-enumitem">read 1 bit as a boolean flag
cannam@86 4029 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4030 A. </dt><dd
cannam@86 4031 class="enumerate-enumitem">if set, square polar channel mapping is in use:
cannam@86 4032 <ul class="itemize1">
cannam@86 4033 <li class="itemize"><span
cannam@86 4034 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= read 8 bits as unsigned
cannam@86 4035 integer and add one
cannam@86 4036 </li>
cannam@86 4037 <li class="itemize">for <span
cannam@86 4038 class="cmtt-12">[j] </span>each of <span
cannam@86 4039 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
cannam@86 4040 <ul class="itemize2">
cannam@86 4041 <li class="itemize">vector <span
cannam@86 4042 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
cannam@86 4043 class="cmtt-12">[j]</span>= read
cannam@86 4044 <a
cannam@86 4045 href="#x1-1170009.2.1">ilog</a>(<span
cannam@86 4046 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
cannam@86 4047 </li>
cannam@86 4048 <li class="itemize">vector <span
cannam@86 4049 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
cannam@86 4050 class="cmtt-12">[j]</span>= read
cannam@86 4051 <a
cannam@86 4052 href="#x1-1170009.2.1">ilog</a>(<span
cannam@86 4053 class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
cannam@86 4054 </li>
cannam@86 4055
cannam@86 4056
cannam@86 4057
cannam@86 4058 <li class="itemize">the numbers read in the above two steps are channel numbers
cannam@86 4059 representing the channel to treat as magnitude and the channel
cannam@86 4060 to treat as angle, respectively. If for any coupling step the
cannam@86 4061 angle channel number equals the magnitude channel number, the
cannam@86 4062 magnitude channel number is greater than <span
cannam@86 4063 class="cmtt-12">[audio_channels]</span>-1, or
cannam@86 4064 the angle channel is greater than <span
cannam@86 4065 class="cmtt-12">[audio_channels]</span>-1, the stream
cannam@86 4066 is undecodable.</li></ul>
cannam@86 4067 </li></ul>
cannam@86 4068 </dd><dt class="enumerate-enumitem">
cannam@86 4069 B. </dt><dd
cannam@86 4070 class="enumerate-enumitem">if unset, <span
cannam@86 4071 class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</dd></dl>
cannam@86 4072 </dd><dt class="enumerate-enumitem">
cannam@86 4073 iii. </dt><dd
cannam@86 4074 class="enumerate-enumitem">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
cannam@86 4075 </dd><dt class="enumerate-enumitem">
cannam@86 4076 iv. </dt><dd
cannam@86 4077 class="enumerate-enumitem">if <span
cannam@86 4078 class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
cannam@86 4079 settings. For each <span
cannam@86 4080 class="cmtt-12">[j] </span>of <span
cannam@86 4081 class="cmtt-12">[audio_channels] </span>channels:
cannam@86 4082 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4083 A. </dt><dd
cannam@86 4084 class="enumerate-enumitem">vector <span
cannam@86 4085 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
cannam@86 4086 class="cmtt-12">[j] </span>= read 4 bits as unsigned
cannam@86 4087 integer
cannam@86 4088 </dd><dt class="enumerate-enumitem">
cannam@86 4089 B. </dt><dd
cannam@86 4090 class="enumerate-enumitem">if the value is greater than the highest numbered submap
cannam@86 4091 (<span
cannam@86 4092 class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
cannam@86 4093 the stream undecodable</dd></dl>
cannam@86 4094 </dd><dt class="enumerate-enumitem">
cannam@86 4095 v. </dt><dd
cannam@86 4096 class="enumerate-enumitem">for each submap <span
cannam@86 4097 class="cmtt-12">[j] </span>of <span
cannam@86 4098 class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
cannam@86 4099 residue numbers for use in decoding that submap:
cannam@86 4100 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4101 A. </dt><dd
cannam@86 4102 class="enumerate-enumitem">read and discard 8 bits (the unused time configuration placeholder)
cannam@86 4103 </dd><dt class="enumerate-enumitem">
cannam@86 4104 B. </dt><dd
cannam@86 4105 class="enumerate-enumitem">read 8 bits as unsigned integer for the floor number; save in vector
cannam@86 4106 <span
cannam@86 4107 class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span
cannam@86 4108 class="cmtt-12">[j]</span>
cannam@86 4109 </dd><dt class="enumerate-enumitem">
cannam@86 4110 C. </dt><dd
cannam@86 4111 class="enumerate-enumitem">verify the floor number is not greater than the highest number floor
cannam@86 4112 configured for the bitstream. If it is, the bitstream is undecodable
cannam@86 4113 </dd><dt class="enumerate-enumitem">
cannam@86 4114 D. </dt><dd
cannam@86 4115 class="enumerate-enumitem">read 8 bits as unsigned integer for the residue number; save in vector
cannam@86 4116 <span
cannam@86 4117 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
cannam@86 4118 class="cmtt-12">[j]</span>
cannam@86 4119
cannam@86 4120
cannam@86 4121
cannam@86 4122 </dd><dt class="enumerate-enumitem">
cannam@86 4123 E. </dt><dd
cannam@86 4124 class="enumerate-enumitem">verify the residue number is not greater than the highest number residue
cannam@86 4125 configured for the bitstream. If it is, the bitstream is undecodable</dd></dl>
cannam@86 4126 </dd><dt class="enumerate-enumitem">
cannam@86 4127 vi. </dt><dd
cannam@86 4128 class="enumerate-enumitem">save this mapping configuration in slot <span
cannam@86 4129 class="cmtt-12">[i] </span>of the mapping configuration array
cannam@86 4130 <span
cannam@86 4131 class="cmtt-12">[vorbis_mapping_configurations]</span>.</dd></dl>
cannam@86 4132 </dd></dl>
cannam@86 4133 </dd></dl>
cannam@86 4134 <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 4135 id="x1-700004.2.4"></a><span
cannam@86 4136 class="cmbx-12">Modes</span></span>
cannam@86 4137 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4138 1. </dt><dd
cannam@86 4139 class="enumerate-enumitem"><span
cannam@86 4140 class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
cannam@86 4141 </dd><dt class="enumerate-enumitem">
cannam@86 4142 2. </dt><dd
cannam@86 4143 class="enumerate-enumitem">For each of <span
cannam@86 4144 class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
cannam@86 4145 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4146 a) </dt><dd
cannam@86 4147 class="enumerate-enumitem"><span
cannam@86 4148 class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
cannam@86 4149 </dd><dt class="enumerate-enumitem">
cannam@86 4150 b) </dt><dd
cannam@86 4151 class="enumerate-enumitem"><span
cannam@86 4152 class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
cannam@86 4153 </dd><dt class="enumerate-enumitem">
cannam@86 4154 c) </dt><dd
cannam@86 4155 class="enumerate-enumitem"><span
cannam@86 4156 class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
cannam@86 4157 </dd><dt class="enumerate-enumitem">
cannam@86 4158 d) </dt><dd
cannam@86 4159 class="enumerate-enumitem"><span
cannam@86 4160 class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
cannam@86 4161 </dd><dt class="enumerate-enumitem">
cannam@86 4162 e) </dt><dd
cannam@86 4163 class="enumerate-enumitem">verify ranges; zero is the only legal value in
cannam@86 4164 Vorbis I for <span
cannam@86 4165 class="cmtt-12">[vorbis_mode_windowtype] </span>and <span
cannam@86 4166 class="cmtt-12">[vorbis_mode_transformtype]</span>.
cannam@86 4167 <span
cannam@86 4168 class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
cannam@86 4169 in use. Any illegal values render the stream undecodable.
cannam@86 4170 </dd><dt class="enumerate-enumitem">
cannam@86 4171 f) </dt><dd
cannam@86 4172 class="enumerate-enumitem">save this mode configuration in slot <span
cannam@86 4173 class="cmtt-12">[i] </span>of the mode configuration array
cannam@86 4174 <span
cannam@86 4175 class="cmtt-12">[vorbis_mode_configurations]</span>.</dd></dl>
cannam@86 4176 </dd><dt class="enumerate-enumitem">
cannam@86 4177 3. </dt><dd
cannam@86 4178 class="enumerate-enumitem">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
cannam@86 4179 decodable.</dd></dl>
cannam@86 4180
cannam@86 4181
cannam@86 4182
cannam@86 4183 <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
cannam@86 4184 <!--l. 277--><p class="noindent" >
cannam@86 4185 <h4 class="subsectionHead"><span class="titlemark">4.3. </span> <a
cannam@86 4186 id="x1-710004.3"></a>Audio packet decode and synthesis</h4>
cannam@86 4187 <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
cannam@86 4188 audio packet decode is to read and verify the packet type. <span
cannam@86 4189 class="cmti-12">A non-audio packet when audio is</span>
cannam@86 4190 <span
cannam@86 4191 class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
cannam@86 4192 <span
cannam@86 4193 class="cmti-12">packet and not attempt decoding it to audio</span>.
cannam@86 4194 <!--l. 286--><p class="noindent" >
cannam@86 4195 <h5 class="subsubsectionHead"><span class="titlemark">4.3.1. </span> <a
cannam@86 4196 id="x1-720004.3.1"></a>packet type, mode and window decode</h5>
cannam@86 4197 <!--l. 289--><p class="noindent" >
cannam@86 4198 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4199 1. </dt><dd
cannam@86 4200 class="enumerate-enumitem">read 1 bit <span
cannam@86 4201 class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
cannam@86 4202 </dd><dt class="enumerate-enumitem">
cannam@86 4203 2. </dt><dd
cannam@86 4204 class="enumerate-enumitem">read <a
cannam@86 4205 href="#x1-1170009.2.1">ilog</a>([vorbis_mode_count]-1) bits <span
cannam@86 4206 class="cmtt-12">[mode_number]</span>
cannam@86 4207 </dd><dt class="enumerate-enumitem">
cannam@86 4208 3. </dt><dd
cannam@86 4209 class="enumerate-enumitem">decode blocksize <span
cannam@86 4210 class="cmtt-12">[n] </span>is equal to <span
cannam@86 4211 class="cmtt-12">[blocksize_0] </span>if <span
cannam@86 4212 class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
cannam@86 4213 else <span
cannam@86 4214 class="cmtt-12">[n] </span>is equal to <span
cannam@86 4215 class="cmtt-12">[blocksize_1]</span>.
cannam@86 4216 </dd><dt class="enumerate-enumitem">
cannam@86 4217 4. </dt><dd
cannam@86 4218 class="enumerate-enumitem">perform window selection and setup; this window is used later by the inverse
cannam@86 4219 MDCT:
cannam@86 4220 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4221 a) </dt><dd
cannam@86 4222 class="enumerate-enumitem">if this is a long window (the <span
cannam@86 4223 class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
cannam@86 4224 set):
cannam@86 4225 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4226 i. </dt><dd
cannam@86 4227 class="enumerate-enumitem">read 1 bit for <span
cannam@86 4228 class="cmtt-12">[previous_window_flag]</span>
cannam@86 4229 </dd><dt class="enumerate-enumitem">
cannam@86 4230 ii. </dt><dd
cannam@86 4231 class="enumerate-enumitem">read 1 bit for <span
cannam@86 4232 class="cmtt-12">[next_window_flag]</span>
cannam@86 4233
cannam@86 4234
cannam@86 4235
cannam@86 4236 </dd><dt class="enumerate-enumitem">
cannam@86 4237 iii. </dt><dd
cannam@86 4238 class="enumerate-enumitem">if <span
cannam@86 4239 class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
cannam@86 4240 be a hybrid window for lapping with a short block. See <a
cannam@86 4241 href="#paragraph.1" >paragraph&#x00A0;<a
cannam@86 4242 href="#x1-260001.3.2">1.3.2</a></a>,
cannam@86 4243 &#8220;<a
cannam@86 4244 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
cannam@86 4245 overlapping dissimilar windows. Else, the left half window will have normal
cannam@86 4246 long shape.
cannam@86 4247 </dd><dt class="enumerate-enumitem">
cannam@86 4248 iv. </dt><dd
cannam@86 4249 class="enumerate-enumitem">if <span
cannam@86 4250 class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
cannam@86 4251 a hybrid window for lapping with a short block. See <a
cannam@86 4252 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>,
cannam@86 4253 &#8220;<a
cannam@86 4254 href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
cannam@86 4255 overlapping dissimilar windows. Else, the left right window will have normal
cannam@86 4256 long shape.</dd></dl>
cannam@86 4257 </dd><dt class="enumerate-enumitem">
cannam@86 4258 b) </dt><dd
cannam@86 4259 class="enumerate-enumitem">if this is a short window, the window is always the same short-window
cannam@86 4260 shape.</dd></dl>
cannam@86 4261 </dd></dl>
cannam@86 4262 <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span
cannam@86 4263 class="cmmi-12">y </span>= sin(<img
cannam@86 4264 src="Vorbis_I_spec1x.png" alt="&pi;2" class="frac" align="middle"> <span
cannam@86 4265 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
cannam@86 4266 class="cmr-8">2</span></sup>((<span
cannam@86 4267 class="cmmi-12">x </span>+ 0<span
cannam@86 4268 class="cmmi-12">.</span>5)<span
cannam@86 4269 class="cmmi-12">&#x2215;n </span><span
cannam@86 4270 class="cmsy-10x-x-120">&lowast; </span><span
cannam@86 4271 class="cmmi-12">&pi;</span>)), where <span
cannam@86 4272 class="cmmi-12">n </span>is window
cannam@86 4273 size and <span
cannam@86 4274 class="cmmi-12">x </span>ranges 0<span
cannam@86 4275 class="cmmi-12">&hellip;</span><span
cannam@86 4276 class="cmmi-12">n</span><span
cannam@86 4277 class="cmsy-10x-x-120">&minus; </span>1, but dissimilar lapping requirements can affect overall shape. Window
cannam@86 4278 generation proceeds as follows:
cannam@86 4279 <!--l. 327--><p class="noindent" >
cannam@86 4280 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4281 1. </dt><dd
cannam@86 4282 class="enumerate-enumitem"><span
cannam@86 4283 class="cmtt-12">[window_center] </span>= <span
cannam@86 4284 class="cmtt-12">[n] </span>/ 2
cannam@86 4285 </dd><dt class="enumerate-enumitem">
cannam@86 4286 2. </dt><dd
cannam@86 4287 class="enumerate-enumitem">if (<span
cannam@86 4288 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
cannam@86 4289 class="cmtt-12">[previous_window_flag] </span>is not set)
cannam@86 4290 then
cannam@86 4291 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4292 a) </dt><dd
cannam@86 4293 class="enumerate-enumitem"><span
cannam@86 4294 class="cmtt-12">[left_window_start] </span>= <span
cannam@86 4295 class="cmtt-12">[n]</span>/4 - <span
cannam@86 4296 class="cmtt-12">[blocksize_0]</span>/4
cannam@86 4297 </dd><dt class="enumerate-enumitem">
cannam@86 4298 b) </dt><dd
cannam@86 4299 class="enumerate-enumitem"><span
cannam@86 4300 class="cmtt-12">[left_window_end] </span>= <span
cannam@86 4301 class="cmtt-12">[n]</span>/4 + <span
cannam@86 4302 class="cmtt-12">[blocksize_0]</span>/4
cannam@86 4303 </dd><dt class="enumerate-enumitem">
cannam@86 4304 c) </dt><dd
cannam@86 4305 class="enumerate-enumitem"><span
cannam@86 4306 class="cmtt-12">[left_n] </span>= <span
cannam@86 4307 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
cannam@86 4308 <!--l. 336--><p class="noindent" >else
cannam@86 4309 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4310 a) </dt><dd
cannam@86 4311 class="enumerate-enumitem"><span
cannam@86 4312 class="cmtt-12">[left_window_start] </span>= 0
cannam@86 4313 </dd><dt class="enumerate-enumitem">
cannam@86 4314 b) </dt><dd
cannam@86 4315 class="enumerate-enumitem"><span
cannam@86 4316 class="cmtt-12">[left_window_end] </span>= <span
cannam@86 4317 class="cmtt-12">[window_center]</span>
cannam@86 4318
cannam@86 4319
cannam@86 4320
cannam@86 4321 </dd><dt class="enumerate-enumitem">
cannam@86 4322 c) </dt><dd
cannam@86 4323 class="enumerate-enumitem"><span
cannam@86 4324 class="cmtt-12">[left_n] </span>= <span
cannam@86 4325 class="cmtt-12">[n]</span>/2</dd></dl>
cannam@86 4326 </dd><dt class="enumerate-enumitem">
cannam@86 4327 3. </dt><dd
cannam@86 4328 class="enumerate-enumitem">if (<span
cannam@86 4329 class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
cannam@86 4330 class="cmtt-12">[next_window_flag] </span>is not set) then
cannam@86 4331 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4332 a) </dt><dd
cannam@86 4333 class="enumerate-enumitem"><span
cannam@86 4334 class="cmtt-12">[right_window_start] </span>= <span
cannam@86 4335 class="cmtt-12">[n]*3</span>/4 - <span
cannam@86 4336 class="cmtt-12">[blocksize_0]</span>/4
cannam@86 4337 </dd><dt class="enumerate-enumitem">
cannam@86 4338 b) </dt><dd
cannam@86 4339 class="enumerate-enumitem"><span
cannam@86 4340 class="cmtt-12">[right_window_end] </span>= <span
cannam@86 4341 class="cmtt-12">[n]*3</span>/4 + <span
cannam@86 4342 class="cmtt-12">[blocksize_0]</span>/4
cannam@86 4343 </dd><dt class="enumerate-enumitem">
cannam@86 4344 c) </dt><dd
cannam@86 4345 class="enumerate-enumitem"><span
cannam@86 4346 class="cmtt-12">[right_n] </span>= <span
cannam@86 4347 class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
cannam@86 4348 <!--l. 352--><p class="noindent" >else
cannam@86 4349 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4350 a) </dt><dd
cannam@86 4351 class="enumerate-enumitem"><span
cannam@86 4352 class="cmtt-12">[right_window_start] </span>= <span
cannam@86 4353 class="cmtt-12">[window_center]</span>
cannam@86 4354 </dd><dt class="enumerate-enumitem">
cannam@86 4355 b) </dt><dd
cannam@86 4356 class="enumerate-enumitem"><span
cannam@86 4357 class="cmtt-12">[right_window_end] </span>= <span
cannam@86 4358 class="cmtt-12">[n]</span>
cannam@86 4359 </dd><dt class="enumerate-enumitem">
cannam@86 4360 c) </dt><dd
cannam@86 4361 class="enumerate-enumitem"><span
cannam@86 4362 class="cmtt-12">[right_n] </span>= <span
cannam@86 4363 class="cmtt-12">[n]</span>/2</dd></dl>
cannam@86 4364 </dd><dt class="enumerate-enumitem">
cannam@86 4365 4. </dt><dd
cannam@86 4366 class="enumerate-enumitem">window from range 0 ... <span
cannam@86 4367 class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
cannam@86 4368 </dd><dt class="enumerate-enumitem">
cannam@86 4369 5. </dt><dd
cannam@86 4370 class="enumerate-enumitem">for <span
cannam@86 4371 class="cmtt-12">[i] </span>in range <span
cannam@86 4372 class="cmtt-12">[left_window_start] </span>... <span
cannam@86 4373 class="cmtt-12">[left_window_end]</span>-1, window(<span
cannam@86 4374 class="cmtt-12">[i]</span>) =
cannam@86 4375 sin(<img
cannam@86 4376 src="Vorbis_I_spec2x.png" alt="&pi;
cannam@86 4377 2" class="frac" align="middle"> <span
cannam@86 4378 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
cannam@86 4379 class="cmr-8">2</span></sup>( (<span
cannam@86 4380 class="cmtt-12">[i]</span>-<span
cannam@86 4381 class="cmtt-12">[left_window_start]</span>+0.5) / <span
cannam@86 4382 class="cmtt-12">[left_n] </span><span
cannam@86 4383 class="cmsy-10x-x-120">&lowast;</span><img
cannam@86 4384 src="Vorbis_I_spec3x.png" alt="&pi;
cannam@86 4385 2" class="frac" align="middle">) )
cannam@86 4386 </dd><dt class="enumerate-enumitem">
cannam@86 4387 6. </dt><dd
cannam@86 4388 class="enumerate-enumitem">window from range <span
cannam@86 4389 class="cmtt-12">[left_window_end] </span>... <span
cannam@86 4390 class="cmtt-12">[right_window_start]</span>-1 inclusive is
cannam@86 4391 one
cannam@86 4392 </dd><dt class="enumerate-enumitem">
cannam@86 4393 7. </dt><dd
cannam@86 4394 class="enumerate-enumitem">for <span
cannam@86 4395 class="cmtt-12">[i] </span>in range <span
cannam@86 4396 class="cmtt-12">[right_window_start] </span>... <span
cannam@86 4397 class="cmtt-12">[right_window_end]</span>-1, window(<span
cannam@86 4398 class="cmtt-12">[i]</span>) =
cannam@86 4399 sin(<img
cannam@86 4400 src="Vorbis_I_spec4x.png" alt="&pi;
cannam@86 4401 2" class="frac" align="middle"> <span
cannam@86 4402 class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
cannam@86 4403 class="cmr-8">2</span></sup>( (<span
cannam@86 4404 class="cmtt-12">[i]</span>-<span
cannam@86 4405 class="cmtt-12">[right_window_start]</span>+0.5) / <span
cannam@86 4406 class="cmtt-12">[right_n] </span><span
cannam@86 4407 class="cmsy-10x-x-120">&lowast;</span><img
cannam@86 4408 src="Vorbis_I_spec5x.png" alt="&pi;
cannam@86 4409 2" class="frac" align="middle"> + <img
cannam@86 4410 src="Vorbis_I_spec6x.png" alt="&pi;
cannam@86 4411 2" class="frac" align="middle">) )
cannam@86 4412 </dd><dt class="enumerate-enumitem">
cannam@86 4413 8. </dt><dd
cannam@86 4414 class="enumerate-enumitem">window from range <span
cannam@86 4415 class="cmtt-12">[right_window_start] </span>... <span
cannam@86 4416 class="cmtt-12">[n]</span>-1 is zero</dd></dl>
cannam@86 4417 <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
cannam@86 4418 packet from the stream. An end of packet condition past this point is to be considered a possible
cannam@86 4419 nominal occurrence.
cannam@86 4420
cannam@86 4421
cannam@86 4422
cannam@86 4423 <!--l. 375--><p class="noindent" >
cannam@86 4424 <h5 class="subsubsectionHead"><span class="titlemark">4.3.2. </span> <a
cannam@86 4425 id="x1-730004.3.2"></a>floor curve decode</h5>
cannam@86 4426 <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span
cannam@86 4427 class="cmtt-12">[mode_number]</span>
cannam@86 4428 from configuration array <span
cannam@86 4429 class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
cannam@86 4430 <span
cannam@86 4431 class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
cannam@86 4432 array <span
cannam@86 4433 class="cmtt-12">[vorbis_mapping_configurations]</span>.
cannam@86 4434 <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
cannam@86 4435 <!--l. 386--><p class="noindent" >For each floor <span
cannam@86 4436 class="cmtt-12">[i] </span>of <span
cannam@86 4437 class="cmtt-12">[audio_channels]</span>
cannam@86 4438 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4439 1. </dt><dd
cannam@86 4440 class="enumerate-enumitem"><span
cannam@86 4441 class="cmtt-12">[submap_number] </span>= element <span
cannam@86 4442 class="cmtt-12">[i] </span>of vector [vorbis_mapping_mux]
cannam@86 4443 </dd><dt class="enumerate-enumitem">
cannam@86 4444 2. </dt><dd
cannam@86 4445 class="enumerate-enumitem"><span
cannam@86 4446 class="cmtt-12">[floor_number] </span>= element <span
cannam@86 4447 class="cmtt-12">[submap_number] </span>of vector [vorbis_submap_floor]
cannam@86 4448 </dd><dt class="enumerate-enumitem">
cannam@86 4449 3. </dt><dd
cannam@86 4450 class="enumerate-enumitem">if the floor type of this floor (vector
cannam@86 4451 <span
cannam@86 4452 class="cmtt-12">[vorbis_floor_types] </span>element <span
cannam@86 4453 class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
cannam@86 4454 channel <span
cannam@86 4455 class="cmtt-12">[i] </span>according to the <a
cannam@86 4456 href="#x1-930006.2.2">subsubsection&#x00A0;6.2.2</a>, &#8220;<a
cannam@86 4457 href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>&#8221;
cannam@86 4458 </dd><dt class="enumerate-enumitem">
cannam@86 4459 4. </dt><dd
cannam@86 4460 class="enumerate-enumitem">if the type of this floor is one then decode the floor for channel <span
cannam@86 4461 class="cmtt-12">[i] </span>according to the
cannam@86 4462 <a
cannam@86 4463 href="#x1-1000007.2.3">subsubsection&#x00A0;7.2.3</a>, &#8220;<a
cannam@86 4464 href="#x1-1000007.2.3">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>&#8221;
cannam@86 4465 </dd><dt class="enumerate-enumitem">
cannam@86 4466 5. </dt><dd
cannam@86 4467 class="enumerate-enumitem">save the needed decoded floor information for channel for later synthesis
cannam@86 4468 </dd><dt class="enumerate-enumitem">
cannam@86 4469 6. </dt><dd
cannam@86 4470 class="enumerate-enumitem">if the decoded floor returned &#8217;unused&#8217;, set vector <span
cannam@86 4471 class="cmtt-12">[no_residue] </span>element <span
cannam@86 4472 class="cmtt-12">[i] </span>to true,
cannam@86 4473 else set vector <span
cannam@86 4474 class="cmtt-12">[no_residue] </span>element <span
cannam@86 4475 class="cmtt-12">[i] </span>to false</dd></dl>
cannam@86 4476 <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
cannam@86 4477 output vectors and skipping to the add/overlap output stage.
cannam@86 4478 <!--l. 412--><p class="noindent" >
cannam@86 4479 <h5 class="subsubsectionHead"><span class="titlemark">4.3.3. </span> <a
cannam@86 4480 id="x1-740004.3.3"></a>nonzero vector propagate</h5>
cannam@86 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
cannam@86 4482 that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
cannam@86 4483 coded in the stream, save for one complication. If some vectors are used and some are not,
cannam@86 4484
cannam@86 4485
cannam@86 4486
cannam@86 4487 channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
cannam@86 4488 vectors.
cannam@86 4489 <!--l. 421--><p class="noindent" >for each <span
cannam@86 4490 class="cmtt-12">[i] </span>from 0 ... <span
cannam@86 4491 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
cannam@86 4492 <!--l. 424--><p class="noindent" >
cannam@86 4493 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4494 1. </dt><dd
cannam@86 4495 class="enumerate-enumitem">if either <span
cannam@86 4496 class="cmtt-12">[no_residue] </span>entry for channel (<span
cannam@86 4497 class="cmtt-12">[vorbis_mapping_magnitude] </span>element
cannam@86 4498 <span
cannam@86 4499 class="cmtt-12">[i]</span>) or channel (<span
cannam@86 4500 class="cmtt-12">[vorbis_mapping_angle] </span>element <span
cannam@86 4501 class="cmtt-12">[i]</span>) are set to false, then both
cannam@86 4502 must be set to false. Note that an &#8217;unused&#8217; floor has no decoded floor information; it
cannam@86 4503 is important that this is remembered at floor curve synthesis time.</dd></dl>
cannam@86 4504 <!--l. 436--><p class="noindent" >
cannam@86 4505 <h5 class="subsubsectionHead"><span class="titlemark">4.3.4. </span> <a
cannam@86 4506 id="x1-750004.3.4"></a>residue decode</h5>
cannam@86 4507 <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
cannam@86 4508 order.
cannam@86 4509 <!--l. 441--><p class="noindent" >for each submap <span
cannam@86 4510 class="cmtt-12">[i] </span>in order from 0 ... <span
cannam@86 4511 class="cmtt-12">[vorbis_mapping_submaps]</span>-1
cannam@86 4512 <!--l. 444--><p class="noindent" >
cannam@86 4513 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4514 1. </dt><dd
cannam@86 4515 class="enumerate-enumitem"><span
cannam@86 4516 class="cmtt-12">[ch] </span>= 0
cannam@86 4517 </dd><dt class="enumerate-enumitem">
cannam@86 4518 2. </dt><dd
cannam@86 4519 class="enumerate-enumitem">for each channel <span
cannam@86 4520 class="cmtt-12">[j] </span>in order from 0 ... <span
cannam@86 4521 class="cmtt-12">[audio_channels] </span>- 1
cannam@86 4522 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4523 a) </dt><dd
cannam@86 4524 class="enumerate-enumitem">if channel <span
cannam@86 4525 class="cmtt-12">[j] </span>in submap <span
cannam@86 4526 class="cmtt-12">[i] </span>(vector <span
cannam@86 4527 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
cannam@86 4528 class="cmtt-12">[j] </span>is equal to
cannam@86 4529 <span
cannam@86 4530 class="cmtt-12">[i]</span>)
cannam@86 4531 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4532 i. </dt><dd
cannam@86 4533 class="enumerate-enumitem">if vector <span
cannam@86 4534 class="cmtt-12">[no_residue] </span>element <span
cannam@86 4535 class="cmtt-12">[j] </span>is true
cannam@86 4536 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4537 A. </dt><dd
cannam@86 4538 class="enumerate-enumitem">vector <span
cannam@86 4539 class="cmtt-12">[do_not_decode_flag] </span>element <span
cannam@86 4540 class="cmtt-12">[ch] </span>is set</dd></dl>
cannam@86 4541 <!--l. 453--><p class="noindent" >else
cannam@86 4542 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4543 A. </dt><dd
cannam@86 4544 class="enumerate-enumitem">vector <span
cannam@86 4545 class="cmtt-12">[do_not_decode_flag] </span>element <span
cannam@86 4546 class="cmtt-12">[ch] </span>is unset</dd></dl>
cannam@86 4547 </dd><dt class="enumerate-enumitem">
cannam@86 4548 ii. </dt><dd
cannam@86 4549 class="enumerate-enumitem">increment <span
cannam@86 4550 class="cmtt-12">[ch]</span></dd></dl>
cannam@86 4551
cannam@86 4552
cannam@86 4553
cannam@86 4554 </dd></dl>
cannam@86 4555 </dd><dt class="enumerate-enumitem">
cannam@86 4556 3. </dt><dd
cannam@86 4557 class="enumerate-enumitem"><span
cannam@86 4558 class="cmtt-12">[residue_number] </span>= vector <span
cannam@86 4559 class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
cannam@86 4560 class="cmtt-12">[i]</span>
cannam@86 4561 </dd><dt class="enumerate-enumitem">
cannam@86 4562 4. </dt><dd
cannam@86 4563 class="enumerate-enumitem"><span
cannam@86 4564 class="cmtt-12">[residue_type] </span>= vector <span
cannam@86 4565 class="cmtt-12">[vorbis_residue_types] </span>element <span
cannam@86 4566 class="cmtt-12">[residue_number]</span>
cannam@86 4567 </dd><dt class="enumerate-enumitem">
cannam@86 4568 5. </dt><dd
cannam@86 4569 class="enumerate-enumitem">decode <span
cannam@86 4570 class="cmtt-12">[ch] </span>vectors using residue <span
cannam@86 4571 class="cmtt-12">[residue_number]</span>, according to type <span
cannam@86 4572 class="cmtt-12">[residue_type]</span>,
cannam@86 4573 also passing vector <span
cannam@86 4574 class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
cannam@86 4575 not be decoded. Correct per-vector decode length is <span
cannam@86 4576 class="cmtt-12">[n]</span>/2.
cannam@86 4577 </dd><dt class="enumerate-enumitem">
cannam@86 4578 6. </dt><dd
cannam@86 4579 class="enumerate-enumitem"><span
cannam@86 4580 class="cmtt-12">[ch] </span>= 0
cannam@86 4581 </dd><dt class="enumerate-enumitem">
cannam@86 4582 7. </dt><dd
cannam@86 4583 class="enumerate-enumitem">for each channel <span
cannam@86 4584 class="cmtt-12">[j] </span>in order from 0 ... <span
cannam@86 4585 class="cmtt-12">[audio_channels]</span>
cannam@86 4586 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4587 a) </dt><dd
cannam@86 4588 class="enumerate-enumitem">if channel <span
cannam@86 4589 class="cmtt-12">[j] </span>is in submap <span
cannam@86 4590 class="cmtt-12">[i] </span>(vector <span
cannam@86 4591 class="cmtt-12">[vorbis_mapping_mux] </span>element <span
cannam@86 4592 class="cmtt-12">[j] </span>is equal
cannam@86 4593 to <span
cannam@86 4594 class="cmtt-12">[i]</span>)
cannam@86 4595 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4596 i. </dt><dd
cannam@86 4597 class="enumerate-enumitem">residue vector for channel <span
cannam@86 4598 class="cmtt-12">[j] </span>is set to decoded residue vector <span
cannam@86 4599 class="cmtt-12">[ch]</span>
cannam@86 4600 </dd><dt class="enumerate-enumitem">
cannam@86 4601 ii. </dt><dd
cannam@86 4602 class="enumerate-enumitem">increment <span
cannam@86 4603 class="cmtt-12">[ch]</span></dd></dl>
cannam@86 4604 </dd></dl>
cannam@86 4605 </dd></dl>
cannam@86 4606 <!--l. 480--><p class="noindent" >
cannam@86 4607 <h5 class="subsubsectionHead"><span class="titlemark">4.3.5. </span> <a
cannam@86 4608 id="x1-760004.3.5"></a>inverse coupling</h5>
cannam@86 4609 <!--l. 482--><p class="noindent" >for each <span
cannam@86 4610 class="cmtt-12">[i] </span>from <span
cannam@86 4611 class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
cannam@86 4612 <!--l. 485--><p class="noindent" >
cannam@86 4613 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4614 1. </dt><dd
cannam@86 4615 class="enumerate-enumitem"><span
cannam@86 4616 class="cmtt-12">[magnitude_vector] </span>= the residue vector for channel (vector
cannam@86 4617 <span
cannam@86 4618 class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
cannam@86 4619 class="cmtt-12">[i]</span>)
cannam@86 4620 </dd><dt class="enumerate-enumitem">
cannam@86 4621 2. </dt><dd
cannam@86 4622 class="enumerate-enumitem"><span
cannam@86 4623 class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span
cannam@86 4624 class="cmtt-12">[vorbis_mapping_angle]</span>
cannam@86 4625
cannam@86 4626
cannam@86 4627
cannam@86 4628 element <span
cannam@86 4629 class="cmtt-12">[i]</span>)
cannam@86 4630 </dd><dt class="enumerate-enumitem">
cannam@86 4631 3. </dt><dd
cannam@86 4632 class="enumerate-enumitem">for each scalar value <span
cannam@86 4633 class="cmtt-12">[M] </span>in vector <span
cannam@86 4634 class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
cannam@86 4635 <span
cannam@86 4636 class="cmtt-12">[A] </span>in vector <span
cannam@86 4637 class="cmtt-12">[angle_vector]</span>:
cannam@86 4638 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4639 a) </dt><dd
cannam@86 4640 class="enumerate-enumitem">if (<span
cannam@86 4641 class="cmtt-12">[M] </span>is greater than zero)
cannam@86 4642 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4643 i. </dt><dd
cannam@86 4644 class="enumerate-enumitem">if (<span
cannam@86 4645 class="cmtt-12">[A] </span>is greater than zero)
cannam@86 4646 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4647 A. </dt><dd
cannam@86 4648 class="enumerate-enumitem"><span
cannam@86 4649 class="cmtt-12">[new_M] </span>= <span
cannam@86 4650 class="cmtt-12">[M]</span>
cannam@86 4651 </dd><dt class="enumerate-enumitem">
cannam@86 4652 B. </dt><dd
cannam@86 4653 class="enumerate-enumitem"><span
cannam@86 4654 class="cmtt-12">[new_A] </span>= <span
cannam@86 4655 class="cmtt-12">[M]</span>-<span
cannam@86 4656 class="cmtt-12">[A]</span></dd></dl>
cannam@86 4657 <!--l. 498--><p class="noindent" >else
cannam@86 4658 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4659 A. </dt><dd
cannam@86 4660 class="enumerate-enumitem"><span
cannam@86 4661 class="cmtt-12">[new_A] </span>= <span
cannam@86 4662 class="cmtt-12">[M]</span>
cannam@86 4663 </dd><dt class="enumerate-enumitem">
cannam@86 4664 B. </dt><dd
cannam@86 4665 class="enumerate-enumitem"><span
cannam@86 4666 class="cmtt-12">[new_M] </span>= <span
cannam@86 4667 class="cmtt-12">[M]</span>+<span
cannam@86 4668 class="cmtt-12">[A]</span></dd></dl>
cannam@86 4669 </dd></dl>
cannam@86 4670 <!--l. 505--><p class="noindent" >else
cannam@86 4671 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4672 i. </dt><dd
cannam@86 4673 class="enumerate-enumitem">if (<span
cannam@86 4674 class="cmtt-12">[A] </span>is greater than zero)
cannam@86 4675 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4676 A. </dt><dd
cannam@86 4677 class="enumerate-enumitem"><span
cannam@86 4678 class="cmtt-12">[new_M] </span>= <span
cannam@86 4679 class="cmtt-12">[M]</span>
cannam@86 4680 </dd><dt class="enumerate-enumitem">
cannam@86 4681 B. </dt><dd
cannam@86 4682 class="enumerate-enumitem"><span
cannam@86 4683 class="cmtt-12">[new_A] </span>= <span
cannam@86 4684 class="cmtt-12">[M]</span>+<span
cannam@86 4685 class="cmtt-12">[A]</span></dd></dl>
cannam@86 4686 <!--l. 512--><p class="noindent" >else
cannam@86 4687 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 4688 A. </dt><dd
cannam@86 4689 class="enumerate-enumitem"><span
cannam@86 4690 class="cmtt-12">[new_A] </span>= <span
cannam@86 4691 class="cmtt-12">[M]</span>
cannam@86 4692 </dd><dt class="enumerate-enumitem">
cannam@86 4693 B. </dt><dd
cannam@86 4694 class="enumerate-enumitem"><span
cannam@86 4695 class="cmtt-12">[new_M] </span>= <span
cannam@86 4696 class="cmtt-12">[M]</span>-<span
cannam@86 4697 class="cmtt-12">[A]</span></dd></dl>
cannam@86 4698 </dd></dl>
cannam@86 4699 </dd><dt class="enumerate-enumitem">
cannam@86 4700 b) </dt><dd
cannam@86 4701 class="enumerate-enumitem">set scalar value <span
cannam@86 4702 class="cmtt-12">[M] </span>in vector <span
cannam@86 4703 class="cmtt-12">[magnitude_vector] </span>to <span
cannam@86 4704 class="cmtt-12">[new_M]</span>
cannam@86 4705
cannam@86 4706
cannam@86 4707
cannam@86 4708 </dd><dt class="enumerate-enumitem">
cannam@86 4709 c) </dt><dd
cannam@86 4710 class="enumerate-enumitem">set scalar value <span
cannam@86 4711 class="cmtt-12">[A] </span>in vector <span
cannam@86 4712 class="cmtt-12">[angle_vector] </span>to <span
cannam@86 4713 class="cmtt-12">[new_A]</span></dd></dl>
cannam@86 4714 </dd></dl>
cannam@86 4715 <!--l. 529--><p class="noindent" >
cannam@86 4716 <h5 class="subsubsectionHead"><span class="titlemark">4.3.6. </span> <a
cannam@86 4717 id="x1-770004.3.6"></a>dot product</h5>
cannam@86 4718 <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
cannam@86 4719 packet type. Note that the vector synthesis length for floor computation is <span
cannam@86 4720 class="cmtt-12">[n]</span>/2.
cannam@86 4721 <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
cannam@86 4722 channel&#8217;s residue vector. The result is the dot product of the floor and residue vectors for
cannam@86 4723 each channel; the produced vectors are the length <span
cannam@86 4724 class="cmtt-12">[n]</span>/2 audio spectrum for each
cannam@86 4725 channel.
cannam@86 4726 <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
cannam@86 4727 implementation might be to assume that a 32 bit fixed-point representation for floor and
cannam@86 4728 residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
cannam@86 4729 in all cases because it happens to mostly work with the current Xiph.Org reference
cannam@86 4730 encoder.
cannam@86 4731 <!--l. 550--><p class="noindent" >However, floor vector values can span <span
cannam@86 4732 class="cmsy-10x-x-120">&sim;</span>140dB (<span
cannam@86 4733 class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
cannam@86 4734 vector should represent a minimum of 120dB (<span
cannam@86 4735 class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
cannam@86 4736 bit PCM device. For the residue vector to represent full scale if the floor is nailed
cannam@86 4737 to <span
cannam@86 4738 class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
cannam@86 4739 full scale if the floor is nailed at 0dB, it must be able to represent <span
cannam@86 4740 class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
cannam@86 4741 Thus, in order to handle full range dynamics, a residue vector may span <span
cannam@86 4742 class="cmsy-10x-x-120">&minus;</span>140dB to
cannam@86 4743 +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
cannam@86 4744 residue vector must be able to represent a 48 bit range and the dot product must
cannam@86 4745 be able to handle an effective 48 bit times 24 bit multiplication. This range may be
cannam@86 4746 achieved using large (64 bit or larger) integers, or implementing a movable binary point
cannam@86 4747 representation.
cannam@86 4748 <!--l. 567--><p class="noindent" >
cannam@86 4749 <h5 class="subsubsectionHead"><span class="titlemark">4.3.7. </span> <a
cannam@86 4750 id="x1-780004.3.7"></a>inverse MDCT</h5>
cannam@86 4751 <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
cannam@86 4752
cannam@86 4753
cannam@86 4754
cannam@86 4755 inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
cannam@86 4756 available in <span class="cite">[<a
cannam@86 4757 href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
cannam@86 4758 earlier.
cannam@86 4759 <!--l. 576--><p class="noindent" >
cannam@86 4760 <h5 class="subsubsectionHead"><span class="titlemark">4.3.8. </span> <a
cannam@86 4761 id="x1-790004.3.8"></a>overlap_add</h5>
cannam@86 4762 <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
cannam@86 4763 window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
cannam@86 4764 current window (as illustrated in <a
cannam@86 4765 href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>, &#8220;<a
cannam@86 4766 href="#x1-260001.3.2">Window shape decode (long windows
cannam@86 4767 only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;). The overlapped portion produced from overlapping the previous and current frame data
cannam@86 4768 is finished data to be returned by the decoder. This data spans from the center of
cannam@86 4769 the previous window to the center of the current window. In the case of same-sized
cannam@86 4770 windows, the amount of data to return is one-half block consisting of and only of the
cannam@86 4771 overlapped portions. When overlapping a short and long window, much of the returned
cannam@86 4772 range does not actually overlap. This does not damage transform orthogonality. Pay
cannam@86 4773 attention however to returning the correct data range; the amount of data to be returned
cannam@86 4774 is:
cannam@86 4775 <!--l. 592--><p class="noindent" >
cannam@86 4776 <div class="fancyvrb" id="fancyvrb22">
cannam@86 4777 <a
cannam@86 4778 id="x1-79002r1"></a><span
cannam@86 4779 class="cmr-6">1</span><span
cannam@86 4780 class="cmtt-8">&#x00A0;</span><span
cannam@86 4781 class="cmtt-8">&#x00A0;window\_blocksize(previous\_window)/4+window\_blocksize(current\_window)/4</span>
cannam@86 4782 </div>
cannam@86 4783 <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
cannam@86 4784 windowsize/2-1, inclusive) of the current window.
cannam@86 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
cannam@86 4786 encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
cannam@86 4787 PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
cannam@86 4788 <!--l. 606--><p class="noindent" >
cannam@86 4789 <h5 class="subsubsectionHead"><span class="titlemark">4.3.9. </span> <a
cannam@86 4790 id="x1-800004.3.9"></a>output channel order</h5>
cannam@86 4791 <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
cannam@86 4792 implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
cannam@86 4793 specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
cannam@86 4794
cannam@86 4795
cannam@86 4796
cannam@86 4797 greater-than-eight channels remains &#8217;left to the implementation&#8217;.
cannam@86 4798 <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a
cannam@86 4799 decoder to produce output with channels in any order. Any such decoder should explicitly
cannam@86 4800 document channel reordering behavior.
cannam@86 4801 <!--l. 620--><p class="noindent" >
cannam@86 4802 <dl class="description"><dt class="description">
cannam@86 4803 <span
cannam@86 4804 class="cmssbx-10x-x-120">one channel</span> </dt><dd
cannam@86 4805 class="description">the stream is monophonic
cannam@86 4806 </dd><dt class="description">
cannam@86 4807 <span
cannam@86 4808 class="cmssbx-10x-x-120">two channels</span> </dt><dd
cannam@86 4809 class="description">the stream is stereo. channel order: left, right
cannam@86 4810 </dd><dt class="description">
cannam@86 4811 <span
cannam@86 4812 class="cmssbx-10x-x-120">three channels</span> </dt><dd
cannam@86 4813 class="description">the stream is a 1d-surround encoding. channel order: left, center, right
cannam@86 4814 </dd><dt class="description">
cannam@86 4815 <span
cannam@86 4816 class="cmssbx-10x-x-120">four channels</span> </dt><dd
cannam@86 4817 class="description">the stream is quadraphonic surround. channel order: front left, front right,
cannam@86 4818 rear left, rear right
cannam@86 4819 </dd><dt class="description">
cannam@86 4820 <span
cannam@86 4821 class="cmssbx-10x-x-120">five channels</span> </dt><dd
cannam@86 4822 class="description">the stream is five-channel surround. channel order: front left, center, front
cannam@86 4823 right, rear left, rear right
cannam@86 4824 </dd><dt class="description">
cannam@86 4825 <span
cannam@86 4826 class="cmssbx-10x-x-120">six channels</span> </dt><dd
cannam@86 4827 class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear
cannam@86 4828 left, rear right, LFE
cannam@86 4829 </dd><dt class="description">
cannam@86 4830 <span
cannam@86 4831 class="cmssbx-10x-x-120">seven channels</span> </dt><dd
cannam@86 4832 class="description">the stream is 6.1 surround. channel order: front left, center, front right,
cannam@86 4833 side left, side right, rear center, LFE
cannam@86 4834 </dd><dt class="description">
cannam@86 4835 <span
cannam@86 4836 class="cmssbx-10x-x-120">eight channels</span> </dt><dd
cannam@86 4837 class="description">the stream is 7.1 surround. channel order: front left, center, front right,
cannam@86 4838 side left, side right, rear left, rear right, LFE
cannam@86 4839 </dd><dt class="description">
cannam@86 4840 <span
cannam@86 4841 class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd
cannam@86 4842 class="description">channel use and order is defined by the application
cannam@86 4843 </dd></dl>
cannam@86 4844 <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
cannam@86 4845 channel mappings (such as three and four channel <a
cannam@86 4846 href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
cannam@86 4847 mappings other than mapping 0.
cannam@86 4848
cannam@86 4849
cannam@86 4850
cannam@86 4851
cannam@86 4852
cannam@86 4853
cannam@86 4854 <h3 class="sectionHead"><span class="titlemark">5. </span> <a
cannam@86 4855 id="x1-810005"></a>comment field and header specification</h3>
cannam@86 4856 <!--l. 6--><p class="noindent" >
cannam@86 4857 <h4 class="subsectionHead"><span class="titlemark">5.1. </span> <a
cannam@86 4858 id="x1-820005.1"></a>Overview</h4>
cannam@86 4859 <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
cannam@86 4860 bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
cannam@86 4861 belongs in a separate logical bitstream (usually an XML stream type) that provides greater
cannam@86 4862 structure and machine parseability.
cannam@86 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
cannam@86 4864 a CDR. It should be a little information to remember the disc by and explain it to others; a
cannam@86 4865 short, to-the-point text note that need not only be a couple words, but isn&#8217;t going to be more
cannam@86 4866 than a short paragraph. The essentials, in other words, whatever they turn out to be,
cannam@86 4867 eg:
cannam@86 4868 <!--l. 21--><p class="noindent" >
cannam@86 4869 <div class="quote">
cannam@86 4870 <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span
cannam@86 4871 class="cmti-12">&#8220;I&#8217;m Still Around&#8221;</span>, opening
cannam@86 4872 for Moxy Früvous, 1997.</div>
cannam@86 4873 <!--l. 29--><p class="noindent" >
cannam@86 4874 <h4 class="subsectionHead"><span class="titlemark">5.2. </span> <a
cannam@86 4875 id="x1-830005.2"></a>Comment encoding</h4>
cannam@86 4876 <!--l. 31--><p class="noindent" >
cannam@86 4877 <h5 class="subsubsectionHead"><span class="titlemark">5.2.1. </span> <a
cannam@86 4878 id="x1-840005.2.1"></a>Structure</h5>
cannam@86 4879 <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
cannam@86 4880 bounded to 2<sup><span
cannam@86 4881 class="cmr-8">32</span></sup> <span
cannam@86 4882 class="cmsy-10x-x-120">&minus; </span>1 and the length of each vector is limited to 2<sup><span
cannam@86 4883 class="cmr-8">32</span></sup> <span
cannam@86 4884 class="cmsy-10x-x-120">&minus; </span>1 bytes. The vector length is
cannam@86 4885
cannam@86 4886
cannam@86 4887
cannam@86 4888 encoded; the vector contents themselves are not null terminated. In addition to the vector list,
cannam@86 4889 there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
cannam@86 4890 example, the 1.0 release of libvorbis set the vendor string to &#8220;Xiph.Org libVorbis I
cannam@86 4891 20020717&#8221;.
cannam@86 4892 <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
cannam@86 4893 packing conventions of the vorbis codec. However, since data in the comment header
cannam@86 4894 is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
cannam@86 4895 integers.
cannam@86 4896 <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
cannam@86 4897 <!--l. 48--><p class="noindent" >
cannam@86 4898 <div class="fancyvrb" id="fancyvrb23">
cannam@86 4899 <a
cannam@86 4900 id="x1-84002r1"></a><span
cannam@86 4901 class="cmr-6">1</span><span
cannam@86 4902 class="cmtt-8">&#x00A0;</span><span
cannam@86 4903 class="cmtt-8">&#x00A0;</span><span
cannam@86 4904 class="cmtt-8">&#x00A0;</span><span
cannam@86 4905 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 4906 class="cmtt-8">&#x00A0;[vendor\_length]</span><span
cannam@86 4907 class="cmtt-8">&#x00A0;=</span><span
cannam@86 4908 class="cmtt-8">&#x00A0;read</span><span
cannam@86 4909 class="cmtt-8">&#x00A0;an</span><span
cannam@86 4910 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 4911 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 4912 class="cmtt-8">&#x00A0;of</span><span
cannam@86 4913 class="cmtt-8">&#x00A0;32</span><span
cannam@86 4914 class="cmtt-8">&#x00A0;bits</span>
cannam@86 4915 <br class="fancyvrb" /><a
cannam@86 4916 id="x1-84004r2"></a><span
cannam@86 4917 class="cmr-6">2</span><span
cannam@86 4918 class="cmtt-8">&#x00A0;</span><span
cannam@86 4919 class="cmtt-8">&#x00A0;</span><span
cannam@86 4920 class="cmtt-8">&#x00A0;</span><span
cannam@86 4921 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 4922 class="cmtt-8">&#x00A0;[vendor\_string]</span><span
cannam@86 4923 class="cmtt-8">&#x00A0;=</span><span
cannam@86 4924 class="cmtt-8">&#x00A0;read</span><span
cannam@86 4925 class="cmtt-8">&#x00A0;a</span><span
cannam@86 4926 class="cmtt-8">&#x00A0;UTF-8</span><span
cannam@86 4927 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 4928 class="cmtt-8">&#x00A0;as</span><span
cannam@86 4929 class="cmtt-8">&#x00A0;[vendor\_length]</span><span
cannam@86 4930 class="cmtt-8">&#x00A0;octets</span>
cannam@86 4931 <br class="fancyvrb" /><a
cannam@86 4932 id="x1-84006r3"></a><span
cannam@86 4933 class="cmr-6">3</span><span
cannam@86 4934 class="cmtt-8">&#x00A0;</span><span
cannam@86 4935 class="cmtt-8">&#x00A0;</span><span
cannam@86 4936 class="cmtt-8">&#x00A0;</span><span
cannam@86 4937 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 4938 class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
cannam@86 4939 class="cmtt-8">&#x00A0;=</span><span
cannam@86 4940 class="cmtt-8">&#x00A0;read</span><span
cannam@86 4941 class="cmtt-8">&#x00A0;an</span><span
cannam@86 4942 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 4943 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 4944 class="cmtt-8">&#x00A0;of</span><span
cannam@86 4945 class="cmtt-8">&#x00A0;32</span><span
cannam@86 4946 class="cmtt-8">&#x00A0;bits</span>
cannam@86 4947 <br class="fancyvrb" /><a
cannam@86 4948 id="x1-84008r4"></a><span
cannam@86 4949 class="cmr-6">4</span><span
cannam@86 4950 class="cmtt-8">&#x00A0;</span><span
cannam@86 4951 class="cmtt-8">&#x00A0;</span><span
cannam@86 4952 class="cmtt-8">&#x00A0;</span><span
cannam@86 4953 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 4954 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 4955 class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
cannam@86 4956 class="cmtt-8">&#x00A0;times</span><span
cannam@86 4957 class="cmtt-8">&#x00A0;{</span>
cannam@86 4958 <br class="fancyvrb" /><a
cannam@86 4959 id="x1-84010r5"></a><span
cannam@86 4960 class="cmr-6">5</span><span
cannam@86 4961 class="cmtt-8">&#x00A0;</span><span
cannam@86 4962 class="cmtt-8">&#x00A0;</span><span
cannam@86 4963 class="cmtt-8">&#x00A0;</span><span
cannam@86 4964 class="cmtt-8">&#x00A0;</span><span
cannam@86 4965 class="cmtt-8">&#x00A0;</span><span
cannam@86 4966 class="cmtt-8">&#x00A0;</span><span
cannam@86 4967 class="cmtt-8">&#x00A0;</span><span
cannam@86 4968 class="cmtt-8">&#x00A0;</span><span
cannam@86 4969 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 4970 class="cmtt-8">&#x00A0;[length]</span><span
cannam@86 4971 class="cmtt-8">&#x00A0;=</span><span
cannam@86 4972 class="cmtt-8">&#x00A0;read</span><span
cannam@86 4973 class="cmtt-8">&#x00A0;an</span><span
cannam@86 4974 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 4975 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 4976 class="cmtt-8">&#x00A0;of</span><span
cannam@86 4977 class="cmtt-8">&#x00A0;32</span><span
cannam@86 4978 class="cmtt-8">&#x00A0;bits</span>
cannam@86 4979 <br class="fancyvrb" /><a
cannam@86 4980 id="x1-84012r6"></a><span
cannam@86 4981 class="cmr-6">6</span><span
cannam@86 4982 class="cmtt-8">&#x00A0;</span><span
cannam@86 4983 class="cmtt-8">&#x00A0;</span><span
cannam@86 4984 class="cmtt-8">&#x00A0;</span><span
cannam@86 4985 class="cmtt-8">&#x00A0;</span><span
cannam@86 4986 class="cmtt-8">&#x00A0;</span><span
cannam@86 4987 class="cmtt-8">&#x00A0;</span><span
cannam@86 4988 class="cmtt-8">&#x00A0;</span><span
cannam@86 4989 class="cmtt-8">&#x00A0;</span><span
cannam@86 4990 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 4991 class="cmtt-8">&#x00A0;this</span><span
cannam@86 4992 class="cmtt-8">&#x00A0;iteration&#8217;s</span><span
cannam@86 4993 class="cmtt-8">&#x00A0;user</span><span
cannam@86 4994 class="cmtt-8">&#x00A0;comment</span><span
cannam@86 4995 class="cmtt-8">&#x00A0;=</span><span
cannam@86 4996 class="cmtt-8">&#x00A0;read</span><span
cannam@86 4997 class="cmtt-8">&#x00A0;a</span><span
cannam@86 4998 class="cmtt-8">&#x00A0;UTF-8</span><span
cannam@86 4999 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 5000 class="cmtt-8">&#x00A0;as</span><span
cannam@86 5001 class="cmtt-8">&#x00A0;[length]</span><span
cannam@86 5002 class="cmtt-8">&#x00A0;octets</span>
cannam@86 5003 <br class="fancyvrb" /><a
cannam@86 5004 id="x1-84014r7"></a><span
cannam@86 5005 class="cmr-6">7</span><span
cannam@86 5006 class="cmtt-8">&#x00A0;</span><span
cannam@86 5007 class="cmtt-8">&#x00A0;</span><span
cannam@86 5008 class="cmtt-8">&#x00A0;</span><span
cannam@86 5009 class="cmtt-8">&#x00A0;</span><span
cannam@86 5010 class="cmtt-8">&#x00A0;</span><span
cannam@86 5011 class="cmtt-8">&#x00A0;</span><span
cannam@86 5012 class="cmtt-8">&#x00A0;}</span>
cannam@86 5013 <br class="fancyvrb" /><a
cannam@86 5014 id="x1-84016r8"></a><span
cannam@86 5015 class="cmr-6">8</span><span
cannam@86 5016 class="cmtt-8">&#x00A0;</span><span
cannam@86 5017 class="cmtt-8">&#x00A0;</span><span
cannam@86 5018 class="cmtt-8">&#x00A0;</span><span
cannam@86 5019 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 5020 class="cmtt-8">&#x00A0;[framing\_bit]</span><span
cannam@86 5021 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5022 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5023 class="cmtt-8">&#x00A0;a</span><span
cannam@86 5024 class="cmtt-8">&#x00A0;single</span><span
cannam@86 5025 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 5026 class="cmtt-8">&#x00A0;as</span><span
cannam@86 5027 class="cmtt-8">&#x00A0;boolean</span>
cannam@86 5028 <br class="fancyvrb" /><a
cannam@86 5029 id="x1-84018r9"></a><span
cannam@86 5030 class="cmr-6">9</span><span
cannam@86 5031 class="cmtt-8">&#x00A0;</span><span
cannam@86 5032 class="cmtt-8">&#x00A0;</span><span
cannam@86 5033 class="cmtt-8">&#x00A0;</span><span
cannam@86 5034 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 5035 class="cmtt-8">&#x00A0;if</span><span
cannam@86 5036 class="cmtt-8">&#x00A0;(</span><span
cannam@86 5037 class="cmtt-8">&#x00A0;[framing\_bit]</span><span
cannam@86 5038 class="cmtt-8">&#x00A0;unset</span><span
cannam@86 5039 class="cmtt-8">&#x00A0;or</span><span
cannam@86 5040 class="cmtt-8">&#x00A0;end-of-packet</span><span
cannam@86 5041 class="cmtt-8">&#x00A0;)</span><span
cannam@86 5042 class="cmtt-8">&#x00A0;then</span><span
cannam@86 5043 class="cmtt-8">&#x00A0;ERROR</span>
cannam@86 5044 <br class="fancyvrb" /><a
cannam@86 5045 id="x1-84020r10"></a><span
cannam@86 5046 class="cmr-6">10</span><span
cannam@86 5047 class="cmtt-8">&#x00A0;</span><span
cannam@86 5048 class="cmtt-8">&#x00A0;</span><span
cannam@86 5049 class="cmtt-8">&#x00A0;</span><span
cannam@86 5050 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 5051 class="cmtt-8">&#x00A0;done.</span>
cannam@86 5052 </div>
cannam@86 5053 <!--l. 64--><p class="noindent" >
cannam@86 5054 <h5 class="subsubsectionHead"><span class="titlemark">5.2.2. </span> <a
cannam@86 5055 id="x1-850005.2.2"></a>Content vector format</h5>
cannam@86 5056 <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
cannam@86 5057 comment fields consist of a field name and a corresponding value and look like:
cannam@86 5058 <!--l. 70--><p class="noindent" >
cannam@86 5059 <div class="quote">
cannam@86 5060 <!--l. 71--><p class="noindent" >
cannam@86 5061 <div class="fancyvrb" id="fancyvrb24">
cannam@86 5062 <a
cannam@86 5063 id="x1-85002r1"></a><span
cannam@86 5064 class="cmr-6">1</span><span
cannam@86 5065 class="cmtt-8">&#x00A0;</span><span
cannam@86 5066 class="cmtt-8">&#x00A0;comment[0]="ARTIST=me";</span>
cannam@86 5067 <br class="fancyvrb" /><a
cannam@86 5068 id="x1-85004r2"></a><span
cannam@86 5069 class="cmr-6">2</span><span
cannam@86 5070 class="cmtt-8">&#x00A0;</span><span
cannam@86 5071 class="cmtt-8">&#x00A0;comment[1]="TITLE=the</span><span
cannam@86 5072 class="cmtt-8">&#x00A0;sound</span><span
cannam@86 5073 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5074 class="cmtt-8">&#x00A0;Vorbis";</span>
cannam@86 5075 </div>
cannam@86 5076 </div>
cannam@86 5077
cannam@86 5078
cannam@86 5079
cannam@86 5080 <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (&#8217;=&#8217;)
cannam@86 5081 excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
cannam@86 5082 ASCII 0x61 through 0x7A inclusive (characters a-z).
cannam@86 5083 <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (&#8217;=&#8217;); this equals sign is used to
cannam@86 5084 terminate the field name.
cannam@86 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
cannam@86 5086 field.
cannam@86 5087 <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 5088 id="x1-860005.2.2"></a><span
cannam@86 5089 class="cmbx-12">Field names</span></span>
cannam@86 5090 Below is a proposed, minimal list of standard field names with a description of intended use. No
cannam@86 5091 single or group of field names is mandatory; a comment header may contain one, all or none of
cannam@86 5092 the names in this list.
cannam@86 5093 <!--l. 99--><p class="noindent" >
cannam@86 5094 <dl class="description"><dt class="description">
cannam@86 5095 <span
cannam@86 5096 class="cmssbx-10x-x-120">TITLE</span> </dt><dd
cannam@86 5097 class="description">Track/Work name
cannam@86 5098 </dd><dt class="description">
cannam@86 5099 <span
cannam@86 5100 class="cmssbx-10x-x-120">VERSION</span> </dt><dd
cannam@86 5101 class="description">The version field may be used to differentiate multiple versions of the same
cannam@86 5102 track title in a single collection. (e.g. remix info)
cannam@86 5103 </dd><dt class="description">
cannam@86 5104 <span
cannam@86 5105 class="cmssbx-10x-x-120">ALBUM</span> </dt><dd
cannam@86 5106 class="description">The collection name to which this track belongs
cannam@86 5107 </dd><dt class="description">
cannam@86 5108 <span
cannam@86 5109 class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd
cannam@86 5110 class="description">The track number of this piece if part of a specific larger collection or
cannam@86 5111 album
cannam@86 5112 </dd><dt class="description">
cannam@86 5113 <span
cannam@86 5114 class="cmssbx-10x-x-120">ARTIST</span> </dt><dd
cannam@86 5115 class="description">The artist generally considered responsible for the work. In popular music this is
cannam@86 5116 usually the performing band or singer. For classical music it would be the composer.
cannam@86 5117 For an audio book it would be the author of the original text.
cannam@86 5118 </dd><dt class="description">
cannam@86 5119 <span
cannam@86 5120 class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd
cannam@86 5121 class="description">The artist(s) who performed the work. In classical music this would be the
cannam@86 5122 conductor, orchestra, soloists. In an audio book it would be the actor who did the
cannam@86 5123 reading. In popular music this is typically the same as the ARTIST and is omitted.
cannam@86 5124 </dd><dt class="description">
cannam@86 5125 <span
cannam@86 5126 class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd
cannam@86 5127 class="description">Copyright attribution, e.g., &#8217;2001 Nobody&#8217;s Band&#8217; or &#8217;1999 Jack Moffitt&#8217;
cannam@86 5128 </dd><dt class="description">
cannam@86 5129
cannam@86 5130
cannam@86 5131
cannam@86 5132 <span
cannam@86 5133 class="cmssbx-10x-x-120">LICENSE</span> </dt><dd
cannam@86 5134 class="description">License information, eg, &#8217;All Rights Reserved&#8217;, &#8217;Any Use Permitted&#8217;, a URL to
cannam@86 5135 a license such as a Creative
cannam@86 5136 Commons license (&#8221;www.creativecommons.org/blahblah/license.html&#8221;) or the EFF
cannam@86 5137 Open Audio License (&#8217;distributed under the terms of the Open Audio License. see
cannam@86 5138 http://www.eff.org/IP/Open_licenses/eff_oal.html for details&#8217;), etc.
cannam@86 5139 </dd><dt class="description">
cannam@86 5140 <span
cannam@86 5141 class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd
cannam@86 5142 class="description">Name of the organization producing the track (i.e. the &#8217;record label&#8217;)
cannam@86 5143 </dd><dt class="description">
cannam@86 5144 <span
cannam@86 5145 class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd
cannam@86 5146 class="description">A short text description of the contents
cannam@86 5147 </dd><dt class="description">
cannam@86 5148 <span
cannam@86 5149 class="cmssbx-10x-x-120">GENRE</span> </dt><dd
cannam@86 5150 class="description">A short text indication of music genre
cannam@86 5151 </dd><dt class="description">
cannam@86 5152 <span
cannam@86 5153 class="cmssbx-10x-x-120">DATE</span> </dt><dd
cannam@86 5154 class="description">Date the track was recorded
cannam@86 5155 </dd><dt class="description">
cannam@86 5156 <span
cannam@86 5157 class="cmssbx-10x-x-120">LOCATION</span> </dt><dd
cannam@86 5158 class="description">Location where track was recorded
cannam@86 5159 </dd><dt class="description">
cannam@86 5160 <span
cannam@86 5161 class="cmssbx-10x-x-120">CONTACT</span> </dt><dd
cannam@86 5162 class="description">Contact information for the creators or distributors of the track. This could
cannam@86 5163 be a URL, an email address, the physical address of the producing label.
cannam@86 5164 </dd><dt class="description">
cannam@86 5165 <span
cannam@86 5166 class="cmssbx-10x-x-120">ISRC</span> </dt><dd
cannam@86 5167 class="description">International Standard Recording Code for the track; see <a
cannam@86 5168 href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
cannam@86 5169 more information on ISRC numbers.
cannam@86 5170 </dd></dl>
cannam@86 5171 <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a
cannam@86 5172 id="x1-870005.2.2"></a><span
cannam@86 5173 class="cmbx-12">Implications</span></span>
cannam@86 5174 Field names should not be &#8217;internationalized&#8217;; this is a concession to simplicity not
cannam@86 5175 an attempt to exclude the majority of the world that doesn&#8217;t speak English. Field
cannam@86 5176 <span
cannam@86 5177 class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
cannam@86 5178 language.
cannam@86 5179 <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
cannam@86 5180 the field name is bounded in a known way. Thus we also have the length of the field
cannam@86 5181 contents.
cannam@86 5182 <!--l. 170--><p class="noindent" >Individual &#8217;vendors&#8217; may use non-standard field names within reason. The proper
cannam@86 5183 use of comment fields should be clear through context at this point. Abuse will be
cannam@86 5184 discouraged.
cannam@86 5185
cannam@86 5186
cannam@86 5187
cannam@86 5188 <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to &#8217;nonstandard&#8217; field names. Vendors should make some effort
cannam@86 5189 to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
cannam@86 5190 tags here to help with standardization.
cannam@86 5191 <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
cannam@86 5192 example, assume a track was recorded by three well know artists; the following is permissible,
cannam@86 5193 and encouraged:
cannam@86 5194 <!--l. 183--><p class="noindent" >
cannam@86 5195 <div class="quote">
cannam@86 5196 <!--l. 184--><p class="noindent" >
cannam@86 5197 <div class="fancyvrb" id="fancyvrb25">
cannam@86 5198 <a
cannam@86 5199 id="x1-87002r1"></a><span
cannam@86 5200 class="cmr-6">1</span><span
cannam@86 5201 class="cmtt-8">&#x00A0;</span><span
cannam@86 5202 class="cmtt-8">&#x00A0;ARTIST=Dizzy</span><span
cannam@86 5203 class="cmtt-8">&#x00A0;Gillespie</span>
cannam@86 5204 <br class="fancyvrb" /><a
cannam@86 5205 id="x1-87004r2"></a><span
cannam@86 5206 class="cmr-6">2</span><span
cannam@86 5207 class="cmtt-8">&#x00A0;</span><span
cannam@86 5208 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
cannam@86 5209 class="cmtt-8">&#x00A0;Rollins</span>
cannam@86 5210 <br class="fancyvrb" /><a
cannam@86 5211 id="x1-87006r3"></a><span
cannam@86 5212 class="cmr-6">3</span><span
cannam@86 5213 class="cmtt-8">&#x00A0;</span><span
cannam@86 5214 class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
cannam@86 5215 class="cmtt-8">&#x00A0;Stitt</span>
cannam@86 5216 </div>
cannam@86 5217 </div>
cannam@86 5218 <!--l. 197--><p class="noindent" >
cannam@86 5219 <h5 class="subsubsectionHead"><span class="titlemark">5.2.3. </span> <a
cannam@86 5220 id="x1-880005.2.3"></a>Encoding</h5>
cannam@86 5221 <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
cannam@86 5222 first bitstream header packet, it is not generally the only packet on the second page and may not
cannam@86 5223 be restricted to within the second bitstream page. The length of the comment header packet is
cannam@86 5224 (practically) unbounded. The comment header packet is not optional; it must be present in the
cannam@86 5225 bitstream even if it is effectively empty.
cannam@86 5226 <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg&#8217;s standard bitstream mapping which
cannam@86 5227 renders least-significant-bit of the word to be coded into the least significant available bit of the
cannam@86 5228 current bitstream octet first):
cannam@86 5229 <!--l. 213--><p class="noindent" >
cannam@86 5230 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 5231 1. </dt><dd
cannam@86 5232 class="enumerate-enumitem">Vendor string length (32 bit unsigned quantity specifying number of octets)
cannam@86 5233 </dd><dt class="enumerate-enumitem">
cannam@86 5234 2. </dt><dd
cannam@86 5235 class="enumerate-enumitem">Vendor string ([vendor string length] octets coded from beginning of string to end of
cannam@86 5236 string, not null terminated)
cannam@86 5237
cannam@86 5238
cannam@86 5239
cannam@86 5240 </dd><dt class="enumerate-enumitem">
cannam@86 5241 3. </dt><dd
cannam@86 5242 class="enumerate-enumitem">Number of comment fields (32 bit unsigned quantity specifying number of fields)
cannam@86 5243 </dd><dt class="enumerate-enumitem">
cannam@86 5244 4. </dt><dd
cannam@86 5245 class="enumerate-enumitem">Comment field 0 length (if [Number of comment fields] <span
cannam@86 5246 class="cmmi-12">&#x003E; </span>0; 32 bit unsigned quantity
cannam@86 5247 specifying number of octets)
cannam@86 5248 </dd><dt class="enumerate-enumitem">
cannam@86 5249 5. </dt><dd
cannam@86 5250 class="enumerate-enumitem">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
cannam@86 5251 end of string, not null terminated)
cannam@86 5252 </dd><dt class="enumerate-enumitem">
cannam@86 5253 6. </dt><dd
cannam@86 5254 class="enumerate-enumitem">Comment field 1 length (if [Number of comment fields] <span
cannam@86 5255 class="cmmi-12">&#x003E; </span>1...)...
cannam@86 5256 </dd></dl>
cannam@86 5257 <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
cannam@86 5258 in <span
cannam@86 5259 class="cmtt-12">vorbis/lib/info.c</span>, <span
cannam@86 5260 class="cmtt-12">_vorbis_pack_comment() </span>and <span
cannam@86 5261 class="cmtt-12">_vorbis_unpack_comment()</span>.
cannam@86 5262
cannam@86 5263
cannam@86 5264
cannam@86 5265
cannam@86 5266
cannam@86 5267
cannam@86 5268 <h3 class="sectionHead"><span class="titlemark">6. </span> <a
cannam@86 5269 id="x1-890006"></a>Floor type 0 setup and decode</h3>
cannam@86 5270 <!--l. 6--><p class="noindent" >
cannam@86 5271 <h4 class="subsectionHead"><span class="titlemark">6.1. </span> <a
cannam@86 5272 id="x1-900006.1"></a>Overview</h4>
cannam@86 5273 <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
cannam@86 5274 Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
cannam@86 5275 response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
cannam@86 5276 impulse response filter as would be used in linear predictive coding; LSP representation may be
cannam@86 5277 converted to LPC representation and vice-versa.
cannam@86 5278 <!--l. 18--><p class="noindent" >
cannam@86 5279 <h4 class="subsectionHead"><span class="titlemark">6.2. </span> <a
cannam@86 5280 id="x1-910006.2"></a>Floor 0 format</h4>
cannam@86 5281 <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
cannam@86 5282 coding/decoding the LSP filter coefficient values used by each frame.
cannam@86 5283 <!--l. 24--><p class="noindent" >
cannam@86 5284 <h5 class="subsubsectionHead"><span class="titlemark">6.2.1. </span> <a
cannam@86 5285 id="x1-920006.2.1"></a>header decode</h5>
cannam@86 5286 <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
cannam@86 5287 packet). configuration decode proceeds as follows:
cannam@86 5288 <!--l. 30--><p class="noindent" >
cannam@86 5289 <div class="fancyvrb" id="fancyvrb26">
cannam@86 5290 <a
cannam@86 5291 id="x1-92002r1"></a><span
cannam@86 5292 class="cmr-6">1</span><span
cannam@86 5293 class="cmtt-8">&#x00A0;</span><span
cannam@86 5294 class="cmtt-8">&#x00A0;</span><span
cannam@86 5295 class="cmtt-8">&#x00A0;</span><span
cannam@86 5296 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 5297 class="cmtt-8">&#x00A0;[floor0_order]</span><span
cannam@86 5298 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5299 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5300 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5301 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5302 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5303 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5304 class="cmtt-8">&#x00A0;8</span><span
cannam@86 5305 class="cmtt-8">&#x00A0;bits</span>
cannam@86 5306 <br class="fancyvrb" /><a
cannam@86 5307 id="x1-92004r2"></a><span
cannam@86 5308 class="cmr-6">2</span><span
cannam@86 5309 class="cmtt-8">&#x00A0;</span><span
cannam@86 5310 class="cmtt-8">&#x00A0;</span><span
cannam@86 5311 class="cmtt-8">&#x00A0;</span><span
cannam@86 5312 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 5313 class="cmtt-8">&#x00A0;[floor0_rate]</span><span
cannam@86 5314 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5315 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5316 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5317 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5318 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5319 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5320 class="cmtt-8">&#x00A0;16</span><span
cannam@86 5321 class="cmtt-8">&#x00A0;bits</span>
cannam@86 5322 <br class="fancyvrb" /><a
cannam@86 5323 id="x1-92006r3"></a><span
cannam@86 5324 class="cmr-6">3</span><span
cannam@86 5325 class="cmtt-8">&#x00A0;</span><span
cannam@86 5326 class="cmtt-8">&#x00A0;</span><span
cannam@86 5327 class="cmtt-8">&#x00A0;</span><span
cannam@86 5328 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 5329 class="cmtt-8">&#x00A0;[floor0_bark_map_size]</span><span
cannam@86 5330 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5331 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5332 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5333 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5334 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5335 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5336 class="cmtt-8">&#x00A0;16</span><span
cannam@86 5337 class="cmtt-8">&#x00A0;bits</span>
cannam@86 5338 <br class="fancyvrb" /><a
cannam@86 5339 id="x1-92008r4"></a><span
cannam@86 5340 class="cmr-6">4</span><span
cannam@86 5341 class="cmtt-8">&#x00A0;</span><span
cannam@86 5342 class="cmtt-8">&#x00A0;</span><span
cannam@86 5343 class="cmtt-8">&#x00A0;</span><span
cannam@86 5344 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 5345 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
cannam@86 5346 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5347 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5348 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5349 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5350 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5351 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5352 class="cmtt-8">&#x00A0;six</span><span
cannam@86 5353 class="cmtt-8">&#x00A0;bits</span>
cannam@86 5354 <br class="fancyvrb" /><a
cannam@86 5355 id="x1-92010r5"></a><span
cannam@86 5356 class="cmr-6">5</span><span
cannam@86 5357 class="cmtt-8">&#x00A0;</span><span
cannam@86 5358 class="cmtt-8">&#x00A0;</span><span
cannam@86 5359 class="cmtt-8">&#x00A0;</span><span
cannam@86 5360 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 5361 class="cmtt-8">&#x00A0;[floor0_amplitude_offset]</span><span
cannam@86 5362 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5363 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5364 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5365 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5366 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5367 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5368 class="cmtt-8">&#x00A0;eight</span><span
cannam@86 5369 class="cmtt-8">&#x00A0;bits</span>
cannam@86 5370 <br class="fancyvrb" /><a
cannam@86 5371 id="x1-92012r6"></a><span
cannam@86 5372 class="cmr-6">6</span><span
cannam@86 5373 class="cmtt-8">&#x00A0;</span><span
cannam@86 5374 class="cmtt-8">&#x00A0;</span><span
cannam@86 5375 class="cmtt-8">&#x00A0;</span><span
cannam@86 5376 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 5377 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
cannam@86 5378 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5379 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5380 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5381 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5382 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5383 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5384 class="cmtt-8">&#x00A0;four</span><span
cannam@86 5385 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 5386 class="cmtt-8">&#x00A0;and</span><span
cannam@86 5387 class="cmtt-8">&#x00A0;add</span><span
cannam@86 5388 class="cmtt-8">&#x00A0;1</span>
cannam@86 5389 <br class="fancyvrb" /><a
cannam@86 5390 id="x1-92014r7"></a><span
cannam@86 5391 class="cmr-6">7</span><span
cannam@86 5392 class="cmtt-8">&#x00A0;</span><span
cannam@86 5393 class="cmtt-8">&#x00A0;</span><span
cannam@86 5394 class="cmtt-8">&#x00A0;</span><span
cannam@86 5395 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 5396 class="cmtt-8">&#x00A0;array</span><span
cannam@86 5397 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
cannam@86 5398 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5399 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5400 class="cmtt-8">&#x00A0;a</span><span
cannam@86 5401 class="cmtt-8">&#x00A0;list</span><span
cannam@86 5402 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5403 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
cannam@86 5404 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5405 class="cmtt-8">&#x00A0;integers</span><span
cannam@86 5406 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5407 class="cmtt-8">&#x00A0;eight</span><span
cannam@86 5408 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 5409 class="cmtt-8">&#x00A0;each;</span>
cannam@86 5410 </div>
cannam@86 5411
cannam@86 5412
cannam@86 5413
cannam@86 5414 <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
cannam@86 5415 In addition, any element of the array <span
cannam@86 5416 class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
cannam@86 5417 codebook number for this bitstream is an error condition that also renders the stream
cannam@86 5418 undecodable.
cannam@86 5419 <!--l. 48--><p class="noindent" >
cannam@86 5420 <h5 class="subsubsectionHead"><span class="titlemark">6.2.2. </span> <a
cannam@86 5421 id="x1-930006.2.2"></a>packet decode</h5>
cannam@86 5422 <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
cannam@86 5423 amplitude and <span
cannam@86 5424 class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
cannam@86 5425 computing the floor curve, which is defined as the frequency response of the decoded LSP
cannam@86 5426 filter.
cannam@86 5427 <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
cannam@86 5428 <div class="fancyvrb" id="fancyvrb27">
cannam@86 5429 <a
cannam@86 5430 id="x1-93002r1"></a><span
cannam@86 5431 class="cmr-6">1</span><span
cannam@86 5432 class="cmtt-8">&#x00A0;</span><span
cannam@86 5433 class="cmtt-8">&#x00A0;</span><span
cannam@86 5434 class="cmtt-8">&#x00A0;</span><span
cannam@86 5435 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 5436 class="cmtt-8">&#x00A0;[amplitude]</span><span
cannam@86 5437 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5438 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5439 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5440 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5441 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5442 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5443 class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
cannam@86 5444 class="cmtt-8">&#x00A0;bits</span>
cannam@86 5445 <br class="fancyvrb" /><a
cannam@86 5446 id="x1-93004r2"></a><span
cannam@86 5447 class="cmr-6">2</span><span
cannam@86 5448 class="cmtt-8">&#x00A0;</span><span
cannam@86 5449 class="cmtt-8">&#x00A0;</span><span
cannam@86 5450 class="cmtt-8">&#x00A0;</span><span
cannam@86 5451 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 5452 class="cmtt-8">&#x00A0;if</span><span
cannam@86 5453 class="cmtt-8">&#x00A0;(</span><span
cannam@86 5454 class="cmtt-8">&#x00A0;[amplitude]</span><span
cannam@86 5455 class="cmtt-8">&#x00A0;is</span><span
cannam@86 5456 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 5457 class="cmtt-8">&#x00A0;than</span><span
cannam@86 5458 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 5459 class="cmtt-8">&#x00A0;)</span><span
cannam@86 5460 class="cmtt-8">&#x00A0;</span><span
cannam@86 5461 class="cmsy-8">{</span>
cannam@86 5462 <br class="fancyvrb" /><a
cannam@86 5463 id="x1-93006r3"></a><span
cannam@86 5464 class="cmr-6">3</span><span
cannam@86 5465 class="cmtt-8">&#x00A0;</span><span
cannam@86 5466 class="cmtt-8">&#x00A0;</span><span
cannam@86 5467 class="cmtt-8">&#x00A0;</span><span
cannam@86 5468 class="cmtt-8">&#x00A0;</span><span
cannam@86 5469 class="cmtt-8">&#x00A0;</span><span
cannam@86 5470 class="cmtt-8">&#x00A0;</span><span
cannam@86 5471 class="cmtt-8">&#x00A0;</span><span
cannam@86 5472 class="cmtt-8">&#x00A0;</span><span
cannam@86 5473 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 5474 class="cmtt-8">&#x00A0;[coefficients]</span><span
cannam@86 5475 class="cmtt-8">&#x00A0;is</span><span
cannam@86 5476 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5477 class="cmtt-8">&#x00A0;empty,</span><span
cannam@86 5478 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 5479 class="cmtt-8">&#x00A0;length</span><span
cannam@86 5480 class="cmtt-8">&#x00A0;vector</span>
cannam@86 5481 <br class="fancyvrb" /><a
cannam@86 5482 id="x1-93008r4"></a><span
cannam@86 5483 class="cmr-6">4</span><span
cannam@86 5484 class="cmtt-8">&#x00A0;</span><span
cannam@86 5485 class="cmtt-8">&#x00A0;</span><span
cannam@86 5486 class="cmtt-8">&#x00A0;</span><span
cannam@86 5487 class="cmtt-8">&#x00A0;</span><span
cannam@86 5488 class="cmtt-8">&#x00A0;</span><span
cannam@86 5489 class="cmtt-8">&#x00A0;</span><span
cannam@86 5490 class="cmtt-8">&#x00A0;</span><span
cannam@86 5491 class="cmtt-8">&#x00A0;</span><span
cannam@86 5492 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 5493 class="cmtt-8">&#x00A0;[booknumber]</span><span
cannam@86 5494 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5495 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5496 class="cmtt-8">&#x00A0;an</span><span
cannam@86 5497 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 5498 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 5499 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5500 class="cmtt-8">&#x00A0;</span><a
cannam@86 5501 href="#x1-1170009.2.1"><span
cannam@86 5502 class="cmtt-8">ilog</span></a><span
cannam@86 5503 class="cmtt-8">(</span><span
cannam@86 5504 class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
cannam@86 5505 class="cmtt-8">&#x00A0;)</span><span
cannam@86 5506 class="cmtt-8">&#x00A0;bits</span>
cannam@86 5507 <br class="fancyvrb" /><a
cannam@86 5508 id="x1-93010r5"></a><span
cannam@86 5509 class="cmr-6">5</span><span
cannam@86 5510 class="cmtt-8">&#x00A0;</span><span
cannam@86 5511 class="cmtt-8">&#x00A0;</span><span
cannam@86 5512 class="cmtt-8">&#x00A0;</span><span
cannam@86 5513 class="cmtt-8">&#x00A0;</span><span
cannam@86 5514 class="cmtt-8">&#x00A0;</span><span
cannam@86 5515 class="cmtt-8">&#x00A0;</span><span
cannam@86 5516 class="cmtt-8">&#x00A0;</span><span
cannam@86 5517 class="cmtt-8">&#x00A0;</span><span
cannam@86 5518 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 5519 class="cmtt-8">&#x00A0;if</span><span
cannam@86 5520 class="cmtt-8">&#x00A0;(</span><span
cannam@86 5521 class="cmtt-8">&#x00A0;[booknumber]</span><span
cannam@86 5522 class="cmtt-8">&#x00A0;is</span><span
cannam@86 5523 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 5524 class="cmtt-8">&#x00A0;than</span><span
cannam@86 5525 class="cmtt-8">&#x00A0;the</span><span
cannam@86 5526 class="cmtt-8">&#x00A0;highest</span><span
cannam@86 5527 class="cmtt-8">&#x00A0;number</span><span
cannam@86 5528 class="cmtt-8">&#x00A0;decode</span><span
cannam@86 5529 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 5530 class="cmtt-8">&#x00A0;)</span><span
cannam@86 5531 class="cmtt-8">&#x00A0;then</span><span
cannam@86 5532 class="cmtt-8">&#x00A0;packet</span><span
cannam@86 5533 class="cmtt-8">&#x00A0;is</span><span
cannam@86 5534 class="cmtt-8">&#x00A0;undecodable</span>
cannam@86 5535 <br class="fancyvrb" /><a
cannam@86 5536 id="x1-93012r6"></a><span
cannam@86 5537 class="cmr-6">6</span><span
cannam@86 5538 class="cmtt-8">&#x00A0;</span><span
cannam@86 5539 class="cmtt-8">&#x00A0;</span><span
cannam@86 5540 class="cmtt-8">&#x00A0;</span><span
cannam@86 5541 class="cmtt-8">&#x00A0;</span><span
cannam@86 5542 class="cmtt-8">&#x00A0;</span><span
cannam@86 5543 class="cmtt-8">&#x00A0;</span><span
cannam@86 5544 class="cmtt-8">&#x00A0;</span><span
cannam@86 5545 class="cmtt-8">&#x00A0;</span><span
cannam@86 5546 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 5547 class="cmtt-8">&#x00A0;[last]</span><span
cannam@86 5548 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5549 class="cmtt-8">&#x00A0;zero;</span>
cannam@86 5550 <br class="fancyvrb" /><a
cannam@86 5551 id="x1-93014r7"></a><span
cannam@86 5552 class="cmr-6">7</span><span
cannam@86 5553 class="cmtt-8">&#x00A0;</span><span
cannam@86 5554 class="cmtt-8">&#x00A0;</span><span
cannam@86 5555 class="cmtt-8">&#x00A0;</span><span
cannam@86 5556 class="cmtt-8">&#x00A0;</span><span
cannam@86 5557 class="cmtt-8">&#x00A0;</span><span
cannam@86 5558 class="cmtt-8">&#x00A0;</span><span
cannam@86 5559 class="cmtt-8">&#x00A0;</span><span
cannam@86 5560 class="cmtt-8">&#x00A0;</span><span
cannam@86 5561 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 5562 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 5563 class="cmtt-8">&#x00A0;[temp_vector]</span><span
cannam@86 5564 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5565 class="cmtt-8">&#x00A0;read</span><span
cannam@86 5566 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 5567 class="cmtt-8">&#x00A0;from</span><span
cannam@86 5568 class="cmtt-8">&#x00A0;bitstream</span><span
cannam@86 5569 class="cmtt-8">&#x00A0;using</span><span
cannam@86 5570 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 5571 class="cmtt-8">&#x00A0;number</span><span
cannam@86 5572 class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
cannam@86 5573 class="cmtt-8">&#x00A0;element</span><span
cannam@86 5574 class="cmtt-8">&#x00A0;[booknumber]</span><span
cannam@86 5575 class="cmtt-8">&#x00A0;in</span><span
cannam@86 5576 class="cmtt-8">&#x00A0;VQ</span><span
cannam@86 5577 class="cmtt-8">&#x00A0;context.</span>
cannam@86 5578 <br class="fancyvrb" /><a
cannam@86 5579 id="x1-93016r8"></a><span
cannam@86 5580 class="cmr-6">8</span><span
cannam@86 5581 class="cmtt-8">&#x00A0;</span><span
cannam@86 5582 class="cmtt-8">&#x00A0;</span><span
cannam@86 5583 class="cmtt-8">&#x00A0;</span><span
cannam@86 5584 class="cmtt-8">&#x00A0;</span><span
cannam@86 5585 class="cmtt-8">&#x00A0;</span><span
cannam@86 5586 class="cmtt-8">&#x00A0;</span><span
cannam@86 5587 class="cmtt-8">&#x00A0;</span><span
cannam@86 5588 class="cmtt-8">&#x00A0;</span><span
cannam@86 5589 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 5590 class="cmtt-8">&#x00A0;add</span><span
cannam@86 5591 class="cmtt-8">&#x00A0;the</span><span
cannam@86 5592 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 5593 class="cmtt-8">&#x00A0;value</span><span
cannam@86 5594 class="cmtt-8">&#x00A0;[last]</span><span
cannam@86 5595 class="cmtt-8">&#x00A0;to</span><span
cannam@86 5596 class="cmtt-8">&#x00A0;each</span><span
cannam@86 5597 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 5598 class="cmtt-8">&#x00A0;in</span><span
cannam@86 5599 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 5600 class="cmtt-8">&#x00A0;[temp_vector]</span>
cannam@86 5601 <br class="fancyvrb" /><a
cannam@86 5602 id="x1-93018r9"></a><span
cannam@86 5603 class="cmr-6">9</span><span
cannam@86 5604 class="cmtt-8">&#x00A0;</span><span
cannam@86 5605 class="cmtt-8">&#x00A0;</span><span
cannam@86 5606 class="cmtt-8">&#x00A0;</span><span
cannam@86 5607 class="cmtt-8">&#x00A0;</span><span
cannam@86 5608 class="cmtt-8">&#x00A0;</span><span
cannam@86 5609 class="cmtt-8">&#x00A0;</span><span
cannam@86 5610 class="cmtt-8">&#x00A0;</span><span
cannam@86 5611 class="cmtt-8">&#x00A0;</span><span
cannam@86 5612 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 5613 class="cmtt-8">&#x00A0;[last]</span><span
cannam@86 5614 class="cmtt-8">&#x00A0;=</span><span
cannam@86 5615 class="cmtt-8">&#x00A0;the</span><span
cannam@86 5616 class="cmtt-8">&#x00A0;value</span><span
cannam@86 5617 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5618 class="cmtt-8">&#x00A0;the</span><span
cannam@86 5619 class="cmtt-8">&#x00A0;last</span><span
cannam@86 5620 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 5621 class="cmtt-8">&#x00A0;in</span><span
cannam@86 5622 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 5623 class="cmtt-8">&#x00A0;[temp_vector]</span>
cannam@86 5624 <br class="fancyvrb" /><a
cannam@86 5625 id="x1-93020r10"></a><span
cannam@86 5626 class="cmr-6">10</span><span
cannam@86 5627 class="cmtt-8">&#x00A0;</span><span
cannam@86 5628 class="cmtt-8">&#x00A0;</span><span
cannam@86 5629 class="cmtt-8">&#x00A0;</span><span
cannam@86 5630 class="cmtt-8">&#x00A0;</span><span
cannam@86 5631 class="cmtt-8">&#x00A0;</span><span
cannam@86 5632 class="cmtt-8">&#x00A0;</span><span
cannam@86 5633 class="cmtt-8">&#x00A0;</span><span
cannam@86 5634 class="cmtt-8">&#x00A0;10)</span><span
cannam@86 5635 class="cmtt-8">&#x00A0;concatenate</span><span
cannam@86 5636 class="cmtt-8">&#x00A0;[temp_vector]</span><span
cannam@86 5637 class="cmtt-8">&#x00A0;onto</span><span
cannam@86 5638 class="cmtt-8">&#x00A0;the</span><span
cannam@86 5639 class="cmtt-8">&#x00A0;end</span><span
cannam@86 5640 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5641 class="cmtt-8">&#x00A0;the</span><span
cannam@86 5642 class="cmtt-8">&#x00A0;[coefficients]</span><span
cannam@86 5643 class="cmtt-8">&#x00A0;vector</span>
cannam@86 5644 <br class="fancyvrb" /><a
cannam@86 5645 id="x1-93022r11"></a><span
cannam@86 5646 class="cmr-6">11</span><span
cannam@86 5647 class="cmtt-8">&#x00A0;</span><span
cannam@86 5648 class="cmtt-8">&#x00A0;</span><span
cannam@86 5649 class="cmtt-8">&#x00A0;</span><span
cannam@86 5650 class="cmtt-8">&#x00A0;</span><span
cannam@86 5651 class="cmtt-8">&#x00A0;</span><span
cannam@86 5652 class="cmtt-8">&#x00A0;</span><span
cannam@86 5653 class="cmtt-8">&#x00A0;</span><span
cannam@86 5654 class="cmtt-8">&#x00A0;11)</span><span
cannam@86 5655 class="cmtt-8">&#x00A0;if</span><span
cannam@86 5656 class="cmtt-8">&#x00A0;(length</span><span
cannam@86 5657 class="cmtt-8">&#x00A0;of</span><span
cannam@86 5658 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 5659 class="cmtt-8">&#x00A0;[coefficients]</span><span
cannam@86 5660 class="cmtt-8">&#x00A0;is</span><span
cannam@86 5661 class="cmtt-8">&#x00A0;less</span><span
cannam@86 5662 class="cmtt-8">&#x00A0;than</span><span
cannam@86 5663 class="cmtt-8">&#x00A0;[floor0_order],</span><span
cannam@86 5664 class="cmtt-8">&#x00A0;continue</span><span
cannam@86 5665 class="cmtt-8">&#x00A0;at</span><span
cannam@86 5666 class="cmtt-8">&#x00A0;step</span><span
cannam@86 5667 class="cmtt-8">&#x00A0;6</span>
cannam@86 5668 <br class="fancyvrb" /><a
cannam@86 5669 id="x1-93024r12"></a><span
cannam@86 5670 class="cmr-6">12</span><span
cannam@86 5671 class="cmtt-8">&#x00A0;</span><span
cannam@86 5672 class="cmtt-8">&#x00A0;</span>
cannam@86 5673 <br class="fancyvrb" /><a
cannam@86 5674 id="x1-93026r13"></a><span
cannam@86 5675 class="cmr-6">13</span><span
cannam@86 5676 class="cmtt-8">&#x00A0;</span><span
cannam@86 5677 class="cmtt-8">&#x00A0;</span><span
cannam@86 5678 class="cmtt-8">&#x00A0;</span><span
cannam@86 5679 class="cmtt-8">&#x00A0;</span><span
cannam@86 5680 class="cmtt-8">&#x00A0;</span><span
cannam@86 5681 class="cmtt-8">&#x00A0;</span><span
cannam@86 5682 class="cmtt-8">&#x00A0;</span><span
cannam@86 5683 class="cmsy-8">}</span>
cannam@86 5684 <br class="fancyvrb" /><a
cannam@86 5685 id="x1-93028r14"></a><span
cannam@86 5686 class="cmr-6">14</span><span
cannam@86 5687 class="cmtt-8">&#x00A0;</span><span
cannam@86 5688 class="cmtt-8">&#x00A0;</span>
cannam@86 5689 <br class="fancyvrb" /><a
cannam@86 5690 id="x1-93030r15"></a><span
cannam@86 5691 class="cmr-6">15</span><span
cannam@86 5692 class="cmtt-8">&#x00A0;</span><span
cannam@86 5693 class="cmtt-8">&#x00A0;</span><span
cannam@86 5694 class="cmtt-8">&#x00A0;12)</span><span
cannam@86 5695 class="cmtt-8">&#x00A0;done.</span>
cannam@86 5696 <br class="fancyvrb" /><a
cannam@86 5697 id="x1-93032r16"></a><span
cannam@86 5698 class="cmr-6">16</span><span
cannam@86 5699 class="cmtt-8">&#x00A0;</span><span
cannam@86 5700 class="cmtt-8">&#x00A0;</span>
cannam@86 5701 </div>
cannam@86 5702 <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
cannam@86 5703 <ul class="itemize1">
cannam@86 5704 <li class="itemize">An <span
cannam@86 5705 class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
cannam@86 5706 is unused in this frame (the output of the channel will be all-zeroes in synthesis).
cannam@86 5707 Several later stages of decode don&#8217;t occur for an unused channel.
cannam@86 5708 </li>
cannam@86 5709 <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
cannam@86 5710 if end-of-packet is reached during any read operation above, floor decode is to return
cannam@86 5711 &#8217;unused&#8217; status as if the <span
cannam@86 5712 class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
cannam@86 5713 </li>
cannam@86 5714 <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a
cannam@86 5715 href="#x1-1170009.2.1">ilog</a>(
cannam@86 5716
cannam@86 5717
cannam@86 5718
cannam@86 5719 <span
cannam@86 5720 class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
cannam@86 5721 and values greater than the maximum possible book value are reserved.
cannam@86 5722 </li>
cannam@86 5723 <li class="itemize">The number of scalars read into the vector <span
cannam@86 5724 class="cmtt-12">[coefficients] </span>may be greater
cannam@86 5725 than <span
cannam@86 5726 class="cmtt-12">[floor0_order]</span>, the number actually required for curve computation. For
cannam@86 5727 example, if the VQ codebook used for the floor currently being decoded has a
cannam@86 5728 <span
cannam@86 5729 class="cmtt-12">[codebook_dimensions] </span>value of three and <span
cannam@86 5730 class="cmtt-12">[floor0_order] </span>is ten, the only way to
cannam@86 5731 fill all the needed scalars in <span
cannam@86 5732 class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
cannam@86 5733 as four vectors of three scalars each. This is not an error condition, and care must
cannam@86 5734 be taken not to allow a buffer overflow in decode. The extra values are not used and
cannam@86 5735 may be ignored or discarded.</li></ul>
cannam@86 5736 <!--l. 104--><p class="noindent" >
cannam@86 5737 <h5 class="subsubsectionHead"><span class="titlemark">6.2.3. </span> <a
cannam@86 5738 id="x1-940006.2.3"></a>curve computation</h5>
cannam@86 5739 <!--l. 106--><p class="noindent" >Given an <span
cannam@86 5740 class="cmtt-12">[amplitude] </span>integer and <span
cannam@86 5741 class="cmtt-12">[coefficients] </span>vector from packet decode as well as
cannam@86 5742 the [floor0_order], [floor0_rate], [floor0_bark_map_size], [floor0_amplitude_bits] and
cannam@86 5743 [floor0_amplitude_offset] values from floor setup, and an output vector size <span
cannam@86 5744 class="cmtt-12">[n] </span>specified by the
cannam@86 5745 decode process, we compute a floor output vector.
cannam@86 5746 <!--l. 113--><p class="noindent" >If the value <span
cannam@86 5747 class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span
cannam@86 5748 class="cmtt-12">[n] </span>vector with all-zero
cannam@86 5749 scalars. Otherwise, begin by assuming the following definitions for the given vector to be
cannam@86 5750 synthesized:
cannam@86 5751 <center class="par-math-display" >
cannam@86 5752 <img
cannam@86 5753 src="Vorbis_I_spec7x.png" alt=" {
cannam@86 5754 min (floor0_bark_map_size &minus; 1,foobar ) for i &isin; [0,n &minus; 1 ]
cannam@86 5755 mapi = &minus; 1 for i = n
cannam@86 5756 " class="par-math-display" ></center>
cannam@86 5757 <!--l. 128--><p class="nopar" >
cannam@86 5758 <!--l. 130--><p class="noindent" >where
cannam@86 5759 <center class="par-math-display" >
cannam@86 5760 <img
cannam@86 5761 src="Vorbis_I_spec8x.png" alt=" &lfloor; &rfloor;
cannam@86 5762 (floor0_rate &sdot; i) floor0_bark_map_size
cannam@86 5763 foobar = bark -------2n------- &sdot;-bark(.5 &sdot; floor0_rate-)
cannam@86 5764 " class="par-math-display" ></center>
cannam@86 5765
cannam@86 5766
cannam@86 5767
cannam@86 5768 <!--l. 137--><p class="nopar" >
cannam@86 5769 <!--l. 139--><p class="noindent" >and
cannam@86 5770 <center class="par-math-display" >
cannam@86 5771 <img
cannam@86 5772 src="Vorbis_I_spec9x.png" alt=" 2
cannam@86 5773 bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x + .0001x )
cannam@86 5774 " class="par-math-display" ></center>
cannam@86 5775 <!--l. 143--><p class="nopar" >
cannam@86 5776 <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
cannam@86 5777 result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
cannam@86 5778 LSP curve <span
cannam@86 5779 class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
cannam@86 5780 step:
cannam@86 5781 <!--l. 151--><p class="noindent" >
cannam@86 5782 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 5783 1. </dt><dd
cannam@86 5784 class="enumerate-enumitem"><span
cannam@86 5785 class="cmtt-12">[i] </span>= 0
cannam@86 5786 </dd><dt class="enumerate-enumitem">
cannam@86 5787 2. </dt><dd
cannam@86 5788 class="enumerate-enumitem"><span
cannam@86 5789 class="cmtt-12">[</span><span
cannam@86 5790 class="cmmi-12">&omega;</span><span
cannam@86 5791 class="cmtt-12">] </span>= <span
cannam@86 5792 class="cmmi-12">&pi; </span>* map element <span
cannam@86 5793 class="cmtt-12">[i] </span>/ <span
cannam@86 5794 class="cmtt-12">[floor0_bark_map_size]</span>
cannam@86 5795 </dd><dt class="enumerate-enumitem">
cannam@86 5796 3. </dt><dd
cannam@86 5797 class="enumerate-enumitem">if ( <span
cannam@86 5798 class="cmtt-12">[floor0_order] </span>is odd )
cannam@86 5799 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 5800 a) </dt><dd
cannam@86 5801 class="enumerate-enumitem">calculate <span
cannam@86 5802 class="cmtt-12">[p] </span>and <span
cannam@86 5803 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
cannam@86 5804 <center class="math-display" >
cannam@86 5805 <img
cannam@86 5806 src="Vorbis_I_spec10x.png" alt=" floor0_order&minus;3
cannam@86 5807 2 &prod;2 2
cannam@86 5808 p = (1 &minus; cos &omega;) 4(cos([coefficients ]2j+1) &minus; cos&omega; )
cannam@86 5809 floor0_order&minus;1 j=0
cannam@86 5810 1 ----&prod;2----
cannam@86 5811 q = -- 4(cos([coefficients ]2j) &minus; cos&omega; )2
cannam@86 5812 4 j=0
cannam@86 5813
cannam@86 5814
cannam@86 5815
cannam@86 5816 " class="math-display" ></center>
cannam@86 5817 </div>
cannam@86 5818 </dd></dl>
cannam@86 5819 <!--l. 162--><p class="noindent" >else <span
cannam@86 5820 class="cmtt-12">[floor0_order] </span>is even
cannam@86 5821 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 5822 b) </dt><dd
cannam@86 5823 class="enumerate-enumitem">calculate <span
cannam@86 5824 class="cmtt-12">[p] </span>and <span
cannam@86 5825 class="cmtt-12">[q] </span>according to: <div class="eqnarray">
cannam@86 5826 <center class="math-display" >
cannam@86 5827 <img
cannam@86 5828 src="Vorbis_I_spec11x.png" alt=" floor0_order&minus;2
cannam@86 5829 (1-&minus;-cos&omega;-) &prod;2 2
cannam@86 5830 p = 2 4(cos([coefficients ]2j+1) &minus; cos&omega;)
cannam@86 5831 j=0
cannam@86 5832 floor0_&prod;o2rder&minus;-2
cannam@86 5833 q = (1-+-cos&omega;-) 4(cos([coefficients ]2j) &minus; cos &omega;)2
cannam@86 5834 2 j=0
cannam@86 5835 " class="math-display" ></center>
cannam@86 5836 </div>
cannam@86 5837 </dd></dl>
cannam@86 5838 </dd><dt class="enumerate-enumitem">
cannam@86 5839 4. </dt><dd
cannam@86 5840 class="enumerate-enumitem">calculate <span
cannam@86 5841 class="cmtt-12">[linear_floor_value] </span>according to:
cannam@86 5842 <center class="math-display" >
cannam@86 5843 <img
cannam@86 5844 src="Vorbis_I_spec12x.png" alt=" ( ( ))
cannam@86 5845 exp .11512925 amplitude---&sdot; floor0_amplitute_&radic;offset---&minus; floor0_amplitude_offset
cannam@86 5846 (2floor0_amplitude_bits &minus; 1) p + q
cannam@86 5847 " class="math-display" ></center>
cannam@86 5848 <!--l. 177--><p class="nopar" >
cannam@86 5849 </dd><dt class="enumerate-enumitem">
cannam@86 5850 5. </dt><dd
cannam@86 5851 class="enumerate-enumitem"><span
cannam@86 5852 class="cmtt-12">[iteration_condition] </span>= map element <span
cannam@86 5853 class="cmtt-12">[i]</span>
cannam@86 5854
cannam@86 5855
cannam@86 5856
cannam@86 5857 </dd><dt class="enumerate-enumitem">
cannam@86 5858 6. </dt><dd
cannam@86 5859 class="enumerate-enumitem"><span
cannam@86 5860 class="cmtt-12">[output] </span>element <span
cannam@86 5861 class="cmtt-12">[i] </span>= <span
cannam@86 5862 class="cmtt-12">[linear_floor_value]</span>
cannam@86 5863 </dd><dt class="enumerate-enumitem">
cannam@86 5864 7. </dt><dd
cannam@86 5865 class="enumerate-enumitem">increment <span
cannam@86 5866 class="cmtt-12">[i]</span>
cannam@86 5867 </dd><dt class="enumerate-enumitem">
cannam@86 5868 8. </dt><dd
cannam@86 5869 class="enumerate-enumitem">if ( map element <span
cannam@86 5870 class="cmtt-12">[i] </span>is equal to <span
cannam@86 5871 class="cmtt-12">[iteration_condition] </span>) continue at step
cannam@86 5872 5
cannam@86 5873 </dd><dt class="enumerate-enumitem">
cannam@86 5874 9. </dt><dd
cannam@86 5875 class="enumerate-enumitem">if ( <span
cannam@86 5876 class="cmtt-12">[i] </span>is less than <span
cannam@86 5877 class="cmtt-12">[n] </span>) continue at step 2
cannam@86 5878 </dd><dt class="enumerate-enumitem">
cannam@86 5879 10. </dt><dd
cannam@86 5880 class="enumerate-enumitem">done</dd></dl>
cannam@86 5881
cannam@86 5882
cannam@86 5883
cannam@86 5884
cannam@86 5885
cannam@86 5886
cannam@86 5887 <h3 class="sectionHead"><span class="titlemark">7. </span> <a
cannam@86 5888 id="x1-950007"></a>Floor type 1 setup and decode</h3>
cannam@86 5889 <!--l. 6--><p class="noindent" >
cannam@86 5890 <h4 class="subsectionHead"><span class="titlemark">7.1. </span> <a
cannam@86 5891 id="x1-960007.1"></a>Overview</h4>
cannam@86 5892 <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
cannam@86 5893 curve. The representation plots this curve mechanically on a linear frequency axis and a
cannam@86 5894 logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham&#8217;s
cannam@86 5895 algorithm.
cannam@86 5896 <!--l. 16--><p class="noindent" >
cannam@86 5897 <h4 class="subsectionHead"><span class="titlemark">7.2. </span> <a
cannam@86 5898 id="x1-970007.2"></a>Floor 1 format</h4>
cannam@86 5899 <!--l. 18--><p class="noindent" >
cannam@86 5900 <h5 class="subsubsectionHead"><span class="titlemark">7.2.1. </span> <a
cannam@86 5901 id="x1-980007.2.1"></a>model</h5>
cannam@86 5902 <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
cannam@86 5903 floor curve using iterative prediction in a process roughly equivalent to the following simplified
cannam@86 5904 description:
cannam@86 5905 <ul class="itemize1">
cannam@86 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
cannam@86 5907 where in the base case x&#x02D9;0=0 and x&#x02D9;1=[n], the full range of the spectral floor to be
cannam@86 5908 computed.
cannam@86 5909 </li>
cannam@86 5910 <li class="itemize">the induction step chooses a point x&#x02D9;new within an existing logical line segment and
cannam@86 5911 produces a y&#x02D9;new value at that point computed from the existing line&#8217;s y value at
cannam@86 5912 x&#x02D9;new (as plotted by the line) and a difference value decoded from the bitstream
cannam@86 5913 packet.
cannam@86 5914
cannam@86 5915
cannam@86 5916
cannam@86 5917 </li>
cannam@86 5918 <li class="itemize">floor computation produces two new line segments, one running from x&#x02D9;0,y&#x02D9;0 to
cannam@86 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
cannam@86 5920 y&#x02D9;new represents no change to the amplitude value at x&#x02D9;new so that later refinement
cannam@86 5921 is additionally bounded at x&#x02D9;new.
cannam@86 5922 </li>
cannam@86 5923 <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
cannam@86 5924 at floor 1 initialization time. Computation is completed at the end of the x value list.
cannam@86 5925 </li></ul>
cannam@86 5926 <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
cannam@86 5927 representing typical configuration:
cannam@86 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
cannam@86 5929 in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
cannam@86 5930 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
cannam@86 5931 example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
cannam@86 5932 way, beginning with the first line:
cannam@86 5933 <div class="center"
cannam@86 5934 >
cannam@86 5935 <!--l. 59--><p class="noindent" >
cannam@86 5936
cannam@86 5937 <!--l. 60--><p class="noindent" ><img
cannam@86 5938 src="floor1-1.png" alt="PIC"
cannam@86 5939 >
cannam@86 5940 <br /> <div class="caption"
cannam@86 5941 ><span class="id">Figure&#x00A0;7: </span><span
cannam@86 5942 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 -->
cannam@86 5943 </div>
cannam@86 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
cannam@86 5945 and 96:
cannam@86 5946 <div class="center"
cannam@86 5947 >
cannam@86 5948 <!--l. 67--><p class="noindent" >
cannam@86 5949
cannam@86 5950 <!--l. 68--><p class="noindent" ><img
cannam@86 5951 src="floor1-2.png" alt="PIC"
cannam@86 5952 >
cannam@86 5953 <br /> <div class="caption"
cannam@86 5954 ><span class="id">Figure&#x00A0;8: </span><span
cannam@86 5955 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 -->
cannam@86 5956 </div>
cannam@86 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
cannam@86 5958 further refinement. From here on, the pattern should be clear; we complete the floor computation
cannam@86 5959 as follows:
cannam@86 5960
cannam@86 5961
cannam@86 5962
cannam@86 5963 <div class="center"
cannam@86 5964 >
cannam@86 5965 <!--l. 76--><p class="noindent" >
cannam@86 5966
cannam@86 5967 <!--l. 77--><p class="noindent" ><img
cannam@86 5968 src="floor1-3.png" alt="PIC"
cannam@86 5969 >
cannam@86 5970 <br /> <div class="caption"
cannam@86 5971 ><span class="id">Figure&#x00A0;9: </span><span
cannam@86 5972 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 -->
cannam@86 5973 </div>
cannam@86 5974 <div class="center"
cannam@86 5975 >
cannam@86 5976 <!--l. 81--><p class="noindent" >
cannam@86 5977
cannam@86 5978 <!--l. 82--><p class="noindent" ><img
cannam@86 5979 src="floor1-4.png" alt="PIC"
cannam@86 5980 >
cannam@86 5981 <br /> <div class="caption"
cannam@86 5982 ><span class="id">Figure&#x00A0;10: </span><span
cannam@86 5983 class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 -->
cannam@86 5984 </div>
cannam@86 5985 <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
cannam@86 5986 decode, as described later. The actual algorithm splits Y value computation and line plotting
cannam@86 5987 into two steps with modifications to the above algorithm to eliminate noise accumulation
cannam@86 5988 through integer roundoff/truncation.
cannam@86 5989 <!--l. 94--><p class="noindent" >
cannam@86 5990 <h5 class="subsubsectionHead"><span class="titlemark">7.2.2. </span> <a
cannam@86 5991 id="x1-990007.2.2"></a>header decode</h5>
cannam@86 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
cannam@86 5993 during packet decode and synthesis). This list is split into partitions, and each partition is
cannam@86 5994 assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
cannam@86 5995 partition or partition class.
cannam@86 5996 <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
cannam@86 5997 the partition class encodes at once), a &#8217;subclass&#8217; value representing the number of
cannam@86 5998 alternate entropy books the partition class may use in representing Y values, the list of
cannam@86 5999 [subclass] books and a master book used to encode which alternate books were chosen
cannam@86 6000 for representation in a given packet. The master/subclass mechanism is meant to be
cannam@86 6001 used as a flexible representation cascade while still using codebooks only in a scalar
cannam@86 6002 context.
cannam@86 6003
cannam@86 6004
cannam@86 6005
cannam@86 6006 <!--l. 112--><p class="noindent" >
cannam@86 6007 <div class="fancyvrb" id="fancyvrb28">
cannam@86 6008 <a
cannam@86 6009 id="x1-99002r1"></a><span
cannam@86 6010 class="cmr-6">1</span><span
cannam@86 6011 class="cmtt-8">&#x00A0;</span><span
cannam@86 6012 class="cmtt-8">&#x00A0;</span>
cannam@86 6013 <br class="fancyvrb" /><a
cannam@86 6014 id="x1-99004r2"></a><span
cannam@86 6015 class="cmr-6">2</span><span
cannam@86 6016 class="cmtt-8">&#x00A0;</span><span
cannam@86 6017 class="cmtt-8">&#x00A0;</span><span
cannam@86 6018 class="cmtt-8">&#x00A0;</span><span
cannam@86 6019 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 6020 class="cmtt-8">&#x00A0;[floor1_partitions]</span><span
cannam@86 6021 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6022 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6023 class="cmtt-8">&#x00A0;5</span><span
cannam@86 6024 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6025 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6026 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6027 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6028 <br class="fancyvrb" /><a
cannam@86 6029 id="x1-99006r3"></a><span
cannam@86 6030 class="cmr-6">3</span><span
cannam@86 6031 class="cmtt-8">&#x00A0;</span><span
cannam@86 6032 class="cmtt-8">&#x00A0;</span><span
cannam@86 6033 class="cmtt-8">&#x00A0;</span><span
cannam@86 6034 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 6035 class="cmtt-8">&#x00A0;[maximum_class]</span><span
cannam@86 6036 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6037 class="cmtt-8">&#x00A0;-1</span>
cannam@86 6038 <br class="fancyvrb" /><a
cannam@86 6039 id="x1-99008r4"></a><span
cannam@86 6040 class="cmr-6">4</span><span
cannam@86 6041 class="cmtt-8">&#x00A0;</span><span
cannam@86 6042 class="cmtt-8">&#x00A0;</span><span
cannam@86 6043 class="cmtt-8">&#x00A0;</span><span
cannam@86 6044 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 6045 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 6046 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6047 class="cmtt-8">&#x00A0;over</span><span
cannam@86 6048 class="cmtt-8">&#x00A0;the</span><span
cannam@86 6049 class="cmtt-8">&#x00A0;range</span><span
cannam@86 6050 class="cmtt-8">&#x00A0;0</span><span
cannam@86 6051 class="cmtt-8">&#x00A0;...</span><span
cannam@86 6052 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
cannam@86 6053 class="cmtt-8">&#x00A0;</span><span
cannam@86 6054 class="cmsy-8">{</span>
cannam@86 6055 <br class="fancyvrb" /><a
cannam@86 6056 id="x1-99010r5"></a><span
cannam@86 6057 class="cmr-6">5</span><span
cannam@86 6058 class="cmtt-8">&#x00A0;</span><span
cannam@86 6059 class="cmtt-8">&#x00A0;</span>
cannam@86 6060 <br class="fancyvrb" /><a
cannam@86 6061 id="x1-99012r6"></a><span
cannam@86 6062 class="cmr-6">6</span><span
cannam@86 6063 class="cmtt-8">&#x00A0;</span><span
cannam@86 6064 class="cmtt-8">&#x00A0;</span><span
cannam@86 6065 class="cmtt-8">&#x00A0;</span><span
cannam@86 6066 class="cmtt-8">&#x00A0;</span><span
cannam@86 6067 class="cmtt-8">&#x00A0;</span><span
cannam@86 6068 class="cmtt-8">&#x00A0;</span><span
cannam@86 6069 class="cmtt-8">&#x00A0;</span><span
cannam@86 6070 class="cmtt-8">&#x00A0;</span><span
cannam@86 6071 class="cmtt-8">&#x00A0;</span><span
cannam@86 6072 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 6073 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6074 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
cannam@86 6075 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6076 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6077 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6078 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6079 class="cmtt-8">&#x00A0;4</span><span
cannam@86 6080 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6081 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6082 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6083 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6084 <br class="fancyvrb" /><a
cannam@86 6085 id="x1-99014r7"></a><span
cannam@86 6086 class="cmr-6">7</span><span
cannam@86 6087 class="cmtt-8">&#x00A0;</span><span
cannam@86 6088 class="cmtt-8">&#x00A0;</span>
cannam@86 6089 <br class="fancyvrb" /><a
cannam@86 6090 id="x1-99016r8"></a><span
cannam@86 6091 class="cmr-6">8</span><span
cannam@86 6092 class="cmtt-8">&#x00A0;</span><span
cannam@86 6093 class="cmtt-8">&#x00A0;</span><span
cannam@86 6094 class="cmtt-8">&#x00A0;</span><span
cannam@86 6095 class="cmtt-8">&#x00A0;</span><span
cannam@86 6096 class="cmtt-8">&#x00A0;</span><span
cannam@86 6097 class="cmtt-8">&#x00A0;</span><span
cannam@86 6098 class="cmtt-8">&#x00A0;</span><span
cannam@86 6099 class="cmsy-8">}</span>
cannam@86 6100 <br class="fancyvrb" /><a
cannam@86 6101 id="x1-99018r9"></a><span
cannam@86 6102 class="cmr-6">9</span><span
cannam@86 6103 class="cmtt-8">&#x00A0;</span><span
cannam@86 6104 class="cmtt-8">&#x00A0;</span>
cannam@86 6105 <br class="fancyvrb" /><a
cannam@86 6106 id="x1-99020r10"></a><span
cannam@86 6107 class="cmr-6">10</span><span
cannam@86 6108 class="cmtt-8">&#x00A0;</span><span
cannam@86 6109 class="cmtt-8">&#x00A0;</span><span
cannam@86 6110 class="cmtt-8">&#x00A0;</span><span
cannam@86 6111 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 6112 class="cmtt-8">&#x00A0;[maximum_class]</span><span
cannam@86 6113 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6114 class="cmtt-8">&#x00A0;largest</span><span
cannam@86 6115 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 6116 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 6117 class="cmtt-8">&#x00A0;value</span><span
cannam@86 6118 class="cmtt-8">&#x00A0;in</span><span
cannam@86 6119 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6120 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span>
cannam@86 6121 <br class="fancyvrb" /><a
cannam@86 6122 id="x1-99022r11"></a><span
cannam@86 6123 class="cmr-6">11</span><span
cannam@86 6124 class="cmtt-8">&#x00A0;</span><span
cannam@86 6125 class="cmtt-8">&#x00A0;</span><span
cannam@86 6126 class="cmtt-8">&#x00A0;</span><span
cannam@86 6127 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 6128 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 6129 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6130 class="cmtt-8">&#x00A0;over</span><span
cannam@86 6131 class="cmtt-8">&#x00A0;the</span><span
cannam@86 6132 class="cmtt-8">&#x00A0;range</span><span
cannam@86 6133 class="cmtt-8">&#x00A0;0</span><span
cannam@86 6134 class="cmtt-8">&#x00A0;...</span><span
cannam@86 6135 class="cmtt-8">&#x00A0;[maximum_class]</span><span
cannam@86 6136 class="cmtt-8">&#x00A0;</span><span
cannam@86 6137 class="cmsy-8">{</span>
cannam@86 6138 <br class="fancyvrb" /><a
cannam@86 6139 id="x1-99024r12"></a><span
cannam@86 6140 class="cmr-6">12</span><span
cannam@86 6141 class="cmtt-8">&#x00A0;</span><span
cannam@86 6142 class="cmtt-8">&#x00A0;</span>
cannam@86 6143 <br class="fancyvrb" /><a
cannam@86 6144 id="x1-99026r13"></a><span
cannam@86 6145 class="cmr-6">13</span><span
cannam@86 6146 class="cmtt-8">&#x00A0;</span><span
cannam@86 6147 class="cmtt-8">&#x00A0;</span><span
cannam@86 6148 class="cmtt-8">&#x00A0;</span><span
cannam@86 6149 class="cmtt-8">&#x00A0;</span><span
cannam@86 6150 class="cmtt-8">&#x00A0;</span><span
cannam@86 6151 class="cmtt-8">&#x00A0;</span><span
cannam@86 6152 class="cmtt-8">&#x00A0;</span><span
cannam@86 6153 class="cmtt-8">&#x00A0;</span><span
cannam@86 6154 class="cmtt-8">&#x00A0;</span><span
cannam@86 6155 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 6156 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6157 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
cannam@86 6158 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6159 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6160 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6161 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6162 class="cmtt-8">&#x00A0;3</span><span
cannam@86 6163 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6164 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6165 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6166 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 6167 class="cmtt-8">&#x00A0;and</span><span
cannam@86 6168 class="cmtt-8">&#x00A0;add</span><span
cannam@86 6169 class="cmtt-8">&#x00A0;1</span>
cannam@86 6170 <br class="fancyvrb" /><a
cannam@86 6171 id="x1-99028r14"></a><span
cannam@86 6172 class="cmr-6">14</span><span
cannam@86 6173 class="cmtt-8">&#x00A0;</span><span
cannam@86 6174 class="cmtt-8">&#x00A0; 8)</span><span
cannam@86 6175 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6176 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
cannam@86 6177 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6178 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6179 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6180 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6181 class="cmtt-8">&#x00A0;2</span><span
cannam@86 6182 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6183 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6184 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6185 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6186 <br class="fancyvrb" /><a
cannam@86 6187 id="x1-99030r15"></a><span
cannam@86 6188 class="cmr-6">15</span><span
cannam@86 6189 class="cmtt-8">&#x00A0;</span><span
cannam@86 6190 class="cmtt-8">&#x00A0;</span><span
cannam@86 6191 class="cmtt-8">&#x00A0;</span><span
cannam@86 6192 class="cmtt-8">&#x00A0;</span><span
cannam@86 6193 class="cmtt-8">&#x00A0;</span><span
cannam@86 6194 class="cmtt-8">&#x00A0;</span><span
cannam@86 6195 class="cmtt-8">&#x00A0;</span><span
cannam@86 6196 class="cmtt-8">&#x00A0;</span><span
cannam@86 6197 class="cmtt-8">&#x00A0;</span><span
cannam@86 6198 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 6199 class="cmtt-8">&#x00A0;if</span><span
cannam@86 6200 class="cmtt-8">&#x00A0;(</span><span
cannam@86 6201 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6202 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
cannam@86 6203 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6204 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6205 class="cmtt-8">&#x00A0;is</span><span
cannam@86 6206 class="cmtt-8">&#x00A0;nonzero</span><span
cannam@86 6207 class="cmtt-8">&#x00A0;)</span><span
cannam@86 6208 class="cmtt-8">&#x00A0;</span><span
cannam@86 6209 class="cmsy-8">{</span>
cannam@86 6210 <br class="fancyvrb" /><a
cannam@86 6211 id="x1-99032r16"></a><span
cannam@86 6212 class="cmr-6">16</span><span
cannam@86 6213 class="cmtt-8">&#x00A0;</span><span
cannam@86 6214 class="cmtt-8">&#x00A0;</span>
cannam@86 6215 <br class="fancyvrb" /><a
cannam@86 6216 id="x1-99034r17"></a><span
cannam@86 6217 class="cmr-6">17</span><span
cannam@86 6218 class="cmtt-8">&#x00A0;</span><span
cannam@86 6219 class="cmtt-8">&#x00A0;</span><span
cannam@86 6220 class="cmtt-8">&#x00A0;</span><span
cannam@86 6221 class="cmtt-8">&#x00A0;</span><span
cannam@86 6222 class="cmtt-8">&#x00A0;</span><span
cannam@86 6223 class="cmtt-8">&#x00A0;</span><span
cannam@86 6224 class="cmtt-8">&#x00A0;</span><span
cannam@86 6225 class="cmtt-8">&#x00A0;</span><span
cannam@86 6226 class="cmtt-8">&#x00A0;</span><span
cannam@86 6227 class="cmtt-8">&#x00A0;</span><span
cannam@86 6228 class="cmtt-8">&#x00A0;</span><span
cannam@86 6229 class="cmtt-8">&#x00A0;</span><span
cannam@86 6230 class="cmtt-8">&#x00A0;</span><span
cannam@86 6231 class="cmtt-8">&#x00A0;</span><span
cannam@86 6232 class="cmtt-8">&#x00A0;10)</span><span
cannam@86 6233 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6234 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
cannam@86 6235 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6236 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6237 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6238 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6239 class="cmtt-8">&#x00A0;8</span><span
cannam@86 6240 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6241 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6242 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6243 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6244 <br class="fancyvrb" /><a
cannam@86 6245 id="x1-99036r18"></a><span
cannam@86 6246 class="cmr-6">18</span><span
cannam@86 6247 class="cmtt-8">&#x00A0;</span><span
cannam@86 6248 class="cmtt-8">&#x00A0;</span>
cannam@86 6249 <br class="fancyvrb" /><a
cannam@86 6250 id="x1-99038r19"></a><span
cannam@86 6251 class="cmr-6">19</span><span
cannam@86 6252 class="cmtt-8">&#x00A0;</span><span
cannam@86 6253 class="cmtt-8">&#x00A0;</span><span
cannam@86 6254 class="cmtt-8">&#x00A0;</span><span
cannam@86 6255 class="cmtt-8">&#x00A0;</span><span
cannam@86 6256 class="cmtt-8">&#x00A0;</span><span
cannam@86 6257 class="cmtt-8">&#x00A0;</span><span
cannam@86 6258 class="cmtt-8">&#x00A0;</span><span
cannam@86 6259 class="cmtt-8">&#x00A0;</span><span
cannam@86 6260 class="cmtt-8">&#x00A0;</span><span
cannam@86 6261 class="cmtt-8">&#x00A0;</span><span
cannam@86 6262 class="cmtt-8">&#x00A0;</span><span
cannam@86 6263 class="cmtt-8">&#x00A0;</span><span
cannam@86 6264 class="cmtt-8">&#x00A0;</span><span
cannam@86 6265 class="cmsy-8">}</span>
cannam@86 6266 <br class="fancyvrb" /><a
cannam@86 6267 id="x1-99040r20"></a><span
cannam@86 6268 class="cmr-6">20</span><span
cannam@86 6269 class="cmtt-8">&#x00A0;</span><span
cannam@86 6270 class="cmtt-8">&#x00A0;</span>
cannam@86 6271 <br class="fancyvrb" /><a
cannam@86 6272 id="x1-99042r21"></a><span
cannam@86 6273 class="cmr-6">21</span><span
cannam@86 6274 class="cmtt-8">&#x00A0;</span><span
cannam@86 6275 class="cmtt-8">&#x00A0;</span><span
cannam@86 6276 class="cmtt-8">&#x00A0;</span><span
cannam@86 6277 class="cmtt-8">&#x00A0;</span><span
cannam@86 6278 class="cmtt-8">&#x00A0;</span><span
cannam@86 6279 class="cmtt-8">&#x00A0;</span><span
cannam@86 6280 class="cmtt-8">&#x00A0;</span><span
cannam@86 6281 class="cmtt-8">&#x00A0;</span><span
cannam@86 6282 class="cmtt-8">&#x00A0;11)</span><span
cannam@86 6283 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 6284 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 6285 class="cmtt-8">&#x00A0;over</span><span
cannam@86 6286 class="cmtt-8">&#x00A0;the</span><span
cannam@86 6287 class="cmtt-8">&#x00A0;range</span><span
cannam@86 6288 class="cmtt-8">&#x00A0;0</span><span
cannam@86 6289 class="cmtt-8">&#x00A0;...</span><span
cannam@86 6290 class="cmtt-8">&#x00A0;(2</span><span
cannam@86 6291 class="cmtt-8">&#x00A0;exponent</span><span
cannam@86 6292 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
cannam@86 6293 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6294 class="cmtt-8">&#x00A0;[i])</span><span
cannam@86 6295 class="cmtt-8">&#x00A0;-</span><span
cannam@86 6296 class="cmtt-8">&#x00A0;1</span><span
cannam@86 6297 class="cmtt-8">&#x00A0;</span><span
cannam@86 6298 class="cmsy-8">{</span>
cannam@86 6299 <br class="fancyvrb" /><a
cannam@86 6300 id="x1-99044r22"></a><span
cannam@86 6301 class="cmr-6">22</span><span
cannam@86 6302 class="cmtt-8">&#x00A0;</span><span
cannam@86 6303 class="cmtt-8">&#x00A0;</span>
cannam@86 6304 <br class="fancyvrb" /><a
cannam@86 6305 id="x1-99046r23"></a><span
cannam@86 6306 class="cmr-6">23</span><span
cannam@86 6307 class="cmtt-8">&#x00A0;</span><span
cannam@86 6308 class="cmtt-8">&#x00A0;</span><span
cannam@86 6309 class="cmtt-8">&#x00A0;</span><span
cannam@86 6310 class="cmtt-8">&#x00A0;</span><span
cannam@86 6311 class="cmtt-8">&#x00A0;</span><span
cannam@86 6312 class="cmtt-8">&#x00A0;</span><span
cannam@86 6313 class="cmtt-8">&#x00A0;</span><span
cannam@86 6314 class="cmtt-8">&#x00A0;</span><span
cannam@86 6315 class="cmtt-8">&#x00A0;</span><span
cannam@86 6316 class="cmtt-8">&#x00A0;</span><span
cannam@86 6317 class="cmtt-8">&#x00A0;</span><span
cannam@86 6318 class="cmtt-8">&#x00A0;</span><span
cannam@86 6319 class="cmtt-8">&#x00A0;</span><span
cannam@86 6320 class="cmtt-8">&#x00A0;</span><span
cannam@86 6321 class="cmtt-8">&#x00A0;12)</span><span
cannam@86 6322 class="cmtt-8">&#x00A0;array</span><span
cannam@86 6323 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
cannam@86 6324 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6325 class="cmtt-8">&#x00A0;[i],[j]</span><span
cannam@86 6326 class="cmtt-8">&#x00A0;=</span>
cannam@86 6327 <br class="fancyvrb" /><a
cannam@86 6328 id="x1-99048r24"></a><span
cannam@86 6329 class="cmr-6">24</span><span
cannam@86 6330 class="cmtt-8">&#x00A0;</span><span
cannam@86 6331 class="cmtt-8">&#x00A0;</span><span
cannam@86 6332 class="cmtt-8">&#x00A0;</span><span
cannam@86 6333 class="cmtt-8">&#x00A0;</span><span
cannam@86 6334 class="cmtt-8">&#x00A0;</span><span
cannam@86 6335 class="cmtt-8">&#x00A0;</span><span
cannam@86 6336 class="cmtt-8">&#x00A0;</span><span
cannam@86 6337 class="cmtt-8">&#x00A0;</span><span
cannam@86 6338 class="cmtt-8">&#x00A0;</span><span
cannam@86 6339 class="cmtt-8">&#x00A0;</span><span
cannam@86 6340 class="cmtt-8">&#x00A0;</span><span
cannam@86 6341 class="cmtt-8">&#x00A0;</span><span
cannam@86 6342 class="cmtt-8">&#x00A0;</span><span
cannam@86 6343 class="cmtt-8">&#x00A0;</span><span
cannam@86 6344 class="cmtt-8">&#x00A0;</span><span
cannam@86 6345 class="cmtt-8">&#x00A0;</span><span
cannam@86 6346 class="cmtt-8">&#x00A0;</span><span
cannam@86 6347 class="cmtt-8">&#x00A0;</span><span
cannam@86 6348 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6349 class="cmtt-8">&#x00A0;8</span><span
cannam@86 6350 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6351 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6352 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6353 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 6354 class="cmtt-8">&#x00A0;and</span><span
cannam@86 6355 class="cmtt-8">&#x00A0;subtract</span><span
cannam@86 6356 class="cmtt-8">&#x00A0;one</span>
cannam@86 6357 <br class="fancyvrb" /><a
cannam@86 6358 id="x1-99050r25"></a><span
cannam@86 6359 class="cmr-6">25</span><span
cannam@86 6360 class="cmtt-8">&#x00A0;</span><span
cannam@86 6361 class="cmtt-8">&#x00A0;</span><span
cannam@86 6362 class="cmtt-8">&#x00A0;</span><span
cannam@86 6363 class="cmtt-8">&#x00A0;</span><span
cannam@86 6364 class="cmtt-8">&#x00A0;</span><span
cannam@86 6365 class="cmtt-8">&#x00A0;</span><span
cannam@86 6366 class="cmtt-8">&#x00A0;</span><span
cannam@86 6367 class="cmtt-8">&#x00A0;</span><span
cannam@86 6368 class="cmtt-8">&#x00A0;</span><span
cannam@86 6369 class="cmtt-8">&#x00A0;</span><span
cannam@86 6370 class="cmtt-8">&#x00A0;</span><span
cannam@86 6371 class="cmtt-8">&#x00A0;</span><span
cannam@86 6372 class="cmtt-8">&#x00A0;</span><span
cannam@86 6373 class="cmsy-8">}</span>
cannam@86 6374 <br class="fancyvrb" /><a
cannam@86 6375 id="x1-99052r26"></a><span
cannam@86 6376 class="cmr-6">26</span><span
cannam@86 6377 class="cmtt-8">&#x00A0;</span><span
cannam@86 6378 class="cmtt-8">&#x00A0;</span><span
cannam@86 6379 class="cmtt-8">&#x00A0;</span><span
cannam@86 6380 class="cmtt-8">&#x00A0;</span><span
cannam@86 6381 class="cmtt-8">&#x00A0;</span><span
cannam@86 6382 class="cmtt-8">&#x00A0;</span><span
cannam@86 6383 class="cmtt-8">&#x00A0;</span><span
cannam@86 6384 class="cmtt-8">&#x00A0;</span><span
cannam@86 6385 class="cmsy-8">}</span>
cannam@86 6386 <br class="fancyvrb" /><a
cannam@86 6387 id="x1-99054r27"></a><span
cannam@86 6388 class="cmr-6">27</span><span
cannam@86 6389 class="cmtt-8">&#x00A0;</span><span
cannam@86 6390 class="cmtt-8">&#x00A0;</span>
cannam@86 6391 <br class="fancyvrb" /><a
cannam@86 6392 id="x1-99056r28"></a><span
cannam@86 6393 class="cmr-6">28</span><span
cannam@86 6394 class="cmtt-8">&#x00A0;</span><span
cannam@86 6395 class="cmtt-8">&#x00A0;</span><span
cannam@86 6396 class="cmtt-8">&#x00A0;13)</span><span
cannam@86 6397 class="cmtt-8">&#x00A0;[floor1_multiplier]</span><span
cannam@86 6398 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6399 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6400 class="cmtt-8">&#x00A0;2</span><span
cannam@86 6401 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6402 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6403 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6404 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 6405 class="cmtt-8">&#x00A0;and</span><span
cannam@86 6406 class="cmtt-8">&#x00A0;add</span><span
cannam@86 6407 class="cmtt-8">&#x00A0;one</span>
cannam@86 6408 <br class="fancyvrb" /><a
cannam@86 6409 id="x1-99058r29"></a><span
cannam@86 6410 class="cmr-6">29</span><span
cannam@86 6411 class="cmtt-8">&#x00A0;</span><span
cannam@86 6412 class="cmtt-8">&#x00A0;</span><span
cannam@86 6413 class="cmtt-8">&#x00A0;14)</span><span
cannam@86 6414 class="cmtt-8">&#x00A0;[rangebits]</span><span
cannam@86 6415 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6416 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6417 class="cmtt-8">&#x00A0;4</span><span
cannam@86 6418 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6419 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6420 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6421 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6422 <br class="fancyvrb" /><a
cannam@86 6423 id="x1-99060r30"></a><span
cannam@86 6424 class="cmr-6">30</span><span
cannam@86 6425 class="cmtt-8">&#x00A0;</span><span
cannam@86 6426 class="cmtt-8">&#x00A0;</span><span
cannam@86 6427 class="cmtt-8">&#x00A0;15)</span><span
cannam@86 6428 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6429 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
cannam@86 6430 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6431 class="cmtt-8">&#x00A0;[0]</span><span
cannam@86 6432 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6433 class="cmtt-8">&#x00A0;0</span>
cannam@86 6434 <br class="fancyvrb" /><a
cannam@86 6435 id="x1-99062r31"></a><span
cannam@86 6436 class="cmr-6">31</span><span
cannam@86 6437 class="cmtt-8">&#x00A0;</span><span
cannam@86 6438 class="cmtt-8">&#x00A0;</span><span
cannam@86 6439 class="cmtt-8">&#x00A0;16)</span><span
cannam@86 6440 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6441 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
cannam@86 6442 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6443 class="cmtt-8">&#x00A0;[1]</span><span
cannam@86 6444 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6445 class="cmtt-8">&#x00A0;2</span><span
cannam@86 6446 class="cmtt-8">&#x00A0;exponent</span><span
cannam@86 6447 class="cmtt-8">&#x00A0;[rangebits];</span>
cannam@86 6448 <br class="fancyvrb" /><a
cannam@86 6449 id="x1-99064r32"></a><span
cannam@86 6450 class="cmr-6">32</span><span
cannam@86 6451 class="cmtt-8">&#x00A0;</span><span
cannam@86 6452 class="cmtt-8">&#x00A0;</span><span
cannam@86 6453 class="cmtt-8">&#x00A0;17)</span><span
cannam@86 6454 class="cmtt-8">&#x00A0;[floor1_values]</span><span
cannam@86 6455 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6456 class="cmtt-8">&#x00A0;2</span>
cannam@86 6457 <br class="fancyvrb" /><a
cannam@86 6458 id="x1-99066r33"></a><span
cannam@86 6459 class="cmr-6">33</span><span
cannam@86 6460 class="cmtt-8">&#x00A0;</span><span
cannam@86 6461 class="cmtt-8">&#x00A0;</span><span
cannam@86 6462 class="cmtt-8">&#x00A0;18)</span><span
cannam@86 6463 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 6464 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6465 class="cmtt-8">&#x00A0;over</span><span
cannam@86 6466 class="cmtt-8">&#x00A0;the</span><span
cannam@86 6467 class="cmtt-8">&#x00A0;range</span><span
cannam@86 6468 class="cmtt-8">&#x00A0;0</span><span
cannam@86 6469 class="cmtt-8">&#x00A0;...</span><span
cannam@86 6470 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
cannam@86 6471 class="cmtt-8">&#x00A0;</span><span
cannam@86 6472 class="cmsy-8">{</span>
cannam@86 6473 <br class="fancyvrb" /><a
cannam@86 6474 id="x1-99068r34"></a><span
cannam@86 6475 class="cmr-6">34</span><span
cannam@86 6476 class="cmtt-8">&#x00A0;</span><span
cannam@86 6477 class="cmtt-8">&#x00A0;</span>
cannam@86 6478 <br class="fancyvrb" /><a
cannam@86 6479 id="x1-99070r35"></a><span
cannam@86 6480 class="cmr-6">35</span><span
cannam@86 6481 class="cmtt-8">&#x00A0;</span><span
cannam@86 6482 class="cmtt-8">&#x00A0;</span><span
cannam@86 6483 class="cmtt-8">&#x00A0;</span><span
cannam@86 6484 class="cmtt-8">&#x00A0;</span><span
cannam@86 6485 class="cmtt-8">&#x00A0;</span><span
cannam@86 6486 class="cmtt-8">&#x00A0;</span><span
cannam@86 6487 class="cmtt-8">&#x00A0;</span><span
cannam@86 6488 class="cmtt-8">&#x00A0;</span><span
cannam@86 6489 class="cmtt-8">&#x00A0;19)</span><span
cannam@86 6490 class="cmtt-8">&#x00A0;[current_class_number]</span><span
cannam@86 6491 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6492 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6493 class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
cannam@86 6494 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6495 class="cmtt-8">&#x00A0;[i]</span>
cannam@86 6496 <br class="fancyvrb" /><a
cannam@86 6497 id="x1-99072r36"></a><span
cannam@86 6498 class="cmr-6">36</span><span
cannam@86 6499 class="cmtt-8">&#x00A0;</span><span
cannam@86 6500 class="cmtt-8">&#x00A0;</span><span
cannam@86 6501 class="cmtt-8">&#x00A0;</span><span
cannam@86 6502 class="cmtt-8">&#x00A0;</span><span
cannam@86 6503 class="cmtt-8">&#x00A0;</span><span
cannam@86 6504 class="cmtt-8">&#x00A0;</span><span
cannam@86 6505 class="cmtt-8">&#x00A0;</span><span
cannam@86 6506 class="cmtt-8">&#x00A0;</span><span
cannam@86 6507 class="cmtt-8">&#x00A0;20)</span><span
cannam@86 6508 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 6509 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 6510 class="cmtt-8">&#x00A0;over</span><span
cannam@86 6511 class="cmtt-8">&#x00A0;the</span><span
cannam@86 6512 class="cmtt-8">&#x00A0;range</span><span
cannam@86 6513 class="cmtt-8">&#x00A0;0</span><span
cannam@86 6514 class="cmtt-8">&#x00A0;...</span><span
cannam@86 6515 class="cmtt-8">&#x00A0;([floor1_class_dimensions]</span><span
cannam@86 6516 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6517 class="cmtt-8">&#x00A0;[current_class_number])-1</span><span
cannam@86 6518 class="cmtt-8">&#x00A0;</span><span
cannam@86 6519 class="cmsy-8">{</span>
cannam@86 6520 <br class="fancyvrb" /><a
cannam@86 6521 id="x1-99074r37"></a><span
cannam@86 6522 class="cmr-6">37</span><span
cannam@86 6523 class="cmtt-8">&#x00A0;</span><span
cannam@86 6524 class="cmtt-8">&#x00A0;</span><span
cannam@86 6525 class="cmtt-8">&#x00A0;</span><span
cannam@86 6526 class="cmtt-8">&#x00A0;</span><span
cannam@86 6527 class="cmtt-8">&#x00A0;</span><span
cannam@86 6528 class="cmtt-8">&#x00A0;</span><span
cannam@86 6529 class="cmtt-8">&#x00A0;</span><span
cannam@86 6530 class="cmtt-8">&#x00A0;</span><span
cannam@86 6531 class="cmtt-8">&#x00A0;</span><span
cannam@86 6532 class="cmtt-8">&#x00A0;</span><span
cannam@86 6533 class="cmtt-8">&#x00A0;</span><span
cannam@86 6534 class="cmtt-8">&#x00A0;</span><span
cannam@86 6535 class="cmtt-8">&#x00A0;</span><span
cannam@86 6536 class="cmtt-8">&#x00A0;</span><span
cannam@86 6537 class="cmtt-8">&#x00A0;21)</span><span
cannam@86 6538 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6539 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
cannam@86 6540 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6541 class="cmtt-8">&#x00A0;([floor1_values])</span><span
cannam@86 6542 class="cmtt-8">&#x00A0;=</span>
cannam@86 6543 <br class="fancyvrb" /><a
cannam@86 6544 id="x1-99076r38"></a><span
cannam@86 6545 class="cmr-6">38</span><span
cannam@86 6546 class="cmtt-8">&#x00A0;</span><span
cannam@86 6547 class="cmtt-8">&#x00A0;</span><span
cannam@86 6548 class="cmtt-8">&#x00A0;</span><span
cannam@86 6549 class="cmtt-8">&#x00A0;</span><span
cannam@86 6550 class="cmtt-8">&#x00A0;</span><span
cannam@86 6551 class="cmtt-8">&#x00A0;</span><span
cannam@86 6552 class="cmtt-8">&#x00A0;</span><span
cannam@86 6553 class="cmtt-8">&#x00A0;</span><span
cannam@86 6554 class="cmtt-8">&#x00A0;</span><span
cannam@86 6555 class="cmtt-8">&#x00A0;</span><span
cannam@86 6556 class="cmtt-8">&#x00A0;</span><span
cannam@86 6557 class="cmtt-8">&#x00A0;</span><span
cannam@86 6558 class="cmtt-8">&#x00A0;</span><span
cannam@86 6559 class="cmtt-8">&#x00A0;</span><span
cannam@86 6560 class="cmtt-8">&#x00A0;</span><span
cannam@86 6561 class="cmtt-8">&#x00A0;</span><span
cannam@86 6562 class="cmtt-8">&#x00A0;</span><span
cannam@86 6563 class="cmtt-8">&#x00A0;</span><span
cannam@86 6564 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6565 class="cmtt-8">&#x00A0;[rangebits]</span><span
cannam@86 6566 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6567 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6568 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6569 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6570 <br class="fancyvrb" /><a
cannam@86 6571 id="x1-99078r39"></a><span
cannam@86 6572 class="cmr-6">39</span><span
cannam@86 6573 class="cmtt-8">&#x00A0;</span><span
cannam@86 6574 class="cmtt-8">&#x00A0;</span><span
cannam@86 6575 class="cmtt-8">&#x00A0;</span><span
cannam@86 6576 class="cmtt-8">&#x00A0;</span><span
cannam@86 6577 class="cmtt-8">&#x00A0;</span><span
cannam@86 6578 class="cmtt-8">&#x00A0;</span><span
cannam@86 6579 class="cmtt-8">&#x00A0;</span><span
cannam@86 6580 class="cmtt-8">&#x00A0;</span><span
cannam@86 6581 class="cmtt-8">&#x00A0;</span><span
cannam@86 6582 class="cmtt-8">&#x00A0;</span><span
cannam@86 6583 class="cmtt-8">&#x00A0;</span><span
cannam@86 6584 class="cmtt-8">&#x00A0;</span><span
cannam@86 6585 class="cmtt-8">&#x00A0;</span><span
cannam@86 6586 class="cmtt-8">&#x00A0;</span><span
cannam@86 6587 class="cmtt-8">&#x00A0;22)</span><span
cannam@86 6588 class="cmtt-8">&#x00A0;increment</span><span
cannam@86 6589 class="cmtt-8">&#x00A0;[floor1_values]</span><span
cannam@86 6590 class="cmtt-8">&#x00A0;by</span><span
cannam@86 6591 class="cmtt-8">&#x00A0;one</span>
cannam@86 6592 <br class="fancyvrb" /><a
cannam@86 6593 id="x1-99080r40"></a><span
cannam@86 6594 class="cmr-6">40</span><span
cannam@86 6595 class="cmtt-8">&#x00A0;</span><span
cannam@86 6596 class="cmtt-8">&#x00A0;</span><span
cannam@86 6597 class="cmtt-8">&#x00A0;</span><span
cannam@86 6598 class="cmtt-8">&#x00A0;</span><span
cannam@86 6599 class="cmtt-8">&#x00A0;</span><span
cannam@86 6600 class="cmtt-8">&#x00A0;</span><span
cannam@86 6601 class="cmtt-8">&#x00A0;</span><span
cannam@86 6602 class="cmtt-8">&#x00A0;</span><span
cannam@86 6603 class="cmtt-8">&#x00A0;</span><span
cannam@86 6604 class="cmtt-8">&#x00A0;</span><span
cannam@86 6605 class="cmtt-8">&#x00A0;</span><span
cannam@86 6606 class="cmtt-8">&#x00A0;</span><span
cannam@86 6607 class="cmtt-8">&#x00A0;</span><span
cannam@86 6608 class="cmsy-8">}</span>
cannam@86 6609 <br class="fancyvrb" /><a
cannam@86 6610 id="x1-99082r41"></a><span
cannam@86 6611 class="cmr-6">41</span><span
cannam@86 6612 class="cmtt-8">&#x00A0;</span><span
cannam@86 6613 class="cmtt-8">&#x00A0;</span><span
cannam@86 6614 class="cmtt-8">&#x00A0;</span><span
cannam@86 6615 class="cmtt-8">&#x00A0;</span><span
cannam@86 6616 class="cmtt-8">&#x00A0;</span><span
cannam@86 6617 class="cmtt-8">&#x00A0;</span><span
cannam@86 6618 class="cmtt-8">&#x00A0;</span><span
cannam@86 6619 class="cmsy-8">}</span>
cannam@86 6620 <br class="fancyvrb" /><a
cannam@86 6621 id="x1-99084r42"></a><span
cannam@86 6622 class="cmr-6">42</span><span
cannam@86 6623 class="cmtt-8">&#x00A0;</span><span
cannam@86 6624 class="cmtt-8">&#x00A0;</span>
cannam@86 6625 <br class="fancyvrb" /><a
cannam@86 6626 id="x1-99086r43"></a><span
cannam@86 6627 class="cmr-6">43</span><span
cannam@86 6628 class="cmtt-8">&#x00A0;</span><span
cannam@86 6629 class="cmtt-8">&#x00A0;</span><span
cannam@86 6630 class="cmtt-8">&#x00A0;23)</span><span
cannam@86 6631 class="cmtt-8">&#x00A0;done</span>
cannam@86 6632 </div>
cannam@86 6633 <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
cannam@86 6634 setup renders a stream undecodable. In addition, a <span
cannam@86 6635 class="cmtt-12">[floor1_class_masterbooks] </span>or
cannam@86 6636 <span
cannam@86 6637 class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
cannam@86 6638 configured in this stream is an error condition that renders the stream undecodable. Vector
cannam@86 6639 [floor1_x_list] is limited to a maximum length of 65 elements; a setup indicating more than 65
cannam@86 6640 total elements (including elements 0 and 1 set prior to the read loop) renders the stream
cannam@86 6641 undecodable. All vector [floor1_x_list] element values must be unique within the vector; a
cannam@86 6642 non-unique value renders the stream undecodable.
cannam@86 6643
cannam@86 6644
cannam@86 6645
cannam@86 6646 <!--l. 170--><p class="noindent" >
cannam@86 6647 <h5 class="subsubsectionHead"><span class="titlemark">7.2.3. </span> <a
cannam@86 6648 id="x1-1000007.2.3"></a>packet decode</h5>
cannam@86 6649 <!--l. 172--><p class="noindent" >Packet decode begins by checking the <span
cannam@86 6650 class="cmtt-12">[nonzero] </span>flag:
cannam@86 6651 <!--l. 174--><p class="noindent" >
cannam@86 6652 <div class="fancyvrb" id="fancyvrb29">
cannam@86 6653 <a
cannam@86 6654 id="x1-100002r1"></a><span
cannam@86 6655 class="cmr-6">1</span><span
cannam@86 6656 class="cmtt-8">&#x00A0;</span><span
cannam@86 6657 class="cmtt-8">&#x00A0;</span><span
cannam@86 6658 class="cmtt-8">&#x00A0;</span><span
cannam@86 6659 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 6660 class="cmtt-8">&#x00A0;[nonzero]</span><span
cannam@86 6661 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6662 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6663 class="cmtt-8">&#x00A0;1</span><span
cannam@86 6664 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 6665 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6666 class="cmtt-8">&#x00A0;boolean</span>
cannam@86 6667 </div>
cannam@86 6668 <!--l. 178--><p class="noindent" >If <span
cannam@86 6669 class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
cannam@86 6670 Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
cannam@86 6671 this frame. (A return status of &#8217;unused&#8217; is different from decoding a floor that has all
cannam@86 6672 points set to minimum representation amplitude, which happens to be approximately
cannam@86 6673 -140dB).
cannam@86 6674 <!--l. 186--><p class="noindent" >Assuming <span
cannam@86 6675 class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
cannam@86 6676 <!--l. 188--><p class="noindent" >
cannam@86 6677 <div class="fancyvrb" id="fancyvrb30">
cannam@86 6678 <a
cannam@86 6679 id="x1-100004r1"></a><span
cannam@86 6680 class="cmr-6">1</span><span
cannam@86 6681 class="cmtt-8">&#x00A0;</span><span
cannam@86 6682 class="cmtt-8">&#x00A0;</span><span
cannam@86 6683 class="cmtt-8">&#x00A0;</span><span
cannam@86 6684 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 6685 class="cmtt-8">&#x00A0;[range]</span><span
cannam@86 6686 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6687 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6688 class="cmtt-8">&#x00A0;</span><span
cannam@86 6689 class="cmsy-8">{</span><span
cannam@86 6690 class="cmtt-8">&#x00A0;256,</span><span
cannam@86 6691 class="cmtt-8">&#x00A0;128,</span><span
cannam@86 6692 class="cmtt-8">&#x00A0;86,</span><span
cannam@86 6693 class="cmtt-8">&#x00A0;64</span><span
cannam@86 6694 class="cmtt-8">&#x00A0;</span><span
cannam@86 6695 class="cmsy-8">}</span><span
cannam@86 6696 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6697 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
cannam@86 6698 <br class="fancyvrb" /><a
cannam@86 6699 id="x1-100006r2"></a><span
cannam@86 6700 class="cmr-6">2</span><span
cannam@86 6701 class="cmtt-8">&#x00A0;</span><span
cannam@86 6702 class="cmtt-8">&#x00A0;</span><span
cannam@86 6703 class="cmtt-8">&#x00A0;</span><span
cannam@86 6704 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 6705 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6706 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
cannam@86 6707 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6708 class="cmtt-8">&#x00A0;[0]</span><span
cannam@86 6709 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6710 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6711 class="cmtt-8">&#x00A0;</span><a
cannam@86 6712 href="#x1-1170009.2.1"><span
cannam@86 6713 class="cmtt-8">ilog</span></a><span
cannam@86 6714 class="cmtt-8">([range]-1)</span><span
cannam@86 6715 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6716 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6717 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6718 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6719 <br class="fancyvrb" /><a
cannam@86 6720 id="x1-100008r3"></a><span
cannam@86 6721 class="cmr-6">3</span><span
cannam@86 6722 class="cmtt-8">&#x00A0;</span><span
cannam@86 6723 class="cmtt-8">&#x00A0;</span><span
cannam@86 6724 class="cmtt-8">&#x00A0;</span><span
cannam@86 6725 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 6726 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6727 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
cannam@86 6728 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6729 class="cmtt-8">&#x00A0;[1]</span><span
cannam@86 6730 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6731 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6732 class="cmtt-8">&#x00A0;</span><a
cannam@86 6733 href="#x1-1170009.2.1"><span
cannam@86 6734 class="cmtt-8">ilog</span></a><span
cannam@86 6735 class="cmtt-8">([range]-1)</span><span
cannam@86 6736 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 6737 class="cmtt-8">&#x00A0;as</span><span
cannam@86 6738 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 6739 class="cmtt-8">&#x00A0;integer</span>
cannam@86 6740 <br class="fancyvrb" /><a
cannam@86 6741 id="x1-100010r4"></a><span
cannam@86 6742 class="cmr-6">4</span><span
cannam@86 6743 class="cmtt-8">&#x00A0;</span><span
cannam@86 6744 class="cmtt-8">&#x00A0;</span><span
cannam@86 6745 class="cmtt-8">&#x00A0;</span><span
cannam@86 6746 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 6747 class="cmtt-8">&#x00A0;[offset]</span><span
cannam@86 6748 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6749 class="cmtt-8">&#x00A0;2;</span>
cannam@86 6750 <br class="fancyvrb" /><a
cannam@86 6751 id="x1-100012r5"></a><span
cannam@86 6752 class="cmr-6">5</span><span
cannam@86 6753 class="cmtt-8">&#x00A0;</span><span
cannam@86 6754 class="cmtt-8">&#x00A0;</span><span
cannam@86 6755 class="cmtt-8">&#x00A0;</span><span
cannam@86 6756 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 6757 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 6758 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 6759 class="cmtt-8">&#x00A0;over</span><span
cannam@86 6760 class="cmtt-8">&#x00A0;the</span><span
cannam@86 6761 class="cmtt-8">&#x00A0;range</span><span
cannam@86 6762 class="cmtt-8">&#x00A0;0</span><span
cannam@86 6763 class="cmtt-8">&#x00A0;...</span><span
cannam@86 6764 class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
cannam@86 6765 class="cmtt-8">&#x00A0;</span><span
cannam@86 6766 class="cmsy-8">{</span>
cannam@86 6767 <br class="fancyvrb" /><a
cannam@86 6768 id="x1-100014r6"></a><span
cannam@86 6769 class="cmr-6">6</span><span
cannam@86 6770 class="cmtt-8">&#x00A0;</span><span
cannam@86 6771 class="cmtt-8">&#x00A0;</span>
cannam@86 6772 <br class="fancyvrb" /><a
cannam@86 6773 id="x1-100016r7"></a><span
cannam@86 6774 class="cmr-6">7</span><span
cannam@86 6775 class="cmtt-8">&#x00A0;</span><span
cannam@86 6776 class="cmtt-8">&#x00A0;</span><span
cannam@86 6777 class="cmtt-8">&#x00A0;</span><span
cannam@86 6778 class="cmtt-8">&#x00A0;</span><span
cannam@86 6779 class="cmtt-8">&#x00A0;</span><span
cannam@86 6780 class="cmtt-8">&#x00A0;</span><span
cannam@86 6781 class="cmtt-8">&#x00A0;</span><span
cannam@86 6782 class="cmtt-8">&#x00A0;</span><span
cannam@86 6783 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 6784 class="cmtt-8">&#x00A0;[class]</span><span
cannam@86 6785 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6786 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6787 class="cmtt-8">&#x00A0;[floor1_partition_class]</span><span
cannam@86 6788 class="cmtt-8">&#x00A0;</span><span
cannam@86 6789 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6790 class="cmtt-8">&#x00A0;[i]</span>
cannam@86 6791 <br class="fancyvrb" /><a
cannam@86 6792 id="x1-100018r8"></a><span
cannam@86 6793 class="cmr-6">8</span><span
cannam@86 6794 class="cmtt-8">&#x00A0;</span><span
cannam@86 6795 class="cmtt-8">&#x00A0;</span><span
cannam@86 6796 class="cmtt-8">&#x00A0;</span><span
cannam@86 6797 class="cmtt-8">&#x00A0;</span><span
cannam@86 6798 class="cmtt-8">&#x00A0;</span><span
cannam@86 6799 class="cmtt-8">&#x00A0;</span><span
cannam@86 6800 class="cmtt-8">&#x00A0;</span><span
cannam@86 6801 class="cmtt-8">&#x00A0;</span><span
cannam@86 6802 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 6803 class="cmtt-8">&#x00A0;[cdim]</span><span
cannam@86 6804 class="cmtt-8">&#x00A0;</span><span
cannam@86 6805 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6806 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6807 class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
cannam@86 6808 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6809 class="cmtt-8">&#x00A0;[class]</span>
cannam@86 6810 <br class="fancyvrb" /><a
cannam@86 6811 id="x1-100020r9"></a><span
cannam@86 6812 class="cmr-6">9</span><span
cannam@86 6813 class="cmtt-8">&#x00A0;</span><span
cannam@86 6814 class="cmtt-8">&#x00A0;</span><span
cannam@86 6815 class="cmtt-8">&#x00A0;</span><span
cannam@86 6816 class="cmtt-8">&#x00A0;</span><span
cannam@86 6817 class="cmtt-8">&#x00A0;</span><span
cannam@86 6818 class="cmtt-8">&#x00A0;</span><span
cannam@86 6819 class="cmtt-8">&#x00A0;</span><span
cannam@86 6820 class="cmtt-8">&#x00A0;</span><span
cannam@86 6821 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 6822 class="cmtt-8">&#x00A0;[cbits]</span><span
cannam@86 6823 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6824 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 6825 class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
cannam@86 6826 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6827 class="cmtt-8">&#x00A0;[class]</span>
cannam@86 6828 <br class="fancyvrb" /><a
cannam@86 6829 id="x1-100022r10"></a><span
cannam@86 6830 class="cmr-6">10</span><span
cannam@86 6831 class="cmtt-8">&#x00A0;</span><span
cannam@86 6832 class="cmtt-8">&#x00A0;</span><span
cannam@86 6833 class="cmtt-8">&#x00A0;</span><span
cannam@86 6834 class="cmtt-8">&#x00A0;</span><span
cannam@86 6835 class="cmtt-8">&#x00A0;</span><span
cannam@86 6836 class="cmtt-8">&#x00A0;</span><span
cannam@86 6837 class="cmtt-8">&#x00A0;</span><span
cannam@86 6838 class="cmtt-8">&#x00A0;</span><span
cannam@86 6839 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 6840 class="cmtt-8">&#x00A0;[csub]</span><span
cannam@86 6841 class="cmtt-8">&#x00A0;</span><span
cannam@86 6842 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6843 class="cmtt-8">&#x00A0;(2</span><span
cannam@86 6844 class="cmtt-8">&#x00A0;exponent</span><span
cannam@86 6845 class="cmtt-8">&#x00A0;[cbits])-1</span>
cannam@86 6846 <br class="fancyvrb" /><a
cannam@86 6847 id="x1-100024r11"></a><span
cannam@86 6848 class="cmr-6">11</span><span
cannam@86 6849 class="cmtt-8">&#x00A0;</span><span
cannam@86 6850 class="cmtt-8">&#x00A0;</span><span
cannam@86 6851 class="cmtt-8">&#x00A0;</span><span
cannam@86 6852 class="cmtt-8">&#x00A0;</span><span
cannam@86 6853 class="cmtt-8">&#x00A0;</span><span
cannam@86 6854 class="cmtt-8">&#x00A0;</span><span
cannam@86 6855 class="cmtt-8">&#x00A0;</span><span
cannam@86 6856 class="cmtt-8">&#x00A0;10)</span><span
cannam@86 6857 class="cmtt-8">&#x00A0;[cval]</span><span
cannam@86 6858 class="cmtt-8">&#x00A0;</span><span
cannam@86 6859 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6860 class="cmtt-8">&#x00A0;0</span>
cannam@86 6861 <br class="fancyvrb" /><a
cannam@86 6862 id="x1-100026r12"></a><span
cannam@86 6863 class="cmr-6">12</span><span
cannam@86 6864 class="cmtt-8">&#x00A0;</span><span
cannam@86 6865 class="cmtt-8">&#x00A0;</span><span
cannam@86 6866 class="cmtt-8">&#x00A0;</span><span
cannam@86 6867 class="cmtt-8">&#x00A0;</span><span
cannam@86 6868 class="cmtt-8">&#x00A0;</span><span
cannam@86 6869 class="cmtt-8">&#x00A0;</span><span
cannam@86 6870 class="cmtt-8">&#x00A0;</span><span
cannam@86 6871 class="cmtt-8">&#x00A0;11)</span><span
cannam@86 6872 class="cmtt-8">&#x00A0;if</span><span
cannam@86 6873 class="cmtt-8">&#x00A0;(</span><span
cannam@86 6874 class="cmtt-8">&#x00A0;[cbits]</span><span
cannam@86 6875 class="cmtt-8">&#x00A0;is</span><span
cannam@86 6876 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 6877 class="cmtt-8">&#x00A0;than</span><span
cannam@86 6878 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 6879 class="cmtt-8">&#x00A0;)</span><span
cannam@86 6880 class="cmtt-8">&#x00A0;</span><span
cannam@86 6881 class="cmsy-8">{</span>
cannam@86 6882 <br class="fancyvrb" /><a
cannam@86 6883 id="x1-100028r13"></a><span
cannam@86 6884 class="cmr-6">13</span><span
cannam@86 6885 class="cmtt-8">&#x00A0;</span><span
cannam@86 6886 class="cmtt-8">&#x00A0;</span>
cannam@86 6887 <br class="fancyvrb" /><a
cannam@86 6888 id="x1-100030r14"></a><span
cannam@86 6889 class="cmr-6">14</span><span
cannam@86 6890 class="cmtt-8">&#x00A0;</span><span
cannam@86 6891 class="cmtt-8">&#x00A0;</span><span
cannam@86 6892 class="cmtt-8">&#x00A0;</span><span
cannam@86 6893 class="cmtt-8">&#x00A0;</span><span
cannam@86 6894 class="cmtt-8">&#x00A0;</span><span
cannam@86 6895 class="cmtt-8">&#x00A0;</span><span
cannam@86 6896 class="cmtt-8">&#x00A0;</span><span
cannam@86 6897 class="cmtt-8">&#x00A0;</span><span
cannam@86 6898 class="cmtt-8">&#x00A0;</span><span
cannam@86 6899 class="cmtt-8">&#x00A0;</span><span
cannam@86 6900 class="cmtt-8">&#x00A0;</span><span
cannam@86 6901 class="cmtt-8">&#x00A0;</span><span
cannam@86 6902 class="cmtt-8">&#x00A0;</span><span
cannam@86 6903 class="cmtt-8">&#x00A0;</span><span
cannam@86 6904 class="cmtt-8">&#x00A0;12)</span><span
cannam@86 6905 class="cmtt-8">&#x00A0;[cval]</span><span
cannam@86 6906 class="cmtt-8">&#x00A0;=</span><span
cannam@86 6907 class="cmtt-8">&#x00A0;read</span><span
cannam@86 6908 class="cmtt-8">&#x00A0;from</span><span
cannam@86 6909 class="cmtt-8">&#x00A0;packet</span><span
cannam@86 6910 class="cmtt-8">&#x00A0;using</span><span
cannam@86 6911 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 6912 class="cmtt-8">&#x00A0;number</span>
cannam@86 6913 <br class="fancyvrb" /><a
cannam@86 6914 id="x1-100032r15"></a><span
cannam@86 6915 class="cmr-6">15</span><span
cannam@86 6916 class="cmtt-8">&#x00A0;</span><span
cannam@86 6917 class="cmtt-8">&#x00A0;</span><span
cannam@86 6918 class="cmtt-8">&#x00A0;</span><span
cannam@86 6919 class="cmtt-8">&#x00A0;</span><span
cannam@86 6920 class="cmtt-8">&#x00A0;</span><span
cannam@86 6921 class="cmtt-8">&#x00A0;</span><span
cannam@86 6922 class="cmtt-8">&#x00A0;</span><span
cannam@86 6923 class="cmtt-8">&#x00A0;</span><span
cannam@86 6924 class="cmtt-8">&#x00A0;</span><span
cannam@86 6925 class="cmtt-8">&#x00A0;</span><span
cannam@86 6926 class="cmtt-8">&#x00A0;</span><span
cannam@86 6927 class="cmtt-8">&#x00A0;</span><span
cannam@86 6928 class="cmtt-8">&#x00A0;</span><span
cannam@86 6929 class="cmtt-8">&#x00A0;</span><span
cannam@86 6930 class="cmtt-8">&#x00A0;</span><span
cannam@86 6931 class="cmtt-8">&#x00A0;</span><span
cannam@86 6932 class="cmtt-8">&#x00A0;</span><span
cannam@86 6933 class="cmtt-8">&#x00A0;</span><span
cannam@86 6934 class="cmtt-8">&#x00A0;(vector</span><span
cannam@86 6935 class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
cannam@86 6936 class="cmtt-8">&#x00A0;element</span><span
cannam@86 6937 class="cmtt-8">&#x00A0;[class])</span><span
cannam@86 6938 class="cmtt-8">&#x00A0;in</span><span
cannam@86 6939 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 6940 class="cmtt-8">&#x00A0;context</span>
cannam@86 6941 <br class="fancyvrb" /><a
cannam@86 6942 id="x1-100034r16"></a><span
cannam@86 6943 class="cmr-6">16</span><span
cannam@86 6944 class="cmtt-8">&#x00A0;</span><span
cannam@86 6945 class="cmtt-8">&#x00A0;</span><span
cannam@86 6946 class="cmtt-8">&#x00A0;</span><span
cannam@86 6947 class="cmtt-8">&#x00A0;</span><span
cannam@86 6948 class="cmtt-8">&#x00A0;</span><span
cannam@86 6949 class="cmtt-8">&#x00A0;</span><span
cannam@86 6950 class="cmtt-8">&#x00A0;</span><span
cannam@86 6951 class="cmtt-8">&#x00A0;</span><span
cannam@86 6952 class="cmtt-8">&#x00A0;</span><span
cannam@86 6953 class="cmtt-8">&#x00A0;</span><span
cannam@86 6954 class="cmtt-8">&#x00A0;</span><span
cannam@86 6955 class="cmtt-8">&#x00A0;</span><span
cannam@86 6956 class="cmsy-8">}</span>
cannam@86 6957 <br class="fancyvrb" /><a
cannam@86 6958 id="x1-100036r17"></a><span
cannam@86 6959 class="cmr-6">17</span><span
cannam@86 6960 class="cmtt-8">&#x00A0;</span><span
cannam@86 6961 class="cmtt-8">&#x00A0;</span>
cannam@86 6962 <br class="fancyvrb" /><a
cannam@86 6963 id="x1-100038r18"></a><span
cannam@86 6964 class="cmr-6">18</span><span
cannam@86 6965 class="cmtt-8">&#x00A0;</span><span
cannam@86 6966 class="cmtt-8">&#x00A0;</span><span
cannam@86 6967 class="cmtt-8">&#x00A0;</span><span
cannam@86 6968 class="cmtt-8">&#x00A0;</span><span
cannam@86 6969 class="cmtt-8">&#x00A0;</span><span
cannam@86 6970 class="cmtt-8">&#x00A0;</span><span
cannam@86 6971 class="cmtt-8">&#x00A0;</span><span
cannam@86 6972 class="cmtt-8">&#x00A0;13)</span><span
cannam@86 6973 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 6974 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 6975 class="cmtt-8">&#x00A0;over</span><span
cannam@86 6976 class="cmtt-8">&#x00A0;the</span><span
cannam@86 6977 class="cmtt-8">&#x00A0;range</span><span
cannam@86 6978 class="cmtt-8">&#x00A0;0</span><span
cannam@86 6979 class="cmtt-8">&#x00A0;...</span><span
cannam@86 6980 class="cmtt-8">&#x00A0;[cdim]-1</span><span
cannam@86 6981 class="cmtt-8">&#x00A0;</span><span
cannam@86 6982 class="cmsy-8">{</span>
cannam@86 6983 <br class="fancyvrb" /><a
cannam@86 6984 id="x1-100040r19"></a><span
cannam@86 6985 class="cmr-6">19</span><span
cannam@86 6986 class="cmtt-8">&#x00A0;</span><span
cannam@86 6987 class="cmtt-8">&#x00A0;</span>
cannam@86 6988 <br class="fancyvrb" /><a
cannam@86 6989 id="x1-100042r20"></a><span
cannam@86 6990 class="cmr-6">20</span><span
cannam@86 6991 class="cmtt-8">&#x00A0;</span><span
cannam@86 6992 class="cmtt-8">&#x00A0;</span><span
cannam@86 6993 class="cmtt-8">&#x00A0;</span><span
cannam@86 6994 class="cmtt-8">&#x00A0;</span><span
cannam@86 6995 class="cmtt-8">&#x00A0;</span><span
cannam@86 6996 class="cmtt-8">&#x00A0;</span><span
cannam@86 6997 class="cmtt-8">&#x00A0;</span><span
cannam@86 6998 class="cmtt-8">&#x00A0;</span><span
cannam@86 6999 class="cmtt-8">&#x00A0;</span><span
cannam@86 7000 class="cmtt-8">&#x00A0;</span><span
cannam@86 7001 class="cmtt-8">&#x00A0;</span><span
cannam@86 7002 class="cmtt-8">&#x00A0;</span><span
cannam@86 7003 class="cmtt-8">&#x00A0;</span><span
cannam@86 7004 class="cmtt-8">&#x00A0;</span><span
cannam@86 7005 class="cmtt-8">&#x00A0;14)</span><span
cannam@86 7006 class="cmtt-8">&#x00A0;[book]</span><span
cannam@86 7007 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7008 class="cmtt-8">&#x00A0;array</span><span
cannam@86 7009 class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
cannam@86 7010 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7011 class="cmtt-8">&#x00A0;[class],([cval]</span><span
cannam@86 7012 class="cmtt-8">&#x00A0;bitwise</span><span
cannam@86 7013 class="cmtt-8">&#x00A0;AND</span><span
cannam@86 7014 class="cmtt-8">&#x00A0;[csub])</span>
cannam@86 7015 <br class="fancyvrb" /><a
cannam@86 7016 id="x1-100044r21"></a><span
cannam@86 7017 class="cmr-6">21</span><span
cannam@86 7018 class="cmtt-8">&#x00A0;</span><span
cannam@86 7019 class="cmtt-8">&#x00A0;</span><span
cannam@86 7020 class="cmtt-8">&#x00A0;</span><span
cannam@86 7021 class="cmtt-8">&#x00A0;</span><span
cannam@86 7022 class="cmtt-8">&#x00A0;</span><span
cannam@86 7023 class="cmtt-8">&#x00A0;</span><span
cannam@86 7024 class="cmtt-8">&#x00A0;</span><span
cannam@86 7025 class="cmtt-8">&#x00A0;</span><span
cannam@86 7026 class="cmtt-8">&#x00A0;</span><span
cannam@86 7027 class="cmtt-8">&#x00A0;</span><span
cannam@86 7028 class="cmtt-8">&#x00A0;</span><span
cannam@86 7029 class="cmtt-8">&#x00A0;</span><span
cannam@86 7030 class="cmtt-8">&#x00A0;</span><span
cannam@86 7031 class="cmtt-8">&#x00A0;</span><span
cannam@86 7032 class="cmtt-8">&#x00A0;15)</span><span
cannam@86 7033 class="cmtt-8">&#x00A0;[cval]</span><span
cannam@86 7034 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7035 class="cmtt-8">&#x00A0;[cval]</span><span
cannam@86 7036 class="cmtt-8">&#x00A0;right</span><span
cannam@86 7037 class="cmtt-8">&#x00A0;shifted</span><span
cannam@86 7038 class="cmtt-8">&#x00A0;[cbits]</span><span
cannam@86 7039 class="cmtt-8">&#x00A0;bits</span>
cannam@86 7040 <br class="fancyvrb" /><a
cannam@86 7041 id="x1-100046r22"></a><span
cannam@86 7042 class="cmr-6">22</span><span
cannam@86 7043 class="cmtt-8">&#x00A0;</span><span
cannam@86 7044 class="cmtt-8">&#x00A0; </span><span
cannam@86 7045 class="cmtt-8">&#x00A0;</span><span
cannam@86 7046 class="cmtt-8">&#x00A0;</span><span
cannam@86 7047 class="cmtt-8">&#x00A0;</span><span
cannam@86 7048 class="cmtt-8">&#x00A0;</span><span
cannam@86 7049 class="cmtt-8">&#x00A0;16)</span><span
cannam@86 7050 class="cmtt-8">&#x00A0;if</span><span
cannam@86 7051 class="cmtt-8">&#x00A0;(</span><span
cannam@86 7052 class="cmtt-8">&#x00A0;[book]</span><span
cannam@86 7053 class="cmtt-8">&#x00A0;is</span><span
cannam@86 7054 class="cmtt-8">&#x00A0;not</span><span
cannam@86 7055 class="cmtt-8">&#x00A0;less</span><span
cannam@86 7056 class="cmtt-8">&#x00A0;than</span><span
cannam@86 7057 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 7058 class="cmtt-8">&#x00A0;)</span><span
cannam@86 7059 class="cmtt-8">&#x00A0;</span><span
cannam@86 7060 class="cmsy-8">{</span>
cannam@86 7061 <br class="fancyvrb" /><a
cannam@86 7062 id="x1-100048r23"></a><span
cannam@86 7063 class="cmr-6">23</span><span
cannam@86 7064 class="cmtt-8">&#x00A0;</span><span
cannam@86 7065 class="cmtt-8">&#x00A0;</span>
cannam@86 7066 <br class="fancyvrb" /><a
cannam@86 7067 id="x1-100050r24"></a><span
cannam@86 7068 class="cmr-6">24</span><span
cannam@86 7069 class="cmtt-8">&#x00A0;</span><span
cannam@86 7070 class="cmtt-8">&#x00A0; </span><span
cannam@86 7071 class="cmtt-8">&#x00A0;</span><span
cannam@86 7072 class="cmtt-8">&#x00A0;</span><span
cannam@86 7073 class="cmtt-8">&#x00A0;</span><span
cannam@86 7074 class="cmtt-8">&#x00A0;</span><span
cannam@86 7075 class="cmtt-8">&#x00A0;</span><span
cannam@86 7076 class="cmtt-8">&#x00A0;</span><span
cannam@86 7077 class="cmtt-8">&#x00A0;</span><span
cannam@86 7078 class="cmtt-8">&#x00A0;</span><span
cannam@86 7079 class="cmtt-8">&#x00A0;</span><span
cannam@86 7080 class="cmtt-8">&#x00A0;</span><span
cannam@86 7081 class="cmtt-8">&#x00A0;17)</span><span
cannam@86 7082 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7083 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
cannam@86 7084 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7085 class="cmtt-8">&#x00A0;([j]+[offset])</span><span
cannam@86 7086 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7087 class="cmtt-8">&#x00A0;read</span><span
cannam@86 7088 class="cmtt-8">&#x00A0;from</span><span
cannam@86 7089 class="cmtt-8">&#x00A0;packet</span><span
cannam@86 7090 class="cmtt-8">&#x00A0;using</span><span
cannam@86 7091 class="cmtt-8">&#x00A0;codebook</span>
cannam@86 7092 <br class="fancyvrb" /><a
cannam@86 7093 id="x1-100052r25"></a><span
cannam@86 7094 class="cmr-6">25</span><span
cannam@86 7095 class="cmtt-8">&#x00A0;</span><span
cannam@86 7096 class="cmtt-8">&#x00A0;</span><span
cannam@86 7097 class="cmtt-8">&#x00A0;</span><span
cannam@86 7098 class="cmtt-8">&#x00A0;</span><span
cannam@86 7099 class="cmtt-8">&#x00A0;</span><span
cannam@86 7100 class="cmtt-8">&#x00A0;</span><span
cannam@86 7101 class="cmtt-8">&#x00A0;</span><span
cannam@86 7102 class="cmtt-8">&#x00A0;</span><span
cannam@86 7103 class="cmtt-8">&#x00A0;</span><span
cannam@86 7104 class="cmtt-8">&#x00A0;</span><span
cannam@86 7105 class="cmtt-8">&#x00A0;</span><span
cannam@86 7106 class="cmtt-8">&#x00A0;</span><span
cannam@86 7107 class="cmtt-8">&#x00A0;</span><span
cannam@86 7108 class="cmtt-8">&#x00A0;</span><span
cannam@86 7109 class="cmtt-8">&#x00A0;</span><span
cannam@86 7110 class="cmtt-8">&#x00A0;</span><span
cannam@86 7111 class="cmtt-8">&#x00A0;</span><span
cannam@86 7112 class="cmtt-8">&#x00A0;</span><span
cannam@86 7113 class="cmtt-8">&#x00A0;</span><span
cannam@86 7114 class="cmtt-8">&#x00A0;</span><span
cannam@86 7115 class="cmtt-8">&#x00A0;</span><span
cannam@86 7116 class="cmtt-8">&#x00A0;</span><span
cannam@86 7117 class="cmtt-8">&#x00A0;</span><span
cannam@86 7118 class="cmtt-8">&#x00A0;</span><span
cannam@86 7119 class="cmtt-8">&#x00A0;[book]</span><span
cannam@86 7120 class="cmtt-8">&#x00A0;in</span><span
cannam@86 7121 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 7122 class="cmtt-8">&#x00A0;context</span>
cannam@86 7123 <br class="fancyvrb" /><a
cannam@86 7124 id="x1-100054r26"></a><span
cannam@86 7125 class="cmr-6">26</span><span
cannam@86 7126 class="cmtt-8">&#x00A0;</span><span
cannam@86 7127 class="cmtt-8">&#x00A0;</span>
cannam@86 7128 <br class="fancyvrb" /><a
cannam@86 7129 id="x1-100056r27"></a><span
cannam@86 7130 class="cmr-6">27</span><span
cannam@86 7131 class="cmtt-8">&#x00A0;</span><span
cannam@86 7132 class="cmtt-8">&#x00A0;</span><span
cannam@86 7133 class="cmtt-8">&#x00A0;</span><span
cannam@86 7134 class="cmtt-8">&#x00A0;</span><span
cannam@86 7135 class="cmtt-8">&#x00A0;</span><span
cannam@86 7136 class="cmtt-8">&#x00A0;</span><span
cannam@86 7137 class="cmtt-8">&#x00A0;</span><span
cannam@86 7138 class="cmtt-8">&#x00A0;</span><span
cannam@86 7139 class="cmtt-8">&#x00A0;</span><span
cannam@86 7140 class="cmtt-8">&#x00A0;</span><span
cannam@86 7141 class="cmtt-8">&#x00A0;</span><span
cannam@86 7142 class="cmtt-8">&#x00A0;</span><span
cannam@86 7143 class="cmtt-8">&#x00A0;</span><span
cannam@86 7144 class="cmtt-8">&#x00A0;</span><span
cannam@86 7145 class="cmtt-8">&#x00A0;</span><span
cannam@86 7146 class="cmtt-8">&#x00A0;</span><span
cannam@86 7147 class="cmtt-8">&#x00A0;</span><span
cannam@86 7148 class="cmtt-8">&#x00A0;</span><span
cannam@86 7149 class="cmtt-8">&#x00A0;</span><span
cannam@86 7150 class="cmsy-8">}</span><span
cannam@86 7151 class="cmtt-8">&#x00A0;else</span><span
cannam@86 7152 class="cmtt-8">&#x00A0;[book]</span><span
cannam@86 7153 class="cmtt-8">&#x00A0;is</span><span
cannam@86 7154 class="cmtt-8">&#x00A0;less</span><span
cannam@86 7155 class="cmtt-8">&#x00A0;than</span><span
cannam@86 7156 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 7157 class="cmtt-8">&#x00A0;</span><span
cannam@86 7158 class="cmsy-8">{</span>
cannam@86 7159 <br class="fancyvrb" /><a
cannam@86 7160 id="x1-100058r28"></a><span
cannam@86 7161 class="cmr-6">28</span><span
cannam@86 7162 class="cmtt-8">&#x00A0;</span><span
cannam@86 7163 class="cmtt-8">&#x00A0;</span>
cannam@86 7164 <br class="fancyvrb" /><a
cannam@86 7165 id="x1-100060r29"></a><span
cannam@86 7166 class="cmr-6">29</span><span
cannam@86 7167 class="cmtt-8">&#x00A0;</span><span
cannam@86 7168 class="cmtt-8">&#x00A0; </span><span
cannam@86 7169 class="cmtt-8">&#x00A0;</span><span
cannam@86 7170 class="cmtt-8">&#x00A0;</span><span
cannam@86 7171 class="cmtt-8">&#x00A0;</span><span
cannam@86 7172 class="cmtt-8">&#x00A0;</span><span
cannam@86 7173 class="cmtt-8">&#x00A0;</span><span
cannam@86 7174 class="cmtt-8">&#x00A0;</span><span
cannam@86 7175 class="cmtt-8">&#x00A0;</span><span
cannam@86 7176 class="cmtt-8">&#x00A0;</span><span
cannam@86 7177 class="cmtt-8">&#x00A0;</span><span
cannam@86 7178 class="cmtt-8">&#x00A0;</span><span
cannam@86 7179 class="cmtt-8">&#x00A0;18)</span><span
cannam@86 7180 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7181 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
cannam@86 7182 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7183 class="cmtt-8">&#x00A0;([j]+[offset])</span><span
cannam@86 7184 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7185 class="cmtt-8">&#x00A0;0</span>
cannam@86 7186 <br class="fancyvrb" /><a
cannam@86 7187 id="x1-100062r30"></a><span
cannam@86 7188 class="cmr-6">30</span><span
cannam@86 7189 class="cmtt-8">&#x00A0;</span><span
cannam@86 7190 class="cmtt-8">&#x00A0;</span>
cannam@86 7191 <br class="fancyvrb" /><a
cannam@86 7192 id="x1-100064r31"></a><span
cannam@86 7193 class="cmr-6">31</span><span
cannam@86 7194 class="cmtt-8">&#x00A0;</span><span
cannam@86 7195 class="cmtt-8">&#x00A0;</span><span
cannam@86 7196 class="cmtt-8">&#x00A0;</span><span
cannam@86 7197 class="cmtt-8">&#x00A0;</span><span
cannam@86 7198 class="cmtt-8">&#x00A0;</span><span
cannam@86 7199 class="cmtt-8">&#x00A0;</span><span
cannam@86 7200 class="cmtt-8">&#x00A0;</span><span
cannam@86 7201 class="cmtt-8">&#x00A0;</span><span
cannam@86 7202 class="cmtt-8">&#x00A0;</span><span
cannam@86 7203 class="cmtt-8">&#x00A0;</span><span
cannam@86 7204 class="cmtt-8">&#x00A0;</span><span
cannam@86 7205 class="cmtt-8">&#x00A0;</span><span
cannam@86 7206 class="cmtt-8">&#x00A0;</span><span
cannam@86 7207 class="cmtt-8">&#x00A0;</span><span
cannam@86 7208 class="cmtt-8">&#x00A0;</span><span
cannam@86 7209 class="cmtt-8">&#x00A0;</span><span
cannam@86 7210 class="cmtt-8">&#x00A0;</span><span
cannam@86 7211 class="cmtt-8">&#x00A0;</span><span
cannam@86 7212 class="cmtt-8">&#x00A0;</span><span
cannam@86 7213 class="cmsy-8">}</span>
cannam@86 7214 <br class="fancyvrb" /><a
cannam@86 7215 id="x1-100066r32"></a><span
cannam@86 7216 class="cmr-6">32</span><span
cannam@86 7217 class="cmtt-8">&#x00A0;</span><span
cannam@86 7218 class="cmtt-8">&#x00A0;</span><span
cannam@86 7219 class="cmtt-8">&#x00A0;</span><span
cannam@86 7220 class="cmtt-8">&#x00A0;</span><span
cannam@86 7221 class="cmtt-8">&#x00A0;</span><span
cannam@86 7222 class="cmtt-8">&#x00A0;</span><span
cannam@86 7223 class="cmtt-8">&#x00A0;</span><span
cannam@86 7224 class="cmtt-8">&#x00A0;</span><span
cannam@86 7225 class="cmtt-8">&#x00A0;</span><span
cannam@86 7226 class="cmtt-8">&#x00A0;</span><span
cannam@86 7227 class="cmtt-8">&#x00A0;</span><span
cannam@86 7228 class="cmtt-8">&#x00A0;</span><span
cannam@86 7229 class="cmsy-8">}</span>
cannam@86 7230 <br class="fancyvrb" /><a
cannam@86 7231 id="x1-100068r33"></a><span
cannam@86 7232 class="cmr-6">33</span><span
cannam@86 7233 class="cmtt-8">&#x00A0;</span><span
cannam@86 7234 class="cmtt-8">&#x00A0;</span>
cannam@86 7235 <br class="fancyvrb" /><a
cannam@86 7236 id="x1-100070r34"></a><span
cannam@86 7237 class="cmr-6">34</span><span
cannam@86 7238 class="cmtt-8">&#x00A0;</span><span
cannam@86 7239 class="cmtt-8">&#x00A0;</span><span
cannam@86 7240 class="cmtt-8">&#x00A0;</span><span
cannam@86 7241 class="cmtt-8">&#x00A0;</span><span
cannam@86 7242 class="cmtt-8">&#x00A0;</span><span
cannam@86 7243 class="cmtt-8">&#x00A0;</span><span
cannam@86 7244 class="cmtt-8">&#x00A0;</span><span
cannam@86 7245 class="cmtt-8">&#x00A0;19)</span><span
cannam@86 7246 class="cmtt-8">&#x00A0;[offset]</span><span
cannam@86 7247 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7248 class="cmtt-8">&#x00A0;[offset]</span><span
cannam@86 7249 class="cmtt-8">&#x00A0;+</span><span
cannam@86 7250 class="cmtt-8">&#x00A0;[cdim]</span>
cannam@86 7251
cannam@86 7252
cannam@86 7253
cannam@86 7254 <br class="fancyvrb" /><a
cannam@86 7255 id="x1-100072r35"></a><span
cannam@86 7256 class="cmr-6">35</span><span
cannam@86 7257 class="cmtt-8">&#x00A0;</span><span
cannam@86 7258 class="cmtt-8">&#x00A0;</span>
cannam@86 7259 <br class="fancyvrb" /><a
cannam@86 7260 id="x1-100074r36"></a><span
cannam@86 7261 class="cmr-6">36</span><span
cannam@86 7262 class="cmtt-8">&#x00A0;</span><span
cannam@86 7263 class="cmtt-8">&#x00A0;</span><span
cannam@86 7264 class="cmtt-8">&#x00A0;</span><span
cannam@86 7265 class="cmtt-8">&#x00A0;</span><span
cannam@86 7266 class="cmtt-8">&#x00A0;</span><span
cannam@86 7267 class="cmtt-8">&#x00A0;</span><span
cannam@86 7268 class="cmtt-8">&#x00A0;</span><span
cannam@86 7269 class="cmsy-8">}</span>
cannam@86 7270 <br class="fancyvrb" /><a
cannam@86 7271 id="x1-100076r37"></a><span
cannam@86 7272 class="cmr-6">37</span><span
cannam@86 7273 class="cmtt-8">&#x00A0;</span><span
cannam@86 7274 class="cmtt-8">&#x00A0;</span>
cannam@86 7275 <br class="fancyvrb" /><a
cannam@86 7276 id="x1-100078r38"></a><span
cannam@86 7277 class="cmr-6">38</span><span
cannam@86 7278 class="cmtt-8">&#x00A0;</span><span
cannam@86 7279 class="cmtt-8">&#x00A0;</span><span
cannam@86 7280 class="cmtt-8">&#x00A0;20)</span><span
cannam@86 7281 class="cmtt-8">&#x00A0;done</span>
cannam@86 7282 </div>
cannam@86 7283 <!--l. 229--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
cannam@86 7284 end-of-packet is reached during any read operation above, floor decode is to return &#8217;unused&#8217;
cannam@86 7285 status as if the <span
cannam@86 7286 class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
cannam@86 7287 <!--l. 235--><p class="noindent" >Vector <span
cannam@86 7288 class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
cannam@86 7289 <!--l. 240--><p class="noindent" >
cannam@86 7290 <h5 class="subsubsectionHead"><span class="titlemark">7.2.4. </span> <a
cannam@86 7291 id="x1-1010007.2.4"></a>curve computation</h5>
cannam@86 7292 <!--l. 242--><p class="noindent" >Curve computation is split into two logical steps; the first step derives final Y amplitude values
cannam@86 7293 from the encoded, wrapped difference values taken from the bitstream. The second step
cannam@86 7294 plots the curve lines. Also, although zero-difference values are used in the iterative
cannam@86 7295 prediction to find final Y values, these points are conditionally skipped during final
cannam@86 7296 line computation in step two. Skipping zero-difference values allows a smoother line
cannam@86 7297 fit.
cannam@86 7298 <!--l. 250--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
cannam@86 7299 implementors are warned to follow the details closely. Deviation from implementing a strictly
cannam@86 7300 equivalent algorithm can result in serious decoding errors.
cannam@86 7301 <!--l. 255--><p class="noindent" ><span
cannam@86 7302 class="cmti-12">Additional note: </span>Although <span
cannam@86 7303 class="cmtt-12">[floor1_final_Y] </span>values in the prediction loop and at the end of
cannam@86 7304 step 1 are inherently limited by the prediction algorithm to [0, <span
cannam@86 7305 class="cmtt-12">[range]</span>), it is possible to abuse
cannam@86 7306 the setup and codebook machinery to produce negative or over-range results. We suggest that
cannam@86 7307 decoder implementations guard the values in vector <span
cannam@86 7308 class="cmtt-12">[floor1_final_Y] </span>by clamping each
cannam@86 7309 element to [0, <span
cannam@86 7310 class="cmtt-12">[range]</span>) after step 1. Variants of this suggestion are acceptable as valid floor1
cannam@86 7311 setups cannot produce out of range values.
cannam@86 7312 <!--l. 266--><p class="noindent" >
cannam@86 7313 <dl class="description"><dt class="description">
cannam@86 7314 <span
cannam@86 7315 class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd
cannam@86 7316 class="description">
cannam@86 7317 <!--l. 268--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
cannam@86 7318 values, then apply to line prediction.
cannam@86 7319 <!--l. 271--><p class="noindent" >
cannam@86 7320 <div class="fancyvrb" id="fancyvrb31">
cannam@86 7321
cannam@86 7322
cannam@86 7323
cannam@86 7324 <a
cannam@86 7325 id="x1-101002r1"></a><span
cannam@86 7326 class="cmr-6">1</span><span
cannam@86 7327 class="cmtt-8">&#x00A0;</span><span
cannam@86 7328 class="cmtt-8">&#x00A0;</span><span
cannam@86 7329 class="cmtt-8">&#x00A0;</span><span
cannam@86 7330 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 7331 class="cmtt-8">&#x00A0;[range]</span><span
cannam@86 7332 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7333 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7334 class="cmtt-8">&#x00A0;</span><span
cannam@86 7335 class="cmsy-8">{</span><span
cannam@86 7336 class="cmtt-8">&#x00A0;256,</span><span
cannam@86 7337 class="cmtt-8">&#x00A0;128,</span><span
cannam@86 7338 class="cmtt-8">&#x00A0;86,</span><span
cannam@86 7339 class="cmtt-8">&#x00A0;64</span><span
cannam@86 7340 class="cmtt-8">&#x00A0;</span><span
cannam@86 7341 class="cmsy-8">}</span><span
cannam@86 7342 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7343 class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
cannam@86 7344 <br class="fancyvrb" /><a
cannam@86 7345 id="x1-101004r2"></a><span
cannam@86 7346 class="cmr-6">2</span><span
cannam@86 7347 class="cmtt-8">&#x00A0;</span><span
cannam@86 7348 class="cmtt-8">&#x00A0;</span><span
cannam@86 7349 class="cmtt-8">&#x00A0;</span><span
cannam@86 7350 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 7351 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7352 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
cannam@86 7353 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7354 class="cmtt-8">&#x00A0;[0]</span><span
cannam@86 7355 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7356 class="cmtt-8">&#x00A0;set</span>
cannam@86 7357 <br class="fancyvrb" /><a
cannam@86 7358 id="x1-101006r3"></a><span
cannam@86 7359 class="cmr-6">3</span><span
cannam@86 7360 class="cmtt-8">&#x00A0;</span><span
cannam@86 7361 class="cmtt-8">&#x00A0;</span><span
cannam@86 7362 class="cmtt-8">&#x00A0;</span><span
cannam@86 7363 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 7364 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7365 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
cannam@86 7366 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7367 class="cmtt-8">&#x00A0;[1]</span><span
cannam@86 7368 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7369 class="cmtt-8">&#x00A0;set</span>
cannam@86 7370 <br class="fancyvrb" /><a
cannam@86 7371 id="x1-101008r4"></a><span
cannam@86 7372 class="cmr-6">4</span><span
cannam@86 7373 class="cmtt-8">&#x00A0;</span><span
cannam@86 7374 class="cmtt-8">&#x00A0;</span><span
cannam@86 7375 class="cmtt-8">&#x00A0;</span><span
cannam@86 7376 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 7377 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7378 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 7379 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7380 class="cmtt-8">&#x00A0;[0]</span><span
cannam@86 7381 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7382 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7383 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
cannam@86 7384 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7385 class="cmtt-8">&#x00A0;[0]</span>
cannam@86 7386 <br class="fancyvrb" /><a
cannam@86 7387 id="x1-101010r5"></a><span
cannam@86 7388 class="cmr-6">5</span><span
cannam@86 7389 class="cmtt-8">&#x00A0;</span><span
cannam@86 7390 class="cmtt-8">&#x00A0;</span><span
cannam@86 7391 class="cmtt-8">&#x00A0;</span><span
cannam@86 7392 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 7393 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7394 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 7395 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7396 class="cmtt-8">&#x00A0;[1]</span><span
cannam@86 7397 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7398 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7399 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
cannam@86 7400 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7401 class="cmtt-8">&#x00A0;[1]</span>
cannam@86 7402 <br class="fancyvrb" /><a
cannam@86 7403 id="x1-101012r6"></a><span
cannam@86 7404 class="cmr-6">6</span><span
cannam@86 7405 class="cmtt-8">&#x00A0;</span><span
cannam@86 7406 class="cmtt-8">&#x00A0;</span><span
cannam@86 7407 class="cmtt-8">&#x00A0;</span><span
cannam@86 7408 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 7409 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 7410 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 7411 class="cmtt-8">&#x00A0;over</span><span
cannam@86 7412 class="cmtt-8">&#x00A0;the</span><span
cannam@86 7413 class="cmtt-8">&#x00A0;range</span><span
cannam@86 7414 class="cmtt-8">&#x00A0;2</span><span
cannam@86 7415 class="cmtt-8">&#x00A0;...</span><span
cannam@86 7416 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
cannam@86 7417 class="cmtt-8">&#x00A0;</span><span
cannam@86 7418 class="cmsy-8">{</span>
cannam@86 7419 <br class="fancyvrb" /><a
cannam@86 7420 id="x1-101014r7"></a><span
cannam@86 7421 class="cmr-6">7</span><span
cannam@86 7422 class="cmtt-8">&#x00A0;</span><span
cannam@86 7423 class="cmtt-8">&#x00A0;</span>
cannam@86 7424 <br class="fancyvrb" /><a
cannam@86 7425 id="x1-101016r8"></a><span
cannam@86 7426 class="cmr-6">8</span><span
cannam@86 7427 class="cmtt-8">&#x00A0;</span><span
cannam@86 7428 class="cmtt-8">&#x00A0;</span><span
cannam@86 7429 class="cmtt-8">&#x00A0;</span><span
cannam@86 7430 class="cmtt-8">&#x00A0;</span><span
cannam@86 7431 class="cmtt-8">&#x00A0;</span><span
cannam@86 7432 class="cmtt-8">&#x00A0;</span><span
cannam@86 7433 class="cmtt-8">&#x00A0;</span><span
cannam@86 7434 class="cmtt-8">&#x00A0;</span><span
cannam@86 7435 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 7436 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
cannam@86 7437 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7438 class="cmtt-8">&#x00A0;</span><a
cannam@86 7439 href="#x1-1200009.2.4"><span
cannam@86 7440 class="cmtt-8">low_neighbor</span></a><span
cannam@86 7441 class="cmtt-8">([floor1_X_list],[i])</span>
cannam@86 7442 <br class="fancyvrb" /><a
cannam@86 7443 id="x1-101018r9"></a><span
cannam@86 7444 class="cmr-6">9</span><span
cannam@86 7445 class="cmtt-8">&#x00A0;</span><span
cannam@86 7446 class="cmtt-8">&#x00A0;</span><span
cannam@86 7447 class="cmtt-8">&#x00A0;</span><span
cannam@86 7448 class="cmtt-8">&#x00A0;</span><span
cannam@86 7449 class="cmtt-8">&#x00A0;</span><span
cannam@86 7450 class="cmtt-8">&#x00A0;</span><span
cannam@86 7451 class="cmtt-8">&#x00A0;</span><span
cannam@86 7452 class="cmtt-8">&#x00A0;</span><span
cannam@86 7453 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 7454 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
cannam@86 7455 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7456 class="cmtt-8">&#x00A0;</span><a
cannam@86 7457 href="#x1-1210009.2.5"><span
cannam@86 7458 class="cmtt-8">high_neighbor</span></a><span
cannam@86 7459 class="cmtt-8">([floor1_X_list],[i])</span>
cannam@86 7460 <br class="fancyvrb" /><a
cannam@86 7461 id="x1-101020r10"></a><span
cannam@86 7462 class="cmr-6">10</span><span
cannam@86 7463 class="cmtt-8">&#x00A0;</span><span
cannam@86 7464 class="cmtt-8">&#x00A0;</span>
cannam@86 7465 <br class="fancyvrb" /><a
cannam@86 7466 id="x1-101022r11"></a><span
cannam@86 7467 class="cmr-6">11</span><span
cannam@86 7468 class="cmtt-8">&#x00A0;</span><span
cannam@86 7469 class="cmtt-8">&#x00A0;</span><span
cannam@86 7470 class="cmtt-8">&#x00A0;</span><span
cannam@86 7471 class="cmtt-8">&#x00A0;</span><span
cannam@86 7472 class="cmtt-8">&#x00A0;</span><span
cannam@86 7473 class="cmtt-8">&#x00A0;</span><span
cannam@86 7474 class="cmtt-8">&#x00A0;</span><span
cannam@86 7475 class="cmtt-8">&#x00A0;</span><span
cannam@86 7476 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 7477 class="cmtt-8">&#x00A0;[predicted]</span><span
cannam@86 7478 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7479 class="cmtt-8">&#x00A0;</span><a
cannam@86 7480 href="#x1-1220009.2.6"><span
cannam@86 7481 class="cmtt-8">render_point</span></a><span
cannam@86 7482 class="cmtt-8">(</span><span
cannam@86 7483 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7484 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
cannam@86 7485 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7486 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
cannam@86 7487 <br class="fancyvrb" /><a
cannam@86 7488 id="x1-101024r12"></a><span
cannam@86 7489 class="cmr-6">12</span><span
cannam@86 7490 class="cmtt-8">&#x00A0;</span><span
cannam@86 7491 class="cmtt-8">&#x00A0; </span><span
cannam@86 7492 class="cmtt-8">&#x00A0;</span><span
cannam@86 7493 class="cmtt-8">&#x00A0;</span><span
cannam@86 7494 class="cmtt-8">&#x00A0;</span><span
cannam@86 7495 class="cmtt-8">&#x00A0;</span><span
cannam@86 7496 class="cmtt-8">&#x00A0;</span><span
cannam@86 7497 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7498 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 7499 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7500 class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
cannam@86 7501 <br class="fancyvrb" /><a
cannam@86 7502 id="x1-101026r13"></a><span
cannam@86 7503 class="cmr-6">13</span><span
cannam@86 7504 class="cmtt-8">&#x00A0;</span><span
cannam@86 7505 class="cmtt-8">&#x00A0;</span><span
cannam@86 7506 class="cmtt-8">&#x00A0;</span><span
cannam@86 7507 class="cmtt-8">&#x00A0;</span><span
cannam@86 7508 class="cmtt-8">&#x00A0;</span><span
cannam@86 7509 class="cmtt-8">&#x00A0;</span><span
cannam@86 7510 class="cmtt-8">&#x00A0;</span><span
cannam@86 7511 class="cmtt-8">&#x00A0;</span><span
cannam@86 7512 class="cmtt-8">&#x00A0;</span><span
cannam@86 7513 class="cmtt-8">&#x00A0;</span><span
cannam@86 7514 class="cmtt-8">&#x00A0;</span><span
cannam@86 7515 class="cmtt-8">&#x00A0;</span><span
cannam@86 7516 class="cmtt-8">&#x00A0;</span><span
cannam@86 7517 class="cmtt-8">&#x00A0;</span><span
cannam@86 7518 class="cmtt-8">&#x00A0;</span><span
cannam@86 7519 class="cmtt-8">&#x00A0;</span><span
cannam@86 7520 class="cmtt-8">&#x00A0;</span><span
cannam@86 7521 class="cmtt-8">&#x00A0;</span><span
cannam@86 7522 class="cmtt-8">&#x00A0;</span><span
cannam@86 7523 class="cmtt-8">&#x00A0;</span><span
cannam@86 7524 class="cmtt-8">&#x00A0;</span><span
cannam@86 7525 class="cmtt-8">&#x00A0;</span><span
cannam@86 7526 class="cmtt-8">&#x00A0;</span><span
cannam@86 7527 class="cmtt-8">&#x00A0;</span><span
cannam@86 7528 class="cmtt-8">&#x00A0;</span><span
cannam@86 7529 class="cmtt-8">&#x00A0;</span><span
cannam@86 7530 class="cmtt-8">&#x00A0;</span><span
cannam@86 7531 class="cmtt-8">&#x00A0;</span><span
cannam@86 7532 class="cmtt-8">&#x00A0;</span><span
cannam@86 7533 class="cmtt-8">&#x00A0;</span><span
cannam@86 7534 class="cmtt-8">&#x00A0;</span><span
cannam@86 7535 class="cmtt-8">&#x00A0;</span><span
cannam@86 7536 class="cmtt-8">&#x00A0;</span><span
cannam@86 7537 class="cmtt-8">&#x00A0;</span><span
cannam@86 7538 class="cmtt-8">&#x00A0;</span><span
cannam@86 7539 class="cmtt-8">&#x00A0;</span><span
cannam@86 7540 class="cmtt-8">&#x00A0;</span><span
cannam@86 7541 class="cmtt-8">&#x00A0;</span><span
cannam@86 7542 class="cmtt-8">&#x00A0;</span><span
cannam@86 7543 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7544 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
cannam@86 7545 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7546 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
cannam@86 7547 <br class="fancyvrb" /><a
cannam@86 7548 id="x1-101028r14"></a><span
cannam@86 7549 class="cmr-6">14</span><span
cannam@86 7550 class="cmtt-8">&#x00A0;</span><span
cannam@86 7551 class="cmtt-8">&#x00A0; </span><span
cannam@86 7552 class="cmtt-8">&#x00A0;</span><span
cannam@86 7553 class="cmtt-8">&#x00A0;</span><span
cannam@86 7554 class="cmtt-8">&#x00A0;</span><span
cannam@86 7555 class="cmtt-8">&#x00A0;</span><span
cannam@86 7556 class="cmtt-8">&#x00A0;</span><span
cannam@86 7557 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7558 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 7559 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7560 class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
cannam@86 7561 <br class="fancyvrb" /><a
cannam@86 7562 id="x1-101030r15"></a><span
cannam@86 7563 class="cmr-6">15</span><span
cannam@86 7564 class="cmtt-8">&#x00A0;</span><span
cannam@86 7565 class="cmtt-8">&#x00A0;</span><span
cannam@86 7566 class="cmtt-8">&#x00A0;</span><span
cannam@86 7567 class="cmtt-8">&#x00A0;</span><span
cannam@86 7568 class="cmtt-8">&#x00A0;</span><span
cannam@86 7569 class="cmtt-8">&#x00A0;</span><span
cannam@86 7570 class="cmtt-8">&#x00A0;</span><span
cannam@86 7571 class="cmtt-8">&#x00A0;</span><span
cannam@86 7572 class="cmtt-8">&#x00A0;</span><span
cannam@86 7573 class="cmtt-8">&#x00A0;</span><span
cannam@86 7574 class="cmtt-8">&#x00A0;</span><span
cannam@86 7575 class="cmtt-8">&#x00A0;</span><span
cannam@86 7576 class="cmtt-8">&#x00A0;</span><span
cannam@86 7577 class="cmtt-8">&#x00A0;</span><span
cannam@86 7578 class="cmtt-8">&#x00A0;</span><span
cannam@86 7579 class="cmtt-8">&#x00A0;</span><span
cannam@86 7580 class="cmtt-8">&#x00A0;</span><span
cannam@86 7581 class="cmtt-8">&#x00A0;</span><span
cannam@86 7582 class="cmtt-8">&#x00A0;</span><span
cannam@86 7583 class="cmtt-8">&#x00A0;</span><span
cannam@86 7584 class="cmtt-8">&#x00A0;</span><span
cannam@86 7585 class="cmtt-8">&#x00A0;</span><span
cannam@86 7586 class="cmtt-8">&#x00A0;</span><span
cannam@86 7587 class="cmtt-8">&#x00A0;</span><span
cannam@86 7588 class="cmtt-8">&#x00A0;</span><span
cannam@86 7589 class="cmtt-8">&#x00A0;</span><span
cannam@86 7590 class="cmtt-8">&#x00A0;</span><span
cannam@86 7591 class="cmtt-8">&#x00A0;</span><span
cannam@86 7592 class="cmtt-8">&#x00A0;</span><span
cannam@86 7593 class="cmtt-8">&#x00A0;</span><span
cannam@86 7594 class="cmtt-8">&#x00A0;</span><span
cannam@86 7595 class="cmtt-8">&#x00A0;</span><span
cannam@86 7596 class="cmtt-8">&#x00A0;</span><span
cannam@86 7597 class="cmtt-8">&#x00A0;</span><span
cannam@86 7598 class="cmtt-8">&#x00A0;</span><span
cannam@86 7599 class="cmtt-8">&#x00A0;</span><span
cannam@86 7600 class="cmtt-8">&#x00A0;</span><span
cannam@86 7601 class="cmtt-8">&#x00A0;</span><span
cannam@86 7602 class="cmtt-8">&#x00A0;</span><span
cannam@86 7603 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7604 class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
cannam@86 7605 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7606 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 7607 class="cmtt-8">&#x00A0;)</span>
cannam@86 7608 <br class="fancyvrb" /><a
cannam@86 7609 id="x1-101032r16"></a><span
cannam@86 7610 class="cmr-6">16</span><span
cannam@86 7611 class="cmtt-8">&#x00A0;</span><span
cannam@86 7612 class="cmtt-8">&#x00A0;</span>
cannam@86 7613 <br class="fancyvrb" /><a
cannam@86 7614 id="x1-101034r17"></a><span
cannam@86 7615 class="cmr-6">17</span><span
cannam@86 7616 class="cmtt-8">&#x00A0;</span><span
cannam@86 7617 class="cmtt-8">&#x00A0;</span><span
cannam@86 7618 class="cmtt-8">&#x00A0;</span><span
cannam@86 7619 class="cmtt-8">&#x00A0;</span><span
cannam@86 7620 class="cmtt-8">&#x00A0;</span><span
cannam@86 7621 class="cmtt-8">&#x00A0;</span><span
cannam@86 7622 class="cmtt-8">&#x00A0;</span><span
cannam@86 7623 class="cmtt-8">&#x00A0;10)</span><span
cannam@86 7624 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 7625 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7626 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7627 class="cmtt-8">&#x00A0;[floor1_Y]</span><span
cannam@86 7628 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7629 class="cmtt-8">&#x00A0;[i]</span>
cannam@86 7630 <br class="fancyvrb" /><a
cannam@86 7631 id="x1-101036r18"></a><span
cannam@86 7632 class="cmr-6">18</span><span
cannam@86 7633 class="cmtt-8">&#x00A0;</span><span
cannam@86 7634 class="cmtt-8">&#x00A0;</span><span
cannam@86 7635 class="cmtt-8">&#x00A0;</span><span
cannam@86 7636 class="cmtt-8">&#x00A0;</span><span
cannam@86 7637 class="cmtt-8">&#x00A0;</span><span
cannam@86 7638 class="cmtt-8">&#x00A0;</span><span
cannam@86 7639 class="cmtt-8">&#x00A0;</span><span
cannam@86 7640 class="cmtt-8">&#x00A0;11)</span><span
cannam@86 7641 class="cmtt-8">&#x00A0;[highroom]</span><span
cannam@86 7642 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7643 class="cmtt-8">&#x00A0;[range]</span><span
cannam@86 7644 class="cmtt-8">&#x00A0;-</span><span
cannam@86 7645 class="cmtt-8">&#x00A0;[predicted]</span>
cannam@86 7646 <br class="fancyvrb" /><a
cannam@86 7647 id="x1-101038r19"></a><span
cannam@86 7648 class="cmr-6">19</span><span
cannam@86 7649 class="cmtt-8">&#x00A0;</span><span
cannam@86 7650 class="cmtt-8">&#x00A0;</span><span
cannam@86 7651 class="cmtt-8">&#x00A0;</span><span
cannam@86 7652 class="cmtt-8">&#x00A0;</span><span
cannam@86 7653 class="cmtt-8">&#x00A0;</span><span
cannam@86 7654 class="cmtt-8">&#x00A0;</span><span
cannam@86 7655 class="cmtt-8">&#x00A0;</span><span
cannam@86 7656 class="cmtt-8">&#x00A0;12)</span><span
cannam@86 7657 class="cmtt-8">&#x00A0;[lowroom]</span><span
cannam@86 7658 class="cmtt-8">&#x00A0;</span><span
cannam@86 7659 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7660 class="cmtt-8">&#x00A0;[predicted]</span>
cannam@86 7661 <br class="fancyvrb" /><a
cannam@86 7662 id="x1-101040r20"></a><span
cannam@86 7663 class="cmr-6">20</span><span
cannam@86 7664 class="cmtt-8">&#x00A0;</span><span
cannam@86 7665 class="cmtt-8">&#x00A0;</span><span
cannam@86 7666 class="cmtt-8">&#x00A0;</span><span
cannam@86 7667 class="cmtt-8">&#x00A0;</span><span
cannam@86 7668 class="cmtt-8">&#x00A0;</span><span
cannam@86 7669 class="cmtt-8">&#x00A0;</span><span
cannam@86 7670 class="cmtt-8">&#x00A0;</span><span
cannam@86 7671 class="cmtt-8">&#x00A0;13)</span><span
cannam@86 7672 class="cmtt-8">&#x00A0;if</span><span
cannam@86 7673 class="cmtt-8">&#x00A0;(</span><span
cannam@86 7674 class="cmtt-8">&#x00A0;[highroom]</span><span
cannam@86 7675 class="cmtt-8">&#x00A0;is</span><span
cannam@86 7676 class="cmtt-8">&#x00A0;less</span><span
cannam@86 7677 class="cmtt-8">&#x00A0;than</span><span
cannam@86 7678 class="cmtt-8">&#x00A0;[lowroom]</span><span
cannam@86 7679 class="cmtt-8">&#x00A0;)</span><span
cannam@86 7680 class="cmtt-8">&#x00A0;</span><span
cannam@86 7681 class="cmsy-8">{</span>
cannam@86 7682 <br class="fancyvrb" /><a
cannam@86 7683 id="x1-101042r21"></a><span
cannam@86 7684 class="cmr-6">21</span><span
cannam@86 7685 class="cmtt-8">&#x00A0;</span><span
cannam@86 7686 class="cmtt-8">&#x00A0;</span>
cannam@86 7687 <br class="fancyvrb" /><a
cannam@86 7688 id="x1-101044r22"></a><span
cannam@86 7689 class="cmr-6">22</span><span
cannam@86 7690 class="cmtt-8">&#x00A0;</span><span
cannam@86 7691 class="cmtt-8">&#x00A0;</span><span
cannam@86 7692 class="cmtt-8">&#x00A0;</span><span
cannam@86 7693 class="cmtt-8">&#x00A0;</span><span
cannam@86 7694 class="cmtt-8">&#x00A0;</span><span
cannam@86 7695 class="cmtt-8">&#x00A0;</span><span
cannam@86 7696 class="cmtt-8">&#x00A0;</span><span
cannam@86 7697 class="cmtt-8">&#x00A0;</span><span
cannam@86 7698 class="cmtt-8">&#x00A0;</span><span
cannam@86 7699 class="cmtt-8">&#x00A0;</span><span
cannam@86 7700 class="cmtt-8">&#x00A0;</span><span
cannam@86 7701 class="cmtt-8">&#x00A0;</span><span
cannam@86 7702 class="cmtt-8">&#x00A0;</span><span
cannam@86 7703 class="cmtt-8">&#x00A0;14)</span><span
cannam@86 7704 class="cmtt-8">&#x00A0;[room]</span><span
cannam@86 7705 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7706 class="cmtt-8">&#x00A0;[highroom]</span><span
cannam@86 7707 class="cmtt-8">&#x00A0;*</span><span
cannam@86 7708 class="cmtt-8">&#x00A0;2</span>
cannam@86 7709 <br class="fancyvrb" /><a
cannam@86 7710 id="x1-101046r23"></a><span
cannam@86 7711 class="cmr-6">23</span><span
cannam@86 7712 class="cmtt-8">&#x00A0;</span><span
cannam@86 7713 class="cmtt-8">&#x00A0;</span>
cannam@86 7714 <br class="fancyvrb" /><a
cannam@86 7715 id="x1-101048r24"></a><span
cannam@86 7716 class="cmr-6">24</span><span
cannam@86 7717 class="cmtt-8">&#x00A0;</span><span
cannam@86 7718 class="cmtt-8">&#x00A0;</span><span
cannam@86 7719 class="cmtt-8">&#x00A0;</span><span
cannam@86 7720 class="cmtt-8">&#x00A0;</span><span
cannam@86 7721 class="cmtt-8">&#x00A0;</span><span
cannam@86 7722 class="cmtt-8">&#x00A0;</span><span
cannam@86 7723 class="cmtt-8">&#x00A0;</span><span
cannam@86 7724 class="cmtt-8">&#x00A0;</span><span
cannam@86 7725 class="cmtt-8">&#x00A0;</span><span
cannam@86 7726 class="cmtt-8">&#x00A0;</span><span
cannam@86 7727 class="cmtt-8">&#x00A0;</span><span
cannam@86 7728 class="cmtt-8">&#x00A0;</span><span
cannam@86 7729 class="cmsy-8">}</span><span
cannam@86 7730 class="cmtt-8">&#x00A0;else</span><span
cannam@86 7731 class="cmtt-8">&#x00A0;[highroom]</span><span
cannam@86 7732 class="cmtt-8">&#x00A0;is</span><span
cannam@86 7733 class="cmtt-8">&#x00A0;not</span><span
cannam@86 7734 class="cmtt-8">&#x00A0;less</span><span
cannam@86 7735 class="cmtt-8">&#x00A0;than</span><span
cannam@86 7736 class="cmtt-8">&#x00A0;[lowroom]</span><span
cannam@86 7737 class="cmtt-8">&#x00A0;</span><span
cannam@86 7738 class="cmsy-8">{</span>
cannam@86 7739 <br class="fancyvrb" /><a
cannam@86 7740 id="x1-101050r25"></a><span
cannam@86 7741 class="cmr-6">25</span><span
cannam@86 7742 class="cmtt-8">&#x00A0;</span><span
cannam@86 7743 class="cmtt-8">&#x00A0;</span>
cannam@86 7744 <br class="fancyvrb" /><a
cannam@86 7745 id="x1-101052r26"></a><span
cannam@86 7746 class="cmr-6">26</span><span
cannam@86 7747 class="cmtt-8">&#x00A0;</span><span
cannam@86 7748 class="cmtt-8">&#x00A0;</span><span
cannam@86 7749 class="cmtt-8">&#x00A0;</span><span
cannam@86 7750 class="cmtt-8">&#x00A0;</span><span
cannam@86 7751 class="cmtt-8">&#x00A0;</span><span
cannam@86 7752 class="cmtt-8">&#x00A0;</span><span
cannam@86 7753 class="cmtt-8">&#x00A0;</span><span
cannam@86 7754 class="cmtt-8">&#x00A0;</span><span
cannam@86 7755 class="cmtt-8">&#x00A0;</span><span
cannam@86 7756 class="cmtt-8">&#x00A0;</span><span
cannam@86 7757 class="cmtt-8">&#x00A0;</span><span
cannam@86 7758 class="cmtt-8">&#x00A0;</span><span
cannam@86 7759 class="cmtt-8">&#x00A0;</span><span
cannam@86 7760 class="cmtt-8">&#x00A0;15)</span><span
cannam@86 7761 class="cmtt-8">&#x00A0;[room]</span><span
cannam@86 7762 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7763 class="cmtt-8">&#x00A0;[lowroom]</span><span
cannam@86 7764 class="cmtt-8">&#x00A0;*</span><span
cannam@86 7765 class="cmtt-8">&#x00A0;2</span>
cannam@86 7766 <br class="fancyvrb" /><a
cannam@86 7767 id="x1-101054r27"></a><span
cannam@86 7768 class="cmr-6">27</span><span
cannam@86 7769 class="cmtt-8">&#x00A0;</span><span
cannam@86 7770 class="cmtt-8">&#x00A0;</span>
cannam@86 7771 <br class="fancyvrb" /><a
cannam@86 7772 id="x1-101056r28"></a><span
cannam@86 7773 class="cmr-6">28</span><span
cannam@86 7774 class="cmtt-8">&#x00A0;</span><span
cannam@86 7775 class="cmtt-8">&#x00A0;</span><span
cannam@86 7776 class="cmtt-8">&#x00A0;</span><span
cannam@86 7777 class="cmtt-8">&#x00A0;</span><span
cannam@86 7778 class="cmtt-8">&#x00A0;</span><span
cannam@86 7779 class="cmtt-8">&#x00A0;</span><span
cannam@86 7780 class="cmtt-8">&#x00A0;</span><span
cannam@86 7781 class="cmtt-8">&#x00A0;</span><span
cannam@86 7782 class="cmtt-8">&#x00A0;</span><span
cannam@86 7783 class="cmtt-8">&#x00A0;</span><span
cannam@86 7784 class="cmtt-8">&#x00A0;</span><span
cannam@86 7785 class="cmtt-8">&#x00A0;</span><span
cannam@86 7786 class="cmsy-8">}</span>
cannam@86 7787 <br class="fancyvrb" /><a
cannam@86 7788 id="x1-101058r29"></a><span
cannam@86 7789 class="cmr-6">29</span><span
cannam@86 7790 class="cmtt-8">&#x00A0;</span><span
cannam@86 7791 class="cmtt-8">&#x00A0;</span>
cannam@86 7792 <br class="fancyvrb" /><a
cannam@86 7793 id="x1-101060r30"></a><span
cannam@86 7794 class="cmr-6">30</span><span
cannam@86 7795 class="cmtt-8">&#x00A0;</span><span
cannam@86 7796 class="cmtt-8">&#x00A0;</span><span
cannam@86 7797 class="cmtt-8">&#x00A0;</span><span
cannam@86 7798 class="cmtt-8">&#x00A0;</span><span
cannam@86 7799 class="cmtt-8">&#x00A0;</span><span
cannam@86 7800 class="cmtt-8">&#x00A0;</span><span
cannam@86 7801 class="cmtt-8">&#x00A0;</span><span
cannam@86 7802 class="cmtt-8">&#x00A0;16)</span><span
cannam@86 7803 class="cmtt-8">&#x00A0;if</span><span
cannam@86 7804 class="cmtt-8">&#x00A0;(</span><span
cannam@86 7805 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 7806 class="cmtt-8">&#x00A0;is</span><span
cannam@86 7807 class="cmtt-8">&#x00A0;nonzero</span><span
cannam@86 7808 class="cmtt-8">&#x00A0;)</span><span
cannam@86 7809 class="cmtt-8">&#x00A0;</span><span
cannam@86 7810 class="cmsy-8">{</span>
cannam@86 7811 <br class="fancyvrb" /><a
cannam@86 7812 id="x1-101062r31"></a><span
cannam@86 7813 class="cmr-6">31</span><span
cannam@86 7814 class="cmtt-8">&#x00A0;</span><span
cannam@86 7815 class="cmtt-8">&#x00A0;</span>
cannam@86 7816 <br class="fancyvrb" /><a
cannam@86 7817 id="x1-101064r32"></a><span
cannam@86 7818 class="cmr-6">32</span><span
cannam@86 7819 class="cmtt-8">&#x00A0;</span><span
cannam@86 7820 class="cmtt-8">&#x00A0;</span><span
cannam@86 7821 class="cmtt-8">&#x00A0;</span><span
cannam@86 7822 class="cmtt-8">&#x00A0;</span><span
cannam@86 7823 class="cmtt-8">&#x00A0;</span><span
cannam@86 7824 class="cmtt-8">&#x00A0;</span><span
cannam@86 7825 class="cmtt-8">&#x00A0;</span><span
cannam@86 7826 class="cmtt-8">&#x00A0;</span><span
cannam@86 7827 class="cmtt-8">&#x00A0;</span><span
cannam@86 7828 class="cmtt-8">&#x00A0;</span><span
cannam@86 7829 class="cmtt-8">&#x00A0;</span><span
cannam@86 7830 class="cmtt-8">&#x00A0;</span><span
cannam@86 7831 class="cmtt-8">&#x00A0;</span><span
cannam@86 7832 class="cmtt-8">&#x00A0;17)</span><span
cannam@86 7833 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7834 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
cannam@86 7835 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7836 class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
cannam@86 7837 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7838 class="cmtt-8">&#x00A0;set</span>
cannam@86 7839 <br class="fancyvrb" /><a
cannam@86 7840 id="x1-101066r33"></a><span
cannam@86 7841 class="cmr-6">33</span><span
cannam@86 7842 class="cmtt-8">&#x00A0;</span><span
cannam@86 7843 class="cmtt-8">&#x00A0;</span><span
cannam@86 7844 class="cmtt-8">&#x00A0;</span><span
cannam@86 7845 class="cmtt-8">&#x00A0;</span><span
cannam@86 7846 class="cmtt-8">&#x00A0;</span><span
cannam@86 7847 class="cmtt-8">&#x00A0;</span><span
cannam@86 7848 class="cmtt-8">&#x00A0;</span><span
cannam@86 7849 class="cmtt-8">&#x00A0;</span><span
cannam@86 7850 class="cmtt-8">&#x00A0;</span><span
cannam@86 7851 class="cmtt-8">&#x00A0;</span><span
cannam@86 7852 class="cmtt-8">&#x00A0;</span><span
cannam@86 7853 class="cmtt-8">&#x00A0;</span><span
cannam@86 7854 class="cmtt-8">&#x00A0;</span><span
cannam@86 7855 class="cmtt-8">&#x00A0;18)</span><span
cannam@86 7856 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7857 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
cannam@86 7858 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7859 class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
cannam@86 7860 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7861 class="cmtt-8">&#x00A0;set</span>
cannam@86 7862 <br class="fancyvrb" /><a
cannam@86 7863 id="x1-101068r34"></a><span
cannam@86 7864 class="cmr-6">34</span><span
cannam@86 7865 class="cmtt-8">&#x00A0;</span><span
cannam@86 7866 class="cmtt-8">&#x00A0;</span><span
cannam@86 7867 class="cmtt-8">&#x00A0;</span><span
cannam@86 7868 class="cmtt-8">&#x00A0;</span><span
cannam@86 7869 class="cmtt-8">&#x00A0;</span><span
cannam@86 7870 class="cmtt-8">&#x00A0;</span><span
cannam@86 7871 class="cmtt-8">&#x00A0;</span><span
cannam@86 7872 class="cmtt-8">&#x00A0;</span><span
cannam@86 7873 class="cmtt-8">&#x00A0;</span><span
cannam@86 7874 class="cmtt-8">&#x00A0;</span><span
cannam@86 7875 class="cmtt-8">&#x00A0;</span><span
cannam@86 7876 class="cmtt-8">&#x00A0;</span><span
cannam@86 7877 class="cmtt-8">&#x00A0;</span><span
cannam@86 7878 class="cmtt-8">&#x00A0;19)</span><span
cannam@86 7879 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7880 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
cannam@86 7881 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7882 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 7883 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7884 class="cmtt-8">&#x00A0;set</span>
cannam@86 7885 <br class="fancyvrb" /><a
cannam@86 7886 id="x1-101070r35"></a><span
cannam@86 7887 class="cmr-6">35</span><span
cannam@86 7888 class="cmtt-8">&#x00A0;</span><span
cannam@86 7889 class="cmtt-8">&#x00A0;</span><span
cannam@86 7890 class="cmtt-8">&#x00A0;</span><span
cannam@86 7891 class="cmtt-8">&#x00A0;</span><span
cannam@86 7892 class="cmtt-8">&#x00A0;</span><span
cannam@86 7893 class="cmtt-8">&#x00A0;</span><span
cannam@86 7894 class="cmtt-8">&#x00A0;</span><span
cannam@86 7895 class="cmtt-8">&#x00A0;</span><span
cannam@86 7896 class="cmtt-8">&#x00A0;</span><span
cannam@86 7897 class="cmtt-8">&#x00A0;</span><span
cannam@86 7898 class="cmtt-8">&#x00A0;</span><span
cannam@86 7899 class="cmtt-8">&#x00A0;</span><span
cannam@86 7900 class="cmtt-8">&#x00A0;</span><span
cannam@86 7901 class="cmtt-8">&#x00A0;20)</span><span
cannam@86 7902 class="cmtt-8">&#x00A0;if</span><span
cannam@86 7903 class="cmtt-8">&#x00A0;(</span><span
cannam@86 7904 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 7905 class="cmtt-8">&#x00A0;is</span><span
cannam@86 7906 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 7907 class="cmtt-8">&#x00A0;than</span><span
cannam@86 7908 class="cmtt-8">&#x00A0;or</span><span
cannam@86 7909 class="cmtt-8">&#x00A0;equal</span><span
cannam@86 7910 class="cmtt-8">&#x00A0;to</span><span
cannam@86 7911 class="cmtt-8">&#x00A0;[room]</span><span
cannam@86 7912 class="cmtt-8">&#x00A0;)</span><span
cannam@86 7913 class="cmtt-8">&#x00A0;</span><span
cannam@86 7914 class="cmsy-8">{</span>
cannam@86 7915 <br class="fancyvrb" /><a
cannam@86 7916 id="x1-101072r36"></a><span
cannam@86 7917 class="cmr-6">36</span><span
cannam@86 7918 class="cmtt-8">&#x00A0;</span><span
cannam@86 7919 class="cmtt-8">&#x00A0;</span>
cannam@86 7920 <br class="fancyvrb" /><a
cannam@86 7921 id="x1-101074r37"></a><span
cannam@86 7922 class="cmr-6">37</span><span
cannam@86 7923 class="cmtt-8">&#x00A0;</span><span
cannam@86 7924 class="cmtt-8">&#x00A0;</span><span
cannam@86 7925 class="cmtt-8">&#x00A0;</span><span
cannam@86 7926 class="cmtt-8">&#x00A0;</span><span
cannam@86 7927 class="cmtt-8">&#x00A0;</span><span
cannam@86 7928 class="cmtt-8">&#x00A0;</span><span
cannam@86 7929 class="cmtt-8">&#x00A0;</span><span
cannam@86 7930 class="cmtt-8">&#x00A0;</span><span
cannam@86 7931 class="cmtt-8">&#x00A0;</span><span
cannam@86 7932 class="cmtt-8">&#x00A0;</span><span
cannam@86 7933 class="cmtt-8">&#x00A0;</span><span
cannam@86 7934 class="cmtt-8">&#x00A0;</span><span
cannam@86 7935 class="cmtt-8">&#x00A0;</span><span
cannam@86 7936 class="cmtt-8">&#x00A0;</span><span
cannam@86 7937 class="cmtt-8">&#x00A0;</span><span
cannam@86 7938 class="cmtt-8">&#x00A0;</span><span
cannam@86 7939 class="cmtt-8">&#x00A0;</span><span
cannam@86 7940 class="cmtt-8">&#x00A0;</span><span
cannam@86 7941 class="cmtt-8">&#x00A0;</span><span
cannam@86 7942 class="cmtt-8">&#x00A0;21)</span><span
cannam@86 7943 class="cmtt-8">&#x00A0;if</span><span
cannam@86 7944 class="cmtt-8">&#x00A0;(</span><span
cannam@86 7945 class="cmtt-8">&#x00A0;[highroom]</span><span
cannam@86 7946 class="cmtt-8">&#x00A0;is</span><span
cannam@86 7947 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 7948 class="cmtt-8">&#x00A0;than</span><span
cannam@86 7949 class="cmtt-8">&#x00A0;[lowroom]</span><span
cannam@86 7950 class="cmtt-8">&#x00A0;)</span><span
cannam@86 7951 class="cmtt-8">&#x00A0;</span><span
cannam@86 7952 class="cmsy-8">{</span>
cannam@86 7953 <br class="fancyvrb" /><a
cannam@86 7954 id="x1-101076r38"></a><span
cannam@86 7955 class="cmr-6">38</span><span
cannam@86 7956 class="cmtt-8">&#x00A0;</span><span
cannam@86 7957 class="cmtt-8">&#x00A0;</span>
cannam@86 7958 <br class="fancyvrb" /><a
cannam@86 7959 id="x1-101078r39"></a><span
cannam@86 7960 class="cmr-6">39</span><span
cannam@86 7961 class="cmtt-8">&#x00A0;</span><span
cannam@86 7962 class="cmtt-8">&#x00A0;</span><span
cannam@86 7963 class="cmtt-8">&#x00A0;</span><span
cannam@86 7964 class="cmtt-8">&#x00A0;</span><span
cannam@86 7965 class="cmtt-8">&#x00A0;</span><span
cannam@86 7966 class="cmtt-8">&#x00A0;</span><span
cannam@86 7967 class="cmtt-8">&#x00A0;</span><span
cannam@86 7968 class="cmtt-8">&#x00A0;</span><span
cannam@86 7969 class="cmtt-8">&#x00A0;</span><span
cannam@86 7970 class="cmtt-8">&#x00A0;</span><span
cannam@86 7971 class="cmtt-8">&#x00A0;</span><span
cannam@86 7972 class="cmtt-8">&#x00A0;</span><span
cannam@86 7973 class="cmtt-8">&#x00A0;</span><span
cannam@86 7974 class="cmtt-8">&#x00A0;</span><span
cannam@86 7975 class="cmtt-8">&#x00A0;</span><span
cannam@86 7976 class="cmtt-8">&#x00A0;</span><span
cannam@86 7977 class="cmtt-8">&#x00A0;</span><span
cannam@86 7978 class="cmtt-8">&#x00A0;</span><span
cannam@86 7979 class="cmtt-8">&#x00A0;</span><span
cannam@86 7980 class="cmtt-8">&#x00A0;</span><span
cannam@86 7981 class="cmtt-8">&#x00A0;</span><span
cannam@86 7982 class="cmtt-8">&#x00A0;</span><span
cannam@86 7983 class="cmtt-8">&#x00A0;</span><span
cannam@86 7984 class="cmtt-8">&#x00A0;</span><span
cannam@86 7985 class="cmtt-8">&#x00A0;</span><span
cannam@86 7986 class="cmtt-8">&#x00A0;22)</span><span
cannam@86 7987 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 7988 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 7989 class="cmtt-8">&#x00A0;element</span><span
cannam@86 7990 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 7991 class="cmtt-8">&#x00A0;=</span><span
cannam@86 7992 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 7993 class="cmtt-8">&#x00A0;-</span><span
cannam@86 7994 class="cmtt-8">&#x00A0;[lowroom]</span><span
cannam@86 7995 class="cmtt-8">&#x00A0;+</span><span
cannam@86 7996 class="cmtt-8">&#x00A0;[predicted]</span>
cannam@86 7997 <br class="fancyvrb" /><a
cannam@86 7998 id="x1-101080r40"></a><span
cannam@86 7999 class="cmr-6">40</span><span
cannam@86 8000 class="cmtt-8">&#x00A0;</span><span
cannam@86 8001 class="cmtt-8">&#x00A0;</span>
cannam@86 8002 <br class="fancyvrb" /><a
cannam@86 8003 id="x1-101082r41"></a><span
cannam@86 8004 class="cmr-6">41</span><span
cannam@86 8005 class="cmtt-8">&#x00A0;</span><span
cannam@86 8006 class="cmtt-8">&#x00A0; </span><span
cannam@86 8007 class="cmtt-8">&#x00A0;</span><span
cannam@86 8008 class="cmtt-8">&#x00A0;</span><span
cannam@86 8009 class="cmtt-8">&#x00A0;</span><span
cannam@86 8010 class="cmtt-8">&#x00A0;</span><span
cannam@86 8011 class="cmtt-8">&#x00A0;</span><span
cannam@86 8012 class="cmtt-8">&#x00A0;</span><span
cannam@86 8013 class="cmsy-8">}</span><span
cannam@86 8014 class="cmtt-8">&#x00A0;else</span><span
cannam@86 8015 class="cmtt-8">&#x00A0;[highroom]</span><span
cannam@86 8016 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8017 class="cmtt-8">&#x00A0;not</span><span
cannam@86 8018 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 8019 class="cmtt-8">&#x00A0;than</span><span
cannam@86 8020 class="cmtt-8">&#x00A0;[lowroom]</span><span
cannam@86 8021 class="cmtt-8">&#x00A0;</span><span
cannam@86 8022 class="cmsy-8">{</span>
cannam@86 8023 <br class="fancyvrb" /><a
cannam@86 8024 id="x1-101084r42"></a><span
cannam@86 8025 class="cmr-6">42</span><span
cannam@86 8026 class="cmtt-8">&#x00A0;</span><span
cannam@86 8027 class="cmtt-8">&#x00A0;</span>
cannam@86 8028 <br class="fancyvrb" /><a
cannam@86 8029 id="x1-101086r43"></a><span
cannam@86 8030 class="cmr-6">43</span><span
cannam@86 8031 class="cmtt-8">&#x00A0;</span><span
cannam@86 8032 class="cmtt-8">&#x00A0;</span><span
cannam@86 8033 class="cmtt-8">&#x00A0;</span><span
cannam@86 8034 class="cmtt-8">&#x00A0;</span><span
cannam@86 8035 class="cmtt-8">&#x00A0;</span><span
cannam@86 8036 class="cmtt-8">&#x00A0;</span><span
cannam@86 8037 class="cmtt-8">&#x00A0;</span><span
cannam@86 8038 class="cmtt-8">&#x00A0;</span><span
cannam@86 8039 class="cmtt-8">&#x00A0;</span><span
cannam@86 8040 class="cmtt-8">&#x00A0;</span><span
cannam@86 8041 class="cmtt-8">&#x00A0;</span><span
cannam@86 8042 class="cmtt-8">&#x00A0;</span><span
cannam@86 8043 class="cmtt-8">&#x00A0;</span><span
cannam@86 8044 class="cmtt-8">&#x00A0;</span><span
cannam@86 8045 class="cmtt-8">&#x00A0;</span><span
cannam@86 8046 class="cmtt-8">&#x00A0;</span><span
cannam@86 8047 class="cmtt-8">&#x00A0;</span><span
cannam@86 8048 class="cmtt-8">&#x00A0;</span><span
cannam@86 8049 class="cmtt-8">&#x00A0;</span><span
cannam@86 8050 class="cmtt-8">&#x00A0;</span><span
cannam@86 8051 class="cmtt-8">&#x00A0;</span><span
cannam@86 8052 class="cmtt-8">&#x00A0;</span><span
cannam@86 8053 class="cmtt-8">&#x00A0;</span><span
cannam@86 8054 class="cmtt-8">&#x00A0;</span><span
cannam@86 8055 class="cmtt-8">&#x00A0;</span><span
cannam@86 8056 class="cmtt-8">&#x00A0;23)</span><span
cannam@86 8057 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8058 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 8059 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8060 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8061 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8062 class="cmtt-8">&#x00A0;[predicted]</span><span
cannam@86 8063 class="cmtt-8">&#x00A0;-</span><span
cannam@86 8064 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 8065 class="cmtt-8">&#x00A0;+</span><span
cannam@86 8066 class="cmtt-8">&#x00A0;[highroom]</span><span
cannam@86 8067 class="cmtt-8">&#x00A0;-</span><span
cannam@86 8068 class="cmtt-8">&#x00A0;1</span>
cannam@86 8069 <br class="fancyvrb" /><a
cannam@86 8070 id="x1-101088r44"></a><span
cannam@86 8071 class="cmr-6">44</span><span
cannam@86 8072 class="cmtt-8">&#x00A0;</span><span
cannam@86 8073 class="cmtt-8">&#x00A0;</span>
cannam@86 8074 <br class="fancyvrb" /><a
cannam@86 8075 id="x1-101090r45"></a><span
cannam@86 8076 class="cmr-6">45</span><span
cannam@86 8077 class="cmtt-8">&#x00A0;</span><span
cannam@86 8078 class="cmtt-8">&#x00A0;</span><span
cannam@86 8079 class="cmtt-8">&#x00A0;</span><span
cannam@86 8080 class="cmtt-8">&#x00A0;</span><span
cannam@86 8081 class="cmtt-8">&#x00A0;</span><span
cannam@86 8082 class="cmtt-8">&#x00A0;</span><span
cannam@86 8083 class="cmtt-8">&#x00A0;</span><span
cannam@86 8084 class="cmtt-8">&#x00A0;</span><span
cannam@86 8085 class="cmtt-8">&#x00A0;</span><span
cannam@86 8086 class="cmtt-8">&#x00A0;</span><span
cannam@86 8087 class="cmtt-8">&#x00A0;</span><span
cannam@86 8088 class="cmtt-8">&#x00A0;</span><span
cannam@86 8089 class="cmtt-8">&#x00A0;</span><span
cannam@86 8090 class="cmtt-8">&#x00A0;</span><span
cannam@86 8091 class="cmtt-8">&#x00A0;</span><span
cannam@86 8092 class="cmtt-8">&#x00A0;</span><span
cannam@86 8093 class="cmtt-8">&#x00A0;</span><span
cannam@86 8094 class="cmtt-8">&#x00A0;</span><span
cannam@86 8095 class="cmtt-8">&#x00A0;</span><span
cannam@86 8096 class="cmtt-8">&#x00A0;</span><span
cannam@86 8097 class="cmtt-8">&#x00A0;</span><span
cannam@86 8098 class="cmtt-8">&#x00A0;</span><span
cannam@86 8099 class="cmtt-8">&#x00A0;</span><span
cannam@86 8100 class="cmtt-8">&#x00A0;</span><span
cannam@86 8101 class="cmsy-8">}</span>
cannam@86 8102 <br class="fancyvrb" /><a
cannam@86 8103 id="x1-101092r46"></a><span
cannam@86 8104 class="cmr-6">46</span><span
cannam@86 8105 class="cmtt-8">&#x00A0;</span><span
cannam@86 8106 class="cmtt-8">&#x00A0;</span>
cannam@86 8107 <br class="fancyvrb" /><a
cannam@86 8108 id="x1-101094r47"></a><span
cannam@86 8109 class="cmr-6">47</span><span
cannam@86 8110 class="cmtt-8">&#x00A0;</span><span
cannam@86 8111 class="cmtt-8">&#x00A0;</span><span
cannam@86 8112 class="cmtt-8">&#x00A0;</span><span
cannam@86 8113 class="cmtt-8">&#x00A0;</span><span
cannam@86 8114 class="cmtt-8">&#x00A0;</span><span
cannam@86 8115 class="cmtt-8">&#x00A0;</span><span
cannam@86 8116 class="cmtt-8">&#x00A0;</span><span
cannam@86 8117 class="cmtt-8">&#x00A0;</span><span
cannam@86 8118 class="cmtt-8">&#x00A0;</span><span
cannam@86 8119 class="cmtt-8">&#x00A0;</span><span
cannam@86 8120 class="cmtt-8">&#x00A0;</span><span
cannam@86 8121 class="cmtt-8">&#x00A0;</span><span
cannam@86 8122 class="cmtt-8">&#x00A0;</span><span
cannam@86 8123 class="cmtt-8">&#x00A0;</span><span
cannam@86 8124 class="cmtt-8">&#x00A0;</span><span
cannam@86 8125 class="cmtt-8">&#x00A0;</span><span
cannam@86 8126 class="cmtt-8">&#x00A0;</span><span
cannam@86 8127 class="cmtt-8">&#x00A0;</span><span
cannam@86 8128 class="cmsy-8">}</span><span
cannam@86 8129 class="cmtt-8">&#x00A0;else</span><span
cannam@86 8130 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 8131 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8132 class="cmtt-8">&#x00A0;less</span><span
cannam@86 8133 class="cmtt-8">&#x00A0;than</span><span
cannam@86 8134 class="cmtt-8">&#x00A0;[room]</span><span
cannam@86 8135 class="cmtt-8">&#x00A0;</span><span
cannam@86 8136 class="cmsy-8">{</span>
cannam@86 8137 <br class="fancyvrb" /><a
cannam@86 8138 id="x1-101096r48"></a><span
cannam@86 8139 class="cmr-6">48</span><span
cannam@86 8140 class="cmtt-8">&#x00A0;</span><span
cannam@86 8141 class="cmtt-8">&#x00A0;</span>
cannam@86 8142 <br class="fancyvrb" /><a
cannam@86 8143 id="x1-101098r49"></a><span
cannam@86 8144 class="cmr-6">49</span><span
cannam@86 8145 class="cmtt-8">&#x00A0;</span><span
cannam@86 8146 class="cmtt-8">&#x00A0;</span><span
cannam@86 8147 class="cmtt-8">&#x00A0;</span><span
cannam@86 8148 class="cmtt-8">&#x00A0;</span><span
cannam@86 8149 class="cmtt-8">&#x00A0;</span><span
cannam@86 8150 class="cmtt-8">&#x00A0;</span><span
cannam@86 8151 class="cmtt-8">&#x00A0;</span><span
cannam@86 8152 class="cmtt-8">&#x00A0;</span><span
cannam@86 8153 class="cmtt-8">&#x00A0;</span><span
cannam@86 8154 class="cmtt-8">&#x00A0;</span><span
cannam@86 8155 class="cmtt-8">&#x00A0;</span><span
cannam@86 8156 class="cmtt-8">&#x00A0;</span><span
cannam@86 8157 class="cmtt-8">&#x00A0;</span><span
cannam@86 8158 class="cmtt-8">&#x00A0;</span><span
cannam@86 8159 class="cmtt-8">&#x00A0;</span><span
cannam@86 8160 class="cmtt-8">&#x00A0;</span><span
cannam@86 8161 class="cmtt-8">&#x00A0;</span><span
cannam@86 8162 class="cmtt-8">&#x00A0;</span><span
cannam@86 8163 class="cmtt-8">&#x00A0;</span><span
cannam@86 8164 class="cmtt-8">&#x00A0;</span><span
cannam@86 8165 class="cmtt-8">&#x00A0;</span><span
cannam@86 8166 class="cmtt-8">&#x00A0;24)</span><span
cannam@86 8167 class="cmtt-8">&#x00A0;if</span><span
cannam@86 8168 class="cmtt-8">&#x00A0;([val]</span><span
cannam@86 8169 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8170 class="cmtt-8">&#x00A0;odd)</span><span
cannam@86 8171 class="cmtt-8">&#x00A0;</span><span
cannam@86 8172 class="cmsy-8">{</span>
cannam@86 8173 <br class="fancyvrb" /><a
cannam@86 8174 id="x1-101100r50"></a><span
cannam@86 8175 class="cmr-6">50</span><span
cannam@86 8176 class="cmtt-8">&#x00A0;</span><span
cannam@86 8177 class="cmtt-8">&#x00A0;</span>
cannam@86 8178 <br class="fancyvrb" /><a
cannam@86 8179 id="x1-101102r51"></a><span
cannam@86 8180 class="cmr-6">51</span><span
cannam@86 8181 class="cmtt-8">&#x00A0;</span><span
cannam@86 8182 class="cmtt-8">&#x00A0;</span><span
cannam@86 8183 class="cmtt-8">&#x00A0;</span><span
cannam@86 8184 class="cmtt-8">&#x00A0;</span><span
cannam@86 8185 class="cmtt-8">&#x00A0;</span><span
cannam@86 8186 class="cmtt-8">&#x00A0;</span><span
cannam@86 8187 class="cmtt-8">&#x00A0;</span><span
cannam@86 8188 class="cmtt-8">&#x00A0;</span><span
cannam@86 8189 class="cmtt-8">&#x00A0;</span><span
cannam@86 8190 class="cmtt-8">&#x00A0;</span><span
cannam@86 8191 class="cmtt-8">&#x00A0;</span><span
cannam@86 8192 class="cmtt-8">&#x00A0;</span><span
cannam@86 8193 class="cmtt-8">&#x00A0;</span><span
cannam@86 8194 class="cmtt-8">&#x00A0;</span><span
cannam@86 8195 class="cmtt-8">&#x00A0;</span><span
cannam@86 8196 class="cmtt-8">&#x00A0;</span><span
cannam@86 8197 class="cmtt-8">&#x00A0;</span><span
cannam@86 8198 class="cmtt-8">&#x00A0;</span><span
cannam@86 8199 class="cmtt-8">&#x00A0;</span><span
cannam@86 8200 class="cmtt-8">&#x00A0;</span><span
cannam@86 8201 class="cmtt-8">&#x00A0;</span><span
cannam@86 8202 class="cmtt-8">&#x00A0;</span><span
cannam@86 8203 class="cmtt-8">&#x00A0;</span><span
cannam@86 8204 class="cmtt-8">&#x00A0;</span><span
cannam@86 8205 class="cmtt-8">&#x00A0;</span><span
cannam@86 8206 class="cmtt-8">&#x00A0;25)</span><span
cannam@86 8207 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8208 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 8209 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8210 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8211 class="cmtt-8">&#x00A0;=</span>
cannam@86 8212 <br class="fancyvrb" /><a
cannam@86 8213 id="x1-101104r52"></a><span
cannam@86 8214 class="cmr-6">52</span><span
cannam@86 8215 class="cmtt-8">&#x00A0;</span><span
cannam@86 8216 class="cmtt-8">&#x00A0;</span><span
cannam@86 8217 class="cmtt-8">&#x00A0;</span><span
cannam@86 8218 class="cmtt-8">&#x00A0;</span><span
cannam@86 8219 class="cmtt-8">&#x00A0;</span><span
cannam@86 8220 class="cmtt-8">&#x00A0;</span><span
cannam@86 8221 class="cmtt-8">&#x00A0;</span><span
cannam@86 8222 class="cmtt-8">&#x00A0;</span><span
cannam@86 8223 class="cmtt-8">&#x00A0;</span><span
cannam@86 8224 class="cmtt-8">&#x00A0;</span><span
cannam@86 8225 class="cmtt-8">&#x00A0;</span><span
cannam@86 8226 class="cmtt-8">&#x00A0;</span><span
cannam@86 8227 class="cmtt-8">&#x00A0;</span><span
cannam@86 8228 class="cmtt-8">&#x00A0;</span><span
cannam@86 8229 class="cmtt-8">&#x00A0;</span><span
cannam@86 8230 class="cmtt-8">&#x00A0;</span><span
cannam@86 8231 class="cmtt-8">&#x00A0;</span><span
cannam@86 8232 class="cmtt-8">&#x00A0;</span><span
cannam@86 8233 class="cmtt-8">&#x00A0;</span><span
cannam@86 8234 class="cmtt-8">&#x00A0;</span><span
cannam@86 8235 class="cmtt-8">&#x00A0;</span><span
cannam@86 8236 class="cmtt-8">&#x00A0;</span><span
cannam@86 8237 class="cmtt-8">&#x00A0;</span><span
cannam@86 8238 class="cmtt-8">&#x00A0;</span><span
cannam@86 8239 class="cmtt-8">&#x00A0;</span><span
cannam@86 8240 class="cmtt-8">&#x00A0;</span><span
cannam@86 8241 class="cmtt-8">&#x00A0;</span><span
cannam@86 8242 class="cmtt-8">&#x00A0;</span><span
cannam@86 8243 class="cmtt-8">&#x00A0;</span><span
cannam@86 8244 class="cmtt-8">&#x00A0;[predicted]</span><span
cannam@86 8245 class="cmtt-8">&#x00A0;-</span><span
cannam@86 8246 class="cmtt-8">&#x00A0;(([val]</span><span
cannam@86 8247 class="cmtt-8">&#x00A0;+</span><span
cannam@86 8248 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 8249 class="cmtt-8">&#x00A0;divided</span><span
cannam@86 8250 class="cmtt-8">&#x00A0;by</span><span
cannam@86 8251 class="cmtt-8">&#x00A0;</span><span
cannam@86 8252 class="cmtt-8">&#x00A0;2</span><span
cannam@86 8253 class="cmtt-8">&#x00A0;using</span><span
cannam@86 8254 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 8255 class="cmtt-8">&#x00A0;division)</span>
cannam@86 8256 <br class="fancyvrb" /><a
cannam@86 8257 id="x1-101106r53"></a><span
cannam@86 8258 class="cmr-6">53</span><span
cannam@86 8259 class="cmtt-8">&#x00A0;</span><span
cannam@86 8260 class="cmtt-8">&#x00A0;</span>
cannam@86 8261 <br class="fancyvrb" /><a
cannam@86 8262 id="x1-101108r54"></a><span
cannam@86 8263 class="cmr-6">54</span><span
cannam@86 8264 class="cmtt-8">&#x00A0;</span><span
cannam@86 8265 class="cmtt-8">&#x00A0;</span><span
cannam@86 8266 class="cmtt-8">&#x00A0;</span><span
cannam@86 8267 class="cmtt-8">&#x00A0;</span><span
cannam@86 8268 class="cmtt-8">&#x00A0;</span><span
cannam@86 8269 class="cmtt-8">&#x00A0;</span><span
cannam@86 8270 class="cmtt-8">&#x00A0;</span><span
cannam@86 8271 class="cmtt-8">&#x00A0;</span><span
cannam@86 8272 class="cmtt-8">&#x00A0;</span><span
cannam@86 8273 class="cmtt-8">&#x00A0;</span><span
cannam@86 8274 class="cmtt-8">&#x00A0;</span><span
cannam@86 8275 class="cmtt-8">&#x00A0;</span><span
cannam@86 8276 class="cmtt-8">&#x00A0;</span><span
cannam@86 8277 class="cmtt-8">&#x00A0;</span><span
cannam@86 8278 class="cmtt-8">&#x00A0;</span><span
cannam@86 8279 class="cmtt-8">&#x00A0;</span><span
cannam@86 8280 class="cmtt-8">&#x00A0;</span><span
cannam@86 8281 class="cmtt-8">&#x00A0;</span><span
cannam@86 8282 class="cmtt-8">&#x00A0;</span><span
cannam@86 8283 class="cmtt-8">&#x00A0;</span><span
cannam@86 8284 class="cmtt-8">&#x00A0;</span><span
cannam@86 8285 class="cmtt-8">&#x00A0;</span><span
cannam@86 8286 class="cmtt-8">&#x00A0;</span><span
cannam@86 8287 class="cmtt-8">&#x00A0;</span><span
cannam@86 8288 class="cmsy-8">}</span><span
cannam@86 8289 class="cmtt-8">&#x00A0;else</span><span
cannam@86 8290 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 8291 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8292 class="cmtt-8">&#x00A0;even</span><span
cannam@86 8293 class="cmtt-8">&#x00A0;</span><span
cannam@86 8294 class="cmsy-8">{</span>
cannam@86 8295 <br class="fancyvrb" /><a
cannam@86 8296 id="x1-101110r55"></a><span
cannam@86 8297 class="cmr-6">55</span><span
cannam@86 8298 class="cmtt-8">&#x00A0;</span><span
cannam@86 8299 class="cmtt-8">&#x00A0;</span>
cannam@86 8300 <br class="fancyvrb" /><a
cannam@86 8301 id="x1-101112r56"></a><span
cannam@86 8302 class="cmr-6">56</span><span
cannam@86 8303 class="cmtt-8">&#x00A0;</span><span
cannam@86 8304 class="cmtt-8">&#x00A0;</span><span
cannam@86 8305 class="cmtt-8">&#x00A0;</span><span
cannam@86 8306 class="cmtt-8">&#x00A0;</span><span
cannam@86 8307 class="cmtt-8">&#x00A0;</span><span
cannam@86 8308 class="cmtt-8">&#x00A0;</span><span
cannam@86 8309 class="cmtt-8">&#x00A0;</span><span
cannam@86 8310 class="cmtt-8">&#x00A0;</span><span
cannam@86 8311 class="cmtt-8">&#x00A0;</span><span
cannam@86 8312 class="cmtt-8">&#x00A0;</span><span
cannam@86 8313 class="cmtt-8">&#x00A0;</span><span
cannam@86 8314 class="cmtt-8">&#x00A0;</span><span
cannam@86 8315 class="cmtt-8">&#x00A0;</span><span
cannam@86 8316 class="cmtt-8">&#x00A0;</span><span
cannam@86 8317 class="cmtt-8">&#x00A0;</span><span
cannam@86 8318 class="cmtt-8">&#x00A0;</span><span
cannam@86 8319 class="cmtt-8">&#x00A0;</span><span
cannam@86 8320 class="cmtt-8">&#x00A0;</span><span
cannam@86 8321 class="cmtt-8">&#x00A0;</span><span
cannam@86 8322 class="cmtt-8">&#x00A0;</span><span
cannam@86 8323 class="cmtt-8">&#x00A0;</span><span
cannam@86 8324 class="cmtt-8">&#x00A0;</span><span
cannam@86 8325 class="cmtt-8">&#x00A0;</span><span
cannam@86 8326 class="cmtt-8">&#x00A0;</span><span
cannam@86 8327 class="cmtt-8">&#x00A0;</span><span
cannam@86 8328 class="cmtt-8">&#x00A0;26)</span><span
cannam@86 8329 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8330 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 8331 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8332 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8333 class="cmtt-8">&#x00A0;=</span>
cannam@86 8334 <br class="fancyvrb" /><a
cannam@86 8335 id="x1-101114r57"></a><span
cannam@86 8336 class="cmr-6">57</span><span
cannam@86 8337 class="cmtt-8">&#x00A0;</span><span
cannam@86 8338 class="cmtt-8">&#x00A0;</span><span
cannam@86 8339 class="cmtt-8">&#x00A0;</span><span
cannam@86 8340 class="cmtt-8">&#x00A0;</span><span
cannam@86 8341 class="cmtt-8">&#x00A0;</span><span
cannam@86 8342 class="cmtt-8">&#x00A0;</span><span
cannam@86 8343 class="cmtt-8">&#x00A0;</span><span
cannam@86 8344 class="cmtt-8">&#x00A0;</span><span
cannam@86 8345 class="cmtt-8">&#x00A0;</span><span
cannam@86 8346 class="cmtt-8">&#x00A0;</span><span
cannam@86 8347 class="cmtt-8">&#x00A0;</span><span
cannam@86 8348 class="cmtt-8">&#x00A0;</span><span
cannam@86 8349 class="cmtt-8">&#x00A0;</span><span
cannam@86 8350 class="cmtt-8">&#x00A0;</span><span
cannam@86 8351 class="cmtt-8">&#x00A0;</span><span
cannam@86 8352 class="cmtt-8">&#x00A0;</span><span
cannam@86 8353 class="cmtt-8">&#x00A0;</span><span
cannam@86 8354 class="cmtt-8">&#x00A0;</span><span
cannam@86 8355 class="cmtt-8">&#x00A0;</span><span
cannam@86 8356 class="cmtt-8">&#x00A0;</span><span
cannam@86 8357 class="cmtt-8">&#x00A0;</span><span
cannam@86 8358 class="cmtt-8">&#x00A0;</span><span
cannam@86 8359 class="cmtt-8">&#x00A0;</span><span
cannam@86 8360 class="cmtt-8">&#x00A0;</span><span
cannam@86 8361 class="cmtt-8">&#x00A0;</span><span
cannam@86 8362 class="cmtt-8">&#x00A0;</span><span
cannam@86 8363 class="cmtt-8">&#x00A0;</span><span
cannam@86 8364 class="cmtt-8">&#x00A0;</span><span
cannam@86 8365 class="cmtt-8">&#x00A0;</span><span
cannam@86 8366 class="cmtt-8">&#x00A0;[predicted]</span><span
cannam@86 8367 class="cmtt-8">&#x00A0;+</span><span
cannam@86 8368 class="cmtt-8">&#x00A0;([val]</span><span
cannam@86 8369 class="cmtt-8">&#x00A0;/</span><span
cannam@86 8370 class="cmtt-8">&#x00A0;2</span><span
cannam@86 8371 class="cmtt-8">&#x00A0;using</span><span
cannam@86 8372 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 8373 class="cmtt-8">&#x00A0;division)</span>
cannam@86 8374 <br class="fancyvrb" /><a
cannam@86 8375 id="x1-101116r58"></a><span
cannam@86 8376 class="cmr-6">58</span><span
cannam@86 8377 class="cmtt-8">&#x00A0;</span><span
cannam@86 8378 class="cmtt-8">&#x00A0;</span>
cannam@86 8379 <br class="fancyvrb" /><a
cannam@86 8380 id="x1-101118r59"></a><span
cannam@86 8381 class="cmr-6">59</span><span
cannam@86 8382 class="cmtt-8">&#x00A0;</span><span
cannam@86 8383 class="cmtt-8">&#x00A0;</span><span
cannam@86 8384 class="cmtt-8">&#x00A0;</span><span
cannam@86 8385 class="cmtt-8">&#x00A0;</span><span
cannam@86 8386 class="cmtt-8">&#x00A0;</span><span
cannam@86 8387 class="cmtt-8">&#x00A0;</span><span
cannam@86 8388 class="cmtt-8">&#x00A0;</span><span
cannam@86 8389 class="cmtt-8">&#x00A0;</span><span
cannam@86 8390 class="cmtt-8">&#x00A0;</span><span
cannam@86 8391 class="cmtt-8">&#x00A0;</span><span
cannam@86 8392 class="cmtt-8">&#x00A0;</span><span
cannam@86 8393 class="cmtt-8">&#x00A0;</span><span
cannam@86 8394 class="cmtt-8">&#x00A0;</span><span
cannam@86 8395 class="cmtt-8">&#x00A0;</span><span
cannam@86 8396 class="cmtt-8">&#x00A0;</span><span
cannam@86 8397 class="cmtt-8">&#x00A0;</span><span
cannam@86 8398 class="cmtt-8">&#x00A0;</span><span
cannam@86 8399 class="cmtt-8">&#x00A0;</span><span
cannam@86 8400 class="cmtt-8">&#x00A0;</span><span
cannam@86 8401 class="cmtt-8">&#x00A0;</span><span
cannam@86 8402 class="cmtt-8">&#x00A0;</span><span
cannam@86 8403 class="cmtt-8">&#x00A0;</span><span
cannam@86 8404 class="cmtt-8">&#x00A0;</span><span
cannam@86 8405 class="cmtt-8">&#x00A0;</span><span
cannam@86 8406 class="cmsy-8">}</span>
cannam@86 8407 <br class="fancyvrb" /><a
cannam@86 8408 id="x1-101120r60"></a><span
cannam@86 8409 class="cmr-6">60</span><span
cannam@86 8410 class="cmtt-8">&#x00A0;</span><span
cannam@86 8411 class="cmtt-8">&#x00A0;</span>
cannam@86 8412 <br class="fancyvrb" /><a
cannam@86 8413 id="x1-101122r61"></a><span
cannam@86 8414 class="cmr-6">61</span><span
cannam@86 8415 class="cmtt-8">&#x00A0;</span><span
cannam@86 8416 class="cmtt-8">&#x00A0;</span><span
cannam@86 8417 class="cmtt-8">&#x00A0;</span><span
cannam@86 8418 class="cmtt-8">&#x00A0;</span><span
cannam@86 8419 class="cmtt-8">&#x00A0;</span><span
cannam@86 8420 class="cmtt-8">&#x00A0;</span><span
cannam@86 8421 class="cmtt-8">&#x00A0;</span><span
cannam@86 8422 class="cmtt-8">&#x00A0;</span><span
cannam@86 8423 class="cmtt-8">&#x00A0;</span><span
cannam@86 8424 class="cmtt-8">&#x00A0;</span><span
cannam@86 8425 class="cmtt-8">&#x00A0;</span><span
cannam@86 8426 class="cmtt-8">&#x00A0;</span><span
cannam@86 8427 class="cmtt-8">&#x00A0;</span><span
cannam@86 8428 class="cmtt-8">&#x00A0;</span><span
cannam@86 8429 class="cmtt-8">&#x00A0;</span><span
cannam@86 8430 class="cmtt-8">&#x00A0;</span><span
cannam@86 8431 class="cmtt-8">&#x00A0;</span><span
cannam@86 8432 class="cmtt-8">&#x00A0;</span><span
cannam@86 8433 class="cmsy-8">}</span>
cannam@86 8434 <br class="fancyvrb" /><a
cannam@86 8435 id="x1-101124r62"></a><span
cannam@86 8436 class="cmr-6">62</span><span
cannam@86 8437 class="cmtt-8">&#x00A0;</span><span
cannam@86 8438 class="cmtt-8">&#x00A0;</span>
cannam@86 8439 <br class="fancyvrb" /><a
cannam@86 8440 id="x1-101126r63"></a><span
cannam@86 8441 class="cmr-6">63</span><span
cannam@86 8442 class="cmtt-8">&#x00A0;</span><span
cannam@86 8443 class="cmtt-8">&#x00A0;</span><span
cannam@86 8444 class="cmtt-8">&#x00A0;</span><span
cannam@86 8445 class="cmtt-8">&#x00A0;</span><span
cannam@86 8446 class="cmtt-8">&#x00A0;</span><span
cannam@86 8447 class="cmtt-8">&#x00A0;</span><span
cannam@86 8448 class="cmtt-8">&#x00A0;</span><span
cannam@86 8449 class="cmtt-8">&#x00A0;</span><span
cannam@86 8450 class="cmtt-8">&#x00A0;</span><span
cannam@86 8451 class="cmtt-8">&#x00A0;</span><span
cannam@86 8452 class="cmtt-8">&#x00A0;</span><span
cannam@86 8453 class="cmtt-8">&#x00A0;</span><span
cannam@86 8454 class="cmsy-8">}</span><span
cannam@86 8455 class="cmtt-8">&#x00A0;else</span><span
cannam@86 8456 class="cmtt-8">&#x00A0;[val]</span><span
cannam@86 8457 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8458 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 8459 class="cmtt-8">&#x00A0;</span><span
cannam@86 8460 class="cmsy-8">{</span>
cannam@86 8461 <br class="fancyvrb" /><a
cannam@86 8462 id="x1-101128r64"></a><span
cannam@86 8463 class="cmr-6">64</span><span
cannam@86 8464 class="cmtt-8">&#x00A0;</span><span
cannam@86 8465 class="cmtt-8">&#x00A0;</span>
cannam@86 8466 <br class="fancyvrb" /><a
cannam@86 8467 id="x1-101130r65"></a><span
cannam@86 8468 class="cmr-6">65</span><span
cannam@86 8469 class="cmtt-8">&#x00A0;</span><span
cannam@86 8470 class="cmtt-8">&#x00A0;</span><span
cannam@86 8471 class="cmtt-8">&#x00A0;</span><span
cannam@86 8472 class="cmtt-8">&#x00A0;</span><span
cannam@86 8473 class="cmtt-8">&#x00A0;</span><span
cannam@86 8474 class="cmtt-8">&#x00A0;</span><span
cannam@86 8475 class="cmtt-8">&#x00A0;</span><span
cannam@86 8476 class="cmtt-8">&#x00A0;</span><span
cannam@86 8477 class="cmtt-8">&#x00A0;</span><span
cannam@86 8478 class="cmtt-8">&#x00A0;</span><span
cannam@86 8479 class="cmtt-8">&#x00A0;</span><span
cannam@86 8480 class="cmtt-8">&#x00A0;</span><span
cannam@86 8481 class="cmtt-8">&#x00A0;</span><span
cannam@86 8482 class="cmtt-8">&#x00A0;27)</span><span
cannam@86 8483 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8484 class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
cannam@86 8485 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8486 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8487 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8488 class="cmtt-8">&#x00A0;unset</span>
cannam@86 8489
cannam@86 8490
cannam@86 8491
cannam@86 8492 <br class="fancyvrb" /><a
cannam@86 8493 id="x1-101132r66"></a><span
cannam@86 8494 class="cmr-6">66</span><span
cannam@86 8495 class="cmtt-8">&#x00A0;</span><span
cannam@86 8496 class="cmtt-8">&#x00A0;</span><span
cannam@86 8497 class="cmtt-8">&#x00A0;</span><span
cannam@86 8498 class="cmtt-8">&#x00A0;</span><span
cannam@86 8499 class="cmtt-8">&#x00A0;</span><span
cannam@86 8500 class="cmtt-8">&#x00A0;</span><span
cannam@86 8501 class="cmtt-8">&#x00A0;</span><span
cannam@86 8502 class="cmtt-8">&#x00A0;</span><span
cannam@86 8503 class="cmtt-8">&#x00A0;</span><span
cannam@86 8504 class="cmtt-8">&#x00A0;</span><span
cannam@86 8505 class="cmtt-8">&#x00A0;</span><span
cannam@86 8506 class="cmtt-8">&#x00A0;</span><span
cannam@86 8507 class="cmtt-8">&#x00A0;</span><span
cannam@86 8508 class="cmtt-8">&#x00A0;28)</span><span
cannam@86 8509 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8510 class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
cannam@86 8511 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8512 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8513 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8514 class="cmtt-8">&#x00A0;[predicted]</span>
cannam@86 8515 <br class="fancyvrb" /><a
cannam@86 8516 id="x1-101134r67"></a><span
cannam@86 8517 class="cmr-6">67</span><span
cannam@86 8518 class="cmtt-8">&#x00A0;</span><span
cannam@86 8519 class="cmtt-8">&#x00A0;</span>
cannam@86 8520 <br class="fancyvrb" /><a
cannam@86 8521 id="x1-101136r68"></a><span
cannam@86 8522 class="cmr-6">68</span><span
cannam@86 8523 class="cmtt-8">&#x00A0;</span><span
cannam@86 8524 class="cmtt-8">&#x00A0;</span><span
cannam@86 8525 class="cmtt-8">&#x00A0;</span><span
cannam@86 8526 class="cmtt-8">&#x00A0;</span><span
cannam@86 8527 class="cmtt-8">&#x00A0;</span><span
cannam@86 8528 class="cmtt-8">&#x00A0;</span><span
cannam@86 8529 class="cmtt-8">&#x00A0;</span><span
cannam@86 8530 class="cmtt-8">&#x00A0;</span><span
cannam@86 8531 class="cmtt-8">&#x00A0;</span><span
cannam@86 8532 class="cmtt-8">&#x00A0;</span><span
cannam@86 8533 class="cmtt-8">&#x00A0;</span><span
cannam@86 8534 class="cmtt-8">&#x00A0;</span><span
cannam@86 8535 class="cmsy-8">}</span>
cannam@86 8536 <br class="fancyvrb" /><a
cannam@86 8537 id="x1-101138r69"></a><span
cannam@86 8538 class="cmr-6">69</span><span
cannam@86 8539 class="cmtt-8">&#x00A0;</span><span
cannam@86 8540 class="cmtt-8">&#x00A0;</span>
cannam@86 8541 <br class="fancyvrb" /><a
cannam@86 8542 id="x1-101140r70"></a><span
cannam@86 8543 class="cmr-6">70</span><span
cannam@86 8544 class="cmtt-8">&#x00A0;</span><span
cannam@86 8545 class="cmtt-8">&#x00A0;</span><span
cannam@86 8546 class="cmtt-8">&#x00A0;</span><span
cannam@86 8547 class="cmtt-8">&#x00A0;</span><span
cannam@86 8548 class="cmtt-8">&#x00A0;</span><span
cannam@86 8549 class="cmtt-8">&#x00A0;</span><span
cannam@86 8550 class="cmtt-8">&#x00A0;</span><span
cannam@86 8551 class="cmsy-8">}</span>
cannam@86 8552 <br class="fancyvrb" /><a
cannam@86 8553 id="x1-101142r71"></a><span
cannam@86 8554 class="cmr-6">71</span><span
cannam@86 8555 class="cmtt-8">&#x00A0;</span><span
cannam@86 8556 class="cmtt-8">&#x00A0;</span>
cannam@86 8557 <br class="fancyvrb" /><a
cannam@86 8558 id="x1-101144r72"></a><span
cannam@86 8559 class="cmr-6">72</span><span
cannam@86 8560 class="cmtt-8">&#x00A0;</span><span
cannam@86 8561 class="cmtt-8">&#x00A0;</span><span
cannam@86 8562 class="cmtt-8">&#x00A0;29)</span><span
cannam@86 8563 class="cmtt-8">&#x00A0;done</span>
cannam@86 8564 <br class="fancyvrb" /><a
cannam@86 8565 id="x1-101146r73"></a><span
cannam@86 8566 class="cmr-6">73</span><span
cannam@86 8567 class="cmtt-8">&#x00A0;</span><span
cannam@86 8568 class="cmtt-8">&#x00A0;</span>
cannam@86 8569 </div>
cannam@86 8570 </dd><dt class="description">
cannam@86 8571 <span
cannam@86 8572 class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd
cannam@86 8573 class="description">
cannam@86 8574 <!--l. 351--><p class="noindent" >Curve synthesis generates a return vector <span
cannam@86 8575 class="cmtt-12">[floor] </span>of length <span
cannam@86 8576 class="cmtt-12">[n] </span>(where <span
cannam@86 8577 class="cmtt-12">[n] </span>is provided by
cannam@86 8578 the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
cannam@86 8579 <span
cannam@86 8580 class="cmtt-12">[floor1_X_list]</span>, <span
cannam@86 8581 class="cmtt-12">[floor1_final_Y] </span>and <span
cannam@86 8582 class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
cannam@86 8583 [floor1_multiplier] and [floor1_values] values.
cannam@86 8584 <!--l. 358--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
cannam@86 8585 class="cmtt-12">[floor1_X_list]</span>, <span
cannam@86 8586 class="cmtt-12">[floor1_final_Y] </span>and
cannam@86 8587 <span
cannam@86 8588 class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span
cannam@86 8589 class="cmtt-12">[floor1_X_list]&#8217;</span>, <span
cannam@86 8590 class="cmtt-12">[floor1_final_Y]&#8217;</span>
cannam@86 8591 and <span
cannam@86 8592 class="cmtt-12">[floor1_step2_flag]&#8217; </span>according to ascending sort order of the values in
cannam@86 8593 <span
cannam@86 8594 class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span
cannam@86 8595 class="cmtt-12">[floor1_X_list] </span>and then apply the same
cannam@86 8596 permutation to elements of the other two vectors so that the X, Y and step2_flag values
cannam@86 8597 still match.
cannam@86 8598 <!--l. 368--><p class="noindent" >Then compute the final curve in one pass:
cannam@86 8599 <!--l. 370--><p class="noindent" >
cannam@86 8600 <div class="fancyvrb" id="fancyvrb32">
cannam@86 8601 <a
cannam@86 8602 id="x1-101148r1"></a><span
cannam@86 8603 class="cmr-6">1</span><span
cannam@86 8604 class="cmtt-8">&#x00A0;</span><span
cannam@86 8605 class="cmtt-8">&#x00A0;</span><span
cannam@86 8606 class="cmtt-8">&#x00A0;</span><span
cannam@86 8607 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 8608 class="cmtt-8">&#x00A0;[hx]</span><span
cannam@86 8609 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8610 class="cmtt-8">&#x00A0;0</span>
cannam@86 8611 <br class="fancyvrb" /><a
cannam@86 8612 id="x1-101150r2"></a><span
cannam@86 8613 class="cmr-6">2</span><span
cannam@86 8614 class="cmtt-8">&#x00A0;</span><span
cannam@86 8615 class="cmtt-8">&#x00A0;</span><span
cannam@86 8616 class="cmtt-8">&#x00A0;</span><span
cannam@86 8617 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 8618 class="cmtt-8">&#x00A0;[lx]</span><span
cannam@86 8619 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8620 class="cmtt-8">&#x00A0;0</span>
cannam@86 8621 <br class="fancyvrb" /><a
cannam@86 8622 id="x1-101152r3"></a><span
cannam@86 8623 class="cmr-6">3</span><span
cannam@86 8624 class="cmtt-8">&#x00A0;</span><span
cannam@86 8625 class="cmtt-8">&#x00A0;</span><span
cannam@86 8626 class="cmtt-8">&#x00A0;</span><span
cannam@86 8627 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 8628 class="cmtt-8">&#x00A0;[ly]</span><span
cannam@86 8629 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8630 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8631 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
cannam@86 8632 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8633 class="cmtt-8">&#x00A0;[0]</span><span
cannam@86 8634 class="cmtt-8">&#x00A0;*</span><span
cannam@86 8635 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
cannam@86 8636 <br class="fancyvrb" /><a
cannam@86 8637 id="x1-101154r4"></a><span
cannam@86 8638 class="cmr-6">4</span><span
cannam@86 8639 class="cmtt-8">&#x00A0;</span><span
cannam@86 8640 class="cmtt-8">&#x00A0;</span><span
cannam@86 8641 class="cmtt-8">&#x00A0;</span><span
cannam@86 8642 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 8643 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 8644 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8645 class="cmtt-8">&#x00A0;over</span><span
cannam@86 8646 class="cmtt-8">&#x00A0;the</span><span
cannam@86 8647 class="cmtt-8">&#x00A0;range</span><span
cannam@86 8648 class="cmtt-8">&#x00A0;1</span><span
cannam@86 8649 class="cmtt-8">&#x00A0;...</span><span
cannam@86 8650 class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
cannam@86 8651 class="cmtt-8">&#x00A0;</span><span
cannam@86 8652 class="cmsy-8">{</span>
cannam@86 8653 <br class="fancyvrb" /><a
cannam@86 8654 id="x1-101156r5"></a><span
cannam@86 8655 class="cmr-6">5</span><span
cannam@86 8656 class="cmtt-8">&#x00A0;</span><span
cannam@86 8657 class="cmtt-8">&#x00A0;</span>
cannam@86 8658 <br class="fancyvrb" /><a
cannam@86 8659 id="x1-101158r6"></a><span
cannam@86 8660 class="cmr-6">6</span><span
cannam@86 8661 class="cmtt-8">&#x00A0;</span><span
cannam@86 8662 class="cmtt-8">&#x00A0;</span><span
cannam@86 8663 class="cmtt-8">&#x00A0;</span><span
cannam@86 8664 class="cmtt-8">&#x00A0;</span><span
cannam@86 8665 class="cmtt-8">&#x00A0;</span><span
cannam@86 8666 class="cmtt-8">&#x00A0;</span><span
cannam@86 8667 class="cmtt-8">&#x00A0;</span><span
cannam@86 8668 class="cmtt-8">&#x00A0;</span><span
cannam@86 8669 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 8670 class="cmtt-8">&#x00A0;if</span><span
cannam@86 8671 class="cmtt-8">&#x00A0;(</span><span
cannam@86 8672 class="cmtt-8">&#x00A0;[floor1_step2_flag]&#8217;</span><span
cannam@86 8673 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8674 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8675 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8676 class="cmtt-8">&#x00A0;set</span><span
cannam@86 8677 class="cmtt-8">&#x00A0;)</span><span
cannam@86 8678 class="cmtt-8">&#x00A0;</span><span
cannam@86 8679 class="cmsy-8">{</span>
cannam@86 8680 <br class="fancyvrb" /><a
cannam@86 8681 id="x1-101160r7"></a><span
cannam@86 8682 class="cmr-6">7</span><span
cannam@86 8683 class="cmtt-8">&#x00A0;</span><span
cannam@86 8684 class="cmtt-8">&#x00A0;</span>
cannam@86 8685 <br class="fancyvrb" /><a
cannam@86 8686 id="x1-101162r8"></a><span
cannam@86 8687 class="cmr-6">8</span><span
cannam@86 8688 class="cmtt-8">&#x00A0;</span><span
cannam@86 8689 class="cmtt-8">&#x00A0;</span><span
cannam@86 8690 class="cmtt-8">&#x00A0;</span><span
cannam@86 8691 class="cmtt-8">&#x00A0;</span><span
cannam@86 8692 class="cmtt-8">&#x00A0;</span><span
cannam@86 8693 class="cmtt-8">&#x00A0;</span><span
cannam@86 8694 class="cmtt-8">&#x00A0;</span><span
cannam@86 8695 class="cmtt-8">&#x00A0;</span><span
cannam@86 8696 class="cmtt-8">&#x00A0;</span><span
cannam@86 8697 class="cmtt-8">&#x00A0;</span><span
cannam@86 8698 class="cmtt-8">&#x00A0;</span><span
cannam@86 8699 class="cmtt-8">&#x00A0;</span><span
cannam@86 8700 class="cmtt-8">&#x00A0;</span><span
cannam@86 8701 class="cmtt-8">&#x00A0;</span><span
cannam@86 8702 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 8703 class="cmtt-8">&#x00A0;[hy]</span><span
cannam@86 8704 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8705 class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
cannam@86 8706 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8707 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 8708 class="cmtt-8">&#x00A0;*</span><span
cannam@86 8709 class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
cannam@86 8710 <br class="fancyvrb" /><a
cannam@86 8711 id="x1-101164r9"></a><span
cannam@86 8712 class="cmr-6">9</span><span
cannam@86 8713 class="cmtt-8">&#x00A0;</span><span
cannam@86 8714 class="cmtt-8">&#x00A0;</span><span
cannam@86 8715 class="cmtt-8">&#x00A0; </span><span
cannam@86 8716 class="cmtt-8">&#x00A0;</span><span
cannam@86 8717 class="cmtt-8">&#x00A0;</span><span
cannam@86 8718 class="cmtt-8">&#x00A0;</span><span
cannam@86 8719 class="cmtt-8">&#x00A0;</span><span
cannam@86 8720 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 8721 class="cmtt-8">&#x00A0;[hx]</span><span
cannam@86 8722 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8723 class="cmtt-8">&#x00A0;[floor1_X_list]&#8217;</span><span
cannam@86 8724 class="cmtt-8">&#x00A0;element</span><span
cannam@86 8725 class="cmtt-8">&#x00A0;[i]</span>
cannam@86 8726 <br class="fancyvrb" /><a
cannam@86 8727 id="x1-101166r10"></a><span
cannam@86 8728 class="cmr-6">10</span><span
cannam@86 8729 class="cmtt-8">&#x00A0;</span><span
cannam@86 8730 class="cmtt-8">&#x00A0;</span><span
cannam@86 8731 class="cmtt-8">&#x00A0;</span><span
cannam@86 8732 class="cmtt-8">&#x00A0;</span><span
cannam@86 8733 class="cmtt-8">&#x00A0;</span><span
cannam@86 8734 class="cmtt-8">&#x00A0;</span><span
cannam@86 8735 class="cmtt-8">&#x00A0;</span><span
cannam@86 8736 class="cmtt-8">&#x00A0;</span><span
cannam@86 8737 class="cmtt-8">&#x00A0;</span><span
cannam@86 8738 class="cmtt-8">&#x00A0;</span><span
cannam@86 8739 class="cmtt-8">&#x00A0;</span><span
cannam@86 8740 class="cmtt-8">&#x00A0;</span><span
cannam@86 8741 class="cmtt-8">&#x00A0;</span><span
cannam@86 8742 class="cmtt-8">&#x00A0;</span><span
cannam@86 8743 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 8744 class="cmtt-8">&#x00A0;</span><a
cannam@86 8745 href="#x1-1230009.2.7"><span
cannam@86 8746 class="cmtt-8">render_line</span></a><span
cannam@86 8747 class="cmtt-8">(</span><span
cannam@86 8748 class="cmtt-8">&#x00A0;[lx],</span><span
cannam@86 8749 class="cmtt-8">&#x00A0;[ly],</span><span
cannam@86 8750 class="cmtt-8">&#x00A0;[hx],</span><span
cannam@86 8751 class="cmtt-8">&#x00A0;[hy],</span><span
cannam@86 8752 class="cmtt-8">&#x00A0;[floor]</span><span
cannam@86 8753 class="cmtt-8">&#x00A0;)</span>
cannam@86 8754 <br class="fancyvrb" /><a
cannam@86 8755 id="x1-101168r11"></a><span
cannam@86 8756 class="cmr-6">11</span><span
cannam@86 8757 class="cmtt-8">&#x00A0;</span><span
cannam@86 8758 class="cmtt-8">&#x00A0;</span><span
cannam@86 8759 class="cmtt-8">&#x00A0;</span><span
cannam@86 8760 class="cmtt-8">&#x00A0;</span><span
cannam@86 8761 class="cmtt-8">&#x00A0;</span><span
cannam@86 8762 class="cmtt-8">&#x00A0;</span><span
cannam@86 8763 class="cmtt-8">&#x00A0;</span><span
cannam@86 8764 class="cmtt-8">&#x00A0;</span><span
cannam@86 8765 class="cmtt-8">&#x00A0;</span><span
cannam@86 8766 class="cmtt-8">&#x00A0;</span><span
cannam@86 8767 class="cmtt-8">&#x00A0;</span><span
cannam@86 8768 class="cmtt-8">&#x00A0;</span><span
cannam@86 8769 class="cmtt-8">&#x00A0;</span><span
cannam@86 8770 class="cmtt-8">&#x00A0;</span><span
cannam@86 8771 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 8772 class="cmtt-8">&#x00A0;[lx]</span><span
cannam@86 8773 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8774 class="cmtt-8">&#x00A0;[hx]</span>
cannam@86 8775 <br class="fancyvrb" /><a
cannam@86 8776 id="x1-101170r12"></a><span
cannam@86 8777 class="cmr-6">12</span><span
cannam@86 8778 class="cmtt-8">&#x00A0;</span><span
cannam@86 8779 class="cmtt-8">&#x00A0; </span><span
cannam@86 8780 class="cmtt-8">&#x00A0;</span><span
cannam@86 8781 class="cmtt-8">&#x00A0;</span><span
cannam@86 8782 class="cmtt-8">&#x00A0;</span><span
cannam@86 8783 class="cmtt-8">&#x00A0;10)</span><span
cannam@86 8784 class="cmtt-8">&#x00A0;[ly]</span><span
cannam@86 8785 class="cmtt-8">&#x00A0;=</span><span
cannam@86 8786 class="cmtt-8">&#x00A0;[hy]</span>
cannam@86 8787 <br class="fancyvrb" /><a
cannam@86 8788 id="x1-101172r13"></a><span
cannam@86 8789 class="cmr-6">13</span><span
cannam@86 8790 class="cmtt-8">&#x00A0;</span><span
cannam@86 8791 class="cmtt-8">&#x00A0;</span><span
cannam@86 8792 class="cmtt-8">&#x00A0;</span><span
cannam@86 8793 class="cmtt-8">&#x00A0;</span><span
cannam@86 8794 class="cmtt-8">&#x00A0;</span><span
cannam@86 8795 class="cmtt-8">&#x00A0;</span><span
cannam@86 8796 class="cmtt-8">&#x00A0;</span><span
cannam@86 8797 class="cmtt-8">&#x00A0;</span><span
cannam@86 8798 class="cmtt-8">&#x00A0;</span><span
cannam@86 8799 class="cmtt-8">&#x00A0;</span><span
cannam@86 8800 class="cmtt-8">&#x00A0;</span><span
cannam@86 8801 class="cmtt-8">&#x00A0;</span><span
cannam@86 8802 class="cmsy-8">}</span>
cannam@86 8803 <br class="fancyvrb" /><a
cannam@86 8804 id="x1-101174r14"></a><span
cannam@86 8805 class="cmr-6">14</span><span
cannam@86 8806 class="cmtt-8">&#x00A0;</span><span
cannam@86 8807 class="cmtt-8">&#x00A0;</span><span
cannam@86 8808 class="cmtt-8">&#x00A0;</span><span
cannam@86 8809 class="cmtt-8">&#x00A0;</span><span
cannam@86 8810 class="cmtt-8">&#x00A0;</span><span
cannam@86 8811 class="cmtt-8">&#x00A0;</span><span
cannam@86 8812 class="cmtt-8">&#x00A0;</span><span
cannam@86 8813 class="cmsy-8">}</span>
cannam@86 8814 <br class="fancyvrb" /><a
cannam@86 8815 id="x1-101176r15"></a><span
cannam@86 8816 class="cmr-6">15</span><span
cannam@86 8817 class="cmtt-8">&#x00A0;</span><span
cannam@86 8818 class="cmtt-8">&#x00A0;</span>
cannam@86 8819 <br class="fancyvrb" /><a
cannam@86 8820 id="x1-101178r16"></a><span
cannam@86 8821 class="cmr-6">16</span><span
cannam@86 8822 class="cmtt-8">&#x00A0;</span><span
cannam@86 8823 class="cmtt-8">&#x00A0;</span><span
cannam@86 8824 class="cmtt-8">&#x00A0;11)</span><span
cannam@86 8825 class="cmtt-8">&#x00A0;if</span><span
cannam@86 8826 class="cmtt-8">&#x00A0;(</span><span
cannam@86 8827 class="cmtt-8">&#x00A0;[hx]</span><span
cannam@86 8828 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8829 class="cmtt-8">&#x00A0;less</span><span
cannam@86 8830 class="cmtt-8">&#x00A0;than</span><span
cannam@86 8831 class="cmtt-8">&#x00A0;[n]</span><span
cannam@86 8832 class="cmtt-8">&#x00A0;)</span><span
cannam@86 8833 class="cmtt-8">&#x00A0;</span><span
cannam@86 8834 class="cmsy-8">{</span>
cannam@86 8835 <br class="fancyvrb" /><a
cannam@86 8836 id="x1-101180r17"></a><span
cannam@86 8837 class="cmr-6">17</span><span
cannam@86 8838 class="cmtt-8">&#x00A0;</span><span
cannam@86 8839 class="cmtt-8">&#x00A0;</span>
cannam@86 8840 <br class="fancyvrb" /><a
cannam@86 8841 id="x1-101182r18"></a><span
cannam@86 8842 class="cmr-6">18</span><span
cannam@86 8843 class="cmtt-8">&#x00A0;</span><span
cannam@86 8844 class="cmtt-8">&#x00A0;</span><span
cannam@86 8845 class="cmtt-8">&#x00A0;</span><span
cannam@86 8846 class="cmtt-8">&#x00A0;</span><span
cannam@86 8847 class="cmtt-8">&#x00A0;</span><span
cannam@86 8848 class="cmtt-8">&#x00A0;</span><span
cannam@86 8849 class="cmtt-8">&#x00A0;</span><span
cannam@86 8850 class="cmtt-8">&#x00A0;</span><span
cannam@86 8851 class="cmtt-8">&#x00A0;</span><span
cannam@86 8852 class="cmtt-8">&#x00A0;12)</span><span
cannam@86 8853 class="cmtt-8">&#x00A0;</span><a
cannam@86 8854 href="#x1-1230009.2.7"><span
cannam@86 8855 class="cmtt-8">render_line</span></a><span
cannam@86 8856 class="cmtt-8">(</span><span
cannam@86 8857 class="cmtt-8">&#x00A0;[hx],</span><span
cannam@86 8858 class="cmtt-8">&#x00A0;[hy],</span><span
cannam@86 8859 class="cmtt-8">&#x00A0;[n],</span><span
cannam@86 8860 class="cmtt-8">&#x00A0;[hy],</span><span
cannam@86 8861 class="cmtt-8">&#x00A0;[floor]</span><span
cannam@86 8862 class="cmtt-8">&#x00A0;)</span>
cannam@86 8863 <br class="fancyvrb" /><a
cannam@86 8864 id="x1-101184r19"></a><span
cannam@86 8865 class="cmr-6">19</span><span
cannam@86 8866 class="cmtt-8">&#x00A0;</span><span
cannam@86 8867 class="cmtt-8">&#x00A0;</span>
cannam@86 8868 <br class="fancyvrb" /><a
cannam@86 8869 id="x1-101186r20"></a><span
cannam@86 8870 class="cmr-6">20</span><span
cannam@86 8871 class="cmtt-8">&#x00A0;</span><span
cannam@86 8872 class="cmtt-8">&#x00A0;</span><span
cannam@86 8873 class="cmtt-8">&#x00A0;</span><span
cannam@86 8874 class="cmtt-8">&#x00A0;</span><span
cannam@86 8875 class="cmtt-8">&#x00A0;</span><span
cannam@86 8876 class="cmtt-8">&#x00A0;</span><span
cannam@86 8877 class="cmtt-8">&#x00A0;</span><span
cannam@86 8878 class="cmsy-8">}</span>
cannam@86 8879 <br class="fancyvrb" /><a
cannam@86 8880 id="x1-101188r21"></a><span
cannam@86 8881 class="cmr-6">21</span><span
cannam@86 8882 class="cmtt-8">&#x00A0;</span><span
cannam@86 8883 class="cmtt-8">&#x00A0;</span>
cannam@86 8884 <br class="fancyvrb" /><a
cannam@86 8885 id="x1-101190r22"></a><span
cannam@86 8886 class="cmr-6">22</span><span
cannam@86 8887 class="cmtt-8">&#x00A0;</span><span
cannam@86 8888 class="cmtt-8">&#x00A0;</span><span
cannam@86 8889 class="cmtt-8">&#x00A0;13)</span><span
cannam@86 8890 class="cmtt-8">&#x00A0;if</span><span
cannam@86 8891 class="cmtt-8">&#x00A0;(</span><span
cannam@86 8892 class="cmtt-8">&#x00A0;[hx]</span><span
cannam@86 8893 class="cmtt-8">&#x00A0;is</span><span
cannam@86 8894 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 8895 class="cmtt-8">&#x00A0;than</span><span
cannam@86 8896 class="cmtt-8">&#x00A0;[n]</span><span
cannam@86 8897 class="cmtt-8">&#x00A0;)</span><span
cannam@86 8898 class="cmtt-8">&#x00A0;</span><span
cannam@86 8899 class="cmsy-8">{</span>
cannam@86 8900 <br class="fancyvrb" /><a
cannam@86 8901 id="x1-101192r23"></a><span
cannam@86 8902 class="cmr-6">23</span><span
cannam@86 8903 class="cmtt-8">&#x00A0;</span><span
cannam@86 8904 class="cmtt-8">&#x00A0;</span>
cannam@86 8905 <br class="fancyvrb" /><a
cannam@86 8906 id="x1-101194r24"></a><span
cannam@86 8907 class="cmr-6">24</span><span
cannam@86 8908 class="cmtt-8">&#x00A0;</span><span
cannam@86 8909 class="cmtt-8">&#x00A0;</span><span
cannam@86 8910 class="cmtt-8">&#x00A0;</span><span
cannam@86 8911 class="cmtt-8">&#x00A0;</span><span
cannam@86 8912 class="cmtt-8">&#x00A0;</span><span
cannam@86 8913 class="cmtt-8">&#x00A0;</span><span
cannam@86 8914 class="cmtt-8">&#x00A0;</span><span
cannam@86 8915 class="cmtt-8">&#x00A0;</span><span
cannam@86 8916 class="cmtt-8">&#x00A0;</span><span
cannam@86 8917 class="cmtt-8">&#x00A0;</span><span
cannam@86 8918 class="cmtt-8">&#x00A0;</span><span
cannam@86 8919 class="cmtt-8">&#x00A0;</span><span
cannam@86 8920 class="cmtt-8">&#x00A0;</span><span
cannam@86 8921 class="cmtt-8">&#x00A0;14)</span><span
cannam@86 8922 class="cmtt-8">&#x00A0;truncate</span><span
cannam@86 8923 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8924 class="cmtt-8">&#x00A0;[floor]</span><span
cannam@86 8925 class="cmtt-8">&#x00A0;to</span><span
cannam@86 8926 class="cmtt-8">&#x00A0;[n]</span><span
cannam@86 8927 class="cmtt-8">&#x00A0;elements</span>
cannam@86 8928 <br class="fancyvrb" /><a
cannam@86 8929 id="x1-101196r25"></a><span
cannam@86 8930 class="cmr-6">25</span><span
cannam@86 8931 class="cmtt-8">&#x00A0;</span><span
cannam@86 8932 class="cmtt-8">&#x00A0;</span>
cannam@86 8933 <br class="fancyvrb" /><a
cannam@86 8934 id="x1-101198r26"></a><span
cannam@86 8935 class="cmr-6">26</span><span
cannam@86 8936 class="cmtt-8">&#x00A0;</span><span
cannam@86 8937 class="cmtt-8">&#x00A0;</span><span
cannam@86 8938 class="cmtt-8">&#x00A0;</span><span
cannam@86 8939 class="cmtt-8">&#x00A0;</span><span
cannam@86 8940 class="cmtt-8">&#x00A0;</span><span
cannam@86 8941 class="cmtt-8">&#x00A0;</span><span
cannam@86 8942 class="cmtt-8">&#x00A0;</span><span
cannam@86 8943 class="cmsy-8">}</span>
cannam@86 8944 <br class="fancyvrb" /><a
cannam@86 8945 id="x1-101200r27"></a><span
cannam@86 8946 class="cmr-6">27</span><span
cannam@86 8947 class="cmtt-8">&#x00A0;</span><span
cannam@86 8948 class="cmtt-8">&#x00A0;</span>
cannam@86 8949
cannam@86 8950
cannam@86 8951
cannam@86 8952 <br class="fancyvrb" /><a
cannam@86 8953 id="x1-101202r28"></a><span
cannam@86 8954 class="cmr-6">28</span><span
cannam@86 8955 class="cmtt-8">&#x00A0;</span><span
cannam@86 8956 class="cmtt-8">&#x00A0;</span><span
cannam@86 8957 class="cmtt-8">&#x00A0;15)</span><span
cannam@86 8958 class="cmtt-8">&#x00A0;for</span><span
cannam@86 8959 class="cmtt-8">&#x00A0;each</span><span
cannam@86 8960 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 8961 class="cmtt-8">&#x00A0;in</span><span
cannam@86 8962 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8963 class="cmtt-8">&#x00A0;[floor],</span><span
cannam@86 8964 class="cmtt-8">&#x00A0;perform</span><span
cannam@86 8965 class="cmtt-8">&#x00A0;a</span><span
cannam@86 8966 class="cmtt-8">&#x00A0;lookup</span><span
cannam@86 8967 class="cmtt-8">&#x00A0;substitution</span><span
cannam@86 8968 class="cmtt-8">&#x00A0;using</span>
cannam@86 8969 <br class="fancyvrb" /><a
cannam@86 8970 id="x1-101204r29"></a><span
cannam@86 8971 class="cmr-6">29</span><span
cannam@86 8972 class="cmtt-8">&#x00A0;</span><span
cannam@86 8973 class="cmtt-8">&#x00A0;</span><span
cannam@86 8974 class="cmtt-8">&#x00A0;</span><span
cannam@86 8975 class="cmtt-8">&#x00A0;</span><span
cannam@86 8976 class="cmtt-8">&#x00A0;</span><span
cannam@86 8977 class="cmtt-8">&#x00A0;</span><span
cannam@86 8978 class="cmtt-8">&#x00A0;the</span><span
cannam@86 8979 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 8980 class="cmtt-8">&#x00A0;value</span><span
cannam@86 8981 class="cmtt-8">&#x00A0;from</span><span
cannam@86 8982 class="cmtt-8">&#x00A0;[floor]</span><span
cannam@86 8983 class="cmtt-8">&#x00A0;as</span><span
cannam@86 8984 class="cmtt-8">&#x00A0;an</span><span
cannam@86 8985 class="cmtt-8">&#x00A0;offset</span><span
cannam@86 8986 class="cmtt-8">&#x00A0;into</span><span
cannam@86 8987 class="cmtt-8">&#x00A0;the</span><span
cannam@86 8988 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 8989 class="cmtt-8">&#x00A0;</span><a
cannam@86 8990 href="#x1-12500010.1"><span
cannam@86 8991 class="cmtt-8">[floor1_inverse_dB_static_table]</span></a>
cannam@86 8992 <br class="fancyvrb" /><a
cannam@86 8993 id="x1-101206r30"></a><span
cannam@86 8994 class="cmr-6">30</span><span
cannam@86 8995 class="cmtt-8">&#x00A0;</span><span
cannam@86 8996 class="cmtt-8">&#x00A0;</span>
cannam@86 8997 <br class="fancyvrb" /><a
cannam@86 8998 id="x1-101208r31"></a><span
cannam@86 8999 class="cmr-6">31</span><span
cannam@86 9000 class="cmtt-8">&#x00A0;</span><span
cannam@86 9001 class="cmtt-8">&#x00A0;</span><span
cannam@86 9002 class="cmtt-8">&#x00A0;16)</span><span
cannam@86 9003 class="cmtt-8">&#x00A0;done</span>
cannam@86 9004 <br class="fancyvrb" /><a
cannam@86 9005 id="x1-101210r32"></a><span
cannam@86 9006 class="cmr-6">32</span><span
cannam@86 9007 class="cmtt-8">&#x00A0;</span><span
cannam@86 9008 class="cmtt-8">&#x00A0;</span>
cannam@86 9009 </div>
cannam@86 9010 </dd></dl>
cannam@86 9011
cannam@86 9012
cannam@86 9013
cannam@86 9014 <h3 class="sectionHead"><span class="titlemark">8. </span> <a
cannam@86 9015 id="x1-1020008"></a>Residue setup and decode</h3>
cannam@86 9016 <!--l. 6--><p class="noindent" >
cannam@86 9017 <h4 class="subsectionHead"><span class="titlemark">8.1. </span> <a
cannam@86 9018 id="x1-1030008.1"></a>Overview</h4>
cannam@86 9019 <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
cannam@86 9020 after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
cannam@86 9021 may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
cannam@86 9022 coupling. The exact semantic content of the vector does not matter to the residue
cannam@86 9023 abstraction.
cannam@86 9024 <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
cannam@86 9025 bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
cannam@86 9026 different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
cannam@86 9027 abstraction.
cannam@86 9028 <!--l. 23--><p class="noindent" >
cannam@86 9029 <h4 class="subsectionHead"><span class="titlemark">8.2. </span> <a
cannam@86 9030 id="x1-1040008.2"></a>Residue format</h4>
cannam@86 9031 <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
cannam@86 9032 chunk, encodes the chunk classifications and finally encodes the chunks themselves
cannam@86 9033 using the the specific VQ arrangement defined for each selected classification. The
cannam@86 9034 exact interleaving and partitioning vary by residue encoding number, however the
cannam@86 9035 high-level process used to classify and encode the residue vector is the same in all three
cannam@86 9036 variants.
cannam@86 9037 <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
cannam@86 9038 the moment exactly how a partition is encoded and simply trusting that it is, is as
cannam@86 9039 follows:
cannam@86 9040 <ul class="itemize1">
cannam@86 9041 <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
cannam@86 9042 specified. If we have a vector size of <span
cannam@86 9043 class="cmti-12">n</span>, a partition size <span
cannam@86 9044 class="cmti-12">residue</span><span
cannam@86 9045 class="cmti-12">_partition</span><span
cannam@86 9046 class="cmti-12">_size</span>,
cannam@86 9047 and a total of <span
cannam@86 9048 class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded
cannam@86 9049
cannam@86 9050
cannam@86 9051
cannam@86 9052 is <span
cannam@86 9053 class="cmti-12">n</span>/<span
cannam@86 9054 class="cmti-12">residue</span><span
cannam@86 9055 class="cmti-12">_partition</span><span
cannam@86 9056 class="cmti-12">_size</span>*<span
cannam@86 9057 class="cmti-12">ch</span>. It is important to note that the integer division
cannam@86 9058 truncates. In the below example, we assume an example <span
cannam@86 9059 class="cmti-12">residue</span><span
cannam@86 9060 class="cmti-12">_partition</span><span
cannam@86 9061 class="cmti-12">_size </span>of 8.
cannam@86 9062 </li>
cannam@86 9063 <li class="itemize">Each partition in each vector has a classification number that specifies which of
cannam@86 9064 multiple configured VQ codebook setups are used to decode that partition. The
cannam@86 9065 classification numbers of each partition can be thought of as forming a vector in
cannam@86 9066 their own right, as in the illustration below. Just as the residue vectors are coded
cannam@86 9067 in grouped partitions to increase encoding efficiency, the classification vector is also
cannam@86 9068 partitioned into chunks. The integer elements of each scalar in a classification chunk
cannam@86 9069 are built into a single scalar that represents the classification numbers in that chunk.
cannam@86 9070 In the below example, the classification codeword encodes two classification numbers.
cannam@86 9071 </li>
cannam@86 9072 <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
cannam@86 9073 the residue vector, but more often efficient codebook design dictates that each vector
cannam@86 9074 is encoded as the additive sum of several passes through the residue vector using
cannam@86 9075 more than one VQ codebook. Thus, each residue value potentially accumulates values
cannam@86 9076 from multiple decode passes. The classification value associated with a partition is
cannam@86 9077 the same in each pass, thus the classification codeword is coded only in the first pass.
cannam@86 9078 </li></ul>
cannam@86 9079 <div class="center"
cannam@86 9080 >
cannam@86 9081 <!--l. 70--><p class="noindent" >
cannam@86 9082
cannam@86 9083 <!--l. 71--><p class="noindent" ><img
cannam@86 9084 src="residue-pack.png" alt="PIC"
cannam@86 9085 >
cannam@86 9086 <br /> <div class="caption"
cannam@86 9087 ><span class="id">Figure&#x00A0;11: </span><span
cannam@86 9088 class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 -->
cannam@86 9089 </div>
cannam@86 9090 <!--l. 77--><p class="noindent" >
cannam@86 9091 <h4 class="subsectionHead"><span class="titlemark">8.3. </span> <a
cannam@86 9092 id="x1-1050008.3"></a>residue 0</h4>
cannam@86 9093 <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
cannam@86 9094 partition encoding (visually treated as a black box&#8211;or cyan box or brown box&#8211;in the above
cannam@86 9095 figure).
cannam@86 9096 <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
cannam@86 9097
cannam@86 9098
cannam@86 9099
cannam@86 9100 encode a partition in a specific pass. The dimension of the codebook need not be the same in
cannam@86 9101 multiple passes, however the partition size must be an even multiple of the codebook
cannam@86 9102 dimension.
cannam@86 9103 <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
cannam@86 9104 codebook sizes of 8, 4, 2 and 1:
cannam@86 9105 <!--l. 92--><p class="noindent" >
cannam@86 9106 <div class="fancyvrb" id="fancyvrb33">
cannam@86 9107 <a
cannam@86 9108 id="x1-105002r1"></a><span
cannam@86 9109 class="cmr-6">1</span><span
cannam@86 9110 class="cmtt-8">&#x00A0;</span><span
cannam@86 9111 class="cmtt-8">&#x00A0;</span>
cannam@86 9112 <br class="fancyvrb" /><a
cannam@86 9113 id="x1-105004r2"></a><span
cannam@86 9114 class="cmr-6">2</span><span
cannam@86 9115 class="cmtt-8">&#x00A0;</span><span
cannam@86 9116 class="cmtt-8">&#x00A0;</span><span
cannam@86 9117 class="cmtt-8">&#x00A0;</span><span
cannam@86 9118 class="cmtt-8">&#x00A0;</span><span
cannam@86 9119 class="cmtt-8">&#x00A0;</span><span
cannam@86 9120 class="cmtt-8">&#x00A0;</span><span
cannam@86 9121 class="cmtt-8">&#x00A0;</span><span
cannam@86 9122 class="cmtt-8">&#x00A0;</span><span
cannam@86 9123 class="cmtt-8">&#x00A0;</span><span
cannam@86 9124 class="cmtt-8">&#x00A0;</span><span
cannam@86 9125 class="cmtt-8">&#x00A0;</span><span
cannam@86 9126 class="cmtt-8">&#x00A0;</span><span
cannam@86 9127 class="cmtt-8">&#x00A0;</span><span
cannam@86 9128 class="cmtt-8">&#x00A0;original</span><span
cannam@86 9129 class="cmtt-8">&#x00A0;residue</span><span
cannam@86 9130 class="cmtt-8">&#x00A0;vector:</span><span
cannam@86 9131 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9132 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9133 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9134 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9135 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9136 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9137 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9138 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9139 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9140 class="cmtt-8">&#x00A0;]</span>
cannam@86 9141 <br class="fancyvrb" /><a
cannam@86 9142 id="x1-105006r3"></a><span
cannam@86 9143 class="cmr-6">3</span><span
cannam@86 9144 class="cmtt-8">&#x00A0;</span><span
cannam@86 9145 class="cmtt-8">&#x00A0;</span>
cannam@86 9146 <br class="fancyvrb" /><a
cannam@86 9147 id="x1-105008r4"></a><span
cannam@86 9148 class="cmr-6">4</span><span
cannam@86 9149 class="cmtt-8">&#x00A0;</span><span
cannam@86 9150 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9151 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9152 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9153 class="cmtt-8">&#x00A0;8</span><span
cannam@86 9154 class="cmtt-8">&#x00A0;</span><span
cannam@86 9155 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9156 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9157 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9158 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9159 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9160 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9161 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9162 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9163 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9164 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9165 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9166 class="cmtt-8">&#x00A0;]</span>
cannam@86 9167 <br class="fancyvrb" /><a
cannam@86 9168 id="x1-105010r5"></a><span
cannam@86 9169 class="cmr-6">5</span><span
cannam@86 9170 class="cmtt-8">&#x00A0;</span><span
cannam@86 9171 class="cmtt-8">&#x00A0;</span>
cannam@86 9172 <br class="fancyvrb" /><a
cannam@86 9173 id="x1-105012r6"></a><span
cannam@86 9174 class="cmr-6">6</span><span
cannam@86 9175 class="cmtt-8">&#x00A0;</span><span
cannam@86 9176 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9177 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9178 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9179 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9180 class="cmtt-8">&#x00A0;</span><span
cannam@86 9181 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9182 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9183 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9184 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9185 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9186 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9187 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9188 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9189 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9190 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9191 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9192 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9193 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9194 class="cmtt-8">&#x00A0;]</span>
cannam@86 9195 <br class="fancyvrb" /><a
cannam@86 9196 id="x1-105014r7"></a><span
cannam@86 9197 class="cmr-6">7</span><span
cannam@86 9198 class="cmtt-8">&#x00A0;</span><span
cannam@86 9199 class="cmtt-8">&#x00A0;</span>
cannam@86 9200 <br class="fancyvrb" /><a
cannam@86 9201 id="x1-105016r8"></a><span
cannam@86 9202 class="cmr-6">8</span><span
cannam@86 9203 class="cmtt-8">&#x00A0;</span><span
cannam@86 9204 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9205 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9206 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9207 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9208 class="cmtt-8">&#x00A0;</span><span
cannam@86 9209 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9210 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9211 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9212 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9213 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9214 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9215 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9216 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9217 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9218 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9219 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9220 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9221 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9222 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9223 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9224 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9225 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9226 class="cmtt-8">&#x00A0;]</span>
cannam@86 9227 <br class="fancyvrb" /><a
cannam@86 9228 id="x1-105018r9"></a><span
cannam@86 9229 class="cmr-6">9</span><span
cannam@86 9230 class="cmtt-8">&#x00A0;</span><span
cannam@86 9231 class="cmtt-8">&#x00A0;</span>
cannam@86 9232 <br class="fancyvrb" /><a
cannam@86 9233 id="x1-105020r10"></a><span
cannam@86 9234 class="cmr-6">10</span><span
cannam@86 9235 class="cmtt-8">&#x00A0;</span><span
cannam@86 9236 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9237 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9238 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9239 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9240 class="cmtt-8">&#x00A0;</span><span
cannam@86 9241 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9242 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9243 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9244 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9245 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9246 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9247 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9248 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9249 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9250 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9251 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9252 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9253 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9254 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9255 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9256 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9257 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9258 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9259 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9260 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9261 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9262 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9263 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9264 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9265 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9266 class="cmtt-8">&#x00A0;]</span>
cannam@86 9267 <br class="fancyvrb" /><a
cannam@86 9268 id="x1-105022r11"></a><span
cannam@86 9269 class="cmr-6">11</span><span
cannam@86 9270 class="cmtt-8">&#x00A0;</span><span
cannam@86 9271 class="cmtt-8">&#x00A0;</span>
cannam@86 9272 </div>
cannam@86 9273 <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
cannam@86 9274 restricted to a power of two.
cannam@86 9275 <!--l. 111--><p class="noindent" >
cannam@86 9276 <h4 class="subsectionHead"><span class="titlemark">8.4. </span> <a
cannam@86 9277 id="x1-1060008.4"></a>residue 1</h4>
cannam@86 9278 <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
cannam@86 9279 with residue 0, however, partition length must be an integer multiple of the codebook dimension,
cannam@86 9280 although dimension may vary from pass to pass.
cannam@86 9281 <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
cannam@86 9282 codebook sizes of 8, 4, 2 and 1:
cannam@86 9283 <!--l. 121--><p class="noindent" >
cannam@86 9284 <div class="fancyvrb" id="fancyvrb34">
cannam@86 9285 <a
cannam@86 9286 id="x1-106002r1"></a><span
cannam@86 9287 class="cmr-6">1</span><span
cannam@86 9288 class="cmtt-8">&#x00A0;</span><span
cannam@86 9289 class="cmtt-8">&#x00A0;</span>
cannam@86 9290 <br class="fancyvrb" /><a
cannam@86 9291 id="x1-106004r2"></a><span
cannam@86 9292 class="cmr-6">2</span><span
cannam@86 9293 class="cmtt-8">&#x00A0;</span><span
cannam@86 9294 class="cmtt-8">&#x00A0;</span><span
cannam@86 9295 class="cmtt-8">&#x00A0;</span><span
cannam@86 9296 class="cmtt-8">&#x00A0;</span><span
cannam@86 9297 class="cmtt-8">&#x00A0;</span><span
cannam@86 9298 class="cmtt-8">&#x00A0;</span><span
cannam@86 9299 class="cmtt-8">&#x00A0;</span><span
cannam@86 9300 class="cmtt-8">&#x00A0;</span><span
cannam@86 9301 class="cmtt-8">&#x00A0;</span><span
cannam@86 9302 class="cmtt-8">&#x00A0;</span><span
cannam@86 9303 class="cmtt-8">&#x00A0;</span><span
cannam@86 9304 class="cmtt-8">&#x00A0;</span><span
cannam@86 9305 class="cmtt-8">&#x00A0;</span><span
cannam@86 9306 class="cmtt-8">&#x00A0;original</span><span
cannam@86 9307 class="cmtt-8">&#x00A0;residue</span><span
cannam@86 9308 class="cmtt-8">&#x00A0;vector:</span><span
cannam@86 9309 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9310 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9311 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9312 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9313 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9314 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9315 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9316 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9317 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9318 class="cmtt-8">&#x00A0;]</span>
cannam@86 9319 <br class="fancyvrb" /><a
cannam@86 9320 id="x1-106006r3"></a><span
cannam@86 9321 class="cmr-6">3</span><span
cannam@86 9322 class="cmtt-8">&#x00A0;</span><span
cannam@86 9323 class="cmtt-8">&#x00A0;</span>
cannam@86 9324 <br class="fancyvrb" /><a
cannam@86 9325 id="x1-106008r4"></a><span
cannam@86 9326 class="cmr-6">4</span><span
cannam@86 9327 class="cmtt-8">&#x00A0;</span><span
cannam@86 9328 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9329 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9330 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9331 class="cmtt-8">&#x00A0;8</span><span
cannam@86 9332 class="cmtt-8">&#x00A0;</span><span
cannam@86 9333 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9334 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9335 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9336 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9337 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9338 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9339 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9340 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9341 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9342 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9343 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9344 class="cmtt-8">&#x00A0;]</span>
cannam@86 9345 <br class="fancyvrb" /><a
cannam@86 9346 id="x1-106010r5"></a><span
cannam@86 9347 class="cmr-6">5</span><span
cannam@86 9348 class="cmtt-8">&#x00A0;</span><span
cannam@86 9349 class="cmtt-8">&#x00A0;</span>
cannam@86 9350 <br class="fancyvrb" /><a
cannam@86 9351 id="x1-106012r6"></a><span
cannam@86 9352 class="cmr-6">6</span><span
cannam@86 9353 class="cmtt-8">&#x00A0;</span><span
cannam@86 9354 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9355 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9356 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9357 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9358 class="cmtt-8">&#x00A0;</span><span
cannam@86 9359 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9360 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9361 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9362 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9363 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9364 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9365 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9366 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9367 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9368 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9369 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9370 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9371 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9372 class="cmtt-8">&#x00A0;]</span>
cannam@86 9373 <br class="fancyvrb" /><a
cannam@86 9374 id="x1-106014r7"></a><span
cannam@86 9375 class="cmr-6">7</span><span
cannam@86 9376 class="cmtt-8">&#x00A0;</span><span
cannam@86 9377 class="cmtt-8">&#x00A0;</span>
cannam@86 9378 <br class="fancyvrb" /><a
cannam@86 9379 id="x1-106016r8"></a><span
cannam@86 9380 class="cmr-6">8</span><span
cannam@86 9381 class="cmtt-8">&#x00A0;</span><span
cannam@86 9382 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9383 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9384 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9385 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9386 class="cmtt-8">&#x00A0;</span><span
cannam@86 9387 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9388 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9389 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9390 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9391 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9392 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9393 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9394 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9395 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9396 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9397 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9398 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9399 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9400 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9401 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9402 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9403 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9404 class="cmtt-8">&#x00A0;]</span>
cannam@86 9405 <br class="fancyvrb" /><a
cannam@86 9406 id="x1-106018r9"></a><span
cannam@86 9407 class="cmr-6">9</span><span
cannam@86 9408 class="cmtt-8">&#x00A0;</span><span
cannam@86 9409 class="cmtt-8">&#x00A0;</span>
cannam@86 9410 <br class="fancyvrb" /><a
cannam@86 9411 id="x1-106020r10"></a><span
cannam@86 9412 class="cmr-6">10</span><span
cannam@86 9413 class="cmtt-8">&#x00A0;</span><span
cannam@86 9414 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 9415 class="cmtt-8">&#x00A0;dimensions</span><span
cannam@86 9416 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9417 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9418 class="cmtt-8">&#x00A0;</span><span
cannam@86 9419 class="cmtt-8">&#x00A0;encoded</span><span
cannam@86 9420 class="cmtt-8">&#x00A0;as:</span><span
cannam@86 9421 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9422 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9423 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9424 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9425 class="cmtt-8">&#x00A0;1</span><span
cannam@86 9426 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9427 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9428 class="cmtt-8">&#x00A0;2</span><span
cannam@86 9429 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9430 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9431 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9432 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9433 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9434 class="cmtt-8">&#x00A0;4</span><span
cannam@86 9435 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9436 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9437 class="cmtt-8">&#x00A0;5</span><span
cannam@86 9438 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9439 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9440 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9441 class="cmtt-8">&#x00A0;],</span><span
cannam@86 9442 class="cmtt-8">&#x00A0;[</span><span
cannam@86 9443 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9444 class="cmtt-8">&#x00A0;]</span>
cannam@86 9445 <br class="fancyvrb" /><a
cannam@86 9446 id="x1-106022r11"></a><span
cannam@86 9447 class="cmr-6">11</span><span
cannam@86 9448 class="cmtt-8">&#x00A0;</span><span
cannam@86 9449 class="cmtt-8">&#x00A0;</span>
cannam@86 9450
cannam@86 9451
cannam@86 9452
cannam@86 9453 </div>
cannam@86 9454 <!--l. 137--><p class="noindent" >
cannam@86 9455 <h4 class="subsectionHead"><span class="titlemark">8.5. </span> <a
cannam@86 9456 id="x1-1070008.5"></a>residue 2</h4>
cannam@86 9457 <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
cannam@86 9458 passed-in vectors as in residue type 1, the <span
cannam@86 9459 class="cmti-12">ch </span>passed in vectors of length <span
cannam@86 9460 class="cmti-12">n </span>are first interleaved
cannam@86 9461 and flattened into a single vector of length <span
cannam@86 9462 class="cmti-12">ch</span>*<span
cannam@86 9463 class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
cannam@86 9464 is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
cannam@86 9465 residue type 1 and type 2 are equivalent.
cannam@86 9466 <div class="center"
cannam@86 9467 >
cannam@86 9468 <!--l. 147--><p class="noindent" >
cannam@86 9469
cannam@86 9470 <!--l. 148--><p class="noindent" ><img
cannam@86 9471 src="residue2.png" alt="PIC"
cannam@86 9472 >
cannam@86 9473 <br /> <div class="caption"
cannam@86 9474 ><span class="id">Figure&#x00A0;12: </span><span
cannam@86 9475 class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 -->
cannam@86 9476 </div>
cannam@86 9477 <!--l. 153--><p class="noindent" >
cannam@86 9478 <h4 class="subsectionHead"><span class="titlemark">8.6. </span> <a
cannam@86 9479 id="x1-1080008.6"></a>Residue decode</h4>
cannam@86 9480 <!--l. 155--><p class="noindent" >
cannam@86 9481 <h5 class="subsubsectionHead"><span class="titlemark">8.6.1. </span> <a
cannam@86 9482 id="x1-1090008.6.1"></a>header decode</h5>
cannam@86 9483 <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
cannam@86 9484 <div class="fancyvrb" id="fancyvrb35">
cannam@86 9485 <a
cannam@86 9486 id="x1-109002r1"></a><span
cannam@86 9487 class="cmr-6">1</span><span
cannam@86 9488 class="cmtt-8">&#x00A0;</span><span
cannam@86 9489 class="cmtt-8">&#x00A0;</span><span
cannam@86 9490 class="cmtt-8">&#x00A0;</span><span
cannam@86 9491 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 9492 class="cmtt-8">&#x00A0;[residue\_begin]</span><span
cannam@86 9493 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9494 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9495 class="cmtt-8">&#x00A0;24</span><span
cannam@86 9496 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9497 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9498 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9499 class="cmtt-8">&#x00A0;integer</span>
cannam@86 9500 <br class="fancyvrb" /><a
cannam@86 9501 id="x1-109004r2"></a><span
cannam@86 9502 class="cmr-6">2</span><span
cannam@86 9503 class="cmtt-8">&#x00A0;</span><span
cannam@86 9504 class="cmtt-8">&#x00A0;</span><span
cannam@86 9505 class="cmtt-8">&#x00A0;</span><span
cannam@86 9506 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 9507 class="cmtt-8">&#x00A0;[residue\_end]</span><span
cannam@86 9508 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9509 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9510 class="cmtt-8">&#x00A0;24</span><span
cannam@86 9511 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9512 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9513 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9514 class="cmtt-8">&#x00A0;integer</span>
cannam@86 9515 <br class="fancyvrb" /><a
cannam@86 9516 id="x1-109006r3"></a><span
cannam@86 9517 class="cmr-6">3</span><span
cannam@86 9518 class="cmtt-8">&#x00A0;</span><span
cannam@86 9519 class="cmtt-8">&#x00A0;</span><span
cannam@86 9520 class="cmtt-8">&#x00A0;</span><span
cannam@86 9521 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 9522 class="cmtt-8">&#x00A0;[residue\_partition\_size]</span><span
cannam@86 9523 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9524 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9525 class="cmtt-8">&#x00A0;24</span><span
cannam@86 9526 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9527 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9528 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9529 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 9530 class="cmtt-8">&#x00A0;and</span><span
cannam@86 9531 class="cmtt-8">&#x00A0;add</span><span
cannam@86 9532 class="cmtt-8">&#x00A0;one</span>
cannam@86 9533 <br class="fancyvrb" /><a
cannam@86 9534 id="x1-109008r4"></a><span
cannam@86 9535 class="cmr-6">4</span><span
cannam@86 9536 class="cmtt-8">&#x00A0;</span><span
cannam@86 9537 class="cmtt-8">&#x00A0;</span><span
cannam@86 9538 class="cmtt-8">&#x00A0;</span><span
cannam@86 9539 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 9540 class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
cannam@86 9541 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9542 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9543 class="cmtt-8">&#x00A0;6</span><span
cannam@86 9544 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9545 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9546 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9547 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 9548 class="cmtt-8">&#x00A0;and</span><span
cannam@86 9549 class="cmtt-8">&#x00A0;add</span><span
cannam@86 9550 class="cmtt-8">&#x00A0;one</span>
cannam@86 9551
cannam@86 9552
cannam@86 9553
cannam@86 9554 <br class="fancyvrb" /><a
cannam@86 9555 id="x1-109010r5"></a><span
cannam@86 9556 class="cmr-6">5</span><span
cannam@86 9557 class="cmtt-8">&#x00A0;</span><span
cannam@86 9558 class="cmtt-8">&#x00A0;</span><span
cannam@86 9559 class="cmtt-8">&#x00A0;</span><span
cannam@86 9560 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 9561 class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
cannam@86 9562 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9563 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9564 class="cmtt-8">&#x00A0;8</span><span
cannam@86 9565 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9566 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9567 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9568 class="cmtt-8">&#x00A0;integer</span>
cannam@86 9569 </div>
cannam@86 9570 <!--l. 166--><p class="noindent" ><span
cannam@86 9571 class="cmtt-12">[residue_begin] </span>and <span
cannam@86 9572 class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
cannam@86 9573 actually coded; it implements akin to a bandpass where, for coding purposes, the vector
cannam@86 9574 effectively begins at element <span
cannam@86 9575 class="cmtt-12">[residue_begin] </span>and ends at <span
cannam@86 9576 class="cmtt-12">[residue_end]</span>. Preceding and
cannam@86 9577 following values in the unpacked vectors are zeroed. Note that for residue type 2, these
cannam@86 9578 values as well as <span
cannam@86 9579 class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
cannam@86 9580 individual vectors before interleave. <span
cannam@86 9581 class="cmtt-12">[residue_partition_size] </span>is as explained above,
cannam@86 9582 <span
cannam@86 9583 class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
cannam@86 9584 belong and <span
cannam@86 9585 class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
cannam@86 9586 codewords. The number of dimensions in book <span
cannam@86 9587 class="cmtt-12">[residue_classbook] </span>determines how
cannam@86 9588 many classification values are grouped into a single classification codeword. Note that
cannam@86 9589 the number of entries and dimensions in book <span
cannam@86 9590 class="cmtt-12">[residue_classbook]</span>, along with
cannam@86 9591 <span
cannam@86 9592 class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
cannam@86 9593 codewords. If <span
cannam@86 9594 class="cmtt-12">[residue_classifications]</span>&#x02C6;<span
cannam@86 9595 class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
cannam@86 9596 <span
cannam@86 9597 class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
cannam@86 9598 <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
cannam@86 9599 passes.
cannam@86 9600 <!--l. 193--><p class="noindent" >
cannam@86 9601 <div class="fancyvrb" id="fancyvrb36">
cannam@86 9602 <a
cannam@86 9603 id="x1-109012r1"></a><span
cannam@86 9604 class="cmr-6">1</span><span
cannam@86 9605 class="cmtt-8">&#x00A0;</span><span
cannam@86 9606 class="cmtt-8">&#x00A0;</span><span
cannam@86 9607 class="cmtt-8">&#x00A0;</span><span
cannam@86 9608 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 9609 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 9610 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 9611 class="cmtt-8">&#x00A0;over</span><span
cannam@86 9612 class="cmtt-8">&#x00A0;the</span><span
cannam@86 9613 class="cmtt-8">&#x00A0;range</span><span
cannam@86 9614 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9615 class="cmtt-8">&#x00A0;...</span><span
cannam@86 9616 class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
cannam@86 9617 class="cmtt-8">&#x00A0;{</span>
cannam@86 9618 <br class="fancyvrb" /><a
cannam@86 9619 id="x1-109014r2"></a><span
cannam@86 9620 class="cmr-6">2</span><span
cannam@86 9621 class="cmtt-8">&#x00A0;</span><span
cannam@86 9622 class="cmtt-8">&#x00A0;</span>
cannam@86 9623 <br class="fancyvrb" /><a
cannam@86 9624 id="x1-109016r3"></a><span
cannam@86 9625 class="cmr-6">3</span><span
cannam@86 9626 class="cmtt-8">&#x00A0;</span><span
cannam@86 9627 class="cmtt-8">&#x00A0;</span><span
cannam@86 9628 class="cmtt-8">&#x00A0;</span><span
cannam@86 9629 class="cmtt-8">&#x00A0;</span><span
cannam@86 9630 class="cmtt-8">&#x00A0;</span><span
cannam@86 9631 class="cmtt-8">&#x00A0;</span><span
cannam@86 9632 class="cmtt-8">&#x00A0;</span><span
cannam@86 9633 class="cmtt-8">&#x00A0;</span><span
cannam@86 9634 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 9635 class="cmtt-8">&#x00A0;[high\_bits]</span><span
cannam@86 9636 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9637 class="cmtt-8">&#x00A0;0</span>
cannam@86 9638 <br class="fancyvrb" /><a
cannam@86 9639 id="x1-109018r4"></a><span
cannam@86 9640 class="cmr-6">4</span><span
cannam@86 9641 class="cmtt-8">&#x00A0;</span><span
cannam@86 9642 class="cmtt-8">&#x00A0;</span><span
cannam@86 9643 class="cmtt-8">&#x00A0;</span><span
cannam@86 9644 class="cmtt-8">&#x00A0;</span><span
cannam@86 9645 class="cmtt-8">&#x00A0;</span><span
cannam@86 9646 class="cmtt-8">&#x00A0;</span><span
cannam@86 9647 class="cmtt-8">&#x00A0;</span><span
cannam@86 9648 class="cmtt-8">&#x00A0;</span><span
cannam@86 9649 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 9650 class="cmtt-8">&#x00A0;[low\_bits]</span><span
cannam@86 9651 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9652 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9653 class="cmtt-8">&#x00A0;3</span><span
cannam@86 9654 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9655 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9656 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9657 class="cmtt-8">&#x00A0;integer</span>
cannam@86 9658 <br class="fancyvrb" /><a
cannam@86 9659 id="x1-109020r5"></a><span
cannam@86 9660 class="cmr-6">5</span><span
cannam@86 9661 class="cmtt-8">&#x00A0;</span><span
cannam@86 9662 class="cmtt-8">&#x00A0;</span><span
cannam@86 9663 class="cmtt-8">&#x00A0;</span><span
cannam@86 9664 class="cmtt-8">&#x00A0;</span><span
cannam@86 9665 class="cmtt-8">&#x00A0;</span><span
cannam@86 9666 class="cmtt-8">&#x00A0;</span><span
cannam@86 9667 class="cmtt-8">&#x00A0;</span><span
cannam@86 9668 class="cmtt-8">&#x00A0;</span><span
cannam@86 9669 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 9670 class="cmtt-8">&#x00A0;[bitflag]</span><span
cannam@86 9671 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9672 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9673 class="cmtt-8">&#x00A0;one</span><span
cannam@86 9674 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 9675 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9676 class="cmtt-8">&#x00A0;boolean</span>
cannam@86 9677 <br class="fancyvrb" /><a
cannam@86 9678 id="x1-109022r6"></a><span
cannam@86 9679 class="cmr-6">6</span><span
cannam@86 9680 class="cmtt-8">&#x00A0;</span><span
cannam@86 9681 class="cmtt-8">&#x00A0;</span><span
cannam@86 9682 class="cmtt-8">&#x00A0;</span><span
cannam@86 9683 class="cmtt-8">&#x00A0;</span><span
cannam@86 9684 class="cmtt-8">&#x00A0;</span><span
cannam@86 9685 class="cmtt-8">&#x00A0;</span><span
cannam@86 9686 class="cmtt-8">&#x00A0;</span><span
cannam@86 9687 class="cmtt-8">&#x00A0;</span><span
cannam@86 9688 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 9689 class="cmtt-8">&#x00A0;if</span><span
cannam@86 9690 class="cmtt-8">&#x00A0;(</span><span
cannam@86 9691 class="cmtt-8">&#x00A0;[bitflag]</span><span
cannam@86 9692 class="cmtt-8">&#x00A0;is</span><span
cannam@86 9693 class="cmtt-8">&#x00A0;set</span><span
cannam@86 9694 class="cmtt-8">&#x00A0;)</span><span
cannam@86 9695 class="cmtt-8">&#x00A0;then</span><span
cannam@86 9696 class="cmtt-8">&#x00A0;[high\_bits]</span><span
cannam@86 9697 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9698 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9699 class="cmtt-8">&#x00A0;five</span><span
cannam@86 9700 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9701 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9702 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9703 class="cmtt-8">&#x00A0;integer</span>
cannam@86 9704 <br class="fancyvrb" /><a
cannam@86 9705 id="x1-109024r7"></a><span
cannam@86 9706 class="cmr-6">7</span><span
cannam@86 9707 class="cmtt-8">&#x00A0;</span><span
cannam@86 9708 class="cmtt-8">&#x00A0;</span><span
cannam@86 9709 class="cmtt-8">&#x00A0;</span><span
cannam@86 9710 class="cmtt-8">&#x00A0;</span><span
cannam@86 9711 class="cmtt-8">&#x00A0;</span><span
cannam@86 9712 class="cmtt-8">&#x00A0;</span><span
cannam@86 9713 class="cmtt-8">&#x00A0;</span><span
cannam@86 9714 class="cmtt-8">&#x00A0;</span><span
cannam@86 9715 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 9716 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 9717 class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
cannam@86 9718 class="cmtt-8">&#x00A0;element</span><span
cannam@86 9719 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 9720 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9721 class="cmtt-8">&#x00A0;[high\_bits]</span><span
cannam@86 9722 class="cmtt-8">&#x00A0;*</span><span
cannam@86 9723 class="cmtt-8">&#x00A0;8</span><span
cannam@86 9724 class="cmtt-8">&#x00A0;+</span><span
cannam@86 9725 class="cmtt-8">&#x00A0;[low\_bits]</span>
cannam@86 9726 <br class="fancyvrb" /><a
cannam@86 9727 id="x1-109026r8"></a><span
cannam@86 9728 class="cmr-6">8</span><span
cannam@86 9729 class="cmtt-8">&#x00A0;</span><span
cannam@86 9730 class="cmtt-8">&#x00A0;</span><span
cannam@86 9731 class="cmtt-8">&#x00A0;</span><span
cannam@86 9732 class="cmtt-8">&#x00A0;</span><span
cannam@86 9733 class="cmtt-8">&#x00A0;</span><span
cannam@86 9734 class="cmtt-8">&#x00A0;</span><span
cannam@86 9735 class="cmtt-8">&#x00A0;}</span>
cannam@86 9736 <br class="fancyvrb" /><a
cannam@86 9737 id="x1-109028r9"></a><span
cannam@86 9738 class="cmr-6">9</span><span
cannam@86 9739 class="cmtt-8">&#x00A0;</span><span
cannam@86 9740 class="cmtt-8">&#x00A0;</span><span
cannam@86 9741 class="cmtt-8">&#x00A0;</span><span
cannam@86 9742 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 9743 class="cmtt-8">&#x00A0;done</span>
cannam@86 9744 </div>
cannam@86 9745 <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
cannam@86 9746 bitmap. We loop over the possible codebook classifications and the maximum possible number of
cannam@86 9747 encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
cannam@86 9748 bits):
cannam@86 9749 <!--l. 211--><p class="noindent" >
cannam@86 9750 <div class="fancyvrb" id="fancyvrb37">
cannam@86 9751 <a
cannam@86 9752 id="x1-109030r1"></a><span
cannam@86 9753 class="cmr-6">1</span><span
cannam@86 9754 class="cmtt-8">&#x00A0;</span><span
cannam@86 9755 class="cmtt-8">&#x00A0;</span><span
cannam@86 9756 class="cmtt-8">&#x00A0;</span><span
cannam@86 9757 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 9758 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 9759 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 9760 class="cmtt-8">&#x00A0;over</span><span
cannam@86 9761 class="cmtt-8">&#x00A0;the</span><span
cannam@86 9762 class="cmtt-8">&#x00A0;range</span><span
cannam@86 9763 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9764 class="cmtt-8">&#x00A0;...</span><span
cannam@86 9765 class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
cannam@86 9766 class="cmtt-8">&#x00A0;{</span>
cannam@86 9767 <br class="fancyvrb" /><a
cannam@86 9768 id="x1-109032r2"></a><span
cannam@86 9769 class="cmr-6">2</span><span
cannam@86 9770 class="cmtt-8">&#x00A0;</span><span
cannam@86 9771 class="cmtt-8">&#x00A0;</span>
cannam@86 9772 <br class="fancyvrb" /><a
cannam@86 9773 id="x1-109034r3"></a><span
cannam@86 9774 class="cmr-6">3</span><span
cannam@86 9775 class="cmtt-8">&#x00A0;</span><span
cannam@86 9776 class="cmtt-8">&#x00A0;</span><span
cannam@86 9777 class="cmtt-8">&#x00A0;</span><span
cannam@86 9778 class="cmtt-8">&#x00A0;</span><span
cannam@86 9779 class="cmtt-8">&#x00A0;</span><span
cannam@86 9780 class="cmtt-8">&#x00A0;</span><span
cannam@86 9781 class="cmtt-8">&#x00A0;</span><span
cannam@86 9782 class="cmtt-8">&#x00A0;</span><span
cannam@86 9783 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 9784 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 9785 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 9786 class="cmtt-8">&#x00A0;over</span><span
cannam@86 9787 class="cmtt-8">&#x00A0;the</span><span
cannam@86 9788 class="cmtt-8">&#x00A0;range</span><span
cannam@86 9789 class="cmtt-8">&#x00A0;0</span><span
cannam@86 9790 class="cmtt-8">&#x00A0;...</span><span
cannam@86 9791 class="cmtt-8">&#x00A0;7</span><span
cannam@86 9792 class="cmtt-8">&#x00A0;{</span>
cannam@86 9793 <br class="fancyvrb" /><a
cannam@86 9794 id="x1-109036r4"></a><span
cannam@86 9795 class="cmr-6">4</span><span
cannam@86 9796 class="cmtt-8">&#x00A0;</span><span
cannam@86 9797 class="cmtt-8">&#x00A0;</span>
cannam@86 9798 <br class="fancyvrb" /><a
cannam@86 9799 id="x1-109038r5"></a><span
cannam@86 9800 class="cmr-6">5</span><span
cannam@86 9801 class="cmtt-8">&#x00A0;</span><span
cannam@86 9802 class="cmtt-8">&#x00A0;</span><span
cannam@86 9803 class="cmtt-8">&#x00A0;</span><span
cannam@86 9804 class="cmtt-8">&#x00A0;</span><span
cannam@86 9805 class="cmtt-8">&#x00A0;</span><span
cannam@86 9806 class="cmtt-8">&#x00A0;</span><span
cannam@86 9807 class="cmtt-8">&#x00A0;</span><span
cannam@86 9808 class="cmtt-8">&#x00A0;</span><span
cannam@86 9809 class="cmtt-8">&#x00A0;</span><span
cannam@86 9810 class="cmtt-8">&#x00A0;</span><span
cannam@86 9811 class="cmtt-8">&#x00A0;</span><span
cannam@86 9812 class="cmtt-8">&#x00A0;</span><span
cannam@86 9813 class="cmtt-8">&#x00A0;</span><span
cannam@86 9814 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 9815 class="cmtt-8">&#x00A0;if</span><span
cannam@86 9816 class="cmtt-8">&#x00A0;(</span><span
cannam@86 9817 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 9818 class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
cannam@86 9819 class="cmtt-8">&#x00A0;element</span><span
cannam@86 9820 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 9821 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 9822 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 9823 class="cmtt-8">&#x00A0;is</span><span
cannam@86 9824 class="cmtt-8">&#x00A0;set</span><span
cannam@86 9825 class="cmtt-8">&#x00A0;)</span><span
cannam@86 9826 class="cmtt-8">&#x00A0;{</span>
cannam@86 9827 <br class="fancyvrb" /><a
cannam@86 9828 id="x1-109040r6"></a><span
cannam@86 9829 class="cmr-6">6</span><span
cannam@86 9830 class="cmtt-8">&#x00A0;</span><span
cannam@86 9831 class="cmtt-8">&#x00A0;</span>
cannam@86 9832 <br class="fancyvrb" /><a
cannam@86 9833 id="x1-109042r7"></a><span
cannam@86 9834 class="cmr-6">7</span><span
cannam@86 9835 class="cmtt-8">&#x00A0;</span><span
cannam@86 9836 class="cmtt-8">&#x00A0;</span><span
cannam@86 9837 class="cmtt-8">&#x00A0;</span><span
cannam@86 9838 class="cmtt-8">&#x00A0;</span><span
cannam@86 9839 class="cmtt-8">&#x00A0;</span><span
cannam@86 9840 class="cmtt-8">&#x00A0;</span><span
cannam@86 9841 class="cmtt-8">&#x00A0;</span><span
cannam@86 9842 class="cmtt-8">&#x00A0;</span><span
cannam@86 9843 class="cmtt-8">&#x00A0;</span><span
cannam@86 9844 class="cmtt-8">&#x00A0;</span><span
cannam@86 9845 class="cmtt-8">&#x00A0;</span><span
cannam@86 9846 class="cmtt-8">&#x00A0;</span><span
cannam@86 9847 class="cmtt-8">&#x00A0;</span><span
cannam@86 9848 class="cmtt-8">&#x00A0;</span><span
cannam@86 9849 class="cmtt-8">&#x00A0;</span><span
cannam@86 9850 class="cmtt-8">&#x00A0;</span><span
cannam@86 9851 class="cmtt-8">&#x00A0;</span><span
cannam@86 9852 class="cmtt-8">&#x00A0;</span><span
cannam@86 9853 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 9854 class="cmtt-8">&#x00A0;array</span><span
cannam@86 9855 class="cmtt-8">&#x00A0;[residue\_books]</span><span
cannam@86 9856 class="cmtt-8">&#x00A0;element</span><span
cannam@86 9857 class="cmtt-8">&#x00A0;[i][j]</span><span
cannam@86 9858 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9859 class="cmtt-8">&#x00A0;read</span><span
cannam@86 9860 class="cmtt-8">&#x00A0;8</span><span
cannam@86 9861 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 9862 class="cmtt-8">&#x00A0;as</span><span
cannam@86 9863 class="cmtt-8">&#x00A0;unsigned</span><span
cannam@86 9864 class="cmtt-8">&#x00A0;integer</span>
cannam@86 9865 <br class="fancyvrb" /><a
cannam@86 9866 id="x1-109044r8"></a><span
cannam@86 9867 class="cmr-6">8</span><span
cannam@86 9868 class="cmtt-8">&#x00A0;</span><span
cannam@86 9869 class="cmtt-8">&#x00A0;</span>
cannam@86 9870 <br class="fancyvrb" /><a
cannam@86 9871 id="x1-109046r9"></a><span
cannam@86 9872 class="cmr-6">9</span><span
cannam@86 9873 class="cmtt-8">&#x00A0;</span><span
cannam@86 9874 class="cmtt-8">&#x00A0;</span><span
cannam@86 9875 class="cmtt-8">&#x00A0;</span><span
cannam@86 9876 class="cmtt-8">&#x00A0;</span><span
cannam@86 9877 class="cmtt-8">&#x00A0;</span><span
cannam@86 9878 class="cmtt-8">&#x00A0;</span><span
cannam@86 9879 class="cmtt-8">&#x00A0;</span><span
cannam@86 9880 class="cmtt-8">&#x00A0;</span><span
cannam@86 9881 class="cmtt-8">&#x00A0;</span><span
cannam@86 9882 class="cmtt-8">&#x00A0;</span><span
cannam@86 9883 class="cmtt-8">&#x00A0;</span><span
cannam@86 9884 class="cmtt-8">&#x00A0;</span><span
cannam@86 9885 class="cmtt-8">&#x00A0;</span><span
cannam@86 9886 class="cmtt-8">&#x00A0;</span><span
cannam@86 9887 class="cmtt-8">&#x00A0;</span><span
cannam@86 9888 class="cmtt-8">&#x00A0;</span><span
cannam@86 9889 class="cmtt-8">&#x00A0;}</span><span
cannam@86 9890 class="cmtt-8">&#x00A0;else</span><span
cannam@86 9891 class="cmtt-8">&#x00A0;{</span>
cannam@86 9892
cannam@86 9893
cannam@86 9894
cannam@86 9895 <br class="fancyvrb" /><a
cannam@86 9896 id="x1-109048r10"></a><span
cannam@86 9897 class="cmr-6">10</span><span
cannam@86 9898 class="cmtt-8">&#x00A0;</span><span
cannam@86 9899 class="cmtt-8">&#x00A0;</span>
cannam@86 9900 <br class="fancyvrb" /><a
cannam@86 9901 id="x1-109050r11"></a><span
cannam@86 9902 class="cmr-6">11</span><span
cannam@86 9903 class="cmtt-8">&#x00A0;</span><span
cannam@86 9904 class="cmtt-8">&#x00A0;</span><span
cannam@86 9905 class="cmtt-8">&#x00A0;</span><span
cannam@86 9906 class="cmtt-8">&#x00A0;</span><span
cannam@86 9907 class="cmtt-8">&#x00A0;</span><span
cannam@86 9908 class="cmtt-8">&#x00A0;</span><span
cannam@86 9909 class="cmtt-8">&#x00A0;</span><span
cannam@86 9910 class="cmtt-8">&#x00A0;</span><span
cannam@86 9911 class="cmtt-8">&#x00A0;</span><span
cannam@86 9912 class="cmtt-8">&#x00A0;</span><span
cannam@86 9913 class="cmtt-8">&#x00A0;</span><span
cannam@86 9914 class="cmtt-8">&#x00A0;</span><span
cannam@86 9915 class="cmtt-8">&#x00A0;</span><span
cannam@86 9916 class="cmtt-8">&#x00A0;</span><span
cannam@86 9917 class="cmtt-8">&#x00A0;</span><span
cannam@86 9918 class="cmtt-8">&#x00A0;</span><span
cannam@86 9919 class="cmtt-8">&#x00A0;</span><span
cannam@86 9920 class="cmtt-8">&#x00A0;</span><span
cannam@86 9921 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 9922 class="cmtt-8">&#x00A0;array</span><span
cannam@86 9923 class="cmtt-8">&#x00A0;[residue\_books]</span><span
cannam@86 9924 class="cmtt-8">&#x00A0;element</span><span
cannam@86 9925 class="cmtt-8">&#x00A0;[i][j]</span><span
cannam@86 9926 class="cmtt-8">&#x00A0;=</span><span
cannam@86 9927 class="cmtt-8">&#x00A0;unused</span>
cannam@86 9928 <br class="fancyvrb" /><a
cannam@86 9929 id="x1-109052r12"></a><span
cannam@86 9930 class="cmr-6">12</span><span
cannam@86 9931 class="cmtt-8">&#x00A0;</span><span
cannam@86 9932 class="cmtt-8">&#x00A0;</span>
cannam@86 9933 <br class="fancyvrb" /><a
cannam@86 9934 id="x1-109054r13"></a><span
cannam@86 9935 class="cmr-6">13</span><span
cannam@86 9936 class="cmtt-8">&#x00A0;</span><span
cannam@86 9937 class="cmtt-8">&#x00A0;</span><span
cannam@86 9938 class="cmtt-8">&#x00A0;</span><span
cannam@86 9939 class="cmtt-8">&#x00A0;</span><span
cannam@86 9940 class="cmtt-8">&#x00A0;</span><span
cannam@86 9941 class="cmtt-8">&#x00A0;</span><span
cannam@86 9942 class="cmtt-8">&#x00A0;</span><span
cannam@86 9943 class="cmtt-8">&#x00A0;</span><span
cannam@86 9944 class="cmtt-8">&#x00A0;</span><span
cannam@86 9945 class="cmtt-8">&#x00A0;</span><span
cannam@86 9946 class="cmtt-8">&#x00A0;</span><span
cannam@86 9947 class="cmtt-8">&#x00A0;</span><span
cannam@86 9948 class="cmtt-8">&#x00A0;</span><span
cannam@86 9949 class="cmtt-8">&#x00A0;</span><span
cannam@86 9950 class="cmtt-8">&#x00A0;</span><span
cannam@86 9951 class="cmtt-8">&#x00A0;</span><span
cannam@86 9952 class="cmtt-8">&#x00A0;}</span>
cannam@86 9953 <br class="fancyvrb" /><a
cannam@86 9954 id="x1-109056r14"></a><span
cannam@86 9955 class="cmr-6">14</span><span
cannam@86 9956 class="cmtt-8">&#x00A0;</span><span
cannam@86 9957 class="cmtt-8">&#x00A0;</span><span
cannam@86 9958 class="cmtt-8">&#x00A0;</span><span
cannam@86 9959 class="cmtt-8">&#x00A0;</span><span
cannam@86 9960 class="cmtt-8">&#x00A0;</span><span
cannam@86 9961 class="cmtt-8">&#x00A0;</span><span
cannam@86 9962 class="cmtt-8">&#x00A0;</span><span
cannam@86 9963 class="cmtt-8">&#x00A0;</span><span
cannam@86 9964 class="cmtt-8">&#x00A0;</span><span
cannam@86 9965 class="cmtt-8">&#x00A0;</span><span
cannam@86 9966 class="cmtt-8">&#x00A0;</span><span
cannam@86 9967 class="cmtt-8">&#x00A0;}</span>
cannam@86 9968 <br class="fancyvrb" /><a
cannam@86 9969 id="x1-109058r15"></a><span
cannam@86 9970 class="cmr-6">15</span><span
cannam@86 9971 class="cmtt-8">&#x00A0;</span><span
cannam@86 9972 class="cmtt-8">&#x00A0;</span><span
cannam@86 9973 class="cmtt-8">&#x00A0;</span><span
cannam@86 9974 class="cmtt-8">&#x00A0;</span><span
cannam@86 9975 class="cmtt-8">&#x00A0;</span><span
cannam@86 9976 class="cmtt-8">&#x00A0;</span><span
cannam@86 9977 class="cmtt-8">&#x00A0;</span><span
cannam@86 9978 class="cmtt-8">&#x00A0;}</span>
cannam@86 9979 <br class="fancyvrb" /><a
cannam@86 9980 id="x1-109060r16"></a><span
cannam@86 9981 class="cmr-6">16</span><span
cannam@86 9982 class="cmtt-8">&#x00A0;</span><span
cannam@86 9983 class="cmtt-8">&#x00A0;</span>
cannam@86 9984 <br class="fancyvrb" /><a
cannam@86 9985 id="x1-109062r17"></a><span
cannam@86 9986 class="cmr-6">17</span><span
cannam@86 9987 class="cmtt-8">&#x00A0;</span><span
cannam@86 9988 class="cmtt-8">&#x00A0;</span><span
cannam@86 9989 class="cmtt-8">&#x00A0;</span><span
cannam@86 9990 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 9991 class="cmtt-8">&#x00A0;done</span>
cannam@86 9992 </div>
cannam@86 9993 <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
cannam@86 9994 In addition, any codebook number greater than the maximum numbered codebook
cannam@86 9995 set up in this stream also renders the stream undecodable. All codebooks in array
cannam@86 9996 [residue_books] are required to have a value mapping. The presence of codebook in array
cannam@86 9997 [residue_books] without a value mapping (maptype equals zero) renders the stream
cannam@86 9998 undecodable.
cannam@86 9999 <!--l. 241--><p class="noindent" >
cannam@86 10000 <h5 class="subsubsectionHead"><span class="titlemark">8.6.2. </span> <a
cannam@86 10001 id="x1-1100008.6.2"></a>packet decode</h5>
cannam@86 10002 <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
cannam@86 10003 decode can be built out of the format 1 decode process. Thus we describe first the decode
cannam@86 10004 infrastructure identical to all three formats.
cannam@86 10005 <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
cannam@86 10006 vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
cannam@86 10007 decoded. If the passed in number of vectors is 3 and vector number 1 is marked &#8217;do not decode&#8217;,
cannam@86 10008 decode skips vector 1 during the decode loop. However, even &#8217;do not decode&#8217; vectors are
cannam@86 10009 allocated and zeroed.
cannam@86 10010 <!--l. 255--><p class="noindent" >Depending on the values of <span
cannam@86 10011 class="cmtt-12">[residue_begin] </span>and <span
cannam@86 10012 class="cmtt-12">[residue_end]</span>, it is obvious that the
cannam@86 10013 encoded portion of a residue vector may be the entire possible residue vector or some other strict
cannam@86 10014 subset of the actual residue vector size with zero padding at either uncoded end. However, it is
cannam@86 10015 also possible to set <span
cannam@86 10016 class="cmtt-12">[residue_begin] </span>and <span
cannam@86 10017 class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
cannam@86 10018 beyond the maximum vector size. Before beginning residue decode, limit <span
cannam@86 10019 class="cmtt-12">[residue_begin]</span>
cannam@86 10020 and <span
cannam@86 10021 class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
cannam@86 10022 the number of vectors being encoded, <span
cannam@86 10023 class="cmtt-12">[ch] </span>is provided by the higher level decoding
cannam@86 10024 process.
cannam@86 10025 <!--l. 269--><p class="noindent" >
cannam@86 10026 <div class="fancyvrb" id="fancyvrb38">
cannam@86 10027 <a
cannam@86 10028 id="x1-110002r1"></a><span
cannam@86 10029 class="cmr-6">1</span><span
cannam@86 10030 class="cmtt-8">&#x00A0;</span><span
cannam@86 10031 class="cmtt-8">&#x00A0;</span><span
cannam@86 10032 class="cmtt-8">&#x00A0;</span><span
cannam@86 10033 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 10034 class="cmtt-8">&#x00A0;[actual\_size]</span><span
cannam@86 10035 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10036 class="cmtt-8">&#x00A0;current</span><span
cannam@86 10037 class="cmtt-8">&#x00A0;blocksize/2;</span>
cannam@86 10038 <br class="fancyvrb" /><a
cannam@86 10039 id="x1-110004r2"></a><span
cannam@86 10040 class="cmr-6">2</span><span
cannam@86 10041 class="cmtt-8">&#x00A0;</span><span
cannam@86 10042 class="cmtt-8">&#x00A0;</span><span
cannam@86 10043 class="cmtt-8">&#x00A0;</span><span
cannam@86 10044 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 10045 class="cmtt-8">&#x00A0;if</span><span
cannam@86 10046 class="cmtt-8">&#x00A0;residue</span><span
cannam@86 10047 class="cmtt-8">&#x00A0;encoding</span><span
cannam@86 10048 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10049 class="cmtt-8">&#x00A0;format</span><span
cannam@86 10050 class="cmtt-8">&#x00A0;2</span>
cannam@86 10051 <br class="fancyvrb" /><a
cannam@86 10052 id="x1-110006r3"></a><span
cannam@86 10053 class="cmr-6">3</span><span
cannam@86 10054 class="cmtt-8">&#x00A0;</span><span
cannam@86 10055 class="cmtt-8">&#x00A0;</span><span
cannam@86 10056 class="cmtt-8">&#x00A0;</span><span
cannam@86 10057 class="cmtt-8">&#x00A0;</span><span
cannam@86 10058 class="cmtt-8">&#x00A0;</span><span
cannam@86 10059 class="cmtt-8">&#x00A0;</span><span
cannam@86 10060 class="cmtt-8">&#x00A0;</span><span
cannam@86 10061 class="cmtt-8">&#x00A0;</span><span
cannam@86 10062 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 10063 class="cmtt-8">&#x00A0;[actual\_size]</span><span
cannam@86 10064 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10065 class="cmtt-8">&#x00A0;[actual\_size]</span><span
cannam@86 10066 class="cmtt-8">&#x00A0;*</span><span
cannam@86 10067 class="cmtt-8">&#x00A0;[ch];</span>
cannam@86 10068
cannam@86 10069
cannam@86 10070
cannam@86 10071 <br class="fancyvrb" /><a
cannam@86 10072 id="x1-110008r4"></a><span
cannam@86 10073 class="cmr-6">4</span><span
cannam@86 10074 class="cmtt-8">&#x00A0;</span><span
cannam@86 10075 class="cmtt-8">&#x00A0;</span><span
cannam@86 10076 class="cmtt-8">&#x00A0;</span><span
cannam@86 10077 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 10078 class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span><span
cannam@86 10079 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10080 class="cmtt-8">&#x00A0;maximum</span><span
cannam@86 10081 class="cmtt-8">&#x00A0;of</span><span
cannam@86 10082 class="cmtt-8">&#x00A0;([residue\_begin],[actual\_size]);</span>
cannam@86 10083 <br class="fancyvrb" /><a
cannam@86 10084 id="x1-110010r5"></a><span
cannam@86 10085 class="cmr-6">5</span><span
cannam@86 10086 class="cmtt-8">&#x00A0;</span><span
cannam@86 10087 class="cmtt-8">&#x00A0;</span><span
cannam@86 10088 class="cmtt-8">&#x00A0;</span><span
cannam@86 10089 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 10090 class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
cannam@86 10091 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10092 class="cmtt-8">&#x00A0;maximum</span><span
cannam@86 10093 class="cmtt-8">&#x00A0;of</span><span
cannam@86 10094 class="cmtt-8">&#x00A0;([residue\_end],[actual\_size]);</span>
cannam@86 10095 </div>
cannam@86 10096 <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
cannam@86 10097 <!--l. 280--><p class="noindent" >
cannam@86 10098 <div class="fancyvrb" id="fancyvrb39">
cannam@86 10099 <a
cannam@86 10100 id="x1-110012r1"></a><span
cannam@86 10101 class="cmr-6">1</span><span
cannam@86 10102 class="cmtt-8">&#x00A0;</span><span
cannam@86 10103 class="cmtt-8">&#x00A0;</span><span
cannam@86 10104 class="cmtt-8">&#x00A0;</span><span
cannam@86 10105 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 10106 class="cmtt-8">&#x00A0;[classwords\_per\_codeword]</span><span
cannam@86 10107 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10108 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span><span
cannam@86 10109 class="cmtt-8">&#x00A0;value</span><span
cannam@86 10110 class="cmtt-8">&#x00A0;of</span><span
cannam@86 10111 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 10112 class="cmtt-8">&#x00A0;[residue\_classbook]</span>
cannam@86 10113 <br class="fancyvrb" /><a
cannam@86 10114 id="x1-110014r2"></a><span
cannam@86 10115 class="cmr-6">2</span><span
cannam@86 10116 class="cmtt-8">&#x00A0;</span><span
cannam@86 10117 class="cmtt-8">&#x00A0;</span><span
cannam@86 10118 class="cmtt-8">&#x00A0;</span><span
cannam@86 10119 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 10120 class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
cannam@86 10121 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10122 class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
cannam@86 10123 class="cmtt-8">&#x00A0;-</span><span
cannam@86 10124 class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span>
cannam@86 10125 <br class="fancyvrb" /><a
cannam@86 10126 id="x1-110016r3"></a><span
cannam@86 10127 class="cmr-6">3</span><span
cannam@86 10128 class="cmtt-8">&#x00A0;</span><span
cannam@86 10129 class="cmtt-8">&#x00A0;</span><span
cannam@86 10130 class="cmtt-8">&#x00A0;</span><span
cannam@86 10131 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 10132 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
cannam@86 10133 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10134 class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
cannam@86 10135 class="cmtt-8">&#x00A0;/</span><span
cannam@86 10136 class="cmtt-8">&#x00A0;[residue\_partition\_size]</span>
cannam@86 10137 </div>
cannam@86 10138 <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
cannam@86 10139 <div class="fancyvrb" id="fancyvrb40">
cannam@86 10140 <a
cannam@86 10141 id="x1-110018r1"></a><span
cannam@86 10142 class="cmr-6">1</span><span
cannam@86 10143 class="cmtt-8">&#x00A0;</span><span
cannam@86 10144 class="cmtt-8">&#x00A0;</span><span
cannam@86 10145 class="cmtt-8">&#x00A0;</span><span
cannam@86 10146 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 10147 class="cmtt-8">&#x00A0;allocate</span><span
cannam@86 10148 class="cmtt-8">&#x00A0;and</span><span
cannam@86 10149 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 10150 class="cmtt-8">&#x00A0;all</span><span
cannam@86 10151 class="cmtt-8">&#x00A0;vectors</span><span
cannam@86 10152 class="cmtt-8">&#x00A0;that</span><span
cannam@86 10153 class="cmtt-8">&#x00A0;will</span><span
cannam@86 10154 class="cmtt-8">&#x00A0;be</span><span
cannam@86 10155 class="cmtt-8">&#x00A0;returned.</span>
cannam@86 10156 <br class="fancyvrb" /><a
cannam@86 10157 id="x1-110020r2"></a><span
cannam@86 10158 class="cmr-6">2</span><span
cannam@86 10159 class="cmtt-8">&#x00A0;</span><span
cannam@86 10160 class="cmtt-8">&#x00A0;</span><span
cannam@86 10161 class="cmtt-8">&#x00A0;</span><span
cannam@86 10162 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 10163 class="cmtt-8">&#x00A0;if</span><span
cannam@86 10164 class="cmtt-8">&#x00A0;([n\_to\_read]</span><span
cannam@86 10165 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10166 class="cmtt-8">&#x00A0;zero),</span><span
cannam@86 10167 class="cmtt-8">&#x00A0;stop;</span><span
cannam@86 10168 class="cmtt-8">&#x00A0;there</span><span
cannam@86 10169 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10170 class="cmtt-8">&#x00A0;no</span><span
cannam@86 10171 class="cmtt-8">&#x00A0;residue</span><span
cannam@86 10172 class="cmtt-8">&#x00A0;to</span><span
cannam@86 10173 class="cmtt-8">&#x00A0;decode.</span>
cannam@86 10174 <br class="fancyvrb" /><a
cannam@86 10175 id="x1-110022r3"></a><span
cannam@86 10176 class="cmr-6">3</span><span
cannam@86 10177 class="cmtt-8">&#x00A0;</span><span
cannam@86 10178 class="cmtt-8">&#x00A0;</span><span
cannam@86 10179 class="cmtt-8">&#x00A0;</span><span
cannam@86 10180 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 10181 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 10182 class="cmtt-8">&#x00A0;[pass]</span><span
cannam@86 10183 class="cmtt-8">&#x00A0;over</span><span
cannam@86 10184 class="cmtt-8">&#x00A0;the</span><span
cannam@86 10185 class="cmtt-8">&#x00A0;range</span><span
cannam@86 10186 class="cmtt-8">&#x00A0;0</span><span
cannam@86 10187 class="cmtt-8">&#x00A0;...</span><span
cannam@86 10188 class="cmtt-8">&#x00A0;7</span><span
cannam@86 10189 class="cmtt-8">&#x00A0;{</span>
cannam@86 10190 <br class="fancyvrb" /><a
cannam@86 10191 id="x1-110024r4"></a><span
cannam@86 10192 class="cmr-6">4</span><span
cannam@86 10193 class="cmtt-8">&#x00A0;</span><span
cannam@86 10194 class="cmtt-8">&#x00A0;</span>
cannam@86 10195 <br class="fancyvrb" /><a
cannam@86 10196 id="x1-110026r5"></a><span
cannam@86 10197 class="cmr-6">5</span><span
cannam@86 10198 class="cmtt-8">&#x00A0;</span><span
cannam@86 10199 class="cmtt-8">&#x00A0;</span><span
cannam@86 10200 class="cmtt-8">&#x00A0;</span><span
cannam@86 10201 class="cmtt-8">&#x00A0;</span><span
cannam@86 10202 class="cmtt-8">&#x00A0;</span><span
cannam@86 10203 class="cmtt-8">&#x00A0;</span><span
cannam@86 10204 class="cmtt-8">&#x00A0;</span><span
cannam@86 10205 class="cmtt-8">&#x00A0;</span><span
cannam@86 10206 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 10207 class="cmtt-8">&#x00A0;[partition\_count]</span><span
cannam@86 10208 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10209 class="cmtt-8">&#x00A0;0</span>
cannam@86 10210 <br class="fancyvrb" /><a
cannam@86 10211 id="x1-110028r6"></a><span
cannam@86 10212 class="cmr-6">6</span><span
cannam@86 10213 class="cmtt-8">&#x00A0;</span><span
cannam@86 10214 class="cmtt-8">&#x00A0;</span>
cannam@86 10215 <br class="fancyvrb" /><a
cannam@86 10216 id="x1-110030r7"></a><span
cannam@86 10217 class="cmr-6">7</span><span
cannam@86 10218 class="cmtt-8">&#x00A0;</span><span
cannam@86 10219 class="cmtt-8">&#x00A0;</span><span
cannam@86 10220 class="cmtt-8">&#x00A0;</span><span
cannam@86 10221 class="cmtt-8">&#x00A0;</span><span
cannam@86 10222 class="cmtt-8">&#x00A0;</span><span
cannam@86 10223 class="cmtt-8">&#x00A0;</span><span
cannam@86 10224 class="cmtt-8">&#x00A0;</span><span
cannam@86 10225 class="cmtt-8">&#x00A0;</span><span
cannam@86 10226 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 10227 class="cmtt-8">&#x00A0;while</span><span
cannam@86 10228 class="cmtt-8">&#x00A0;[partition\_count]</span><span
cannam@86 10229 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10230 class="cmtt-8">&#x00A0;less</span><span
cannam@86 10231 class="cmtt-8">&#x00A0;than</span><span
cannam@86 10232 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span>
cannam@86 10233 <br class="fancyvrb" /><a
cannam@86 10234 id="x1-110032r8"></a><span
cannam@86 10235 class="cmr-6">8</span><span
cannam@86 10236 class="cmtt-8">&#x00A0;</span><span
cannam@86 10237 class="cmtt-8">&#x00A0;</span>
cannam@86 10238 <br class="fancyvrb" /><a
cannam@86 10239 id="x1-110034r9"></a><span
cannam@86 10240 class="cmr-6">9</span><span
cannam@86 10241 class="cmtt-8">&#x00A0;</span><span
cannam@86 10242 class="cmtt-8">&#x00A0;</span><span
cannam@86 10243 class="cmtt-8">&#x00A0;</span><span
cannam@86 10244 class="cmtt-8">&#x00A0;</span><span
cannam@86 10245 class="cmtt-8">&#x00A0;</span><span
cannam@86 10246 class="cmtt-8">&#x00A0;</span><span
cannam@86 10247 class="cmtt-8">&#x00A0;</span><span
cannam@86 10248 class="cmtt-8">&#x00A0;</span><span
cannam@86 10249 class="cmtt-8">&#x00A0;</span><span
cannam@86 10250 class="cmtt-8">&#x00A0;</span><span
cannam@86 10251 class="cmtt-8">&#x00A0;</span><span
cannam@86 10252 class="cmtt-8">&#x00A0;</span><span
cannam@86 10253 class="cmtt-8">&#x00A0;</span><span
cannam@86 10254 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 10255 class="cmtt-8">&#x00A0;if</span><span
cannam@86 10256 class="cmtt-8">&#x00A0;([pass]</span><span
cannam@86 10257 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10258 class="cmtt-8">&#x00A0;zero)</span><span
cannam@86 10259 class="cmtt-8">&#x00A0;{</span>
cannam@86 10260 <br class="fancyvrb" /><a
cannam@86 10261 id="x1-110036r10"></a><span
cannam@86 10262 class="cmr-6">10</span><span
cannam@86 10263 class="cmtt-8">&#x00A0;</span><span
cannam@86 10264 class="cmtt-8">&#x00A0;</span>
cannam@86 10265 <br class="fancyvrb" /><a
cannam@86 10266 id="x1-110038r11"></a><span
cannam@86 10267 class="cmr-6">11</span><span
cannam@86 10268 class="cmtt-8">&#x00A0;</span><span
cannam@86 10269 class="cmtt-8">&#x00A0;</span><span
cannam@86 10270 class="cmtt-8">&#x00A0;</span><span
cannam@86 10271 class="cmtt-8">&#x00A0;</span><span
cannam@86 10272 class="cmtt-8">&#x00A0;</span><span
cannam@86 10273 class="cmtt-8">&#x00A0;</span><span
cannam@86 10274 class="cmtt-8">&#x00A0;</span><span
cannam@86 10275 class="cmtt-8">&#x00A0;</span><span
cannam@86 10276 class="cmtt-8">&#x00A0;</span><span
cannam@86 10277 class="cmtt-8">&#x00A0;</span><span
cannam@86 10278 class="cmtt-8">&#x00A0;</span><span
cannam@86 10279 class="cmtt-8">&#x00A0;</span><span
cannam@86 10280 class="cmtt-8">&#x00A0;</span><span
cannam@86 10281 class="cmtt-8">&#x00A0;</span><span
cannam@86 10282 class="cmtt-8">&#x00A0;</span><span
cannam@86 10283 class="cmtt-8">&#x00A0;</span><span
cannam@86 10284 class="cmtt-8">&#x00A0;</span><span
cannam@86 10285 class="cmtt-8">&#x00A0;</span><span
cannam@86 10286 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 10287 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 10288 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 10289 class="cmtt-8">&#x00A0;over</span><span
cannam@86 10290 class="cmtt-8">&#x00A0;the</span><span
cannam@86 10291 class="cmtt-8">&#x00A0;range</span><span
cannam@86 10292 class="cmtt-8">&#x00A0;0</span><span
cannam@86 10293 class="cmtt-8">&#x00A0;..</span><span
cannam@86 10294 class="cmtt-8">&#x00A0;[ch]-1</span><span
cannam@86 10295 class="cmtt-8">&#x00A0;{</span>
cannam@86 10296 <br class="fancyvrb" /><a
cannam@86 10297 id="x1-110040r12"></a><span
cannam@86 10298 class="cmr-6">12</span><span
cannam@86 10299 class="cmtt-8">&#x00A0;</span><span
cannam@86 10300 class="cmtt-8">&#x00A0;</span>
cannam@86 10301 <br class="fancyvrb" /><a
cannam@86 10302 id="x1-110042r13"></a><span
cannam@86 10303 class="cmr-6">13</span><span
cannam@86 10304 class="cmtt-8">&#x00A0;</span><span
cannam@86 10305 class="cmtt-8">&#x00A0;</span><span
cannam@86 10306 class="cmtt-8">&#x00A0;</span><span
cannam@86 10307 class="cmtt-8">&#x00A0;</span><span
cannam@86 10308 class="cmtt-8">&#x00A0;</span><span
cannam@86 10309 class="cmtt-8">&#x00A0;</span><span
cannam@86 10310 class="cmtt-8">&#x00A0;</span><span
cannam@86 10311 class="cmtt-8">&#x00A0;</span><span
cannam@86 10312 class="cmtt-8">&#x00A0;</span><span
cannam@86 10313 class="cmtt-8">&#x00A0;</span><span
cannam@86 10314 class="cmtt-8">&#x00A0;</span><span
cannam@86 10315 class="cmtt-8">&#x00A0;</span><span
cannam@86 10316 class="cmtt-8">&#x00A0;</span><span
cannam@86 10317 class="cmtt-8">&#x00A0;</span><span
cannam@86 10318 class="cmtt-8">&#x00A0;</span><span
cannam@86 10319 class="cmtt-8">&#x00A0;</span><span
cannam@86 10320 class="cmtt-8">&#x00A0;</span><span
cannam@86 10321 class="cmtt-8">&#x00A0;</span><span
cannam@86 10322 class="cmtt-8">&#x00A0;</span><span
cannam@86 10323 class="cmtt-8">&#x00A0;</span><span
cannam@86 10324 class="cmtt-8">&#x00A0;</span><span
cannam@86 10325 class="cmtt-8">&#x00A0;</span><span
cannam@86 10326 class="cmtt-8">&#x00A0;</span><span
cannam@86 10327 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 10328 class="cmtt-8">&#x00A0;if</span><span
cannam@86 10329 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 10330 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 10331 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10332 class="cmtt-8">&#x00A0;not</span><span
cannam@86 10333 class="cmtt-8">&#x00A0;marked</span><span
cannam@86 10334 class="cmtt-8">&#x00A0;&#8217;do</span><span
cannam@86 10335 class="cmtt-8">&#x00A0;not</span><span
cannam@86 10336 class="cmtt-8">&#x00A0;decode&#8217;</span><span
cannam@86 10337 class="cmtt-8">&#x00A0;{</span>
cannam@86 10338 <br class="fancyvrb" /><a
cannam@86 10339 id="x1-110044r14"></a><span
cannam@86 10340 class="cmr-6">14</span><span
cannam@86 10341 class="cmtt-8">&#x00A0;</span><span
cannam@86 10342 class="cmtt-8">&#x00A0;</span>
cannam@86 10343 <br class="fancyvrb" /><a
cannam@86 10344 id="x1-110046r15"></a><span
cannam@86 10345 class="cmr-6">15</span><span
cannam@86 10346 class="cmtt-8">&#x00A0;</span><span
cannam@86 10347 class="cmtt-8">&#x00A0;</span><span
cannam@86 10348 class="cmtt-8">&#x00A0;</span><span
cannam@86 10349 class="cmtt-8">&#x00A0;</span><span
cannam@86 10350 class="cmtt-8">&#x00A0;</span><span
cannam@86 10351 class="cmtt-8">&#x00A0;</span><span
cannam@86 10352 class="cmtt-8">&#x00A0;</span><span
cannam@86 10353 class="cmtt-8">&#x00A0;</span><span
cannam@86 10354 class="cmtt-8">&#x00A0;</span><span
cannam@86 10355 class="cmtt-8">&#x00A0;</span><span
cannam@86 10356 class="cmtt-8">&#x00A0;</span><span
cannam@86 10357 class="cmtt-8">&#x00A0;</span><span
cannam@86 10358 class="cmtt-8">&#x00A0;</span><span
cannam@86 10359 class="cmtt-8">&#x00A0;</span><span
cannam@86 10360 class="cmtt-8">&#x00A0;</span><span
cannam@86 10361 class="cmtt-8">&#x00A0;</span><span
cannam@86 10362 class="cmtt-8">&#x00A0;</span><span
cannam@86 10363 class="cmtt-8">&#x00A0;</span><span
cannam@86 10364 class="cmtt-8">&#x00A0;</span><span
cannam@86 10365 class="cmtt-8">&#x00A0;</span><span
cannam@86 10366 class="cmtt-8">&#x00A0;</span><span
cannam@86 10367 class="cmtt-8">&#x00A0;</span><span
cannam@86 10368 class="cmtt-8">&#x00A0;</span><span
cannam@86 10369 class="cmtt-8">&#x00A0;</span><span
cannam@86 10370 class="cmtt-8">&#x00A0;</span><span
cannam@86 10371 class="cmtt-8">&#x00A0;</span><span
cannam@86 10372 class="cmtt-8">&#x00A0;</span><span
cannam@86 10373 class="cmtt-8">&#x00A0;</span><span
cannam@86 10374 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 10375 class="cmtt-8">&#x00A0;[temp]</span><span
cannam@86 10376 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10377 class="cmtt-8">&#x00A0;read</span><span
cannam@86 10378 class="cmtt-8">&#x00A0;from</span><span
cannam@86 10379 class="cmtt-8">&#x00A0;packet</span><span
cannam@86 10380 class="cmtt-8">&#x00A0;using</span><span
cannam@86 10381 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 10382 class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
cannam@86 10383 class="cmtt-8">&#x00A0;in</span><span
cannam@86 10384 class="cmtt-8">&#x00A0;scalar</span><span
cannam@86 10385 class="cmtt-8">&#x00A0;context</span>
cannam@86 10386 <br class="fancyvrb" /><a
cannam@86 10387 id="x1-110048r16"></a><span
cannam@86 10388 class="cmr-6">16</span><span
cannam@86 10389 class="cmtt-8">&#x00A0;</span><span
cannam@86 10390 class="cmtt-8">&#x00A0;</span><span
cannam@86 10391 class="cmtt-8">&#x00A0;</span><span
cannam@86 10392 class="cmtt-8">&#x00A0;</span><span
cannam@86 10393 class="cmtt-8">&#x00A0;</span><span
cannam@86 10394 class="cmtt-8">&#x00A0;</span><span
cannam@86 10395 class="cmtt-8">&#x00A0;</span><span
cannam@86 10396 class="cmtt-8">&#x00A0;</span><span
cannam@86 10397 class="cmtt-8">&#x00A0;</span><span
cannam@86 10398 class="cmtt-8">&#x00A0;</span><span
cannam@86 10399 class="cmtt-8">&#x00A0;</span><span
cannam@86 10400 class="cmtt-8">&#x00A0;</span><span
cannam@86 10401 class="cmtt-8">&#x00A0;</span><span
cannam@86 10402 class="cmtt-8">&#x00A0;</span><span
cannam@86 10403 class="cmtt-8">&#x00A0;</span><span
cannam@86 10404 class="cmtt-8">&#x00A0;</span><span
cannam@86 10405 class="cmtt-8">&#x00A0;</span><span
cannam@86 10406 class="cmtt-8">&#x00A0;</span><span
cannam@86 10407 class="cmtt-8">&#x00A0;</span><span
cannam@86 10408 class="cmtt-8">&#x00A0;</span><span
cannam@86 10409 class="cmtt-8">&#x00A0;</span><span
cannam@86 10410 class="cmtt-8">&#x00A0;</span><span
cannam@86 10411 class="cmtt-8">&#x00A0;</span><span
cannam@86 10412 class="cmtt-8">&#x00A0;</span><span
cannam@86 10413 class="cmtt-8">&#x00A0;</span><span
cannam@86 10414 class="cmtt-8">&#x00A0;</span><span
cannam@86 10415 class="cmtt-8">&#x00A0;</span><span
cannam@86 10416 class="cmtt-8">&#x00A0;10)</span><span
cannam@86 10417 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 10418 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 10419 class="cmtt-8">&#x00A0;descending</span><span
cannam@86 10420 class="cmtt-8">&#x00A0;over</span><span
cannam@86 10421 class="cmtt-8">&#x00A0;the</span><span
cannam@86 10422 class="cmtt-8">&#x00A0;range</span><span
cannam@86 10423 class="cmtt-8">&#x00A0;[classwords\_per\_codeword]-1</span><span
cannam@86 10424 class="cmtt-8">&#x00A0;...</span><span
cannam@86 10425 class="cmtt-8">&#x00A0;0</span><span
cannam@86 10426 class="cmtt-8">&#x00A0;{</span>
cannam@86 10427 <br class="fancyvrb" /><a
cannam@86 10428 id="x1-110050r17"></a><span
cannam@86 10429 class="cmr-6">17</span><span
cannam@86 10430 class="cmtt-8">&#x00A0;</span><span
cannam@86 10431 class="cmtt-8">&#x00A0;</span>
cannam@86 10432 <br class="fancyvrb" /><a
cannam@86 10433 id="x1-110052r18"></a><span
cannam@86 10434 class="cmr-6">18</span><span
cannam@86 10435 class="cmtt-8">&#x00A0;</span><span
cannam@86 10436 class="cmtt-8">&#x00A0;</span><span
cannam@86 10437 class="cmtt-8">&#x00A0;</span><span
cannam@86 10438 class="cmtt-8">&#x00A0;</span><span
cannam@86 10439 class="cmtt-8">&#x00A0;</span><span
cannam@86 10440 class="cmtt-8">&#x00A0;</span><span
cannam@86 10441 class="cmtt-8">&#x00A0;</span><span
cannam@86 10442 class="cmtt-8">&#x00A0;</span><span
cannam@86 10443 class="cmtt-8">&#x00A0;</span><span
cannam@86 10444 class="cmtt-8">&#x00A0;</span><span
cannam@86 10445 class="cmtt-8">&#x00A0;</span><span
cannam@86 10446 class="cmtt-8">&#x00A0;</span><span
cannam@86 10447 class="cmtt-8">&#x00A0;</span><span
cannam@86 10448 class="cmtt-8">&#x00A0;</span><span
cannam@86 10449 class="cmtt-8">&#x00A0;</span><span
cannam@86 10450 class="cmtt-8">&#x00A0;</span><span
cannam@86 10451 class="cmtt-8">&#x00A0;</span><span
cannam@86 10452 class="cmtt-8">&#x00A0;</span><span
cannam@86 10453 class="cmtt-8">&#x00A0;</span><span
cannam@86 10454 class="cmtt-8">&#x00A0;</span><span
cannam@86 10455 class="cmtt-8">&#x00A0;</span><span
cannam@86 10456 class="cmtt-8">&#x00A0;</span><span
cannam@86 10457 class="cmtt-8">&#x00A0;</span><span
cannam@86 10458 class="cmtt-8">&#x00A0;</span><span
cannam@86 10459 class="cmtt-8">&#x00A0;</span><span
cannam@86 10460 class="cmtt-8">&#x00A0;</span><span
cannam@86 10461 class="cmtt-8">&#x00A0;</span><span
cannam@86 10462 class="cmtt-8">&#x00A0;</span><span
cannam@86 10463 class="cmtt-8">&#x00A0;</span><span
cannam@86 10464 class="cmtt-8">&#x00A0;</span><span
cannam@86 10465 class="cmtt-8">&#x00A0;</span><span
cannam@86 10466 class="cmtt-8">&#x00A0;</span><span
cannam@86 10467 class="cmtt-8">&#x00A0;11)</span><span
cannam@86 10468 class="cmtt-8">&#x00A0;array</span><span
cannam@86 10469 class="cmtt-8">&#x00A0;[classifications]</span><span
cannam@86 10470 class="cmtt-8">&#x00A0;element</span><span
cannam@86 10471 class="cmtt-8">&#x00A0;[j],([i]+[partition\_count])</span><span
cannam@86 10472 class="cmtt-8">&#x00A0;=</span>
cannam@86 10473 <br class="fancyvrb" /><a
cannam@86 10474 id="x1-110054r19"></a><span
cannam@86 10475 class="cmr-6">19</span><span
cannam@86 10476 class="cmtt-8">&#x00A0;</span><span
cannam@86 10477 class="cmtt-8">&#x00A0;</span><span
cannam@86 10478 class="cmtt-8">&#x00A0;</span><span
cannam@86 10479 class="cmtt-8">&#x00A0;</span><span
cannam@86 10480 class="cmtt-8">&#x00A0;</span><span
cannam@86 10481 class="cmtt-8">&#x00A0;</span><span
cannam@86 10482 class="cmtt-8">&#x00A0;</span><span
cannam@86 10483 class="cmtt-8">&#x00A0;</span><span
cannam@86 10484 class="cmtt-8">&#x00A0;</span><span
cannam@86 10485 class="cmtt-8">&#x00A0;</span><span
cannam@86 10486 class="cmtt-8">&#x00A0;</span><span
cannam@86 10487 class="cmtt-8">&#x00A0;</span><span
cannam@86 10488 class="cmtt-8">&#x00A0;</span><span
cannam@86 10489 class="cmtt-8">&#x00A0;</span><span
cannam@86 10490 class="cmtt-8">&#x00A0;</span><span
cannam@86 10491 class="cmtt-8">&#x00A0;</span><span
cannam@86 10492 class="cmtt-8">&#x00A0;</span><span
cannam@86 10493 class="cmtt-8">&#x00A0;</span><span
cannam@86 10494 class="cmtt-8">&#x00A0;</span><span
cannam@86 10495 class="cmtt-8">&#x00A0;</span><span
cannam@86 10496 class="cmtt-8">&#x00A0;</span><span
cannam@86 10497 class="cmtt-8">&#x00A0;</span><span
cannam@86 10498 class="cmtt-8">&#x00A0;</span><span
cannam@86 10499 class="cmtt-8">&#x00A0;</span><span
cannam@86 10500 class="cmtt-8">&#x00A0;</span><span
cannam@86 10501 class="cmtt-8">&#x00A0;</span><span
cannam@86 10502 class="cmtt-8">&#x00A0;</span><span
cannam@86 10503 class="cmtt-8">&#x00A0;</span><span
cannam@86 10504 class="cmtt-8">&#x00A0;</span><span
cannam@86 10505 class="cmtt-8">&#x00A0;</span><span
cannam@86 10506 class="cmtt-8">&#x00A0;</span><span
cannam@86 10507 class="cmtt-8">&#x00A0;</span><span
cannam@86 10508 class="cmtt-8">&#x00A0;</span><span
cannam@86 10509 class="cmtt-8">&#x00A0;</span><span
cannam@86 10510 class="cmtt-8">&#x00A0;</span><span
cannam@86 10511 class="cmtt-8">&#x00A0;</span><span
cannam@86 10512 class="cmtt-8">&#x00A0;[temp]</span><span
cannam@86 10513 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 10514 class="cmtt-8">&#x00A0;modulo</span><span
cannam@86 10515 class="cmtt-8">&#x00A0;[residue\_classifications]</span>
cannam@86 10516 <br class="fancyvrb" /><a
cannam@86 10517 id="x1-110056r20"></a><span
cannam@86 10518 class="cmr-6">20</span><span
cannam@86 10519 class="cmtt-8">&#x00A0;</span><span
cannam@86 10520 class="cmtt-8">&#x00A0;</span><span
cannam@86 10521 class="cmtt-8">&#x00A0;</span><span
cannam@86 10522 class="cmtt-8">&#x00A0;</span><span
cannam@86 10523 class="cmtt-8">&#x00A0;</span><span
cannam@86 10524 class="cmtt-8">&#x00A0;</span><span
cannam@86 10525 class="cmtt-8">&#x00A0;</span><span
cannam@86 10526 class="cmtt-8">&#x00A0;</span><span
cannam@86 10527 class="cmtt-8">&#x00A0;</span><span
cannam@86 10528 class="cmtt-8">&#x00A0;</span><span
cannam@86 10529 class="cmtt-8">&#x00A0;</span><span
cannam@86 10530 class="cmtt-8">&#x00A0;</span><span
cannam@86 10531 class="cmtt-8">&#x00A0;</span><span
cannam@86 10532 class="cmtt-8">&#x00A0;</span><span
cannam@86 10533 class="cmtt-8">&#x00A0;</span><span
cannam@86 10534 class="cmtt-8">&#x00A0;</span><span
cannam@86 10535 class="cmtt-8">&#x00A0;</span><span
cannam@86 10536 class="cmtt-8">&#x00A0;</span><span
cannam@86 10537 class="cmtt-8">&#x00A0;</span><span
cannam@86 10538 class="cmtt-8">&#x00A0;</span><span
cannam@86 10539 class="cmtt-8">&#x00A0;</span><span
cannam@86 10540 class="cmtt-8">&#x00A0;</span><span
cannam@86 10541 class="cmtt-8">&#x00A0;</span><span
cannam@86 10542 class="cmtt-8">&#x00A0;</span><span
cannam@86 10543 class="cmtt-8">&#x00A0;</span><span
cannam@86 10544 class="cmtt-8">&#x00A0;</span><span
cannam@86 10545 class="cmtt-8">&#x00A0;</span><span
cannam@86 10546 class="cmtt-8">&#x00A0;</span><span
cannam@86 10547 class="cmtt-8">&#x00A0;</span><span
cannam@86 10548 class="cmtt-8">&#x00A0;</span><span
cannam@86 10549 class="cmtt-8">&#x00A0;</span><span
cannam@86 10550 class="cmtt-8">&#x00A0;</span><span
cannam@86 10551 class="cmtt-8">&#x00A0;12)</span><span
cannam@86 10552 class="cmtt-8">&#x00A0;[temp]</span><span
cannam@86 10553 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10554 class="cmtt-8">&#x00A0;[temp]</span><span
cannam@86 10555 class="cmtt-8">&#x00A0;/</span><span
cannam@86 10556 class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
cannam@86 10557 class="cmtt-8">&#x00A0;using</span><span
cannam@86 10558 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 10559 class="cmtt-8">&#x00A0;division</span>
cannam@86 10560 <br class="fancyvrb" /><a
cannam@86 10561 id="x1-110058r21"></a><span
cannam@86 10562 class="cmr-6">21</span><span
cannam@86 10563 class="cmtt-8">&#x00A0;</span><span
cannam@86 10564 class="cmtt-8">&#x00A0;</span>
cannam@86 10565 <br class="fancyvrb" /><a
cannam@86 10566 id="x1-110060r22"></a><span
cannam@86 10567 class="cmr-6">22</span><span
cannam@86 10568 class="cmtt-8">&#x00A0;</span><span
cannam@86 10569 class="cmtt-8">&#x00A0;</span><span
cannam@86 10570 class="cmtt-8">&#x00A0;</span><span
cannam@86 10571 class="cmtt-8">&#x00A0;</span><span
cannam@86 10572 class="cmtt-8">&#x00A0;</span><span
cannam@86 10573 class="cmtt-8">&#x00A0;</span><span
cannam@86 10574 class="cmtt-8">&#x00A0;</span><span
cannam@86 10575 class="cmtt-8">&#x00A0;</span><span
cannam@86 10576 class="cmtt-8">&#x00A0;</span><span
cannam@86 10577 class="cmtt-8">&#x00A0;</span><span
cannam@86 10578 class="cmtt-8">&#x00A0;</span><span
cannam@86 10579 class="cmtt-8">&#x00A0;</span><span
cannam@86 10580 class="cmtt-8">&#x00A0;</span><span
cannam@86 10581 class="cmtt-8">&#x00A0;</span><span
cannam@86 10582 class="cmtt-8">&#x00A0;</span><span
cannam@86 10583 class="cmtt-8">&#x00A0;</span><span
cannam@86 10584 class="cmtt-8">&#x00A0;</span><span
cannam@86 10585 class="cmtt-8">&#x00A0;</span><span
cannam@86 10586 class="cmtt-8">&#x00A0;</span><span
cannam@86 10587 class="cmtt-8">&#x00A0;</span><span
cannam@86 10588 class="cmtt-8">&#x00A0;</span><span
cannam@86 10589 class="cmtt-8">&#x00A0;</span><span
cannam@86 10590 class="cmtt-8">&#x00A0;</span><span
cannam@86 10591 class="cmtt-8">&#x00A0;</span><span
cannam@86 10592 class="cmtt-8">&#x00A0;</span><span
cannam@86 10593 class="cmtt-8">&#x00A0;</span><span
cannam@86 10594 class="cmtt-8">&#x00A0;</span><span
cannam@86 10595 class="cmtt-8">&#x00A0;</span><span
cannam@86 10596 class="cmtt-8">&#x00A0;</span><span
cannam@86 10597 class="cmtt-8">&#x00A0;</span><span
cannam@86 10598 class="cmtt-8">&#x00A0;</span><span
cannam@86 10599 class="cmtt-8">&#x00A0;}</span>
cannam@86 10600 <br class="fancyvrb" /><a
cannam@86 10601 id="x1-110062r23"></a><span
cannam@86 10602 class="cmr-6">23</span><span
cannam@86 10603 class="cmtt-8">&#x00A0;</span><span
cannam@86 10604 class="cmtt-8">&#x00A0;</span>
cannam@86 10605 <br class="fancyvrb" /><a
cannam@86 10606 id="x1-110064r24"></a><span
cannam@86 10607 class="cmr-6">24</span><span
cannam@86 10608 class="cmtt-8">&#x00A0;</span><span
cannam@86 10609 class="cmtt-8">&#x00A0;</span><span
cannam@86 10610 class="cmtt-8">&#x00A0;</span><span
cannam@86 10611 class="cmtt-8">&#x00A0;</span><span
cannam@86 10612 class="cmtt-8">&#x00A0;</span><span
cannam@86 10613 class="cmtt-8">&#x00A0;</span><span
cannam@86 10614 class="cmtt-8">&#x00A0;</span><span
cannam@86 10615 class="cmtt-8">&#x00A0;</span><span
cannam@86 10616 class="cmtt-8">&#x00A0;</span><span
cannam@86 10617 class="cmtt-8">&#x00A0;</span><span
cannam@86 10618 class="cmtt-8">&#x00A0;</span><span
cannam@86 10619 class="cmtt-8">&#x00A0;</span><span
cannam@86 10620 class="cmtt-8">&#x00A0;</span><span
cannam@86 10621 class="cmtt-8">&#x00A0;</span><span
cannam@86 10622 class="cmtt-8">&#x00A0;</span><span
cannam@86 10623 class="cmtt-8">&#x00A0;</span><span
cannam@86 10624 class="cmtt-8">&#x00A0;</span><span
cannam@86 10625 class="cmtt-8">&#x00A0;</span><span
cannam@86 10626 class="cmtt-8">&#x00A0;</span><span
cannam@86 10627 class="cmtt-8">&#x00A0;</span><span
cannam@86 10628 class="cmtt-8">&#x00A0;</span><span
cannam@86 10629 class="cmtt-8">&#x00A0;</span><span
cannam@86 10630 class="cmtt-8">&#x00A0;</span><span
cannam@86 10631 class="cmtt-8">&#x00A0;</span><span
cannam@86 10632 class="cmtt-8">&#x00A0;</span><span
cannam@86 10633 class="cmtt-8">&#x00A0;</span><span
cannam@86 10634 class="cmtt-8">&#x00A0;}</span>
cannam@86 10635 <br class="fancyvrb" /><a
cannam@86 10636 id="x1-110066r25"></a><span
cannam@86 10637 class="cmr-6">25</span><span
cannam@86 10638 class="cmtt-8">&#x00A0;</span><span
cannam@86 10639 class="cmtt-8">&#x00A0;</span>
cannam@86 10640 <br class="fancyvrb" /><a
cannam@86 10641 id="x1-110068r26"></a><span
cannam@86 10642 class="cmr-6">26</span><span
cannam@86 10643 class="cmtt-8">&#x00A0;</span><span
cannam@86 10644 class="cmtt-8">&#x00A0;</span><span
cannam@86 10645 class="cmtt-8">&#x00A0;</span><span
cannam@86 10646 class="cmtt-8">&#x00A0;</span><span
cannam@86 10647 class="cmtt-8">&#x00A0;</span><span
cannam@86 10648 class="cmtt-8">&#x00A0;</span><span
cannam@86 10649 class="cmtt-8">&#x00A0;</span><span
cannam@86 10650 class="cmtt-8">&#x00A0;</span><span
cannam@86 10651 class="cmtt-8">&#x00A0;</span><span
cannam@86 10652 class="cmtt-8">&#x00A0;</span><span
cannam@86 10653 class="cmtt-8">&#x00A0;</span><span
cannam@86 10654 class="cmtt-8">&#x00A0;</span><span
cannam@86 10655 class="cmtt-8">&#x00A0;</span><span
cannam@86 10656 class="cmtt-8">&#x00A0;</span><span
cannam@86 10657 class="cmtt-8">&#x00A0;</span><span
cannam@86 10658 class="cmtt-8">&#x00A0;</span><span
cannam@86 10659 class="cmtt-8">&#x00A0;</span><span
cannam@86 10660 class="cmtt-8">&#x00A0;</span><span
cannam@86 10661 class="cmtt-8">&#x00A0;</span><span
cannam@86 10662 class="cmtt-8">&#x00A0;</span><span
cannam@86 10663 class="cmtt-8">&#x00A0;</span><span
cannam@86 10664 class="cmtt-8">&#x00A0;}</span>
cannam@86 10665 <br class="fancyvrb" /><a
cannam@86 10666 id="x1-110070r27"></a><span
cannam@86 10667 class="cmr-6">27</span><span
cannam@86 10668 class="cmtt-8">&#x00A0;</span><span
cannam@86 10669 class="cmtt-8">&#x00A0;</span>
cannam@86 10670 <br class="fancyvrb" /><a
cannam@86 10671 id="x1-110072r28"></a><span
cannam@86 10672 class="cmr-6">28</span><span
cannam@86 10673 class="cmtt-8">&#x00A0;</span><span
cannam@86 10674 class="cmtt-8">&#x00A0;</span><span
cannam@86 10675 class="cmtt-8">&#x00A0;</span><span
cannam@86 10676 class="cmtt-8">&#x00A0;</span><span
cannam@86 10677 class="cmtt-8">&#x00A0;</span><span
cannam@86 10678 class="cmtt-8">&#x00A0;</span><span
cannam@86 10679 class="cmtt-8">&#x00A0;</span><span
cannam@86 10680 class="cmtt-8">&#x00A0;</span><span
cannam@86 10681 class="cmtt-8">&#x00A0;</span><span
cannam@86 10682 class="cmtt-8">&#x00A0;</span><span
cannam@86 10683 class="cmtt-8">&#x00A0;</span><span
cannam@86 10684 class="cmtt-8">&#x00A0;</span><span
cannam@86 10685 class="cmtt-8">&#x00A0;</span><span
cannam@86 10686 class="cmtt-8">&#x00A0;</span><span
cannam@86 10687 class="cmtt-8">&#x00A0;</span><span
cannam@86 10688 class="cmtt-8">&#x00A0;</span><span
cannam@86 10689 class="cmtt-8">&#x00A0;}</span>
cannam@86 10690 <br class="fancyvrb" /><a
cannam@86 10691 id="x1-110074r29"></a><span
cannam@86 10692 class="cmr-6">29</span><span
cannam@86 10693 class="cmtt-8">&#x00A0;</span><span
cannam@86 10694 class="cmtt-8">&#x00A0;</span>
cannam@86 10695 <br class="fancyvrb" /><a
cannam@86 10696 id="x1-110076r30"></a><span
cannam@86 10697 class="cmr-6">30</span><span
cannam@86 10698 class="cmtt-8">&#x00A0;</span><span
cannam@86 10699 class="cmtt-8">&#x00A0;</span><span
cannam@86 10700 class="cmtt-8">&#x00A0;</span><span
cannam@86 10701 class="cmtt-8">&#x00A0;</span><span
cannam@86 10702 class="cmtt-8">&#x00A0;</span><span
cannam@86 10703 class="cmtt-8">&#x00A0;</span><span
cannam@86 10704 class="cmtt-8">&#x00A0;</span><span
cannam@86 10705 class="cmtt-8">&#x00A0;</span><span
cannam@86 10706 class="cmtt-8">&#x00A0;</span><span
cannam@86 10707 class="cmtt-8">&#x00A0;</span><span
cannam@86 10708 class="cmtt-8">&#x00A0;</span><span
cannam@86 10709 class="cmtt-8">&#x00A0;</span><span
cannam@86 10710 class="cmtt-8">&#x00A0;13)</span><span
cannam@86 10711 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 10712 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 10713 class="cmtt-8">&#x00A0;over</span><span
cannam@86 10714 class="cmtt-8">&#x00A0;the</span><span
cannam@86 10715 class="cmtt-8">&#x00A0;range</span><span
cannam@86 10716 class="cmtt-8">&#x00A0;0</span><span
cannam@86 10717 class="cmtt-8">&#x00A0;..</span><span
cannam@86 10718 class="cmtt-8">&#x00A0;([classwords\_per\_codeword]</span><span
cannam@86 10719 class="cmtt-8">&#x00A0;-</span><span
cannam@86 10720 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 10721 class="cmtt-8">&#x00A0;while</span><span
cannam@86 10722 class="cmtt-8">&#x00A0;[partition\_count]</span>
cannam@86 10723 <br class="fancyvrb" /><a
cannam@86 10724 id="x1-110078r31"></a><span
cannam@86 10725 class="cmr-6">31</span><span
cannam@86 10726 class="cmtt-8">&#x00A0;</span><span
cannam@86 10727 class="cmtt-8">&#x00A0;</span><span
cannam@86 10728 class="cmtt-8">&#x00A0;</span><span
cannam@86 10729 class="cmtt-8">&#x00A0;</span><span
cannam@86 10730 class="cmtt-8">&#x00A0;</span><span
cannam@86 10731 class="cmtt-8">&#x00A0;</span><span
cannam@86 10732 class="cmtt-8">&#x00A0;</span><span
cannam@86 10733 class="cmtt-8">&#x00A0;</span><span
cannam@86 10734 class="cmtt-8">&#x00A0;</span><span
cannam@86 10735 class="cmtt-8">&#x00A0;</span><span
cannam@86 10736 class="cmtt-8">&#x00A0;</span><span
cannam@86 10737 class="cmtt-8">&#x00A0;</span><span
cannam@86 10738 class="cmtt-8">&#x00A0;</span><span
cannam@86 10739 class="cmtt-8">&#x00A0;</span><span
cannam@86 10740 class="cmtt-8">&#x00A0;</span><span
cannam@86 10741 class="cmtt-8">&#x00A0;</span><span
cannam@86 10742 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10743 class="cmtt-8">&#x00A0;also</span><span
cannam@86 10744 class="cmtt-8">&#x00A0;less</span><span
cannam@86 10745 class="cmtt-8">&#x00A0;than</span><span
cannam@86 10746 class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
cannam@86 10747 class="cmtt-8">&#x00A0;{</span>
cannam@86 10748 <br class="fancyvrb" /><a
cannam@86 10749 id="x1-110080r32"></a><span
cannam@86 10750 class="cmr-6">32</span><span
cannam@86 10751 class="cmtt-8">&#x00A0;</span><span
cannam@86 10752 class="cmtt-8">&#x00A0;</span>
cannam@86 10753 <br class="fancyvrb" /><a
cannam@86 10754 id="x1-110082r33"></a><span
cannam@86 10755 class="cmr-6">33</span><span
cannam@86 10756 class="cmtt-8">&#x00A0;</span><span
cannam@86 10757 class="cmtt-8">&#x00A0;</span><span
cannam@86 10758 class="cmtt-8">&#x00A0;</span><span
cannam@86 10759 class="cmtt-8">&#x00A0;</span><span
cannam@86 10760 class="cmtt-8">&#x00A0;</span><span
cannam@86 10761 class="cmtt-8">&#x00A0;</span><span
cannam@86 10762 class="cmtt-8">&#x00A0;</span><span
cannam@86 10763 class="cmtt-8">&#x00A0;</span><span
cannam@86 10764 class="cmtt-8">&#x00A0;</span><span
cannam@86 10765 class="cmtt-8">&#x00A0;</span><span
cannam@86 10766 class="cmtt-8">&#x00A0;</span><span
cannam@86 10767 class="cmtt-8">&#x00A0;</span><span
cannam@86 10768 class="cmtt-8">&#x00A0;</span><span
cannam@86 10769 class="cmtt-8">&#x00A0;</span><span
cannam@86 10770 class="cmtt-8">&#x00A0;</span><span
cannam@86 10771 class="cmtt-8">&#x00A0;</span><span
cannam@86 10772 class="cmtt-8">&#x00A0;</span><span
cannam@86 10773 class="cmtt-8">&#x00A0;</span><span
cannam@86 10774 class="cmtt-8">&#x00A0;14)</span><span
cannam@86 10775 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 10776 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 10777 class="cmtt-8">&#x00A0;over</span><span
cannam@86 10778 class="cmtt-8">&#x00A0;the</span><span
cannam@86 10779 class="cmtt-8">&#x00A0;range</span><span
cannam@86 10780 class="cmtt-8">&#x00A0;0</span><span
cannam@86 10781 class="cmtt-8">&#x00A0;..</span><span
cannam@86 10782 class="cmtt-8">&#x00A0;[ch]-1</span><span
cannam@86 10783 class="cmtt-8">&#x00A0;{</span>
cannam@86 10784 <br class="fancyvrb" /><a
cannam@86 10785 id="x1-110084r34"></a><span
cannam@86 10786 class="cmr-6">34</span><span
cannam@86 10787 class="cmtt-8">&#x00A0;</span><span
cannam@86 10788 class="cmtt-8">&#x00A0;</span>
cannam@86 10789 <br class="fancyvrb" /><a
cannam@86 10790 id="x1-110086r35"></a><span
cannam@86 10791 class="cmr-6">35</span><span
cannam@86 10792 class="cmtt-8">&#x00A0;</span><span
cannam@86 10793 class="cmtt-8">&#x00A0;</span><span
cannam@86 10794 class="cmtt-8">&#x00A0;</span><span
cannam@86 10795 class="cmtt-8">&#x00A0;</span><span
cannam@86 10796 class="cmtt-8">&#x00A0;</span><span
cannam@86 10797 class="cmtt-8">&#x00A0;</span><span
cannam@86 10798 class="cmtt-8">&#x00A0;</span><span
cannam@86 10799 class="cmtt-8">&#x00A0;</span><span
cannam@86 10800 class="cmtt-8">&#x00A0;</span><span
cannam@86 10801 class="cmtt-8">&#x00A0;</span><span
cannam@86 10802 class="cmtt-8">&#x00A0;</span><span
cannam@86 10803 class="cmtt-8">&#x00A0;</span><span
cannam@86 10804 class="cmtt-8">&#x00A0;</span><span
cannam@86 10805 class="cmtt-8">&#x00A0;</span><span
cannam@86 10806 class="cmtt-8">&#x00A0;</span><span
cannam@86 10807 class="cmtt-8">&#x00A0;</span><span
cannam@86 10808 class="cmtt-8">&#x00A0;</span><span
cannam@86 10809 class="cmtt-8">&#x00A0;</span><span
cannam@86 10810 class="cmtt-8">&#x00A0;</span><span
cannam@86 10811 class="cmtt-8">&#x00A0;</span><span
cannam@86 10812 class="cmtt-8">&#x00A0;</span><span
cannam@86 10813 class="cmtt-8">&#x00A0;</span><span
cannam@86 10814 class="cmtt-8">&#x00A0;</span><span
cannam@86 10815 class="cmtt-8">&#x00A0;15)</span><span
cannam@86 10816 class="cmtt-8">&#x00A0;if</span><span
cannam@86 10817 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 10818 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 10819 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10820 class="cmtt-8">&#x00A0;not</span><span
cannam@86 10821 class="cmtt-8">&#x00A0;marked</span><span
cannam@86 10822 class="cmtt-8">&#x00A0;&#8217;do</span><span
cannam@86 10823 class="cmtt-8">&#x00A0;not</span><span
cannam@86 10824 class="cmtt-8">&#x00A0;decode&#8217;</span><span
cannam@86 10825 class="cmtt-8">&#x00A0;{</span>
cannam@86 10826 <br class="fancyvrb" /><a
cannam@86 10827 id="x1-110088r36"></a><span
cannam@86 10828 class="cmr-6">36</span><span
cannam@86 10829 class="cmtt-8">&#x00A0;</span><span
cannam@86 10830 class="cmtt-8">&#x00A0;</span>
cannam@86 10831 <br class="fancyvrb" /><a
cannam@86 10832 id="x1-110090r37"></a><span
cannam@86 10833 class="cmr-6">37</span><span
cannam@86 10834 class="cmtt-8">&#x00A0;</span><span
cannam@86 10835 class="cmtt-8">&#x00A0;</span><span
cannam@86 10836 class="cmtt-8">&#x00A0;</span><span
cannam@86 10837 class="cmtt-8">&#x00A0;</span><span
cannam@86 10838 class="cmtt-8">&#x00A0;</span><span
cannam@86 10839 class="cmtt-8">&#x00A0;</span><span
cannam@86 10840 class="cmtt-8">&#x00A0;</span><span
cannam@86 10841 class="cmtt-8">&#x00A0;</span><span
cannam@86 10842 class="cmtt-8">&#x00A0;</span><span
cannam@86 10843 class="cmtt-8">&#x00A0;</span><span
cannam@86 10844 class="cmtt-8">&#x00A0;</span><span
cannam@86 10845 class="cmtt-8">&#x00A0;</span><span
cannam@86 10846 class="cmtt-8">&#x00A0;</span><span
cannam@86 10847 class="cmtt-8">&#x00A0;</span><span
cannam@86 10848 class="cmtt-8">&#x00A0;</span><span
cannam@86 10849 class="cmtt-8">&#x00A0;</span><span
cannam@86 10850 class="cmtt-8">&#x00A0;</span><span
cannam@86 10851 class="cmtt-8">&#x00A0;</span><span
cannam@86 10852 class="cmtt-8">&#x00A0;</span><span
cannam@86 10853 class="cmtt-8">&#x00A0;</span><span
cannam@86 10854 class="cmtt-8">&#x00A0;</span><span
cannam@86 10855 class="cmtt-8">&#x00A0;</span><span
cannam@86 10856 class="cmtt-8">&#x00A0;</span><span
cannam@86 10857 class="cmtt-8">&#x00A0;</span><span
cannam@86 10858 class="cmtt-8">&#x00A0;</span><span
cannam@86 10859 class="cmtt-8">&#x00A0;</span><span
cannam@86 10860 class="cmtt-8">&#x00A0;</span><span
cannam@86 10861 class="cmtt-8">&#x00A0;</span><span
cannam@86 10862 class="cmtt-8">&#x00A0;16)</span><span
cannam@86 10863 class="cmtt-8">&#x00A0;[vqclass]</span><span
cannam@86 10864 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10865 class="cmtt-8">&#x00A0;array</span><span
cannam@86 10866 class="cmtt-8">&#x00A0;[classifications]</span><span
cannam@86 10867 class="cmtt-8">&#x00A0;element</span><span
cannam@86 10868 class="cmtt-8">&#x00A0;[j],[partition\_count]</span>
cannam@86 10869 <br class="fancyvrb" /><a
cannam@86 10870 id="x1-110092r38"></a><span
cannam@86 10871 class="cmr-6">38</span><span
cannam@86 10872 class="cmtt-8">&#x00A0;</span><span
cannam@86 10873 class="cmtt-8">&#x00A0;</span><span
cannam@86 10874 class="cmtt-8">&#x00A0;</span><span
cannam@86 10875 class="cmtt-8">&#x00A0;</span><span
cannam@86 10876 class="cmtt-8">&#x00A0;</span><span
cannam@86 10877 class="cmtt-8">&#x00A0;</span><span
cannam@86 10878 class="cmtt-8">&#x00A0;</span><span
cannam@86 10879 class="cmtt-8">&#x00A0;</span><span
cannam@86 10880 class="cmtt-8">&#x00A0;</span><span
cannam@86 10881 class="cmtt-8">&#x00A0;</span><span
cannam@86 10882 class="cmtt-8">&#x00A0;</span><span
cannam@86 10883 class="cmtt-8">&#x00A0;</span><span
cannam@86 10884 class="cmtt-8">&#x00A0;</span><span
cannam@86 10885 class="cmtt-8">&#x00A0;</span><span
cannam@86 10886 class="cmtt-8">&#x00A0;</span><span
cannam@86 10887 class="cmtt-8">&#x00A0;</span><span
cannam@86 10888 class="cmtt-8">&#x00A0;</span><span
cannam@86 10889 class="cmtt-8">&#x00A0;</span><span
cannam@86 10890 class="cmtt-8">&#x00A0;</span><span
cannam@86 10891 class="cmtt-8">&#x00A0;</span><span
cannam@86 10892 class="cmtt-8">&#x00A0;</span><span
cannam@86 10893 class="cmtt-8">&#x00A0;</span><span
cannam@86 10894 class="cmtt-8">&#x00A0;</span><span
cannam@86 10895 class="cmtt-8">&#x00A0;</span><span
cannam@86 10896 class="cmtt-8">&#x00A0;</span><span
cannam@86 10897 class="cmtt-8">&#x00A0;</span><span
cannam@86 10898 class="cmtt-8">&#x00A0;</span><span
cannam@86 10899 class="cmtt-8">&#x00A0;</span><span
cannam@86 10900 class="cmtt-8">&#x00A0;17)</span><span
cannam@86 10901 class="cmtt-8">&#x00A0;[vqbook]</span><span
cannam@86 10902 class="cmtt-8">&#x00A0;=</span><span
cannam@86 10903 class="cmtt-8">&#x00A0;array</span><span
cannam@86 10904 class="cmtt-8">&#x00A0;[residue\_books]</span><span
cannam@86 10905 class="cmtt-8">&#x00A0;element</span><span
cannam@86 10906 class="cmtt-8">&#x00A0;[vqclass],[pass]</span>
cannam@86 10907 <br class="fancyvrb" /><a
cannam@86 10908 id="x1-110094r39"></a><span
cannam@86 10909 class="cmr-6">39</span><span
cannam@86 10910 class="cmtt-8">&#x00A0;</span><span
cannam@86 10911 class="cmtt-8">&#x00A0;</span><span
cannam@86 10912 class="cmtt-8">&#x00A0;</span><span
cannam@86 10913 class="cmtt-8">&#x00A0;</span><span
cannam@86 10914 class="cmtt-8">&#x00A0;</span><span
cannam@86 10915 class="cmtt-8">&#x00A0;</span><span
cannam@86 10916 class="cmtt-8">&#x00A0;</span><span
cannam@86 10917 class="cmtt-8">&#x00A0;</span><span
cannam@86 10918 class="cmtt-8">&#x00A0;</span><span
cannam@86 10919 class="cmtt-8">&#x00A0;</span><span
cannam@86 10920 class="cmtt-8">&#x00A0;</span><span
cannam@86 10921 class="cmtt-8">&#x00A0;</span><span
cannam@86 10922 class="cmtt-8">&#x00A0;</span><span
cannam@86 10923 class="cmtt-8">&#x00A0;</span><span
cannam@86 10924 class="cmtt-8">&#x00A0;</span><span
cannam@86 10925 class="cmtt-8">&#x00A0;</span><span
cannam@86 10926 class="cmtt-8">&#x00A0;</span><span
cannam@86 10927 class="cmtt-8">&#x00A0;</span><span
cannam@86 10928 class="cmtt-8">&#x00A0;</span><span
cannam@86 10929 class="cmtt-8">&#x00A0;</span><span
cannam@86 10930 class="cmtt-8">&#x00A0;</span><span
cannam@86 10931 class="cmtt-8">&#x00A0;</span><span
cannam@86 10932 class="cmtt-8">&#x00A0;</span><span
cannam@86 10933 class="cmtt-8">&#x00A0;</span><span
cannam@86 10934 class="cmtt-8">&#x00A0;</span><span
cannam@86 10935 class="cmtt-8">&#x00A0;</span><span
cannam@86 10936 class="cmtt-8">&#x00A0;</span><span
cannam@86 10937 class="cmtt-8">&#x00A0;</span><span
cannam@86 10938 class="cmtt-8">&#x00A0;18)</span><span
cannam@86 10939 class="cmtt-8">&#x00A0;if</span><span
cannam@86 10940 class="cmtt-8">&#x00A0;([vqbook]</span><span
cannam@86 10941 class="cmtt-8">&#x00A0;is</span><span
cannam@86 10942 class="cmtt-8">&#x00A0;not</span><span
cannam@86 10943 class="cmtt-8">&#x00A0;&#8217;unused&#8217;)</span><span
cannam@86 10944 class="cmtt-8">&#x00A0;{</span>
cannam@86 10945 <br class="fancyvrb" /><a
cannam@86 10946 id="x1-110096r40"></a><span
cannam@86 10947 class="cmr-6">40</span><span
cannam@86 10948 class="cmtt-8">&#x00A0;</span><span
cannam@86 10949 class="cmtt-8">&#x00A0;</span>
cannam@86 10950 <br class="fancyvrb" /><a
cannam@86 10951 id="x1-110098r41"></a><span
cannam@86 10952 class="cmr-6">41</span><span
cannam@86 10953 class="cmtt-8">&#x00A0;</span><span
cannam@86 10954 class="cmtt-8">&#x00A0;</span><span
cannam@86 10955 class="cmtt-8">&#x00A0;</span><span
cannam@86 10956 class="cmtt-8">&#x00A0;</span><span
cannam@86 10957 class="cmtt-8">&#x00A0;</span><span
cannam@86 10958 class="cmtt-8">&#x00A0;</span><span
cannam@86 10959 class="cmtt-8">&#x00A0;</span><span
cannam@86 10960 class="cmtt-8">&#x00A0;</span><span
cannam@86 10961 class="cmtt-8">&#x00A0;</span><span
cannam@86 10962 class="cmtt-8">&#x00A0;</span><span
cannam@86 10963 class="cmtt-8">&#x00A0;</span><span
cannam@86 10964 class="cmtt-8">&#x00A0;</span><span
cannam@86 10965 class="cmtt-8">&#x00A0;</span><span
cannam@86 10966 class="cmtt-8">&#x00A0;</span><span
cannam@86 10967 class="cmtt-8">&#x00A0;</span><span
cannam@86 10968 class="cmtt-8">&#x00A0;</span><span
cannam@86 10969 class="cmtt-8">&#x00A0;</span><span
cannam@86 10970 class="cmtt-8">&#x00A0;</span><span
cannam@86 10971 class="cmtt-8">&#x00A0;</span><span
cannam@86 10972 class="cmtt-8">&#x00A0;</span><span
cannam@86 10973 class="cmtt-8">&#x00A0;</span><span
cannam@86 10974 class="cmtt-8">&#x00A0;</span><span
cannam@86 10975 class="cmtt-8">&#x00A0;</span><span
cannam@86 10976 class="cmtt-8">&#x00A0;</span><span
cannam@86 10977 class="cmtt-8">&#x00A0;</span><span
cannam@86 10978 class="cmtt-8">&#x00A0;</span><span
cannam@86 10979 class="cmtt-8">&#x00A0;</span><span
cannam@86 10980 class="cmtt-8">&#x00A0;</span><span
cannam@86 10981 class="cmtt-8">&#x00A0;</span><span
cannam@86 10982 class="cmtt-8">&#x00A0;</span><span
cannam@86 10983 class="cmtt-8">&#x00A0;</span><span
cannam@86 10984 class="cmtt-8">&#x00A0;</span><span
cannam@86 10985 class="cmtt-8">&#x00A0;</span><span
cannam@86 10986 class="cmtt-8">&#x00A0;19)</span><span
cannam@86 10987 class="cmtt-8">&#x00A0;decode</span><span
cannam@86 10988 class="cmtt-8">&#x00A0;partition</span><span
cannam@86 10989 class="cmtt-8">&#x00A0;into</span><span
cannam@86 10990 class="cmtt-8">&#x00A0;output</span><span
cannam@86 10991 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 10992 class="cmtt-8">&#x00A0;number</span><span
cannam@86 10993 class="cmtt-8">&#x00A0;[j],</span><span
cannam@86 10994 class="cmtt-8">&#x00A0;starting</span><span
cannam@86 10995 class="cmtt-8">&#x00A0;at</span><span
cannam@86 10996 class="cmtt-8">&#x00A0;scalar</span>
cannam@86 10997 <br class="fancyvrb" /><a
cannam@86 10998 id="x1-110100r42"></a><span
cannam@86 10999 class="cmr-6">42</span><span
cannam@86 11000 class="cmtt-8">&#x00A0;</span><span
cannam@86 11001 class="cmtt-8">&#x00A0;</span><span
cannam@86 11002 class="cmtt-8">&#x00A0;</span><span
cannam@86 11003 class="cmtt-8">&#x00A0;</span><span
cannam@86 11004 class="cmtt-8">&#x00A0;</span><span
cannam@86 11005 class="cmtt-8">&#x00A0;</span><span
cannam@86 11006 class="cmtt-8">&#x00A0;</span><span
cannam@86 11007 class="cmtt-8">&#x00A0;</span><span
cannam@86 11008 class="cmtt-8">&#x00A0;</span><span
cannam@86 11009 class="cmtt-8">&#x00A0;</span><span
cannam@86 11010 class="cmtt-8">&#x00A0;</span><span
cannam@86 11011 class="cmtt-8">&#x00A0;</span><span
cannam@86 11012 class="cmtt-8">&#x00A0;</span><span
cannam@86 11013 class="cmtt-8">&#x00A0;</span><span
cannam@86 11014 class="cmtt-8">&#x00A0;</span><span
cannam@86 11015 class="cmtt-8">&#x00A0;</span><span
cannam@86 11016 class="cmtt-8">&#x00A0;</span><span
cannam@86 11017 class="cmtt-8">&#x00A0;</span><span
cannam@86 11018 class="cmtt-8">&#x00A0;</span><span
cannam@86 11019 class="cmtt-8">&#x00A0;</span><span
cannam@86 11020 class="cmtt-8">&#x00A0;</span><span
cannam@86 11021 class="cmtt-8">&#x00A0;</span><span
cannam@86 11022 class="cmtt-8">&#x00A0;</span><span
cannam@86 11023 class="cmtt-8">&#x00A0;</span><span
cannam@86 11024 class="cmtt-8">&#x00A0;</span><span
cannam@86 11025 class="cmtt-8">&#x00A0;</span><span
cannam@86 11026 class="cmtt-8">&#x00A0;</span><span
cannam@86 11027 class="cmtt-8">&#x00A0;</span><span
cannam@86 11028 class="cmtt-8">&#x00A0;</span><span
cannam@86 11029 class="cmtt-8">&#x00A0;</span><span
cannam@86 11030 class="cmtt-8">&#x00A0;</span><span
cannam@86 11031 class="cmtt-8">&#x00A0;</span><span
cannam@86 11032 class="cmtt-8">&#x00A0;</span><span
cannam@86 11033 class="cmtt-8">&#x00A0;</span><span
cannam@86 11034 class="cmtt-8">&#x00A0;</span><span
cannam@86 11035 class="cmtt-8">&#x00A0;</span><span
cannam@86 11036 class="cmtt-8">&#x00A0;</span><span
cannam@86 11037 class="cmtt-8">&#x00A0;offset</span><span
cannam@86 11038 class="cmtt-8">&#x00A0;[limit\_residue\_begin]+[partition\_count]*[residue\_partition\_size]</span><span
cannam@86 11039 class="cmtt-8">&#x00A0;using</span>
cannam@86 11040 <br class="fancyvrb" /><a
cannam@86 11041 id="x1-110102r43"></a><span
cannam@86 11042 class="cmr-6">43</span><span
cannam@86 11043 class="cmtt-8">&#x00A0;</span><span
cannam@86 11044 class="cmtt-8">&#x00A0;</span><span
cannam@86 11045 class="cmtt-8">&#x00A0;</span><span
cannam@86 11046 class="cmtt-8">&#x00A0;</span><span
cannam@86 11047 class="cmtt-8">&#x00A0;</span><span
cannam@86 11048 class="cmtt-8">&#x00A0;</span><span
cannam@86 11049 class="cmtt-8">&#x00A0;</span><span
cannam@86 11050 class="cmtt-8">&#x00A0;</span><span
cannam@86 11051 class="cmtt-8">&#x00A0;</span><span
cannam@86 11052 class="cmtt-8">&#x00A0;</span><span
cannam@86 11053 class="cmtt-8">&#x00A0;</span><span
cannam@86 11054 class="cmtt-8">&#x00A0;</span><span
cannam@86 11055 class="cmtt-8">&#x00A0;</span><span
cannam@86 11056 class="cmtt-8">&#x00A0;</span><span
cannam@86 11057 class="cmtt-8">&#x00A0;</span><span
cannam@86 11058 class="cmtt-8">&#x00A0;</span><span
cannam@86 11059 class="cmtt-8">&#x00A0;</span><span
cannam@86 11060 class="cmtt-8">&#x00A0;</span><span
cannam@86 11061 class="cmtt-8">&#x00A0;</span><span
cannam@86 11062 class="cmtt-8">&#x00A0;</span><span
cannam@86 11063 class="cmtt-8">&#x00A0;</span><span
cannam@86 11064 class="cmtt-8">&#x00A0;</span><span
cannam@86 11065 class="cmtt-8">&#x00A0;</span><span
cannam@86 11066 class="cmtt-8">&#x00A0;</span><span
cannam@86 11067 class="cmtt-8">&#x00A0;</span><span
cannam@86 11068 class="cmtt-8">&#x00A0;</span><span
cannam@86 11069 class="cmtt-8">&#x00A0;</span><span
cannam@86 11070 class="cmtt-8">&#x00A0;</span><span
cannam@86 11071 class="cmtt-8">&#x00A0;</span><span
cannam@86 11072 class="cmtt-8">&#x00A0;</span><span
cannam@86 11073 class="cmtt-8">&#x00A0;</span><span
cannam@86 11074 class="cmtt-8">&#x00A0;</span><span
cannam@86 11075 class="cmtt-8">&#x00A0;</span><span
cannam@86 11076 class="cmtt-8">&#x00A0;</span><span
cannam@86 11077 class="cmtt-8">&#x00A0;</span><span
cannam@86 11078 class="cmtt-8">&#x00A0;</span><span
cannam@86 11079 class="cmtt-8">&#x00A0;</span><span
cannam@86 11080 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 11081 class="cmtt-8">&#x00A0;number</span><span
cannam@86 11082 class="cmtt-8">&#x00A0;[vqbook]</span><span
cannam@86 11083 class="cmtt-8">&#x00A0;in</span><span
cannam@86 11084 class="cmtt-8">&#x00A0;VQ</span><span
cannam@86 11085 class="cmtt-8">&#x00A0;context</span>
cannam@86 11086 <br class="fancyvrb" /><a
cannam@86 11087 id="x1-110104r44"></a><span
cannam@86 11088 class="cmr-6">44</span><span
cannam@86 11089 class="cmtt-8">&#x00A0;</span><span
cannam@86 11090 class="cmtt-8">&#x00A0;</span><span
cannam@86 11091 class="cmtt-8">&#x00A0;</span><span
cannam@86 11092 class="cmtt-8">&#x00A0;</span><span
cannam@86 11093 class="cmtt-8">&#x00A0;</span><span
cannam@86 11094 class="cmtt-8">&#x00A0;</span><span
cannam@86 11095 class="cmtt-8">&#x00A0;</span><span
cannam@86 11096 class="cmtt-8">&#x00A0;</span><span
cannam@86 11097 class="cmtt-8">&#x00A0;</span><span
cannam@86 11098 class="cmtt-8">&#x00A0;</span><span
cannam@86 11099 class="cmtt-8">&#x00A0;</span><span
cannam@86 11100 class="cmtt-8">&#x00A0;</span><span
cannam@86 11101 class="cmtt-8">&#x00A0;</span><span
cannam@86 11102 class="cmtt-8">&#x00A0;</span><span
cannam@86 11103 class="cmtt-8">&#x00A0;</span><span
cannam@86 11104 class="cmtt-8">&#x00A0;</span><span
cannam@86 11105 class="cmtt-8">&#x00A0;</span><span
cannam@86 11106 class="cmtt-8">&#x00A0;</span><span
cannam@86 11107 class="cmtt-8">&#x00A0;</span><span
cannam@86 11108 class="cmtt-8">&#x00A0;</span><span
cannam@86 11109 class="cmtt-8">&#x00A0;</span><span
cannam@86 11110 class="cmtt-8">&#x00A0;</span><span
cannam@86 11111 class="cmtt-8">&#x00A0;</span><span
cannam@86 11112 class="cmtt-8">&#x00A0;</span><span
cannam@86 11113 class="cmtt-8">&#x00A0;</span><span
cannam@86 11114 class="cmtt-8">&#x00A0;</span><span
cannam@86 11115 class="cmtt-8">&#x00A0;</span><span
cannam@86 11116 class="cmtt-8">&#x00A0;}</span>
cannam@86 11117
cannam@86 11118
cannam@86 11119
cannam@86 11120 <br class="fancyvrb" /><a
cannam@86 11121 id="x1-110106r45"></a><span
cannam@86 11122 class="cmr-6">45</span><span
cannam@86 11123 class="cmtt-8">&#x00A0;</span><span
cannam@86 11124 class="cmtt-8">&#x00A0;</span><span
cannam@86 11125 class="cmtt-8">&#x00A0;</span><span
cannam@86 11126 class="cmtt-8">&#x00A0;</span><span
cannam@86 11127 class="cmtt-8">&#x00A0;</span><span
cannam@86 11128 class="cmtt-8">&#x00A0;</span><span
cannam@86 11129 class="cmtt-8">&#x00A0;</span><span
cannam@86 11130 class="cmtt-8">&#x00A0;</span><span
cannam@86 11131 class="cmtt-8">&#x00A0;</span><span
cannam@86 11132 class="cmtt-8">&#x00A0;</span><span
cannam@86 11133 class="cmtt-8">&#x00A0;</span><span
cannam@86 11134 class="cmtt-8">&#x00A0;</span><span
cannam@86 11135 class="cmtt-8">&#x00A0;</span><span
cannam@86 11136 class="cmtt-8">&#x00A0;</span><span
cannam@86 11137 class="cmtt-8">&#x00A0;</span><span
cannam@86 11138 class="cmtt-8">&#x00A0;</span><span
cannam@86 11139 class="cmtt-8">&#x00A0;</span><span
cannam@86 11140 class="cmtt-8">&#x00A0;</span><span
cannam@86 11141 class="cmtt-8">&#x00A0;</span><span
cannam@86 11142 class="cmtt-8">&#x00A0;</span><span
cannam@86 11143 class="cmtt-8">&#x00A0;</span><span
cannam@86 11144 class="cmtt-8">&#x00A0;</span><span
cannam@86 11145 class="cmtt-8">&#x00A0;}</span>
cannam@86 11146 <br class="fancyvrb" /><a
cannam@86 11147 id="x1-110108r46"></a><span
cannam@86 11148 class="cmr-6">46</span><span
cannam@86 11149 class="cmtt-8">&#x00A0;</span><span
cannam@86 11150 class="cmtt-8">&#x00A0;</span>
cannam@86 11151 <br class="fancyvrb" /><a
cannam@86 11152 id="x1-110110r47"></a><span
cannam@86 11153 class="cmr-6">47</span><span
cannam@86 11154 class="cmtt-8">&#x00A0;</span><span
cannam@86 11155 class="cmtt-8">&#x00A0;</span><span
cannam@86 11156 class="cmtt-8">&#x00A0;</span><span
cannam@86 11157 class="cmtt-8">&#x00A0;</span><span
cannam@86 11158 class="cmtt-8">&#x00A0;</span><span
cannam@86 11159 class="cmtt-8">&#x00A0;</span><span
cannam@86 11160 class="cmtt-8">&#x00A0;</span><span
cannam@86 11161 class="cmtt-8">&#x00A0;</span><span
cannam@86 11162 class="cmtt-8">&#x00A0;</span><span
cannam@86 11163 class="cmtt-8">&#x00A0;</span><span
cannam@86 11164 class="cmtt-8">&#x00A0;</span><span
cannam@86 11165 class="cmtt-8">&#x00A0;</span><span
cannam@86 11166 class="cmtt-8">&#x00A0;</span><span
cannam@86 11167 class="cmtt-8">&#x00A0;</span><span
cannam@86 11168 class="cmtt-8">&#x00A0;</span><span
cannam@86 11169 class="cmtt-8">&#x00A0;</span><span
cannam@86 11170 class="cmtt-8">&#x00A0;</span><span
cannam@86 11171 class="cmtt-8">&#x00A0;</span><span
cannam@86 11172 class="cmtt-8">&#x00A0;20)</span><span
cannam@86 11173 class="cmtt-8">&#x00A0;increment</span><span
cannam@86 11174 class="cmtt-8">&#x00A0;[partition\_count]</span><span
cannam@86 11175 class="cmtt-8">&#x00A0;by</span><span
cannam@86 11176 class="cmtt-8">&#x00A0;one</span>
cannam@86 11177 <br class="fancyvrb" /><a
cannam@86 11178 id="x1-110112r48"></a><span
cannam@86 11179 class="cmr-6">48</span><span
cannam@86 11180 class="cmtt-8">&#x00A0;</span><span
cannam@86 11181 class="cmtt-8">&#x00A0;</span>
cannam@86 11182 <br class="fancyvrb" /><a
cannam@86 11183 id="x1-110114r49"></a><span
cannam@86 11184 class="cmr-6">49</span><span
cannam@86 11185 class="cmtt-8">&#x00A0;</span><span
cannam@86 11186 class="cmtt-8">&#x00A0;</span><span
cannam@86 11187 class="cmtt-8">&#x00A0;</span><span
cannam@86 11188 class="cmtt-8">&#x00A0;</span><span
cannam@86 11189 class="cmtt-8">&#x00A0;</span><span
cannam@86 11190 class="cmtt-8">&#x00A0;</span><span
cannam@86 11191 class="cmtt-8">&#x00A0;</span><span
cannam@86 11192 class="cmtt-8">&#x00A0;</span><span
cannam@86 11193 class="cmtt-8">&#x00A0;</span><span
cannam@86 11194 class="cmtt-8">&#x00A0;</span><span
cannam@86 11195 class="cmtt-8">&#x00A0;</span><span
cannam@86 11196 class="cmtt-8">&#x00A0;</span><span
cannam@86 11197 class="cmtt-8">&#x00A0;</span><span
cannam@86 11198 class="cmtt-8">&#x00A0;</span><span
cannam@86 11199 class="cmtt-8">&#x00A0;</span><span
cannam@86 11200 class="cmtt-8">&#x00A0;</span><span
cannam@86 11201 class="cmtt-8">&#x00A0;}</span>
cannam@86 11202 <br class="fancyvrb" /><a
cannam@86 11203 id="x1-110116r50"></a><span
cannam@86 11204 class="cmr-6">50</span><span
cannam@86 11205 class="cmtt-8">&#x00A0;</span><span
cannam@86 11206 class="cmtt-8">&#x00A0;</span><span
cannam@86 11207 class="cmtt-8">&#x00A0;</span><span
cannam@86 11208 class="cmtt-8">&#x00A0;</span><span
cannam@86 11209 class="cmtt-8">&#x00A0;</span><span
cannam@86 11210 class="cmtt-8">&#x00A0;</span><span
cannam@86 11211 class="cmtt-8">&#x00A0;</span><span
cannam@86 11212 class="cmtt-8">&#x00A0;</span><span
cannam@86 11213 class="cmtt-8">&#x00A0;</span><span
cannam@86 11214 class="cmtt-8">&#x00A0;</span><span
cannam@86 11215 class="cmtt-8">&#x00A0;</span><span
cannam@86 11216 class="cmtt-8">&#x00A0;}</span>
cannam@86 11217 <br class="fancyvrb" /><a
cannam@86 11218 id="x1-110118r51"></a><span
cannam@86 11219 class="cmr-6">51</span><span
cannam@86 11220 class="cmtt-8">&#x00A0;</span><span
cannam@86 11221 class="cmtt-8">&#x00A0;</span><span
cannam@86 11222 class="cmtt-8">&#x00A0;</span><span
cannam@86 11223 class="cmtt-8">&#x00A0;</span><span
cannam@86 11224 class="cmtt-8">&#x00A0;</span><span
cannam@86 11225 class="cmtt-8">&#x00A0;</span><span
cannam@86 11226 class="cmtt-8">&#x00A0;}</span>
cannam@86 11227 <br class="fancyvrb" /><a
cannam@86 11228 id="x1-110120r52"></a><span
cannam@86 11229 class="cmr-6">52</span><span
cannam@86 11230 class="cmtt-8">&#x00A0;</span><span
cannam@86 11231 class="cmtt-8">&#x00A0;</span>
cannam@86 11232 <br class="fancyvrb" /><a
cannam@86 11233 id="x1-110122r53"></a><span
cannam@86 11234 class="cmr-6">53</span><span
cannam@86 11235 class="cmtt-8">&#x00A0;</span><span
cannam@86 11236 class="cmtt-8">&#x00A0;</span><span
cannam@86 11237 class="cmtt-8">&#x00A0;21)</span><span
cannam@86 11238 class="cmtt-8">&#x00A0;done</span>
cannam@86 11239 <br class="fancyvrb" /><a
cannam@86 11240 id="x1-110124r54"></a><span
cannam@86 11241 class="cmr-6">54</span><span
cannam@86 11242 class="cmtt-8">&#x00A0;</span><span
cannam@86 11243 class="cmtt-8">&#x00A0;</span>
cannam@86 11244 </div>
cannam@86 11245 <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
cannam@86 11246 Decode returns the result of vector decode up to that point.
cannam@86 11247 <!--l. 350--><p class="noindent" >
cannam@86 11248 <h5 class="subsubsectionHead"><span class="titlemark">8.6.3. </span> <a
cannam@86 11249 id="x1-1110008.6.3"></a>format 0 specifics</h5>
cannam@86 11250 <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 0&#8217;
cannam@86 11251 section. The following pseudocode presents the same algorithm. Assume:
cannam@86 11252 <ul class="itemize1">
cannam@86 11253 <li class="itemize"><span
cannam@86 11254 class="cmtt-12">[n] </span>is the value in <span
cannam@86 11255 class="cmtt-12">[residue_partition_size]</span>
cannam@86 11256 </li>
cannam@86 11257 <li class="itemize"><span
cannam@86 11258 class="cmtt-12">[v] </span>is the residue vector
cannam@86 11259 </li>
cannam@86 11260 <li class="itemize"><span
cannam@86 11261 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
cannam@86 11262 <!--l. 363--><p class="noindent" >
cannam@86 11263 <div class="fancyvrb" id="fancyvrb41">
cannam@86 11264 <a
cannam@86 11265 id="x1-111002r1"></a><span
cannam@86 11266 class="cmr-6">1</span><span
cannam@86 11267 class="cmtt-8">&#x00A0;</span><span
cannam@86 11268 class="cmtt-8">&#x00A0;</span><span
cannam@86 11269 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 11270 class="cmtt-8">&#x00A0;[step]</span><span
cannam@86 11271 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11272 class="cmtt-8">&#x00A0;[n]</span><span
cannam@86 11273 class="cmtt-8">&#x00A0;/</span><span
cannam@86 11274 class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
cannam@86 11275 <br class="fancyvrb" /><a
cannam@86 11276 id="x1-111004r2"></a><span
cannam@86 11277 class="cmr-6">2</span><span
cannam@86 11278 class="cmtt-8">&#x00A0;</span><span
cannam@86 11279 class="cmtt-8">&#x00A0;</span><span
cannam@86 11280 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 11281 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 11282 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 11283 class="cmtt-8">&#x00A0;over</span><span
cannam@86 11284 class="cmtt-8">&#x00A0;the</span><span
cannam@86 11285 class="cmtt-8">&#x00A0;range</span><span
cannam@86 11286 class="cmtt-8">&#x00A0;0</span><span
cannam@86 11287 class="cmtt-8">&#x00A0;...</span><span
cannam@86 11288 class="cmtt-8">&#x00A0;[step]-1</span><span
cannam@86 11289 class="cmtt-8">&#x00A0;{</span>
cannam@86 11290 <br class="fancyvrb" /><a
cannam@86 11291 id="x1-111006r3"></a><span
cannam@86 11292 class="cmr-6">3</span><span
cannam@86 11293 class="cmtt-8">&#x00A0;</span><span
cannam@86 11294 class="cmtt-8">&#x00A0;</span>
cannam@86 11295 <br class="fancyvrb" /><a
cannam@86 11296 id="x1-111008r4"></a><span
cannam@86 11297 class="cmr-6">4</span><span
cannam@86 11298 class="cmtt-8">&#x00A0;</span><span
cannam@86 11299 class="cmtt-8">&#x00A0;</span><span
cannam@86 11300 class="cmtt-8">&#x00A0;</span><span
cannam@86 11301 class="cmtt-8">&#x00A0;</span><span
cannam@86 11302 class="cmtt-8">&#x00A0;</span><span
cannam@86 11303 class="cmtt-8">&#x00A0;</span><span
cannam@86 11304 class="cmtt-8">&#x00A0;</span><span
cannam@86 11305 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 11306 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11307 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
cannam@86 11308 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11309 class="cmtt-8">&#x00A0;read</span><span
cannam@86 11310 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11311 class="cmtt-8">&#x00A0;from</span><span
cannam@86 11312 class="cmtt-8">&#x00A0;packet</span><span
cannam@86 11313 class="cmtt-8">&#x00A0;using</span><span
cannam@86 11314 class="cmtt-8">&#x00A0;current</span><span
cannam@86 11315 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 11316 class="cmtt-8">&#x00A0;in</span><span
cannam@86 11317 class="cmtt-8">&#x00A0;VQ</span><span
cannam@86 11318 class="cmtt-8">&#x00A0;context</span>
cannam@86 11319 <br class="fancyvrb" /><a
cannam@86 11320 id="x1-111010r5"></a><span
cannam@86 11321 class="cmr-6">5</span><span
cannam@86 11322 class="cmtt-8">&#x00A0;</span><span
cannam@86 11323 class="cmtt-8">&#x00A0;</span><span
cannam@86 11324 class="cmtt-8">&#x00A0;</span><span
cannam@86 11325 class="cmtt-8">&#x00A0;</span><span
cannam@86 11326 class="cmtt-8">&#x00A0;</span><span
cannam@86 11327 class="cmtt-8">&#x00A0;</span><span
cannam@86 11328 class="cmtt-8">&#x00A0;</span><span
cannam@86 11329 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 11330 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 11331 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 11332 class="cmtt-8">&#x00A0;over</span><span
cannam@86 11333 class="cmtt-8">&#x00A0;the</span><span
cannam@86 11334 class="cmtt-8">&#x00A0;range</span><span
cannam@86 11335 class="cmtt-8">&#x00A0;0</span><span
cannam@86 11336 class="cmtt-8">&#x00A0;...</span><span
cannam@86 11337 class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
cannam@86 11338 class="cmtt-8">&#x00A0;{</span>
cannam@86 11339 <br class="fancyvrb" /><a
cannam@86 11340 id="x1-111012r6"></a><span
cannam@86 11341 class="cmr-6">6</span><span
cannam@86 11342 class="cmtt-8">&#x00A0;</span><span
cannam@86 11343 class="cmtt-8">&#x00A0;</span>
cannam@86 11344 <br class="fancyvrb" /><a
cannam@86 11345 id="x1-111014r7"></a><span
cannam@86 11346 class="cmr-6">7</span><span
cannam@86 11347 class="cmtt-8">&#x00A0;</span><span
cannam@86 11348 class="cmtt-8">&#x00A0;</span><span
cannam@86 11349 class="cmtt-8">&#x00A0;</span><span
cannam@86 11350 class="cmtt-8">&#x00A0;</span><span
cannam@86 11351 class="cmtt-8">&#x00A0;</span><span
cannam@86 11352 class="cmtt-8">&#x00A0;</span><span
cannam@86 11353 class="cmtt-8">&#x00A0;</span><span
cannam@86 11354 class="cmtt-8">&#x00A0;</span><span
cannam@86 11355 class="cmtt-8">&#x00A0;</span><span
cannam@86 11356 class="cmtt-8">&#x00A0;</span><span
cannam@86 11357 class="cmtt-8">&#x00A0;</span><span
cannam@86 11358 class="cmtt-8">&#x00A0;</span><span
cannam@86 11359 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 11360 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11361 class="cmtt-8">&#x00A0;[v]</span><span
cannam@86 11362 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11363 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
cannam@86 11364 class="cmtt-8">&#x00A0;=</span>
cannam@86 11365 <br class="fancyvrb" /><a
cannam@86 11366 id="x1-111016r8"></a><span
cannam@86 11367 class="cmr-6">8</span><span
cannam@86 11368 class="cmtt-8">&#x00A0;</span><span
cannam@86 11369 class="cmtt-8">&#x00A0; </span><span
cannam@86 11370 class="cmtt-8">&#x00A0;</span><span
cannam@86 11371 class="cmtt-8">&#x00A0;</span><span
cannam@86 11372 class="cmtt-8">&#x00A0;</span><span
cannam@86 11373 class="cmtt-8">&#x00A0;</span><span
cannam@86 11374 class="cmtt-8">&#x00A0;</span><span
cannam@86 11375 class="cmtt-8">&#x00A0;</span><span
cannam@86 11376 class="cmtt-8">&#x00A0;</span><span
cannam@86 11377 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11378 class="cmtt-8">&#x00A0;[v]</span><span
cannam@86 11379 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11380 class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
cannam@86 11381 class="cmtt-8">&#x00A0;+</span>
cannam@86 11382 <br class="fancyvrb" /><a
cannam@86 11383 id="x1-111018r9"></a><span
cannam@86 11384 class="cmr-6">9</span><span
cannam@86 11385 class="cmtt-8">&#x00A0;</span><span
cannam@86 11386 class="cmtt-8">&#x00A0;</span><span
cannam@86 11387 class="cmtt-8">&#x00A0;</span><span
cannam@86 11388 class="cmtt-8">&#x00A0;</span><span
cannam@86 11389 class="cmtt-8">&#x00A0;</span><span
cannam@86 11390 class="cmtt-8">&#x00A0;</span><span
cannam@86 11391 class="cmtt-8">&#x00A0;</span><span
cannam@86 11392 class="cmtt-8">&#x00A0;</span><span
cannam@86 11393 class="cmtt-8">&#x00A0;</span><span
cannam@86 11394 class="cmtt-8">&#x00A0;</span><span
cannam@86 11395 class="cmtt-8">&#x00A0;</span><span
cannam@86 11396 class="cmtt-8">&#x00A0;</span><span
cannam@86 11397 class="cmtt-8">&#x00A0;</span><span
cannam@86 11398 class="cmtt-8">&#x00A0;</span><span
cannam@86 11399 class="cmtt-8">&#x00A0;</span><span
cannam@86 11400 class="cmtt-8">&#x00A0;</span><span
cannam@86 11401 class="cmtt-8">&#x00A0;</span><span
cannam@86 11402 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11403 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
cannam@86 11404 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11405 class="cmtt-8">&#x00A0;[j]</span>
cannam@86 11406 <br class="fancyvrb" /><a
cannam@86 11407 id="x1-111020r10"></a><span
cannam@86 11408 class="cmr-6">10</span><span
cannam@86 11409 class="cmtt-8">&#x00A0;</span><span
cannam@86 11410 class="cmtt-8">&#x00A0;</span>
cannam@86 11411 <br class="fancyvrb" /><a
cannam@86 11412 id="x1-111022r11"></a><span
cannam@86 11413 class="cmr-6">11</span><span
cannam@86 11414 class="cmtt-8">&#x00A0;</span><span
cannam@86 11415 class="cmtt-8">&#x00A0;</span><span
cannam@86 11416 class="cmtt-8">&#x00A0;</span><span
cannam@86 11417 class="cmtt-8">&#x00A0;</span><span
cannam@86 11418 class="cmtt-8">&#x00A0;</span><span
cannam@86 11419 class="cmtt-8">&#x00A0;</span><span
cannam@86 11420 class="cmtt-8">&#x00A0;</span><span
cannam@86 11421 class="cmtt-8">&#x00A0;</span><span
cannam@86 11422 class="cmtt-8">&#x00A0;</span><span
cannam@86 11423 class="cmtt-8">&#x00A0;</span><span
cannam@86 11424 class="cmtt-8">&#x00A0;}</span>
cannam@86 11425 <br class="fancyvrb" /><a
cannam@86 11426 id="x1-111024r12"></a><span
cannam@86 11427 class="cmr-6">12</span><span
cannam@86 11428 class="cmtt-8">&#x00A0;</span><span
cannam@86 11429 class="cmtt-8">&#x00A0;</span>
cannam@86 11430 <br class="fancyvrb" /><a
cannam@86 11431 id="x1-111026r13"></a><span
cannam@86 11432 class="cmr-6">13</span><span
cannam@86 11433 class="cmtt-8">&#x00A0;</span><span
cannam@86 11434 class="cmtt-8">&#x00A0;</span><span
cannam@86 11435 class="cmtt-8">&#x00A0;</span><span
cannam@86 11436 class="cmtt-8">&#x00A0;</span><span
cannam@86 11437 class="cmtt-8">&#x00A0;</span><span
cannam@86 11438 class="cmtt-8">&#x00A0;}</span>
cannam@86 11439 <br class="fancyvrb" /><a
cannam@86 11440 id="x1-111028r14"></a><span
cannam@86 11441 class="cmr-6">14</span><span
cannam@86 11442 class="cmtt-8">&#x00A0;</span><span
cannam@86 11443 class="cmtt-8">&#x00A0;</span>
cannam@86 11444 <br class="fancyvrb" /><a
cannam@86 11445 id="x1-111030r15"></a><span
cannam@86 11446 class="cmr-6">15</span><span
cannam@86 11447 class="cmtt-8">&#x00A0;</span><span
cannam@86 11448 class="cmtt-8">&#x00A0;</span><span
cannam@86 11449 class="cmtt-8">&#x00A0;</span><span
cannam@86 11450 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 11451 class="cmtt-8">&#x00A0;done</span>
cannam@86 11452 <br class="fancyvrb" /><a
cannam@86 11453 id="x1-111032r16"></a><span
cannam@86 11454 class="cmr-6">16</span><span
cannam@86 11455 class="cmtt-8">&#x00A0;</span><span
cannam@86 11456 class="cmtt-8">&#x00A0;</span>
cannam@86 11457
cannam@86 11458
cannam@86 11459
cannam@86 11460 </div>
cannam@86 11461 <!--l. 384--><p class="noindent" >
cannam@86 11462 <h5 class="subsubsectionHead"><span class="titlemark">8.6.4. </span> <a
cannam@86 11463 id="x1-1120008.6.4"></a>format 1 specifics</h5>
cannam@86 11464 <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 1&#8217;
cannam@86 11465 section. The following pseudocode presents the same algorithm. Assume:
cannam@86 11466 <ul class="itemize1">
cannam@86 11467 <li class="itemize"><span
cannam@86 11468 class="cmtt-12">[n] </span>is the value in <span
cannam@86 11469 class="cmtt-12">[residue_partition_size]</span>
cannam@86 11470 </li>
cannam@86 11471 <li class="itemize"><span
cannam@86 11472 class="cmtt-12">[v] </span>is the residue vector
cannam@86 11473 </li>
cannam@86 11474 <li class="itemize"><span
cannam@86 11475 class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
cannam@86 11476 <!--l. 398--><p class="noindent" >
cannam@86 11477 <div class="fancyvrb" id="fancyvrb42">
cannam@86 11478 <a
cannam@86 11479 id="x1-112002r1"></a><span
cannam@86 11480 class="cmr-6">1</span><span
cannam@86 11481 class="cmtt-8">&#x00A0;</span><span
cannam@86 11482 class="cmtt-8">&#x00A0;</span><span
cannam@86 11483 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 11484 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 11485 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11486 class="cmtt-8">&#x00A0;0</span>
cannam@86 11487 <br class="fancyvrb" /><a
cannam@86 11488 id="x1-112004r2"></a><span
cannam@86 11489 class="cmr-6">2</span><span
cannam@86 11490 class="cmtt-8">&#x00A0;</span><span
cannam@86 11491 class="cmtt-8">&#x00A0;</span><span
cannam@86 11492 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 11493 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11494 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
cannam@86 11495 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11496 class="cmtt-8">&#x00A0;read</span><span
cannam@86 11497 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11498 class="cmtt-8">&#x00A0;from</span><span
cannam@86 11499 class="cmtt-8">&#x00A0;packet</span><span
cannam@86 11500 class="cmtt-8">&#x00A0;using</span><span
cannam@86 11501 class="cmtt-8">&#x00A0;current</span><span
cannam@86 11502 class="cmtt-8">&#x00A0;codebook</span><span
cannam@86 11503 class="cmtt-8">&#x00A0;in</span><span
cannam@86 11504 class="cmtt-8">&#x00A0;VQ</span><span
cannam@86 11505 class="cmtt-8">&#x00A0;context</span>
cannam@86 11506 <br class="fancyvrb" /><a
cannam@86 11507 id="x1-112006r3"></a><span
cannam@86 11508 class="cmr-6">3</span><span
cannam@86 11509 class="cmtt-8">&#x00A0;</span><span
cannam@86 11510 class="cmtt-8">&#x00A0;</span><span
cannam@86 11511 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 11512 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 11513 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 11514 class="cmtt-8">&#x00A0;over</span><span
cannam@86 11515 class="cmtt-8">&#x00A0;the</span><span
cannam@86 11516 class="cmtt-8">&#x00A0;range</span><span
cannam@86 11517 class="cmtt-8">&#x00A0;0</span><span
cannam@86 11518 class="cmtt-8">&#x00A0;...</span><span
cannam@86 11519 class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
cannam@86 11520 class="cmtt-8">&#x00A0;{</span>
cannam@86 11521 <br class="fancyvrb" /><a
cannam@86 11522 id="x1-112008r4"></a><span
cannam@86 11523 class="cmr-6">4</span><span
cannam@86 11524 class="cmtt-8">&#x00A0;</span><span
cannam@86 11525 class="cmtt-8">&#x00A0;</span>
cannam@86 11526 <br class="fancyvrb" /><a
cannam@86 11527 id="x1-112010r5"></a><span
cannam@86 11528 class="cmr-6">5</span><span
cannam@86 11529 class="cmtt-8">&#x00A0;</span><span
cannam@86 11530 class="cmtt-8">&#x00A0;</span><span
cannam@86 11531 class="cmtt-8">&#x00A0;</span><span
cannam@86 11532 class="cmtt-8">&#x00A0;</span><span
cannam@86 11533 class="cmtt-8">&#x00A0;</span><span
cannam@86 11534 class="cmtt-8">&#x00A0;</span><span
cannam@86 11535 class="cmtt-8">&#x00A0;</span><span
cannam@86 11536 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 11537 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11538 class="cmtt-8">&#x00A0;[v]</span><span
cannam@86 11539 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11540 class="cmtt-8">&#x00A0;([offset]+[i])</span><span
cannam@86 11541 class="cmtt-8">&#x00A0;=</span>
cannam@86 11542 <br class="fancyvrb" /><a
cannam@86 11543 id="x1-112012r6"></a><span
cannam@86 11544 class="cmr-6">6</span><span
cannam@86 11545 class="cmtt-8">&#x00A0;</span><span
cannam@86 11546 class="cmtt-8">&#x00A0; </span><span
cannam@86 11547 class="cmtt-8">&#x00A0;</span><span
cannam@86 11548 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11549 class="cmtt-8">&#x00A0;[v]</span><span
cannam@86 11550 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11551 class="cmtt-8">&#x00A0;([offset]+[i])</span><span
cannam@86 11552 class="cmtt-8">&#x00A0;+</span>
cannam@86 11553 <br class="fancyvrb" /><a
cannam@86 11554 id="x1-112014r7"></a><span
cannam@86 11555 class="cmr-6">7</span><span
cannam@86 11556 class="cmtt-8">&#x00A0;</span><span
cannam@86 11557 class="cmtt-8">&#x00A0;</span><span
cannam@86 11558 class="cmtt-8">&#x00A0;</span><span
cannam@86 11559 class="cmtt-8">&#x00A0;</span><span
cannam@86 11560 class="cmtt-8">&#x00A0;</span><span
cannam@86 11561 class="cmtt-8">&#x00A0;</span><span
cannam@86 11562 class="cmtt-8">&#x00A0;</span><span
cannam@86 11563 class="cmtt-8">&#x00A0;</span><span
cannam@86 11564 class="cmtt-8">&#x00A0;</span><span
cannam@86 11565 class="cmtt-8">&#x00A0;</span><span
cannam@86 11566 class="cmtt-8">&#x00A0;</span><span
cannam@86 11567 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11568 class="cmtt-8">&#x00A0;[entry\_temp]</span><span
cannam@86 11569 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11570 class="cmtt-8">&#x00A0;[j]</span>
cannam@86 11571 <br class="fancyvrb" /><a
cannam@86 11572 id="x1-112016r8"></a><span
cannam@86 11573 class="cmr-6">8</span><span
cannam@86 11574 class="cmtt-8">&#x00A0;</span><span
cannam@86 11575 class="cmtt-8">&#x00A0;</span><span
cannam@86 11576 class="cmtt-8">&#x00A0;</span><span
cannam@86 11577 class="cmtt-8">&#x00A0;</span><span
cannam@86 11578 class="cmtt-8">&#x00A0;</span><span
cannam@86 11579 class="cmtt-8">&#x00A0;</span><span
cannam@86 11580 class="cmtt-8">&#x00A0;</span><span
cannam@86 11581 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 11582 class="cmtt-8">&#x00A0;increment</span><span
cannam@86 11583 class="cmtt-8">&#x00A0;[i]</span>
cannam@86 11584 <br class="fancyvrb" /><a
cannam@86 11585 id="x1-112018r9"></a><span
cannam@86 11586 class="cmr-6">9</span><span
cannam@86 11587 class="cmtt-8">&#x00A0;</span><span
cannam@86 11588 class="cmtt-8">&#x00A0;</span>
cannam@86 11589 <br class="fancyvrb" /><a
cannam@86 11590 id="x1-112020r10"></a><span
cannam@86 11591 class="cmr-6">10</span><span
cannam@86 11592 class="cmtt-8">&#x00A0;</span><span
cannam@86 11593 class="cmtt-8">&#x00A0;</span><span
cannam@86 11594 class="cmtt-8">&#x00A0;</span><span
cannam@86 11595 class="cmtt-8">&#x00A0;</span><span
cannam@86 11596 class="cmtt-8">&#x00A0;</span><span
cannam@86 11597 class="cmtt-8">&#x00A0;}</span>
cannam@86 11598 <br class="fancyvrb" /><a
cannam@86 11599 id="x1-112022r11"></a><span
cannam@86 11600 class="cmr-6">11</span><span
cannam@86 11601 class="cmtt-8">&#x00A0;</span><span
cannam@86 11602 class="cmtt-8">&#x00A0;</span>
cannam@86 11603 <br class="fancyvrb" /><a
cannam@86 11604 id="x1-112024r12"></a><span
cannam@86 11605 class="cmr-6">12</span><span
cannam@86 11606 class="cmtt-8">&#x00A0;</span><span
cannam@86 11607 class="cmtt-8">&#x00A0;</span><span
cannam@86 11608 class="cmtt-8">&#x00A0;</span><span
cannam@86 11609 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 11610 class="cmtt-8">&#x00A0;if</span><span
cannam@86 11611 class="cmtt-8">&#x00A0;(</span><span
cannam@86 11612 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 11613 class="cmtt-8">&#x00A0;is</span><span
cannam@86 11614 class="cmtt-8">&#x00A0;less</span><span
cannam@86 11615 class="cmtt-8">&#x00A0;than</span><span
cannam@86 11616 class="cmtt-8">&#x00A0;[n]</span><span
cannam@86 11617 class="cmtt-8">&#x00A0;)</span><span
cannam@86 11618 class="cmtt-8">&#x00A0;continue</span><span
cannam@86 11619 class="cmtt-8">&#x00A0;at</span><span
cannam@86 11620 class="cmtt-8">&#x00A0;step</span><span
cannam@86 11621 class="cmtt-8">&#x00A0;2</span>
cannam@86 11622 <br class="fancyvrb" /><a
cannam@86 11623 id="x1-112026r13"></a><span
cannam@86 11624 class="cmr-6">13</span><span
cannam@86 11625 class="cmtt-8">&#x00A0;</span><span
cannam@86 11626 class="cmtt-8">&#x00A0;</span><span
cannam@86 11627 class="cmtt-8">&#x00A0;</span><span
cannam@86 11628 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 11629 class="cmtt-8">&#x00A0;done</span>
cannam@86 11630 </div>
cannam@86 11631 <!--l. 416--><p class="noindent" >
cannam@86 11632 <h5 class="subsubsectionHead"><span class="titlemark">8.6.5. </span> <a
cannam@86 11633 id="x1-1130008.6.5"></a>format 2 specifics</h5>
cannam@86 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
cannam@86 11635 additional post-decode step after a normal format 1 decode.
cannam@86 11636
cannam@86 11637
cannam@86 11638
cannam@86 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
cannam@86 11640 &#8217;do not decode&#8217;, no decode occurrs. However, if at least one vector is to be decoded, all
cannam@86 11641 the vectors are decoded. We then request normal format 1 to decode a single vector
cannam@86 11642 representing all output channels, rather than a vector for each channel. After decode,
cannam@86 11643 deinterleave the vector into independent vectors, one for each output channel. That
cannam@86 11644 is:
cannam@86 11645 <!--l. 429--><p class="noindent" >
cannam@86 11646 <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
cannam@86 11647 1. </dt><dd
cannam@86 11648 class="enumerate-enumitem">If all vectors 0 through <span
cannam@86 11649 class="cmti-12">ch</span>-1 are marked &#8217;do not decode&#8217;, allocate and clear a single
cannam@86 11650 vector <span
cannam@86 11651 class="cmtt-12">[v]</span>of length <span
cannam@86 11652 class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
cannam@86 11653 step.
cannam@86 11654 </dd><dt class="enumerate-enumitem">
cannam@86 11655 2. </dt><dd
cannam@86 11656 class="enumerate-enumitem">Rather than performing format 1 decode to produce <span
cannam@86 11657 class="cmti-12">ch </span>vectors of length <span
cannam@86 11658 class="cmti-12">n </span>each, call
cannam@86 11659 format 1 decode to produce a single vector <span
cannam@86 11660 class="cmtt-12">[v] </span>of length <span
cannam@86 11661 class="cmti-12">ch*n</span>.
cannam@86 11662 </dd><dt class="enumerate-enumitem">
cannam@86 11663 3. </dt><dd
cannam@86 11664 class="enumerate-enumitem">Post decode: Deinterleave the single vector <span
cannam@86 11665 class="cmtt-12">[v] </span>returned by format 1 decode as
cannam@86 11666 described above into <span
cannam@86 11667 class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
cannam@86 11668 to:
cannam@86 11669 <div class="fancyvrb" id="fancyvrb43">
cannam@86 11670 <a
cannam@86 11671 id="x1-113005r1"></a><span
cannam@86 11672 class="cmr-6">1</span><span
cannam@86 11673 class="cmtt-8">&#x00A0;</span><span
cannam@86 11674 class="cmtt-8">&#x00A0;</span><span
cannam@86 11675 class="cmtt-8">&#x00A0;</span><span
cannam@86 11676 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 11677 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 11678 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 11679 class="cmtt-8">&#x00A0;over</span><span
cannam@86 11680 class="cmtt-8">&#x00A0;the</span><span
cannam@86 11681 class="cmtt-8">&#x00A0;range</span><span
cannam@86 11682 class="cmtt-8">&#x00A0;0</span><span
cannam@86 11683 class="cmtt-8">&#x00A0;...</span><span
cannam@86 11684 class="cmtt-8">&#x00A0;[n]-1</span><span
cannam@86 11685 class="cmtt-8">&#x00A0;{</span>
cannam@86 11686 <br class="fancyvrb" /><a
cannam@86 11687 id="x1-113007r2"></a><span
cannam@86 11688 class="cmr-6">2</span><span
cannam@86 11689 class="cmtt-8">&#x00A0;</span><span
cannam@86 11690 class="cmtt-8">&#x00A0;</span>
cannam@86 11691 <br class="fancyvrb" /><a
cannam@86 11692 id="x1-113009r3"></a><span
cannam@86 11693 class="cmr-6">3</span><span
cannam@86 11694 class="cmtt-8">&#x00A0;</span><span
cannam@86 11695 class="cmtt-8">&#x00A0;</span><span
cannam@86 11696 class="cmtt-8">&#x00A0;</span><span
cannam@86 11697 class="cmtt-8">&#x00A0;</span><span
cannam@86 11698 class="cmtt-8">&#x00A0;</span><span
cannam@86 11699 class="cmtt-8">&#x00A0;</span><span
cannam@86 11700 class="cmtt-8">&#x00A0;</span><span
cannam@86 11701 class="cmtt-8">&#x00A0;</span><span
cannam@86 11702 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 11703 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 11704 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 11705 class="cmtt-8">&#x00A0;over</span><span
cannam@86 11706 class="cmtt-8">&#x00A0;the</span><span
cannam@86 11707 class="cmtt-8">&#x00A0;range</span><span
cannam@86 11708 class="cmtt-8">&#x00A0;0</span><span
cannam@86 11709 class="cmtt-8">&#x00A0;...</span><span
cannam@86 11710 class="cmtt-8">&#x00A0;[ch]-1</span><span
cannam@86 11711 class="cmtt-8">&#x00A0;{</span>
cannam@86 11712 <br class="fancyvrb" /><a
cannam@86 11713 id="x1-113011r4"></a><span
cannam@86 11714 class="cmr-6">4</span><span
cannam@86 11715 class="cmtt-8">&#x00A0;</span><span
cannam@86 11716 class="cmtt-8">&#x00A0;</span>
cannam@86 11717 <br class="fancyvrb" /><a
cannam@86 11718 id="x1-113013r5"></a><span
cannam@86 11719 class="cmr-6">5</span><span
cannam@86 11720 class="cmtt-8">&#x00A0;</span><span
cannam@86 11721 class="cmtt-8">&#x00A0;</span><span
cannam@86 11722 class="cmtt-8">&#x00A0;</span><span
cannam@86 11723 class="cmtt-8">&#x00A0;</span><span
cannam@86 11724 class="cmtt-8">&#x00A0;</span><span
cannam@86 11725 class="cmtt-8">&#x00A0;</span><span
cannam@86 11726 class="cmtt-8">&#x00A0;</span><span
cannam@86 11727 class="cmtt-8">&#x00A0;</span><span
cannam@86 11728 class="cmtt-8">&#x00A0;</span><span
cannam@86 11729 class="cmtt-8">&#x00A0;</span><span
cannam@86 11730 class="cmtt-8">&#x00A0;</span><span
cannam@86 11731 class="cmtt-8">&#x00A0;</span><span
cannam@86 11732 class="cmtt-8">&#x00A0;</span><span
cannam@86 11733 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 11734 class="cmtt-8">&#x00A0;output</span><span
cannam@86 11735 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11736 class="cmtt-8">&#x00A0;number</span><span
cannam@86 11737 class="cmtt-8">&#x00A0;[j]</span><span
cannam@86 11738 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11739 class="cmtt-8">&#x00A0;[i]</span><span
cannam@86 11740 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11741 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 11742 class="cmtt-8">&#x00A0;[v]</span><span
cannam@86 11743 class="cmtt-8">&#x00A0;element</span><span
cannam@86 11744 class="cmtt-8">&#x00A0;([i]</span><span
cannam@86 11745 class="cmtt-8">&#x00A0;*</span><span
cannam@86 11746 class="cmtt-8">&#x00A0;[ch]</span><span
cannam@86 11747 class="cmtt-8">&#x00A0;+</span><span
cannam@86 11748 class="cmtt-8">&#x00A0;[j])</span>
cannam@86 11749 <br class="fancyvrb" /><a
cannam@86 11750 id="x1-113015r6"></a><span
cannam@86 11751 class="cmr-6">6</span><span
cannam@86 11752 class="cmtt-8">&#x00A0;</span><span
cannam@86 11753 class="cmtt-8">&#x00A0;</span>
cannam@86 11754 <br class="fancyvrb" /><a
cannam@86 11755 id="x1-113017r7"></a><span
cannam@86 11756 class="cmr-6">7</span><span
cannam@86 11757 class="cmtt-8">&#x00A0;</span><span
cannam@86 11758 class="cmtt-8">&#x00A0;</span><span
cannam@86 11759 class="cmtt-8">&#x00A0;</span><span
cannam@86 11760 class="cmtt-8">&#x00A0;</span><span
cannam@86 11761 class="cmtt-8">&#x00A0;</span><span
cannam@86 11762 class="cmtt-8">&#x00A0;</span><span
cannam@86 11763 class="cmtt-8">&#x00A0;</span><span
cannam@86 11764 class="cmtt-8">&#x00A0;</span><span
cannam@86 11765 class="cmtt-8">&#x00A0;</span><span
cannam@86 11766 class="cmtt-8">&#x00A0;</span><span
cannam@86 11767 class="cmtt-8">&#x00A0;</span><span
cannam@86 11768 class="cmtt-8">&#x00A0;}</span>
cannam@86 11769 <br class="fancyvrb" /><a
cannam@86 11770 id="x1-113019r8"></a><span
cannam@86 11771 class="cmr-6">8</span><span
cannam@86 11772 class="cmtt-8">&#x00A0;</span><span
cannam@86 11773 class="cmtt-8">&#x00A0;</span><span
cannam@86 11774 class="cmtt-8">&#x00A0;</span><span
cannam@86 11775 class="cmtt-8">&#x00A0;</span><span
cannam@86 11776 class="cmtt-8">&#x00A0;</span><span
cannam@86 11777 class="cmtt-8">&#x00A0;</span><span
cannam@86 11778 class="cmtt-8">&#x00A0;}</span>
cannam@86 11779 <br class="fancyvrb" /><a
cannam@86 11780 id="x1-113021r9"></a><span
cannam@86 11781 class="cmr-6">9</span><span
cannam@86 11782 class="cmtt-8">&#x00A0;</span><span
cannam@86 11783 class="cmtt-8">&#x00A0;</span>
cannam@86 11784 <br class="fancyvrb" /><a
cannam@86 11785 id="x1-113023r10"></a><span
cannam@86 11786 class="cmr-6">10</span><span
cannam@86 11787 class="cmtt-8">&#x00A0;</span><span
cannam@86 11788 class="cmtt-8">&#x00A0;</span><span
cannam@86 11789 class="cmtt-8">&#x00A0;</span><span
cannam@86 11790 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 11791 class="cmtt-8">&#x00A0;done</span>
cannam@86 11792 </div>
cannam@86 11793 </dd></dl>
cannam@86 11794
cannam@86 11795
cannam@86 11796
cannam@86 11797
cannam@86 11798
cannam@86 11799
cannam@86 11800 <h3 class="sectionHead"><span class="titlemark">9. </span> <a
cannam@86 11801 id="x1-1140009"></a>Helper equations</h3>
cannam@86 11802 <!--l. 6--><p class="noindent" >
cannam@86 11803 <h4 class="subsectionHead"><span class="titlemark">9.1. </span> <a
cannam@86 11804 id="x1-1150009.1"></a>Overview</h4>
cannam@86 11805 <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
cannam@86 11806 cluttering up the main specification documents, they are defined here and referenced where
cannam@86 11807 appropriate.
cannam@86 11808 <!--l. 13--><p class="noindent" >
cannam@86 11809 <h4 class="subsectionHead"><span class="titlemark">9.2. </span> <a
cannam@86 11810 id="x1-1160009.2"></a>Functions</h4>
cannam@86 11811 <!--l. 15--><p class="noindent" >
cannam@86 11812 <h5 class="subsubsectionHead"><span class="titlemark">9.2.1. </span> <a
cannam@86 11813 id="x1-1170009.2.1"></a>ilog</h5>
cannam@86 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
cannam@86 11815 two&#8217;s complement integer value <span
cannam@86 11816 class="cmtt-12">[x]</span>. Values of <span
cannam@86 11817 class="cmtt-12">[x] </span>less than zero are defined to return
cannam@86 11818 zero.
cannam@86 11819 <!--l. 20--><p class="noindent" >
cannam@86 11820 <div class="fancyvrb" id="fancyvrb44">
cannam@86 11821 <a
cannam@86 11822 id="x1-117002r1"></a><span
cannam@86 11823 class="cmr-6">1</span><span
cannam@86 11824 class="cmtt-8">&#x00A0;</span><span
cannam@86 11825 class="cmtt-8">&#x00A0;</span><span
cannam@86 11826 class="cmtt-8">&#x00A0;</span><span
cannam@86 11827 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 11828 class="cmtt-8">&#x00A0;[return\_value]</span><span
cannam@86 11829 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11830 class="cmtt-8">&#x00A0;0;</span>
cannam@86 11831 <br class="fancyvrb" /><a
cannam@86 11832 id="x1-117004r2"></a><span
cannam@86 11833 class="cmr-6">2</span><span
cannam@86 11834 class="cmtt-8">&#x00A0;</span><span
cannam@86 11835 class="cmtt-8">&#x00A0;</span><span
cannam@86 11836 class="cmtt-8">&#x00A0;</span><span
cannam@86 11837 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 11838 class="cmtt-8">&#x00A0;if</span><span
cannam@86 11839 class="cmtt-8">&#x00A0;(</span><span
cannam@86 11840 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 11841 class="cmtt-8">&#x00A0;is</span><span
cannam@86 11842 class="cmtt-8">&#x00A0;greater</span><span
cannam@86 11843 class="cmtt-8">&#x00A0;than</span><span
cannam@86 11844 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 11845 class="cmtt-8">&#x00A0;)</span><span
cannam@86 11846 class="cmtt-8">&#x00A0;{</span>
cannam@86 11847 <br class="fancyvrb" /><a
cannam@86 11848 id="x1-117006r3"></a><span
cannam@86 11849 class="cmr-6">3</span><span
cannam@86 11850 class="cmtt-8">&#x00A0;</span><span
cannam@86 11851 class="cmtt-8">&#x00A0;</span>
cannam@86 11852 <br class="fancyvrb" /><a
cannam@86 11853 id="x1-117008r4"></a><span
cannam@86 11854 class="cmr-6">4</span><span
cannam@86 11855 class="cmtt-8">&#x00A0;</span><span
cannam@86 11856 class="cmtt-8">&#x00A0;</span><span
cannam@86 11857 class="cmtt-8">&#x00A0;</span><span
cannam@86 11858 class="cmtt-8">&#x00A0;</span><span
cannam@86 11859 class="cmtt-8">&#x00A0;</span><span
cannam@86 11860 class="cmtt-8">&#x00A0;</span><span
cannam@86 11861 class="cmtt-8">&#x00A0;</span><span
cannam@86 11862 class="cmtt-8">&#x00A0;</span><span
cannam@86 11863 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 11864 class="cmtt-8">&#x00A0;increment</span><span
cannam@86 11865 class="cmtt-8">&#x00A0;[return\_value];</span>
cannam@86 11866 <br class="fancyvrb" /><a
cannam@86 11867 id="x1-117010r5"></a><span
cannam@86 11868 class="cmr-6">5</span><span
cannam@86 11869 class="cmtt-8">&#x00A0;</span><span
cannam@86 11870 class="cmtt-8">&#x00A0;</span><span
cannam@86 11871 class="cmtt-8">&#x00A0;</span><span
cannam@86 11872 class="cmtt-8">&#x00A0;</span><span
cannam@86 11873 class="cmtt-8">&#x00A0;</span><span
cannam@86 11874 class="cmtt-8">&#x00A0;</span><span
cannam@86 11875 class="cmtt-8">&#x00A0;</span><span
cannam@86 11876 class="cmtt-8">&#x00A0;</span><span
cannam@86 11877 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 11878 class="cmtt-8">&#x00A0;logical</span><span
cannam@86 11879 class="cmtt-8">&#x00A0;shift</span><span
cannam@86 11880 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 11881 class="cmtt-8">&#x00A0;one</span><span
cannam@86 11882 class="cmtt-8">&#x00A0;bit</span><span
cannam@86 11883 class="cmtt-8">&#x00A0;to</span><span
cannam@86 11884 class="cmtt-8">&#x00A0;the</span><span
cannam@86 11885 class="cmtt-8">&#x00A0;right,</span><span
cannam@86 11886 class="cmtt-8">&#x00A0;padding</span><span
cannam@86 11887 class="cmtt-8">&#x00A0;the</span><span
cannam@86 11888 class="cmtt-8">&#x00A0;MSb</span><span
cannam@86 11889 class="cmtt-8">&#x00A0;with</span><span
cannam@86 11890 class="cmtt-8">&#x00A0;zero</span>
cannam@86 11891 <br class="fancyvrb" /><a
cannam@86 11892 id="x1-117012r6"></a><span
cannam@86 11893 class="cmr-6">6</span><span
cannam@86 11894 class="cmtt-8">&#x00A0;</span><span
cannam@86 11895 class="cmtt-8">&#x00A0;</span><span
cannam@86 11896 class="cmtt-8">&#x00A0;</span><span
cannam@86 11897 class="cmtt-8">&#x00A0;</span><span
cannam@86 11898 class="cmtt-8">&#x00A0;</span><span
cannam@86 11899 class="cmtt-8">&#x00A0;</span><span
cannam@86 11900 class="cmtt-8">&#x00A0;</span><span
cannam@86 11901 class="cmtt-8">&#x00A0;</span><span
cannam@86 11902 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 11903 class="cmtt-8">&#x00A0;repeat</span><span
cannam@86 11904 class="cmtt-8">&#x00A0;at</span><span
cannam@86 11905 class="cmtt-8">&#x00A0;step</span><span
cannam@86 11906 class="cmtt-8">&#x00A0;2)</span>
cannam@86 11907 <br class="fancyvrb" /><a
cannam@86 11908 id="x1-117014r7"></a><span
cannam@86 11909 class="cmr-6">7</span><span
cannam@86 11910 class="cmtt-8">&#x00A0;</span><span
cannam@86 11911 class="cmtt-8">&#x00A0;</span>
cannam@86 11912 <br class="fancyvrb" /><a
cannam@86 11913 id="x1-117016r8"></a><span
cannam@86 11914 class="cmr-6">8</span><span
cannam@86 11915 class="cmtt-8">&#x00A0;</span><span
cannam@86 11916 class="cmtt-8">&#x00A0;</span><span
cannam@86 11917 class="cmtt-8">&#x00A0;</span><span
cannam@86 11918 class="cmtt-8">&#x00A0;</span><span
cannam@86 11919 class="cmtt-8">&#x00A0;</span><span
cannam@86 11920 class="cmtt-8">&#x00A0;</span><span
cannam@86 11921 class="cmtt-8">&#x00A0;}</span>
cannam@86 11922 <br class="fancyvrb" /><a
cannam@86 11923 id="x1-117018r9"></a><span
cannam@86 11924 class="cmr-6">9</span><span
cannam@86 11925 class="cmtt-8">&#x00A0;</span><span
cannam@86 11926 class="cmtt-8">&#x00A0;</span>
cannam@86 11927 <br class="fancyvrb" /><a
cannam@86 11928 id="x1-117020r10"></a><span
cannam@86 11929 class="cmr-6">10</span><span
cannam@86 11930 class="cmtt-8">&#x00A0;</span><span
cannam@86 11931 class="cmtt-8">&#x00A0;</span><span
cannam@86 11932 class="cmtt-8">&#x00A0;</span><span
cannam@86 11933 class="cmtt-8">&#x00A0;</span><span
cannam@86 11934 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 11935 class="cmtt-8">&#x00A0;done</span>
cannam@86 11936 </div>
cannam@86 11937
cannam@86 11938
cannam@86 11939
cannam@86 11940 <!--l. 33--><p class="noindent" >Examples:
cannam@86 11941 <ul class="itemize1">
cannam@86 11942 <li class="itemize">ilog(0) = 0;
cannam@86 11943 </li>
cannam@86 11944 <li class="itemize">ilog(1) = 1;
cannam@86 11945 </li>
cannam@86 11946 <li class="itemize">ilog(2) = 2;
cannam@86 11947 </li>
cannam@86 11948 <li class="itemize">ilog(3) = 2;
cannam@86 11949 </li>
cannam@86 11950 <li class="itemize">ilog(4) = 3;
cannam@86 11951 </li>
cannam@86 11952 <li class="itemize">ilog(7) = 3;
cannam@86 11953 </li>
cannam@86 11954 <li class="itemize">ilog(negative number) = 0;</li></ul>
cannam@86 11955 <!--l. 48--><p class="noindent" >
cannam@86 11956 <h5 class="subsubsectionHead"><span class="titlemark">9.2.2. </span> <a
cannam@86 11957 id="x1-1180009.2.2"></a>float32_unpack</h5>
cannam@86 11958 <!--l. 50--><p class="noindent" >&#8221;float32_unpack(x)&#8221; is intended to translate the packed binary representation of a Vorbis
cannam@86 11959 codebook float value into the representation used by the decoder for floating point numbers. For
cannam@86 11960 purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
cannam@86 11961 number.
cannam@86 11962 <!--l. 56--><p class="noindent" >
cannam@86 11963 <div class="fancyvrb" id="fancyvrb45">
cannam@86 11964 <a
cannam@86 11965 id="x1-118002r1"></a><span
cannam@86 11966 class="cmr-6">1</span><span
cannam@86 11967 class="cmtt-8">&#x00A0;</span><span
cannam@86 11968 class="cmtt-8">&#x00A0;</span><span
cannam@86 11969 class="cmtt-8">&#x00A0;</span><span
cannam@86 11970 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 11971 class="cmtt-8">&#x00A0;[mantissa]</span><span
cannam@86 11972 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11973 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 11974 class="cmtt-8">&#x00A0;bitwise</span><span
cannam@86 11975 class="cmtt-8">&#x00A0;AND</span><span
cannam@86 11976 class="cmtt-8">&#x00A0;0x1fffff</span><span
cannam@86 11977 class="cmtt-8">&#x00A0;(unsigned</span><span
cannam@86 11978 class="cmtt-8">&#x00A0;result)</span>
cannam@86 11979 <br class="fancyvrb" /><a
cannam@86 11980 id="x1-118004r2"></a><span
cannam@86 11981 class="cmr-6">2</span><span
cannam@86 11982 class="cmtt-8">&#x00A0;</span><span
cannam@86 11983 class="cmtt-8">&#x00A0;</span><span
cannam@86 11984 class="cmtt-8">&#x00A0;</span><span
cannam@86 11985 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 11986 class="cmtt-8">&#x00A0;[sign]</span><span
cannam@86 11987 class="cmtt-8">&#x00A0;=</span><span
cannam@86 11988 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 11989 class="cmtt-8">&#x00A0;bitwise</span><span
cannam@86 11990 class="cmtt-8">&#x00A0;AND</span><span
cannam@86 11991 class="cmtt-8">&#x00A0;0x80000000</span><span
cannam@86 11992 class="cmtt-8">&#x00A0;(unsigned</span><span
cannam@86 11993 class="cmtt-8">&#x00A0;result)</span>
cannam@86 11994 <br class="fancyvrb" /><a
cannam@86 11995 id="x1-118006r3"></a><span
cannam@86 11996 class="cmr-6">3</span><span
cannam@86 11997 class="cmtt-8">&#x00A0;</span><span
cannam@86 11998 class="cmtt-8">&#x00A0;</span><span
cannam@86 11999 class="cmtt-8">&#x00A0;</span><span
cannam@86 12000 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 12001 class="cmtt-8">&#x00A0;[exponent]</span><span
cannam@86 12002 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12003 class="cmtt-8">&#x00A0;(</span><span
cannam@86 12004 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 12005 class="cmtt-8">&#x00A0;bitwise</span><span
cannam@86 12006 class="cmtt-8">&#x00A0;AND</span><span
cannam@86 12007 class="cmtt-8">&#x00A0;0x7fe00000)</span><span
cannam@86 12008 class="cmtt-8">&#x00A0;shifted</span><span
cannam@86 12009 class="cmtt-8">&#x00A0;right</span><span
cannam@86 12010 class="cmtt-8">&#x00A0;21</span><span
cannam@86 12011 class="cmtt-8">&#x00A0;bits</span><span
cannam@86 12012 class="cmtt-8">&#x00A0;(unsigned</span><span
cannam@86 12013 class="cmtt-8">&#x00A0;result)</span>
cannam@86 12014 <br class="fancyvrb" /><a
cannam@86 12015 id="x1-118008r4"></a><span
cannam@86 12016 class="cmr-6">4</span><span
cannam@86 12017 class="cmtt-8">&#x00A0;</span><span
cannam@86 12018 class="cmtt-8">&#x00A0;</span><span
cannam@86 12019 class="cmtt-8">&#x00A0;</span><span
cannam@86 12020 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 12021 class="cmtt-8">&#x00A0;if</span><span
cannam@86 12022 class="cmtt-8">&#x00A0;(</span><span
cannam@86 12023 class="cmtt-8">&#x00A0;[sign]</span><span
cannam@86 12024 class="cmtt-8">&#x00A0;is</span><span
cannam@86 12025 class="cmtt-8">&#x00A0;nonzero</span><span
cannam@86 12026 class="cmtt-8">&#x00A0;)</span><span
cannam@86 12027 class="cmtt-8">&#x00A0;then</span><span
cannam@86 12028 class="cmtt-8">&#x00A0;negate</span><span
cannam@86 12029 class="cmtt-8">&#x00A0;[mantissa]</span>
cannam@86 12030 <br class="fancyvrb" /><a
cannam@86 12031 id="x1-118010r5"></a><span
cannam@86 12032 class="cmr-6">5</span><span
cannam@86 12033 class="cmtt-8">&#x00A0;</span><span
cannam@86 12034 class="cmtt-8">&#x00A0;</span><span
cannam@86 12035 class="cmtt-8">&#x00A0;</span><span
cannam@86 12036 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 12037 class="cmtt-8">&#x00A0;return</span><span
cannam@86 12038 class="cmtt-8">&#x00A0;[mantissa]</span><span
cannam@86 12039 class="cmtt-8">&#x00A0;*</span><span
cannam@86 12040 class="cmtt-8">&#x00A0;(</span><span
cannam@86 12041 class="cmtt-8">&#x00A0;2</span><span
cannam@86 12042 class="cmtt-8">&#x00A0;^</span><span
cannam@86 12043 class="cmtt-8">&#x00A0;(</span><span
cannam@86 12044 class="cmtt-8">&#x00A0;[exponent]</span><span
cannam@86 12045 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12046 class="cmtt-8">&#x00A0;788</span><span
cannam@86 12047 class="cmtt-8">&#x00A0;)</span><span
cannam@86 12048 class="cmtt-8">&#x00A0;)</span>
cannam@86 12049 </div>
cannam@86 12050
cannam@86 12051
cannam@86 12052
cannam@86 12053 <!--l. 66--><p class="noindent" >
cannam@86 12054 <h5 class="subsubsectionHead"><span class="titlemark">9.2.3. </span> <a
cannam@86 12055 id="x1-1190009.2.3"></a>lookup1_values</h5>
cannam@86 12056 <!--l. 68--><p class="noindent" >&#8221;lookup1_values(codebook_entries,codebook_dimensions)&#8221; is used to compute the
cannam@86 12057 correct length of the value index for a codebook VQ lookup table of lookup type 1.
cannam@86 12058 The values on this list are permuted to construct the VQ vector lookup table of size
cannam@86 12059 <span
cannam@86 12060 class="cmtt-12">[codebook_entries]</span>.
cannam@86 12061 <!--l. 74--><p class="noindent" >The return value for this function is defined to be &#8217;the greatest integer value for which
cannam@86 12062 <span
cannam@86 12063 class="cmtt-12">[return_value] </span>to the power of <span
cannam@86 12064 class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
cannam@86 12065 <span
cannam@86 12066 class="cmtt-12">[codebook_entries]</span>&#8217;.
cannam@86 12067 <!--l. 81--><p class="noindent" >
cannam@86 12068 <h5 class="subsubsectionHead"><span class="titlemark">9.2.4. </span> <a
cannam@86 12069 id="x1-1200009.2.4"></a>low_neighbor</h5>
cannam@86 12070 <!--l. 83--><p class="noindent" >&#8221;low_neighbor(v,x)&#8221; finds the position <span
cannam@86 12071 class="cmtt-12">n </span>in vector <span
cannam@86 12072 class="cmtt-12">[v] </span>of the greatest value scalar element for
cannam@86 12073 which <span
cannam@86 12074 class="cmtt-12">n </span>is less than <span
cannam@86 12075 class="cmtt-12">[x] </span>and vector <span
cannam@86 12076 class="cmtt-12">[v] </span>element <span
cannam@86 12077 class="cmtt-12">n </span>is less than vector <span
cannam@86 12078 class="cmtt-12">[v] </span>element
cannam@86 12079 <span
cannam@86 12080 class="cmtt-12">[x]</span>.
cannam@86 12081 <!--l. 88--><p class="noindent" >
cannam@86 12082 <h5 class="subsubsectionHead"><span class="titlemark">9.2.5. </span> <a
cannam@86 12083 id="x1-1210009.2.5"></a>high_neighbor</h5>
cannam@86 12084 <!--l. 90--><p class="noindent" >&#8221;high_neighbor(v,x)&#8221; finds the position <span
cannam@86 12085 class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
cannam@86 12086 which <span
cannam@86 12087 class="cmtt-12">n </span>is less than <span
cannam@86 12088 class="cmtt-12">[x] </span>and vector <span
cannam@86 12089 class="cmtt-12">[v] </span>element <span
cannam@86 12090 class="cmtt-12">n </span>is greater than vector <span
cannam@86 12091 class="cmtt-12">[v] </span>element
cannam@86 12092 <span
cannam@86 12093 class="cmtt-12">[x]</span>.
cannam@86 12094 <!--l. 97--><p class="noindent" >
cannam@86 12095 <h5 class="subsubsectionHead"><span class="titlemark">9.2.6. </span> <a
cannam@86 12096 id="x1-1220009.2.6"></a>render_point</h5>
cannam@86 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
cannam@86 12098 x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
cannam@86 12099 calculating intervening values along the line.
cannam@86 12100
cannam@86 12101
cannam@86 12102
cannam@86 12103 <!--l. 104--><p class="noindent" >
cannam@86 12104 <div class="fancyvrb" id="fancyvrb46">
cannam@86 12105 <a
cannam@86 12106 id="x1-122002r1"></a><span
cannam@86 12107 class="cmr-6">1</span><span
cannam@86 12108 class="cmtt-8">&#x00A0;</span><span
cannam@86 12109 class="cmtt-8">&#x00A0;</span><span
cannam@86 12110 class="cmtt-8">&#x00A0;</span><span
cannam@86 12111 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 12112 class="cmtt-8">&#x00A0;</span><span
cannam@86 12113 class="cmtt-8">&#x00A0;[dy]</span><span
cannam@86 12114 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12115 class="cmtt-8">&#x00A0;[y1]</span><span
cannam@86 12116 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12117 class="cmtt-8">&#x00A0;[y0]</span>
cannam@86 12118 <br class="fancyvrb" /><a
cannam@86 12119 id="x1-122004r2"></a><span
cannam@86 12120 class="cmr-6">2</span><span
cannam@86 12121 class="cmtt-8">&#x00A0;</span><span
cannam@86 12122 class="cmtt-8">&#x00A0;</span><span
cannam@86 12123 class="cmtt-8">&#x00A0;</span><span
cannam@86 12124 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 12125 class="cmtt-8">&#x00A0;[adx]</span><span
cannam@86 12126 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12127 class="cmtt-8">&#x00A0;[x1]</span><span
cannam@86 12128 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12129 class="cmtt-8">&#x00A0;[x0]</span>
cannam@86 12130 <br class="fancyvrb" /><a
cannam@86 12131 id="x1-122006r3"></a><span
cannam@86 12132 class="cmr-6">3</span><span
cannam@86 12133 class="cmtt-8">&#x00A0;</span><span
cannam@86 12134 class="cmtt-8">&#x00A0;</span><span
cannam@86 12135 class="cmtt-8">&#x00A0;</span><span
cannam@86 12136 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 12137 class="cmtt-8">&#x00A0;[ady]</span><span
cannam@86 12138 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12139 class="cmtt-8">&#x00A0;absolute</span><span
cannam@86 12140 class="cmtt-8">&#x00A0;value</span><span
cannam@86 12141 class="cmtt-8">&#x00A0;of</span><span
cannam@86 12142 class="cmtt-8">&#x00A0;[dy]</span>
cannam@86 12143 <br class="fancyvrb" /><a
cannam@86 12144 id="x1-122008r4"></a><span
cannam@86 12145 class="cmr-6">4</span><span
cannam@86 12146 class="cmtt-8">&#x00A0;</span><span
cannam@86 12147 class="cmtt-8">&#x00A0;</span><span
cannam@86 12148 class="cmtt-8">&#x00A0;</span><span
cannam@86 12149 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 12150 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12151 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12152 class="cmtt-8">&#x00A0;[ady]</span><span
cannam@86 12153 class="cmtt-8">&#x00A0;*</span><span
cannam@86 12154 class="cmtt-8">&#x00A0;([X]</span><span
cannam@86 12155 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12156 class="cmtt-8">&#x00A0;[x0])</span>
cannam@86 12157 <br class="fancyvrb" /><a
cannam@86 12158 id="x1-122010r5"></a><span
cannam@86 12159 class="cmr-6">5</span><span
cannam@86 12160 class="cmtt-8">&#x00A0;</span><span
cannam@86 12161 class="cmtt-8">&#x00A0;</span><span
cannam@86 12162 class="cmtt-8">&#x00A0;</span><span
cannam@86 12163 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 12164 class="cmtt-8">&#x00A0;[off]</span><span
cannam@86 12165 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12166 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12167 class="cmtt-8">&#x00A0;/</span><span
cannam@86 12168 class="cmtt-8">&#x00A0;[adx]</span><span
cannam@86 12169 class="cmtt-8">&#x00A0;using</span><span
cannam@86 12170 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 12171 class="cmtt-8">&#x00A0;division</span>
cannam@86 12172 <br class="fancyvrb" /><a
cannam@86 12173 id="x1-122012r6"></a><span
cannam@86 12174 class="cmr-6">6</span><span
cannam@86 12175 class="cmtt-8">&#x00A0;</span><span
cannam@86 12176 class="cmtt-8">&#x00A0;</span><span
cannam@86 12177 class="cmtt-8">&#x00A0;</span><span
cannam@86 12178 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 12179 class="cmtt-8">&#x00A0;if</span><span
cannam@86 12180 class="cmtt-8">&#x00A0;(</span><span
cannam@86 12181 class="cmtt-8">&#x00A0;[dy]</span><span
cannam@86 12182 class="cmtt-8">&#x00A0;is</span><span
cannam@86 12183 class="cmtt-8">&#x00A0;less</span><span
cannam@86 12184 class="cmtt-8">&#x00A0;than</span><span
cannam@86 12185 class="cmtt-8">&#x00A0;zero</span><span
cannam@86 12186 class="cmtt-8">&#x00A0;)</span><span
cannam@86 12187 class="cmtt-8">&#x00A0;{</span>
cannam@86 12188 <br class="fancyvrb" /><a
cannam@86 12189 id="x1-122014r7"></a><span
cannam@86 12190 class="cmr-6">7</span><span
cannam@86 12191 class="cmtt-8">&#x00A0;</span><span
cannam@86 12192 class="cmtt-8">&#x00A0;</span>
cannam@86 12193 <br class="fancyvrb" /><a
cannam@86 12194 id="x1-122016r8"></a><span
cannam@86 12195 class="cmr-6">8</span><span
cannam@86 12196 class="cmtt-8">&#x00A0;</span><span
cannam@86 12197 class="cmtt-8">&#x00A0;</span><span
cannam@86 12198 class="cmtt-8">&#x00A0;</span><span
cannam@86 12199 class="cmtt-8">&#x00A0;</span><span
cannam@86 12200 class="cmtt-8">&#x00A0;</span><span
cannam@86 12201 class="cmtt-8">&#x00A0;</span><span
cannam@86 12202 class="cmtt-8">&#x00A0;</span><span
cannam@86 12203 class="cmtt-8">&#x00A0;</span><span
cannam@86 12204 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 12205 class="cmtt-8">&#x00A0;[Y]</span><span
cannam@86 12206 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12207 class="cmtt-8">&#x00A0;[y0]</span><span
cannam@86 12208 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12209 class="cmtt-8">&#x00A0;[off]</span>
cannam@86 12210 <br class="fancyvrb" /><a
cannam@86 12211 id="x1-122018r9"></a><span
cannam@86 12212 class="cmr-6">9</span><span
cannam@86 12213 class="cmtt-8">&#x00A0;</span><span
cannam@86 12214 class="cmtt-8">&#x00A0;</span>
cannam@86 12215 <br class="fancyvrb" /><a
cannam@86 12216 id="x1-122020r10"></a><span
cannam@86 12217 class="cmr-6">10</span><span
cannam@86 12218 class="cmtt-8">&#x00A0;</span><span
cannam@86 12219 class="cmtt-8">&#x00A0;</span><span
cannam@86 12220 class="cmtt-8">&#x00A0;</span><span
cannam@86 12221 class="cmtt-8">&#x00A0;</span><span
cannam@86 12222 class="cmtt-8">&#x00A0;</span><span
cannam@86 12223 class="cmtt-8">&#x00A0;</span><span
cannam@86 12224 class="cmtt-8">&#x00A0;}</span><span
cannam@86 12225 class="cmtt-8">&#x00A0;else</span><span
cannam@86 12226 class="cmtt-8">&#x00A0;{</span>
cannam@86 12227 <br class="fancyvrb" /><a
cannam@86 12228 id="x1-122022r11"></a><span
cannam@86 12229 class="cmr-6">11</span><span
cannam@86 12230 class="cmtt-8">&#x00A0;</span><span
cannam@86 12231 class="cmtt-8">&#x00A0;</span>
cannam@86 12232 <br class="fancyvrb" /><a
cannam@86 12233 id="x1-122024r12"></a><span
cannam@86 12234 class="cmr-6">12</span><span
cannam@86 12235 class="cmtt-8">&#x00A0;</span><span
cannam@86 12236 class="cmtt-8">&#x00A0;</span><span
cannam@86 12237 class="cmtt-8">&#x00A0;</span><span
cannam@86 12238 class="cmtt-8">&#x00A0;</span><span
cannam@86 12239 class="cmtt-8">&#x00A0;</span><span
cannam@86 12240 class="cmtt-8">&#x00A0;</span><span
cannam@86 12241 class="cmtt-8">&#x00A0;</span><span
cannam@86 12242 class="cmtt-8">&#x00A0;</span><span
cannam@86 12243 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 12244 class="cmtt-8">&#x00A0;[Y]</span><span
cannam@86 12245 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12246 class="cmtt-8">&#x00A0;[y0]</span><span
cannam@86 12247 class="cmtt-8">&#x00A0;+</span><span
cannam@86 12248 class="cmtt-8">&#x00A0;[off]</span>
cannam@86 12249 <br class="fancyvrb" /><a
cannam@86 12250 id="x1-122026r13"></a><span
cannam@86 12251 class="cmr-6">13</span><span
cannam@86 12252 class="cmtt-8">&#x00A0;</span><span
cannam@86 12253 class="cmtt-8">&#x00A0;</span>
cannam@86 12254 <br class="fancyvrb" /><a
cannam@86 12255 id="x1-122028r14"></a><span
cannam@86 12256 class="cmr-6">14</span><span
cannam@86 12257 class="cmtt-8">&#x00A0;</span><span
cannam@86 12258 class="cmtt-8">&#x00A0;</span><span
cannam@86 12259 class="cmtt-8">&#x00A0;</span><span
cannam@86 12260 class="cmtt-8">&#x00A0;</span><span
cannam@86 12261 class="cmtt-8">&#x00A0;</span><span
cannam@86 12262 class="cmtt-8">&#x00A0;</span><span
cannam@86 12263 class="cmtt-8">&#x00A0;}</span>
cannam@86 12264 <br class="fancyvrb" /><a
cannam@86 12265 id="x1-122030r15"></a><span
cannam@86 12266 class="cmr-6">15</span><span
cannam@86 12267 class="cmtt-8">&#x00A0;</span><span
cannam@86 12268 class="cmtt-8">&#x00A0;</span>
cannam@86 12269 <br class="fancyvrb" /><a
cannam@86 12270 id="x1-122032r16"></a><span
cannam@86 12271 class="cmr-6">16</span><span
cannam@86 12272 class="cmtt-8">&#x00A0;</span><span
cannam@86 12273 class="cmtt-8">&#x00A0;</span><span
cannam@86 12274 class="cmtt-8">&#x00A0;</span><span
cannam@86 12275 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 12276 class="cmtt-8">&#x00A0;done</span>
cannam@86 12277 </div>
cannam@86 12278 <!--l. 125--><p class="noindent" >
cannam@86 12279 <h5 class="subsubsectionHead"><span class="titlemark">9.2.7. </span> <a
cannam@86 12280 id="x1-1230009.2.7"></a>render_line</h5>
cannam@86 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;
cannam@86 12282 to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
cannam@86 12283 been relevant elsewhere, but here we must define integer division as rounding division of both
cannam@86 12284 positive and negative numbers toward zero.
cannam@86 12285 <!--l. 134--><p class="noindent" >
cannam@86 12286 <div class="fancyvrb" id="fancyvrb47">
cannam@86 12287 <a
cannam@86 12288 id="x1-123002r1"></a><span
cannam@86 12289 class="cmr-6">1</span><span
cannam@86 12290 class="cmtt-8">&#x00A0;</span><span
cannam@86 12291 class="cmtt-8">&#x00A0;</span><span
cannam@86 12292 class="cmtt-8">&#x00A0;</span><span
cannam@86 12293 class="cmtt-8">&#x00A0;1)</span><span
cannam@86 12294 class="cmtt-8">&#x00A0;</span><span
cannam@86 12295 class="cmtt-8">&#x00A0;</span><span
cannam@86 12296 class="cmtt-8">&#x00A0;[dy]</span><span
cannam@86 12297 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12298 class="cmtt-8">&#x00A0;[y1]</span><span
cannam@86 12299 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12300 class="cmtt-8">&#x00A0;[y0]</span>
cannam@86 12301 <br class="fancyvrb" /><a
cannam@86 12302 id="x1-123004r2"></a><span
cannam@86 12303 class="cmr-6">2</span><span
cannam@86 12304 class="cmtt-8">&#x00A0;</span><span
cannam@86 12305 class="cmtt-8">&#x00A0;</span><span
cannam@86 12306 class="cmtt-8">&#x00A0;</span><span
cannam@86 12307 class="cmtt-8">&#x00A0;2)</span><span
cannam@86 12308 class="cmtt-8">&#x00A0;</span><span
cannam@86 12309 class="cmtt-8">&#x00A0;[adx]</span><span
cannam@86 12310 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12311 class="cmtt-8">&#x00A0;[x1]</span><span
cannam@86 12312 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12313 class="cmtt-8">&#x00A0;[x0]</span>
cannam@86 12314 <br class="fancyvrb" /><a
cannam@86 12315 id="x1-123006r3"></a><span
cannam@86 12316 class="cmr-6">3</span><span
cannam@86 12317 class="cmtt-8">&#x00A0;</span><span
cannam@86 12318 class="cmtt-8">&#x00A0;</span><span
cannam@86 12319 class="cmtt-8">&#x00A0;</span><span
cannam@86 12320 class="cmtt-8">&#x00A0;3)</span><span
cannam@86 12321 class="cmtt-8">&#x00A0;</span><span
cannam@86 12322 class="cmtt-8">&#x00A0;[ady]</span><span
cannam@86 12323 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12324 class="cmtt-8">&#x00A0;absolute</span><span
cannam@86 12325 class="cmtt-8">&#x00A0;value</span><span
cannam@86 12326 class="cmtt-8">&#x00A0;of</span><span
cannam@86 12327 class="cmtt-8">&#x00A0;[dy]</span>
cannam@86 12328 <br class="fancyvrb" /><a
cannam@86 12329 id="x1-123008r4"></a><span
cannam@86 12330 class="cmr-6">4</span><span
cannam@86 12331 class="cmtt-8">&#x00A0;</span><span
cannam@86 12332 class="cmtt-8">&#x00A0;</span><span
cannam@86 12333 class="cmtt-8">&#x00A0;</span><span
cannam@86 12334 class="cmtt-8">&#x00A0;4)</span><span
cannam@86 12335 class="cmtt-8">&#x00A0;[base]</span><span
cannam@86 12336 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12337 class="cmtt-8">&#x00A0;[dy]</span><span
cannam@86 12338 class="cmtt-8">&#x00A0;/</span><span
cannam@86 12339 class="cmtt-8">&#x00A0;[adx]</span><span
cannam@86 12340 class="cmtt-8">&#x00A0;using</span><span
cannam@86 12341 class="cmtt-8">&#x00A0;integer</span><span
cannam@86 12342 class="cmtt-8">&#x00A0;division</span>
cannam@86 12343 <br class="fancyvrb" /><a
cannam@86 12344 id="x1-123010r5"></a><span
cannam@86 12345 class="cmr-6">5</span><span
cannam@86 12346 class="cmtt-8">&#x00A0;</span><span
cannam@86 12347 class="cmtt-8">&#x00A0;</span><span
cannam@86 12348 class="cmtt-8">&#x00A0;</span><span
cannam@86 12349 class="cmtt-8">&#x00A0;5)</span><span
cannam@86 12350 class="cmtt-8">&#x00A0;</span><span
cannam@86 12351 class="cmtt-8">&#x00A0;</span><span
cannam@86 12352 class="cmtt-8">&#x00A0;</span><span
cannam@86 12353 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 12354 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12355 class="cmtt-8">&#x00A0;[x0]</span>
cannam@86 12356 <br class="fancyvrb" /><a
cannam@86 12357 id="x1-123012r6"></a><span
cannam@86 12358 class="cmr-6">6</span><span
cannam@86 12359 class="cmtt-8">&#x00A0;</span><span
cannam@86 12360 class="cmtt-8">&#x00A0;</span><span
cannam@86 12361 class="cmtt-8">&#x00A0;</span><span
cannam@86 12362 class="cmtt-8">&#x00A0;6)</span><span
cannam@86 12363 class="cmtt-8">&#x00A0;</span><span
cannam@86 12364 class="cmtt-8">&#x00A0;</span><span
cannam@86 12365 class="cmtt-8">&#x00A0;</span><span
cannam@86 12366 class="cmtt-8">&#x00A0;[y]</span><span
cannam@86 12367 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12368 class="cmtt-8">&#x00A0;[y0]</span>
cannam@86 12369 <br class="fancyvrb" /><a
cannam@86 12370 id="x1-123014r7"></a><span
cannam@86 12371 class="cmr-6">7</span><span
cannam@86 12372 class="cmtt-8">&#x00A0;</span><span
cannam@86 12373 class="cmtt-8">&#x00A0;</span><span
cannam@86 12374 class="cmtt-8">&#x00A0;</span><span
cannam@86 12375 class="cmtt-8">&#x00A0;7)</span><span
cannam@86 12376 class="cmtt-8">&#x00A0;</span><span
cannam@86 12377 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12378 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12379 class="cmtt-8">&#x00A0;0</span>
cannam@86 12380 <br class="fancyvrb" /><a
cannam@86 12381 id="x1-123016r8"></a><span
cannam@86 12382 class="cmr-6">8</span><span
cannam@86 12383 class="cmtt-8">&#x00A0;</span><span
cannam@86 12384 class="cmtt-8">&#x00A0;</span>
cannam@86 12385 <br class="fancyvrb" /><a
cannam@86 12386 id="x1-123018r9"></a><span
cannam@86 12387 class="cmr-6">9</span><span
cannam@86 12388 class="cmtt-8">&#x00A0;</span><span
cannam@86 12389 class="cmtt-8">&#x00A0;</span><span
cannam@86 12390 class="cmtt-8">&#x00A0;</span><span
cannam@86 12391 class="cmtt-8">&#x00A0;8)</span><span
cannam@86 12392 class="cmtt-8">&#x00A0;if</span><span
cannam@86 12393 class="cmtt-8">&#x00A0;(</span><span
cannam@86 12394 class="cmtt-8">&#x00A0;[dy]</span><span
cannam@86 12395 class="cmtt-8">&#x00A0;is</span><span
cannam@86 12396 class="cmtt-8">&#x00A0;less</span><span
cannam@86 12397 class="cmtt-8">&#x00A0;than</span><span
cannam@86 12398 class="cmtt-8">&#x00A0;0</span><span
cannam@86 12399 class="cmtt-8">&#x00A0;)</span><span
cannam@86 12400 class="cmtt-8">&#x00A0;{</span>
cannam@86 12401 <br class="fancyvrb" /><a
cannam@86 12402 id="x1-123020r10"></a><span
cannam@86 12403 class="cmr-6">10</span><span
cannam@86 12404 class="cmtt-8">&#x00A0;</span><span
cannam@86 12405 class="cmtt-8">&#x00A0;</span>
cannam@86 12406 <br class="fancyvrb" /><a
cannam@86 12407 id="x1-123022r11"></a><span
cannam@86 12408 class="cmr-6">11</span><span
cannam@86 12409 class="cmtt-8">&#x00A0;</span><span
cannam@86 12410 class="cmtt-8">&#x00A0;</span><span
cannam@86 12411 class="cmtt-8">&#x00A0;</span><span
cannam@86 12412 class="cmtt-8">&#x00A0;</span><span
cannam@86 12413 class="cmtt-8">&#x00A0;</span><span
cannam@86 12414 class="cmtt-8">&#x00A0;</span><span
cannam@86 12415 class="cmtt-8">&#x00A0;</span><span
cannam@86 12416 class="cmtt-8">&#x00A0;</span><span
cannam@86 12417 class="cmtt-8">&#x00A0;</span><span
cannam@86 12418 class="cmtt-8">&#x00A0;9)</span><span
cannam@86 12419 class="cmtt-8">&#x00A0;[sy]</span><span
cannam@86 12420 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12421 class="cmtt-8">&#x00A0;[base]</span><span
cannam@86 12422 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12423 class="cmtt-8">&#x00A0;1</span>
cannam@86 12424 <br class="fancyvrb" /><a
cannam@86 12425 id="x1-123024r12"></a><span
cannam@86 12426 class="cmr-6">12</span><span
cannam@86 12427 class="cmtt-8">&#x00A0;</span><span
cannam@86 12428 class="cmtt-8">&#x00A0;</span>
cannam@86 12429 <br class="fancyvrb" /><a
cannam@86 12430 id="x1-123026r13"></a><span
cannam@86 12431 class="cmr-6">13</span><span
cannam@86 12432 class="cmtt-8">&#x00A0;</span><span
cannam@86 12433 class="cmtt-8">&#x00A0;</span><span
cannam@86 12434 class="cmtt-8">&#x00A0;</span><span
cannam@86 12435 class="cmtt-8">&#x00A0;</span><span
cannam@86 12436 class="cmtt-8">&#x00A0;</span><span
cannam@86 12437 class="cmtt-8">&#x00A0;</span><span
cannam@86 12438 class="cmtt-8">&#x00A0;}</span><span
cannam@86 12439 class="cmtt-8">&#x00A0;else</span><span
cannam@86 12440 class="cmtt-8">&#x00A0;{</span>
cannam@86 12441 <br class="fancyvrb" /><a
cannam@86 12442 id="x1-123028r14"></a><span
cannam@86 12443 class="cmr-6">14</span><span
cannam@86 12444 class="cmtt-8">&#x00A0;</span><span
cannam@86 12445 class="cmtt-8">&#x00A0;</span>
cannam@86 12446 <br class="fancyvrb" /><a
cannam@86 12447 id="x1-123030r15"></a><span
cannam@86 12448 class="cmr-6">15</span><span
cannam@86 12449 class="cmtt-8">&#x00A0;</span><span
cannam@86 12450 class="cmtt-8">&#x00A0;</span><span
cannam@86 12451 class="cmtt-8">&#x00A0;</span><span
cannam@86 12452 class="cmtt-8">&#x00A0;</span><span
cannam@86 12453 class="cmtt-8">&#x00A0;</span><span
cannam@86 12454 class="cmtt-8">&#x00A0;</span><span
cannam@86 12455 class="cmtt-8">&#x00A0;</span><span
cannam@86 12456 class="cmtt-8">&#x00A0;</span><span
cannam@86 12457 class="cmtt-8">&#x00A0;10)</span><span
cannam@86 12458 class="cmtt-8">&#x00A0;[sy]</span><span
cannam@86 12459 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12460 class="cmtt-8">&#x00A0;[base]</span><span
cannam@86 12461 class="cmtt-8">&#x00A0;+</span><span
cannam@86 12462 class="cmtt-8">&#x00A0;1</span>
cannam@86 12463 <br class="fancyvrb" /><a
cannam@86 12464 id="x1-123032r16"></a><span
cannam@86 12465 class="cmr-6">16</span><span
cannam@86 12466 class="cmtt-8">&#x00A0;</span><span
cannam@86 12467 class="cmtt-8">&#x00A0;</span>
cannam@86 12468 <br class="fancyvrb" /><a
cannam@86 12469 id="x1-123034r17"></a><span
cannam@86 12470 class="cmr-6">17</span><span
cannam@86 12471 class="cmtt-8">&#x00A0;</span><span
cannam@86 12472 class="cmtt-8">&#x00A0;</span><span
cannam@86 12473 class="cmtt-8">&#x00A0;</span><span
cannam@86 12474 class="cmtt-8">&#x00A0;</span><span
cannam@86 12475 class="cmtt-8">&#x00A0;</span><span
cannam@86 12476 class="cmtt-8">&#x00A0;</span><span
cannam@86 12477 class="cmtt-8">&#x00A0;}</span>
cannam@86 12478 <br class="fancyvrb" /><a
cannam@86 12479 id="x1-123036r18"></a><span
cannam@86 12480 class="cmr-6">18</span><span
cannam@86 12481 class="cmtt-8">&#x00A0;</span><span
cannam@86 12482 class="cmtt-8">&#x00A0;</span>
cannam@86 12483 <br class="fancyvrb" /><a
cannam@86 12484 id="x1-123038r19"></a><span
cannam@86 12485 class="cmr-6">19</span><span
cannam@86 12486 class="cmtt-8">&#x00A0;</span><span
cannam@86 12487 class="cmtt-8">&#x00A0;</span><span
cannam@86 12488 class="cmtt-8">&#x00A0;11)</span><span
cannam@86 12489 class="cmtt-8">&#x00A0;[ady]</span><span
cannam@86 12490 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12491 class="cmtt-8">&#x00A0;[ady]</span><span
cannam@86 12492 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12493 class="cmtt-8">&#x00A0;(absolute</span><span
cannam@86 12494 class="cmtt-8">&#x00A0;value</span><span
cannam@86 12495 class="cmtt-8">&#x00A0;of</span><span
cannam@86 12496 class="cmtt-8">&#x00A0;[base])</span><span
cannam@86 12497 class="cmtt-8">&#x00A0;*</span><span
cannam@86 12498 class="cmtt-8">&#x00A0;[adx]</span>
cannam@86 12499 <br class="fancyvrb" /><a
cannam@86 12500 id="x1-123040r20"></a><span
cannam@86 12501 class="cmr-6">20</span><span
cannam@86 12502 class="cmtt-8">&#x00A0;</span><span
cannam@86 12503 class="cmtt-8">&#x00A0;</span><span
cannam@86 12504 class="cmtt-8">&#x00A0;12)</span><span
cannam@86 12505 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 12506 class="cmtt-8">&#x00A0;[v]</span><span
cannam@86 12507 class="cmtt-8">&#x00A0;element</span><span
cannam@86 12508 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 12509 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12510 class="cmtt-8">&#x00A0;[y]</span>
cannam@86 12511 <br class="fancyvrb" /><a
cannam@86 12512 id="x1-123042r21"></a><span
cannam@86 12513 class="cmr-6">21</span><span
cannam@86 12514 class="cmtt-8">&#x00A0;</span><span
cannam@86 12515 class="cmtt-8">&#x00A0;</span>
cannam@86 12516 <br class="fancyvrb" /><a
cannam@86 12517 id="x1-123044r22"></a><span
cannam@86 12518 class="cmr-6">22</span><span
cannam@86 12519 class="cmtt-8">&#x00A0;</span><span
cannam@86 12520 class="cmtt-8">&#x00A0;</span><span
cannam@86 12521 class="cmtt-8">&#x00A0;13)</span><span
cannam@86 12522 class="cmtt-8">&#x00A0;iterate</span><span
cannam@86 12523 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 12524 class="cmtt-8">&#x00A0;over</span><span
cannam@86 12525 class="cmtt-8">&#x00A0;the</span><span
cannam@86 12526 class="cmtt-8">&#x00A0;range</span><span
cannam@86 12527 class="cmtt-8">&#x00A0;[x0]+1</span><span
cannam@86 12528 class="cmtt-8">&#x00A0;...</span><span
cannam@86 12529 class="cmtt-8">&#x00A0;[x1]-1</span><span
cannam@86 12530 class="cmtt-8">&#x00A0;{</span>
cannam@86 12531
cannam@86 12532
cannam@86 12533
cannam@86 12534 <br class="fancyvrb" /><a
cannam@86 12535 id="x1-123046r23"></a><span
cannam@86 12536 class="cmr-6">23</span><span
cannam@86 12537 class="cmtt-8">&#x00A0;</span><span
cannam@86 12538 class="cmtt-8">&#x00A0;</span>
cannam@86 12539 <br class="fancyvrb" /><a
cannam@86 12540 id="x1-123048r24"></a><span
cannam@86 12541 class="cmr-6">24</span><span
cannam@86 12542 class="cmtt-8">&#x00A0;</span><span
cannam@86 12543 class="cmtt-8">&#x00A0;</span><span
cannam@86 12544 class="cmtt-8">&#x00A0;</span><span
cannam@86 12545 class="cmtt-8">&#x00A0;</span><span
cannam@86 12546 class="cmtt-8">&#x00A0;</span><span
cannam@86 12547 class="cmtt-8">&#x00A0;</span><span
cannam@86 12548 class="cmtt-8">&#x00A0;</span><span
cannam@86 12549 class="cmtt-8">&#x00A0;</span><span
cannam@86 12550 class="cmtt-8">&#x00A0;14)</span><span
cannam@86 12551 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12552 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12553 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12554 class="cmtt-8">&#x00A0;+</span><span
cannam@86 12555 class="cmtt-8">&#x00A0;[ady];</span>
cannam@86 12556 <br class="fancyvrb" /><a
cannam@86 12557 id="x1-123050r25"></a><span
cannam@86 12558 class="cmr-6">25</span><span
cannam@86 12559 class="cmtt-8">&#x00A0;</span><span
cannam@86 12560 class="cmtt-8">&#x00A0;</span><span
cannam@86 12561 class="cmtt-8">&#x00A0;</span><span
cannam@86 12562 class="cmtt-8">&#x00A0;</span><span
cannam@86 12563 class="cmtt-8">&#x00A0;</span><span
cannam@86 12564 class="cmtt-8">&#x00A0;</span><span
cannam@86 12565 class="cmtt-8">&#x00A0;</span><span
cannam@86 12566 class="cmtt-8">&#x00A0;</span><span
cannam@86 12567 class="cmtt-8">&#x00A0;15)</span><span
cannam@86 12568 class="cmtt-8">&#x00A0;if</span><span
cannam@86 12569 class="cmtt-8">&#x00A0;(</span><span
cannam@86 12570 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12571 class="cmtt-8">&#x00A0;&#x003E;=</span><span
cannam@86 12572 class="cmtt-8">&#x00A0;[adx]</span><span
cannam@86 12573 class="cmtt-8">&#x00A0;)</span><span
cannam@86 12574 class="cmtt-8">&#x00A0;{</span>
cannam@86 12575 <br class="fancyvrb" /><a
cannam@86 12576 id="x1-123052r26"></a><span
cannam@86 12577 class="cmr-6">26</span><span
cannam@86 12578 class="cmtt-8">&#x00A0;</span><span
cannam@86 12579 class="cmtt-8">&#x00A0;</span>
cannam@86 12580 <br class="fancyvrb" /><a
cannam@86 12581 id="x1-123054r27"></a><span
cannam@86 12582 class="cmr-6">27</span><span
cannam@86 12583 class="cmtt-8">&#x00A0;</span><span
cannam@86 12584 class="cmtt-8">&#x00A0;</span><span
cannam@86 12585 class="cmtt-8">&#x00A0;</span><span
cannam@86 12586 class="cmtt-8">&#x00A0;</span><span
cannam@86 12587 class="cmtt-8">&#x00A0;</span><span
cannam@86 12588 class="cmtt-8">&#x00A0;</span><span
cannam@86 12589 class="cmtt-8">&#x00A0;</span><span
cannam@86 12590 class="cmtt-8">&#x00A0;</span><span
cannam@86 12591 class="cmtt-8">&#x00A0;</span><span
cannam@86 12592 class="cmtt-8">&#x00A0;</span><span
cannam@86 12593 class="cmtt-8">&#x00A0;</span><span
cannam@86 12594 class="cmtt-8">&#x00A0;</span><span
cannam@86 12595 class="cmtt-8">&#x00A0;</span><span
cannam@86 12596 class="cmtt-8">&#x00A0;</span><span
cannam@86 12597 class="cmtt-8">&#x00A0;16)</span><span
cannam@86 12598 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12599 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12600 class="cmtt-8">&#x00A0;[err]</span><span
cannam@86 12601 class="cmtt-8">&#x00A0;-</span><span
cannam@86 12602 class="cmtt-8">&#x00A0;[adx]</span>
cannam@86 12603 <br class="fancyvrb" /><a
cannam@86 12604 id="x1-123056r28"></a><span
cannam@86 12605 class="cmr-6">28</span><span
cannam@86 12606 class="cmtt-8">&#x00A0;</span><span
cannam@86 12607 class="cmtt-8">&#x00A0;</span><span
cannam@86 12608 class="cmtt-8">&#x00A0;</span><span
cannam@86 12609 class="cmtt-8">&#x00A0;</span><span
cannam@86 12610 class="cmtt-8">&#x00A0;</span><span
cannam@86 12611 class="cmtt-8">&#x00A0;</span><span
cannam@86 12612 class="cmtt-8">&#x00A0;</span><span
cannam@86 12613 class="cmtt-8">&#x00A0;</span><span
cannam@86 12614 class="cmtt-8">&#x00A0;</span><span
cannam@86 12615 class="cmtt-8">&#x00A0;</span><span
cannam@86 12616 class="cmtt-8">&#x00A0;</span><span
cannam@86 12617 class="cmtt-8">&#x00A0;</span><span
cannam@86 12618 class="cmtt-8">&#x00A0;</span><span
cannam@86 12619 class="cmtt-8">&#x00A0;</span><span
cannam@86 12620 class="cmtt-8">&#x00A0;17)</span><span
cannam@86 12621 class="cmtt-8">&#x00A0;</span><span
cannam@86 12622 class="cmtt-8">&#x00A0;</span><span
cannam@86 12623 class="cmtt-8">&#x00A0;[y]</span><span
cannam@86 12624 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12625 class="cmtt-8">&#x00A0;[y]</span><span
cannam@86 12626 class="cmtt-8">&#x00A0;+</span><span
cannam@86 12627 class="cmtt-8">&#x00A0;[sy]</span>
cannam@86 12628 <br class="fancyvrb" /><a
cannam@86 12629 id="x1-123058r29"></a><span
cannam@86 12630 class="cmr-6">29</span><span
cannam@86 12631 class="cmtt-8">&#x00A0;</span><span
cannam@86 12632 class="cmtt-8">&#x00A0;</span>
cannam@86 12633 <br class="fancyvrb" /><a
cannam@86 12634 id="x1-123060r30"></a><span
cannam@86 12635 class="cmr-6">30</span><span
cannam@86 12636 class="cmtt-8">&#x00A0;</span><span
cannam@86 12637 class="cmtt-8">&#x00A0;</span><span
cannam@86 12638 class="cmtt-8">&#x00A0;</span><span
cannam@86 12639 class="cmtt-8">&#x00A0;</span><span
cannam@86 12640 class="cmtt-8">&#x00A0;</span><span
cannam@86 12641 class="cmtt-8">&#x00A0;</span><span
cannam@86 12642 class="cmtt-8">&#x00A0;</span><span
cannam@86 12643 class="cmtt-8">&#x00A0;</span><span
cannam@86 12644 class="cmtt-8">&#x00A0;</span><span
cannam@86 12645 class="cmtt-8">&#x00A0;</span><span
cannam@86 12646 class="cmtt-8">&#x00A0;</span><span
cannam@86 12647 class="cmtt-8">&#x00A0;</span><span
cannam@86 12648 class="cmtt-8">&#x00A0;}</span><span
cannam@86 12649 class="cmtt-8">&#x00A0;else</span><span
cannam@86 12650 class="cmtt-8">&#x00A0;{</span>
cannam@86 12651 <br class="fancyvrb" /><a
cannam@86 12652 id="x1-123062r31"></a><span
cannam@86 12653 class="cmr-6">31</span><span
cannam@86 12654 class="cmtt-8">&#x00A0;</span><span
cannam@86 12655 class="cmtt-8">&#x00A0;</span>
cannam@86 12656 <br class="fancyvrb" /><a
cannam@86 12657 id="x1-123064r32"></a><span
cannam@86 12658 class="cmr-6">32</span><span
cannam@86 12659 class="cmtt-8">&#x00A0;</span><span
cannam@86 12660 class="cmtt-8">&#x00A0;</span><span
cannam@86 12661 class="cmtt-8">&#x00A0;</span><span
cannam@86 12662 class="cmtt-8">&#x00A0;</span><span
cannam@86 12663 class="cmtt-8">&#x00A0;</span><span
cannam@86 12664 class="cmtt-8">&#x00A0;</span><span
cannam@86 12665 class="cmtt-8">&#x00A0;</span><span
cannam@86 12666 class="cmtt-8">&#x00A0;</span><span
cannam@86 12667 class="cmtt-8">&#x00A0;</span><span
cannam@86 12668 class="cmtt-8">&#x00A0;</span><span
cannam@86 12669 class="cmtt-8">&#x00A0;</span><span
cannam@86 12670 class="cmtt-8">&#x00A0;</span><span
cannam@86 12671 class="cmtt-8">&#x00A0;</span><span
cannam@86 12672 class="cmtt-8">&#x00A0;</span><span
cannam@86 12673 class="cmtt-8">&#x00A0;18)</span><span
cannam@86 12674 class="cmtt-8">&#x00A0;[y]</span><span
cannam@86 12675 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12676 class="cmtt-8">&#x00A0;[y]</span><span
cannam@86 12677 class="cmtt-8">&#x00A0;+</span><span
cannam@86 12678 class="cmtt-8">&#x00A0;[base]</span>
cannam@86 12679 <br class="fancyvrb" /><a
cannam@86 12680 id="x1-123066r33"></a><span
cannam@86 12681 class="cmr-6">33</span><span
cannam@86 12682 class="cmtt-8">&#x00A0;</span><span
cannam@86 12683 class="cmtt-8">&#x00A0;</span>
cannam@86 12684 <br class="fancyvrb" /><a
cannam@86 12685 id="x1-123068r34"></a><span
cannam@86 12686 class="cmr-6">34</span><span
cannam@86 12687 class="cmtt-8">&#x00A0;</span><span
cannam@86 12688 class="cmtt-8">&#x00A0;</span><span
cannam@86 12689 class="cmtt-8">&#x00A0;</span><span
cannam@86 12690 class="cmtt-8">&#x00A0;</span><span
cannam@86 12691 class="cmtt-8">&#x00A0;</span><span
cannam@86 12692 class="cmtt-8">&#x00A0;</span><span
cannam@86 12693 class="cmtt-8">&#x00A0;</span><span
cannam@86 12694 class="cmtt-8">&#x00A0;</span><span
cannam@86 12695 class="cmtt-8">&#x00A0;</span><span
cannam@86 12696 class="cmtt-8">&#x00A0;</span><span
cannam@86 12697 class="cmtt-8">&#x00A0;</span><span
cannam@86 12698 class="cmtt-8">&#x00A0;</span><span
cannam@86 12699 class="cmtt-8">&#x00A0;}</span>
cannam@86 12700 <br class="fancyvrb" /><a
cannam@86 12701 id="x1-123070r35"></a><span
cannam@86 12702 class="cmr-6">35</span><span
cannam@86 12703 class="cmtt-8">&#x00A0;</span><span
cannam@86 12704 class="cmtt-8">&#x00A0;</span>
cannam@86 12705 <br class="fancyvrb" /><a
cannam@86 12706 id="x1-123072r36"></a><span
cannam@86 12707 class="cmr-6">36</span><span
cannam@86 12708 class="cmtt-8">&#x00A0;</span><span
cannam@86 12709 class="cmtt-8">&#x00A0;</span><span
cannam@86 12710 class="cmtt-8">&#x00A0;</span><span
cannam@86 12711 class="cmtt-8">&#x00A0;</span><span
cannam@86 12712 class="cmtt-8">&#x00A0;</span><span
cannam@86 12713 class="cmtt-8">&#x00A0;</span><span
cannam@86 12714 class="cmtt-8">&#x00A0;</span><span
cannam@86 12715 class="cmtt-8">&#x00A0;</span><span
cannam@86 12716 class="cmtt-8">&#x00A0;19)</span><span
cannam@86 12717 class="cmtt-8">&#x00A0;vector</span><span
cannam@86 12718 class="cmtt-8">&#x00A0;[v]</span><span
cannam@86 12719 class="cmtt-8">&#x00A0;element</span><span
cannam@86 12720 class="cmtt-8">&#x00A0;[x]</span><span
cannam@86 12721 class="cmtt-8">&#x00A0;=</span><span
cannam@86 12722 class="cmtt-8">&#x00A0;[y]</span>
cannam@86 12723 <br class="fancyvrb" /><a
cannam@86 12724 id="x1-123074r37"></a><span
cannam@86 12725 class="cmr-6">37</span><span
cannam@86 12726 class="cmtt-8">&#x00A0;</span><span
cannam@86 12727 class="cmtt-8">&#x00A0;</span>
cannam@86 12728 <br class="fancyvrb" /><a
cannam@86 12729 id="x1-123076r38"></a><span
cannam@86 12730 class="cmr-6">38</span><span
cannam@86 12731 class="cmtt-8">&#x00A0;</span><span
cannam@86 12732 class="cmtt-8">&#x00A0;</span><span
cannam@86 12733 class="cmtt-8">&#x00A0;</span><span
cannam@86 12734 class="cmtt-8">&#x00A0;</span><span
cannam@86 12735 class="cmtt-8">&#x00A0;</span><span
cannam@86 12736 class="cmtt-8">&#x00A0;</span><span
cannam@86 12737 class="cmtt-8">&#x00A0;}</span>
cannam@86 12738 </div>
cannam@86 12739
cannam@86 12740
cannam@86 12741
cannam@86 12742
cannam@86 12743
cannam@86 12744
cannam@86 12745 <h3 class="sectionHead"><span class="titlemark">10. </span> <a
cannam@86 12746 id="x1-12400010"></a>Tables</h3>
cannam@86 12747 <!--l. 6--><p class="noindent" >
cannam@86 12748 <h4 class="subsectionHead"><span class="titlemark">10.1. </span> <a
cannam@86 12749 id="x1-12500010.1"></a>floor1_inverse_dB_table</h4>
cannam@86 12750 <!--l. 8--><p class="noindent" >The vector <span
cannam@86 12751 class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the
cannam@86 12752 following values (read left to right then top to bottom):
cannam@86 12753 <!--l. 12--><p class="noindent" >
cannam@86 12754 <div class="fancyvrb" id="fancyvrb48">
cannam@86 12755 <a
cannam@86 12756 id="x1-125002r1"></a><span
cannam@86 12757 class="cmr-6">1</span><span
cannam@86 12758 class="cmtt-8">&#x00A0;</span><span
cannam@86 12759 class="cmtt-8">&#x00A0;</span><span
cannam@86 12760 class="cmtt-8">&#x00A0;</span><span
cannam@86 12761 class="cmtt-8">&#x00A0;1.0649863e-07,</span><span
cannam@86 12762 class="cmtt-8">&#x00A0;1.1341951e-07,</span><span
cannam@86 12763 class="cmtt-8">&#x00A0;1.2079015e-07,</span><span
cannam@86 12764 class="cmtt-8">&#x00A0;1.2863978e-07,</span>
cannam@86 12765 <br class="fancyvrb" /><a
cannam@86 12766 id="x1-125004r2"></a><span
cannam@86 12767 class="cmr-6">2</span><span
cannam@86 12768 class="cmtt-8">&#x00A0;</span><span
cannam@86 12769 class="cmtt-8">&#x00A0;</span><span
cannam@86 12770 class="cmtt-8">&#x00A0;</span><span
cannam@86 12771 class="cmtt-8">&#x00A0;1.3699951e-07,</span><span
cannam@86 12772 class="cmtt-8">&#x00A0;1.4590251e-07,</span><span
cannam@86 12773 class="cmtt-8">&#x00A0;1.5538408e-07,</span><span
cannam@86 12774 class="cmtt-8">&#x00A0;1.6548181e-07,</span>
cannam@86 12775 <br class="fancyvrb" /><a
cannam@86 12776 id="x1-125006r3"></a><span
cannam@86 12777 class="cmr-6">3</span><span
cannam@86 12778 class="cmtt-8">&#x00A0;</span><span
cannam@86 12779 class="cmtt-8">&#x00A0;</span><span
cannam@86 12780 class="cmtt-8">&#x00A0;</span><span
cannam@86 12781 class="cmtt-8">&#x00A0;1.7623575e-07,</span><span
cannam@86 12782 class="cmtt-8">&#x00A0;1.8768855e-07,</span><span
cannam@86 12783 class="cmtt-8">&#x00A0;1.9988561e-07,</span><span
cannam@86 12784 class="cmtt-8">&#x00A0;2.1287530e-07,</span>
cannam@86 12785 <br class="fancyvrb" /><a
cannam@86 12786 id="x1-125008r4"></a><span
cannam@86 12787 class="cmr-6">4</span><span
cannam@86 12788 class="cmtt-8">&#x00A0;</span><span
cannam@86 12789 class="cmtt-8">&#x00A0;</span><span
cannam@86 12790 class="cmtt-8">&#x00A0;</span><span
cannam@86 12791 class="cmtt-8">&#x00A0;2.2670913e-07,</span><span
cannam@86 12792 class="cmtt-8">&#x00A0;2.4144197e-07,</span><span
cannam@86 12793 class="cmtt-8">&#x00A0;2.5713223e-07,</span><span
cannam@86 12794 class="cmtt-8">&#x00A0;2.7384213e-07,</span>
cannam@86 12795 <br class="fancyvrb" /><a
cannam@86 12796 id="x1-125010r5"></a><span
cannam@86 12797 class="cmr-6">5</span><span
cannam@86 12798 class="cmtt-8">&#x00A0;</span><span
cannam@86 12799 class="cmtt-8">&#x00A0;</span><span
cannam@86 12800 class="cmtt-8">&#x00A0;</span><span
cannam@86 12801 class="cmtt-8">&#x00A0;2.9163793e-07,</span><span
cannam@86 12802 class="cmtt-8">&#x00A0;3.1059021e-07,</span><span
cannam@86 12803 class="cmtt-8">&#x00A0;3.3077411e-07,</span><span
cannam@86 12804 class="cmtt-8">&#x00A0;3.5226968e-07,</span>
cannam@86 12805 <br class="fancyvrb" /><a
cannam@86 12806 id="x1-125012r6"></a><span
cannam@86 12807 class="cmr-6">6</span><span
cannam@86 12808 class="cmtt-8">&#x00A0;</span><span
cannam@86 12809 class="cmtt-8">&#x00A0;</span><span
cannam@86 12810 class="cmtt-8">&#x00A0;</span><span
cannam@86 12811 class="cmtt-8">&#x00A0;3.7516214e-07,</span><span
cannam@86 12812 class="cmtt-8">&#x00A0;3.9954229e-07,</span><span
cannam@86 12813 class="cmtt-8">&#x00A0;4.2550680e-07,</span><span
cannam@86 12814 class="cmtt-8">&#x00A0;4.5315863e-07,</span>
cannam@86 12815 <br class="fancyvrb" /><a
cannam@86 12816 id="x1-125014r7"></a><span
cannam@86 12817 class="cmr-6">7</span><span
cannam@86 12818 class="cmtt-8">&#x00A0;</span><span
cannam@86 12819 class="cmtt-8">&#x00A0;</span><span
cannam@86 12820 class="cmtt-8">&#x00A0;</span><span
cannam@86 12821 class="cmtt-8">&#x00A0;4.8260743e-07,</span><span
cannam@86 12822 class="cmtt-8">&#x00A0;5.1396998e-07,</span><span
cannam@86 12823 class="cmtt-8">&#x00A0;5.4737065e-07,</span><span
cannam@86 12824 class="cmtt-8">&#x00A0;5.8294187e-07,</span>
cannam@86 12825 <br class="fancyvrb" /><a
cannam@86 12826 id="x1-125016r8"></a><span
cannam@86 12827 class="cmr-6">8</span><span
cannam@86 12828 class="cmtt-8">&#x00A0;</span><span
cannam@86 12829 class="cmtt-8">&#x00A0;</span><span
cannam@86 12830 class="cmtt-8">&#x00A0;</span><span
cannam@86 12831 class="cmtt-8">&#x00A0;6.2082472e-07,</span><span
cannam@86 12832 class="cmtt-8">&#x00A0;6.6116941e-07,</span><span
cannam@86 12833 class="cmtt-8">&#x00A0;7.0413592e-07,</span><span
cannam@86 12834 class="cmtt-8">&#x00A0;7.4989464e-07,</span>
cannam@86 12835 <br class="fancyvrb" /><a
cannam@86 12836 id="x1-125018r9"></a><span
cannam@86 12837 class="cmr-6">9</span><span
cannam@86 12838 class="cmtt-8">&#x00A0;</span><span
cannam@86 12839 class="cmtt-8">&#x00A0;</span><span
cannam@86 12840 class="cmtt-8">&#x00A0;</span><span
cannam@86 12841 class="cmtt-8">&#x00A0;7.9862701e-07,</span><span
cannam@86 12842 class="cmtt-8">&#x00A0;8.5052630e-07,</span><span
cannam@86 12843 class="cmtt-8">&#x00A0;9.0579828e-07,</span><span
cannam@86 12844 class="cmtt-8">&#x00A0;9.6466216e-07,</span>
cannam@86 12845 <br class="fancyvrb" /><a
cannam@86 12846 id="x1-125020r10"></a><span
cannam@86 12847 class="cmr-6">10</span><span
cannam@86 12848 class="cmtt-8">&#x00A0;</span><span
cannam@86 12849 class="cmtt-8">&#x00A0;</span><span
cannam@86 12850 class="cmtt-8">&#x00A0;</span><span
cannam@86 12851 class="cmtt-8">&#x00A0;1.0273513e-06,</span><span
cannam@86 12852 class="cmtt-8">&#x00A0;1.0941144e-06,</span><span
cannam@86 12853 class="cmtt-8">&#x00A0;1.1652161e-06,</span><span
cannam@86 12854 class="cmtt-8">&#x00A0;1.2409384e-06,</span>
cannam@86 12855 <br class="fancyvrb" /><a
cannam@86 12856 id="x1-125022r11"></a><span
cannam@86 12857 class="cmr-6">11</span><span
cannam@86 12858 class="cmtt-8">&#x00A0;</span><span
cannam@86 12859 class="cmtt-8">&#x00A0;</span><span
cannam@86 12860 class="cmtt-8">&#x00A0;</span><span
cannam@86 12861 class="cmtt-8">&#x00A0;1.3215816e-06,</span><span
cannam@86 12862 class="cmtt-8">&#x00A0;1.4074654e-06,</span><span
cannam@86 12863 class="cmtt-8">&#x00A0;1.4989305e-06,</span><span
cannam@86 12864 class="cmtt-8">&#x00A0;1.5963394e-06,</span>
cannam@86 12865 <br class="fancyvrb" /><a
cannam@86 12866 id="x1-125024r12"></a><span
cannam@86 12867 class="cmr-6">12</span><span
cannam@86 12868 class="cmtt-8">&#x00A0;</span><span
cannam@86 12869 class="cmtt-8">&#x00A0;</span><span
cannam@86 12870 class="cmtt-8">&#x00A0;</span><span
cannam@86 12871 class="cmtt-8">&#x00A0;1.7000785e-06,</span><span
cannam@86 12872 class="cmtt-8">&#x00A0;1.8105592e-06,</span><span
cannam@86 12873 class="cmtt-8">&#x00A0;1.9282195e-06,</span><span
cannam@86 12874 class="cmtt-8">&#x00A0;2.0535261e-06,</span>
cannam@86 12875 <br class="fancyvrb" /><a
cannam@86 12876 id="x1-125026r13"></a><span
cannam@86 12877 class="cmr-6">13</span><span
cannam@86 12878 class="cmtt-8">&#x00A0;</span><span
cannam@86 12879 class="cmtt-8">&#x00A0;</span><span
cannam@86 12880 class="cmtt-8">&#x00A0;</span><span
cannam@86 12881 class="cmtt-8">&#x00A0;2.1869758e-06,</span><span
cannam@86 12882 class="cmtt-8">&#x00A0;2.3290978e-06,</span><span
cannam@86 12883 class="cmtt-8">&#x00A0;2.4804557e-06,</span><span
cannam@86 12884 class="cmtt-8">&#x00A0;2.6416497e-06,</span>
cannam@86 12885 <br class="fancyvrb" /><a
cannam@86 12886 id="x1-125028r14"></a><span
cannam@86 12887 class="cmr-6">14</span><span
cannam@86 12888 class="cmtt-8">&#x00A0;</span><span
cannam@86 12889 class="cmtt-8">&#x00A0;</span><span
cannam@86 12890 class="cmtt-8">&#x00A0;</span><span
cannam@86 12891 class="cmtt-8">&#x00A0;2.8133190e-06,</span><span
cannam@86 12892 class="cmtt-8">&#x00A0;2.9961443e-06,</span><span
cannam@86 12893 class="cmtt-8">&#x00A0;3.1908506e-06,</span><span
cannam@86 12894 class="cmtt-8">&#x00A0;3.3982101e-06,</span>
cannam@86 12895 <br class="fancyvrb" /><a
cannam@86 12896 id="x1-125030r15"></a><span
cannam@86 12897 class="cmr-6">15</span><span
cannam@86 12898 class="cmtt-8">&#x00A0;</span><span
cannam@86 12899 class="cmtt-8">&#x00A0;</span><span
cannam@86 12900 class="cmtt-8">&#x00A0;</span><span
cannam@86 12901 class="cmtt-8">&#x00A0;3.6190449e-06,</span><span
cannam@86 12902 class="cmtt-8">&#x00A0;3.8542308e-06,</span><span
cannam@86 12903 class="cmtt-8">&#x00A0;4.1047004e-06,</span><span
cannam@86 12904 class="cmtt-8">&#x00A0;4.3714470e-06,</span>
cannam@86 12905 <br class="fancyvrb" /><a
cannam@86 12906 id="x1-125032r16"></a><span
cannam@86 12907 class="cmr-6">16</span><span
cannam@86 12908 class="cmtt-8">&#x00A0;</span><span
cannam@86 12909 class="cmtt-8">&#x00A0;</span><span
cannam@86 12910 class="cmtt-8">&#x00A0;</span><span
cannam@86 12911 class="cmtt-8">&#x00A0;4.6555282e-06,</span><span
cannam@86 12912 class="cmtt-8">&#x00A0;4.9580707e-06,</span><span
cannam@86 12913 class="cmtt-8">&#x00A0;5.2802740e-06,</span><span
cannam@86 12914 class="cmtt-8">&#x00A0;5.6234160e-06,</span>
cannam@86 12915 <br class="fancyvrb" /><a
cannam@86 12916 id="x1-125034r17"></a><span
cannam@86 12917 class="cmr-6">17</span><span
cannam@86 12918 class="cmtt-8">&#x00A0;</span><span
cannam@86 12919 class="cmtt-8">&#x00A0;</span><span
cannam@86 12920 class="cmtt-8">&#x00A0;</span><span
cannam@86 12921 class="cmtt-8">&#x00A0;5.9888572e-06,</span><span
cannam@86 12922 class="cmtt-8">&#x00A0;6.3780469e-06,</span><span
cannam@86 12923 class="cmtt-8">&#x00A0;6.7925283e-06,</span><span
cannam@86 12924 class="cmtt-8">&#x00A0;7.2339451e-06,</span>
cannam@86 12925 <br class="fancyvrb" /><a
cannam@86 12926 id="x1-125036r18"></a><span
cannam@86 12927 class="cmr-6">18</span><span
cannam@86 12928 class="cmtt-8">&#x00A0;</span><span
cannam@86 12929 class="cmtt-8">&#x00A0;</span><span
cannam@86 12930 class="cmtt-8">&#x00A0;</span><span
cannam@86 12931 class="cmtt-8">&#x00A0;7.7040476e-06,</span><span
cannam@86 12932 class="cmtt-8">&#x00A0;8.2047000e-06,</span><span
cannam@86 12933 class="cmtt-8">&#x00A0;8.7378876e-06,</span><span
cannam@86 12934 class="cmtt-8">&#x00A0;9.3057248e-06,</span>
cannam@86 12935 <br class="fancyvrb" /><a
cannam@86 12936 id="x1-125038r19"></a><span
cannam@86 12937 class="cmr-6">19</span><span
cannam@86 12938 class="cmtt-8">&#x00A0;</span><span
cannam@86 12939 class="cmtt-8">&#x00A0;</span><span
cannam@86 12940 class="cmtt-8">&#x00A0;</span><span
cannam@86 12941 class="cmtt-8">&#x00A0;9.9104632e-06,</span><span
cannam@86 12942 class="cmtt-8">&#x00A0;1.0554501e-05,</span><span
cannam@86 12943 class="cmtt-8">&#x00A0;1.1240392e-05,</span><span
cannam@86 12944 class="cmtt-8">&#x00A0;1.1970856e-05,</span>
cannam@86 12945 <br class="fancyvrb" /><a
cannam@86 12946 id="x1-125040r20"></a><span
cannam@86 12947 class="cmr-6">20</span><span
cannam@86 12948 class="cmtt-8">&#x00A0;</span><span
cannam@86 12949 class="cmtt-8">&#x00A0;</span><span
cannam@86 12950 class="cmtt-8">&#x00A0;</span><span
cannam@86 12951 class="cmtt-8">&#x00A0;1.2748789e-05,</span><span
cannam@86 12952 class="cmtt-8">&#x00A0;1.3577278e-05,</span><span
cannam@86 12953 class="cmtt-8">&#x00A0;1.4459606e-05,</span><span
cannam@86 12954 class="cmtt-8">&#x00A0;1.5399272e-05,</span>
cannam@86 12955 <br class="fancyvrb" /><a
cannam@86 12956 id="x1-125042r21"></a><span
cannam@86 12957 class="cmr-6">21</span><span
cannam@86 12958 class="cmtt-8">&#x00A0;</span><span
cannam@86 12959 class="cmtt-8">&#x00A0;</span><span
cannam@86 12960 class="cmtt-8">&#x00A0;</span><span
cannam@86 12961 class="cmtt-8">&#x00A0;1.6400004e-05,</span><span
cannam@86 12962 class="cmtt-8">&#x00A0;1.7465768e-05,</span><span
cannam@86 12963 class="cmtt-8">&#x00A0;1.8600792e-05,</span><span
cannam@86 12964 class="cmtt-8">&#x00A0;1.9809576e-05,</span>
cannam@86 12965 <br class="fancyvrb" /><a
cannam@86 12966 id="x1-125044r22"></a><span
cannam@86 12967 class="cmr-6">22</span><span
cannam@86 12968 class="cmtt-8">&#x00A0;</span><span
cannam@86 12969 class="cmtt-8">&#x00A0;</span><span
cannam@86 12970 class="cmtt-8">&#x00A0;</span><span
cannam@86 12971 class="cmtt-8">&#x00A0;2.1096914e-05,</span><span
cannam@86 12972 class="cmtt-8">&#x00A0;2.2467911e-05,</span><span
cannam@86 12973 class="cmtt-8">&#x00A0;2.3928002e-05,</span><span
cannam@86 12974 class="cmtt-8">&#x00A0;2.5482978e-05,</span>
cannam@86 12975 <br class="fancyvrb" /><a
cannam@86 12976 id="x1-125046r23"></a><span
cannam@86 12977 class="cmr-6">23</span><span
cannam@86 12978 class="cmtt-8">&#x00A0;</span><span
cannam@86 12979 class="cmtt-8">&#x00A0;</span><span
cannam@86 12980 class="cmtt-8">&#x00A0;</span><span
cannam@86 12981 class="cmtt-8">&#x00A0;2.7139006e-05,</span><span
cannam@86 12982 class="cmtt-8">&#x00A0;2.8902651e-05,</span><span
cannam@86 12983 class="cmtt-8">&#x00A0;3.0780908e-05,</span><span
cannam@86 12984 class="cmtt-8">&#x00A0;3.2781225e-05,</span>
cannam@86 12985 <br class="fancyvrb" /><a
cannam@86 12986 id="x1-125048r24"></a><span
cannam@86 12987 class="cmr-6">24</span><span
cannam@86 12988 class="cmtt-8">&#x00A0;</span><span
cannam@86 12989 class="cmtt-8">&#x00A0;</span><span
cannam@86 12990 class="cmtt-8">&#x00A0;</span><span
cannam@86 12991 class="cmtt-8">&#x00A0;3.4911534e-05,</span><span
cannam@86 12992 class="cmtt-8">&#x00A0;3.7180282e-05,</span><span
cannam@86 12993 class="cmtt-8">&#x00A0;3.9596466e-05,</span><span
cannam@86 12994 class="cmtt-8">&#x00A0;4.2169667e-05,</span>
cannam@86 12995 <br class="fancyvrb" /><a
cannam@86 12996 id="x1-125050r25"></a><span
cannam@86 12997 class="cmr-6">25</span><span
cannam@86 12998 class="cmtt-8">&#x00A0;</span><span
cannam@86 12999 class="cmtt-8">&#x00A0;</span><span
cannam@86 13000 class="cmtt-8">&#x00A0;</span><span
cannam@86 13001 class="cmtt-8">&#x00A0;4.4910090e-05,</span><span
cannam@86 13002 class="cmtt-8">&#x00A0;4.7828601e-05,</span><span
cannam@86 13003 class="cmtt-8">&#x00A0;5.0936773e-05,</span><span
cannam@86 13004 class="cmtt-8">&#x00A0;5.4246931e-05,</span>
cannam@86 13005 <br class="fancyvrb" /><a
cannam@86 13006 id="x1-125052r26"></a><span
cannam@86 13007 class="cmr-6">26</span><span
cannam@86 13008 class="cmtt-8">&#x00A0;</span><span
cannam@86 13009 class="cmtt-8">&#x00A0;</span><span
cannam@86 13010 class="cmtt-8">&#x00A0;</span><span
cannam@86 13011 class="cmtt-8">&#x00A0;5.7772202e-05,</span><span
cannam@86 13012 class="cmtt-8">&#x00A0;6.1526565e-05,</span><span
cannam@86 13013 class="cmtt-8">&#x00A0;6.5524908e-05,</span><span
cannam@86 13014 class="cmtt-8">&#x00A0;6.9783085e-05,</span>
cannam@86 13015 <br class="fancyvrb" /><a
cannam@86 13016 id="x1-125054r27"></a><span
cannam@86 13017 class="cmr-6">27</span><span
cannam@86 13018 class="cmtt-8">&#x00A0;</span><span
cannam@86 13019 class="cmtt-8">&#x00A0;</span><span
cannam@86 13020 class="cmtt-8">&#x00A0;</span><span
cannam@86 13021 class="cmtt-8">&#x00A0;7.4317983e-05,</span><span
cannam@86 13022 class="cmtt-8">&#x00A0;7.9147585e-05,</span><span
cannam@86 13023 class="cmtt-8">&#x00A0;8.4291040e-05,</span><span
cannam@86 13024 class="cmtt-8">&#x00A0;8.9768747e-05,</span>
cannam@86 13025 <br class="fancyvrb" /><a
cannam@86 13026 id="x1-125056r28"></a><span
cannam@86 13027 class="cmr-6">28</span><span
cannam@86 13028 class="cmtt-8">&#x00A0;</span><span
cannam@86 13029 class="cmtt-8">&#x00A0;</span><span
cannam@86 13030 class="cmtt-8">&#x00A0;</span><span
cannam@86 13031 class="cmtt-8">&#x00A0;9.5602426e-05,</span><span
cannam@86 13032 class="cmtt-8">&#x00A0;0.00010181521,</span><span
cannam@86 13033 class="cmtt-8">&#x00A0;0.00010843174,</span><span
cannam@86 13034 class="cmtt-8">&#x00A0;0.00011547824,</span>
cannam@86 13035 <br class="fancyvrb" /><a
cannam@86 13036 id="x1-125058r29"></a><span
cannam@86 13037 class="cmr-6">29</span><span
cannam@86 13038 class="cmtt-8">&#x00A0;</span><span
cannam@86 13039 class="cmtt-8">&#x00A0;</span><span
cannam@86 13040 class="cmtt-8">&#x00A0;</span><span
cannam@86 13041 class="cmtt-8">&#x00A0;0.00012298267,</span><span
cannam@86 13042 class="cmtt-8">&#x00A0;0.00013097477,</span><span
cannam@86 13043 class="cmtt-8">&#x00A0;0.00013948625,</span><span
cannam@86 13044 class="cmtt-8">&#x00A0;0.00014855085,</span>
cannam@86 13045 <br class="fancyvrb" /><a
cannam@86 13046 id="x1-125060r30"></a><span
cannam@86 13047 class="cmr-6">30</span><span
cannam@86 13048 class="cmtt-8">&#x00A0;</span><span
cannam@86 13049 class="cmtt-8">&#x00A0;</span><span
cannam@86 13050 class="cmtt-8">&#x00A0;</span><span
cannam@86 13051 class="cmtt-8">&#x00A0;0.00015820453,</span><span
cannam@86 13052 class="cmtt-8">&#x00A0;0.00016848555,</span><span
cannam@86 13053 class="cmtt-8">&#x00A0;0.00017943469,</span><span
cannam@86 13054 class="cmtt-8">&#x00A0;0.00019109536,</span>
cannam@86 13055 <br class="fancyvrb" /><a
cannam@86 13056 id="x1-125062r31"></a><span
cannam@86 13057 class="cmr-6">31</span><span
cannam@86 13058 class="cmtt-8">&#x00A0;</span><span
cannam@86 13059 class="cmtt-8">&#x00A0;</span><span
cannam@86 13060 class="cmtt-8">&#x00A0;</span><span
cannam@86 13061 class="cmtt-8">&#x00A0;0.00020351382,</span><span
cannam@86 13062 class="cmtt-8">&#x00A0;0.00021673929,</span><span
cannam@86 13063 class="cmtt-8">&#x00A0;0.00023082423,</span><span
cannam@86 13064 class="cmtt-8">&#x00A0;0.00024582449,</span>
cannam@86 13065 <br class="fancyvrb" /><a
cannam@86 13066 id="x1-125064r32"></a><span
cannam@86 13067 class="cmr-6">32</span><span
cannam@86 13068 class="cmtt-8">&#x00A0;</span><span
cannam@86 13069 class="cmtt-8">&#x00A0;</span><span
cannam@86 13070 class="cmtt-8">&#x00A0;</span><span
cannam@86 13071 class="cmtt-8">&#x00A0;0.00026179955,</span><span
cannam@86 13072 class="cmtt-8">&#x00A0;0.00027881276,</span><span
cannam@86 13073 class="cmtt-8">&#x00A0;0.00029693158,</span><span
cannam@86 13074 class="cmtt-8">&#x00A0;0.00031622787,</span>
cannam@86 13075 <br class="fancyvrb" /><a
cannam@86 13076 id="x1-125066r33"></a><span
cannam@86 13077 class="cmr-6">33</span><span
cannam@86 13078 class="cmtt-8">&#x00A0;</span><span
cannam@86 13079 class="cmtt-8">&#x00A0;</span><span
cannam@86 13080 class="cmtt-8">&#x00A0;</span><span
cannam@86 13081 class="cmtt-8">&#x00A0;0.00033677814,</span><span
cannam@86 13082 class="cmtt-8">&#x00A0;0.00035866388,</span><span
cannam@86 13083 class="cmtt-8">&#x00A0;0.00038197188,</span><span
cannam@86 13084 class="cmtt-8">&#x00A0;0.00040679456,</span>
cannam@86 13085 <br class="fancyvrb" /><a
cannam@86 13086 id="x1-125068r34"></a><span
cannam@86 13087 class="cmr-6">34</span><span
cannam@86 13088 class="cmtt-8">&#x00A0;</span><span
cannam@86 13089 class="cmtt-8">&#x00A0;</span><span
cannam@86 13090 class="cmtt-8">&#x00A0;</span><span
cannam@86 13091 class="cmtt-8">&#x00A0;0.00043323036,</span><span
cannam@86 13092 class="cmtt-8">&#x00A0;0.00046138411,</span><span
cannam@86 13093 class="cmtt-8">&#x00A0;0.00049136745,</span><span
cannam@86 13094 class="cmtt-8">&#x00A0;0.00052329927,</span>
cannam@86 13095 <br class="fancyvrb" /><a
cannam@86 13096 id="x1-125070r35"></a><span
cannam@86 13097 class="cmr-6">35</span><span
cannam@86 13098 class="cmtt-8">&#x00A0;</span><span
cannam@86 13099 class="cmtt-8">&#x00A0;</span><span
cannam@86 13100 class="cmtt-8">&#x00A0;</span><span
cannam@86 13101 class="cmtt-8">&#x00A0;0.00055730621,</span><span
cannam@86 13102 class="cmtt-8">&#x00A0;0.00059352311,</span><span
cannam@86 13103 class="cmtt-8">&#x00A0;0.00063209358,</span><span
cannam@86 13104 class="cmtt-8">&#x00A0;0.00067317058,</span>
cannam@86 13105 <br class="fancyvrb" /><a
cannam@86 13106 id="x1-125072r36"></a><span
cannam@86 13107 class="cmr-6">36</span><span
cannam@86 13108 class="cmtt-8">&#x00A0;</span><span
cannam@86 13109 class="cmtt-8">&#x00A0;</span><span
cannam@86 13110 class="cmtt-8">&#x00A0;</span><span
cannam@86 13111 class="cmtt-8">&#x00A0;0.00071691700,</span><span
cannam@86 13112 class="cmtt-8">&#x00A0;0.00076350630,</span><span
cannam@86 13113 class="cmtt-8">&#x00A0;0.00081312324,</span><span
cannam@86 13114 class="cmtt-8">&#x00A0;0.00086596457,</span>
cannam@86 13115 <br class="fancyvrb" /><a
cannam@86 13116 id="x1-125074r37"></a><span
cannam@86 13117 class="cmr-6">37</span><span
cannam@86 13118 class="cmtt-8">&#x00A0;</span><span
cannam@86 13119 class="cmtt-8">&#x00A0;</span><span
cannam@86 13120 class="cmtt-8">&#x00A0;</span><span
cannam@86 13121 class="cmtt-8">&#x00A0;0.00092223983,</span><span
cannam@86 13122 class="cmtt-8">&#x00A0;0.00098217216,</span><span
cannam@86 13123 class="cmtt-8">&#x00A0;0.0010459992,</span><span
cannam@86 13124 class="cmtt-8">&#x00A0;</span><span
cannam@86 13125 class="cmtt-8">&#x00A0;0.0011139742,</span>
cannam@86 13126 <br class="fancyvrb" /><a
cannam@86 13127 id="x1-125076r38"></a><span
cannam@86 13128 class="cmr-6">38</span><span
cannam@86 13129 class="cmtt-8">&#x00A0;</span><span
cannam@86 13130 class="cmtt-8">&#x00A0;</span><span
cannam@86 13131 class="cmtt-8">&#x00A0;</span><span
cannam@86 13132 class="cmtt-8">&#x00A0;0.0011863665,</span><span
cannam@86 13133 class="cmtt-8">&#x00A0;</span><span
cannam@86 13134 class="cmtt-8">&#x00A0;0.0012634633,</span><span
cannam@86 13135 class="cmtt-8">&#x00A0;</span><span
cannam@86 13136 class="cmtt-8">&#x00A0;0.0013455702,</span><span
cannam@86 13137 class="cmtt-8">&#x00A0;</span><span
cannam@86 13138 class="cmtt-8">&#x00A0;0.0014330129,</span>
cannam@86 13139 <br class="fancyvrb" /><a
cannam@86 13140 id="x1-125078r39"></a><span
cannam@86 13141 class="cmr-6">39</span><span
cannam@86 13142 class="cmtt-8">&#x00A0;</span><span
cannam@86 13143 class="cmtt-8">&#x00A0;</span><span
cannam@86 13144 class="cmtt-8">&#x00A0;</span><span
cannam@86 13145 class="cmtt-8">&#x00A0;0.0015261382,</span><span
cannam@86 13146 class="cmtt-8">&#x00A0;</span><span
cannam@86 13147 class="cmtt-8">&#x00A0;0.0016253153,</span><span
cannam@86 13148 class="cmtt-8">&#x00A0;</span><span
cannam@86 13149 class="cmtt-8">&#x00A0;0.0017309374,</span><span
cannam@86 13150 class="cmtt-8">&#x00A0;</span><span
cannam@86 13151 class="cmtt-8">&#x00A0;0.0018434235,</span>
cannam@86 13152 <br class="fancyvrb" /><a
cannam@86 13153 id="x1-125080r40"></a><span
cannam@86 13154 class="cmr-6">40</span><span
cannam@86 13155 class="cmtt-8">&#x00A0;</span><span
cannam@86 13156 class="cmtt-8">&#x00A0;</span><span
cannam@86 13157 class="cmtt-8">&#x00A0;</span><span
cannam@86 13158 class="cmtt-8">&#x00A0;0.0019632195,</span><span
cannam@86 13159 class="cmtt-8">&#x00A0;</span><span
cannam@86 13160 class="cmtt-8">&#x00A0;0.0020908006,</span><span
cannam@86 13161 class="cmtt-8">&#x00A0;</span><span
cannam@86 13162 class="cmtt-8">&#x00A0;0.0022266726,</span><span
cannam@86 13163 class="cmtt-8">&#x00A0;</span><span
cannam@86 13164 class="cmtt-8">&#x00A0;0.0023713743,</span>
cannam@86 13165 <br class="fancyvrb" /><a
cannam@86 13166 id="x1-125082r41"></a><span
cannam@86 13167 class="cmr-6">41</span><span
cannam@86 13168 class="cmtt-8">&#x00A0;</span><span
cannam@86 13169 class="cmtt-8">&#x00A0;</span><span
cannam@86 13170 class="cmtt-8">&#x00A0;</span><span
cannam@86 13171 class="cmtt-8">&#x00A0;0.0025254795,</span><span
cannam@86 13172 class="cmtt-8">&#x00A0;</span><span
cannam@86 13173 class="cmtt-8">&#x00A0;0.0026895994,</span><span
cannam@86 13174 class="cmtt-8">&#x00A0;</span><span
cannam@86 13175 class="cmtt-8">&#x00A0;0.0028643847,</span><span
cannam@86 13176 class="cmtt-8">&#x00A0;</span><span
cannam@86 13177 class="cmtt-8">&#x00A0;0.0030505286,</span>
cannam@86 13178 <br class="fancyvrb" /><a
cannam@86 13179 id="x1-125084r42"></a><span
cannam@86 13180 class="cmr-6">42</span><span
cannam@86 13181 class="cmtt-8">&#x00A0;</span><span
cannam@86 13182 class="cmtt-8">&#x00A0;</span><span
cannam@86 13183 class="cmtt-8">&#x00A0;</span><span
cannam@86 13184 class="cmtt-8">&#x00A0;0.0032487691,</span><span
cannam@86 13185 class="cmtt-8">&#x00A0;</span><span
cannam@86 13186 class="cmtt-8">&#x00A0;0.0034598925,</span><span
cannam@86 13187 class="cmtt-8">&#x00A0;</span><span
cannam@86 13188 class="cmtt-8">&#x00A0;0.0036847358,</span><span
cannam@86 13189 class="cmtt-8">&#x00A0;</span><span
cannam@86 13190 class="cmtt-8">&#x00A0;0.0039241906,</span>
cannam@86 13191
cannam@86 13192
cannam@86 13193
cannam@86 13194 <br class="fancyvrb" /><a
cannam@86 13195 id="x1-125086r43"></a><span
cannam@86 13196 class="cmr-6">43</span><span
cannam@86 13197 class="cmtt-8">&#x00A0;</span><span
cannam@86 13198 class="cmtt-8">&#x00A0;</span><span
cannam@86 13199 class="cmtt-8">&#x00A0;</span><span
cannam@86 13200 class="cmtt-8">&#x00A0;0.0041792066,</span><span
cannam@86 13201 class="cmtt-8">&#x00A0;</span><span
cannam@86 13202 class="cmtt-8">&#x00A0;0.0044507950,</span><span
cannam@86 13203 class="cmtt-8">&#x00A0;</span><span
cannam@86 13204 class="cmtt-8">&#x00A0;0.0047400328,</span><span
cannam@86 13205 class="cmtt-8">&#x00A0;</span><span
cannam@86 13206 class="cmtt-8">&#x00A0;0.0050480668,</span>
cannam@86 13207 <br class="fancyvrb" /><a
cannam@86 13208 id="x1-125088r44"></a><span
cannam@86 13209 class="cmr-6">44</span><span
cannam@86 13210 class="cmtt-8">&#x00A0;</span><span
cannam@86 13211 class="cmtt-8">&#x00A0;</span><span
cannam@86 13212 class="cmtt-8">&#x00A0;</span><span
cannam@86 13213 class="cmtt-8">&#x00A0;0.0053761186,</span><span
cannam@86 13214 class="cmtt-8">&#x00A0;</span><span
cannam@86 13215 class="cmtt-8">&#x00A0;0.0057254891,</span><span
cannam@86 13216 class="cmtt-8">&#x00A0;</span><span
cannam@86 13217 class="cmtt-8">&#x00A0;0.0060975636,</span><span
cannam@86 13218 class="cmtt-8">&#x00A0;</span><span
cannam@86 13219 class="cmtt-8">&#x00A0;0.0064938176,</span>
cannam@86 13220 <br class="fancyvrb" /><a
cannam@86 13221 id="x1-125090r45"></a><span
cannam@86 13222 class="cmr-6">45</span><span
cannam@86 13223 class="cmtt-8">&#x00A0;</span><span
cannam@86 13224 class="cmtt-8">&#x00A0;</span><span
cannam@86 13225 class="cmtt-8">&#x00A0;</span><span
cannam@86 13226 class="cmtt-8">&#x00A0;0.0069158225,</span><span
cannam@86 13227 class="cmtt-8">&#x00A0;</span><span
cannam@86 13228 class="cmtt-8">&#x00A0;0.0073652516,</span><span
cannam@86 13229 class="cmtt-8">&#x00A0;</span><span
cannam@86 13230 class="cmtt-8">&#x00A0;0.0078438871,</span><span
cannam@86 13231 class="cmtt-8">&#x00A0;</span><span
cannam@86 13232 class="cmtt-8">&#x00A0;0.0083536271,</span>
cannam@86 13233 <br class="fancyvrb" /><a
cannam@86 13234 id="x1-125092r46"></a><span
cannam@86 13235 class="cmr-6">46</span><span
cannam@86 13236 class="cmtt-8">&#x00A0;</span><span
cannam@86 13237 class="cmtt-8">&#x00A0;</span><span
cannam@86 13238 class="cmtt-8">&#x00A0;</span><span
cannam@86 13239 class="cmtt-8">&#x00A0;0.0088964928,</span><span
cannam@86 13240 class="cmtt-8">&#x00A0;</span><span
cannam@86 13241 class="cmtt-8">&#x00A0;0.009474637,</span><span
cannam@86 13242 class="cmtt-8">&#x00A0;</span><span
cannam@86 13243 class="cmtt-8">&#x00A0;</span><span
cannam@86 13244 class="cmtt-8">&#x00A0;0.010090352,</span><span
cannam@86 13245 class="cmtt-8">&#x00A0;</span><span
cannam@86 13246 class="cmtt-8">&#x00A0;</span><span
cannam@86 13247 class="cmtt-8">&#x00A0;0.010746080,</span>
cannam@86 13248 <br class="fancyvrb" /><a
cannam@86 13249 id="x1-125094r47"></a><span
cannam@86 13250 class="cmr-6">47</span><span
cannam@86 13251 class="cmtt-8">&#x00A0;</span><span
cannam@86 13252 class="cmtt-8">&#x00A0;</span><span
cannam@86 13253 class="cmtt-8">&#x00A0;</span><span
cannam@86 13254 class="cmtt-8">&#x00A0;0.011444421,</span><span
cannam@86 13255 class="cmtt-8">&#x00A0;</span><span
cannam@86 13256 class="cmtt-8">&#x00A0;</span><span
cannam@86 13257 class="cmtt-8">&#x00A0;0.012188144,</span><span
cannam@86 13258 class="cmtt-8">&#x00A0;</span><span
cannam@86 13259 class="cmtt-8">&#x00A0;</span><span
cannam@86 13260 class="cmtt-8">&#x00A0;0.012980198,</span><span
cannam@86 13261 class="cmtt-8">&#x00A0;</span><span
cannam@86 13262 class="cmtt-8">&#x00A0;</span><span
cannam@86 13263 class="cmtt-8">&#x00A0;0.013823725,</span>
cannam@86 13264 <br class="fancyvrb" /><a
cannam@86 13265 id="x1-125096r48"></a><span
cannam@86 13266 class="cmr-6">48</span><span
cannam@86 13267 class="cmtt-8">&#x00A0;</span><span
cannam@86 13268 class="cmtt-8">&#x00A0;</span><span
cannam@86 13269 class="cmtt-8">&#x00A0;</span><span
cannam@86 13270 class="cmtt-8">&#x00A0;0.014722068,</span><span
cannam@86 13271 class="cmtt-8">&#x00A0;</span><span
cannam@86 13272 class="cmtt-8">&#x00A0;</span><span
cannam@86 13273 class="cmtt-8">&#x00A0;0.015678791,</span><span
cannam@86 13274 class="cmtt-8">&#x00A0;</span><span
cannam@86 13275 class="cmtt-8">&#x00A0;</span><span
cannam@86 13276 class="cmtt-8">&#x00A0;0.016697687,</span><span
cannam@86 13277 class="cmtt-8">&#x00A0;</span><span
cannam@86 13278 class="cmtt-8">&#x00A0;</span><span
cannam@86 13279 class="cmtt-8">&#x00A0;0.017782797,</span>
cannam@86 13280 <br class="fancyvrb" /><a
cannam@86 13281 id="x1-125098r49"></a><span
cannam@86 13282 class="cmr-6">49</span><span
cannam@86 13283 class="cmtt-8">&#x00A0;</span><span
cannam@86 13284 class="cmtt-8">&#x00A0;</span><span
cannam@86 13285 class="cmtt-8">&#x00A0;</span><span
cannam@86 13286 class="cmtt-8">&#x00A0;0.018938423,</span><span
cannam@86 13287 class="cmtt-8">&#x00A0;</span><span
cannam@86 13288 class="cmtt-8">&#x00A0;</span><span
cannam@86 13289 class="cmtt-8">&#x00A0;0.020169149,</span><span
cannam@86 13290 class="cmtt-8">&#x00A0;</span><span
cannam@86 13291 class="cmtt-8">&#x00A0;</span><span
cannam@86 13292 class="cmtt-8">&#x00A0;0.021479854,</span><span
cannam@86 13293 class="cmtt-8">&#x00A0;</span><span
cannam@86 13294 class="cmtt-8">&#x00A0;</span><span
cannam@86 13295 class="cmtt-8">&#x00A0;0.022875735,</span>
cannam@86 13296 <br class="fancyvrb" /><a
cannam@86 13297 id="x1-125100r50"></a><span
cannam@86 13298 class="cmr-6">50</span><span
cannam@86 13299 class="cmtt-8">&#x00A0;</span><span
cannam@86 13300 class="cmtt-8">&#x00A0;</span><span
cannam@86 13301 class="cmtt-8">&#x00A0;</span><span
cannam@86 13302 class="cmtt-8">&#x00A0;0.024362330,</span><span
cannam@86 13303 class="cmtt-8">&#x00A0;</span><span
cannam@86 13304 class="cmtt-8">&#x00A0;</span><span
cannam@86 13305 class="cmtt-8">&#x00A0;0.025945531,</span><span
cannam@86 13306 class="cmtt-8">&#x00A0;</span><span
cannam@86 13307 class="cmtt-8">&#x00A0;</span><span
cannam@86 13308 class="cmtt-8">&#x00A0;0.027631618,</span><span
cannam@86 13309 class="cmtt-8">&#x00A0;</span><span
cannam@86 13310 class="cmtt-8">&#x00A0;</span><span
cannam@86 13311 class="cmtt-8">&#x00A0;0.029427276,</span>
cannam@86 13312 <br class="fancyvrb" /><a
cannam@86 13313 id="x1-125102r51"></a><span
cannam@86 13314 class="cmr-6">51</span><span
cannam@86 13315 class="cmtt-8">&#x00A0;</span><span
cannam@86 13316 class="cmtt-8">&#x00A0;</span><span
cannam@86 13317 class="cmtt-8">&#x00A0;</span><span
cannam@86 13318 class="cmtt-8">&#x00A0;0.031339626,</span><span
cannam@86 13319 class="cmtt-8">&#x00A0;</span><span
cannam@86 13320 class="cmtt-8">&#x00A0;</span><span
cannam@86 13321 class="cmtt-8">&#x00A0;0.033376252,</span><span
cannam@86 13322 class="cmtt-8">&#x00A0;</span><span
cannam@86 13323 class="cmtt-8">&#x00A0;</span><span
cannam@86 13324 class="cmtt-8">&#x00A0;0.035545228,</span><span
cannam@86 13325 class="cmtt-8">&#x00A0;</span><span
cannam@86 13326 class="cmtt-8">&#x00A0;</span><span
cannam@86 13327 class="cmtt-8">&#x00A0;0.037855157,</span>
cannam@86 13328 <br class="fancyvrb" /><a
cannam@86 13329 id="x1-125104r52"></a><span
cannam@86 13330 class="cmr-6">52</span><span
cannam@86 13331 class="cmtt-8">&#x00A0;</span><span
cannam@86 13332 class="cmtt-8">&#x00A0;</span><span
cannam@86 13333 class="cmtt-8">&#x00A0;</span><span
cannam@86 13334 class="cmtt-8">&#x00A0;0.040315199,</span><span
cannam@86 13335 class="cmtt-8">&#x00A0;</span><span
cannam@86 13336 class="cmtt-8">&#x00A0;</span><span
cannam@86 13337 class="cmtt-8">&#x00A0;0.042935108,</span><span
cannam@86 13338 class="cmtt-8">&#x00A0;</span><span
cannam@86 13339 class="cmtt-8">&#x00A0;</span><span
cannam@86 13340 class="cmtt-8">&#x00A0;0.045725273,</span><span
cannam@86 13341 class="cmtt-8">&#x00A0;</span><span
cannam@86 13342 class="cmtt-8">&#x00A0;</span><span
cannam@86 13343 class="cmtt-8">&#x00A0;0.048696758,</span>
cannam@86 13344 <br class="fancyvrb" /><a
cannam@86 13345 id="x1-125106r53"></a><span
cannam@86 13346 class="cmr-6">53</span><span
cannam@86 13347 class="cmtt-8">&#x00A0;</span><span
cannam@86 13348 class="cmtt-8">&#x00A0;</span><span
cannam@86 13349 class="cmtt-8">&#x00A0;</span><span
cannam@86 13350 class="cmtt-8">&#x00A0;0.051861348,</span><span
cannam@86 13351 class="cmtt-8">&#x00A0;</span><span
cannam@86 13352 class="cmtt-8">&#x00A0;</span><span
cannam@86 13353 class="cmtt-8">&#x00A0;0.055231591,</span><span
cannam@86 13354 class="cmtt-8">&#x00A0;</span><span
cannam@86 13355 class="cmtt-8">&#x00A0;</span><span
cannam@86 13356 class="cmtt-8">&#x00A0;0.058820850,</span><span
cannam@86 13357 class="cmtt-8">&#x00A0;</span><span
cannam@86 13358 class="cmtt-8">&#x00A0;</span><span
cannam@86 13359 class="cmtt-8">&#x00A0;0.062643361,</span>
cannam@86 13360 <br class="fancyvrb" /><a
cannam@86 13361 id="x1-125108r54"></a><span
cannam@86 13362 class="cmr-6">54</span><span
cannam@86 13363 class="cmtt-8">&#x00A0;</span><span
cannam@86 13364 class="cmtt-8">&#x00A0;</span><span
cannam@86 13365 class="cmtt-8">&#x00A0;</span><span
cannam@86 13366 class="cmtt-8">&#x00A0;0.066714279,</span><span
cannam@86 13367 class="cmtt-8">&#x00A0;</span><span
cannam@86 13368 class="cmtt-8">&#x00A0;</span><span
cannam@86 13369 class="cmtt-8">&#x00A0;0.071049749,</span><span
cannam@86 13370 class="cmtt-8">&#x00A0;</span><span
cannam@86 13371 class="cmtt-8">&#x00A0;</span><span
cannam@86 13372 class="cmtt-8">&#x00A0;0.075666962,</span><span
cannam@86 13373 class="cmtt-8">&#x00A0;</span><span
cannam@86 13374 class="cmtt-8">&#x00A0;</span><span
cannam@86 13375 class="cmtt-8">&#x00A0;0.080584227,</span>
cannam@86 13376 <br class="fancyvrb" /><a
cannam@86 13377 id="x1-125110r55"></a><span
cannam@86 13378 class="cmr-6">55</span><span
cannam@86 13379 class="cmtt-8">&#x00A0;</span><span
cannam@86 13380 class="cmtt-8">&#x00A0;</span><span
cannam@86 13381 class="cmtt-8">&#x00A0;</span><span
cannam@86 13382 class="cmtt-8">&#x00A0;0.085821044,</span><span
cannam@86 13383 class="cmtt-8">&#x00A0;</span><span
cannam@86 13384 class="cmtt-8">&#x00A0;</span><span
cannam@86 13385 class="cmtt-8">&#x00A0;0.091398179,</span><span
cannam@86 13386 class="cmtt-8">&#x00A0;</span><span
cannam@86 13387 class="cmtt-8">&#x00A0;</span><span
cannam@86 13388 class="cmtt-8">&#x00A0;0.097337747,</span><span
cannam@86 13389 class="cmtt-8">&#x00A0;</span><span
cannam@86 13390 class="cmtt-8">&#x00A0;</span><span
cannam@86 13391 class="cmtt-8">&#x00A0;0.10366330,</span>
cannam@86 13392 <br class="fancyvrb" /><a
cannam@86 13393 id="x1-125112r56"></a><span
cannam@86 13394 class="cmr-6">56</span><span
cannam@86 13395 class="cmtt-8">&#x00A0;</span><span
cannam@86 13396 class="cmtt-8">&#x00A0;</span><span
cannam@86 13397 class="cmtt-8">&#x00A0;</span><span
cannam@86 13398 class="cmtt-8">&#x00A0;0.11039993,</span><span
cannam@86 13399 class="cmtt-8">&#x00A0;</span><span
cannam@86 13400 class="cmtt-8">&#x00A0;</span><span
cannam@86 13401 class="cmtt-8">&#x00A0;</span><span
cannam@86 13402 class="cmtt-8">&#x00A0;0.11757434,</span><span
cannam@86 13403 class="cmtt-8">&#x00A0;</span><span
cannam@86 13404 class="cmtt-8">&#x00A0;</span><span
cannam@86 13405 class="cmtt-8">&#x00A0;</span><span
cannam@86 13406 class="cmtt-8">&#x00A0;0.12521498,</span><span
cannam@86 13407 class="cmtt-8">&#x00A0;</span><span
cannam@86 13408 class="cmtt-8">&#x00A0;</span><span
cannam@86 13409 class="cmtt-8">&#x00A0;</span><span
cannam@86 13410 class="cmtt-8">&#x00A0;0.13335215,</span>
cannam@86 13411 <br class="fancyvrb" /><a
cannam@86 13412 id="x1-125114r57"></a><span
cannam@86 13413 class="cmr-6">57</span><span
cannam@86 13414 class="cmtt-8">&#x00A0;</span><span
cannam@86 13415 class="cmtt-8">&#x00A0;</span><span
cannam@86 13416 class="cmtt-8">&#x00A0;</span><span
cannam@86 13417 class="cmtt-8">&#x00A0;0.14201813,</span><span
cannam@86 13418 class="cmtt-8">&#x00A0;</span><span
cannam@86 13419 class="cmtt-8">&#x00A0;</span><span
cannam@86 13420 class="cmtt-8">&#x00A0;</span><span
cannam@86 13421 class="cmtt-8">&#x00A0;0.15124727,</span><span
cannam@86 13422 class="cmtt-8">&#x00A0;</span><span
cannam@86 13423 class="cmtt-8">&#x00A0;</span><span
cannam@86 13424 class="cmtt-8">&#x00A0;</span><span
cannam@86 13425 class="cmtt-8">&#x00A0;0.16107617,</span><span
cannam@86 13426 class="cmtt-8">&#x00A0;</span><span
cannam@86 13427 class="cmtt-8">&#x00A0;</span><span
cannam@86 13428 class="cmtt-8">&#x00A0;</span><span
cannam@86 13429 class="cmtt-8">&#x00A0;0.17154380,</span>
cannam@86 13430 <br class="fancyvrb" /><a
cannam@86 13431 id="x1-125116r58"></a><span
cannam@86 13432 class="cmr-6">58</span><span
cannam@86 13433 class="cmtt-8">&#x00A0;</span><span
cannam@86 13434 class="cmtt-8">&#x00A0;</span><span
cannam@86 13435 class="cmtt-8">&#x00A0;</span><span
cannam@86 13436 class="cmtt-8">&#x00A0;0.18269168,</span><span
cannam@86 13437 class="cmtt-8">&#x00A0;</span><span
cannam@86 13438 class="cmtt-8">&#x00A0;</span><span
cannam@86 13439 class="cmtt-8">&#x00A0;</span><span
cannam@86 13440 class="cmtt-8">&#x00A0;0.19456402,</span><span
cannam@86 13441 class="cmtt-8">&#x00A0;</span><span
cannam@86 13442 class="cmtt-8">&#x00A0;</span><span
cannam@86 13443 class="cmtt-8">&#x00A0;</span><span
cannam@86 13444 class="cmtt-8">&#x00A0;0.20720788,</span><span
cannam@86 13445 class="cmtt-8">&#x00A0;</span><span
cannam@86 13446 class="cmtt-8">&#x00A0;</span><span
cannam@86 13447 class="cmtt-8">&#x00A0;</span><span
cannam@86 13448 class="cmtt-8">&#x00A0;0.22067342,</span>
cannam@86 13449 <br class="fancyvrb" /><a
cannam@86 13450 id="x1-125118r59"></a><span
cannam@86 13451 class="cmr-6">59</span><span
cannam@86 13452 class="cmtt-8">&#x00A0;</span><span
cannam@86 13453 class="cmtt-8">&#x00A0;</span><span
cannam@86 13454 class="cmtt-8">&#x00A0;</span><span
cannam@86 13455 class="cmtt-8">&#x00A0;0.23501402,</span><span
cannam@86 13456 class="cmtt-8">&#x00A0;</span><span
cannam@86 13457 class="cmtt-8">&#x00A0;</span><span
cannam@86 13458 class="cmtt-8">&#x00A0;</span><span
cannam@86 13459 class="cmtt-8">&#x00A0;0.25028656,</span><span
cannam@86 13460 class="cmtt-8">&#x00A0;</span><span
cannam@86 13461 class="cmtt-8">&#x00A0;</span><span
cannam@86 13462 class="cmtt-8">&#x00A0;</span><span
cannam@86 13463 class="cmtt-8">&#x00A0;0.26655159,</span><span
cannam@86 13464 class="cmtt-8">&#x00A0;</span><span
cannam@86 13465 class="cmtt-8">&#x00A0;</span><span
cannam@86 13466 class="cmtt-8">&#x00A0;</span><span
cannam@86 13467 class="cmtt-8">&#x00A0;0.28387361,</span>
cannam@86 13468 <br class="fancyvrb" /><a
cannam@86 13469 id="x1-125120r60"></a><span
cannam@86 13470 class="cmr-6">60</span><span
cannam@86 13471 class="cmtt-8">&#x00A0;</span><span
cannam@86 13472 class="cmtt-8">&#x00A0;</span><span
cannam@86 13473 class="cmtt-8">&#x00A0;</span><span
cannam@86 13474 class="cmtt-8">&#x00A0;0.30232132,</span><span
cannam@86 13475 class="cmtt-8">&#x00A0;</span><span
cannam@86 13476 class="cmtt-8">&#x00A0;</span><span
cannam@86 13477 class="cmtt-8">&#x00A0;</span><span
cannam@86 13478 class="cmtt-8">&#x00A0;0.32196786,</span><span
cannam@86 13479 class="cmtt-8">&#x00A0;</span><span
cannam@86 13480 class="cmtt-8">&#x00A0;</span><span
cannam@86 13481 class="cmtt-8">&#x00A0;</span><span
cannam@86 13482 class="cmtt-8">&#x00A0;0.34289114,</span><span
cannam@86 13483 class="cmtt-8">&#x00A0;</span><span
cannam@86 13484 class="cmtt-8">&#x00A0;</span><span
cannam@86 13485 class="cmtt-8">&#x00A0;</span><span
cannam@86 13486 class="cmtt-8">&#x00A0;0.36517414,</span>
cannam@86 13487 <br class="fancyvrb" /><a
cannam@86 13488 id="x1-125122r61"></a><span
cannam@86 13489 class="cmr-6">61</span><span
cannam@86 13490 class="cmtt-8">&#x00A0;</span><span
cannam@86 13491 class="cmtt-8">&#x00A0;</span><span
cannam@86 13492 class="cmtt-8">&#x00A0;</span><span
cannam@86 13493 class="cmtt-8">&#x00A0;0.38890521,</span><span
cannam@86 13494 class="cmtt-8">&#x00A0;</span><span
cannam@86 13495 class="cmtt-8">&#x00A0;</span><span
cannam@86 13496 class="cmtt-8">&#x00A0;</span><span
cannam@86 13497 class="cmtt-8">&#x00A0;0.41417847,</span><span
cannam@86 13498 class="cmtt-8">&#x00A0;</span><span
cannam@86 13499 class="cmtt-8">&#x00A0;</span><span
cannam@86 13500 class="cmtt-8">&#x00A0;</span><span
cannam@86 13501 class="cmtt-8">&#x00A0;0.44109412,</span><span
cannam@86 13502 class="cmtt-8">&#x00A0;</span><span
cannam@86 13503 class="cmtt-8">&#x00A0;</span><span
cannam@86 13504 class="cmtt-8">&#x00A0;</span><span
cannam@86 13505 class="cmtt-8">&#x00A0;0.46975890,</span>
cannam@86 13506 <br class="fancyvrb" /><a
cannam@86 13507 id="x1-125124r62"></a><span
cannam@86 13508 class="cmr-6">62</span><span
cannam@86 13509 class="cmtt-8">&#x00A0;</span><span
cannam@86 13510 class="cmtt-8">&#x00A0;</span><span
cannam@86 13511 class="cmtt-8">&#x00A0;</span><span
cannam@86 13512 class="cmtt-8">&#x00A0;0.50028648,</span><span
cannam@86 13513 class="cmtt-8">&#x00A0;</span><span
cannam@86 13514 class="cmtt-8">&#x00A0;</span><span
cannam@86 13515 class="cmtt-8">&#x00A0;</span><span
cannam@86 13516 class="cmtt-8">&#x00A0;0.53279791,</span><span
cannam@86 13517 class="cmtt-8">&#x00A0;</span><span
cannam@86 13518 class="cmtt-8">&#x00A0;</span><span
cannam@86 13519 class="cmtt-8">&#x00A0;</span><span
cannam@86 13520 class="cmtt-8">&#x00A0;0.56742212,</span><span
cannam@86 13521 class="cmtt-8">&#x00A0;</span><span
cannam@86 13522 class="cmtt-8">&#x00A0;</span><span
cannam@86 13523 class="cmtt-8">&#x00A0;</span><span
cannam@86 13524 class="cmtt-8">&#x00A0;0.60429640,</span>
cannam@86 13525 <br class="fancyvrb" /><a
cannam@86 13526 id="x1-125126r63"></a><span
cannam@86 13527 class="cmr-6">63</span><span
cannam@86 13528 class="cmtt-8">&#x00A0;</span><span
cannam@86 13529 class="cmtt-8">&#x00A0;</span><span
cannam@86 13530 class="cmtt-8">&#x00A0;</span><span
cannam@86 13531 class="cmtt-8">&#x00A0;0.64356699,</span><span
cannam@86 13532 class="cmtt-8">&#x00A0;</span><span
cannam@86 13533 class="cmtt-8">&#x00A0;</span><span
cannam@86 13534 class="cmtt-8">&#x00A0;</span><span
cannam@86 13535 class="cmtt-8">&#x00A0;0.68538959,</span><span
cannam@86 13536 class="cmtt-8">&#x00A0;</span><span
cannam@86 13537 class="cmtt-8">&#x00A0;</span><span
cannam@86 13538 class="cmtt-8">&#x00A0;</span><span
cannam@86 13539 class="cmtt-8">&#x00A0;0.72993007,</span><span
cannam@86 13540 class="cmtt-8">&#x00A0;</span><span
cannam@86 13541 class="cmtt-8">&#x00A0;</span><span
cannam@86 13542 class="cmtt-8">&#x00A0;</span><span
cannam@86 13543 class="cmtt-8">&#x00A0;0.77736504,</span>
cannam@86 13544 <br class="fancyvrb" /><a
cannam@86 13545 id="x1-125128r64"></a><span
cannam@86 13546 class="cmr-6">64</span><span
cannam@86 13547 class="cmtt-8">&#x00A0;</span><span
cannam@86 13548 class="cmtt-8">&#x00A0;</span><span
cannam@86 13549 class="cmtt-8">&#x00A0;</span><span
cannam@86 13550 class="cmtt-8">&#x00A0;0.82788260,</span><span
cannam@86 13551 class="cmtt-8">&#x00A0;</span><span
cannam@86 13552 class="cmtt-8">&#x00A0;</span><span
cannam@86 13553 class="cmtt-8">&#x00A0;</span><span
cannam@86 13554 class="cmtt-8">&#x00A0;0.88168307,</span><span
cannam@86 13555 class="cmtt-8">&#x00A0;</span><span
cannam@86 13556 class="cmtt-8">&#x00A0;</span><span
cannam@86 13557 class="cmtt-8">&#x00A0;</span><span
cannam@86 13558 class="cmtt-8">&#x00A0;0.9389798,</span><span
cannam@86 13559 class="cmtt-8">&#x00A0;</span><span
cannam@86 13560 class="cmtt-8">&#x00A0;</span><span
cannam@86 13561 class="cmtt-8">&#x00A0;</span><span
cannam@86 13562 class="cmtt-8">&#x00A0;</span><span
cannam@86 13563 class="cmtt-8">&#x00A0;1.</span>
cannam@86 13564 </div>
cannam@86 13565
cannam@86 13566
cannam@86 13567
cannam@86 13568
cannam@86 13569
cannam@86 13570
cannam@86 13571 <h3 class="sectionHead"><span class="titlemark">A. </span> <a
cannam@86 13572 id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3>
cannam@86 13573 <!--l. 6--><p class="noindent" >
cannam@86 13574 <h4 class="subsectionHead"><span class="titlemark">A.1. </span> <a
cannam@86 13575 id="x1-127000A.1"></a>Overview</h4>
cannam@86 13576 <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
cannam@86 13577 compressed audio packet data into file form.
cannam@86 13578 <!--l. 12--><p class="noindent" >The <a
cannam@86 13579 href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a
cannam@86 13580 href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221; provides an overview of the construction of
cannam@86 13581 Vorbis audio packets.
cannam@86 13582 <!--l. 15--><p class="noindent" >The <a
cannam@86 13583 href="oggstream.html" >Ogg bitstream overview</a> and <a
cannam@86 13584 href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
cannam@86 13585 descriptions of Ogg transport streams. This specification document assumes a working
cannam@86 13586 knowledge of the concepts covered in these named backround documents. Please read them
cannam@86 13587 first.
cannam@86 13588 <!--l. 22--><p class="noindent" >
cannam@86 13589 <h5 class="subsubsectionHead"><span class="titlemark">A.1.1. </span> <a
cannam@86 13590 id="x1-128000A.1.1"></a>Restrictions</h5>
cannam@86 13591 <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
cannam@86 13592 streams in degenerate, unmultiplexed form only. That is:
cannam@86 13593 <ul class="itemize1">
cannam@86 13594 <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
cannam@86 13595 </li>
cannam@86 13596 <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
cannam@86 13597 (links).
cannam@86 13598 </li>
cannam@86 13599 <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
cannam@86 13600 per link)
cannam@86 13601 </li></ul>
cannam@86 13602
cannam@86 13603
cannam@86 13604
cannam@86 13605 <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
cannam@86 13606 types into a multi-stream Ogg file. At the time this document was written, Ogg was
cannam@86 13607 becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
cannam@86 13608 audio. However, a &#8217;Vorbis I audio file&#8217; is taken to imply Vorbis audio existing alone
cannam@86 13609 within a degenerate Ogg stream. A compliant &#8217;Vorbis audio player&#8217; is not required to
cannam@86 13610 implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
cannam@86 13611 stream (naturally, application authors are encouraged to support full multiplexed Ogg
cannam@86 13612 handling).
cannam@86 13613 <!--l. 55--><p class="noindent" >
cannam@86 13614 <h5 class="subsubsectionHead"><span class="titlemark">A.1.2. </span> <a
cannam@86 13615 id="x1-129000A.1.2"></a>MIME type</h5>
cannam@86 13616 <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
cannam@86 13617 applications should use <span
cannam@86 13618 class="cmtt-12">application/ogg</span>, while visual media should use <span
cannam@86 13619 class="cmtt-12">video/ogg</span>, and audio
cannam@86 13620 <span
cannam@86 13621 class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
cannam@86 13622 encapsulated Vorbis should use <span
cannam@86 13623 class="cmtt-12">audio/vorbis </span>+ <span
cannam@86 13624 class="cmtt-12">audio/vorbis-config</span>.
cannam@86 13625 <!--l. 65--><p class="noindent" >
cannam@86 13626 <h4 class="subsectionHead"><span class="titlemark">A.2. </span> <a
cannam@86 13627 id="x1-130000A.2"></a>Encapsulation</h4>
cannam@86 13628 <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
cannam@86 13629 <ul class="itemize1">
cannam@86 13630 <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
cannam@86 13631 as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
cannam@86 13632 results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
cannam@86 13633 stream.
cannam@86 13634 </li>
cannam@86 13635 <li class="itemize">This first page is marked &#8217;beginning of stream&#8217; in the page flags.
cannam@86 13636 </li>
cannam@86 13637 <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
cannam@86 13638 more pages beginning on the second page of the logical stream. However many pages
cannam@86 13639 they span, the third header packet finishes the page on which it ends. The next (first
cannam@86 13640 audio) packet must begin on a fresh page.
cannam@86 13641
cannam@86 13642
cannam@86 13643
cannam@86 13644 </li>
cannam@86 13645 <li class="itemize">The granule position of these first pages containing only headers is zero.
cannam@86 13646 </li>
cannam@86 13647 <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
cannam@86 13648 </li>
cannam@86 13649 <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
cannam@86 13650 </li>
cannam@86 13651 <li class="itemize">The last page is marked &#8217;end of stream&#8217; in the page flags.
cannam@86 13652 </li>
cannam@86 13653 <li class="itemize">Vorbis packets may span page boundaries.
cannam@86 13654 </li>
cannam@86 13655 <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
cannam@86 13656 samples (per channel; a stereo stream&#8217;s granule position does not increment at twice
cannam@86 13657 the speed of a mono stream).
cannam@86 13658 </li>
cannam@86 13659 <li class="itemize">The granule position of a page represents the end PCM sample position of the last
cannam@86 13660 packet <span
cannam@86 13661 class="cmti-12">completed </span>on that page. The &#8217;last PCM sample&#8217; is the last complete sample
cannam@86 13662 returned by decode, not an internal sample awaiting lapping with a subsequent block.
cannam@86 13663 A page that is entirely spanned by a single packet (that completes on a subsequent
cannam@86 13664 page) has no granule position, and the granule position is set to &#8217;-1&#8217;.
cannam@86 13665 <!--l. 126--><p class="noindent" >Note that the last decoded (fully lapped) PCM sample from a packet is not
cannam@86 13666 necessarily the middle sample from that block. If, eg, the current Vorbis packet
cannam@86 13667 encodes a &#8221;long block&#8221; and the next Vorbis packet encodes a &#8221;short block&#8221;, the last
cannam@86 13668 decodable sample from the current packet be at position (3*long_block_length/4) -
cannam@86 13669 (short_block_length/4).
cannam@86 13670 </li>
cannam@86 13671 <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
cannam@86 13672 started at position zero. Although the granule position belongs to the last completed
cannam@86 13673 packet on the page and a valid granule position must be positive, by inference it may
cannam@86 13674 indicate that the PCM position of the beginning of audio is positive or negative.
cannam@86 13675 <ul class="itemize2">
cannam@86 13676 <li class="itemize">A positive starting value simply indicates that this stream begins at some
cannam@86 13677 positive time offset, potentially within a larger program. This is a common case
cannam@86 13678 when connecting to the middle of broadcast stream.
cannam@86 13679 </li>
cannam@86 13680 <li class="itemize">A negative value indicates that output samples preceeding time zero should be
cannam@86 13681
cannam@86 13682
cannam@86 13683
cannam@86 13684 discarded during decoding; this technique is used to allow sample-granularity
cannam@86 13685 editing of the stream start time of already-encoded Vorbis streams. The number
cannam@86 13686 of samples to be discarded must not exceed the overlap-add span of the first two
cannam@86 13687 audio packets.
cannam@86 13688 </li></ul>
cannam@86 13689 <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
cannam@86 13690 second finished audio packet must flush the page on which it appears and the
cannam@86 13691 third packet begin a fresh page. This allows the decoder to always be able to
cannam@86 13692 perform PCM position adjustments before needing to return any PCM data from
cannam@86 13693 synthesis, resulting in correct positioning information without any aditional seeking
cannam@86 13694 logic.
cannam@86 13695 <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a
cannam@86 13696 id="x1-131000A.2"></a><span
cannam@86 13697 class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
cannam@86 13698 incorrect positioning information for seeking operations at the very beginning of the
cannam@86 13699 stream.
cannam@86 13700 </li>
cannam@86 13701 <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
cannam@86 13702 final packet would normally return is used to end the stream on other than even frame
cannam@86 13703 boundaries. The difference between the actual available data returned and the
cannam@86 13704 declared amount indicates how many trailing samples to discard from the decoding
cannam@86 13705 process.
cannam@86 13706 </li></ul>
cannam@86 13707
cannam@86 13708
cannam@86 13709
cannam@86 13710 <h3 class="sectionHead"><span class="titlemark">B. </span> <a
cannam@86 13711 id="x1-132000B"></a>Vorbis encapsulation in RTP</h3>
cannam@86 13712 <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span
cannam@86 13713 class="cmti-12">&#8220;RTP Payload Format for Vorbis Encoded Audio&#8221; </span>for description of
cannam@86 13714 how to embed Vorbis audio in an RTP stream.
cannam@86 13715
cannam@86 13716
cannam@86 13717
cannam@86 13718
cannam@86 13719
cannam@86 13720
cannam@86 13721 <h3 class="likesectionHead"><a
cannam@86 13722 id="x1-133000B"></a>Colophon</h3>
cannam@86 13723 <!--l. 6--><p class="noindent" ><img
cannam@86 13724 src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics
cannam@86 13725 name="Vorbis_I_spec13x.png" src="xifish.pdf"
cannam@86 13726 -->
cannam@86 13727 <!--l. 10--><p class="noindent" >Ogg is a <a
cannam@86 13728 href="http://www.xiph.org/" >Xiph.Org Foundation</a> effort to protect essential tenets of Internet multimedia from
cannam@86 13729 corporate hostage-taking; Open Source is the net&#8217;s greatest tool to keep everyone honest. See
cannam@86 13730 <a
cannam@86 13731 href="http://www.xiph.org/about.html" >About the Xiph.Org Foundation</a> for details.
cannam@86 13732 <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
cannam@86 13733 Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.Org
cannam@86 13734 Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
cannam@86 13735 and certify specification compliance.
cannam@86 13736 <!--l. 23--><p class="noindent" >Xiph.Org&#8217;s Vorbis software CODEC implementation is distributed under a BSD-like license. This
cannam@86 13737 does not restrict third parties from distributing independent implementations of Vorbis software
cannam@86 13738 under other licenses.
cannam@86 13739 <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.Org Foundation and their logos are trademarks (tm) of the <a
cannam@86 13740 href="http://www.xiph.org/" >Xiph.Org
cannam@86 13741 Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.Org Foundation. All rights
cannam@86 13742 reserved.
cannam@86 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
cannam@86 13744 class="E">E</span>X</span></span>.
cannam@86 13745
cannam@86 13746
cannam@86 13747
cannam@86 13748 <h3 class="likesectionHead"><a
cannam@86 13749 id="x1-134000B"></a>References</h3>
cannam@86 13750 <!--l. 125--><p class="noindent" >
cannam@86 13751 <div class="thebibliography">
cannam@86 13752 <p class="bibitem" ><span class="biblabel">
cannam@86 13753 [1]<span class="bibsp">&#x00A0;&#x00A0;&#x00A0;</span></span><a
cannam@86 13754 id="XSporer/Brandenburg/Edler"></a>T.&#x00A0;Sporer, K.&#x00A0;Brandenburg and
cannam@86 13755 B.&#x00A0;Edler, The use of multirate filter banks for coding of high quality digital audio,
cannam@86 13756 <a
cannam@86 13757 href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span
cannam@86 13758 class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
cannam@86 13759 </p>
cannam@86 13760 </div>
cannam@86 13761
cannam@86 13762 </body></html>
cannam@86 13763
cannam@86 13764
cannam@86 13765
cannam@86 13766