Vorbis_I_spec.html 564 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html >
  4. <head><title>Vorbis I specification</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  6. <meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
  7. <meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)">
  8. <!-- html -->
  9. <meta name="src" content="Vorbis_I_spec.tex">
  10. <meta name="date" content="2012-02-03 17:06:00">
  11. <link rel="stylesheet" type="text/css" href="Vorbis_I_spec.css">
  12. </head><body
  13. >
  14. <div class="maketitle">
  15. <h2 class="titleHead">Vorbis I specification</h2>
  16. <div class="author" ><span
  17. class="cmr-17">Xiph.Org Foundation</span></div><br />
  18. <div class="date" ><span
  19. class="cmr-17">February 3, 2012</span></div>
  20. </div>
  21. <h3 class="likesectionHead"><a
  22. id="x1-1000"></a>Contents</h3>
  23. <div class="tableofcontents">
  24. &#x00A0;<span class="sectionToc" >1 <a
  25. href="#x1-20001" id="QQ2-1-2">Introduction and Description</a></span>
  26. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.1 <a
  27. href="#x1-30001.1" id="QQ2-1-3">Overview</a></span>
  28. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.1 <a
  29. href="#x1-40001.1.1" id="QQ2-1-4">Application</a></span>
  30. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.2 <a
  31. href="#x1-50001.1.2" id="QQ2-1-5">Classification</a></span>
  32. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.3 <a
  33. href="#x1-60001.1.3" id="QQ2-1-6">Assumptions</a></span>
  34. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.4 <a
  35. href="#x1-70001.1.4" id="QQ2-1-7">Codec Setup and Probability Model</a></span>
  36. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.5 <a
  37. href="#x1-90001.1.5" id="QQ2-1-9">Format Specification</a></span>
  38. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.1.6 <a
  39. href="#x1-100001.1.6" id="QQ2-1-10">Hardware Profile</a></span>
  40. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.2 <a
  41. href="#x1-110001.2" id="QQ2-1-11">Decoder Configuration</a></span>
  42. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.1 <a
  43. href="#x1-120001.2.1" id="QQ2-1-13">Global Config</a></span>
  44. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.2 <a
  45. href="#x1-130001.2.2" id="QQ2-1-14">Mode</a></span>
  46. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.3 <a
  47. href="#x1-140001.2.3" id="QQ2-1-15">Mapping</a></span>
  48. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.4 <a
  49. href="#x1-150001.2.4" id="QQ2-1-16">Floor</a></span>
  50. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.5 <a
  51. href="#x1-160001.2.5" id="QQ2-1-17">Residue</a></span>
  52. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.2.6 <a
  53. href="#x1-170001.2.6" id="QQ2-1-18">Codebooks</a></span>
  54. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >1.3 <a
  55. href="#x1-180001.3" id="QQ2-1-19">High-level Decode Process</a></span>
  56. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.1 <a
  57. href="#x1-190001.3.1" id="QQ2-1-20">Decode Setup</a></span>
  58. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >1.3.2 <a
  59. href="#x1-230001.3.2" id="QQ2-1-24">Decode Procedure</a></span>
  60. <br />&#x00A0;<span class="sectionToc" >2 <a
  61. href="#x1-360002" id="QQ2-1-39">Bitpacking Convention</a></span>
  62. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >2.1 <a
  63. href="#x1-370002.1" id="QQ2-1-40">Overview</a></span>
  64. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.1 <a
  65. href="#x1-380002.1.1" id="QQ2-1-41">octets, bytes and words</a></span>
  66. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.2 <a
  67. href="#x1-390002.1.2" id="QQ2-1-42">bit order</a></span>
  68. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.3 <a
  69. href="#x1-400002.1.3" id="QQ2-1-43">byte order</a></span>
  70. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.4 <a
  71. href="#x1-410002.1.4" id="QQ2-1-44">coding bits into byte sequences</a></span>
  72. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.5 <a
  73. href="#x1-420002.1.5" id="QQ2-1-45">signedness</a></span>
  74. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.6 <a
  75. href="#x1-430002.1.6" id="QQ2-1-46">coding example</a></span>
  76. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.7 <a
  77. href="#x1-440002.1.7" id="QQ2-1-47">decoding example</a></span>
  78. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.8 <a
  79. href="#x1-450002.1.8" id="QQ2-1-48">end-of-packet alignment</a></span>
  80. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >2.1.9 <a
  81. href="#x1-460002.1.9" id="QQ2-1-49">reading zero bits</a></span>
  82. <br />&#x00A0;<span class="sectionToc" >3 <a
  83. href="#x1-470003" id="QQ2-1-50">Probability Model and Codebooks</a></span>
  84. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.1 <a
  85. href="#x1-480003.1" id="QQ2-1-51">Overview</a></span>
  86. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.1 <a
  87. href="#x1-490003.1.1" id="QQ2-1-52">Bitwise operation</a></span>
  88. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.2 <a
  89. href="#x1-500003.2" id="QQ2-1-53">Packed codebook format</a></span>
  90. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >3.2.1 <a
  91. href="#x1-510003.2.1" id="QQ2-1-54">codebook decode</a></span>
  92. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >3.3 <a
  93. href="#x1-570003.3" id="QQ2-1-62">Use of the codebook abstraction</a></span>
  94. <br />&#x00A0;<span class="sectionToc" >4 <a
  95. href="#x1-580004" id="QQ2-1-63">Codec Setup and Packet Decode</a></span>
  96. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.1 <a
  97. href="#x1-590004.1" id="QQ2-1-64">Overview</a></span>
  98. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.2 <a
  99. href="#x1-600004.2" id="QQ2-1-65">Header decode and decode setup</a></span>
  100. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.1 <a
  101. href="#x1-610004.2.1" id="QQ2-1-66">Common header decode</a></span>
  102. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.2 <a
  103. href="#x1-620004.2.2" id="QQ2-1-67">Identification header</a></span>
  104. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.3 <a
  105. href="#x1-630004.2.3" id="QQ2-1-68">Comment header</a></span>
  106. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.4 <a
  107. href="#x1-640004.2.4" id="QQ2-1-69">Setup header</a></span>
  108. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.3 <a
  109. href="#x1-710004.3" id="QQ2-1-77">Audio packet decode and synthesis</a></span>
  110. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.1 <a
  111. href="#x1-720004.3.1" id="QQ2-1-78">packet type, mode and window decode</a></span>
  112. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.2 <a
  113. href="#x1-730004.3.2" id="QQ2-1-79">floor curve decode</a></span>
  114. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.3 <a
  115. href="#x1-740004.3.3" id="QQ2-1-80">nonzero vector propagate</a></span>
  116. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.4 <a
  117. href="#x1-750004.3.4" id="QQ2-1-81">residue decode</a></span>
  118. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.5 <a
  119. href="#x1-760004.3.5" id="QQ2-1-82">inverse coupling</a></span>
  120. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.6 <a
  121. href="#x1-770004.3.6" id="QQ2-1-83">dot product</a></span>
  122. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.7 <a
  123. href="#x1-780004.3.7" id="QQ2-1-84">inverse MDCT</a></span>
  124. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.8 <a
  125. href="#x1-790004.3.8" id="QQ2-1-85">overlap_add</a></span>
  126. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.9 <a
  127. href="#x1-800004.3.9" id="QQ2-1-86">output channel order</a></span>
  128. <br />&#x00A0;<span class="sectionToc" >5 <a
  129. href="#x1-810005" id="QQ2-1-87">comment field and header specification</a></span>
  130. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.1 <a
  131. href="#x1-820005.1" id="QQ2-1-88">Overview</a></span>
  132. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.2 <a
  133. href="#x1-830005.2" id="QQ2-1-89">Comment encoding</a></span>
  134. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.1 <a
  135. href="#x1-840005.2.1" id="QQ2-1-90">Structure</a></span>
  136. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.2 <a
  137. href="#x1-850005.2.2" id="QQ2-1-91">Content vector format</a></span>
  138. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.3 <a
  139. href="#x1-880005.2.3" id="QQ2-1-94">Encoding</a></span>
  140. <br />&#x00A0;<span class="sectionToc" >6 <a
  141. href="#x1-890006" id="QQ2-1-95">Floor type 0 setup and decode</a></span>
  142. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.1 <a
  143. href="#x1-900006.1" id="QQ2-1-96">Overview</a></span>
  144. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.2 <a
  145. href="#x1-910006.2" id="QQ2-1-97">Floor 0 format</a></span>
  146. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.1 <a
  147. href="#x1-920006.2.1" id="QQ2-1-98">header decode</a></span>
  148. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.2 <a
  149. href="#x1-930006.2.2" id="QQ2-1-99">packet decode</a></span>
  150. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.3 <a
  151. href="#x1-940006.2.3" id="QQ2-1-100">curve computation</a></span>
  152. <br />&#x00A0;<span class="sectionToc" >7 <a
  153. href="#x1-950007" id="QQ2-1-101">Floor type 1 setup and decode</a></span>
  154. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.1 <a
  155. href="#x1-960007.1" id="QQ2-1-102">Overview</a></span>
  156. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.2 <a
  157. href="#x1-970007.2" id="QQ2-1-103">Floor 1 format</a></span>
  158. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.1 <a
  159. href="#x1-980007.2.1" id="QQ2-1-104">model</a></span>
  160. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.2 <a
  161. href="#x1-990007.2.2" id="QQ2-1-109">header decode</a></span>
  162. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.3 <a
  163. href="#x1-1000007.2.3" id="QQ2-1-110">packet decode</a></span>
  164. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.4 <a
  165. href="#x1-1010007.2.4" id="QQ2-1-111">curve computation</a></span>
  166. <br />&#x00A0;<span class="sectionToc" >8 <a
  167. href="#x1-1020008" id="QQ2-1-112">Residue setup and decode</a></span>
  168. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.1 <a
  169. href="#x1-1030008.1" id="QQ2-1-113">Overview</a></span>
  170. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.2 <a
  171. href="#x1-1040008.2" id="QQ2-1-114">Residue format</a></span>
  172. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.3 <a
  173. href="#x1-1050008.3" id="QQ2-1-116">residue 0</a></span>
  174. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.4 <a
  175. href="#x1-1060008.4" id="QQ2-1-117">residue 1</a></span>
  176. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.5 <a
  177. href="#x1-1070008.5" id="QQ2-1-118">residue 2</a></span>
  178. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.6 <a
  179. href="#x1-1080008.6" id="QQ2-1-120">Residue decode</a></span>
  180. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.1 <a
  181. href="#x1-1090008.6.1" id="QQ2-1-121">header decode</a></span>
  182. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.2 <a
  183. href="#x1-1100008.6.2" id="QQ2-1-122">packet decode</a></span>
  184. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.3 <a
  185. href="#x1-1110008.6.3" id="QQ2-1-123">format 0 specifics</a></span>
  186. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.4 <a
  187. href="#x1-1120008.6.4" id="QQ2-1-124">format 1 specifics</a></span>
  188. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.5 <a
  189. href="#x1-1130008.6.5" id="QQ2-1-125">format 2 specifics</a></span>
  190. <br />&#x00A0;<span class="sectionToc" >9 <a
  191. href="#x1-1140009" id="QQ2-1-126">Helper equations</a></span>
  192. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.1 <a
  193. href="#x1-1150009.1" id="QQ2-1-127">Overview</a></span>
  194. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.2 <a
  195. href="#x1-1160009.2" id="QQ2-1-128">Functions</a></span>
  196. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.1 <a
  197. href="#x1-1170009.2.1" id="QQ2-1-129">ilog</a></span>
  198. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.2 <a
  199. href="#x1-1180009.2.2" id="QQ2-1-130">float32_unpack</a></span>
  200. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.3 <a
  201. href="#x1-1190009.2.3" id="QQ2-1-131">lookup1_values</a></span>
  202. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.4 <a
  203. href="#x1-1200009.2.4" id="QQ2-1-132">low_neighbor</a></span>
  204. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.5 <a
  205. href="#x1-1210009.2.5" id="QQ2-1-133">high_neighbor</a></span>
  206. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.6 <a
  207. href="#x1-1220009.2.6" id="QQ2-1-134">render_point</a></span>
  208. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.7 <a
  209. href="#x1-1230009.2.7" id="QQ2-1-135">render_line</a></span>
  210. <br />&#x00A0;<span class="sectionToc" >10 <a
  211. href="#x1-12400010" id="QQ2-1-136">Tables</a></span>
  212. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >10.1 <a
  213. href="#x1-12500010.1" id="QQ2-1-137">floor1_inverse_dB_table</a></span>
  214. <br />&#x00A0;<span class="sectionToc" >A <a
  215. href="#x1-126000A" id="QQ2-1-138">Embedding Vorbis into an Ogg stream</a></span>
  216. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.1 <a
  217. href="#x1-127000A.1" id="QQ2-1-139">Overview</a></span>
  218. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.1 <a
  219. href="#x1-128000A.1.1" id="QQ2-1-140">Restrictions</a></span>
  220. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.2 <a
  221. href="#x1-129000A.1.2" id="QQ2-1-141">MIME type</a></span>
  222. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.2 <a
  223. href="#x1-130000A.2" id="QQ2-1-142">Encapsulation</a></span>
  224. <br />&#x00A0;<span class="sectionToc" >B <a
  225. href="#x1-132000B" id="QQ2-1-144">Vorbis encapsulation in RTP</a></span>
  226. </div>
  227. <h3 class="sectionHead"><span class="titlemark">1. </span> <a
  228. id="x1-20001"></a>Introduction and Description</h3>
  229. <!--l. 6--><p class="noindent" >
  230. <h4 class="subsectionHead"><span class="titlemark">1.1. </span> <a
  231. id="x1-30001.1"></a>Overview</h4>
  232. <!--l. 8--><p class="noindent" >This document provides a high level description of the Vorbis codec&#8217;s construction. A bit-by-bit
  233. specification appears beginning in <a
  234. href="#x1-580004">Section&#x00A0;4</a>, &#8220;<a
  235. href="#x1-580004">Codec Setup and Packet Decode<!--tex4ht:ref: vorbis:spec:codec --></a>&#8221;. The later
  236. sections assume a high-level understanding of the Vorbis decode process, which is provided
  237. here.
  238. <!--l. 15--><p class="noindent" >
  239. <h5 class="subsubsectionHead"><span class="titlemark">1.1.1. </span> <a
  240. id="x1-40001.1.1"></a>Application</h5>
  241. <!--l. 16--><p class="noindent" >Vorbis is a general purpose perceptual audio CODEC intended to allow maximum encoder
  242. flexibility, thus allowing it to scale competitively over an exceptionally wide range of bitrates. At
  243. the high quality/bitrate end of the scale (CD or DAT rate stereo, 16/24 bits) it is in the same
  244. league as MPEG-2 and MPC. Similarly, the 1.0 encoder can encode high-quality CD and DAT
  245. rate stereo at below 48kbps without resampling to a lower rate. Vorbis is also intended for lower
  246. and higher sample rates (from 8kHz telephony to 192kHz digital masters) and a range of channel
  247. representations (monaural, polyphonic, stereo, quadraphonic, 5.1, ambisonic, or up to 255
  248. discrete channels).
  249. <!--l. 29--><p class="noindent" >
  250. <h5 class="subsubsectionHead"><span class="titlemark">1.1.2. </span> <a
  251. id="x1-50001.1.2"></a>Classification</h5>
  252. <!--l. 30--><p class="noindent" >Vorbis I is a forward-adaptive monolithic transform CODEC based on the Modified Discrete
  253. Cosine Transform. The codec is structured to allow addition of a hybrid wavelet filterbank in
  254. Vorbis II to offer better transient response and reproduction using a transform better suited to
  255. localized time events.
  256. <!--l. 37--><p class="noindent" >
  257. <h5 class="subsubsectionHead"><span class="titlemark">1.1.3. </span> <a
  258. id="x1-60001.1.3"></a>Assumptions</h5>
  259. <!--l. 39--><p class="noindent" >The Vorbis CODEC design assumes a complex, psychoacoustically-aware encoder and simple,
  260. low-complexity decoder. Vorbis decode is computationally simpler than mp3, although it does
  261. require more working memory as Vorbis has no static probability model; the vector codebooks
  262. used in the first stage of decoding from the bitstream are packed in their entirety into the Vorbis
  263. bitstream headers. In packed form, these codebooks occupy only a few kilobytes; the extent to
  264. which they are pre-decoded into a cache is the dominant factor in decoder memory
  265. usage.
  266. <!--l. 50--><p class="noindent" >Vorbis provides none of its own framing, synchronization or protection against errors; it
  267. is solely a method of accepting input audio, dividing it into individual frames and
  268. compressing these frames into raw, unformatted &#8217;packets&#8217;. The decoder then accepts
  269. these raw packets in sequence, decodes them, synthesizes audio frames from them, and
  270. reassembles the frames into a facsimile of the original audio stream. Vorbis is a free-form
  271. variable bit rate (VBR) codec and packets have no minimum size, maximum size, or
  272. fixed/expected size. Packets are designed that they may be truncated (or padded)
  273. and remain decodable; this is not to be considered an error condition and is used
  274. extensively in bitrate management in peeling. Both the transport mechanism and
  275. decoder must allow that a packet may be any size, or end before or after packet decode
  276. expects.
  277. <!--l. 64--><p class="noindent" >Vorbis packets are thus intended to be used with a transport mechanism that provides free-form
  278. framing, sync, positioning and error correction in accordance with these design assumptions, such
  279. as Ogg (for file transport) or RTP (for network multicast). For purposes of a few examples in this
  280. document, we will assume that Vorbis is to be embedded in an Ogg stream specifically,
  281. although this is by no means a requirement or fundamental assumption in the Vorbis
  282. design.
  283. <!--l. 72--><p class="noindent" >The specification for embedding Vorbis into an Ogg transport stream is in <a
  284. href="#x1-126000A">Section&#x00A0;A</a>,
  285. &#8220;<a
  286. href="#x1-126000A">Embedding Vorbis into an Ogg stream<!--tex4ht:ref: vorbis:over:ogg --></a>&#8221;.
  287. <!--l. 77--><p class="noindent" >
  288. <h5 class="subsubsectionHead"><span class="titlemark">1.1.4. </span> <a
  289. id="x1-70001.1.4"></a>Codec Setup and Probability Model</h5>
  290. <!--l. 79--><p class="noindent" >Vorbis&#8217; heritage is as a research CODEC and its current design reflects a desire to allow multiple
  291. decades of continuous encoder improvement before running out of room within the codec
  292. specification. For these reasons, configurable aspects of codec setup intentionally lean toward the
  293. extreme of forward adaptive.
  294. <!--l. 85--><p class="noindent" >The single most controversial design decision in Vorbis (and the most unusual for a Vorbis
  295. developer to keep in mind) is that the entire probability model of the codec, the Huffman and
  296. VQ codebooks, is packed into the bitstream header along with extensive CODEC setup
  297. parameters (often several hundred fields). This makes it impossible, as it would be with
  298. MPEG audio layers, to embed a simple frame type flag in each audio packet, or begin
  299. decode at any frame in the stream without having previously fetched the codec setup
  300. header.
  301. <!--l. 95--><p class="noindent" ><span class="likesubparagraphHead"><a
  302. id="x1-80001.1.4"></a><span
  303. class="cmbx-12">Note:</span></span> Vorbis <span
  304. class="cmti-12">can </span>initiate decode at any arbitrary packet within a bitstream so long as the codec
  305. has been initialized/setup with the setup headers.
  306. <!--l. 101--><p class="noindent" >Thus, Vorbis headers are both required for decode to begin and relatively large as bitstream
  307. headers go. The header size is unbounded, although for streaming a rule-of-thumb of 4kB or less
  308. is recommended (and Xiph.Org&#8217;s Vorbis encoder follows this suggestion).
  309. <!--l. 106--><p class="noindent" >Our own design work indicates the primary liability of the required header is in mindshare; it is
  310. an unusual design and thus causes some amount of complaint among engineers as this runs
  311. against current design trends (and also points out limitations in some existing software/interface
  312. designs, such as Windows&#8217; ACM codec framework). However, we find that it does not
  313. fundamentally limit Vorbis&#8217; suitable application space.
  314. <!--l. 115--><p class="noindent" >
  315. <h5 class="subsubsectionHead"><span class="titlemark">1.1.5. </span> <a
  316. id="x1-90001.1.5"></a>Format Specification</h5>
  317. <!--l. 116--><p class="noindent" >The Vorbis format is well-defined by its decode specification; any encoder that produces packets
  318. that are correctly decoded by the reference Vorbis decoder described below may be considered
  319. a proper Vorbis encoder. A decoder must faithfully and completely implement the
  320. specification defined below (except where noted) to be considered a proper Vorbis
  321. decoder.
  322. <!--l. 123--><p class="noindent" >
  323. <h5 class="subsubsectionHead"><span class="titlemark">1.1.6. </span> <a
  324. id="x1-100001.1.6"></a>Hardware Profile</h5>
  325. <!--l. 124--><p class="noindent" >Although Vorbis decode is computationally simple, it may still run into specific limitations of an
  326. embedded design. For this reason, embedded designs are allowed to deviate in limited ways from
  327. the &#8216;full&#8217; decode specification yet still be certified compliant. These optional omissions are
  328. labelled in the spec where relevant.
  329. <!--l. 131--><p class="noindent" >
  330. <h4 class="subsectionHead"><span class="titlemark">1.2. </span> <a
  331. id="x1-110001.2"></a>Decoder Configuration</h4>
  332. <!--l. 133--><p class="noindent" >Decoder setup consists of configuration of multiple, self-contained component abstractions that
  333. perform specific functions in the decode pipeline. Each different component instance of a specific
  334. type is semantically interchangeable; decoder configuration consists both of internal component
  335. configuration, as well as arrangement of specific instances into a decode pipeline. Componentry
  336. arrangement is roughly as follows:
  337. <div class="center"
  338. >
  339. <!--l. 141--><p class="noindent" >
  340. <!--l. 142--><p class="noindent" ><img
  341. src="components.png" alt="PIC"
  342. >
  343. <br /> <div class="caption"
  344. ><span class="id">Figure&#x00A0;1: </span><span
  345. class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-110011 -->
  346. </div>
  347. <!--l. 146--><p class="noindent" >
  348. <h5 class="subsubsectionHead"><span class="titlemark">1.2.1. </span> <a
  349. id="x1-120001.2.1"></a>Global Config</h5>
  350. <!--l. 147--><p class="noindent" >Global codec configuration consists of a few audio related fields (sample rate, channels), Vorbis
  351. version (always &#8217;0&#8217; in Vorbis I), bitrate hints, and the lists of component instances. All other
  352. configuration is in the context of specific components.
  353. <!--l. 152--><p class="noindent" >
  354. <h5 class="subsubsectionHead"><span class="titlemark">1.2.2. </span> <a
  355. id="x1-130001.2.2"></a>Mode</h5>
  356. <!--l. 154--><p class="noindent" >Each Vorbis frame is coded according to a master &#8217;mode&#8217;. A bitstream may use one or many
  357. modes.
  358. <!--l. 157--><p class="noindent" >The mode mechanism is used to encode a frame according to one of multiple possible
  359. methods with the intention of choosing a method best suited to that frame. Different
  360. modes are, e.g. how frame size is changed from frame to frame. The mode number of a
  361. frame serves as a top level configuration switch for all other specific aspects of frame
  362. decode.
  363. <!--l. 164--><p class="noindent" >A &#8217;mode&#8217; configuration consists of a frame size setting, window type (always 0, the Vorbis
  364. window, in Vorbis I), transform type (always type 0, the MDCT, in Vorbis I) and a mapping
  365. number. The mapping number specifies which mapping configuration instance to use for low-level
  366. packet decode and synthesis.
  367. <!--l. 171--><p class="noindent" >
  368. <h5 class="subsubsectionHead"><span class="titlemark">1.2.3. </span> <a
  369. id="x1-140001.2.3"></a>Mapping</h5>
  370. <!--l. 173--><p class="noindent" >A mapping contains a channel coupling description and a list of &#8217;submaps&#8217; that bundle sets
  371. of channel vectors together for grouped encoding and decoding. These submaps are
  372. not references to external components; the submap list is internal and specific to a
  373. mapping.
  374. <!--l. 178--><p class="noindent" >A &#8217;submap&#8217; is a configuration/grouping that applies to a subset of floor and residue vectors
  375. within a mapping. The submap functions as a last layer of indirection such that specific special
  376. floor or residue settings can be applied not only to all the vectors in a given mode, but also
  377. specific vectors in a specific mode. Each submap specifies the proper floor and residue
  378. instance number to use for decoding that submap&#8217;s spectral floor and spectral residue
  379. vectors.
  380. <!--l. 186--><p class="noindent" >As an example:
  381. <!--l. 188--><p class="noindent" >Assume a Vorbis stream that contains six channels in the standard 5.1 format. The sixth
  382. channel, as is normal in 5.1, is bass only. Therefore it would be wasteful to encode a
  383. full-spectrum version of it as with the other channels. The submapping mechanism can be used
  384. to apply a full range floor and residue encoding to channels 0 through 4, and a bass-only
  385. representation to the bass channel, thus saving space. In this example, channels 0-4 belong to
  386. submap 0 (which indicates use of a full-range floor) and channel 5 belongs to submap 1, which
  387. uses a bass-only representation.
  388. <!--l. 199--><p class="noindent" >
  389. <h5 class="subsubsectionHead"><span class="titlemark">1.2.4. </span> <a
  390. id="x1-150001.2.4"></a>Floor</h5>
  391. <!--l. 201--><p class="noindent" >Vorbis encodes a spectral &#8217;floor&#8217; vector for each PCM channel. This vector is a low-resolution
  392. representation of the audio spectrum for the given channel in the current frame, generally used
  393. akin to a whitening filter. It is named a &#8217;floor&#8217; because the Xiph.Org reference encoder has
  394. historically used it as a unit-baseline for spectral resolution.
  395. <!--l. 208--><p class="noindent" >A floor encoding may be of two types. Floor 0 uses a packed LSP representation on a dB
  396. amplitude scale and Bark frequency scale. Floor 1 represents the curve as a piecewise linear
  397. interpolated representation on a dB amplitude scale and linear frequency scale. The two floors
  398. are semantically interchangeable in encoding/decoding. However, floor type 1 provides more
  399. stable inter-frame behavior, and so is the preferred choice in all coupled-stereo and
  400. high bitrate modes. Floor 1 is also considerably less expensive to decode than floor
  401. 0.
  402. <!--l. 218--><p class="noindent" >Floor 0 is not to be considered deprecated, but it is of limited modern use. No known Vorbis
  403. encoder past Xiph.Org&#8217;s own beta 4 makes use of floor 0.
  404. <!--l. 222--><p class="noindent" >The values coded/decoded by a floor are both compactly formatted and make use of entropy
  405. coding to save space. For this reason, a floor configuration generally refers to multiple
  406. codebooks in the codebook component list. Entropy coding is thus provided as an
  407. abstraction, and each floor instance may choose from any and all available codebooks when
  408. coding/decoding.
  409. <!--l. 230--><p class="noindent" >
  410. <h5 class="subsubsectionHead"><span class="titlemark">1.2.5. </span> <a
  411. id="x1-160001.2.5"></a>Residue</h5>
  412. <!--l. 231--><p class="noindent" >The spectral residue is the fine structure of the audio spectrum once the floor curve has been
  413. subtracted out. In simplest terms, it is coded in the bitstream using cascaded (multi-pass) vector
  414. quantization according to one of three specific packing/coding algorithms numbered
  415. 0 through 2. The packing algorithm details are configured by residue instance. As
  416. with the floor components, the final VQ/entropy encoding is provided by external
  417. codebook instances and each residue instance may choose from any and all available
  418. codebooks.
  419. <!--l. 241--><p class="noindent" >
  420. <h5 class="subsubsectionHead"><span class="titlemark">1.2.6. </span> <a
  421. id="x1-170001.2.6"></a>Codebooks</h5>
  422. <!--l. 243--><p class="noindent" >Codebooks are a self-contained abstraction that perform entropy decoding and, optionally, use
  423. the entropy-decoded integer value as an offset into an index of output value vectors, returning
  424. the indicated vector of values.
  425. <!--l. 248--><p class="noindent" >The entropy coding in a Vorbis I codebook is provided by a standard Huffman binary tree
  426. representation. This tree is tightly packed using one of several methods, depending on whether
  427. codeword lengths are ordered or unordered, or the tree is sparse.
  428. <!--l. 253--><p class="noindent" >The codebook vector index is similarly packed according to index characteristic. Most commonly,
  429. the vector index is encoded as a single list of values of possible values that are then permuted
  430. into a list of n-dimensional rows (lattice VQ).
  431. <!--l. 260--><p class="noindent" >
  432. <h4 class="subsectionHead"><span class="titlemark">1.3. </span> <a
  433. id="x1-180001.3"></a>High-level Decode Process</h4>
  434. <!--l. 262--><p class="noindent" >
  435. <h5 class="subsubsectionHead"><span class="titlemark">1.3.1. </span> <a
  436. id="x1-190001.3.1"></a>Decode Setup</h5>
  437. <!--l. 264--><p class="noindent" >Before decoding can begin, a decoder must initialize using the bitstream headers matching the
  438. stream to be decoded. Vorbis uses three header packets; all are required, in-order, by
  439. this specification. Once set up, decode may begin at any audio packet belonging to
  440. the Vorbis stream. In Vorbis I, all packets after the three initial headers are audio
  441. packets.
  442. <!--l. 271--><p class="noindent" >The header packets are, in order, the identification header, the comments header, and the setup
  443. header.
  444. <!--l. 274--><p class="noindent" ><span class="paragraphHead"><a
  445. id="x1-200001.3.1"></a><span
  446. class="cmbx-12">Identification Header</span></span>
  447. The identification header identifies the bitstream as Vorbis, Vorbis version, and the simple audio
  448. characteristics of the stream such as sample rate and number of channels.
  449. <!--l. 279--><p class="noindent" ><span class="paragraphHead"><a
  450. id="x1-210001.3.1"></a><span
  451. class="cmbx-12">Comment Header</span></span>
  452. The comment header includes user text comments (&#8220;tags&#8221;) and a vendor string for the
  453. application/library that produced the bitstream. The encoding and proper use of the comment
  454. header is described in <a
  455. href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a
  456. href="#x1-810005">comment field and header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
  457. <!--l. 284--><p class="noindent" ><span class="paragraphHead"><a
  458. id="x1-220001.3.1"></a><span
  459. class="cmbx-12">Setup Header</span></span>
  460. The setup header includes extensive CODEC setup information as well as the complete VQ and
  461. Huffman codebooks needed for decode.
  462. <!--l. 289--><p class="noindent" >
  463. <h5 class="subsubsectionHead"><span class="titlemark">1.3.2. </span> <a
  464. id="x1-230001.3.2"></a>Decode Procedure</h5>
  465. <!--l. 291--><p class="noindent" >The decoding and synthesis procedure for all audio packets is fundamentally the same.
  466. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  467. 1. </dt><dd
  468. class="enumerate-enumitem">decode packet type flag
  469. </dd><dt class="enumerate-enumitem">
  470. 2. </dt><dd
  471. class="enumerate-enumitem">decode mode number
  472. </dd><dt class="enumerate-enumitem">
  473. 3. </dt><dd
  474. class="enumerate-enumitem">decode window shape (long windows only)
  475. </dd><dt class="enumerate-enumitem">
  476. 4. </dt><dd
  477. class="enumerate-enumitem">decode floor
  478. </dd><dt class="enumerate-enumitem">
  479. 5. </dt><dd
  480. class="enumerate-enumitem">decode residue into residue vectors
  481. </dd><dt class="enumerate-enumitem">
  482. 6. </dt><dd
  483. class="enumerate-enumitem">inverse channel coupling of residue vectors
  484. </dd><dt class="enumerate-enumitem">
  485. 7. </dt><dd
  486. class="enumerate-enumitem">generate floor curve from decoded floor data
  487. </dd><dt class="enumerate-enumitem">
  488. 8. </dt><dd
  489. class="enumerate-enumitem">compute dot product of floor and residue, producing audio spectrum vector
  490. </dd><dt class="enumerate-enumitem">
  491. 9. </dt><dd
  492. class="enumerate-enumitem">inverse monolithic transform of audio spectrum vector, always an MDCT in Vorbis
  493. I
  494. </dd><dt class="enumerate-enumitem">
  495. 10. </dt><dd
  496. class="enumerate-enumitem">overlap/add left-hand output of transform with right-hand output of previous frame
  497. </dd><dt class="enumerate-enumitem">
  498. 11. </dt><dd
  499. class="enumerate-enumitem">store right hand-data from transform of current frame for future lapping
  500. </dd><dt class="enumerate-enumitem">
  501. 12. </dt><dd
  502. class="enumerate-enumitem">if not first frame, return results of overlap/add as audio result of current frame</dd></dl>
  503. <!--l. 308--><p class="noindent" >Note that clever rearrangement of the synthesis arithmetic is possible; as an example, one can
  504. take advantage of symmetries in the MDCT to store the right-hand transform data of a partial
  505. MDCT for a 50% inter-frame buffer space savings, and then complete the transform later before
  506. overlap/add with the next frame. This optimization produces entirely equivalent output and is
  507. naturally perfectly legal. The decoder must be <span
  508. class="cmti-12">entirely mathematically equivalent </span>to the
  509. specification, it need not be a literal semantic implementation.
  510. <!--l. 317--><p class="noindent" ><span class="paragraphHead"><a
  511. id="x1-240001.3.2"></a><span
  512. class="cmbx-12">Packet type decode</span></span>
  513. Vorbis I uses four packet types. The first three packet types mark each of the three Vorbis
  514. headers described above. The fourth packet type marks an audio packet. All other packet types
  515. are reserved; packets marked with a reserved type should be ignored.
  516. <!--l. 324--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
  517. audio packet decode is to read and verify the packet type; <span
  518. class="cmti-12">a non-audio packet when audio is</span>
  519. <span
  520. class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
  521. <span
  522. class="cmti-12">packet and not attempt decoding it to audio</span>.
  523. <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
  524. id="x1-250001.3.2"></a><span
  525. class="cmbx-12">Mode decode</span></span>
  526. Vorbis allows an encoder to set up multiple, numbered packet &#8217;modes&#8217;, as described earlier, all of
  527. which may be used in a given Vorbis stream. The mode is encoded as an integer used as a direct
  528. offset into the mode instance index.
  529. <!--l. 341--><p class="noindent" ><span class="paragraphHead"><a
  530. id="x1-260001.3.2"></a><span
  531. class="cmbx-12">Window shape decode (long windows only)</span></span>
  532. Vorbis frames may be one of two PCM sample sizes specified during codec setup. In Vorbis I,
  533. legal frame sizes are powers of two from 64 to 8192 samples. Aside from coupling, Vorbis
  534. handles channels as independent vectors and these frame sizes are in samples per
  535. channel.
  536. <!--l. 348--><p class="noindent" >Vorbis uses an overlapping transform, namely the MDCT, to blend one frame into the next,
  537. avoiding most inter-frame block boundary artifacts. The MDCT output of one frame is windowed
  538. according to MDCT requirements, overlapped 50% with the output of the previous frame and
  539. added. The window shape assures seamless reconstruction.
  540. <!--l. 354--><p class="noindent" >This is easy to visualize in the case of equal sized-windows:
  541. <div class="center"
  542. >
  543. <!--l. 356--><p class="noindent" >
  544. <!--l. 357--><p class="noindent" ><img
  545. src="window1.png" alt="PIC"
  546. >
  547. <br /> <div class="caption"
  548. ><span class="id">Figure&#x00A0;2: </span><span
  549. class="content">overlap of two equal-sized windows</span></div><!--tex4ht:label?: x1-260012 -->
  550. </div>
  551. <!--l. 361--><p class="noindent" >And slightly more complex in the case of overlapping unequal sized windows:
  552. <div class="center"
  553. >
  554. <!--l. 364--><p class="noindent" >
  555. <!--l. 365--><p class="noindent" ><img
  556. src="window2.png" alt="PIC"
  557. >
  558. <br /> <div class="caption"
  559. ><span class="id">Figure&#x00A0;3: </span><span
  560. class="content">overlap of a long and a short window</span></div><!--tex4ht:label?: x1-260023 -->
  561. </div>
  562. <!--l. 369--><p class="noindent" >In the unequal-sized window case, the window shape of the long window must be modified for
  563. seamless lapping as above. It is possible to correctly infer window shape to be applied to the
  564. current window from knowing the sizes of the current, previous and next window. It is legal for a
  565. decoder to use this method. However, in the case of a long window (short windows require no
  566. modification), Vorbis also codes two flag bits to specify pre- and post- window shape. Although
  567. not strictly necessary for function, this minor redundancy allows a packet to be fully decoded to
  568. the point of lapping entirely independently of any other packet, allowing easier abstraction of
  569. decode layers as well as allowing a greater level of easy parallelism in encode and
  570. decode.
  571. <!--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
  572. href="#XSporer/Brandenburg/Edler">1</a>]</span>.
  573. Vorbis windows all use the slope function
  574. <center class="math-display" >
  575. <img
  576. src="Vorbis_I_spec0x.png" alt="y = sin (.5 &lowast; &pi; sin2((x + .5)&#x2215;n &lowast; &pi;)).
  577. " class="math-display" ></center>
  578. <!--l. 385--><p class="nopar" >
  579. <!--l. 389--><p class="noindent" ><span class="paragraphHead"><a
  580. id="x1-270001.3.2"></a><span
  581. class="cmbx-12">floor decode</span></span>
  582. Each floor is encoded/decoded in channel order, however each floor belongs to a &#8217;submap&#8217; that
  583. specifies which floor configuration to use. All floors are decoded before residue decode
  584. begins.
  585. <!--l. 395--><p class="noindent" ><span class="paragraphHead"><a
  586. id="x1-280001.3.2"></a><span
  587. class="cmbx-12">residue decode</span></span>
  588. Although the number of residue vectors equals the number of channels, channel coupling may
  589. mean that the raw residue vectors extracted during decode do not map directly to specific
  590. channels. When channel coupling is in use, some vectors will correspond to coupled magnitude or
  591. angle. The coupling relationships are described in the codec setup and may differ from frame to
  592. frame, due to different mode numbers.
  593. <!--l. 404--><p class="noindent" >Vorbis codes residue vectors in groups by submap; the coding is done in submap order from
  594. submap 0 through n-1. This differs from floors which are coded using a configuration provided by
  595. submap number, but are coded individually in channel order.
  596. <!--l. 411--><p class="noindent" ><span class="paragraphHead"><a
  597. id="x1-290001.3.2"></a><span
  598. class="cmbx-12">inverse channel coupling</span></span>
  599. A detailed discussion of stereo in the Vorbis codec can be found in the document
  600. <a
  601. href="stereo.html" >Stereo Channel Coupling in the Vorbis CODEC</a>. Vorbis is not limited to only stereo
  602. coupling, but the stereo document also gives a good overview of the generic coupling
  603. mechanism.
  604. <!--l. 419--><p class="noindent" >Vorbis coupling applies to pairs of residue vectors at a time; decoupling is done in-place a
  605. pair at a time in the order and using the vectors specified in the current mapping
  606. configuration. The decoupling operation is the same for all pairs, converting square polar
  607. representation (where one vector is magnitude and the second angle) back to Cartesian
  608. representation.
  609. <!--l. 426--><p class="noindent" >After decoupling, in order, each pair of vectors on the coupling list, the resulting residue vectors
  610. represent the fine spectral detail of each output channel.
  611. <!--l. 432--><p class="noindent" ><span class="paragraphHead"><a
  612. id="x1-300001.3.2"></a><span
  613. class="cmbx-12">generate floor curve</span></span>
  614. The decoder may choose to generate the floor curve at any appropriate time. It is reasonable to
  615. generate the output curve when the floor data is decoded from the raw packet, or it
  616. can be generated after inverse coupling and applied to the spectral residue directly,
  617. combining generation and the dot product into one step and eliminating some working
  618. space.
  619. <!--l. 441--><p class="noindent" >Both floor 0 and floor 1 generate a linear-range, linear-domain output vector to be multiplied
  620. (dot product) by the linear-range, linear-domain spectral residue.
  621. <!--l. 447--><p class="noindent" ><span class="paragraphHead"><a
  622. id="x1-310001.3.2"></a><span
  623. class="cmbx-12">compute floor/residue dot product</span></span>
  624. This step is straightforward; for each output channel, the decoder multiplies the floor curve and
  625. residue vectors element by element, producing the finished audio spectrum of each
  626. channel.
  627. <!--l. 455--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
  628. implementation might be to assume that a 32 bit fixed-point representation for floor and
  629. residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
  630. in all cases because it happens to mostly work with the current Xiph.Org reference
  631. encoder.
  632. <!--l. 462--><p class="noindent" >However, floor vector values can span <span
  633. class="cmsy-10x-x-120">&sim;</span>140dB (<span
  634. class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
  635. vector should represent a minimum of 120dB (<span
  636. class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
  637. bit PCM device. For the residue vector to represent full scale if the floor is nailed
  638. to <span
  639. class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
  640. full scale if the floor is nailed at 0dB, it must be able to represent <span
  641. class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
  642. Thus, in order to handle full range dynamics, a residue vector may span <span
  643. class="cmsy-10x-x-120">&minus;</span>140dB to
  644. +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
  645. residue vector must be able to represent a 48 bit range and the dot product must
  646. be able to handle an effective 48 bit times 24 bit multiplication. This range may be
  647. achieved using large (64 bit or larger) integers, or implementing a movable binary point
  648. representation.
  649. <!--l. 479--><p class="noindent" ><span class="paragraphHead"><a
  650. id="x1-320001.3.2"></a><span
  651. class="cmbx-12">inverse monolithic transform (MDCT)</span></span>
  652. The audio spectrum is converted back into time domain PCM audio via an inverse Modified
  653. Discrete Cosine Transform (MDCT). A detailed description of the MDCT is available in
  654. <span class="cite">[<a
  655. href="#XSporer/Brandenburg/Edler">1</a>]</span>.
  656. <!--l. 485--><p class="noindent" >Note that the PCM produced directly from the MDCT is not yet finished audio; it must be
  657. lapped with surrounding frames using an appropriate window (such as the Vorbis window) before
  658. the MDCT can be considered orthogonal.
  659. <!--l. 492--><p class="noindent" ><span class="paragraphHead"><a
  660. id="x1-330001.3.2"></a><span
  661. class="cmbx-12">overlap/add data</span></span>
  662. Windowed MDCT output is overlapped and added with the right hand data of the previous
  663. window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
  664. current window (as illustrated in the window overlap diagram). At this point, the audio data
  665. between the center of the previous frame and the center of the current frame is now finished and
  666. ready to be returned.
  667. <!--l. 501--><p class="noindent" ><span class="paragraphHead"><a
  668. id="x1-340001.3.2"></a><span
  669. class="cmbx-12">cache right hand data</span></span>
  670. The decoder must cache the right hand portion of the current frame to be lapped with the left
  671. hand portion of the next frame.
  672. <!--l. 507--><p class="noindent" ><span class="paragraphHead"><a
  673. id="x1-350001.3.2"></a><span
  674. class="cmbx-12">return finished audio data</span></span>
  675. The overlapped portion produced from overlapping the previous and current frame data
  676. is finished data to be returned by the decoder. This data spans from the center of
  677. the previous window to the center of the current window. In the case of same-sized
  678. windows, the amount of data to return is one-half block consisting of and only of the
  679. overlapped portions. When overlapping a short and long window, much of the returned
  680. range is not actually overlap. This does not damage transform orthogonality. Pay
  681. attention however to returning the correct data range; the amount of data to be returned
  682. is:
  683. <!--l. 519--><p class="noindent" >
  684. <div class="fancyvrb" id="fancyvrb1">
  685. <a
  686. id="x1-35002r1"></a><span
  687. class="cmr-6">1</span><span
  688. class="cmtt-8">&#x00A0;</span><span
  689. class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span>
  690. </div>
  691. <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
  692. <!--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
  693. encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
  694. PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
  695. <h3 class="sectionHead"><span class="titlemark">2. </span> <a
  696. id="x1-360002"></a>Bitpacking Convention</h3>
  697. <!--l. 6--><p class="noindent" >
  698. <h4 class="subsectionHead"><span class="titlemark">2.1. </span> <a
  699. id="x1-370002.1"></a>Overview</h4>
  700. <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
  701. integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
  702. encoder and then read one-by-one in the same monotonically increasing order by the decoder.
  703. Most current binary storage arrangements group bits into a native word size of eight bits
  704. (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
  705. bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
  706. representation in fixed-width words.
  707. <!--l. 19--><p class="noindent" >
  708. <h5 class="subsubsectionHead"><span class="titlemark">2.1.1. </span> <a
  709. id="x1-380002.1.1"></a>octets, bytes and words</h5>
  710. <!--l. 21--><p class="noindent" >In most contemporary architectures, a &#8217;byte&#8217; is synonymous with an &#8217;octet&#8217;, that is, eight bits.
  711. This has not always been the case; seven, ten, eleven and sixteen bit &#8217;bytes&#8217; have been used.
  712. For purposes of the bitpacking convention, a byte implies the native, smallest integer
  713. storage representation offered by a platform. On modern platforms, this is generally
  714. assumed to be eight bits (not necessarily because of the processor but because of the
  715. filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
  716. atom of storage). A &#8217;word&#8217; is an integer size that is a grouped multiple of this smallest
  717. size.
  718. <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a &#8217;byte&#8217; to be an octet (eight bits) and a word
  719. to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
  720. bitpacking convention is still well defined for any native byte size; Vorbis uses the native
  721. bit-width of a given storage system. This document assumes that a byte is one octet for purposes
  722. of example.
  723. <!--l. 39--><p class="noindent" >
  724. <h5 class="subsubsectionHead"><span class="titlemark">2.1.2. </span> <a
  725. id="x1-390002.1.2"></a>bit order</h5>
  726. <!--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
  727. storing the two&#8217;s complement integer value +1. A byte&#8217;s &#8217;most significant&#8217; bit (MSb) is at the
  728. opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span
  729. class="cmmi-12">n </span>(<span
  730. class="cmmi-12">n </span>= 7 in an
  731. octet) for the MSb.
  732. <!--l. 50--><p class="noindent" >
  733. <h5 class="subsubsectionHead"><span class="titlemark">2.1.3. </span> <a
  734. id="x1-400002.1.3"></a>byte order</h5>
  735. <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
  736. common ones are 3-2-1-0 (&#8217;big endian&#8217; or &#8217;most significant byte first&#8217; in which the
  737. highest-valued byte comes first), 0-1-2-3 (&#8217;little endian&#8217; or &#8217;least significant byte first&#8217; in
  738. which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (&#8217;mixed
  739. endian&#8217;).
  740. <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
  741. word, level, thus host word ordering is of a concern only during optimization when writing high
  742. performance code that operates on a word of storage at a time rather than by byte.
  743. Logically, bytes are always coded and decoded in order from byte zero through byte
  744. <span
  745. class="cmmi-12">n</span>.
  746. <!--l. 68--><p class="noindent" >
  747. <h5 class="subsubsectionHead"><span class="titlemark">2.1.4. </span> <a
  748. id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
  749. <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
  750. wide, into packets. These integer fields are not aligned to the boundaries of the byte
  751. representation; the next field is written at the bit position at which the previous field
  752. ends.
  753. <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
  754. bitstream first, followed by next least significant bit, etc, until the requested number of bits
  755. have been coded. When packing the bits into bytes, the encoder begins by placing
  756. the LSb of the integer to be written into the least significant unused bit position of
  757. the destination byte, followed by the next-least significant bit of the source integer
  758. and so on up to the requested number of bits. When all bits of the destination byte
  759. have been filled, encoding continues by zeroing all bits of the next byte and writing
  760. the next bit into the bit position 0 of that byte. Decoding follows the same process
  761. as encoding, but by reading bits from the byte stream and reassembling them into
  762. integers.
  763. <!--l. 90--><p class="noindent" >
  764. <h5 class="subsubsectionHead"><span class="titlemark">2.1.5. </span> <a
  765. id="x1-420002.1.5"></a>signedness</h5>
  766. <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
  767. given decode context. That is, the three bit binary pattern &#8217;b111&#8217; can be taken to represent
  768. either &#8217;seven&#8217; as an unsigned integer, or &#8217;-1&#8217; as a signed, two&#8217;s complement integer. The
  769. encoder and decoder are responsible for knowing if fields are to be treated as signed or
  770. unsigned.
  771. <!--l. 101--><p class="noindent" >
  772. <h5 class="subsubsectionHead"><span class="titlemark">2.1.6. </span> <a
  773. id="x1-430002.1.6"></a>coding example</h5>
  774. <!--l. 103--><p class="noindent" >Code the 4 bit integer value &#8217;12&#8217; [b1100] into an empty bytestream. Bytestream result:
  775. <!--l. 106--><p class="noindent" >
  776. <div class="fancyvrb" id="fancyvrb2">
  777. <a
  778. id="x1-43002r1"></a><span
  779. class="cmr-6">1</span><span
  780. class="cmtt-8">&#x00A0;</span><span
  781. class="cmtt-8">&#x00A0;</span><span
  782. class="cmtt-8">&#x00A0;</span><span
  783. class="cmtt-8">&#x00A0;</span><span
  784. class="cmtt-8">&#x00A0;</span><span
  785. class="cmtt-8">&#x00A0;</span><span
  786. class="cmtt-8">&#x00A0;</span><span
  787. class="cmtt-8">&#x00A0;</span><span
  788. class="cmtt-8">&#x00A0;</span><span
  789. class="cmtt-8">&#x00A0;</span><span
  790. class="cmtt-8">&#x00A0;</span><span
  791. class="cmtt-8">&#x00A0;</span><span
  792. class="cmtt-8">&#x00A0;</span><span
  793. class="cmtt-8">&#x00A0;</span><span
  794. class="cmtt-8">&#x00A0;</span><span
  795. class="cmtt-8">&#x00A0;|</span>
  796. <br class="fancyvrb" /><a
  797. id="x1-43004r2"></a><span
  798. class="cmr-6">2</span><span
  799. class="cmtt-8">&#x00A0;</span><span
  800. class="cmtt-8">&#x00A0;</span><span
  801. class="cmtt-8">&#x00A0;</span><span
  802. class="cmtt-8">&#x00A0;</span><span
  803. class="cmtt-8">&#x00A0;</span><span
  804. class="cmtt-8">&#x00A0;</span><span
  805. class="cmtt-8">&#x00A0;</span><span
  806. class="cmtt-8">&#x00A0;</span><span
  807. class="cmtt-8">&#x00A0;</span><span
  808. class="cmtt-8">&#x00A0;</span><span
  809. class="cmtt-8">&#x00A0;</span><span
  810. class="cmtt-8">&#x00A0;</span><span
  811. class="cmtt-8">&#x00A0;</span><span
  812. class="cmtt-8">&#x00A0;</span><span
  813. class="cmtt-8">&#x00A0;</span><span
  814. class="cmtt-8">&#x00A0;V</span>
  815. <br class="fancyvrb" /><a
  816. id="x1-43006r3"></a><span
  817. class="cmr-6">3</span><span
  818. class="cmtt-8">&#x00A0;</span><span
  819. class="cmtt-8">&#x00A0;</span>
  820. <br class="fancyvrb" /><a
  821. id="x1-43008r4"></a><span
  822. class="cmr-6">4</span><span
  823. class="cmtt-8">&#x00A0;</span><span
  824. class="cmtt-8">&#x00A0;</span><span
  825. class="cmtt-8">&#x00A0;</span><span
  826. class="cmtt-8">&#x00A0;</span><span
  827. class="cmtt-8">&#x00A0;</span><span
  828. class="cmtt-8">&#x00A0;</span><span
  829. class="cmtt-8">&#x00A0;</span><span
  830. class="cmtt-8">&#x00A0;</span><span
  831. class="cmtt-8">&#x00A0;</span><span
  832. class="cmtt-8">&#x00A0;7</span><span
  833. class="cmtt-8">&#x00A0;6</span><span
  834. class="cmtt-8">&#x00A0;5</span><span
  835. class="cmtt-8">&#x00A0;4</span><span
  836. class="cmtt-8">&#x00A0;3</span><span
  837. class="cmtt-8">&#x00A0;2</span><span
  838. class="cmtt-8">&#x00A0;1</span><span
  839. class="cmtt-8">&#x00A0;0</span>
  840. <br class="fancyvrb" /><a
  841. id="x1-43010r5"></a><span
  842. class="cmr-6">5</span><span
  843. class="cmtt-8">&#x00A0;</span><span
  844. class="cmtt-8">&#x00A0;byte</span><span
  845. class="cmtt-8">&#x00A0;0</span><span
  846. class="cmtt-8">&#x00A0;[0</span><span
  847. class="cmtt-8">&#x00A0;0</span><span
  848. class="cmtt-8">&#x00A0;0</span><span
  849. class="cmtt-8">&#x00A0;0</span><span
  850. class="cmtt-8">&#x00A0;1</span><span
  851. class="cmtt-8">&#x00A0;1</span><span
  852. class="cmtt-8">&#x00A0;0</span><span
  853. class="cmtt-8">&#x00A0;0]</span><span
  854. class="cmtt-8">&#x00A0;</span><span
  855. class="cmtt-8">&#x00A0;&#x003C;-</span>
  856. <br class="fancyvrb" /><a
  857. id="x1-43012r6"></a><span
  858. class="cmr-6">6</span><span
  859. class="cmtt-8">&#x00A0;</span><span
  860. class="cmtt-8">&#x00A0;byte</span><span
  861. class="cmtt-8">&#x00A0;1</span><span
  862. class="cmtt-8">&#x00A0;[</span><span
  863. class="cmtt-8">&#x00A0;</span><span
  864. class="cmtt-8">&#x00A0;</span><span
  865. class="cmtt-8">&#x00A0;</span><span
  866. class="cmtt-8">&#x00A0;</span><span
  867. class="cmtt-8">&#x00A0;</span><span
  868. class="cmtt-8">&#x00A0;</span><span
  869. class="cmtt-8">&#x00A0;</span><span
  870. class="cmtt-8">&#x00A0;</span><span
  871. class="cmtt-8">&#x00A0;</span><span
  872. class="cmtt-8">&#x00A0;</span><span
  873. class="cmtt-8">&#x00A0;</span><span
  874. class="cmtt-8">&#x00A0;</span><span
  875. class="cmtt-8">&#x00A0;</span><span
  876. class="cmtt-8">&#x00A0;</span><span
  877. class="cmtt-8">&#x00A0;]</span>
  878. <br class="fancyvrb" /><a
  879. id="x1-43014r7"></a><span
  880. class="cmr-6">7</span><span
  881. class="cmtt-8">&#x00A0;</span><span
  882. class="cmtt-8">&#x00A0;byte</span><span
  883. class="cmtt-8">&#x00A0;2</span><span
  884. class="cmtt-8">&#x00A0;[</span><span
  885. class="cmtt-8">&#x00A0;</span><span
  886. class="cmtt-8">&#x00A0;</span><span
  887. class="cmtt-8">&#x00A0;</span><span
  888. class="cmtt-8">&#x00A0;</span><span
  889. class="cmtt-8">&#x00A0;</span><span
  890. class="cmtt-8">&#x00A0;</span><span
  891. class="cmtt-8">&#x00A0;</span><span
  892. class="cmtt-8">&#x00A0;</span><span
  893. class="cmtt-8">&#x00A0;</span><span
  894. class="cmtt-8">&#x00A0;</span><span
  895. class="cmtt-8">&#x00A0;</span><span
  896. class="cmtt-8">&#x00A0;</span><span
  897. class="cmtt-8">&#x00A0;</span><span
  898. class="cmtt-8">&#x00A0;</span><span
  899. class="cmtt-8">&#x00A0;]</span>
  900. <br class="fancyvrb" /><a
  901. id="x1-43016r8"></a><span
  902. class="cmr-6">8</span><span
  903. class="cmtt-8">&#x00A0;</span><span
  904. class="cmtt-8">&#x00A0;byte</span><span
  905. class="cmtt-8">&#x00A0;3</span><span
  906. class="cmtt-8">&#x00A0;[</span><span
  907. class="cmtt-8">&#x00A0;</span><span
  908. class="cmtt-8">&#x00A0;</span><span
  909. class="cmtt-8">&#x00A0;</span><span
  910. class="cmtt-8">&#x00A0;</span><span
  911. class="cmtt-8">&#x00A0;</span><span
  912. class="cmtt-8">&#x00A0;</span><span
  913. class="cmtt-8">&#x00A0;</span><span
  914. class="cmtt-8">&#x00A0;</span><span
  915. class="cmtt-8">&#x00A0;</span><span
  916. class="cmtt-8">&#x00A0;</span><span
  917. class="cmtt-8">&#x00A0;</span><span
  918. class="cmtt-8">&#x00A0;</span><span
  919. class="cmtt-8">&#x00A0;</span><span
  920. class="cmtt-8">&#x00A0;</span><span
  921. class="cmtt-8">&#x00A0;]</span>
  922. <br class="fancyvrb" /><a
  923. id="x1-43018r9"></a><span
  924. class="cmr-6">9</span><span
  925. class="cmtt-8">&#x00A0;</span><span
  926. class="cmtt-8">&#x00A0;</span><span
  927. class="cmtt-8">&#x00A0;</span><span
  928. class="cmtt-8">&#x00A0;</span><span
  929. class="cmtt-8">&#x00A0;</span><span
  930. class="cmtt-8">&#x00A0;</span><span
  931. class="cmtt-8">&#x00A0;</span><span
  932. class="cmtt-8">&#x00A0;</span><span
  933. class="cmtt-8">&#x00A0;</span><span
  934. class="cmtt-8">&#x00A0;</span><span
  935. class="cmtt-8">&#x00A0;</span><span
  936. class="cmtt-8">&#x00A0;</span><span
  937. class="cmtt-8">&#x00A0;</span><span
  938. class="cmtt-8">&#x00A0;</span><span
  939. class="cmtt-8">&#x00A0;...</span>
  940. <br class="fancyvrb" /><a
  941. id="x1-43020r10"></a><span
  942. class="cmr-6">10</span><span
  943. class="cmtt-8">&#x00A0;</span><span
  944. class="cmtt-8">&#x00A0;byte</span><span
  945. class="cmtt-8">&#x00A0;n</span><span
  946. class="cmtt-8">&#x00A0;[</span><span
  947. class="cmtt-8">&#x00A0;</span><span
  948. class="cmtt-8">&#x00A0;</span><span
  949. class="cmtt-8">&#x00A0;</span><span
  950. class="cmtt-8">&#x00A0;</span><span
  951. class="cmtt-8">&#x00A0;</span><span
  952. class="cmtt-8">&#x00A0;</span><span
  953. class="cmtt-8">&#x00A0;</span><span
  954. class="cmtt-8">&#x00A0;</span><span
  955. class="cmtt-8">&#x00A0;</span><span
  956. class="cmtt-8">&#x00A0;</span><span
  957. class="cmtt-8">&#x00A0;</span><span
  958. class="cmtt-8">&#x00A0;</span><span
  959. class="cmtt-8">&#x00A0;</span><span
  960. class="cmtt-8">&#x00A0;</span><span
  961. class="cmtt-8">&#x00A0;]</span><span
  962. class="cmtt-8">&#x00A0;</span><span
  963. class="cmtt-8">&#x00A0;bytestream</span><span
  964. class="cmtt-8">&#x00A0;length</span><span
  965. class="cmtt-8">&#x00A0;==</span><span
  966. class="cmtt-8">&#x00A0;1</span><span
  967. class="cmtt-8">&#x00A0;byte</span>
  968. <br class="fancyvrb" /><a
  969. id="x1-43022r11"></a><span
  970. class="cmr-6">11</span><span
  971. class="cmtt-8">&#x00A0;</span><span
  972. class="cmtt-8">&#x00A0;</span>
  973. </div>
  974. <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value &#8217;-1&#8217; [b111]:
  975. <!--l. 123--><p class="noindent" >
  976. <div class="fancyvrb" id="fancyvrb3">
  977. <a
  978. id="x1-43024r1"></a><span
  979. class="cmr-6">1</span><span
  980. class="cmtt-8">&#x00A0;</span><span
  981. class="cmtt-8">&#x00A0;</span><span
  982. class="cmtt-8">&#x00A0;</span><span
  983. class="cmtt-8">&#x00A0;</span><span
  984. class="cmtt-8">&#x00A0;</span><span
  985. class="cmtt-8">&#x00A0;</span><span
  986. class="cmtt-8">&#x00A0;</span><span
  987. class="cmtt-8">&#x00A0;</span><span
  988. class="cmtt-8">&#x00A0;</span><span
  989. class="cmtt-8">&#x00A0;|</span>
  990. <br class="fancyvrb" /><a
  991. id="x1-43026r2"></a><span
  992. class="cmr-6">2</span><span
  993. class="cmtt-8">&#x00A0;</span><span
  994. class="cmtt-8">&#x00A0;</span><span
  995. class="cmtt-8">&#x00A0;</span><span
  996. class="cmtt-8">&#x00A0;</span><span
  997. class="cmtt-8">&#x00A0;</span><span
  998. class="cmtt-8">&#x00A0;</span><span
  999. class="cmtt-8">&#x00A0;</span><span
  1000. class="cmtt-8">&#x00A0;</span><span
  1001. class="cmtt-8">&#x00A0;</span><span
  1002. class="cmtt-8">&#x00A0;V</span>
  1003. <br class="fancyvrb" /><a
  1004. id="x1-43028r3"></a><span
  1005. class="cmr-6">3</span><span
  1006. class="cmtt-8">&#x00A0;</span><span
  1007. class="cmtt-8">&#x00A0;</span>
  1008. <br class="fancyvrb" /><a
  1009. id="x1-43030r4"></a><span
  1010. class="cmr-6">4</span><span
  1011. class="cmtt-8">&#x00A0;</span><span
  1012. class="cmtt-8">&#x00A0;</span><span
  1013. class="cmtt-8">&#x00A0;</span><span
  1014. class="cmtt-8">&#x00A0;</span><span
  1015. class="cmtt-8">&#x00A0;</span><span
  1016. class="cmtt-8">&#x00A0;</span><span
  1017. class="cmtt-8">&#x00A0;</span><span
  1018. class="cmtt-8">&#x00A0;</span><span
  1019. class="cmtt-8">&#x00A0;</span><span
  1020. class="cmtt-8">&#x00A0;7</span><span
  1021. class="cmtt-8">&#x00A0;6</span><span
  1022. class="cmtt-8">&#x00A0;5</span><span
  1023. class="cmtt-8">&#x00A0;4</span><span
  1024. class="cmtt-8">&#x00A0;3</span><span
  1025. class="cmtt-8">&#x00A0;2</span><span
  1026. class="cmtt-8">&#x00A0;1</span><span
  1027. class="cmtt-8">&#x00A0;0</span>
  1028. <br class="fancyvrb" /><a
  1029. id="x1-43032r5"></a><span
  1030. class="cmr-6">5</span><span
  1031. class="cmtt-8">&#x00A0;</span><span
  1032. class="cmtt-8">&#x00A0;byte</span><span
  1033. class="cmtt-8">&#x00A0;0</span><span
  1034. class="cmtt-8">&#x00A0;[0</span><span
  1035. class="cmtt-8">&#x00A0;1</span><span
  1036. class="cmtt-8">&#x00A0;1</span><span
  1037. class="cmtt-8">&#x00A0;1</span><span
  1038. class="cmtt-8">&#x00A0;1</span><span
  1039. class="cmtt-8">&#x00A0;1</span><span
  1040. class="cmtt-8">&#x00A0;0</span><span
  1041. class="cmtt-8">&#x00A0;0]</span><span
  1042. class="cmtt-8">&#x00A0;</span><span
  1043. class="cmtt-8">&#x00A0;&#x003C;-</span>
  1044. <br class="fancyvrb" /><a
  1045. id="x1-43034r6"></a><span
  1046. class="cmr-6">6</span><span
  1047. class="cmtt-8">&#x00A0;</span><span
  1048. class="cmtt-8">&#x00A0;byte</span><span
  1049. class="cmtt-8">&#x00A0;1</span><span
  1050. class="cmtt-8">&#x00A0;[</span><span
  1051. class="cmtt-8">&#x00A0;</span><span
  1052. class="cmtt-8">&#x00A0;</span><span
  1053. class="cmtt-8">&#x00A0;</span><span
  1054. class="cmtt-8">&#x00A0;</span><span
  1055. class="cmtt-8">&#x00A0;</span><span
  1056. class="cmtt-8">&#x00A0;</span><span
  1057. class="cmtt-8">&#x00A0;</span><span
  1058. class="cmtt-8">&#x00A0;</span><span
  1059. class="cmtt-8">&#x00A0;</span><span
  1060. class="cmtt-8">&#x00A0;</span><span
  1061. class="cmtt-8">&#x00A0;</span><span
  1062. class="cmtt-8">&#x00A0;</span><span
  1063. class="cmtt-8">&#x00A0;</span><span
  1064. class="cmtt-8">&#x00A0;</span><span
  1065. class="cmtt-8">&#x00A0;]</span>
  1066. <br class="fancyvrb" /><a
  1067. id="x1-43036r7"></a><span
  1068. class="cmr-6">7</span><span
  1069. class="cmtt-8">&#x00A0;</span><span
  1070. class="cmtt-8">&#x00A0;byte</span><span
  1071. class="cmtt-8">&#x00A0;2</span><span
  1072. class="cmtt-8">&#x00A0;[</span><span
  1073. class="cmtt-8">&#x00A0;</span><span
  1074. class="cmtt-8">&#x00A0;</span><span
  1075. class="cmtt-8">&#x00A0;</span><span
  1076. class="cmtt-8">&#x00A0;</span><span
  1077. class="cmtt-8">&#x00A0;</span><span
  1078. class="cmtt-8">&#x00A0;</span><span
  1079. class="cmtt-8">&#x00A0;</span><span
  1080. class="cmtt-8">&#x00A0;</span><span
  1081. class="cmtt-8">&#x00A0;</span><span
  1082. class="cmtt-8">&#x00A0;</span><span
  1083. class="cmtt-8">&#x00A0;</span><span
  1084. class="cmtt-8">&#x00A0;</span><span
  1085. class="cmtt-8">&#x00A0;</span><span
  1086. class="cmtt-8">&#x00A0;</span><span
  1087. class="cmtt-8">&#x00A0;]</span>
  1088. <br class="fancyvrb" /><a
  1089. id="x1-43038r8"></a><span
  1090. class="cmr-6">8</span><span
  1091. class="cmtt-8">&#x00A0;</span><span
  1092. class="cmtt-8">&#x00A0;byte</span><span
  1093. class="cmtt-8">&#x00A0;3</span><span
  1094. class="cmtt-8">&#x00A0;[</span><span
  1095. class="cmtt-8">&#x00A0;</span><span
  1096. class="cmtt-8">&#x00A0;</span><span
  1097. class="cmtt-8">&#x00A0;</span><span
  1098. class="cmtt-8">&#x00A0;</span><span
  1099. class="cmtt-8">&#x00A0;</span><span
  1100. class="cmtt-8">&#x00A0;</span><span
  1101. class="cmtt-8">&#x00A0;</span><span
  1102. class="cmtt-8">&#x00A0;</span><span
  1103. class="cmtt-8">&#x00A0;</span><span
  1104. class="cmtt-8">&#x00A0;</span><span
  1105. class="cmtt-8">&#x00A0;</span><span
  1106. class="cmtt-8">&#x00A0;</span><span
  1107. class="cmtt-8">&#x00A0;</span><span
  1108. class="cmtt-8">&#x00A0;</span><span
  1109. class="cmtt-8">&#x00A0;]</span>
  1110. <br class="fancyvrb" /><a
  1111. id="x1-43040r9"></a><span
  1112. class="cmr-6">9</span><span
  1113. class="cmtt-8">&#x00A0;</span><span
  1114. class="cmtt-8">&#x00A0;</span><span
  1115. class="cmtt-8">&#x00A0;</span><span
  1116. class="cmtt-8">&#x00A0;</span><span
  1117. class="cmtt-8">&#x00A0;</span><span
  1118. class="cmtt-8">&#x00A0;</span><span
  1119. class="cmtt-8">&#x00A0;</span><span
  1120. class="cmtt-8">&#x00A0;</span><span
  1121. class="cmtt-8">&#x00A0;</span><span
  1122. class="cmtt-8">&#x00A0;</span><span
  1123. class="cmtt-8">&#x00A0;</span><span
  1124. class="cmtt-8">&#x00A0;</span><span
  1125. class="cmtt-8">&#x00A0;</span><span
  1126. class="cmtt-8">&#x00A0;</span><span
  1127. class="cmtt-8">&#x00A0;...</span>
  1128. <br class="fancyvrb" /><a
  1129. id="x1-43042r10"></a><span
  1130. class="cmr-6">10</span><span
  1131. class="cmtt-8">&#x00A0;</span><span
  1132. class="cmtt-8">&#x00A0;byte</span><span
  1133. class="cmtt-8">&#x00A0;n</span><span
  1134. class="cmtt-8">&#x00A0;[</span><span
  1135. class="cmtt-8">&#x00A0;</span><span
  1136. class="cmtt-8">&#x00A0;</span><span
  1137. class="cmtt-8">&#x00A0;</span><span
  1138. class="cmtt-8">&#x00A0;</span><span
  1139. class="cmtt-8">&#x00A0;</span><span
  1140. class="cmtt-8">&#x00A0;</span><span
  1141. class="cmtt-8">&#x00A0;</span><span
  1142. class="cmtt-8">&#x00A0;</span><span
  1143. class="cmtt-8">&#x00A0;</span><span
  1144. class="cmtt-8">&#x00A0;</span><span
  1145. class="cmtt-8">&#x00A0;</span><span
  1146. class="cmtt-8">&#x00A0;</span><span
  1147. class="cmtt-8">&#x00A0;</span><span
  1148. class="cmtt-8">&#x00A0;</span><span
  1149. class="cmtt-8">&#x00A0;]</span><span
  1150. class="cmtt-8">&#x00A0;</span><span
  1151. class="cmtt-8">&#x00A0;bytestream</span><span
  1152. class="cmtt-8">&#x00A0;length</span><span
  1153. class="cmtt-8">&#x00A0;==</span><span
  1154. class="cmtt-8">&#x00A0;1</span><span
  1155. class="cmtt-8">&#x00A0;byte</span>
  1156. </div>
  1157. <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value &#8217;17&#8217; [b0010001]:
  1158. <!--l. 139--><p class="noindent" >
  1159. <div class="fancyvrb" id="fancyvrb4">
  1160. <a
  1161. id="x1-43044r1"></a><span
  1162. class="cmr-6">1</span><span
  1163. class="cmtt-8">&#x00A0;</span><span
  1164. class="cmtt-8">&#x00A0;</span><span
  1165. class="cmtt-8">&#x00A0;</span><span
  1166. class="cmtt-8">&#x00A0;</span><span
  1167. class="cmtt-8">&#x00A0;</span><span
  1168. class="cmtt-8">&#x00A0;</span><span
  1169. class="cmtt-8">&#x00A0;</span><span
  1170. class="cmtt-8">&#x00A0;</span><span
  1171. class="cmtt-8">&#x00A0;</span><span
  1172. class="cmtt-8">&#x00A0;</span><span
  1173. class="cmtt-8">&#x00A0;</span><span
  1174. class="cmtt-8">&#x00A0;|</span>
  1175. <br class="fancyvrb" /><a
  1176. id="x1-43046r2"></a><span
  1177. class="cmr-6">2</span><span
  1178. class="cmtt-8">&#x00A0;</span><span
  1179. class="cmtt-8">&#x00A0;</span><span
  1180. class="cmtt-8">&#x00A0;</span><span
  1181. class="cmtt-8">&#x00A0;</span><span
  1182. class="cmtt-8">&#x00A0;</span><span
  1183. class="cmtt-8">&#x00A0;</span><span
  1184. class="cmtt-8">&#x00A0;</span><span
  1185. class="cmtt-8">&#x00A0;</span><span
  1186. class="cmtt-8">&#x00A0;</span><span
  1187. class="cmtt-8">&#x00A0;</span><span
  1188. class="cmtt-8">&#x00A0;</span><span
  1189. class="cmtt-8">&#x00A0;V</span>
  1190. <br class="fancyvrb" /><a
  1191. id="x1-43048r3"></a><span
  1192. class="cmr-6">3</span><span
  1193. class="cmtt-8">&#x00A0;</span><span
  1194. class="cmtt-8">&#x00A0;</span>
  1195. <br class="fancyvrb" /><a
  1196. id="x1-43050r4"></a><span
  1197. class="cmr-6">4</span><span
  1198. class="cmtt-8">&#x00A0;</span><span
  1199. class="cmtt-8">&#x00A0;</span><span
  1200. class="cmtt-8">&#x00A0;</span><span
  1201. class="cmtt-8">&#x00A0;</span><span
  1202. class="cmtt-8">&#x00A0;</span><span
  1203. class="cmtt-8">&#x00A0;</span><span
  1204. class="cmtt-8">&#x00A0;</span><span
  1205. class="cmtt-8">&#x00A0;</span><span
  1206. class="cmtt-8">&#x00A0;</span><span
  1207. class="cmtt-8">&#x00A0;7</span><span
  1208. class="cmtt-8">&#x00A0;6</span><span
  1209. class="cmtt-8">&#x00A0;5</span><span
  1210. class="cmtt-8">&#x00A0;4</span><span
  1211. class="cmtt-8">&#x00A0;3</span><span
  1212. class="cmtt-8">&#x00A0;2</span><span
  1213. class="cmtt-8">&#x00A0;1</span><span
  1214. class="cmtt-8">&#x00A0;0</span>
  1215. <br class="fancyvrb" /><a
  1216. id="x1-43052r5"></a><span
  1217. class="cmr-6">5</span><span
  1218. class="cmtt-8">&#x00A0;</span><span
  1219. class="cmtt-8">&#x00A0;byte</span><span
  1220. class="cmtt-8">&#x00A0;0</span><span
  1221. class="cmtt-8">&#x00A0;[1</span><span
  1222. class="cmtt-8">&#x00A0;1</span><span
  1223. class="cmtt-8">&#x00A0;1</span><span
  1224. class="cmtt-8">&#x00A0;1</span><span
  1225. class="cmtt-8">&#x00A0;1</span><span
  1226. class="cmtt-8">&#x00A0;1</span><span
  1227. class="cmtt-8">&#x00A0;0</span><span
  1228. class="cmtt-8">&#x00A0;0]</span>
  1229. <br class="fancyvrb" /><a
  1230. id="x1-43054r6"></a><span
  1231. class="cmr-6">6</span><span
  1232. class="cmtt-8">&#x00A0;</span><span
  1233. class="cmtt-8">&#x00A0;byte</span><span
  1234. class="cmtt-8">&#x00A0;1</span><span
  1235. class="cmtt-8">&#x00A0;[0</span><span
  1236. class="cmtt-8">&#x00A0;0</span><span
  1237. class="cmtt-8">&#x00A0;0</span><span
  1238. class="cmtt-8">&#x00A0;0</span><span
  1239. class="cmtt-8">&#x00A0;1</span><span
  1240. class="cmtt-8">&#x00A0;0</span><span
  1241. class="cmtt-8">&#x00A0;0</span><span
  1242. class="cmtt-8">&#x00A0;0]</span><span
  1243. class="cmtt-8">&#x00A0;</span><span
  1244. class="cmtt-8">&#x00A0;&#x003C;-</span>
  1245. <br class="fancyvrb" /><a
  1246. id="x1-43056r7"></a><span
  1247. class="cmr-6">7</span><span
  1248. class="cmtt-8">&#x00A0;</span><span
  1249. class="cmtt-8">&#x00A0;byte</span><span
  1250. class="cmtt-8">&#x00A0;2</span><span
  1251. class="cmtt-8">&#x00A0;[</span><span
  1252. class="cmtt-8">&#x00A0;</span><span
  1253. class="cmtt-8">&#x00A0;</span><span
  1254. class="cmtt-8">&#x00A0;</span><span
  1255. class="cmtt-8">&#x00A0;</span><span
  1256. class="cmtt-8">&#x00A0;</span><span
  1257. class="cmtt-8">&#x00A0;</span><span
  1258. class="cmtt-8">&#x00A0;</span><span
  1259. class="cmtt-8">&#x00A0;</span><span
  1260. class="cmtt-8">&#x00A0;</span><span
  1261. class="cmtt-8">&#x00A0;</span><span
  1262. class="cmtt-8">&#x00A0;</span><span
  1263. class="cmtt-8">&#x00A0;</span><span
  1264. class="cmtt-8">&#x00A0;</span><span
  1265. class="cmtt-8">&#x00A0;</span><span
  1266. class="cmtt-8">&#x00A0;]</span>
  1267. <br class="fancyvrb" /><a
  1268. id="x1-43058r8"></a><span
  1269. class="cmr-6">8</span><span
  1270. class="cmtt-8">&#x00A0;</span><span
  1271. class="cmtt-8">&#x00A0;byte</span><span
  1272. class="cmtt-8">&#x00A0;3</span><span
  1273. class="cmtt-8">&#x00A0;[</span><span
  1274. class="cmtt-8">&#x00A0;</span><span
  1275. class="cmtt-8">&#x00A0;</span><span
  1276. class="cmtt-8">&#x00A0;</span><span
  1277. class="cmtt-8">&#x00A0;</span><span
  1278. class="cmtt-8">&#x00A0;</span><span
  1279. class="cmtt-8">&#x00A0;</span><span
  1280. class="cmtt-8">&#x00A0;</span><span
  1281. class="cmtt-8">&#x00A0;</span><span
  1282. class="cmtt-8">&#x00A0;</span><span
  1283. class="cmtt-8">&#x00A0;</span><span
  1284. class="cmtt-8">&#x00A0;</span><span
  1285. class="cmtt-8">&#x00A0;</span><span
  1286. class="cmtt-8">&#x00A0;</span><span
  1287. class="cmtt-8">&#x00A0;</span><span
  1288. class="cmtt-8">&#x00A0;]</span>
  1289. <br class="fancyvrb" /><a
  1290. id="x1-43060r9"></a><span
  1291. class="cmr-6">9</span><span
  1292. class="cmtt-8">&#x00A0;</span><span
  1293. class="cmtt-8">&#x00A0;</span><span
  1294. class="cmtt-8">&#x00A0;</span><span
  1295. class="cmtt-8">&#x00A0;</span><span
  1296. class="cmtt-8">&#x00A0;</span><span
  1297. class="cmtt-8">&#x00A0;</span><span
  1298. class="cmtt-8">&#x00A0;</span><span
  1299. class="cmtt-8">&#x00A0;</span><span
  1300. class="cmtt-8">&#x00A0;</span><span
  1301. class="cmtt-8">&#x00A0;</span><span
  1302. class="cmtt-8">&#x00A0;</span><span
  1303. class="cmtt-8">&#x00A0;</span><span
  1304. class="cmtt-8">&#x00A0;</span><span
  1305. class="cmtt-8">&#x00A0;</span><span
  1306. class="cmtt-8">&#x00A0;...</span>
  1307. <br class="fancyvrb" /><a
  1308. id="x1-43062r10"></a><span
  1309. class="cmr-6">10</span><span
  1310. class="cmtt-8">&#x00A0;</span><span
  1311. class="cmtt-8">&#x00A0;byte</span><span
  1312. class="cmtt-8">&#x00A0;n</span><span
  1313. class="cmtt-8">&#x00A0;[</span><span
  1314. class="cmtt-8">&#x00A0;</span><span
  1315. class="cmtt-8">&#x00A0;</span><span
  1316. class="cmtt-8">&#x00A0;</span><span
  1317. class="cmtt-8">&#x00A0;</span><span
  1318. class="cmtt-8">&#x00A0;</span><span
  1319. class="cmtt-8">&#x00A0;</span><span
  1320. class="cmtt-8">&#x00A0;</span><span
  1321. class="cmtt-8">&#x00A0;</span><span
  1322. class="cmtt-8">&#x00A0;</span><span
  1323. class="cmtt-8">&#x00A0;</span><span
  1324. class="cmtt-8">&#x00A0;</span><span
  1325. class="cmtt-8">&#x00A0;</span><span
  1326. class="cmtt-8">&#x00A0;</span><span
  1327. class="cmtt-8">&#x00A0;</span><span
  1328. class="cmtt-8">&#x00A0;]</span><span
  1329. class="cmtt-8">&#x00A0;</span><span
  1330. class="cmtt-8">&#x00A0;bytestream</span><span
  1331. class="cmtt-8">&#x00A0;length</span><span
  1332. class="cmtt-8">&#x00A0;==</span><span
  1333. class="cmtt-8">&#x00A0;2</span><span
  1334. class="cmtt-8">&#x00A0;bytes</span>
  1335. <br class="fancyvrb" /><a
  1336. id="x1-43064r11"></a><span
  1337. class="cmr-6">11</span><span
  1338. class="cmtt-8">&#x00A0;</span><span
  1339. class="cmtt-8">&#x00A0;</span><span
  1340. class="cmtt-8">&#x00A0;</span><span
  1341. class="cmtt-8">&#x00A0;</span><span
  1342. class="cmtt-8">&#x00A0;</span><span
  1343. class="cmtt-8">&#x00A0;</span><span
  1344. class="cmtt-8">&#x00A0;</span><span
  1345. class="cmtt-8">&#x00A0;</span><span
  1346. class="cmtt-8">&#x00A0;</span><span
  1347. class="cmtt-8">&#x00A0;</span><span
  1348. class="cmtt-8">&#x00A0;</span><span
  1349. class="cmtt-8">&#x00A0;</span><span
  1350. class="cmtt-8">&#x00A0;</span><span
  1351. class="cmtt-8">&#x00A0;</span><span
  1352. class="cmtt-8">&#x00A0;</span><span
  1353. class="cmtt-8">&#x00A0;</span><span
  1354. class="cmtt-8">&#x00A0;</span><span
  1355. class="cmtt-8">&#x00A0;</span><span
  1356. class="cmtt-8">&#x00A0;</span><span
  1357. class="cmtt-8">&#x00A0;</span><span
  1358. class="cmtt-8">&#x00A0;</span><span
  1359. class="cmtt-8">&#x00A0;</span><span
  1360. class="cmtt-8">&#x00A0;</span><span
  1361. class="cmtt-8">&#x00A0;</span><span
  1362. class="cmtt-8">&#x00A0;</span><span
  1363. class="cmtt-8">&#x00A0;</span><span
  1364. class="cmtt-8">&#x00A0;</span><span
  1365. class="cmtt-8">&#x00A0;bit</span><span
  1366. class="cmtt-8">&#x00A0;cursor</span><span
  1367. class="cmtt-8">&#x00A0;==</span><span
  1368. class="cmtt-8">&#x00A0;6</span>
  1369. </div>
  1370. <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value &#8217;6969&#8217; [b110 11001110 01]:
  1371. <!--l. 156--><p class="noindent" >
  1372. <div class="fancyvrb" id="fancyvrb5">
  1373. <a
  1374. id="x1-43066r1"></a><span
  1375. class="cmr-6">1</span><span
  1376. class="cmtt-8">&#x00A0;</span><span
  1377. class="cmtt-8">&#x00A0;</span><span
  1378. class="cmtt-8">&#x00A0;</span><span
  1379. class="cmtt-8">&#x00A0;</span><span
  1380. class="cmtt-8">&#x00A0;</span><span
  1381. class="cmtt-8">&#x00A0;</span><span
  1382. class="cmtt-8">&#x00A0;</span><span
  1383. class="cmtt-8">&#x00A0;</span><span
  1384. class="cmtt-8">&#x00A0;</span><span
  1385. class="cmtt-8">&#x00A0;</span><span
  1386. class="cmtt-8">&#x00A0;</span><span
  1387. class="cmtt-8">&#x00A0;</span><span
  1388. class="cmtt-8">&#x00A0;</span><span
  1389. class="cmtt-8">&#x00A0;</span><span
  1390. class="cmtt-8">&#x00A0;</span><span
  1391. class="cmtt-8">&#x00A0;</span><span
  1392. class="cmtt-8">&#x00A0;</span><span
  1393. class="cmtt-8">&#x00A0;|</span>
  1394. <br class="fancyvrb" /><a
  1395. id="x1-43068r2"></a><span
  1396. class="cmr-6">2</span><span
  1397. class="cmtt-8">&#x00A0;</span><span
  1398. class="cmtt-8">&#x00A0;</span><span
  1399. class="cmtt-8">&#x00A0;</span><span
  1400. class="cmtt-8">&#x00A0;</span><span
  1401. class="cmtt-8">&#x00A0;</span><span
  1402. class="cmtt-8">&#x00A0;</span><span
  1403. class="cmtt-8">&#x00A0;</span><span
  1404. class="cmtt-8">&#x00A0;</span><span
  1405. class="cmtt-8">&#x00A0;</span><span
  1406. class="cmtt-8">&#x00A0;</span><span
  1407. class="cmtt-8">&#x00A0;</span><span
  1408. class="cmtt-8">&#x00A0;</span><span
  1409. class="cmtt-8">&#x00A0;</span><span
  1410. class="cmtt-8">&#x00A0;</span><span
  1411. class="cmtt-8">&#x00A0;</span><span
  1412. class="cmtt-8">&#x00A0;</span><span
  1413. class="cmtt-8">&#x00A0;</span><span
  1414. class="cmtt-8">&#x00A0;V</span>
  1415. <br class="fancyvrb" /><a
  1416. id="x1-43070r3"></a><span
  1417. class="cmr-6">3</span><span
  1418. class="cmtt-8">&#x00A0;</span><span
  1419. class="cmtt-8">&#x00A0;</span>
  1420. <br class="fancyvrb" /><a
  1421. id="x1-43072r4"></a><span
  1422. class="cmr-6">4</span><span
  1423. class="cmtt-8">&#x00A0;</span><span
  1424. class="cmtt-8">&#x00A0;</span><span
  1425. class="cmtt-8">&#x00A0;</span><span
  1426. class="cmtt-8">&#x00A0;</span><span
  1427. class="cmtt-8">&#x00A0;</span><span
  1428. class="cmtt-8">&#x00A0;</span><span
  1429. class="cmtt-8">&#x00A0;</span><span
  1430. class="cmtt-8">&#x00A0;</span><span
  1431. class="cmtt-8">&#x00A0;</span><span
  1432. class="cmtt-8">&#x00A0;7</span><span
  1433. class="cmtt-8">&#x00A0;6</span><span
  1434. class="cmtt-8">&#x00A0;5</span><span
  1435. class="cmtt-8">&#x00A0;4</span><span
  1436. class="cmtt-8">&#x00A0;3</span><span
  1437. class="cmtt-8">&#x00A0;2</span><span
  1438. class="cmtt-8">&#x00A0;1</span><span
  1439. class="cmtt-8">&#x00A0;0</span>
  1440. <br class="fancyvrb" /><a
  1441. id="x1-43074r5"></a><span
  1442. class="cmr-6">5</span><span
  1443. class="cmtt-8">&#x00A0;</span><span
  1444. class="cmtt-8">&#x00A0;byte</span><span
  1445. class="cmtt-8">&#x00A0;0</span><span
  1446. class="cmtt-8">&#x00A0;[1</span><span
  1447. class="cmtt-8">&#x00A0;1</span><span
  1448. class="cmtt-8">&#x00A0;1</span><span
  1449. class="cmtt-8">&#x00A0;1</span><span
  1450. class="cmtt-8">&#x00A0;1</span><span
  1451. class="cmtt-8">&#x00A0;1</span><span
  1452. class="cmtt-8">&#x00A0;0</span><span
  1453. class="cmtt-8">&#x00A0;0]</span>
  1454. <br class="fancyvrb" /><a
  1455. id="x1-43076r6"></a><span
  1456. class="cmr-6">6</span><span
  1457. class="cmtt-8">&#x00A0;</span><span
  1458. class="cmtt-8">&#x00A0;byte</span><span
  1459. class="cmtt-8">&#x00A0;1</span><span
  1460. class="cmtt-8">&#x00A0;[0</span><span
  1461. class="cmtt-8">&#x00A0;1</span><span
  1462. class="cmtt-8">&#x00A0;0</span><span
  1463. class="cmtt-8">&#x00A0;0</span><span
  1464. class="cmtt-8">&#x00A0;1</span><span
  1465. class="cmtt-8">&#x00A0;0</span><span
  1466. class="cmtt-8">&#x00A0;0</span><span
  1467. class="cmtt-8">&#x00A0;0]</span>
  1468. <br class="fancyvrb" /><a
  1469. id="x1-43078r7"></a><span
  1470. class="cmr-6">7</span><span
  1471. class="cmtt-8">&#x00A0;</span><span
  1472. class="cmtt-8">&#x00A0;byte</span><span
  1473. class="cmtt-8">&#x00A0;2</span><span
  1474. class="cmtt-8">&#x00A0;[1</span><span
  1475. class="cmtt-8">&#x00A0;1</span><span
  1476. class="cmtt-8">&#x00A0;0</span><span
  1477. class="cmtt-8">&#x00A0;0</span><span
  1478. class="cmtt-8">&#x00A0;1</span><span
  1479. class="cmtt-8">&#x00A0;1</span><span
  1480. class="cmtt-8">&#x00A0;1</span><span
  1481. class="cmtt-8">&#x00A0;0]</span>
  1482. <br class="fancyvrb" /><a
  1483. id="x1-43080r8"></a><span
  1484. class="cmr-6">8</span><span
  1485. class="cmtt-8">&#x00A0;</span><span
  1486. class="cmtt-8">&#x00A0;byte</span><span
  1487. class="cmtt-8">&#x00A0;3</span><span
  1488. class="cmtt-8">&#x00A0;[0</span><span
  1489. class="cmtt-8">&#x00A0;0</span><span
  1490. class="cmtt-8">&#x00A0;0</span><span
  1491. class="cmtt-8">&#x00A0;0</span><span
  1492. class="cmtt-8">&#x00A0;0</span><span
  1493. class="cmtt-8">&#x00A0;1</span><span
  1494. class="cmtt-8">&#x00A0;1</span><span
  1495. class="cmtt-8">&#x00A0;0]</span><span
  1496. class="cmtt-8">&#x00A0;</span><span
  1497. class="cmtt-8">&#x00A0;&#x003C;-</span>
  1498. <br class="fancyvrb" /><a
  1499. id="x1-43082r9"></a><span
  1500. class="cmr-6">9</span><span
  1501. class="cmtt-8">&#x00A0;</span><span
  1502. class="cmtt-8">&#x00A0;</span><span
  1503. class="cmtt-8">&#x00A0;</span><span
  1504. class="cmtt-8">&#x00A0;</span><span
  1505. class="cmtt-8">&#x00A0;</span><span
  1506. class="cmtt-8">&#x00A0;</span><span
  1507. class="cmtt-8">&#x00A0;</span><span
  1508. class="cmtt-8">&#x00A0;</span><span
  1509. class="cmtt-8">&#x00A0;</span><span
  1510. class="cmtt-8">&#x00A0;</span><span
  1511. class="cmtt-8">&#x00A0;</span><span
  1512. class="cmtt-8">&#x00A0;</span><span
  1513. class="cmtt-8">&#x00A0;</span><span
  1514. class="cmtt-8">&#x00A0;</span><span
  1515. class="cmtt-8">&#x00A0;...</span>
  1516. <br class="fancyvrb" /><a
  1517. id="x1-43084r10"></a><span
  1518. class="cmr-6">10</span><span
  1519. class="cmtt-8">&#x00A0;</span><span
  1520. class="cmtt-8">&#x00A0;byte</span><span
  1521. class="cmtt-8">&#x00A0;n</span><span
  1522. class="cmtt-8">&#x00A0;[</span><span
  1523. class="cmtt-8">&#x00A0;</span><span
  1524. class="cmtt-8">&#x00A0;</span><span
  1525. class="cmtt-8">&#x00A0;</span><span
  1526. class="cmtt-8">&#x00A0;</span><span
  1527. class="cmtt-8">&#x00A0;</span><span
  1528. class="cmtt-8">&#x00A0;</span><span
  1529. class="cmtt-8">&#x00A0;</span><span
  1530. class="cmtt-8">&#x00A0;</span><span
  1531. class="cmtt-8">&#x00A0;</span><span
  1532. class="cmtt-8">&#x00A0;</span><span
  1533. class="cmtt-8">&#x00A0;</span><span
  1534. class="cmtt-8">&#x00A0;</span><span
  1535. class="cmtt-8">&#x00A0;</span><span
  1536. class="cmtt-8">&#x00A0;</span><span
  1537. class="cmtt-8">&#x00A0;]</span><span
  1538. class="cmtt-8">&#x00A0;</span><span
  1539. class="cmtt-8">&#x00A0;bytestream</span><span
  1540. class="cmtt-8">&#x00A0;length</span><span
  1541. class="cmtt-8">&#x00A0;==</span><span
  1542. class="cmtt-8">&#x00A0;4</span><span
  1543. class="cmtt-8">&#x00A0;bytes</span>
  1544. <br class="fancyvrb" /><a
  1545. id="x1-43086r11"></a><span
  1546. class="cmr-6">11</span><span
  1547. class="cmtt-8">&#x00A0;</span><span
  1548. class="cmtt-8">&#x00A0;</span>
  1549. </div>
  1550. <!--l. 173--><p class="noindent" >
  1551. <h5 class="subsubsectionHead"><span class="titlemark">2.1.7. </span> <a
  1552. id="x1-440002.1.7"></a>decoding example</h5>
  1553. <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
  1554. <!--l. 177--><p class="noindent" >
  1555. <div class="fancyvrb" id="fancyvrb6">
  1556. <a
  1557. id="x1-44002r1"></a><span
  1558. class="cmr-6">1</span><span
  1559. class="cmtt-8">&#x00A0;</span><span
  1560. class="cmtt-8">&#x00A0;</span><span
  1561. class="cmtt-8">&#x00A0;</span><span
  1562. class="cmtt-8">&#x00A0;</span><span
  1563. class="cmtt-8">&#x00A0;</span><span
  1564. class="cmtt-8">&#x00A0;</span><span
  1565. class="cmtt-8">&#x00A0;</span><span
  1566. class="cmtt-8">&#x00A0;</span><span
  1567. class="cmtt-8">&#x00A0;</span><span
  1568. class="cmtt-8">&#x00A0;</span><span
  1569. class="cmtt-8">&#x00A0;</span><span
  1570. class="cmtt-8">&#x00A0;</span><span
  1571. class="cmtt-8">&#x00A0;</span><span
  1572. class="cmtt-8">&#x00A0;</span><span
  1573. class="cmtt-8">&#x00A0;</span><span
  1574. class="cmtt-8">&#x00A0;</span><span
  1575. class="cmtt-8">&#x00A0;</span><span
  1576. class="cmtt-8">&#x00A0;</span><span
  1577. class="cmtt-8">&#x00A0;</span><span
  1578. class="cmtt-8">&#x00A0;</span><span
  1579. class="cmtt-8">&#x00A0;</span><span
  1580. class="cmtt-8">&#x00A0;</span><span
  1581. class="cmtt-8">&#x00A0;</span><span
  1582. class="cmtt-8">&#x00A0;|</span>
  1583. <br class="fancyvrb" /><a
  1584. id="x1-44004r2"></a><span
  1585. class="cmr-6">2</span><span
  1586. class="cmtt-8">&#x00A0;</span><span
  1587. class="cmtt-8">&#x00A0;</span><span
  1588. class="cmtt-8">&#x00A0;</span><span
  1589. class="cmtt-8">&#x00A0;</span><span
  1590. class="cmtt-8">&#x00A0;</span><span
  1591. class="cmtt-8">&#x00A0;</span><span
  1592. class="cmtt-8">&#x00A0;</span><span
  1593. class="cmtt-8">&#x00A0;</span><span
  1594. class="cmtt-8">&#x00A0;</span><span
  1595. class="cmtt-8">&#x00A0;</span><span
  1596. class="cmtt-8">&#x00A0;</span><span
  1597. class="cmtt-8">&#x00A0;</span><span
  1598. class="cmtt-8">&#x00A0;</span><span
  1599. class="cmtt-8">&#x00A0;</span><span
  1600. class="cmtt-8">&#x00A0;</span><span
  1601. class="cmtt-8">&#x00A0;</span><span
  1602. class="cmtt-8">&#x00A0;</span><span
  1603. class="cmtt-8">&#x00A0;</span><span
  1604. class="cmtt-8">&#x00A0;</span><span
  1605. class="cmtt-8">&#x00A0;</span><span
  1606. class="cmtt-8">&#x00A0;</span><span
  1607. class="cmtt-8">&#x00A0;</span><span
  1608. class="cmtt-8">&#x00A0;</span><span
  1609. class="cmtt-8">&#x00A0;V</span>
  1610. <br class="fancyvrb" /><a
  1611. id="x1-44006r3"></a><span
  1612. class="cmr-6">3</span><span
  1613. class="cmtt-8">&#x00A0;</span><span
  1614. class="cmtt-8">&#x00A0;</span>
  1615. <br class="fancyvrb" /><a
  1616. id="x1-44008r4"></a><span
  1617. class="cmr-6">4</span><span
  1618. class="cmtt-8">&#x00A0;</span><span
  1619. class="cmtt-8">&#x00A0;</span><span
  1620. class="cmtt-8">&#x00A0;</span><span
  1621. class="cmtt-8">&#x00A0;</span><span
  1622. class="cmtt-8">&#x00A0;</span><span
  1623. class="cmtt-8">&#x00A0;</span><span
  1624. class="cmtt-8">&#x00A0;</span><span
  1625. class="cmtt-8">&#x00A0;</span><span
  1626. class="cmtt-8">&#x00A0;</span><span
  1627. class="cmtt-8">&#x00A0;7</span><span
  1628. class="cmtt-8">&#x00A0;6</span><span
  1629. class="cmtt-8">&#x00A0;5</span><span
  1630. class="cmtt-8">&#x00A0;4</span><span
  1631. class="cmtt-8">&#x00A0;3</span><span
  1632. class="cmtt-8">&#x00A0;2</span><span
  1633. class="cmtt-8">&#x00A0;1</span><span
  1634. class="cmtt-8">&#x00A0;0</span>
  1635. <br class="fancyvrb" /><a
  1636. id="x1-44010r5"></a><span
  1637. class="cmr-6">5</span><span
  1638. class="cmtt-8">&#x00A0;</span><span
  1639. class="cmtt-8">&#x00A0;byte</span><span
  1640. class="cmtt-8">&#x00A0;0</span><span
  1641. class="cmtt-8">&#x00A0;[1</span><span
  1642. class="cmtt-8">&#x00A0;1</span><span
  1643. class="cmtt-8">&#x00A0;1</span><span
  1644. class="cmtt-8">&#x00A0;1</span><span
  1645. class="cmtt-8">&#x00A0;1</span><span
  1646. class="cmtt-8">&#x00A0;1</span><span
  1647. class="cmtt-8">&#x00A0;0</span><span
  1648. class="cmtt-8">&#x00A0;0]</span><span
  1649. class="cmtt-8">&#x00A0;</span><span
  1650. class="cmtt-8">&#x00A0;&#x003C;-</span>
  1651. <br class="fancyvrb" /><a
  1652. id="x1-44012r6"></a><span
  1653. class="cmr-6">6</span><span
  1654. class="cmtt-8">&#x00A0;</span><span
  1655. class="cmtt-8">&#x00A0;byte</span><span
  1656. class="cmtt-8">&#x00A0;1</span><span
  1657. class="cmtt-8">&#x00A0;[0</span><span
  1658. class="cmtt-8">&#x00A0;1</span><span
  1659. class="cmtt-8">&#x00A0;0</span><span
  1660. class="cmtt-8">&#x00A0;0</span><span
  1661. class="cmtt-8">&#x00A0;1</span><span
  1662. class="cmtt-8">&#x00A0;0</span><span
  1663. class="cmtt-8">&#x00A0;0</span><span
  1664. class="cmtt-8">&#x00A0;0]</span>
  1665. <br class="fancyvrb" /><a
  1666. id="x1-44014r7"></a><span
  1667. class="cmr-6">7</span><span
  1668. class="cmtt-8">&#x00A0;</span><span
  1669. class="cmtt-8">&#x00A0;byte</span><span
  1670. class="cmtt-8">&#x00A0;2</span><span
  1671. class="cmtt-8">&#x00A0;[1</span><span
  1672. class="cmtt-8">&#x00A0;1</span><span
  1673. class="cmtt-8">&#x00A0;0</span><span
  1674. class="cmtt-8">&#x00A0;0</span><span
  1675. class="cmtt-8">&#x00A0;1</span><span
  1676. class="cmtt-8">&#x00A0;1</span><span
  1677. class="cmtt-8">&#x00A0;1</span><span
  1678. class="cmtt-8">&#x00A0;0]</span>
  1679. <br class="fancyvrb" /><a
  1680. id="x1-44016r8"></a><span
  1681. class="cmr-6">8</span><span
  1682. class="cmtt-8">&#x00A0;</span><span
  1683. class="cmtt-8">&#x00A0;byte</span><span
  1684. class="cmtt-8">&#x00A0;3</span><span
  1685. class="cmtt-8">&#x00A0;[0</span><span
  1686. class="cmtt-8">&#x00A0;0</span><span
  1687. class="cmtt-8">&#x00A0;0</span><span
  1688. class="cmtt-8">&#x00A0;0</span><span
  1689. class="cmtt-8">&#x00A0;0</span><span
  1690. class="cmtt-8">&#x00A0;1</span><span
  1691. class="cmtt-8">&#x00A0;1</span><span
  1692. class="cmtt-8">&#x00A0;0]</span><span
  1693. class="cmtt-8">&#x00A0;</span><span
  1694. class="cmtt-8">&#x00A0;bytestream</span><span
  1695. class="cmtt-8">&#x00A0;length</span><span
  1696. class="cmtt-8">&#x00A0;==</span><span
  1697. class="cmtt-8">&#x00A0;4</span><span
  1698. class="cmtt-8">&#x00A0;bytes</span>
  1699. <br class="fancyvrb" /><a
  1700. id="x1-44018r9"></a><span
  1701. class="cmr-6">9</span><span
  1702. class="cmtt-8">&#x00A0;</span><span
  1703. class="cmtt-8">&#x00A0;</span>
  1704. </div>
  1705. <!--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
  1706. are worth noting here:
  1707. <ul class="itemize1">
  1708. <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
  1709. some other combination of bit-widths from the bitstream is well defined. There are
  1710. no artificial alignment boundaries maintained in the bitstream.
  1711. </li>
  1712. <li class="itemize">The second value is the two-bit-wide integer &#8217;b11&#8217;. This value may be interpreted
  1713. either as the unsigned value &#8217;3&#8217;, or the signed value &#8217;-1&#8217;. Signedness is dependent on
  1714. decode context.</li></ul>
  1715. <!--l. 208--><p class="noindent" >
  1716. <h5 class="subsubsectionHead"><span class="titlemark">2.1.8. </span> <a
  1717. id="x1-450002.1.8"></a>end-of-packet alignment</h5>
  1718. <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
  1719. embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
  1720. Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
  1721. the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
  1722. in the last byte of a packet.
  1723. <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
  1724. should this unused space be read, it will return binary zeroes.
  1725. <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an &#8217;end-of-packet&#8217; condition.
  1726. End-of-packet is not to be considered an error; it is merely a state indicating that there is
  1727. insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
  1728. normal mode of operation, and as such, decoders must handle reading past the end of a packet as
  1729. a typical mode of operation. Any further read operations after an &#8217;end-of-packet&#8217; condition shall
  1730. also return &#8217;end-of-packet&#8217;.
  1731. <!--l. 233--><p class="noindent" >
  1732. <h5 class="subsubsectionHead"><span class="titlemark">2.1.9. </span> <a
  1733. id="x1-460002.1.9"></a>reading zero bits</h5>
  1734. <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value &#8217;0&#8217; and does not increment the stream cursor.
  1735. Reading to the end of the packet (but not past, such that an &#8217;end-of-packet&#8217; condition has not
  1736. triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
  1737. end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets &#8217;end-of-packet&#8217;
  1738. shall also fail with &#8217;end-of-packet&#8217;.
  1739. <h3 class="sectionHead"><span class="titlemark">3. </span> <a
  1740. id="x1-470003"></a>Probability Model and Codebooks</h3>
  1741. <!--l. 6--><p class="noindent" >
  1742. <h4 class="subsectionHead"><span class="titlemark">3.1. </span> <a
  1743. id="x1-480003.1"></a>Overview</h4>
  1744. <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
  1745. probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
  1746. bitstream itself in the third header, the codec setup header. This packed configuration consists of
  1747. multiple &#8217;codebooks&#8217;, each containing a specific Huffman-equivalent representation for decoding
  1748. compressed codewords as well as an optional lookup table of output vector values to which a
  1749. decoded Huffman value is applied as an offset, generating the final decoded output corresponding
  1750. to a given compressed codeword.
  1751. <!--l. 18--><p class="noindent" >
  1752. <h5 class="subsubsectionHead"><span class="titlemark">3.1.1. </span> <a
  1753. id="x1-490003.1.1"></a>Bitwise operation</h5>
  1754. <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
  1755. and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
  1756. read from the stream according to <a
  1757. href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a
  1758. href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221;.
  1759. <!--l. 27--><p class="noindent" >
  1760. <h4 class="subsectionHead"><span class="titlemark">3.2. </span> <a
  1761. id="x1-500003.2"></a>Packed codebook format</h4>
  1762. <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system&#8217;s native byte width is
  1763. eight bits. This is not universally true; see <a
  1764. href="#x1-360002">Section&#x00A0;2</a>, &#8220;<a
  1765. href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; for discussion
  1766. relating to non-eight-bit bytes.
  1767. <!--l. 34--><p class="noindent" >
  1768. <h5 class="subsubsectionHead"><span class="titlemark">3.2.1. </span> <a
  1769. id="x1-510003.2.1"></a>codebook decode</h5>
  1770. <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
  1771. <!--l. 38--><p class="noindent" >
  1772. <div class="fancyvrb" id="fancyvrb7">
  1773. <a
  1774. id="x1-51002r1"></a><span
  1775. class="cmr-6">1</span><span
  1776. class="cmtt-8">&#x00A0;</span><span
  1777. class="cmtt-8">&#x00A0;byte</span><span
  1778. class="cmtt-8">&#x00A0;0:</span><span
  1779. class="cmtt-8">&#x00A0;[</span><span
  1780. class="cmtt-8">&#x00A0;0</span><span
  1781. class="cmtt-8">&#x00A0;1</span><span
  1782. class="cmtt-8">&#x00A0;0</span><span
  1783. class="cmtt-8">&#x00A0;0</span><span
  1784. class="cmtt-8">&#x00A0;0</span><span
  1785. class="cmtt-8">&#x00A0;0</span><span
  1786. class="cmtt-8">&#x00A0;1</span><span
  1787. class="cmtt-8">&#x00A0;0</span><span
  1788. class="cmtt-8">&#x00A0;]</span><span
  1789. class="cmtt-8">&#x00A0;(0x42)</span>
  1790. <br class="fancyvrb" /><a
  1791. id="x1-51004r2"></a><span
  1792. class="cmr-6">2</span><span
  1793. class="cmtt-8">&#x00A0;</span><span
  1794. class="cmtt-8">&#x00A0;byte</span><span
  1795. class="cmtt-8">&#x00A0;1:</span><span
  1796. class="cmtt-8">&#x00A0;[</span><span
  1797. class="cmtt-8">&#x00A0;0</span><span
  1798. class="cmtt-8">&#x00A0;1</span><span
  1799. class="cmtt-8">&#x00A0;0</span><span
  1800. class="cmtt-8">&#x00A0;0</span><span
  1801. class="cmtt-8">&#x00A0;0</span><span
  1802. class="cmtt-8">&#x00A0;0</span><span
  1803. class="cmtt-8">&#x00A0;1</span><span
  1804. class="cmtt-8">&#x00A0;1</span><span
  1805. class="cmtt-8">&#x00A0;]</span><span
  1806. class="cmtt-8">&#x00A0;(0x43)</span>
  1807. <br class="fancyvrb" /><a
  1808. id="x1-51006r3"></a><span
  1809. class="cmr-6">3</span><span
  1810. class="cmtt-8">&#x00A0;</span><span
  1811. class="cmtt-8">&#x00A0;byte</span><span
  1812. class="cmtt-8">&#x00A0;2:</span><span
  1813. class="cmtt-8">&#x00A0;[</span><span
  1814. class="cmtt-8">&#x00A0;0</span><span
  1815. class="cmtt-8">&#x00A0;1</span><span
  1816. class="cmtt-8">&#x00A0;0</span><span
  1817. class="cmtt-8">&#x00A0;1</span><span
  1818. class="cmtt-8">&#x00A0;0</span><span
  1819. class="cmtt-8">&#x00A0;1</span><span
  1820. class="cmtt-8">&#x00A0;1</span><span
  1821. class="cmtt-8">&#x00A0;0</span><span
  1822. class="cmtt-8">&#x00A0;]</span><span
  1823. class="cmtt-8">&#x00A0;(0x56)</span>
  1824. </div>
  1825. <!--l. 44--><p class="noindent" >16 bit <span
  1826. class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span
  1827. class="cmtt-12">[codebook_entries] </span>fields:
  1828. <!--l. 46--><p class="noindent" >
  1829. <div class="fancyvrb" id="fancyvrb8">
  1830. <a
  1831. id="x1-51008r1"></a><span
  1832. class="cmr-6">1</span><span
  1833. class="cmtt-8">&#x00A0;</span><span
  1834. class="cmtt-8">&#x00A0;</span>
  1835. <br class="fancyvrb" /><a
  1836. id="x1-51010r2"></a><span
  1837. class="cmr-6">2</span><span
  1838. class="cmtt-8">&#x00A0;</span><span
  1839. class="cmtt-8">&#x00A0;byte</span><span
  1840. class="cmtt-8">&#x00A0;3:</span><span
  1841. class="cmtt-8">&#x00A0;[</span><span
  1842. class="cmtt-8">&#x00A0;X</span><span
  1843. class="cmtt-8">&#x00A0;X</span><span
  1844. class="cmtt-8">&#x00A0;X</span><span
  1845. class="cmtt-8">&#x00A0;X</span><span
  1846. class="cmtt-8">&#x00A0;X</span><span
  1847. class="cmtt-8">&#x00A0;X</span><span
  1848. class="cmtt-8">&#x00A0;X</span><span
  1849. class="cmtt-8">&#x00A0;X</span><span
  1850. class="cmtt-8">&#x00A0;]</span>
  1851. <br class="fancyvrb" /><a
  1852. id="x1-51012r3"></a><span
  1853. class="cmr-6">3</span><span
  1854. class="cmtt-8">&#x00A0;</span><span
  1855. class="cmtt-8">&#x00A0;byte</span><span
  1856. class="cmtt-8">&#x00A0;4:</span><span
  1857. class="cmtt-8">&#x00A0;[</span><span
  1858. class="cmtt-8">&#x00A0;X</span><span
  1859. class="cmtt-8">&#x00A0;X</span><span
  1860. class="cmtt-8">&#x00A0;X</span><span
  1861. class="cmtt-8">&#x00A0;X</span><span
  1862. class="cmtt-8">&#x00A0;X</span><span
  1863. class="cmtt-8">&#x00A0;X</span><span
  1864. class="cmtt-8">&#x00A0;X</span><span
  1865. class="cmtt-8">&#x00A0;X</span><span
  1866. class="cmtt-8">&#x00A0;]</span><span
  1867. class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
  1868. class="cmtt-8">&#x00A0;(16</span><span
  1869. class="cmtt-8">&#x00A0;bit</span><span
  1870. class="cmtt-8">&#x00A0;unsigned)</span>
  1871. <br class="fancyvrb" /><a
  1872. id="x1-51014r4"></a><span
  1873. class="cmr-6">4</span><span
  1874. class="cmtt-8">&#x00A0;</span><span
  1875. class="cmtt-8">&#x00A0;</span>
  1876. <br class="fancyvrb" /><a
  1877. id="x1-51016r5"></a><span
  1878. class="cmr-6">5</span><span
  1879. class="cmtt-8">&#x00A0;</span><span
  1880. class="cmtt-8">&#x00A0;byte</span><span
  1881. class="cmtt-8">&#x00A0;5:</span><span
  1882. class="cmtt-8">&#x00A0;[</span><span
  1883. class="cmtt-8">&#x00A0;X</span><span
  1884. class="cmtt-8">&#x00A0;X</span><span
  1885. class="cmtt-8">&#x00A0;X</span><span
  1886. class="cmtt-8">&#x00A0;X</span><span
  1887. class="cmtt-8">&#x00A0;X</span><span
  1888. class="cmtt-8">&#x00A0;X</span><span
  1889. class="cmtt-8">&#x00A0;X</span><span
  1890. class="cmtt-8">&#x00A0;X</span><span
  1891. class="cmtt-8">&#x00A0;]</span>
  1892. <br class="fancyvrb" /><a
  1893. id="x1-51018r6"></a><span
  1894. class="cmr-6">6</span><span
  1895. class="cmtt-8">&#x00A0;</span><span
  1896. class="cmtt-8">&#x00A0;byte</span><span
  1897. class="cmtt-8">&#x00A0;6:</span><span
  1898. class="cmtt-8">&#x00A0;[</span><span
  1899. class="cmtt-8">&#x00A0;X</span><span
  1900. class="cmtt-8">&#x00A0;X</span><span
  1901. class="cmtt-8">&#x00A0;X</span><span
  1902. class="cmtt-8">&#x00A0;X</span><span
  1903. class="cmtt-8">&#x00A0;X</span><span
  1904. class="cmtt-8">&#x00A0;X</span><span
  1905. class="cmtt-8">&#x00A0;X</span><span
  1906. class="cmtt-8">&#x00A0;X</span><span
  1907. class="cmtt-8">&#x00A0;]</span>
  1908. <br class="fancyvrb" /><a
  1909. id="x1-51020r7"></a><span
  1910. class="cmr-6">7</span><span
  1911. class="cmtt-8">&#x00A0;</span><span
  1912. class="cmtt-8">&#x00A0;byte</span><span
  1913. class="cmtt-8">&#x00A0;7:</span><span
  1914. class="cmtt-8">&#x00A0;[</span><span
  1915. class="cmtt-8">&#x00A0;X</span><span
  1916. class="cmtt-8">&#x00A0;X</span><span
  1917. class="cmtt-8">&#x00A0;X</span><span
  1918. class="cmtt-8">&#x00A0;X</span><span
  1919. class="cmtt-8">&#x00A0;X</span><span
  1920. class="cmtt-8">&#x00A0;X</span><span
  1921. class="cmtt-8">&#x00A0;X</span><span
  1922. class="cmtt-8">&#x00A0;X</span><span
  1923. class="cmtt-8">&#x00A0;]</span><span
  1924. class="cmtt-8">&#x00A0;[codebook_entries]</span><span
  1925. class="cmtt-8">&#x00A0;(24</span><span
  1926. class="cmtt-8">&#x00A0;bit</span><span
  1927. class="cmtt-8">&#x00A0;unsigned)</span>
  1928. <br class="fancyvrb" /><a
  1929. id="x1-51022r8"></a><span
  1930. class="cmr-6">8</span><span
  1931. class="cmtt-8">&#x00A0;</span><span
  1932. class="cmtt-8">&#x00A0;</span>
  1933. </div>
  1934. <!--l. 57--><p class="noindent" >Next is the <span
  1935. class="cmtt-12">[ordered] </span>bit flag:
  1936. <!--l. 59--><p class="noindent" >
  1937. <div class="fancyvrb" id="fancyvrb9">
  1938. <a
  1939. id="x1-51024r1"></a><span
  1940. class="cmr-6">1</span><span
  1941. class="cmtt-8">&#x00A0;</span><span
  1942. class="cmtt-8">&#x00A0;</span>
  1943. <br class="fancyvrb" /><a
  1944. id="x1-51026r2"></a><span
  1945. class="cmr-6">2</span><span
  1946. class="cmtt-8">&#x00A0;</span><span
  1947. class="cmtt-8">&#x00A0;byte</span><span
  1948. class="cmtt-8">&#x00A0;8:</span><span
  1949. class="cmtt-8">&#x00A0;[</span><span
  1950. class="cmtt-8">&#x00A0;</span><span
  1951. class="cmtt-8">&#x00A0;</span><span
  1952. class="cmtt-8">&#x00A0;</span><span
  1953. class="cmtt-8">&#x00A0;</span><span
  1954. class="cmtt-8">&#x00A0;</span><span
  1955. class="cmtt-8">&#x00A0;</span><span
  1956. class="cmtt-8">&#x00A0;</span><span
  1957. class="cmtt-8">&#x00A0;</span><span
  1958. class="cmtt-8">&#x00A0;</span><span
  1959. class="cmtt-8">&#x00A0;</span><span
  1960. class="cmtt-8">&#x00A0;</span><span
  1961. class="cmtt-8">&#x00A0;</span><span
  1962. class="cmtt-8">&#x00A0;</span><span
  1963. class="cmtt-8">&#x00A0;</span><span
  1964. class="cmtt-8">&#x00A0;X</span><span
  1965. class="cmtt-8">&#x00A0;]</span><span
  1966. class="cmtt-8">&#x00A0;[ordered]</span><span
  1967. class="cmtt-8">&#x00A0;(1</span><span
  1968. class="cmtt-8">&#x00A0;bit)</span>
  1969. <br class="fancyvrb" /><a
  1970. id="x1-51028r3"></a><span
  1971. class="cmr-6">3</span><span
  1972. class="cmtt-8">&#x00A0;</span><span
  1973. class="cmtt-8">&#x00A0;</span>
  1974. </div>
  1975. <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span
  1976. class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
  1977. We now read the list of codeword lengths and store these lengths in the array
  1978. <span
  1979. class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span
  1980. class="cmtt-12">[ordered] </span>flag
  1981. is set or unset.
  1982. <ul class="itemize1">
  1983. <li class="itemize">If the <span
  1984. class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
  1985. needs to read each codeword length one-by-one.
  1986. <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span
  1987. class="cmtt-12">[sparse] </span>flag. This flag determines
  1988. whether or not the codebook contains unused entries that are not to be included in
  1989. the codeword decode tree:
  1990. <!--l. 82--><p class="noindent" >
  1991. <div class="fancyvrb" id="fancyvrb10">
  1992. <a
  1993. id="x1-51030r1"></a><span
  1994. class="cmr-6">1</span><span
  1995. class="cmtt-8">&#x00A0;</span><span
  1996. class="cmtt-8">&#x00A0;byte</span><span
  1997. class="cmtt-8">&#x00A0;8:</span><span
  1998. class="cmtt-8">&#x00A0;[</span><span
  1999. class="cmtt-8">&#x00A0;</span><span
  2000. class="cmtt-8">&#x00A0;</span><span
  2001. class="cmtt-8">&#x00A0;</span><span
  2002. class="cmtt-8">&#x00A0;</span><span
  2003. class="cmtt-8">&#x00A0;</span><span
  2004. class="cmtt-8">&#x00A0;</span><span
  2005. class="cmtt-8">&#x00A0;</span><span
  2006. class="cmtt-8">&#x00A0;</span><span
  2007. class="cmtt-8">&#x00A0;</span><span
  2008. class="cmtt-8">&#x00A0;</span><span
  2009. class="cmtt-8">&#x00A0;</span><span
  2010. class="cmtt-8">&#x00A0;</span><span
  2011. class="cmtt-8">&#x00A0;X</span><span
  2012. class="cmtt-8">&#x00A0;1</span><span
  2013. class="cmtt-8">&#x00A0;]</span><span
  2014. class="cmtt-8">&#x00A0;[sparse]</span><span
  2015. class="cmtt-8">&#x00A0;flag</span><span
  2016. class="cmtt-8">&#x00A0;(1</span><span
  2017. class="cmtt-8">&#x00A0;bit)</span>
  2018. </div>
  2019. <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span
  2020. class="cmtt-12">[codebook_entries] </span>codebook entries:
  2021. <!--l. 89--><p class="noindent" >
  2022. <div class="fancyvrb" id="fancyvrb11">
  2023. <a
  2024. id="x1-51032r1"></a><span
  2025. class="cmr-6">1</span><span
  2026. class="cmtt-8">&#x00A0;</span><span
  2027. class="cmtt-8">&#x00A0;</span>
  2028. <br class="fancyvrb" /><a
  2029. id="x1-51034r2"></a><span
  2030. class="cmr-6">2</span><span
  2031. class="cmtt-8">&#x00A0;</span><span
  2032. class="cmtt-8">&#x00A0;</span><span
  2033. class="cmtt-8">&#x00A0;</span><span
  2034. class="cmtt-8">&#x00A0;1)</span><span
  2035. class="cmtt-8">&#x00A0;if([sparse]</span><span
  2036. class="cmtt-8">&#x00A0;is</span><span
  2037. class="cmtt-8">&#x00A0;set)</span><span
  2038. class="cmtt-8">&#x00A0;</span><span
  2039. class="cmsy-8">{</span>
  2040. <br class="fancyvrb" /><a
  2041. id="x1-51036r3"></a><span
  2042. class="cmr-6">3</span><span
  2043. class="cmtt-8">&#x00A0;</span><span
  2044. class="cmtt-8">&#x00A0;</span>
  2045. <br class="fancyvrb" /><a
  2046. id="x1-51038r4"></a><span
  2047. class="cmr-6">4</span><span
  2048. class="cmtt-8">&#x00A0;</span><span
  2049. class="cmtt-8">&#x00A0;</span><span
  2050. class="cmtt-8">&#x00A0;</span><span
  2051. class="cmtt-8">&#x00A0;</span><span
  2052. class="cmtt-8">&#x00A0;</span><span
  2053. class="cmtt-8">&#x00A0;</span><span
  2054. class="cmtt-8">&#x00A0;</span><span
  2055. class="cmtt-8">&#x00A0;</span><span
  2056. class="cmtt-8">&#x00A0;</span><span
  2057. class="cmtt-8">&#x00A0;</span><span
  2058. class="cmtt-8">&#x00A0;2)</span><span
  2059. class="cmtt-8">&#x00A0;[flag]</span><span
  2060. class="cmtt-8">&#x00A0;=</span><span
  2061. class="cmtt-8">&#x00A0;read</span><span
  2062. class="cmtt-8">&#x00A0;one</span><span
  2063. class="cmtt-8">&#x00A0;bit;</span>
  2064. <br class="fancyvrb" /><a
  2065. id="x1-51040r5"></a><span
  2066. class="cmr-6">5</span><span
  2067. class="cmtt-8">&#x00A0;</span><span
  2068. class="cmtt-8">&#x00A0;</span><span
  2069. class="cmtt-8">&#x00A0;</span><span
  2070. class="cmtt-8">&#x00A0;</span><span
  2071. class="cmtt-8">&#x00A0;</span><span
  2072. class="cmtt-8">&#x00A0;</span><span
  2073. class="cmtt-8">&#x00A0;</span><span
  2074. class="cmtt-8">&#x00A0;</span><span
  2075. class="cmtt-8">&#x00A0;</span><span
  2076. class="cmtt-8">&#x00A0;</span><span
  2077. class="cmtt-8">&#x00A0;3)</span><span
  2078. class="cmtt-8">&#x00A0;if([flag]</span><span
  2079. class="cmtt-8">&#x00A0;is</span><span
  2080. class="cmtt-8">&#x00A0;set)</span><span
  2081. class="cmtt-8">&#x00A0;</span><span
  2082. class="cmsy-8">{</span>
  2083. <br class="fancyvrb" /><a
  2084. id="x1-51042r6"></a><span
  2085. class="cmr-6">6</span><span
  2086. class="cmtt-8">&#x00A0;</span><span
  2087. class="cmtt-8">&#x00A0;</span>
  2088. <br class="fancyvrb" /><a
  2089. id="x1-51044r7"></a><span
  2090. class="cmr-6">7</span><span
  2091. class="cmtt-8">&#x00A0;</span><span
  2092. class="cmtt-8">&#x00A0;</span><span
  2093. class="cmtt-8">&#x00A0;</span><span
  2094. class="cmtt-8">&#x00A0;</span><span
  2095. class="cmtt-8">&#x00A0;</span><span
  2096. class="cmtt-8">&#x00A0;</span><span
  2097. class="cmtt-8">&#x00A0;</span><span
  2098. class="cmtt-8">&#x00A0;</span><span
  2099. class="cmtt-8">&#x00A0;</span><span
  2100. class="cmtt-8">&#x00A0;</span><span
  2101. class="cmtt-8">&#x00A0;</span><span
  2102. class="cmtt-8">&#x00A0;</span><span
  2103. class="cmtt-8">&#x00A0;</span><span
  2104. class="cmtt-8">&#x00A0;</span><span
  2105. class="cmtt-8">&#x00A0;</span><span
  2106. class="cmtt-8">&#x00A0;4)</span><span
  2107. class="cmtt-8">&#x00A0;[length]</span><span
  2108. class="cmtt-8">&#x00A0;=</span><span
  2109. class="cmtt-8">&#x00A0;read</span><span
  2110. class="cmtt-8">&#x00A0;a</span><span
  2111. class="cmtt-8">&#x00A0;five</span><span
  2112. class="cmtt-8">&#x00A0;bit</span><span
  2113. class="cmtt-8">&#x00A0;unsigned</span><span
  2114. class="cmtt-8">&#x00A0;integer;</span>
  2115. <br class="fancyvrb" /><a
  2116. id="x1-51046r8"></a><span
  2117. class="cmr-6">8</span><span
  2118. class="cmtt-8">&#x00A0;</span><span
  2119. class="cmtt-8">&#x00A0;</span><span
  2120. class="cmtt-8">&#x00A0;</span><span
  2121. class="cmtt-8">&#x00A0;</span><span
  2122. class="cmtt-8">&#x00A0;</span><span
  2123. class="cmtt-8">&#x00A0;</span><span
  2124. class="cmtt-8">&#x00A0;</span><span
  2125. class="cmtt-8">&#x00A0;</span><span
  2126. class="cmtt-8">&#x00A0;</span><span
  2127. class="cmtt-8">&#x00A0;</span><span
  2128. class="cmtt-8">&#x00A0;</span><span
  2129. class="cmtt-8">&#x00A0;</span><span
  2130. class="cmtt-8">&#x00A0;</span><span
  2131. class="cmtt-8">&#x00A0;</span><span
  2132. class="cmtt-8">&#x00A0;</span><span
  2133. class="cmtt-8">&#x00A0;5)</span><span
  2134. class="cmtt-8">&#x00A0;codeword</span><span
  2135. class="cmtt-8">&#x00A0;length</span><span
  2136. class="cmtt-8">&#x00A0;for</span><span
  2137. class="cmtt-8">&#x00A0;this</span><span
  2138. class="cmtt-8">&#x00A0;entry</span><span
  2139. class="cmtt-8">&#x00A0;is</span><span
  2140. class="cmtt-8">&#x00A0;[length]+1;</span>
  2141. <br class="fancyvrb" /><a
  2142. id="x1-51048r9"></a><span
  2143. class="cmr-6">9</span><span
  2144. class="cmtt-8">&#x00A0;</span><span
  2145. class="cmtt-8">&#x00A0;</span>
  2146. <br class="fancyvrb" /><a
  2147. id="x1-51050r10"></a><span
  2148. class="cmr-6">10</span><span
  2149. class="cmtt-8">&#x00A0;</span><span
  2150. class="cmtt-8">&#x00A0;</span><span
  2151. class="cmtt-8">&#x00A0;</span><span
  2152. class="cmtt-8">&#x00A0;</span><span
  2153. class="cmtt-8">&#x00A0;</span><span
  2154. class="cmtt-8">&#x00A0;</span><span
  2155. class="cmtt-8">&#x00A0;</span><span
  2156. class="cmtt-8">&#x00A0;</span><span
  2157. class="cmtt-8">&#x00A0;</span><span
  2158. class="cmtt-8">&#x00A0;</span><span
  2159. class="cmtt-8">&#x00A0;</span><span
  2160. class="cmtt-8">&#x00A0;</span><span
  2161. class="cmtt-8">&#x00A0;</span><span
  2162. class="cmtt-8">&#x00A0;</span><span
  2163. class="cmsy-8">}</span><span
  2164. class="cmtt-8">&#x00A0;else</span><span
  2165. class="cmtt-8">&#x00A0;</span><span
  2166. class="cmsy-8">{</span>
  2167. <br class="fancyvrb" /><a
  2168. id="x1-51052r11"></a><span
  2169. class="cmr-6">11</span><span
  2170. class="cmtt-8">&#x00A0;</span><span
  2171. class="cmtt-8">&#x00A0;</span>
  2172. <br class="fancyvrb" /><a
  2173. id="x1-51054r12"></a><span
  2174. class="cmr-6">12</span><span
  2175. class="cmtt-8">&#x00A0;</span><span
  2176. class="cmtt-8">&#x00A0;</span><span
  2177. class="cmtt-8">&#x00A0;</span><span
  2178. class="cmtt-8">&#x00A0;</span><span
  2179. class="cmtt-8">&#x00A0;</span><span
  2180. class="cmtt-8">&#x00A0;</span><span
  2181. class="cmtt-8">&#x00A0;</span><span
  2182. class="cmtt-8">&#x00A0;</span><span
  2183. class="cmtt-8">&#x00A0;</span><span
  2184. class="cmtt-8">&#x00A0;</span><span
  2185. class="cmtt-8">&#x00A0;</span><span
  2186. class="cmtt-8">&#x00A0;</span><span
  2187. class="cmtt-8">&#x00A0;</span><span
  2188. class="cmtt-8">&#x00A0;</span><span
  2189. class="cmtt-8">&#x00A0;</span><span
  2190. class="cmtt-8">&#x00A0;6)</span><span
  2191. class="cmtt-8">&#x00A0;this</span><span
  2192. class="cmtt-8">&#x00A0;entry</span><span
  2193. class="cmtt-8">&#x00A0;is</span><span
  2194. class="cmtt-8">&#x00A0;unused.</span><span
  2195. class="cmtt-8">&#x00A0;</span><span
  2196. class="cmtt-8">&#x00A0;mark</span><span
  2197. class="cmtt-8">&#x00A0;it</span><span
  2198. class="cmtt-8">&#x00A0;as</span><span
  2199. class="cmtt-8">&#x00A0;such.</span>
  2200. <br class="fancyvrb" /><a
  2201. id="x1-51056r13"></a><span
  2202. class="cmr-6">13</span><span
  2203. class="cmtt-8">&#x00A0;</span><span
  2204. class="cmtt-8">&#x00A0;</span>
  2205. <br class="fancyvrb" /><a
  2206. id="x1-51058r14"></a><span
  2207. class="cmr-6">14</span><span
  2208. class="cmtt-8">&#x00A0;</span><span
  2209. class="cmtt-8">&#x00A0;</span><span
  2210. class="cmtt-8">&#x00A0;</span><span
  2211. class="cmtt-8">&#x00A0;</span><span
  2212. class="cmtt-8">&#x00A0;</span><span
  2213. class="cmtt-8">&#x00A0;</span><span
  2214. class="cmtt-8">&#x00A0;</span><span
  2215. class="cmtt-8">&#x00A0;</span><span
  2216. class="cmtt-8">&#x00A0;</span><span
  2217. class="cmtt-8">&#x00A0;</span><span
  2218. class="cmtt-8">&#x00A0;</span><span
  2219. class="cmtt-8">&#x00A0;</span><span
  2220. class="cmtt-8">&#x00A0;</span><span
  2221. class="cmtt-8">&#x00A0;</span><span
  2222. class="cmsy-8">}</span>
  2223. <br class="fancyvrb" /><a
  2224. id="x1-51060r15"></a><span
  2225. class="cmr-6">15</span><span
  2226. class="cmtt-8">&#x00A0;</span><span
  2227. class="cmtt-8">&#x00A0;</span>
  2228. <br class="fancyvrb" /><a
  2229. id="x1-51062r16"></a><span
  2230. class="cmr-6">16</span><span
  2231. class="cmtt-8">&#x00A0;</span><span
  2232. class="cmtt-8">&#x00A0;</span><span
  2233. class="cmtt-8">&#x00A0;</span><span
  2234. class="cmtt-8">&#x00A0;</span><span
  2235. class="cmtt-8">&#x00A0;</span><span
  2236. class="cmtt-8">&#x00A0;</span><span
  2237. class="cmtt-8">&#x00A0;</span><span
  2238. class="cmsy-8">}</span><span
  2239. class="cmtt-8">&#x00A0;else</span><span
  2240. class="cmtt-8">&#x00A0;the</span><span
  2241. class="cmtt-8">&#x00A0;sparse</span><span
  2242. class="cmtt-8">&#x00A0;flag</span><span
  2243. class="cmtt-8">&#x00A0;is</span><span
  2244. class="cmtt-8">&#x00A0;not</span><span
  2245. class="cmtt-8">&#x00A0;set</span><span
  2246. class="cmtt-8">&#x00A0;</span><span
  2247. class="cmsy-8">{</span>
  2248. <br class="fancyvrb" /><a
  2249. id="x1-51064r17"></a><span
  2250. class="cmr-6">17</span><span
  2251. class="cmtt-8">&#x00A0;</span><span
  2252. class="cmtt-8">&#x00A0;</span>
  2253. <br class="fancyvrb" /><a
  2254. id="x1-51066r18"></a><span
  2255. class="cmr-6">18</span><span
  2256. class="cmtt-8">&#x00A0;</span><span
  2257. class="cmtt-8">&#x00A0;</span><span
  2258. class="cmtt-8">&#x00A0;</span><span
  2259. class="cmtt-8">&#x00A0;</span><span
  2260. class="cmtt-8">&#x00A0;</span><span
  2261. class="cmtt-8">&#x00A0;</span><span
  2262. class="cmtt-8">&#x00A0;</span><span
  2263. class="cmtt-8">&#x00A0;</span><span
  2264. class="cmtt-8">&#x00A0;</span><span
  2265. class="cmtt-8">&#x00A0;7)</span><span
  2266. class="cmtt-8">&#x00A0;[length]</span><span
  2267. class="cmtt-8">&#x00A0;=</span><span
  2268. class="cmtt-8">&#x00A0;read</span><span
  2269. class="cmtt-8">&#x00A0;a</span><span
  2270. class="cmtt-8">&#x00A0;five</span><span
  2271. class="cmtt-8">&#x00A0;bit</span><span
  2272. class="cmtt-8">&#x00A0;unsigned</span><span
  2273. class="cmtt-8">&#x00A0;integer;</span>
  2274. <br class="fancyvrb" /><a
  2275. id="x1-51068r19"></a><span
  2276. class="cmr-6">19</span><span
  2277. class="cmtt-8">&#x00A0;</span><span
  2278. class="cmtt-8">&#x00A0;</span><span
  2279. class="cmtt-8">&#x00A0;</span><span
  2280. class="cmtt-8">&#x00A0;</span><span
  2281. class="cmtt-8">&#x00A0;</span><span
  2282. class="cmtt-8">&#x00A0;</span><span
  2283. class="cmtt-8">&#x00A0;</span><span
  2284. class="cmtt-8">&#x00A0;</span><span
  2285. class="cmtt-8">&#x00A0;</span><span
  2286. class="cmtt-8">&#x00A0;8)</span><span
  2287. class="cmtt-8">&#x00A0;the</span><span
  2288. class="cmtt-8">&#x00A0;codeword</span><span
  2289. class="cmtt-8">&#x00A0;length</span><span
  2290. class="cmtt-8">&#x00A0;for</span><span
  2291. class="cmtt-8">&#x00A0;this</span><span
  2292. class="cmtt-8">&#x00A0;entry</span><span
  2293. class="cmtt-8">&#x00A0;is</span><span
  2294. class="cmtt-8">&#x00A0;[length]+1;</span>
  2295. <br class="fancyvrb" /><a
  2296. id="x1-51070r20"></a><span
  2297. class="cmr-6">20</span><span
  2298. class="cmtt-8">&#x00A0;</span><span
  2299. class="cmtt-8">&#x00A0;</span>
  2300. <br class="fancyvrb" /><a
  2301. id="x1-51072r21"></a><span
  2302. class="cmr-6">21</span><span
  2303. class="cmtt-8">&#x00A0;</span><span
  2304. class="cmtt-8">&#x00A0;</span><span
  2305. class="cmtt-8">&#x00A0;</span><span
  2306. class="cmtt-8">&#x00A0;</span><span
  2307. class="cmtt-8">&#x00A0;</span><span
  2308. class="cmtt-8">&#x00A0;</span><span
  2309. class="cmtt-8">&#x00A0;</span><span
  2310. class="cmsy-8">}</span>
  2311. <br class="fancyvrb" /><a
  2312. id="x1-51074r22"></a><span
  2313. class="cmr-6">22</span><span
  2314. class="cmtt-8">&#x00A0;</span><span
  2315. class="cmtt-8">&#x00A0;</span>
  2316. </div>
  2317. </li>
  2318. <li class="itemize">If the <span
  2319. class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
  2320. ascending length order. Rather than reading a length for every codeword, the
  2321. encoder reads the number of codewords per length. That is, beginning at entry
  2322. zero:
  2323. <!--l. 120--><p class="noindent" >
  2324. <div class="fancyvrb" id="fancyvrb12">
  2325. <a
  2326. id="x1-51076r1"></a><span
  2327. class="cmr-6">1</span><span
  2328. class="cmtt-8">&#x00A0;</span><span
  2329. class="cmtt-8">&#x00A0;</span><span
  2330. class="cmtt-8">&#x00A0;</span><span
  2331. class="cmtt-8">&#x00A0;1)</span><span
  2332. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2333. class="cmtt-8">&#x00A0;=</span><span
  2334. class="cmtt-8">&#x00A0;0;</span>
  2335. <br class="fancyvrb" /><a
  2336. id="x1-51078r2"></a><span
  2337. class="cmr-6">2</span><span
  2338. class="cmtt-8">&#x00A0;</span><span
  2339. class="cmtt-8">&#x00A0;</span><span
  2340. class="cmtt-8">&#x00A0;</span><span
  2341. class="cmtt-8">&#x00A0;2)</span><span
  2342. class="cmtt-8">&#x00A0;[current_length]</span><span
  2343. class="cmtt-8">&#x00A0;=</span><span
  2344. class="cmtt-8">&#x00A0;read</span><span
  2345. class="cmtt-8">&#x00A0;a</span><span
  2346. class="cmtt-8">&#x00A0;five</span><span
  2347. class="cmtt-8">&#x00A0;bit</span><span
  2348. class="cmtt-8">&#x00A0;unsigned</span><span
  2349. class="cmtt-8">&#x00A0;integer</span><span
  2350. class="cmtt-8">&#x00A0;and</span><span
  2351. class="cmtt-8">&#x00A0;add</span><span
  2352. class="cmtt-8">&#x00A0;1;</span>
  2353. <br class="fancyvrb" /><a
  2354. id="x1-51080r3"></a><span
  2355. class="cmr-6">3</span><span
  2356. class="cmtt-8">&#x00A0;</span><span
  2357. class="cmtt-8">&#x00A0;</span><span
  2358. class="cmtt-8">&#x00A0;</span><span
  2359. class="cmtt-8">&#x00A0;3)</span><span
  2360. class="cmtt-8">&#x00A0;[number]</span><span
  2361. class="cmtt-8">&#x00A0;=</span><span
  2362. class="cmtt-8">&#x00A0;read</span><span
  2363. class="cmtt-8">&#x00A0;</span><a
  2364. href="#x1-1170009.2.1"><span
  2365. class="cmtt-8">ilog</span></a><span
  2366. class="cmtt-8">([codebook_entries]</span><span
  2367. class="cmtt-8">&#x00A0;-</span><span
  2368. class="cmtt-8">&#x00A0;[current_entry])</span><span
  2369. class="cmtt-8">&#x00A0;bits</span><span
  2370. class="cmtt-8">&#x00A0;as</span><span
  2371. class="cmtt-8">&#x00A0;an</span><span
  2372. class="cmtt-8">&#x00A0;unsigned</span><span
  2373. class="cmtt-8">&#x00A0;integer</span>
  2374. <br class="fancyvrb" /><a
  2375. id="x1-51082r4"></a><span
  2376. class="cmr-6">4</span><span
  2377. class="cmtt-8">&#x00A0;</span><span
  2378. class="cmtt-8">&#x00A0;</span><span
  2379. class="cmtt-8">&#x00A0;</span><span
  2380. class="cmtt-8">&#x00A0;4)</span><span
  2381. class="cmtt-8">&#x00A0;set</span><span
  2382. class="cmtt-8">&#x00A0;the</span><span
  2383. class="cmtt-8">&#x00A0;entries</span><span
  2384. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2385. class="cmtt-8">&#x00A0;through</span><span
  2386. class="cmtt-8">&#x00A0;[current_entry]+[number]-1,</span><span
  2387. class="cmtt-8">&#x00A0;inclusive,</span>
  2388. <br class="fancyvrb" /><a
  2389. id="x1-51084r5"></a><span
  2390. class="cmr-6">5</span><span
  2391. class="cmtt-8">&#x00A0;</span><span
  2392. class="cmtt-8">&#x00A0;</span><span
  2393. class="cmtt-8">&#x00A0;</span><span
  2394. class="cmtt-8">&#x00A0;</span><span
  2395. class="cmtt-8">&#x00A0;</span><span
  2396. class="cmtt-8">&#x00A0;of</span><span
  2397. class="cmtt-8">&#x00A0;the</span><span
  2398. class="cmtt-8">&#x00A0;[codebook_codeword_lengths]</span><span
  2399. class="cmtt-8">&#x00A0;array</span><span
  2400. class="cmtt-8">&#x00A0;to</span><span
  2401. class="cmtt-8">&#x00A0;[current_length]</span>
  2402. <br class="fancyvrb" /><a
  2403. id="x1-51086r6"></a><span
  2404. class="cmr-6">6</span><span
  2405. class="cmtt-8">&#x00A0;</span><span
  2406. class="cmtt-8">&#x00A0;</span><span
  2407. class="cmtt-8">&#x00A0;</span><span
  2408. class="cmtt-8">&#x00A0;5)</span><span
  2409. class="cmtt-8">&#x00A0;set</span><span
  2410. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2411. class="cmtt-8">&#x00A0;to</span><span
  2412. class="cmtt-8">&#x00A0;[number]</span><span
  2413. class="cmtt-8">&#x00A0;+</span><span
  2414. class="cmtt-8">&#x00A0;[current_entry]</span>
  2415. <br class="fancyvrb" /><a
  2416. id="x1-51088r7"></a><span
  2417. class="cmr-6">7</span><span
  2418. class="cmtt-8">&#x00A0;</span><span
  2419. class="cmtt-8">&#x00A0;</span><span
  2420. class="cmtt-8">&#x00A0;</span><span
  2421. class="cmtt-8">&#x00A0;6)</span><span
  2422. class="cmtt-8">&#x00A0;increment</span><span
  2423. class="cmtt-8">&#x00A0;[current_length]</span><span
  2424. class="cmtt-8">&#x00A0;by</span><span
  2425. class="cmtt-8">&#x00A0;1</span>
  2426. <br class="fancyvrb" /><a
  2427. id="x1-51090r8"></a><span
  2428. class="cmr-6">8</span><span
  2429. class="cmtt-8">&#x00A0;</span><span
  2430. class="cmtt-8">&#x00A0;</span><span
  2431. class="cmtt-8">&#x00A0;</span><span
  2432. class="cmtt-8">&#x00A0;7)</span><span
  2433. class="cmtt-8">&#x00A0;if</span><span
  2434. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2435. class="cmtt-8">&#x00A0;is</span><span
  2436. class="cmtt-8">&#x00A0;greater</span><span
  2437. class="cmtt-8">&#x00A0;than</span><span
  2438. class="cmtt-8">&#x00A0;[codebook_entries]</span><span
  2439. class="cmtt-8">&#x00A0;ERROR</span><span
  2440. class="cmtt-8">&#x00A0;CONDITION;</span>
  2441. <br class="fancyvrb" /><a
  2442. id="x1-51092r9"></a><span
  2443. class="cmr-6">9</span><span
  2444. class="cmtt-8">&#x00A0;</span><span
  2445. class="cmtt-8">&#x00A0;</span><span
  2446. class="cmtt-8">&#x00A0;</span><span
  2447. class="cmtt-8">&#x00A0;</span><span
  2448. class="cmtt-8">&#x00A0;</span><span
  2449. class="cmtt-8">&#x00A0;the</span><span
  2450. class="cmtt-8">&#x00A0;decoder</span><span
  2451. class="cmtt-8">&#x00A0;will</span><span
  2452. class="cmtt-8">&#x00A0;not</span><span
  2453. class="cmtt-8">&#x00A0;be</span><span
  2454. class="cmtt-8">&#x00A0;able</span><span
  2455. class="cmtt-8">&#x00A0;to</span><span
  2456. class="cmtt-8">&#x00A0;read</span><span
  2457. class="cmtt-8">&#x00A0;this</span><span
  2458. class="cmtt-8">&#x00A0;stream.</span>
  2459. <br class="fancyvrb" /><a
  2460. id="x1-51094r10"></a><span
  2461. class="cmr-6">10</span><span
  2462. class="cmtt-8">&#x00A0;</span><span
  2463. class="cmtt-8">&#x00A0;</span><span
  2464. class="cmtt-8">&#x00A0;</span><span
  2465. class="cmtt-8">&#x00A0;8)</span><span
  2466. class="cmtt-8">&#x00A0;if</span><span
  2467. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2468. class="cmtt-8">&#x00A0;is</span><span
  2469. class="cmtt-8">&#x00A0;less</span><span
  2470. class="cmtt-8">&#x00A0;than</span><span
  2471. class="cmtt-8">&#x00A0;[codebook_entries],</span><span
  2472. class="cmtt-8">&#x00A0;repeat</span><span
  2473. class="cmtt-8">&#x00A0;process</span><span
  2474. class="cmtt-8">&#x00A0;starting</span><span
  2475. class="cmtt-8">&#x00A0;at</span><span
  2476. class="cmtt-8">&#x00A0;3)</span>
  2477. <br class="fancyvrb" /><a
  2478. id="x1-51096r11"></a><span
  2479. class="cmr-6">11</span><span
  2480. class="cmtt-8">&#x00A0;</span><span
  2481. class="cmtt-8">&#x00A0;</span><span
  2482. class="cmtt-8">&#x00A0;</span><span
  2483. class="cmtt-8">&#x00A0;9)</span><span
  2484. class="cmtt-8">&#x00A0;done.</span>
  2485. </div>
  2486. </li></ul>
  2487. <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
  2488. I supports three lookup types:
  2489. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  2490. 1. </dt><dd
  2491. class="enumerate-enumitem">No lookup
  2492. </dd><dt class="enumerate-enumitem">
  2493. 2. </dt><dd
  2494. class="enumerate-enumitem">Implicitly populated value mapping (lattice VQ)
  2495. </dd><dt class="enumerate-enumitem">
  2496. 3. </dt><dd
  2497. class="enumerate-enumitem">Explicitly populated value mapping (tessellated or &#8217;foam&#8217; VQ)</dd></dl>
  2498. <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
  2499. <div class="fancyvrb" id="fancyvrb13">
  2500. <a
  2501. id="x1-51101r1"></a><span
  2502. class="cmr-6">1</span><span
  2503. class="cmtt-8">&#x00A0;</span><span
  2504. class="cmtt-8">&#x00A0;</span><span
  2505. class="cmtt-8">&#x00A0;</span><span
  2506. class="cmtt-8">&#x00A0;1)</span><span
  2507. class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
  2508. class="cmtt-8">&#x00A0;=</span><span
  2509. class="cmtt-8">&#x00A0;read</span><span
  2510. class="cmtt-8">&#x00A0;four</span><span
  2511. class="cmtt-8">&#x00A0;bits</span><span
  2512. class="cmtt-8">&#x00A0;as</span><span
  2513. class="cmtt-8">&#x00A0;an</span><span
  2514. class="cmtt-8">&#x00A0;unsigned</span><span
  2515. class="cmtt-8">&#x00A0;integer</span>
  2516. </div>
  2517. <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span
  2518. class="cmtt-12">[codebook_lookup_type]</span>:
  2519. <ul class="itemize1">
  2520. <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
  2521. </li>
  2522. <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
  2523. be read. Lookup type one reads a list of values that are permuted in a set pattern to
  2524. build a list of vectors, each vector of order <span
  2525. class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
  2526. type two builds the same vector list, but reads each scalar for each vector explicitly,
  2527. rather than building vectors from a smaller list of possible scalar values. Lookup
  2528. decode proceeds as follows:
  2529. <!--l. 168--><p class="noindent" >
  2530. <div class="fancyvrb" id="fancyvrb14">
  2531. <a
  2532. id="x1-51103r1"></a><span
  2533. class="cmr-6">1</span><span
  2534. class="cmtt-8">&#x00A0;</span><span
  2535. class="cmtt-8">&#x00A0;</span><span
  2536. class="cmtt-8">&#x00A0;</span><span
  2537. class="cmtt-8">&#x00A0;1)</span><span
  2538. class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
  2539. class="cmtt-8">&#x00A0;=</span><span
  2540. class="cmtt-8">&#x00A0;</span><a
  2541. href="#x1-1180009.2.2"><span
  2542. class="cmtt-8">float32_unpack</span></a><span
  2543. class="cmtt-8">(</span><span
  2544. class="cmtt-8">&#x00A0;read</span><span
  2545. class="cmtt-8">&#x00A0;32</span><span
  2546. class="cmtt-8">&#x00A0;bits</span><span
  2547. class="cmtt-8">&#x00A0;as</span><span
  2548. class="cmtt-8">&#x00A0;an</span><span
  2549. class="cmtt-8">&#x00A0;unsigned</span><span
  2550. class="cmtt-8">&#x00A0;integer)</span>
  2551. <br class="fancyvrb" /><a
  2552. id="x1-51105r2"></a><span
  2553. class="cmr-6">2</span><span
  2554. class="cmtt-8">&#x00A0;</span><span
  2555. class="cmtt-8">&#x00A0;</span><span
  2556. class="cmtt-8">&#x00A0;</span><span
  2557. class="cmtt-8">&#x00A0;2)</span><span
  2558. class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
  2559. class="cmtt-8">&#x00A0;=</span><span
  2560. class="cmtt-8">&#x00A0;</span><a
  2561. href="#x1-1180009.2.2"><span
  2562. class="cmtt-8">float32_unpack</span></a><span
  2563. class="cmtt-8">(</span><span
  2564. class="cmtt-8">&#x00A0;read</span><span
  2565. class="cmtt-8">&#x00A0;32</span><span
  2566. class="cmtt-8">&#x00A0;bits</span><span
  2567. class="cmtt-8">&#x00A0;as</span><span
  2568. class="cmtt-8">&#x00A0;an</span><span
  2569. class="cmtt-8">&#x00A0;unsigned</span><span
  2570. class="cmtt-8">&#x00A0;integer)</span>
  2571. <br class="fancyvrb" /><a
  2572. id="x1-51107r3"></a><span
  2573. class="cmr-6">3</span><span
  2574. class="cmtt-8">&#x00A0;</span><span
  2575. class="cmtt-8">&#x00A0;</span><span
  2576. class="cmtt-8">&#x00A0;</span><span
  2577. class="cmtt-8">&#x00A0;3)</span><span
  2578. class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
  2579. class="cmtt-8">&#x00A0;=</span><span
  2580. class="cmtt-8">&#x00A0;read</span><span
  2581. class="cmtt-8">&#x00A0;4</span><span
  2582. class="cmtt-8">&#x00A0;bits</span><span
  2583. class="cmtt-8">&#x00A0;as</span><span
  2584. class="cmtt-8">&#x00A0;an</span><span
  2585. class="cmtt-8">&#x00A0;unsigned</span><span
  2586. class="cmtt-8">&#x00A0;integer</span><span
  2587. class="cmtt-8">&#x00A0;and</span><span
  2588. class="cmtt-8">&#x00A0;add</span><span
  2589. class="cmtt-8">&#x00A0;1</span>
  2590. <br class="fancyvrb" /><a
  2591. id="x1-51109r4"></a><span
  2592. class="cmr-6">4</span><span
  2593. class="cmtt-8">&#x00A0;</span><span
  2594. class="cmtt-8">&#x00A0;</span><span
  2595. class="cmtt-8">&#x00A0;</span><span
  2596. class="cmtt-8">&#x00A0;4)</span><span
  2597. class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
  2598. class="cmtt-8">&#x00A0;=</span><span
  2599. class="cmtt-8">&#x00A0;read</span><span
  2600. class="cmtt-8">&#x00A0;1</span><span
  2601. class="cmtt-8">&#x00A0;bit</span><span
  2602. class="cmtt-8">&#x00A0;as</span><span
  2603. class="cmtt-8">&#x00A0;a</span><span
  2604. class="cmtt-8">&#x00A0;boolean</span><span
  2605. class="cmtt-8">&#x00A0;flag</span>
  2606. <br class="fancyvrb" /><a
  2607. id="x1-51111r5"></a><span
  2608. class="cmr-6">5</span><span
  2609. class="cmtt-8">&#x00A0;</span><span
  2610. class="cmtt-8">&#x00A0;</span>
  2611. <br class="fancyvrb" /><a
  2612. id="x1-51113r6"></a><span
  2613. class="cmr-6">6</span><span
  2614. class="cmtt-8">&#x00A0;</span><span
  2615. class="cmtt-8">&#x00A0;</span><span
  2616. class="cmtt-8">&#x00A0;</span><span
  2617. class="cmtt-8">&#x00A0;if</span><span
  2618. class="cmtt-8">&#x00A0;(</span><span
  2619. class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
  2620. class="cmtt-8">&#x00A0;is</span><span
  2621. class="cmtt-8">&#x00A0;1</span><span
  2622. class="cmtt-8">&#x00A0;)</span><span
  2623. class="cmtt-8">&#x00A0;</span><span
  2624. class="cmsy-8">{</span>
  2625. <br class="fancyvrb" /><a
  2626. id="x1-51115r7"></a><span
  2627. class="cmr-6">7</span><span
  2628. class="cmtt-8">&#x00A0;</span><span
  2629. class="cmtt-8">&#x00A0;</span>
  2630. <br class="fancyvrb" /><a
  2631. id="x1-51117r8"></a><span
  2632. class="cmr-6">8</span><span
  2633. class="cmtt-8">&#x00A0;</span><span
  2634. class="cmtt-8">&#x00A0;</span><span
  2635. class="cmtt-8">&#x00A0;</span><span
  2636. class="cmtt-8">&#x00A0;</span><span
  2637. class="cmtt-8">&#x00A0;</span><span
  2638. class="cmtt-8">&#x00A0;</span><span
  2639. class="cmtt-8">&#x00A0;5)</span><span
  2640. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
  2641. class="cmtt-8">&#x00A0;=</span><span
  2642. class="cmtt-8">&#x00A0;</span><a
  2643. href="#x1-1190009.2.3"><span
  2644. class="cmtt-8">lookup1_values</span></a><span
  2645. class="cmtt-8">([codebook_entries],</span><span
  2646. class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
  2647. class="cmtt-8">&#x00A0;)</span>
  2648. <br class="fancyvrb" /><a
  2649. id="x1-51119r9"></a><span
  2650. class="cmr-6">9</span><span
  2651. class="cmtt-8">&#x00A0;</span><span
  2652. class="cmtt-8">&#x00A0;</span>
  2653. <br class="fancyvrb" /><a
  2654. id="x1-51121r10"></a><span
  2655. class="cmr-6">10</span><span
  2656. class="cmtt-8">&#x00A0;</span><span
  2657. class="cmtt-8">&#x00A0;</span><span
  2658. class="cmtt-8">&#x00A0;</span><span
  2659. class="cmtt-8">&#x00A0;</span><span
  2660. class="cmsy-8">}</span><span
  2661. class="cmtt-8">&#x00A0;else</span><span
  2662. class="cmtt-8">&#x00A0;</span><span
  2663. class="cmsy-8">{</span>
  2664. <br class="fancyvrb" /><a
  2665. id="x1-51123r11"></a><span
  2666. class="cmr-6">11</span><span
  2667. class="cmtt-8">&#x00A0;</span><span
  2668. class="cmtt-8">&#x00A0;</span>
  2669. <br class="fancyvrb" /><a
  2670. id="x1-51125r12"></a><span
  2671. class="cmr-6">12</span><span
  2672. class="cmtt-8">&#x00A0;</span><span
  2673. class="cmtt-8">&#x00A0;</span><span
  2674. class="cmtt-8">&#x00A0;</span><span
  2675. class="cmtt-8">&#x00A0;</span><span
  2676. class="cmtt-8">&#x00A0;</span><span
  2677. class="cmtt-8">&#x00A0;</span><span
  2678. class="cmtt-8">&#x00A0;6)</span><span
  2679. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
  2680. class="cmtt-8">&#x00A0;=</span><span
  2681. class="cmtt-8">&#x00A0;[codebook_entries]</span><span
  2682. class="cmtt-8">&#x00A0;*</span><span
  2683. class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
  2684. <br class="fancyvrb" /><a
  2685. id="x1-51127r13"></a><span
  2686. class="cmr-6">13</span><span
  2687. class="cmtt-8">&#x00A0;</span><span
  2688. class="cmtt-8">&#x00A0;</span>
  2689. <br class="fancyvrb" /><a
  2690. id="x1-51129r14"></a><span
  2691. class="cmr-6">14</span><span
  2692. class="cmtt-8">&#x00A0;</span><span
  2693. class="cmtt-8">&#x00A0;</span><span
  2694. class="cmtt-8">&#x00A0;</span><span
  2695. class="cmtt-8">&#x00A0;</span><span
  2696. class="cmsy-8">}</span>
  2697. <br class="fancyvrb" /><a
  2698. id="x1-51131r15"></a><span
  2699. class="cmr-6">15</span><span
  2700. class="cmtt-8">&#x00A0;</span><span
  2701. class="cmtt-8">&#x00A0;</span>
  2702. <br class="fancyvrb" /><a
  2703. id="x1-51133r16"></a><span
  2704. class="cmr-6">16</span><span
  2705. class="cmtt-8">&#x00A0;</span><span
  2706. class="cmtt-8">&#x00A0;</span><span
  2707. class="cmtt-8">&#x00A0;</span><span
  2708. class="cmtt-8">&#x00A0;7)</span><span
  2709. class="cmtt-8">&#x00A0;read</span><span
  2710. class="cmtt-8">&#x00A0;a</span><span
  2711. class="cmtt-8">&#x00A0;total</span><span
  2712. class="cmtt-8">&#x00A0;of</span><span
  2713. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
  2714. class="cmtt-8">&#x00A0;unsigned</span><span
  2715. class="cmtt-8">&#x00A0;integers</span><span
  2716. class="cmtt-8">&#x00A0;of</span><span
  2717. class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
  2718. class="cmtt-8">&#x00A0;each;</span>
  2719. <br class="fancyvrb" /><a
  2720. id="x1-51135r17"></a><span
  2721. class="cmr-6">17</span><span
  2722. class="cmtt-8">&#x00A0;</span><span
  2723. class="cmtt-8">&#x00A0;</span><span
  2724. class="cmtt-8">&#x00A0;</span><span
  2725. class="cmtt-8">&#x00A0;</span><span
  2726. class="cmtt-8">&#x00A0;</span><span
  2727. class="cmtt-8">&#x00A0;</span><span
  2728. class="cmtt-8">&#x00A0;store</span><span
  2729. class="cmtt-8">&#x00A0;these</span><span
  2730. class="cmtt-8">&#x00A0;in</span><span
  2731. class="cmtt-8">&#x00A0;order</span><span
  2732. class="cmtt-8">&#x00A0;in</span><span
  2733. class="cmtt-8">&#x00A0;the</span><span
  2734. class="cmtt-8">&#x00A0;array</span><span
  2735. class="cmtt-8">&#x00A0;[codebook_multiplicands]</span>
  2736. </div>
  2737. </li>
  2738. <li class="itemize">A <span
  2739. class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
  2740. not decodable by the specification in this document.
  2741. </li></ul>
  2742. <!--l. 195--><p class="noindent" >An &#8217;end of packet&#8217; during any read operation in the above steps is considered an error condition
  2743. rendering the stream undecodable.
  2744. <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a
  2745. id="x1-520003.2.1"></a><span
  2746. class="cmbx-12">Huffman decision tree representation</span></span>
  2747. The <span
  2748. class="cmtt-12">[codebook_codeword_lengths] </span>array and <span
  2749. class="cmtt-12">[codebook_entries] </span>value uniquely define the
  2750. Huffman decision tree used for entropy decoding.
  2751. <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
  2752. codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
  2753. possible. Assume the following codeword length list:
  2754. <!--l. 209--><p class="noindent" >
  2755. <div class="fancyvrb" id="fancyvrb15">
  2756. <a
  2757. id="x1-52002r1"></a><span
  2758. class="cmr-6">1</span><span
  2759. class="cmtt-8">&#x00A0;</span><span
  2760. class="cmtt-8">&#x00A0;entry</span><span
  2761. class="cmtt-8">&#x00A0;0:</span><span
  2762. class="cmtt-8">&#x00A0;length</span><span
  2763. class="cmtt-8">&#x00A0;2</span>
  2764. <br class="fancyvrb" /><a
  2765. id="x1-52004r2"></a><span
  2766. class="cmr-6">2</span><span
  2767. class="cmtt-8">&#x00A0;</span><span
  2768. class="cmtt-8">&#x00A0;entry</span><span
  2769. class="cmtt-8">&#x00A0;1:</span><span
  2770. class="cmtt-8">&#x00A0;length</span><span
  2771. class="cmtt-8">&#x00A0;4</span>
  2772. <br class="fancyvrb" /><a
  2773. id="x1-52006r3"></a><span
  2774. class="cmr-6">3</span><span
  2775. class="cmtt-8">&#x00A0;</span><span
  2776. class="cmtt-8">&#x00A0;entry</span><span
  2777. class="cmtt-8">&#x00A0;2:</span><span
  2778. class="cmtt-8">&#x00A0;length</span><span
  2779. class="cmtt-8">&#x00A0;4</span>
  2780. <br class="fancyvrb" /><a
  2781. id="x1-52008r4"></a><span
  2782. class="cmr-6">4</span><span
  2783. class="cmtt-8">&#x00A0;</span><span
  2784. class="cmtt-8">&#x00A0;entry</span><span
  2785. class="cmtt-8">&#x00A0;3:</span><span
  2786. class="cmtt-8">&#x00A0;length</span><span
  2787. class="cmtt-8">&#x00A0;4</span>
  2788. <br class="fancyvrb" /><a
  2789. id="x1-52010r5"></a><span
  2790. class="cmr-6">5</span><span
  2791. class="cmtt-8">&#x00A0;</span><span
  2792. class="cmtt-8">&#x00A0;entry</span><span
  2793. class="cmtt-8">&#x00A0;4:</span><span
  2794. class="cmtt-8">&#x00A0;length</span><span
  2795. class="cmtt-8">&#x00A0;4</span>
  2796. <br class="fancyvrb" /><a
  2797. id="x1-52012r6"></a><span
  2798. class="cmr-6">6</span><span
  2799. class="cmtt-8">&#x00A0;</span><span
  2800. class="cmtt-8">&#x00A0;entry</span><span
  2801. class="cmtt-8">&#x00A0;5:</span><span
  2802. class="cmtt-8">&#x00A0;length</span><span
  2803. class="cmtt-8">&#x00A0;2</span>
  2804. <br class="fancyvrb" /><a
  2805. id="x1-52014r7"></a><span
  2806. class="cmr-6">7</span><span
  2807. class="cmtt-8">&#x00A0;</span><span
  2808. class="cmtt-8">&#x00A0;entry</span><span
  2809. class="cmtt-8">&#x00A0;6:</span><span
  2810. class="cmtt-8">&#x00A0;length</span><span
  2811. class="cmtt-8">&#x00A0;3</span>
  2812. <br class="fancyvrb" /><a
  2813. id="x1-52016r8"></a><span
  2814. class="cmr-6">8</span><span
  2815. class="cmtt-8">&#x00A0;</span><span
  2816. class="cmtt-8">&#x00A0;entry</span><span
  2817. class="cmtt-8">&#x00A0;7:</span><span
  2818. class="cmtt-8">&#x00A0;length</span><span
  2819. class="cmtt-8">&#x00A0;3</span>
  2820. </div>
  2821. <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
  2822. in the following codeword list:
  2823. <!--l. 223--><p class="noindent" >
  2824. <div class="fancyvrb" id="fancyvrb16">
  2825. <a
  2826. id="x1-52018r1"></a><span
  2827. class="cmr-6">1</span><span
  2828. class="cmtt-8">&#x00A0;</span><span
  2829. class="cmtt-8">&#x00A0;entry</span><span
  2830. class="cmtt-8">&#x00A0;0:</span><span
  2831. class="cmtt-8">&#x00A0;length</span><span
  2832. class="cmtt-8">&#x00A0;2</span><span
  2833. class="cmtt-8">&#x00A0;codeword</span><span
  2834. class="cmtt-8">&#x00A0;00</span>
  2835. <br class="fancyvrb" /><a
  2836. id="x1-52020r2"></a><span
  2837. class="cmr-6">2</span><span
  2838. class="cmtt-8">&#x00A0;</span><span
  2839. class="cmtt-8">&#x00A0;entry</span><span
  2840. class="cmtt-8">&#x00A0;1:</span><span
  2841. class="cmtt-8">&#x00A0;length</span><span
  2842. class="cmtt-8">&#x00A0;4</span><span
  2843. class="cmtt-8">&#x00A0;codeword</span><span
  2844. class="cmtt-8">&#x00A0;0100</span>
  2845. <br class="fancyvrb" /><a
  2846. id="x1-52022r3"></a><span
  2847. class="cmr-6">3</span><span
  2848. class="cmtt-8">&#x00A0;</span><span
  2849. class="cmtt-8">&#x00A0;entry</span><span
  2850. class="cmtt-8">&#x00A0;2:</span><span
  2851. class="cmtt-8">&#x00A0;length</span><span
  2852. class="cmtt-8">&#x00A0;4</span><span
  2853. class="cmtt-8">&#x00A0;codeword</span><span
  2854. class="cmtt-8">&#x00A0;0101</span>
  2855. <br class="fancyvrb" /><a
  2856. id="x1-52024r4"></a><span
  2857. class="cmr-6">4</span><span
  2858. class="cmtt-8">&#x00A0;</span><span
  2859. class="cmtt-8">&#x00A0;entry</span><span
  2860. class="cmtt-8">&#x00A0;3:</span><span
  2861. class="cmtt-8">&#x00A0;length</span><span
  2862. class="cmtt-8">&#x00A0;4</span><span
  2863. class="cmtt-8">&#x00A0;codeword</span><span
  2864. class="cmtt-8">&#x00A0;0110</span>
  2865. <br class="fancyvrb" /><a
  2866. id="x1-52026r5"></a><span
  2867. class="cmr-6">5</span><span
  2868. class="cmtt-8">&#x00A0;</span><span
  2869. class="cmtt-8">&#x00A0;entry</span><span
  2870. class="cmtt-8">&#x00A0;4:</span><span
  2871. class="cmtt-8">&#x00A0;length</span><span
  2872. class="cmtt-8">&#x00A0;4</span><span
  2873. class="cmtt-8">&#x00A0;codeword</span><span
  2874. class="cmtt-8">&#x00A0;0111</span>
  2875. <br class="fancyvrb" /><a
  2876. id="x1-52028r6"></a><span
  2877. class="cmr-6">6</span><span
  2878. class="cmtt-8">&#x00A0;</span><span
  2879. class="cmtt-8">&#x00A0;entry</span><span
  2880. class="cmtt-8">&#x00A0;5:</span><span
  2881. class="cmtt-8">&#x00A0;length</span><span
  2882. class="cmtt-8">&#x00A0;2</span><span
  2883. class="cmtt-8">&#x00A0;codeword</span><span
  2884. class="cmtt-8">&#x00A0;10</span>
  2885. <br class="fancyvrb" /><a
  2886. id="x1-52030r7"></a><span
  2887. class="cmr-6">7</span><span
  2888. class="cmtt-8">&#x00A0;</span><span
  2889. class="cmtt-8">&#x00A0;entry</span><span
  2890. class="cmtt-8">&#x00A0;6:</span><span
  2891. class="cmtt-8">&#x00A0;length</span><span
  2892. class="cmtt-8">&#x00A0;3</span><span
  2893. class="cmtt-8">&#x00A0;codeword</span><span
  2894. class="cmtt-8">&#x00A0;110</span>
  2895. <br class="fancyvrb" /><a
  2896. id="x1-52032r8"></a><span
  2897. class="cmr-6">8</span><span
  2898. class="cmtt-8">&#x00A0;</span><span
  2899. class="cmtt-8">&#x00A0;entry</span><span
  2900. class="cmtt-8">&#x00A0;7:</span><span
  2901. class="cmtt-8">&#x00A0;length</span><span
  2902. class="cmtt-8">&#x00A0;3</span><span
  2903. class="cmtt-8">&#x00A0;codeword</span><span
  2904. class="cmtt-8">&#x00A0;111</span>
  2905. </div>
  2906. <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a
  2907. id="x1-530003.2.1"></a><span
  2908. class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
  2909. be read and used bit by bit from left to right, thus the codeword &#8217;001&#8217; is the bit string &#8217;zero, zero,
  2910. one&#8217;. When determining &#8217;lowest possible value&#8217; in the assignment definition above, the leftmost
  2911. bit is the MSb.
  2912. <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
  2913. numbers equivalent to the leaves numbered left-to-right:
  2914. <div class="center"
  2915. >
  2916. <!--l. 247--><p class="noindent" >
  2917. <!--l. 248--><p class="noindent" ><img
  2918. src="hufftree.png" alt="PIC"
  2919. >
  2920. <br /> <div class="caption"
  2921. ><span class="id">Figure&#x00A0;4: </span><span
  2922. class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
  2923. </div>
  2924. <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
  2925. possible position.
  2926. <!--l. 256--><p class="noindent" >Note that it&#8217;s possible to underspecify or overspecify a Huffman tree via the length list.
  2927. In the above example, if codeword seven were eliminated, it&#8217;s clear that the tree is
  2928. unfinished:
  2929. <div class="center"
  2930. >
  2931. <!--l. 260--><p class="noindent" >
  2932. <!--l. 261--><p class="noindent" ><img
  2933. src="hufftree-under.png" alt="PIC"
  2934. >
  2935. <br /> <div class="caption"
  2936. ><span class="id">Figure&#x00A0;5: </span><span
  2937. class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
  2938. </div>
  2939. <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it&#8217;s clear that the tree is fully populated and a ninth
  2940. codeword is impossible. Both underspecified and overspecified trees are an error condition
  2941. rendering the stream undecodable. Take special care that a codebook with a single used
  2942. entry is handled properly; it consists of a single codework of zero bits and &#8217;reading&#8217;
  2943. a value out of such a codebook always returns the single used value and sinks zero
  2944. bits.
  2945. <!--l. 274--><p class="noindent" >Codebook entries marked &#8217;unused&#8217; are simply skipped in the assigning process. They have no
  2946. codeword and do not appear in the decision tree, thus it&#8217;s impossible for any bit pattern read
  2947. from the stream to decode to that entry number.
  2948. <!--l. 281--><p class="noindent" ><span class="paragraphHead"><a
  2949. id="x1-540003.2.1"></a><span
  2950. class="cmbx-12">VQ lookup table vector representation</span></span>
  2951. Unpacking the VQ lookup table vectors relies on the following values:
  2952. <div class="fancyvrb" id="fancyvrb17">
  2953. <a
  2954. id="x1-54002r1"></a><span
  2955. class="cmr-6">1</span><span
  2956. class="cmtt-8">&#x00A0;</span><span
  2957. class="cmtt-8">&#x00A0;the</span><span
  2958. class="cmtt-8">&#x00A0;[codebook\_multiplicands]</span><span
  2959. class="cmtt-8">&#x00A0;array</span>
  2960. <br class="fancyvrb" /><a
  2961. id="x1-54004r2"></a><span
  2962. class="cmr-6">2</span><span
  2963. class="cmtt-8">&#x00A0;</span><span
  2964. class="cmtt-8">&#x00A0;[codebook\_minimum\_value]</span>
  2965. <br class="fancyvrb" /><a
  2966. id="x1-54006r3"></a><span
  2967. class="cmr-6">3</span><span
  2968. class="cmtt-8">&#x00A0;</span><span
  2969. class="cmtt-8">&#x00A0;[codebook\_delta\_value]</span>
  2970. <br class="fancyvrb" /><a
  2971. id="x1-54008r4"></a><span
  2972. class="cmr-6">4</span><span
  2973. class="cmtt-8">&#x00A0;</span><span
  2974. class="cmtt-8">&#x00A0;[codebook\_sequence\_p]</span>
  2975. <br class="fancyvrb" /><a
  2976. id="x1-54010r5"></a><span
  2977. class="cmr-6">5</span><span
  2978. class="cmtt-8">&#x00A0;</span><span
  2979. class="cmtt-8">&#x00A0;[codebook\_lookup\_type]</span>
  2980. <br class="fancyvrb" /><a
  2981. id="x1-54012r6"></a><span
  2982. class="cmr-6">6</span><span
  2983. class="cmtt-8">&#x00A0;</span><span
  2984. class="cmtt-8">&#x00A0;[codebook\_entries]</span>
  2985. <br class="fancyvrb" /><a
  2986. id="x1-54014r7"></a><span
  2987. class="cmr-6">7</span><span
  2988. class="cmtt-8">&#x00A0;</span><span
  2989. class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
  2990. <br class="fancyvrb" /><a
  2991. id="x1-54016r8"></a><span
  2992. class="cmr-6">8</span><span
  2993. class="cmtt-8">&#x00A0;</span><span
  2994. class="cmtt-8">&#x00A0;[codebook\_lookup\_values]</span>
  2995. </div>
  2996. <!--l. 297--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
  2997. <span
  2998. class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
  2999. during audio packet decode in a VQ context.
  3000. <!--l. 302--><p class="noindent" ><span class="paragraphHead"><a
  3001. id="x1-550003.2.1"></a><span
  3002. class="cmbx-12">Vector value decode: Lookup type 1</span></span>
  3003. Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
  3004. scalar values. Calculate (unpack) the final values of a codebook entry vector from
  3005. the entries in <span
  3006. class="cmtt-12">[codebook_multiplicands] </span>as follows (<span
  3007. class="cmtt-12">[value_vector] </span>is the output
  3008. vector representing the vector of values for entry number <span
  3009. class="cmtt-12">[lookup_offset] </span>in this
  3010. codebook):
  3011. <!--l. 311--><p class="noindent" >
  3012. <div class="fancyvrb" id="fancyvrb18">
  3013. <a
  3014. id="x1-55002r1"></a><span
  3015. class="cmr-6">1</span><span
  3016. class="cmtt-8">&#x00A0;</span><span
  3017. class="cmtt-8">&#x00A0;</span><span
  3018. class="cmtt-8">&#x00A0;</span><span
  3019. class="cmtt-8">&#x00A0;1)</span><span
  3020. class="cmtt-8">&#x00A0;[last]</span><span
  3021. class="cmtt-8">&#x00A0;=</span><span
  3022. class="cmtt-8">&#x00A0;0;</span>
  3023. <br class="fancyvrb" /><a
  3024. id="x1-55004r2"></a><span
  3025. class="cmr-6">2</span><span
  3026. class="cmtt-8">&#x00A0;</span><span
  3027. class="cmtt-8">&#x00A0;</span><span
  3028. class="cmtt-8">&#x00A0;</span><span
  3029. class="cmtt-8">&#x00A0;2)</span><span
  3030. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  3031. class="cmtt-8">&#x00A0;=</span><span
  3032. class="cmtt-8">&#x00A0;1;</span>
  3033. <br class="fancyvrb" /><a
  3034. id="x1-55006r3"></a><span
  3035. class="cmr-6">3</span><span
  3036. class="cmtt-8">&#x00A0;</span><span
  3037. class="cmtt-8">&#x00A0;</span><span
  3038. class="cmtt-8">&#x00A0;</span><span
  3039. class="cmtt-8">&#x00A0;3)</span><span
  3040. class="cmtt-8">&#x00A0;iterate</span><span
  3041. class="cmtt-8">&#x00A0;[i]</span><span
  3042. class="cmtt-8">&#x00A0;over</span><span
  3043. class="cmtt-8">&#x00A0;the</span><span
  3044. class="cmtt-8">&#x00A0;range</span><span
  3045. class="cmtt-8">&#x00A0;0</span><span
  3046. class="cmtt-8">&#x00A0;...</span><span
  3047. class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
  3048. class="cmtt-8">&#x00A0;(once</span><span
  3049. class="cmtt-8">&#x00A0;for</span><span
  3050. class="cmtt-8">&#x00A0;each</span><span
  3051. class="cmtt-8">&#x00A0;scalar</span><span
  3052. class="cmtt-8">&#x00A0;value</span><span
  3053. class="cmtt-8">&#x00A0;in</span><span
  3054. class="cmtt-8">&#x00A0;the</span><span
  3055. class="cmtt-8">&#x00A0;value</span><span
  3056. class="cmtt-8">&#x00A0;vector)</span><span
  3057. class="cmtt-8">&#x00A0;</span><span
  3058. class="cmsy-8">{</span>
  3059. <br class="fancyvrb" /><a
  3060. id="x1-55008r4"></a><span
  3061. class="cmr-6">4</span><span
  3062. class="cmtt-8">&#x00A0;</span><span
  3063. class="cmtt-8">&#x00A0;</span>
  3064. <br class="fancyvrb" /><a
  3065. id="x1-55010r5"></a><span
  3066. class="cmr-6">5</span><span
  3067. class="cmtt-8">&#x00A0;</span><span
  3068. class="cmtt-8">&#x00A0;</span><span
  3069. class="cmtt-8">&#x00A0;</span><span
  3070. class="cmtt-8">&#x00A0;</span><span
  3071. class="cmtt-8">&#x00A0;</span><span
  3072. class="cmtt-8">&#x00A0;</span><span
  3073. class="cmtt-8">&#x00A0;</span><span
  3074. class="cmtt-8">&#x00A0;</span><span
  3075. class="cmtt-8">&#x00A0;4)</span><span
  3076. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  3077. class="cmtt-8">&#x00A0;=</span><span
  3078. class="cmtt-8">&#x00A0;(</span><span
  3079. class="cmtt-8">&#x00A0;[lookup_offset]</span><span
  3080. class="cmtt-8">&#x00A0;divided</span><span
  3081. class="cmtt-8">&#x00A0;by</span><span
  3082. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  3083. class="cmtt-8">&#x00A0;using</span><span
  3084. class="cmtt-8">&#x00A0;integer</span>
  3085. <br class="fancyvrb" /><a
  3086. id="x1-55012r6"></a><span
  3087. class="cmr-6">6</span><span
  3088. class="cmtt-8">&#x00A0;</span><span
  3089. class="cmtt-8">&#x00A0;</span><span
  3090. class="cmtt-8">&#x00A0;</span><span
  3091. class="cmtt-8">&#x00A0;</span><span
  3092. class="cmtt-8">&#x00A0;</span><span
  3093. class="cmtt-8">&#x00A0;</span><span
  3094. class="cmtt-8">&#x00A0;</span><span
  3095. class="cmtt-8">&#x00A0;</span><span
  3096. class="cmtt-8">&#x00A0;</span><span
  3097. class="cmtt-8">&#x00A0;</span><span
  3098. class="cmtt-8">&#x00A0;</span><span
  3099. class="cmtt-8">&#x00A0;division</span><span
  3100. class="cmtt-8">&#x00A0;)</span><span
  3101. class="cmtt-8">&#x00A0;integer</span><span
  3102. class="cmtt-8">&#x00A0;modulo</span><span
  3103. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
  3104. <br class="fancyvrb" /><a
  3105. id="x1-55014r7"></a><span
  3106. class="cmr-6">7</span><span
  3107. class="cmtt-8">&#x00A0;</span><span
  3108. class="cmtt-8">&#x00A0;</span>
  3109. <br class="fancyvrb" /><a
  3110. id="x1-55016r8"></a><span
  3111. class="cmr-6">8</span><span
  3112. class="cmtt-8">&#x00A0;</span><span
  3113. class="cmtt-8">&#x00A0;</span><span
  3114. class="cmtt-8">&#x00A0;</span><span
  3115. class="cmtt-8">&#x00A0;</span><span
  3116. class="cmtt-8">&#x00A0;</span><span
  3117. class="cmtt-8">&#x00A0;</span><span
  3118. class="cmtt-8">&#x00A0;</span><span
  3119. class="cmtt-8">&#x00A0;</span><span
  3120. class="cmtt-8">&#x00A0;5)</span><span
  3121. class="cmtt-8">&#x00A0;vector</span><span
  3122. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3123. class="cmtt-8">&#x00A0;element</span><span
  3124. class="cmtt-8">&#x00A0;[i]</span><span
  3125. class="cmtt-8">&#x00A0;=</span>
  3126. <br class="fancyvrb" /><a
  3127. id="x1-55018r9"></a><span
  3128. class="cmr-6">9</span><span
  3129. class="cmtt-8">&#x00A0;</span><span
  3130. class="cmtt-8">&#x00A0;</span><span
  3131. class="cmtt-8">&#x00A0;</span><span
  3132. class="cmtt-8">&#x00A0;</span><span
  3133. class="cmtt-8">&#x00A0;</span><span
  3134. class="cmtt-8">&#x00A0;</span><span
  3135. class="cmtt-8">&#x00A0;</span><span
  3136. class="cmtt-8">&#x00A0;</span><span
  3137. class="cmtt-8">&#x00A0;</span><span
  3138. class="cmtt-8">&#x00A0;</span><span
  3139. class="cmtt-8">&#x00A0;</span><span
  3140. class="cmtt-8">&#x00A0;</span><span
  3141. class="cmtt-8">&#x00A0;</span><span
  3142. class="cmtt-8">&#x00A0;(</span><span
  3143. class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
  3144. class="cmtt-8">&#x00A0;array</span><span
  3145. class="cmtt-8">&#x00A0;element</span><span
  3146. class="cmtt-8">&#x00A0;number</span><span
  3147. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  3148. class="cmtt-8">&#x00A0;)</span><span
  3149. class="cmtt-8">&#x00A0;*</span>
  3150. <br class="fancyvrb" /><a
  3151. id="x1-55020r10"></a><span
  3152. class="cmr-6">10</span><span
  3153. class="cmtt-8">&#x00A0;</span><span
  3154. class="cmtt-8">&#x00A0;</span><span
  3155. class="cmtt-8">&#x00A0;</span><span
  3156. class="cmtt-8">&#x00A0;</span><span
  3157. class="cmtt-8">&#x00A0;</span><span
  3158. class="cmtt-8">&#x00A0;</span><span
  3159. class="cmtt-8">&#x00A0;</span><span
  3160. class="cmtt-8">&#x00A0;</span><span
  3161. class="cmtt-8">&#x00A0;</span><span
  3162. class="cmtt-8">&#x00A0;</span><span
  3163. class="cmtt-8">&#x00A0;</span><span
  3164. class="cmtt-8">&#x00A0;</span><span
  3165. class="cmtt-8">&#x00A0;</span><span
  3166. class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
  3167. class="cmtt-8">&#x00A0;+</span><span
  3168. class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
  3169. class="cmtt-8">&#x00A0;+</span><span
  3170. class="cmtt-8">&#x00A0;[last];</span>
  3171. <br class="fancyvrb" /><a
  3172. id="x1-55022r11"></a><span
  3173. class="cmr-6">11</span><span
  3174. class="cmtt-8">&#x00A0;</span><span
  3175. class="cmtt-8">&#x00A0;</span>
  3176. <br class="fancyvrb" /><a
  3177. id="x1-55024r12"></a><span
  3178. class="cmr-6">12</span><span
  3179. class="cmtt-8">&#x00A0;</span><span
  3180. class="cmtt-8">&#x00A0;</span><span
  3181. class="cmtt-8">&#x00A0;</span><span
  3182. class="cmtt-8">&#x00A0;</span><span
  3183. class="cmtt-8">&#x00A0;</span><span
  3184. class="cmtt-8">&#x00A0;</span><span
  3185. class="cmtt-8">&#x00A0;</span><span
  3186. class="cmtt-8">&#x00A0;</span><span
  3187. class="cmtt-8">&#x00A0;6)</span><span
  3188. class="cmtt-8">&#x00A0;if</span><span
  3189. class="cmtt-8">&#x00A0;(</span><span
  3190. class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
  3191. class="cmtt-8">&#x00A0;is</span><span
  3192. class="cmtt-8">&#x00A0;set</span><span
  3193. class="cmtt-8">&#x00A0;)</span><span
  3194. class="cmtt-8">&#x00A0;then</span><span
  3195. class="cmtt-8">&#x00A0;set</span><span
  3196. class="cmtt-8">&#x00A0;[last]</span><span
  3197. class="cmtt-8">&#x00A0;=</span><span
  3198. class="cmtt-8">&#x00A0;vector</span><span
  3199. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3200. class="cmtt-8">&#x00A0;element</span><span
  3201. class="cmtt-8">&#x00A0;[i]</span>
  3202. <br class="fancyvrb" /><a
  3203. id="x1-55026r13"></a><span
  3204. class="cmr-6">13</span><span
  3205. class="cmtt-8">&#x00A0;</span><span
  3206. class="cmtt-8">&#x00A0;</span>
  3207. <br class="fancyvrb" /><a
  3208. id="x1-55028r14"></a><span
  3209. class="cmr-6">14</span><span
  3210. class="cmtt-8">&#x00A0;</span><span
  3211. class="cmtt-8">&#x00A0;</span><span
  3212. class="cmtt-8">&#x00A0;</span><span
  3213. class="cmtt-8">&#x00A0;</span><span
  3214. class="cmtt-8">&#x00A0;</span><span
  3215. class="cmtt-8">&#x00A0;</span><span
  3216. class="cmtt-8">&#x00A0;</span><span
  3217. class="cmtt-8">&#x00A0;</span><span
  3218. class="cmtt-8">&#x00A0;7)</span><span
  3219. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  3220. class="cmtt-8">&#x00A0;=</span><span
  3221. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  3222. class="cmtt-8">&#x00A0;*</span><span
  3223. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span>
  3224. <br class="fancyvrb" /><a
  3225. id="x1-55030r15"></a><span
  3226. class="cmr-6">15</span><span
  3227. class="cmtt-8">&#x00A0;</span><span
  3228. class="cmtt-8">&#x00A0;</span>
  3229. <br class="fancyvrb" /><a
  3230. id="x1-55032r16"></a><span
  3231. class="cmr-6">16</span><span
  3232. class="cmtt-8">&#x00A0;</span><span
  3233. class="cmtt-8">&#x00A0;</span><span
  3234. class="cmtt-8">&#x00A0;</span><span
  3235. class="cmtt-8">&#x00A0;</span><span
  3236. class="cmtt-8">&#x00A0;</span><span
  3237. class="cmtt-8">&#x00A0;</span><span
  3238. class="cmtt-8">&#x00A0;</span><span
  3239. class="cmsy-8">}</span>
  3240. <br class="fancyvrb" /><a
  3241. id="x1-55034r17"></a><span
  3242. class="cmr-6">17</span><span
  3243. class="cmtt-8">&#x00A0;</span><span
  3244. class="cmtt-8">&#x00A0;</span>
  3245. <br class="fancyvrb" /><a
  3246. id="x1-55036r18"></a><span
  3247. class="cmr-6">18</span><span
  3248. class="cmtt-8">&#x00A0;</span><span
  3249. class="cmtt-8">&#x00A0;</span><span
  3250. class="cmtt-8">&#x00A0;</span><span
  3251. class="cmtt-8">&#x00A0;8)</span><span
  3252. class="cmtt-8">&#x00A0;vector</span><span
  3253. class="cmtt-8">&#x00A0;calculation</span><span
  3254. class="cmtt-8">&#x00A0;completed.</span>
  3255. </div>
  3256. <!--l. 334--><p class="noindent" ><span class="paragraphHead"><a
  3257. id="x1-560003.2.1"></a><span
  3258. class="cmbx-12">Vector value decode: Lookup type 2</span></span>
  3259. Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
  3260. by the <span
  3261. class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
  3262. values of a codebook entry vector from the entries in <span
  3263. class="cmtt-12">[codebook_multiplicands] </span>as follows
  3264. (<span
  3265. class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
  3266. <span
  3267. class="cmtt-12">[lookup_offset] </span>in this codebook):
  3268. <!--l. 344--><p class="noindent" >
  3269. <div class="fancyvrb" id="fancyvrb19">
  3270. <a
  3271. id="x1-56002r1"></a><span
  3272. class="cmr-6">1</span><span
  3273. class="cmtt-8">&#x00A0;</span><span
  3274. class="cmtt-8">&#x00A0;</span><span
  3275. class="cmtt-8">&#x00A0;</span><span
  3276. class="cmtt-8">&#x00A0;1)</span><span
  3277. class="cmtt-8">&#x00A0;[last]</span><span
  3278. class="cmtt-8">&#x00A0;=</span><span
  3279. class="cmtt-8">&#x00A0;0;</span>
  3280. <br class="fancyvrb" /><a
  3281. id="x1-56004r2"></a><span
  3282. class="cmr-6">2</span><span
  3283. class="cmtt-8">&#x00A0;</span><span
  3284. class="cmtt-8">&#x00A0;</span><span
  3285. class="cmtt-8">&#x00A0;</span><span
  3286. class="cmtt-8">&#x00A0;2)</span><span
  3287. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  3288. class="cmtt-8">&#x00A0;=</span><span
  3289. class="cmtt-8">&#x00A0;[lookup_offset]</span><span
  3290. class="cmtt-8">&#x00A0;*</span><span
  3291. class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
  3292. <br class="fancyvrb" /><a
  3293. id="x1-56006r3"></a><span
  3294. class="cmr-6">3</span><span
  3295. class="cmtt-8">&#x00A0;</span><span
  3296. class="cmtt-8">&#x00A0;</span><span
  3297. class="cmtt-8">&#x00A0;</span><span
  3298. class="cmtt-8">&#x00A0;3)</span><span
  3299. class="cmtt-8">&#x00A0;iterate</span><span
  3300. class="cmtt-8">&#x00A0;[i]</span><span
  3301. class="cmtt-8">&#x00A0;over</span><span
  3302. class="cmtt-8">&#x00A0;the</span><span
  3303. class="cmtt-8">&#x00A0;range</span><span
  3304. class="cmtt-8">&#x00A0;0</span><span
  3305. class="cmtt-8">&#x00A0;...</span><span
  3306. class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
  3307. class="cmtt-8">&#x00A0;(once</span><span
  3308. class="cmtt-8">&#x00A0;for</span><span
  3309. class="cmtt-8">&#x00A0;each</span><span
  3310. class="cmtt-8">&#x00A0;scalar</span><span
  3311. class="cmtt-8">&#x00A0;value</span><span
  3312. class="cmtt-8">&#x00A0;in</span><span
  3313. class="cmtt-8">&#x00A0;the</span><span
  3314. class="cmtt-8">&#x00A0;value</span><span
  3315. class="cmtt-8">&#x00A0;vector)</span><span
  3316. class="cmtt-8">&#x00A0;</span><span
  3317. class="cmsy-8">{</span>
  3318. <br class="fancyvrb" /><a
  3319. id="x1-56008r4"></a><span
  3320. class="cmr-6">4</span><span
  3321. class="cmtt-8">&#x00A0;</span><span
  3322. class="cmtt-8">&#x00A0;</span>
  3323. <br class="fancyvrb" /><a
  3324. id="x1-56010r5"></a><span
  3325. class="cmr-6">5</span><span
  3326. class="cmtt-8">&#x00A0;</span><span
  3327. class="cmtt-8">&#x00A0;</span><span
  3328. class="cmtt-8">&#x00A0;</span><span
  3329. class="cmtt-8">&#x00A0;</span><span
  3330. class="cmtt-8">&#x00A0;</span><span
  3331. class="cmtt-8">&#x00A0;</span><span
  3332. class="cmtt-8">&#x00A0;</span><span
  3333. class="cmtt-8">&#x00A0;</span><span
  3334. class="cmtt-8">&#x00A0;4)</span><span
  3335. class="cmtt-8">&#x00A0;vector</span><span
  3336. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3337. class="cmtt-8">&#x00A0;element</span><span
  3338. class="cmtt-8">&#x00A0;[i]</span><span
  3339. class="cmtt-8">&#x00A0;=</span>
  3340. <br class="fancyvrb" /><a
  3341. id="x1-56012r6"></a><span
  3342. class="cmr-6">6</span><span
  3343. class="cmtt-8">&#x00A0;</span><span
  3344. class="cmtt-8">&#x00A0;</span><span
  3345. class="cmtt-8">&#x00A0;</span><span
  3346. class="cmtt-8">&#x00A0;</span><span
  3347. class="cmtt-8">&#x00A0;</span><span
  3348. class="cmtt-8">&#x00A0;</span><span
  3349. class="cmtt-8">&#x00A0;</span><span
  3350. class="cmtt-8">&#x00A0;</span><span
  3351. class="cmtt-8">&#x00A0;</span><span
  3352. class="cmtt-8">&#x00A0;</span><span
  3353. class="cmtt-8">&#x00A0;</span><span
  3354. class="cmtt-8">&#x00A0;</span><span
  3355. class="cmtt-8">&#x00A0;</span><span
  3356. class="cmtt-8">&#x00A0;(</span><span
  3357. class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
  3358. class="cmtt-8">&#x00A0;array</span><span
  3359. class="cmtt-8">&#x00A0;element</span><span
  3360. class="cmtt-8">&#x00A0;number</span><span
  3361. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  3362. class="cmtt-8">&#x00A0;)</span><span
  3363. class="cmtt-8">&#x00A0;*</span>
  3364. <br class="fancyvrb" /><a
  3365. id="x1-56014r7"></a><span
  3366. class="cmr-6">7</span><span
  3367. class="cmtt-8">&#x00A0;</span><span
  3368. class="cmtt-8">&#x00A0;</span><span
  3369. class="cmtt-8">&#x00A0;</span><span
  3370. class="cmtt-8">&#x00A0;</span><span
  3371. class="cmtt-8">&#x00A0;</span><span
  3372. class="cmtt-8">&#x00A0;</span><span
  3373. class="cmtt-8">&#x00A0;</span><span
  3374. class="cmtt-8">&#x00A0;</span><span
  3375. class="cmtt-8">&#x00A0;</span><span
  3376. class="cmtt-8">&#x00A0;</span><span
  3377. class="cmtt-8">&#x00A0;</span><span
  3378. class="cmtt-8">&#x00A0;</span><span
  3379. class="cmtt-8">&#x00A0;</span><span
  3380. class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
  3381. class="cmtt-8">&#x00A0;+</span><span
  3382. class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
  3383. class="cmtt-8">&#x00A0;+</span><span
  3384. class="cmtt-8">&#x00A0;[last];</span>
  3385. <br class="fancyvrb" /><a
  3386. id="x1-56016r8"></a><span
  3387. class="cmr-6">8</span><span
  3388. class="cmtt-8">&#x00A0;</span><span
  3389. class="cmtt-8">&#x00A0;</span>
  3390. <br class="fancyvrb" /><a
  3391. id="x1-56018r9"></a><span
  3392. class="cmr-6">9</span><span
  3393. class="cmtt-8">&#x00A0;</span><span
  3394. class="cmtt-8">&#x00A0;</span><span
  3395. class="cmtt-8">&#x00A0;</span><span
  3396. class="cmtt-8">&#x00A0;</span><span
  3397. class="cmtt-8">&#x00A0;</span><span
  3398. class="cmtt-8">&#x00A0;</span><span
  3399. class="cmtt-8">&#x00A0;</span><span
  3400. class="cmtt-8">&#x00A0;</span><span
  3401. class="cmtt-8">&#x00A0;5)</span><span
  3402. class="cmtt-8">&#x00A0;if</span><span
  3403. class="cmtt-8">&#x00A0;(</span><span
  3404. class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
  3405. class="cmtt-8">&#x00A0;is</span><span
  3406. class="cmtt-8">&#x00A0;set</span><span
  3407. class="cmtt-8">&#x00A0;)</span><span
  3408. class="cmtt-8">&#x00A0;then</span><span
  3409. class="cmtt-8">&#x00A0;set</span><span
  3410. class="cmtt-8">&#x00A0;[last]</span><span
  3411. class="cmtt-8">&#x00A0;=</span><span
  3412. class="cmtt-8">&#x00A0;vector</span><span
  3413. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3414. class="cmtt-8">&#x00A0;element</span><span
  3415. class="cmtt-8">&#x00A0;[i]</span>
  3416. <br class="fancyvrb" /><a
  3417. id="x1-56020r10"></a><span
  3418. class="cmr-6">10</span><span
  3419. class="cmtt-8">&#x00A0;</span><span
  3420. class="cmtt-8">&#x00A0;</span>
  3421. <br class="fancyvrb" /><a
  3422. id="x1-56022r11"></a><span
  3423. class="cmr-6">11</span><span
  3424. class="cmtt-8">&#x00A0;</span><span
  3425. class="cmtt-8">&#x00A0;</span><span
  3426. class="cmtt-8">&#x00A0;</span><span
  3427. class="cmtt-8">&#x00A0;</span><span
  3428. class="cmtt-8">&#x00A0;</span><span
  3429. class="cmtt-8">&#x00A0;</span><span
  3430. class="cmtt-8">&#x00A0;</span><span
  3431. class="cmtt-8">&#x00A0;</span><span
  3432. class="cmtt-8">&#x00A0;6)</span><span
  3433. class="cmtt-8">&#x00A0;increment</span><span
  3434. class="cmtt-8">&#x00A0;[multiplicand_offset]</span>
  3435. <br class="fancyvrb" /><a
  3436. id="x1-56024r12"></a><span
  3437. class="cmr-6">12</span><span
  3438. class="cmtt-8">&#x00A0;</span><span
  3439. class="cmtt-8">&#x00A0;</span>
  3440. <br class="fancyvrb" /><a
  3441. id="x1-56026r13"></a><span
  3442. class="cmr-6">13</span><span
  3443. class="cmtt-8">&#x00A0;</span><span
  3444. class="cmtt-8">&#x00A0;</span><span
  3445. class="cmtt-8">&#x00A0;</span><span
  3446. class="cmtt-8">&#x00A0;</span><span
  3447. class="cmtt-8">&#x00A0;</span><span
  3448. class="cmtt-8">&#x00A0;</span><span
  3449. class="cmtt-8">&#x00A0;</span><span
  3450. class="cmsy-8">}</span>
  3451. <br class="fancyvrb" /><a
  3452. id="x1-56028r14"></a><span
  3453. class="cmr-6">14</span><span
  3454. class="cmtt-8">&#x00A0;</span><span
  3455. class="cmtt-8">&#x00A0;</span>
  3456. <br class="fancyvrb" /><a
  3457. id="x1-56030r15"></a><span
  3458. class="cmr-6">15</span><span
  3459. class="cmtt-8">&#x00A0;</span><span
  3460. class="cmtt-8">&#x00A0;</span><span
  3461. class="cmtt-8">&#x00A0;</span><span
  3462. class="cmtt-8">&#x00A0;7)</span><span
  3463. class="cmtt-8">&#x00A0;vector</span><span
  3464. class="cmtt-8">&#x00A0;calculation</span><span
  3465. class="cmtt-8">&#x00A0;completed.</span>
  3466. </div>
  3467. <!--l. 370--><p class="noindent" >
  3468. <h4 class="subsectionHead"><span class="titlemark">3.3. </span> <a
  3469. id="x1-570003.3"></a>Use of the codebook abstraction</h4>
  3470. <!--l. 372--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
  3471. specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
  3472. then returns that entry number to the decoder (when used in a scalar entropy coding context), or
  3473. uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
  3474. used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
  3475. call to the codebook mechanism requests either a scalar entry number or a lookup
  3476. vector.
  3477. <!--l. 382--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
  3478. decode using a codebook of lookup type 0 in any context expecting a vector return
  3479. value (even in a case where a vector of dimension one) is forbidden. If decoder setup
  3480. or decode requests such an action, that is an error condition rendering the packet
  3481. undecodable.
  3482. <!--l. 389--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
  3483. next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
  3484. codeword in the codebook. This process can be though of as logically walking the
  3485. Huffman decode tree by reading one bit at a time from the bitstream, and using the
  3486. bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
  3487. branch (right in the above examples). Walking the tree finishes when the decode process
  3488. hits a leaf in the decision tree; the result is the entry number corresponding to that
  3489. leaf. Reading past the end of a packet propagates the &#8217;end-of-stream&#8217; condition to the
  3490. decoder.
  3491. <!--l. 401--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
  3492. value.
  3493. <!--l. 404--><p class="noindent" >When used in a VQ context, the codeword entry number is used as an offset into the VQ lookup
  3494. table. The value returned to the decoder is the vector of scalars corresponding to this
  3495. offset.
  3496. <h3 class="sectionHead"><span class="titlemark">4. </span> <a
  3497. id="x1-580004"></a>Codec Setup and Packet Decode</h3>
  3498. <!--l. 7--><p class="noindent" >
  3499. <h4 class="subsectionHead"><span class="titlemark">4.1. </span> <a
  3500. id="x1-590004.1"></a>Overview</h4>
  3501. <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
  3502. of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
  3503. process, which is provided in <a
  3504. href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a
  3505. href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221;. <a
  3506. href="#x1-360002">Section&#x00A0;2</a>,
  3507. &#8220;<a
  3508. href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; covers reading and writing bit fields from and to bitstream
  3509. packets.
  3510. <!--l. 17--><p class="noindent" >
  3511. <h4 class="subsectionHead"><span class="titlemark">4.2. </span> <a
  3512. id="x1-600004.2"></a>Header decode and decode setup</h4>
  3513. <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
  3514. identification header, the comments header, and the setup header. All are required for decode
  3515. compliance. An end-of-packet condition during decoding the first or third header packet renders
  3516. the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
  3517. condition.
  3518. <!--l. 26--><p class="noindent" >
  3519. <h5 class="subsubsectionHead"><span class="titlemark">4.2.1. </span> <a
  3520. id="x1-610004.2.1"></a>Common header decode</h5>
  3521. <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields.
  3522. <!--l. 31--><p class="noindent" >
  3523. <div class="fancyvrb" id="fancyvrb20">
  3524. <a
  3525. id="x1-61002r1"></a><span
  3526. class="cmr-6">1</span><span
  3527. class="cmtt-8">&#x00A0;</span><span
  3528. class="cmtt-8">&#x00A0;</span><span
  3529. class="cmtt-8">&#x00A0;</span><span
  3530. class="cmtt-8">&#x00A0;1)</span><span
  3531. class="cmtt-8">&#x00A0;[packet_type]</span><span
  3532. class="cmtt-8">&#x00A0;:</span><span
  3533. class="cmtt-8">&#x00A0;8</span><span
  3534. class="cmtt-8">&#x00A0;bit</span><span
  3535. class="cmtt-8">&#x00A0;value</span>
  3536. <br class="fancyvrb" /><a
  3537. id="x1-61004r2"></a><span
  3538. class="cmr-6">2</span><span
  3539. class="cmtt-8">&#x00A0;</span><span
  3540. class="cmtt-8">&#x00A0;</span><span
  3541. class="cmtt-8">&#x00A0;</span><span
  3542. class="cmtt-8">&#x00A0;2)</span><span
  3543. class="cmtt-8">&#x00A0;0x76,</span><span
  3544. class="cmtt-8">&#x00A0;0x6f,</span><span
  3545. class="cmtt-8">&#x00A0;0x72,</span><span
  3546. class="cmtt-8">&#x00A0;0x62,</span><span
  3547. class="cmtt-8">&#x00A0;0x69,</span><span
  3548. class="cmtt-8">&#x00A0;0x73:</span><span
  3549. class="cmtt-8">&#x00A0;the</span><span
  3550. class="cmtt-8">&#x00A0;characters</span><span
  3551. class="cmtt-8">&#x00A0;&#8217;v&#8217;,&#8217;o&#8217;,&#8217;r&#8217;,&#8217;b&#8217;,&#8217;i&#8217;,&#8217;s&#8217;</span><span
  3552. class="cmtt-8">&#x00A0;as</span><span
  3553. class="cmtt-8">&#x00A0;six</span><span
  3554. class="cmtt-8">&#x00A0;octets</span>
  3555. </div>
  3556. <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
  3557. header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
  3558. single bit of &#8217;0&#8217; is an audio packet). The packets must occur in the order of identification,
  3559. comment, setup.
  3560. <!--l. 44--><p class="noindent" >
  3561. <h5 class="subsubsectionHead"><span class="titlemark">4.2.2. </span> <a
  3562. id="x1-620004.2.2"></a>Identification header</h5>
  3563. <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
  3564. definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
  3565. stream. The identification header is coded as follows:
  3566. <!--l. 51--><p class="noindent" >
  3567. <div class="fancyvrb" id="fancyvrb21">
  3568. <a
  3569. id="x1-62002r1"></a><span
  3570. class="cmr-6">1</span><span
  3571. class="cmtt-8">&#x00A0;</span><span
  3572. class="cmtt-8">&#x00A0;</span><span
  3573. class="cmtt-8">&#x00A0;1)</span><span
  3574. class="cmtt-8">&#x00A0;[vorbis_version]</span><span
  3575. class="cmtt-8">&#x00A0;=</span><span
  3576. class="cmtt-8">&#x00A0;read</span><span
  3577. class="cmtt-8">&#x00A0;32</span><span
  3578. class="cmtt-8">&#x00A0;bits</span><span
  3579. class="cmtt-8">&#x00A0;as</span><span
  3580. class="cmtt-8">&#x00A0;unsigned</span><span
  3581. class="cmtt-8">&#x00A0;integer</span>
  3582. <br class="fancyvrb" /><a
  3583. id="x1-62004r2"></a><span
  3584. class="cmr-6">2</span><span
  3585. class="cmtt-8">&#x00A0;</span><span
  3586. class="cmtt-8">&#x00A0;</span><span
  3587. class="cmtt-8">&#x00A0;2)</span><span
  3588. class="cmtt-8">&#x00A0;[audio_channels]</span><span
  3589. class="cmtt-8">&#x00A0;=</span><span
  3590. class="cmtt-8">&#x00A0;read</span><span
  3591. class="cmtt-8">&#x00A0;8</span><span
  3592. class="cmtt-8">&#x00A0;bit</span><span
  3593. class="cmtt-8">&#x00A0;integer</span><span
  3594. class="cmtt-8">&#x00A0;as</span><span
  3595. class="cmtt-8">&#x00A0;unsigned</span>
  3596. <br class="fancyvrb" /><a
  3597. id="x1-62006r3"></a><span
  3598. class="cmr-6">3</span><span
  3599. class="cmtt-8">&#x00A0;</span><span
  3600. class="cmtt-8">&#x00A0;</span><span
  3601. class="cmtt-8">&#x00A0;3)</span><span
  3602. class="cmtt-8">&#x00A0;[audio_sample_rate]</span><span
  3603. class="cmtt-8">&#x00A0;=</span><span
  3604. class="cmtt-8">&#x00A0;read</span><span
  3605. class="cmtt-8">&#x00A0;32</span><span
  3606. class="cmtt-8">&#x00A0;bits</span><span
  3607. class="cmtt-8">&#x00A0;as</span><span
  3608. class="cmtt-8">&#x00A0;unsigned</span><span
  3609. class="cmtt-8">&#x00A0;integer</span>
  3610. <br class="fancyvrb" /><a
  3611. id="x1-62008r4"></a><span
  3612. class="cmr-6">4</span><span
  3613. class="cmtt-8">&#x00A0;</span><span
  3614. class="cmtt-8">&#x00A0;</span><span
  3615. class="cmtt-8">&#x00A0;4)</span><span
  3616. class="cmtt-8">&#x00A0;[bitrate_maximum]</span><span
  3617. class="cmtt-8">&#x00A0;=</span><span
  3618. class="cmtt-8">&#x00A0;read</span><span
  3619. class="cmtt-8">&#x00A0;32</span><span
  3620. class="cmtt-8">&#x00A0;bits</span><span
  3621. class="cmtt-8">&#x00A0;as</span><span
  3622. class="cmtt-8">&#x00A0;signed</span><span
  3623. class="cmtt-8">&#x00A0;integer</span>
  3624. <br class="fancyvrb" /><a
  3625. id="x1-62010r5"></a><span
  3626. class="cmr-6">5</span><span
  3627. class="cmtt-8">&#x00A0;</span><span
  3628. class="cmtt-8">&#x00A0;</span><span
  3629. class="cmtt-8">&#x00A0;5)</span><span
  3630. class="cmtt-8">&#x00A0;[bitrate_nominal]</span><span
  3631. class="cmtt-8">&#x00A0;=</span><span
  3632. class="cmtt-8">&#x00A0;read</span><span
  3633. class="cmtt-8">&#x00A0;32</span><span
  3634. class="cmtt-8">&#x00A0;bits</span><span
  3635. class="cmtt-8">&#x00A0;as</span><span
  3636. class="cmtt-8">&#x00A0;signed</span><span
  3637. class="cmtt-8">&#x00A0;integer</span>
  3638. <br class="fancyvrb" /><a
  3639. id="x1-62012r6"></a><span
  3640. class="cmr-6">6</span><span
  3641. class="cmtt-8">&#x00A0;</span><span
  3642. class="cmtt-8">&#x00A0;</span><span
  3643. class="cmtt-8">&#x00A0;6)</span><span
  3644. class="cmtt-8">&#x00A0;[bitrate_minimum]</span><span
  3645. class="cmtt-8">&#x00A0;=</span><span
  3646. class="cmtt-8">&#x00A0;read</span><span
  3647. class="cmtt-8">&#x00A0;32</span><span
  3648. class="cmtt-8">&#x00A0;bits</span><span
  3649. class="cmtt-8">&#x00A0;as</span><span
  3650. class="cmtt-8">&#x00A0;signed</span><span
  3651. class="cmtt-8">&#x00A0;integer</span>
  3652. <br class="fancyvrb" /><a
  3653. id="x1-62014r7"></a><span
  3654. class="cmr-6">7</span><span
  3655. class="cmtt-8">&#x00A0;</span><span
  3656. class="cmtt-8">&#x00A0;</span><span
  3657. class="cmtt-8">&#x00A0;7)</span><span
  3658. class="cmtt-8">&#x00A0;[blocksize_0]</span><span
  3659. class="cmtt-8">&#x00A0;=</span><span
  3660. class="cmtt-8">&#x00A0;2</span><span
  3661. class="cmtt-8">&#x00A0;exponent</span><span
  3662. class="cmtt-8">&#x00A0;(read</span><span
  3663. class="cmtt-8">&#x00A0;4</span><span
  3664. class="cmtt-8">&#x00A0;bits</span><span
  3665. class="cmtt-8">&#x00A0;as</span><span
  3666. class="cmtt-8">&#x00A0;unsigned</span><span
  3667. class="cmtt-8">&#x00A0;integer)</span>
  3668. <br class="fancyvrb" /><a
  3669. id="x1-62016r8"></a><span
  3670. class="cmr-6">8</span><span
  3671. class="cmtt-8">&#x00A0;</span><span
  3672. class="cmtt-8">&#x00A0;</span><span
  3673. class="cmtt-8">&#x00A0;8)</span><span
  3674. class="cmtt-8">&#x00A0;[blocksize_1]</span><span
  3675. class="cmtt-8">&#x00A0;=</span><span
  3676. class="cmtt-8">&#x00A0;2</span><span
  3677. class="cmtt-8">&#x00A0;exponent</span><span
  3678. class="cmtt-8">&#x00A0;(read</span><span
  3679. class="cmtt-8">&#x00A0;4</span><span
  3680. class="cmtt-8">&#x00A0;bits</span><span
  3681. class="cmtt-8">&#x00A0;as</span><span
  3682. class="cmtt-8">&#x00A0;unsigned</span><span
  3683. class="cmtt-8">&#x00A0;integer)</span>
  3684. <br class="fancyvrb" /><a
  3685. id="x1-62018r9"></a><span
  3686. class="cmr-6">9</span><span
  3687. class="cmtt-8">&#x00A0;</span><span
  3688. class="cmtt-8">&#x00A0;</span><span
  3689. class="cmtt-8">&#x00A0;9)</span><span
  3690. class="cmtt-8">&#x00A0;[framing_flag]</span><span
  3691. class="cmtt-8">&#x00A0;=</span><span
  3692. class="cmtt-8">&#x00A0;read</span><span
  3693. class="cmtt-8">&#x00A0;one</span><span
  3694. class="cmtt-8">&#x00A0;bit</span>
  3695. </div>
  3696. <!--l. 63--><p class="noindent" ><span
  3697. class="cmtt-12">[vorbis_version] </span>is to read &#8217;0&#8217; in order to be compatible with this document. Both
  3698. <span
  3699. class="cmtt-12">[audio_channels] </span>and <span
  3700. class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
  3701. blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span
  3702. class="cmtt-12">[blocksize_0]</span>
  3703. must be less than or equal to <span
  3704. class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
  3705. any of these conditions renders a stream undecodable.
  3706. <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
  3707. considerably off in purely VBR streams. The fields are meaningful only when greater than
  3708. zero.
  3709. <ul class="itemize1">
  3710. <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
  3711. fixed-rate bitstream
  3712. </li>
  3713. <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
  3714. </li>
  3715. <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
  3716. </li>
  3717. <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
  3718. <!--l. 85--><p class="noindent" >
  3719. <h5 class="subsubsectionHead"><span class="titlemark">4.2.3. </span> <a
  3720. id="x1-630004.2.3"></a>Comment header</h5>
  3721. <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a
  3722. href="#x1-810005">Section&#x00A0;5</a>, &#8220;<a
  3723. href="#x1-810005">comment field and
  3724. header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
  3725. <!--l. 90--><p class="noindent" >
  3726. <h5 class="subsubsectionHead"><span class="titlemark">4.2.4. </span> <a
  3727. id="x1-640004.2.4"></a>Setup header</h5>
  3728. <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
  3729. <div class="center"
  3730. >
  3731. <!--l. 94--><p class="noindent" >
  3732. <!--l. 95--><p class="noindent" ><img
  3733. src="components.png" alt="PIC"
  3734. >
  3735. <br /> <div class="caption"
  3736. ><span class="id">Figure&#x00A0;6: </span><span
  3737. class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-640016 -->
  3738. </div>
  3739. <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
  3740. header contains, in order, the lists of codebook configurations, time-domain transform
  3741. configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
  3742. mapping configurations and mode configurations. It finishes with a framing bit of &#8217;1&#8217;. Header
  3743. decode proceeds in the following order:
  3744. <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a
  3745. id="x1-650004.2.4"></a><span
  3746. class="cmbx-12">Codebooks</span></span>
  3747. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3748. 1. </dt><dd
  3749. class="enumerate-enumitem"><span
  3750. class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
  3751. </dd><dt class="enumerate-enumitem">
  3752. 2. </dt><dd
  3753. class="enumerate-enumitem">Decode <span
  3754. class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a
  3755. href="#x1-470003">Section&#x00A0;3</a>,
  3756. &#8220;<a
  3757. href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>&#8221;. Save each configuration, in order, in an array
  3758. of codebook configurations <span
  3759. class="cmtt-12">[vorbis_codebook_configurations]</span>.</dd></dl>
  3760. <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a
  3761. id="x1-660004.2.4"></a><span
  3762. class="cmbx-12">Time domain transforms</span></span>
  3763. These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
  3764. be read to maintain bitstream sync.
  3765. <!--l. 127--><p class="noindent" >
  3766. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3767. 1. </dt><dd
  3768. class="enumerate-enumitem"><span
  3769. class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
  3770. </dd><dt class="enumerate-enumitem">
  3771. 2. </dt><dd
  3772. class="enumerate-enumitem">read <span
  3773. class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
  3774. nonzero, this is an error condition and the stream is undecodable.</dd></dl>
  3775. <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a
  3776. id="x1-670004.2.4"></a><span
  3777. class="cmbx-12">Floors</span></span>
  3778. Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
  3779. type.
  3780. <!--l. 139--><p class="noindent" >
  3781. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3782. 1. </dt><dd
  3783. class="enumerate-enumitem"><span
  3784. class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
  3785. </dd><dt class="enumerate-enumitem">
  3786. 2. </dt><dd
  3787. class="enumerate-enumitem">For each <span
  3788. class="cmtt-12">[i] </span>of <span
  3789. class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
  3790. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3791. a) </dt><dd
  3792. class="enumerate-enumitem">read the floor type: vector <span
  3793. class="cmtt-12">[vorbis_floor_types] </span>element <span
  3794. class="cmtt-12">[i] </span>= read 16 bits
  3795. as unsigned integer
  3796. </dd><dt class="enumerate-enumitem">
  3797. b) </dt><dd
  3798. class="enumerate-enumitem">If the floor type is zero, decode the floor configuration as defined in <a
  3799. href="#x1-890006">Section&#x00A0;6</a>,
  3800. &#8220;<a
  3801. href="#x1-890006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>&#8221;; save this configuration in slot <span
  3802. class="cmtt-12">[i] </span>of the floor
  3803. configuration array <span
  3804. class="cmtt-12">[vorbis_floor_configurations]</span>.
  3805. </dd><dt class="enumerate-enumitem">
  3806. c) </dt><dd
  3807. class="enumerate-enumitem">If the floor type is one, decode the floor configuration as defined in <a
  3808. href="#x1-950007">Section&#x00A0;7</a>,
  3809. &#8220;<a
  3810. href="#x1-950007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>&#8221;; save this configuration in slot <span
  3811. class="cmtt-12">[i] </span>of the floor
  3812. configuration array <span
  3813. class="cmtt-12">[vorbis_floor_configurations]</span>.
  3814. </dd><dt class="enumerate-enumitem">
  3815. d) </dt><dd
  3816. class="enumerate-enumitem">If the the floor type is greater than one, this stream is undecodable; ERROR
  3817. CONDITION</dd></dl>
  3818. </dd></dl>
  3819. <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a
  3820. id="x1-680004.2.4"></a><span
  3821. class="cmbx-12">Residues</span></span>
  3822. Vorbis uses three residue types; header decode of each type is identical.
  3823. <!--l. 163--><p class="noindent" >
  3824. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3825. 1. </dt><dd
  3826. class="enumerate-enumitem"><span
  3827. class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
  3828. </dd><dt class="enumerate-enumitem">
  3829. 2. </dt><dd
  3830. class="enumerate-enumitem">For each of <span
  3831. class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
  3832. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3833. a) </dt><dd
  3834. class="enumerate-enumitem">read the residue type; vector <span
  3835. class="cmtt-12">[vorbis_residue_types] </span>element <span
  3836. class="cmtt-12">[i] </span>= read 16
  3837. bits as unsigned integer
  3838. </dd><dt class="enumerate-enumitem">
  3839. b) </dt><dd
  3840. class="enumerate-enumitem">If the residue type is zero, one or two, decode the residue configuration as defined
  3841. in <a
  3842. href="#x1-1020008">Section&#x00A0;8</a>, &#8220;<a
  3843. href="#x1-1020008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>&#8221;; save this configuration in slot <span
  3844. class="cmtt-12">[i] </span>of
  3845. the residue configuration array <span
  3846. class="cmtt-12">[vorbis_residue_configurations]</span>.
  3847. </dd><dt class="enumerate-enumitem">
  3848. c) </dt><dd
  3849. class="enumerate-enumitem">If the the residue type is greater than two, this stream is undecodable; ERROR
  3850. CONDITION</dd></dl>
  3851. </dd></dl>
  3852. <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a
  3853. id="x1-690004.2.4"></a><span
  3854. class="cmbx-12">Mappings</span></span>
  3855. Mappings are used to set up specific pipelines for encoding multichannel audio with varying
  3856. channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
  3857. channel mappings.
  3858. <!--l. 188--><p class="noindent" >
  3859. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3860. 1. </dt><dd
  3861. class="enumerate-enumitem"><span
  3862. class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
  3863. </dd><dt class="enumerate-enumitem">
  3864. 2. </dt><dd
  3865. class="enumerate-enumitem">For each <span
  3866. class="cmtt-12">[i] </span>of <span
  3867. class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
  3868. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3869. a) </dt><dd
  3870. class="enumerate-enumitem">read the mapping type: 16 bits as unsigned integer. There&#8217;s no reason to save
  3871. the mapping type in Vorbis I.
  3872. </dd><dt class="enumerate-enumitem">
  3873. b) </dt><dd
  3874. class="enumerate-enumitem">If the mapping type is nonzero, the stream is undecodable
  3875. </dd><dt class="enumerate-enumitem">
  3876. c) </dt><dd
  3877. class="enumerate-enumitem">If the mapping type is zero:
  3878. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3879. i. </dt><dd
  3880. class="enumerate-enumitem">read 1 bit as a boolean flag
  3881. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3882. A. </dt><dd
  3883. class="enumerate-enumitem">if set, <span
  3884. class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
  3885. and add one
  3886. </dd><dt class="enumerate-enumitem">
  3887. B. </dt><dd
  3888. class="enumerate-enumitem">if unset, <span
  3889. class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</dd></dl>
  3890. </dd><dt class="enumerate-enumitem">
  3891. ii. </dt><dd
  3892. class="enumerate-enumitem">read 1 bit as a boolean flag
  3893. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3894. A. </dt><dd
  3895. class="enumerate-enumitem">if set, square polar channel mapping is in use:
  3896. <ul class="itemize1">
  3897. <li class="itemize"><span
  3898. class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= read 8 bits as unsigned
  3899. integer and add one
  3900. </li>
  3901. <li class="itemize">for <span
  3902. class="cmtt-12">[j] </span>each of <span
  3903. class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
  3904. <ul class="itemize2">
  3905. <li class="itemize">vector <span
  3906. class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
  3907. class="cmtt-12">[j]</span>= read
  3908. <a
  3909. href="#x1-1170009.2.1">ilog</a>(<span
  3910. class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
  3911. </li>
  3912. <li class="itemize">vector <span
  3913. class="cmtt-12">[vorbis_mapping_angle] </span>element <span
  3914. class="cmtt-12">[j]</span>= read
  3915. <a
  3916. href="#x1-1170009.2.1">ilog</a>(<span
  3917. class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
  3918. </li>
  3919. <li class="itemize">the numbers read in the above two steps are channel numbers
  3920. representing the channel to treat as magnitude and the channel
  3921. to treat as angle, respectively. If for any coupling step the
  3922. angle channel number equals the magnitude channel number, the
  3923. magnitude channel number is greater than <span
  3924. class="cmtt-12">[audio_channels]</span>-1, or
  3925. the angle channel is greater than <span
  3926. class="cmtt-12">[audio_channels]</span>-1, the stream
  3927. is undecodable.</li></ul>
  3928. </li></ul>
  3929. </dd><dt class="enumerate-enumitem">
  3930. B. </dt><dd
  3931. class="enumerate-enumitem">if unset, <span
  3932. class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</dd></dl>
  3933. </dd><dt class="enumerate-enumitem">
  3934. iii. </dt><dd
  3935. class="enumerate-enumitem">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
  3936. </dd><dt class="enumerate-enumitem">
  3937. iv. </dt><dd
  3938. class="enumerate-enumitem">if <span
  3939. class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
  3940. settings. For each <span
  3941. class="cmtt-12">[j] </span>of <span
  3942. class="cmtt-12">[audio_channels] </span>channels:
  3943. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3944. A. </dt><dd
  3945. class="enumerate-enumitem">vector <span
  3946. class="cmtt-12">[vorbis_mapping_mux] </span>element <span
  3947. class="cmtt-12">[j] </span>= read 4 bits as unsigned
  3948. integer
  3949. </dd><dt class="enumerate-enumitem">
  3950. B. </dt><dd
  3951. class="enumerate-enumitem">if the value is greater than the highest numbered submap
  3952. (<span
  3953. class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
  3954. the stream undecodable</dd></dl>
  3955. </dd><dt class="enumerate-enumitem">
  3956. v. </dt><dd
  3957. class="enumerate-enumitem">for each submap <span
  3958. class="cmtt-12">[j] </span>of <span
  3959. class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
  3960. residue numbers for use in decoding that submap:
  3961. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3962. A. </dt><dd
  3963. class="enumerate-enumitem">read and discard 8 bits (the unused time configuration placeholder)
  3964. </dd><dt class="enumerate-enumitem">
  3965. B. </dt><dd
  3966. class="enumerate-enumitem">read 8 bits as unsigned integer for the floor number; save in vector
  3967. <span
  3968. class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span
  3969. class="cmtt-12">[j]</span>
  3970. </dd><dt class="enumerate-enumitem">
  3971. C. </dt><dd
  3972. class="enumerate-enumitem">verify the floor number is not greater than the highest number floor
  3973. configured for the bitstream. If it is, the bitstream is undecodable
  3974. </dd><dt class="enumerate-enumitem">
  3975. D. </dt><dd
  3976. class="enumerate-enumitem">read 8 bits as unsigned integer for the residue number; save in vector
  3977. <span
  3978. class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
  3979. class="cmtt-12">[j]</span>
  3980. </dd><dt class="enumerate-enumitem">
  3981. E. </dt><dd
  3982. class="enumerate-enumitem">verify the residue number is not greater than the highest number residue
  3983. configured for the bitstream. If it is, the bitstream is undecodable</dd></dl>
  3984. </dd><dt class="enumerate-enumitem">
  3985. vi. </dt><dd
  3986. class="enumerate-enumitem">save this mapping configuration in slot <span
  3987. class="cmtt-12">[i] </span>of the mapping configuration array
  3988. <span
  3989. class="cmtt-12">[vorbis_mapping_configurations]</span>.</dd></dl>
  3990. </dd></dl>
  3991. </dd></dl>
  3992. <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a
  3993. id="x1-700004.2.4"></a><span
  3994. class="cmbx-12">Modes</span></span>
  3995. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3996. 1. </dt><dd
  3997. class="enumerate-enumitem"><span
  3998. class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
  3999. </dd><dt class="enumerate-enumitem">
  4000. 2. </dt><dd
  4001. class="enumerate-enumitem">For each of <span
  4002. class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
  4003. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4004. a) </dt><dd
  4005. class="enumerate-enumitem"><span
  4006. class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
  4007. </dd><dt class="enumerate-enumitem">
  4008. b) </dt><dd
  4009. class="enumerate-enumitem"><span
  4010. class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
  4011. </dd><dt class="enumerate-enumitem">
  4012. c) </dt><dd
  4013. class="enumerate-enumitem"><span
  4014. class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
  4015. </dd><dt class="enumerate-enumitem">
  4016. d) </dt><dd
  4017. class="enumerate-enumitem"><span
  4018. class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
  4019. </dd><dt class="enumerate-enumitem">
  4020. e) </dt><dd
  4021. class="enumerate-enumitem">verify ranges; zero is the only legal value in
  4022. Vorbis I for <span
  4023. class="cmtt-12">[vorbis_mode_windowtype] </span>and <span
  4024. class="cmtt-12">[vorbis_mode_transformtype]</span>.
  4025. <span
  4026. class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
  4027. in use. Any illegal values render the stream undecodable.
  4028. </dd><dt class="enumerate-enumitem">
  4029. f) </dt><dd
  4030. class="enumerate-enumitem">save this mode configuration in slot <span
  4031. class="cmtt-12">[i] </span>of the mode configuration array
  4032. <span
  4033. class="cmtt-12">[vorbis_mode_configurations]</span>.</dd></dl>
  4034. </dd><dt class="enumerate-enumitem">
  4035. 3. </dt><dd
  4036. class="enumerate-enumitem">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
  4037. decodable.</dd></dl>
  4038. <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
  4039. <!--l. 277--><p class="noindent" >
  4040. <h4 class="subsectionHead"><span class="titlemark">4.3. </span> <a
  4041. id="x1-710004.3"></a>Audio packet decode and synthesis</h4>
  4042. <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
  4043. audio packet decode is to read and verify the packet type. <span
  4044. class="cmti-12">A non-audio packet when audio is</span>
  4045. <span
  4046. class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
  4047. <span
  4048. class="cmti-12">packet and not attempt decoding it to audio</span>.
  4049. <!--l. 286--><p class="noindent" >
  4050. <h5 class="subsubsectionHead"><span class="titlemark">4.3.1. </span> <a
  4051. id="x1-720004.3.1"></a>packet type, mode and window decode</h5>
  4052. <!--l. 289--><p class="noindent" >
  4053. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4054. 1. </dt><dd
  4055. class="enumerate-enumitem">read 1 bit <span
  4056. class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
  4057. </dd><dt class="enumerate-enumitem">
  4058. 2. </dt><dd
  4059. class="enumerate-enumitem">read <a
  4060. href="#x1-1170009.2.1">ilog</a>([vorbis_mode_count]-1) bits <span
  4061. class="cmtt-12">[mode_number]</span>
  4062. </dd><dt class="enumerate-enumitem">
  4063. 3. </dt><dd
  4064. class="enumerate-enumitem">decode blocksize <span
  4065. class="cmtt-12">[n] </span>is equal to <span
  4066. class="cmtt-12">[blocksize_0] </span>if <span
  4067. class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
  4068. else <span
  4069. class="cmtt-12">[n] </span>is equal to <span
  4070. class="cmtt-12">[blocksize_1]</span>.
  4071. </dd><dt class="enumerate-enumitem">
  4072. 4. </dt><dd
  4073. class="enumerate-enumitem">perform window selection and setup; this window is used later by the inverse
  4074. MDCT:
  4075. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4076. a) </dt><dd
  4077. class="enumerate-enumitem">if this is a long window (the <span
  4078. class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
  4079. set):
  4080. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4081. i. </dt><dd
  4082. class="enumerate-enumitem">read 1 bit for <span
  4083. class="cmtt-12">[previous_window_flag]</span>
  4084. </dd><dt class="enumerate-enumitem">
  4085. ii. </dt><dd
  4086. class="enumerate-enumitem">read 1 bit for <span
  4087. class="cmtt-12">[next_window_flag]</span>
  4088. </dd><dt class="enumerate-enumitem">
  4089. iii. </dt><dd
  4090. class="enumerate-enumitem">if <span
  4091. class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
  4092. be a hybrid window for lapping with a short block. See <a
  4093. href="#paragraph.1" >paragraph&#x00A0;<a
  4094. href="#x1-260001.3.2">1.3.2</a></a>,
  4095. &#8220;<a
  4096. href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
  4097. overlapping dissimilar windows. Else, the left half window will have normal
  4098. long shape.
  4099. </dd><dt class="enumerate-enumitem">
  4100. iv. </dt><dd
  4101. class="enumerate-enumitem">if <span
  4102. class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
  4103. a hybrid window for lapping with a short block. See <a
  4104. href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>,
  4105. &#8220;<a
  4106. href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
  4107. overlapping dissimilar windows. Else, the left right window will have normal
  4108. long shape.</dd></dl>
  4109. </dd><dt class="enumerate-enumitem">
  4110. b) </dt><dd
  4111. class="enumerate-enumitem">if this is a short window, the window is always the same short-window
  4112. shape.</dd></dl>
  4113. </dd></dl>
  4114. <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span
  4115. class="cmmi-12">y </span>= sin(<img
  4116. src="Vorbis_I_spec1x.png" alt="&pi;2" class="frac" align="middle"> <span
  4117. class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
  4118. class="cmr-8">2</span></sup>((<span
  4119. class="cmmi-12">x </span>+ 0<span
  4120. class="cmmi-12">.</span>5)<span
  4121. class="cmmi-12">&#x2215;n </span><span
  4122. class="cmsy-10x-x-120">&lowast; </span><span
  4123. class="cmmi-12">&pi;</span>)), where <span
  4124. class="cmmi-12">n </span>is window
  4125. size and <span
  4126. class="cmmi-12">x </span>ranges 0<span
  4127. class="cmmi-12">&hellip;</span><span
  4128. class="cmmi-12">n</span><span
  4129. class="cmsy-10x-x-120">&minus; </span>1, but dissimilar lapping requirements can affect overall shape. Window
  4130. generation proceeds as follows:
  4131. <!--l. 327--><p class="noindent" >
  4132. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4133. 1. </dt><dd
  4134. class="enumerate-enumitem"><span
  4135. class="cmtt-12">[window_center] </span>= <span
  4136. class="cmtt-12">[n] </span>/ 2
  4137. </dd><dt class="enumerate-enumitem">
  4138. 2. </dt><dd
  4139. class="enumerate-enumitem">if (<span
  4140. class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
  4141. class="cmtt-12">[previous_window_flag] </span>is not set)
  4142. then
  4143. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4144. a) </dt><dd
  4145. class="enumerate-enumitem"><span
  4146. class="cmtt-12">[left_window_start] </span>= <span
  4147. class="cmtt-12">[n]</span>/4 - <span
  4148. class="cmtt-12">[blocksize_0]</span>/4
  4149. </dd><dt class="enumerate-enumitem">
  4150. b) </dt><dd
  4151. class="enumerate-enumitem"><span
  4152. class="cmtt-12">[left_window_end] </span>= <span
  4153. class="cmtt-12">[n]</span>/4 + <span
  4154. class="cmtt-12">[blocksize_0]</span>/4
  4155. </dd><dt class="enumerate-enumitem">
  4156. c) </dt><dd
  4157. class="enumerate-enumitem"><span
  4158. class="cmtt-12">[left_n] </span>= <span
  4159. class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
  4160. <!--l. 336--><p class="noindent" >else
  4161. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4162. a) </dt><dd
  4163. class="enumerate-enumitem"><span
  4164. class="cmtt-12">[left_window_start] </span>= 0
  4165. </dd><dt class="enumerate-enumitem">
  4166. b) </dt><dd
  4167. class="enumerate-enumitem"><span
  4168. class="cmtt-12">[left_window_end] </span>= <span
  4169. class="cmtt-12">[window_center]</span>
  4170. </dd><dt class="enumerate-enumitem">
  4171. c) </dt><dd
  4172. class="enumerate-enumitem"><span
  4173. class="cmtt-12">[left_n] </span>= <span
  4174. class="cmtt-12">[n]</span>/2</dd></dl>
  4175. </dd><dt class="enumerate-enumitem">
  4176. 3. </dt><dd
  4177. class="enumerate-enumitem">if (<span
  4178. class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
  4179. class="cmtt-12">[next_window_flag] </span>is not set) then
  4180. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4181. a) </dt><dd
  4182. class="enumerate-enumitem"><span
  4183. class="cmtt-12">[right_window_start] </span>= <span
  4184. class="cmtt-12">[n]*3</span>/4 - <span
  4185. class="cmtt-12">[blocksize_0]</span>/4
  4186. </dd><dt class="enumerate-enumitem">
  4187. b) </dt><dd
  4188. class="enumerate-enumitem"><span
  4189. class="cmtt-12">[right_window_end] </span>= <span
  4190. class="cmtt-12">[n]*3</span>/4 + <span
  4191. class="cmtt-12">[blocksize_0]</span>/4
  4192. </dd><dt class="enumerate-enumitem">
  4193. c) </dt><dd
  4194. class="enumerate-enumitem"><span
  4195. class="cmtt-12">[right_n] </span>= <span
  4196. class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
  4197. <!--l. 352--><p class="noindent" >else
  4198. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4199. a) </dt><dd
  4200. class="enumerate-enumitem"><span
  4201. class="cmtt-12">[right_window_start] </span>= <span
  4202. class="cmtt-12">[window_center]</span>
  4203. </dd><dt class="enumerate-enumitem">
  4204. b) </dt><dd
  4205. class="enumerate-enumitem"><span
  4206. class="cmtt-12">[right_window_end] </span>= <span
  4207. class="cmtt-12">[n]</span>
  4208. </dd><dt class="enumerate-enumitem">
  4209. c) </dt><dd
  4210. class="enumerate-enumitem"><span
  4211. class="cmtt-12">[right_n] </span>= <span
  4212. class="cmtt-12">[n]</span>/2</dd></dl>
  4213. </dd><dt class="enumerate-enumitem">
  4214. 4. </dt><dd
  4215. class="enumerate-enumitem">window from range 0 ... <span
  4216. class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
  4217. </dd><dt class="enumerate-enumitem">
  4218. 5. </dt><dd
  4219. class="enumerate-enumitem">for <span
  4220. class="cmtt-12">[i] </span>in range <span
  4221. class="cmtt-12">[left_window_start] </span>... <span
  4222. class="cmtt-12">[left_window_end]</span>-1, window(<span
  4223. class="cmtt-12">[i]</span>) =
  4224. sin(<img
  4225. src="Vorbis_I_spec2x.png" alt="&pi;
  4226. 2" class="frac" align="middle"> <span
  4227. class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
  4228. class="cmr-8">2</span></sup>( (<span
  4229. class="cmtt-12">[i]</span>-<span
  4230. class="cmtt-12">[left_window_start]</span>+0.5) / <span
  4231. class="cmtt-12">[left_n] </span><span
  4232. class="cmsy-10x-x-120">&lowast;</span><img
  4233. src="Vorbis_I_spec3x.png" alt="&pi;
  4234. 2" class="frac" align="middle">) )
  4235. </dd><dt class="enumerate-enumitem">
  4236. 6. </dt><dd
  4237. class="enumerate-enumitem">window from range <span
  4238. class="cmtt-12">[left_window_end] </span>... <span
  4239. class="cmtt-12">[right_window_start]</span>-1 inclusive is
  4240. one
  4241. </dd><dt class="enumerate-enumitem">
  4242. 7. </dt><dd
  4243. class="enumerate-enumitem">for <span
  4244. class="cmtt-12">[i] </span>in range <span
  4245. class="cmtt-12">[right_window_start] </span>... <span
  4246. class="cmtt-12">[right_window_end]</span>-1, window(<span
  4247. class="cmtt-12">[i]</span>) =
  4248. sin(<img
  4249. src="Vorbis_I_spec4x.png" alt="&pi;
  4250. 2" class="frac" align="middle"> <span
  4251. class="cmsy-10x-x-120">&lowast;</span> sin <sup><span
  4252. class="cmr-8">2</span></sup>( (<span
  4253. class="cmtt-12">[i]</span>-<span
  4254. class="cmtt-12">[right_window_start]</span>+0.5) / <span
  4255. class="cmtt-12">[right_n] </span><span
  4256. class="cmsy-10x-x-120">&lowast;</span><img
  4257. src="Vorbis_I_spec5x.png" alt="&pi;
  4258. 2" class="frac" align="middle"> + <img
  4259. src="Vorbis_I_spec6x.png" alt="&pi;
  4260. 2" class="frac" align="middle">) )
  4261. </dd><dt class="enumerate-enumitem">
  4262. 8. </dt><dd
  4263. class="enumerate-enumitem">window from range <span
  4264. class="cmtt-12">[right_window_start] </span>... <span
  4265. class="cmtt-12">[n]</span>-1 is zero</dd></dl>
  4266. <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
  4267. packet from the stream. An end of packet condition past this point is to be considered a possible
  4268. nominal occurrence.
  4269. <!--l. 375--><p class="noindent" >
  4270. <h5 class="subsubsectionHead"><span class="titlemark">4.3.2. </span> <a
  4271. id="x1-730004.3.2"></a>floor curve decode</h5>
  4272. <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span
  4273. class="cmtt-12">[mode_number]</span>
  4274. from configuration array <span
  4275. class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
  4276. <span
  4277. class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
  4278. array <span
  4279. class="cmtt-12">[vorbis_mapping_configurations]</span>.
  4280. <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
  4281. <!--l. 386--><p class="noindent" >For each floor <span
  4282. class="cmtt-12">[i] </span>of <span
  4283. class="cmtt-12">[audio_channels]</span>
  4284. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4285. 1. </dt><dd
  4286. class="enumerate-enumitem"><span
  4287. class="cmtt-12">[submap_number] </span>= element <span
  4288. class="cmtt-12">[i] </span>of vector [vorbis_mapping_mux]
  4289. </dd><dt class="enumerate-enumitem">
  4290. 2. </dt><dd
  4291. class="enumerate-enumitem"><span
  4292. class="cmtt-12">[floor_number] </span>= element <span
  4293. class="cmtt-12">[submap_number] </span>of vector [vorbis_submap_floor]
  4294. </dd><dt class="enumerate-enumitem">
  4295. 3. </dt><dd
  4296. class="enumerate-enumitem">if the floor type of this floor (vector
  4297. <span
  4298. class="cmtt-12">[vorbis_floor_types] </span>element <span
  4299. class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
  4300. channel <span
  4301. class="cmtt-12">[i] </span>according to the <a
  4302. href="#x1-930006.2.2">subsubsection&#x00A0;6.2.2</a>, &#8220;<a
  4303. href="#x1-930006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>&#8221;
  4304. </dd><dt class="enumerate-enumitem">
  4305. 4. </dt><dd
  4306. class="enumerate-enumitem">if the type of this floor is one then decode the floor for channel <span
  4307. class="cmtt-12">[i] </span>according to the
  4308. <a
  4309. href="#x1-1000007.2.3">subsubsection&#x00A0;7.2.3</a>, &#8220;<a
  4310. href="#x1-1000007.2.3">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>&#8221;
  4311. </dd><dt class="enumerate-enumitem">
  4312. 5. </dt><dd
  4313. class="enumerate-enumitem">save the needed decoded floor information for channel for later synthesis
  4314. </dd><dt class="enumerate-enumitem">
  4315. 6. </dt><dd
  4316. class="enumerate-enumitem">if the decoded floor returned &#8217;unused&#8217;, set vector <span
  4317. class="cmtt-12">[no_residue] </span>element <span
  4318. class="cmtt-12">[i] </span>to true,
  4319. else set vector <span
  4320. class="cmtt-12">[no_residue] </span>element <span
  4321. class="cmtt-12">[i] </span>to false</dd></dl>
  4322. <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
  4323. output vectors and skipping to the add/overlap output stage.
  4324. <!--l. 412--><p class="noindent" >
  4325. <h5 class="subsubsectionHead"><span class="titlemark">4.3.3. </span> <a
  4326. id="x1-740004.3.3"></a>nonzero vector propagate</h5>
  4327. <!--l. 414--><p class="noindent" >A possible result of floor decode is that a specific vector is marked &#8217;unused&#8217; which indicates that
  4328. that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
  4329. coded in the stream, save for one complication. If some vectors are used and some are not,
  4330. channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
  4331. vectors.
  4332. <!--l. 421--><p class="noindent" >for each <span
  4333. class="cmtt-12">[i] </span>from 0 ... <span
  4334. class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
  4335. <!--l. 424--><p class="noindent" >
  4336. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4337. 1. </dt><dd
  4338. class="enumerate-enumitem">if either <span
  4339. class="cmtt-12">[no_residue] </span>entry for channel (<span
  4340. class="cmtt-12">[vorbis_mapping_magnitude] </span>element
  4341. <span
  4342. class="cmtt-12">[i]</span>) or channel (<span
  4343. class="cmtt-12">[vorbis_mapping_angle] </span>element <span
  4344. class="cmtt-12">[i]</span>) are set to false, then both
  4345. must be set to false. Note that an &#8217;unused&#8217; floor has no decoded floor information; it
  4346. is important that this is remembered at floor curve synthesis time.</dd></dl>
  4347. <!--l. 436--><p class="noindent" >
  4348. <h5 class="subsubsectionHead"><span class="titlemark">4.3.4. </span> <a
  4349. id="x1-750004.3.4"></a>residue decode</h5>
  4350. <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
  4351. order.
  4352. <!--l. 441--><p class="noindent" >for each submap <span
  4353. class="cmtt-12">[i] </span>in order from 0 ... <span
  4354. class="cmtt-12">[vorbis_mapping_submaps]</span>-1
  4355. <!--l. 444--><p class="noindent" >
  4356. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4357. 1. </dt><dd
  4358. class="enumerate-enumitem"><span
  4359. class="cmtt-12">[ch] </span>= 0
  4360. </dd><dt class="enumerate-enumitem">
  4361. 2. </dt><dd
  4362. class="enumerate-enumitem">for each channel <span
  4363. class="cmtt-12">[j] </span>in order from 0 ... <span
  4364. class="cmtt-12">[audio_channels] </span>- 1
  4365. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4366. a) </dt><dd
  4367. class="enumerate-enumitem">if channel <span
  4368. class="cmtt-12">[j] </span>in submap <span
  4369. class="cmtt-12">[i] </span>(vector <span
  4370. class="cmtt-12">[vorbis_mapping_mux] </span>element <span
  4371. class="cmtt-12">[j] </span>is equal to
  4372. <span
  4373. class="cmtt-12">[i]</span>)
  4374. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4375. i. </dt><dd
  4376. class="enumerate-enumitem">if vector <span
  4377. class="cmtt-12">[no_residue] </span>element <span
  4378. class="cmtt-12">[j] </span>is true
  4379. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4380. A. </dt><dd
  4381. class="enumerate-enumitem">vector <span
  4382. class="cmtt-12">[do_not_decode_flag] </span>element <span
  4383. class="cmtt-12">[ch] </span>is set</dd></dl>
  4384. <!--l. 453--><p class="noindent" >else
  4385. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4386. A. </dt><dd
  4387. class="enumerate-enumitem">vector <span
  4388. class="cmtt-12">[do_not_decode_flag] </span>element <span
  4389. class="cmtt-12">[ch] </span>is unset</dd></dl>
  4390. </dd><dt class="enumerate-enumitem">
  4391. ii. </dt><dd
  4392. class="enumerate-enumitem">increment <span
  4393. class="cmtt-12">[ch]</span></dd></dl>
  4394. </dd></dl>
  4395. </dd><dt class="enumerate-enumitem">
  4396. 3. </dt><dd
  4397. class="enumerate-enumitem"><span
  4398. class="cmtt-12">[residue_number] </span>= vector <span
  4399. class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
  4400. class="cmtt-12">[i]</span>
  4401. </dd><dt class="enumerate-enumitem">
  4402. 4. </dt><dd
  4403. class="enumerate-enumitem"><span
  4404. class="cmtt-12">[residue_type] </span>= vector <span
  4405. class="cmtt-12">[vorbis_residue_types] </span>element <span
  4406. class="cmtt-12">[residue_number]</span>
  4407. </dd><dt class="enumerate-enumitem">
  4408. 5. </dt><dd
  4409. class="enumerate-enumitem">decode <span
  4410. class="cmtt-12">[ch] </span>vectors using residue <span
  4411. class="cmtt-12">[residue_number]</span>, according to type <span
  4412. class="cmtt-12">[residue_type]</span>,
  4413. also passing vector <span
  4414. class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
  4415. not be decoded. Correct per-vector decode length is <span
  4416. class="cmtt-12">[n]</span>/2.
  4417. </dd><dt class="enumerate-enumitem">
  4418. 6. </dt><dd
  4419. class="enumerate-enumitem"><span
  4420. class="cmtt-12">[ch] </span>= 0
  4421. </dd><dt class="enumerate-enumitem">
  4422. 7. </dt><dd
  4423. class="enumerate-enumitem">for each channel <span
  4424. class="cmtt-12">[j] </span>in order from 0 ... <span
  4425. class="cmtt-12">[audio_channels]</span>
  4426. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4427. a) </dt><dd
  4428. class="enumerate-enumitem">if channel <span
  4429. class="cmtt-12">[j] </span>is in submap <span
  4430. class="cmtt-12">[i] </span>(vector <span
  4431. class="cmtt-12">[vorbis_mapping_mux] </span>element <span
  4432. class="cmtt-12">[j] </span>is equal
  4433. to <span
  4434. class="cmtt-12">[i]</span>)
  4435. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4436. i. </dt><dd
  4437. class="enumerate-enumitem">residue vector for channel <span
  4438. class="cmtt-12">[j] </span>is set to decoded residue vector <span
  4439. class="cmtt-12">[ch]</span>
  4440. </dd><dt class="enumerate-enumitem">
  4441. ii. </dt><dd
  4442. class="enumerate-enumitem">increment <span
  4443. class="cmtt-12">[ch]</span></dd></dl>
  4444. </dd></dl>
  4445. </dd></dl>
  4446. <!--l. 480--><p class="noindent" >
  4447. <h5 class="subsubsectionHead"><span class="titlemark">4.3.5. </span> <a
  4448. id="x1-760004.3.5"></a>inverse coupling</h5>
  4449. <!--l. 482--><p class="noindent" >for each <span
  4450. class="cmtt-12">[i] </span>from <span
  4451. class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
  4452. <!--l. 485--><p class="noindent" >
  4453. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4454. 1. </dt><dd
  4455. class="enumerate-enumitem"><span
  4456. class="cmtt-12">[magnitude_vector] </span>= the residue vector for channel (vector
  4457. <span
  4458. class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
  4459. class="cmtt-12">[i]</span>)
  4460. </dd><dt class="enumerate-enumitem">
  4461. 2. </dt><dd
  4462. class="enumerate-enumitem"><span
  4463. class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span
  4464. class="cmtt-12">[vorbis_mapping_angle]</span>
  4465. element <span
  4466. class="cmtt-12">[i]</span>)
  4467. </dd><dt class="enumerate-enumitem">
  4468. 3. </dt><dd
  4469. class="enumerate-enumitem">for each scalar value <span
  4470. class="cmtt-12">[M] </span>in vector <span
  4471. class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
  4472. <span
  4473. class="cmtt-12">[A] </span>in vector <span
  4474. class="cmtt-12">[angle_vector]</span>:
  4475. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4476. a) </dt><dd
  4477. class="enumerate-enumitem">if (<span
  4478. class="cmtt-12">[M] </span>is greater than zero)
  4479. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4480. i. </dt><dd
  4481. class="enumerate-enumitem">if (<span
  4482. class="cmtt-12">[A] </span>is greater than zero)
  4483. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4484. A. </dt><dd
  4485. class="enumerate-enumitem"><span
  4486. class="cmtt-12">[new_M] </span>= <span
  4487. class="cmtt-12">[M]</span>
  4488. </dd><dt class="enumerate-enumitem">
  4489. B. </dt><dd
  4490. class="enumerate-enumitem"><span
  4491. class="cmtt-12">[new_A] </span>= <span
  4492. class="cmtt-12">[M]</span>-<span
  4493. class="cmtt-12">[A]</span></dd></dl>
  4494. <!--l. 498--><p class="noindent" >else
  4495. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4496. A. </dt><dd
  4497. class="enumerate-enumitem"><span
  4498. class="cmtt-12">[new_A] </span>= <span
  4499. class="cmtt-12">[M]</span>
  4500. </dd><dt class="enumerate-enumitem">
  4501. B. </dt><dd
  4502. class="enumerate-enumitem"><span
  4503. class="cmtt-12">[new_M] </span>= <span
  4504. class="cmtt-12">[M]</span>+<span
  4505. class="cmtt-12">[A]</span></dd></dl>
  4506. </dd></dl>
  4507. <!--l. 505--><p class="noindent" >else
  4508. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4509. i. </dt><dd
  4510. class="enumerate-enumitem">if (<span
  4511. class="cmtt-12">[A] </span>is greater than zero)
  4512. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4513. A. </dt><dd
  4514. class="enumerate-enumitem"><span
  4515. class="cmtt-12">[new_M] </span>= <span
  4516. class="cmtt-12">[M]</span>
  4517. </dd><dt class="enumerate-enumitem">
  4518. B. </dt><dd
  4519. class="enumerate-enumitem"><span
  4520. class="cmtt-12">[new_A] </span>= <span
  4521. class="cmtt-12">[M]</span>+<span
  4522. class="cmtt-12">[A]</span></dd></dl>
  4523. <!--l. 512--><p class="noindent" >else
  4524. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4525. A. </dt><dd
  4526. class="enumerate-enumitem"><span
  4527. class="cmtt-12">[new_A] </span>= <span
  4528. class="cmtt-12">[M]</span>
  4529. </dd><dt class="enumerate-enumitem">
  4530. B. </dt><dd
  4531. class="enumerate-enumitem"><span
  4532. class="cmtt-12">[new_M] </span>= <span
  4533. class="cmtt-12">[M]</span>-<span
  4534. class="cmtt-12">[A]</span></dd></dl>
  4535. </dd></dl>
  4536. </dd><dt class="enumerate-enumitem">
  4537. b) </dt><dd
  4538. class="enumerate-enumitem">set scalar value <span
  4539. class="cmtt-12">[M] </span>in vector <span
  4540. class="cmtt-12">[magnitude_vector] </span>to <span
  4541. class="cmtt-12">[new_M]</span>
  4542. </dd><dt class="enumerate-enumitem">
  4543. c) </dt><dd
  4544. class="enumerate-enumitem">set scalar value <span
  4545. class="cmtt-12">[A] </span>in vector <span
  4546. class="cmtt-12">[angle_vector] </span>to <span
  4547. class="cmtt-12">[new_A]</span></dd></dl>
  4548. </dd></dl>
  4549. <!--l. 529--><p class="noindent" >
  4550. <h5 class="subsubsectionHead"><span class="titlemark">4.3.6. </span> <a
  4551. id="x1-770004.3.6"></a>dot product</h5>
  4552. <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
  4553. packet type. Note that the vector synthesis length for floor computation is <span
  4554. class="cmtt-12">[n]</span>/2.
  4555. <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
  4556. channel&#8217;s residue vector. The result is the dot product of the floor and residue vectors for
  4557. each channel; the produced vectors are the length <span
  4558. class="cmtt-12">[n]</span>/2 audio spectrum for each
  4559. channel.
  4560. <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
  4561. implementation might be to assume that a 32 bit fixed-point representation for floor and
  4562. residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
  4563. in all cases because it happens to mostly work with the current Xiph.Org reference
  4564. encoder.
  4565. <!--l. 550--><p class="noindent" >However, floor vector values can span <span
  4566. class="cmsy-10x-x-120">&sim;</span>140dB (<span
  4567. class="cmsy-10x-x-120">&sim;</span>24 bits unsigned), and the audio spectrum
  4568. vector should represent a minimum of 120dB (<span
  4569. class="cmsy-10x-x-120">&sim;</span>21 bits with sign), even when output is to a 16
  4570. bit PCM device. For the residue vector to represent full scale if the floor is nailed
  4571. to <span
  4572. class="cmsy-10x-x-120">&minus;</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
  4573. full scale if the floor is nailed at 0dB, it must be able to represent <span
  4574. class="cmsy-10x-x-120">&minus;</span>140dB to +0dB.
  4575. Thus, in order to handle full range dynamics, a residue vector may span <span
  4576. class="cmsy-10x-x-120">&minus;</span>140dB to
  4577. +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
  4578. residue vector must be able to represent a 48 bit range and the dot product must
  4579. be able to handle an effective 48 bit times 24 bit multiplication. This range may be
  4580. achieved using large (64 bit or larger) integers, or implementing a movable binary point
  4581. representation.
  4582. <!--l. 567--><p class="noindent" >
  4583. <h5 class="subsubsectionHead"><span class="titlemark">4.3.7. </span> <a
  4584. id="x1-780004.3.7"></a>inverse MDCT</h5>
  4585. <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
  4586. inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
  4587. available in <span class="cite">[<a
  4588. href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
  4589. earlier.
  4590. <!--l. 576--><p class="noindent" >
  4591. <h5 class="subsubsectionHead"><span class="titlemark">4.3.8. </span> <a
  4592. id="x1-790004.3.8"></a>overlap_add</h5>
  4593. <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
  4594. window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
  4595. current window (as illustrated in <a
  4596. href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>, &#8220;<a
  4597. href="#x1-260001.3.2">Window shape decode (long windows
  4598. only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;). The overlapped portion produced from overlapping the previous and current frame data
  4599. is finished data to be returned by the decoder. This data spans from the center of
  4600. the previous window to the center of the current window. In the case of same-sized
  4601. windows, the amount of data to return is one-half block consisting of and only of the
  4602. overlapped portions. When overlapping a short and long window, much of the returned
  4603. range does not actually overlap. This does not damage transform orthogonality. Pay
  4604. attention however to returning the correct data range; the amount of data to be returned
  4605. is:
  4606. <!--l. 592--><p class="noindent" >
  4607. <div class="fancyvrb" id="fancyvrb22">
  4608. <a
  4609. id="x1-79002r1"></a><span
  4610. class="cmr-6">1</span><span
  4611. class="cmtt-8">&#x00A0;</span><span
  4612. class="cmtt-8">&#x00A0;window\_blocksize(previous\_window)/4+window\_blocksize(current\_window)/4</span>
  4613. </div>
  4614. <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
  4615. windowsize/2-1, inclusive) of the current window.
  4616. <!--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
  4617. encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
  4618. PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
  4619. <!--l. 606--><p class="noindent" >
  4620. <h5 class="subsubsectionHead"><span class="titlemark">4.3.9. </span> <a
  4621. id="x1-800004.3.9"></a>output channel order</h5>
  4622. <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
  4623. implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
  4624. specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
  4625. greater-than-eight channels remains &#8217;left to the implementation&#8217;.
  4626. <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a
  4627. decoder to produce output with channels in any order. Any such decoder should explicitly
  4628. document channel reordering behavior.
  4629. <!--l. 620--><p class="noindent" >
  4630. <dl class="description"><dt class="description">
  4631. <span
  4632. class="cmssbx-10x-x-120">one channel</span> </dt><dd
  4633. class="description">the stream is monophonic
  4634. </dd><dt class="description">
  4635. <span
  4636. class="cmssbx-10x-x-120">two channels</span> </dt><dd
  4637. class="description">the stream is stereo. channel order: left, right
  4638. </dd><dt class="description">
  4639. <span
  4640. class="cmssbx-10x-x-120">three channels</span> </dt><dd
  4641. class="description">the stream is a 1d-surround encoding. channel order: left, center, right
  4642. </dd><dt class="description">
  4643. <span
  4644. class="cmssbx-10x-x-120">four channels</span> </dt><dd
  4645. class="description">the stream is quadraphonic surround. channel order: front left, front right,
  4646. rear left, rear right
  4647. </dd><dt class="description">
  4648. <span
  4649. class="cmssbx-10x-x-120">five channels</span> </dt><dd
  4650. class="description">the stream is five-channel surround. channel order: front left, center, front
  4651. right, rear left, rear right
  4652. </dd><dt class="description">
  4653. <span
  4654. class="cmssbx-10x-x-120">six channels</span> </dt><dd
  4655. class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear
  4656. left, rear right, LFE
  4657. </dd><dt class="description">
  4658. <span
  4659. class="cmssbx-10x-x-120">seven channels</span> </dt><dd
  4660. class="description">the stream is 6.1 surround. channel order: front left, center, front right,
  4661. side left, side right, rear center, LFE
  4662. </dd><dt class="description">
  4663. <span
  4664. class="cmssbx-10x-x-120">eight channels</span> </dt><dd
  4665. class="description">the stream is 7.1 surround. channel order: front left, center, front right,
  4666. side left, side right, rear left, rear right, LFE
  4667. </dd><dt class="description">
  4668. <span
  4669. class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd
  4670. class="description">channel use and order is defined by the application
  4671. </dd></dl>
  4672. <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
  4673. channel mappings (such as three and four channel <a
  4674. href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
  4675. mappings other than mapping 0.
  4676. <h3 class="sectionHead"><span class="titlemark">5. </span> <a
  4677. id="x1-810005"></a>comment field and header specification</h3>
  4678. <!--l. 6--><p class="noindent" >
  4679. <h4 class="subsectionHead"><span class="titlemark">5.1. </span> <a
  4680. id="x1-820005.1"></a>Overview</h4>
  4681. <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
  4682. bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
  4683. belongs in a separate logical bitstream (usually an XML stream type) that provides greater
  4684. structure and machine parseability.
  4685. <!--l. 14--><p class="noindent" >The comment field is meant to be used much like someone jotting a quick note on the bottom of
  4686. a CDR. It should be a little information to remember the disc by and explain it to others; a
  4687. short, to-the-point text note that need not only be a couple words, but isn&#8217;t going to be more
  4688. than a short paragraph. The essentials, in other words, whatever they turn out to be,
  4689. eg:
  4690. <!--l. 21--><p class="noindent" >
  4691. <div class="quote">
  4692. <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span
  4693. class="cmti-12">&#8220;I&#8217;m Still Around&#8221;</span>, opening
  4694. for Moxy Früvous, 1997.</div>
  4695. <!--l. 29--><p class="noindent" >
  4696. <h4 class="subsectionHead"><span class="titlemark">5.2. </span> <a
  4697. id="x1-830005.2"></a>Comment encoding</h4>
  4698. <!--l. 31--><p class="noindent" >
  4699. <h5 class="subsubsectionHead"><span class="titlemark">5.2.1. </span> <a
  4700. id="x1-840005.2.1"></a>Structure</h5>
  4701. <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
  4702. bounded to 2<sup><span
  4703. class="cmr-8">32</span></sup> <span
  4704. class="cmsy-10x-x-120">&minus; </span>1 and the length of each vector is limited to 2<sup><span
  4705. class="cmr-8">32</span></sup> <span
  4706. class="cmsy-10x-x-120">&minus; </span>1 bytes. The vector length is
  4707. encoded; the vector contents themselves are not null terminated. In addition to the vector list,
  4708. there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
  4709. example, the 1.0 release of libvorbis set the vendor string to &#8220;Xiph.Org libVorbis I
  4710. 20020717&#8221;.
  4711. <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
  4712. packing conventions of the vorbis codec. However, since data in the comment header
  4713. is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
  4714. integers.
  4715. <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
  4716. <!--l. 48--><p class="noindent" >
  4717. <div class="fancyvrb" id="fancyvrb23">
  4718. <a
  4719. id="x1-84002r1"></a><span
  4720. class="cmr-6">1</span><span
  4721. class="cmtt-8">&#x00A0;</span><span
  4722. class="cmtt-8">&#x00A0;</span><span
  4723. class="cmtt-8">&#x00A0;</span><span
  4724. class="cmtt-8">&#x00A0;1)</span><span
  4725. class="cmtt-8">&#x00A0;[vendor\_length]</span><span
  4726. class="cmtt-8">&#x00A0;=</span><span
  4727. class="cmtt-8">&#x00A0;read</span><span
  4728. class="cmtt-8">&#x00A0;an</span><span
  4729. class="cmtt-8">&#x00A0;unsigned</span><span
  4730. class="cmtt-8">&#x00A0;integer</span><span
  4731. class="cmtt-8">&#x00A0;of</span><span
  4732. class="cmtt-8">&#x00A0;32</span><span
  4733. class="cmtt-8">&#x00A0;bits</span>
  4734. <br class="fancyvrb" /><a
  4735. id="x1-84004r2"></a><span
  4736. class="cmr-6">2</span><span
  4737. class="cmtt-8">&#x00A0;</span><span
  4738. class="cmtt-8">&#x00A0;</span><span
  4739. class="cmtt-8">&#x00A0;</span><span
  4740. class="cmtt-8">&#x00A0;2)</span><span
  4741. class="cmtt-8">&#x00A0;[vendor\_string]</span><span
  4742. class="cmtt-8">&#x00A0;=</span><span
  4743. class="cmtt-8">&#x00A0;read</span><span
  4744. class="cmtt-8">&#x00A0;a</span><span
  4745. class="cmtt-8">&#x00A0;UTF-8</span><span
  4746. class="cmtt-8">&#x00A0;vector</span><span
  4747. class="cmtt-8">&#x00A0;as</span><span
  4748. class="cmtt-8">&#x00A0;[vendor\_length]</span><span
  4749. class="cmtt-8">&#x00A0;octets</span>
  4750. <br class="fancyvrb" /><a
  4751. id="x1-84006r3"></a><span
  4752. class="cmr-6">3</span><span
  4753. class="cmtt-8">&#x00A0;</span><span
  4754. class="cmtt-8">&#x00A0;</span><span
  4755. class="cmtt-8">&#x00A0;</span><span
  4756. class="cmtt-8">&#x00A0;3)</span><span
  4757. class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
  4758. class="cmtt-8">&#x00A0;=</span><span
  4759. class="cmtt-8">&#x00A0;read</span><span
  4760. class="cmtt-8">&#x00A0;an</span><span
  4761. class="cmtt-8">&#x00A0;unsigned</span><span
  4762. class="cmtt-8">&#x00A0;integer</span><span
  4763. class="cmtt-8">&#x00A0;of</span><span
  4764. class="cmtt-8">&#x00A0;32</span><span
  4765. class="cmtt-8">&#x00A0;bits</span>
  4766. <br class="fancyvrb" /><a
  4767. id="x1-84008r4"></a><span
  4768. class="cmr-6">4</span><span
  4769. class="cmtt-8">&#x00A0;</span><span
  4770. class="cmtt-8">&#x00A0;</span><span
  4771. class="cmtt-8">&#x00A0;</span><span
  4772. class="cmtt-8">&#x00A0;4)</span><span
  4773. class="cmtt-8">&#x00A0;iterate</span><span
  4774. class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
  4775. class="cmtt-8">&#x00A0;times</span><span
  4776. class="cmtt-8">&#x00A0;{</span>
  4777. <br class="fancyvrb" /><a
  4778. id="x1-84010r5"></a><span
  4779. class="cmr-6">5</span><span
  4780. class="cmtt-8">&#x00A0;</span><span
  4781. class="cmtt-8">&#x00A0;</span><span
  4782. class="cmtt-8">&#x00A0;</span><span
  4783. class="cmtt-8">&#x00A0;</span><span
  4784. class="cmtt-8">&#x00A0;</span><span
  4785. class="cmtt-8">&#x00A0;</span><span
  4786. class="cmtt-8">&#x00A0;</span><span
  4787. class="cmtt-8">&#x00A0;</span><span
  4788. class="cmtt-8">&#x00A0;5)</span><span
  4789. class="cmtt-8">&#x00A0;[length]</span><span
  4790. class="cmtt-8">&#x00A0;=</span><span
  4791. class="cmtt-8">&#x00A0;read</span><span
  4792. class="cmtt-8">&#x00A0;an</span><span
  4793. class="cmtt-8">&#x00A0;unsigned</span><span
  4794. class="cmtt-8">&#x00A0;integer</span><span
  4795. class="cmtt-8">&#x00A0;of</span><span
  4796. class="cmtt-8">&#x00A0;32</span><span
  4797. class="cmtt-8">&#x00A0;bits</span>
  4798. <br class="fancyvrb" /><a
  4799. id="x1-84012r6"></a><span
  4800. class="cmr-6">6</span><span
  4801. class="cmtt-8">&#x00A0;</span><span
  4802. class="cmtt-8">&#x00A0;</span><span
  4803. class="cmtt-8">&#x00A0;</span><span
  4804. class="cmtt-8">&#x00A0;</span><span
  4805. class="cmtt-8">&#x00A0;</span><span
  4806. class="cmtt-8">&#x00A0;</span><span
  4807. class="cmtt-8">&#x00A0;</span><span
  4808. class="cmtt-8">&#x00A0;</span><span
  4809. class="cmtt-8">&#x00A0;6)</span><span
  4810. class="cmtt-8">&#x00A0;this</span><span
  4811. class="cmtt-8">&#x00A0;iteration&#8217;s</span><span
  4812. class="cmtt-8">&#x00A0;user</span><span
  4813. class="cmtt-8">&#x00A0;comment</span><span
  4814. class="cmtt-8">&#x00A0;=</span><span
  4815. class="cmtt-8">&#x00A0;read</span><span
  4816. class="cmtt-8">&#x00A0;a</span><span
  4817. class="cmtt-8">&#x00A0;UTF-8</span><span
  4818. class="cmtt-8">&#x00A0;vector</span><span
  4819. class="cmtt-8">&#x00A0;as</span><span
  4820. class="cmtt-8">&#x00A0;[length]</span><span
  4821. class="cmtt-8">&#x00A0;octets</span>
  4822. <br class="fancyvrb" /><a
  4823. id="x1-84014r7"></a><span
  4824. class="cmr-6">7</span><span
  4825. class="cmtt-8">&#x00A0;</span><span
  4826. class="cmtt-8">&#x00A0;</span><span
  4827. class="cmtt-8">&#x00A0;</span><span
  4828. class="cmtt-8">&#x00A0;</span><span
  4829. class="cmtt-8">&#x00A0;</span><span
  4830. class="cmtt-8">&#x00A0;</span><span
  4831. class="cmtt-8">&#x00A0;}</span>
  4832. <br class="fancyvrb" /><a
  4833. id="x1-84016r8"></a><span
  4834. class="cmr-6">8</span><span
  4835. class="cmtt-8">&#x00A0;</span><span
  4836. class="cmtt-8">&#x00A0;</span><span
  4837. class="cmtt-8">&#x00A0;</span><span
  4838. class="cmtt-8">&#x00A0;7)</span><span
  4839. class="cmtt-8">&#x00A0;[framing\_bit]</span><span
  4840. class="cmtt-8">&#x00A0;=</span><span
  4841. class="cmtt-8">&#x00A0;read</span><span
  4842. class="cmtt-8">&#x00A0;a</span><span
  4843. class="cmtt-8">&#x00A0;single</span><span
  4844. class="cmtt-8">&#x00A0;bit</span><span
  4845. class="cmtt-8">&#x00A0;as</span><span
  4846. class="cmtt-8">&#x00A0;boolean</span>
  4847. <br class="fancyvrb" /><a
  4848. id="x1-84018r9"></a><span
  4849. class="cmr-6">9</span><span
  4850. class="cmtt-8">&#x00A0;</span><span
  4851. class="cmtt-8">&#x00A0;</span><span
  4852. class="cmtt-8">&#x00A0;</span><span
  4853. class="cmtt-8">&#x00A0;8)</span><span
  4854. class="cmtt-8">&#x00A0;if</span><span
  4855. class="cmtt-8">&#x00A0;(</span><span
  4856. class="cmtt-8">&#x00A0;[framing\_bit]</span><span
  4857. class="cmtt-8">&#x00A0;unset</span><span
  4858. class="cmtt-8">&#x00A0;or</span><span
  4859. class="cmtt-8">&#x00A0;end-of-packet</span><span
  4860. class="cmtt-8">&#x00A0;)</span><span
  4861. class="cmtt-8">&#x00A0;then</span><span
  4862. class="cmtt-8">&#x00A0;ERROR</span>
  4863. <br class="fancyvrb" /><a
  4864. id="x1-84020r10"></a><span
  4865. class="cmr-6">10</span><span
  4866. class="cmtt-8">&#x00A0;</span><span
  4867. class="cmtt-8">&#x00A0;</span><span
  4868. class="cmtt-8">&#x00A0;</span><span
  4869. class="cmtt-8">&#x00A0;9)</span><span
  4870. class="cmtt-8">&#x00A0;done.</span>
  4871. </div>
  4872. <!--l. 64--><p class="noindent" >
  4873. <h5 class="subsubsectionHead"><span class="titlemark">5.2.2. </span> <a
  4874. id="x1-850005.2.2"></a>Content vector format</h5>
  4875. <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
  4876. comment fields consist of a field name and a corresponding value and look like:
  4877. <!--l. 70--><p class="noindent" >
  4878. <div class="quote">
  4879. <!--l. 71--><p class="noindent" >
  4880. <div class="fancyvrb" id="fancyvrb24">
  4881. <a
  4882. id="x1-85002r1"></a><span
  4883. class="cmr-6">1</span><span
  4884. class="cmtt-8">&#x00A0;</span><span
  4885. class="cmtt-8">&#x00A0;comment[0]="ARTIST=me";</span>
  4886. <br class="fancyvrb" /><a
  4887. id="x1-85004r2"></a><span
  4888. class="cmr-6">2</span><span
  4889. class="cmtt-8">&#x00A0;</span><span
  4890. class="cmtt-8">&#x00A0;comment[1]="TITLE=the</span><span
  4891. class="cmtt-8">&#x00A0;sound</span><span
  4892. class="cmtt-8">&#x00A0;of</span><span
  4893. class="cmtt-8">&#x00A0;Vorbis";</span>
  4894. </div>
  4895. </div>
  4896. <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (&#8217;=&#8217;)
  4897. excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
  4898. ASCII 0x61 through 0x7A inclusive (characters a-z).
  4899. <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (&#8217;=&#8217;); this equals sign is used to
  4900. terminate the field name.
  4901. <!--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
  4902. field.
  4903. <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a
  4904. id="x1-860005.2.2"></a><span
  4905. class="cmbx-12">Field names</span></span>
  4906. Below is a proposed, minimal list of standard field names with a description of intended use. No
  4907. single or group of field names is mandatory; a comment header may contain one, all or none of
  4908. the names in this list.
  4909. <!--l. 99--><p class="noindent" >
  4910. <dl class="description"><dt class="description">
  4911. <span
  4912. class="cmssbx-10x-x-120">TITLE</span> </dt><dd
  4913. class="description">Track/Work name
  4914. </dd><dt class="description">
  4915. <span
  4916. class="cmssbx-10x-x-120">VERSION</span> </dt><dd
  4917. class="description">The version field may be used to differentiate multiple versions of the same
  4918. track title in a single collection. (e.g. remix info)
  4919. </dd><dt class="description">
  4920. <span
  4921. class="cmssbx-10x-x-120">ALBUM</span> </dt><dd
  4922. class="description">The collection name to which this track belongs
  4923. </dd><dt class="description">
  4924. <span
  4925. class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd
  4926. class="description">The track number of this piece if part of a specific larger collection or
  4927. album
  4928. </dd><dt class="description">
  4929. <span
  4930. class="cmssbx-10x-x-120">ARTIST</span> </dt><dd
  4931. class="description">The artist generally considered responsible for the work. In popular music this is
  4932. usually the performing band or singer. For classical music it would be the composer.
  4933. For an audio book it would be the author of the original text.
  4934. </dd><dt class="description">
  4935. <span
  4936. class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd
  4937. class="description">The artist(s) who performed the work. In classical music this would be the
  4938. conductor, orchestra, soloists. In an audio book it would be the actor who did the
  4939. reading. In popular music this is typically the same as the ARTIST and is omitted.
  4940. </dd><dt class="description">
  4941. <span
  4942. class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd
  4943. class="description">Copyright attribution, e.g., &#8217;2001 Nobody&#8217;s Band&#8217; or &#8217;1999 Jack Moffitt&#8217;
  4944. </dd><dt class="description">
  4945. <span
  4946. class="cmssbx-10x-x-120">LICENSE</span> </dt><dd
  4947. class="description">License information, eg, &#8217;All Rights Reserved&#8217;, &#8217;Any Use Permitted&#8217;, a URL to
  4948. a license such as a Creative
  4949. Commons license (&#8221;www.creativecommons.org/blahblah/license.html&#8221;) or the EFF
  4950. Open Audio License (&#8217;distributed under the terms of the Open Audio License. see
  4951. http://www.eff.org/IP/Open_licenses/eff_oal.html for details&#8217;), etc.
  4952. </dd><dt class="description">
  4953. <span
  4954. class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd
  4955. class="description">Name of the organization producing the track (i.e. the &#8217;record label&#8217;)
  4956. </dd><dt class="description">
  4957. <span
  4958. class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd
  4959. class="description">A short text description of the contents
  4960. </dd><dt class="description">
  4961. <span
  4962. class="cmssbx-10x-x-120">GENRE</span> </dt><dd
  4963. class="description">A short text indication of music genre
  4964. </dd><dt class="description">
  4965. <span
  4966. class="cmssbx-10x-x-120">DATE</span> </dt><dd
  4967. class="description">Date the track was recorded
  4968. </dd><dt class="description">
  4969. <span
  4970. class="cmssbx-10x-x-120">LOCATION</span> </dt><dd
  4971. class="description">Location where track was recorded
  4972. </dd><dt class="description">
  4973. <span
  4974. class="cmssbx-10x-x-120">CONTACT</span> </dt><dd
  4975. class="description">Contact information for the creators or distributors of the track. This could
  4976. be a URL, an email address, the physical address of the producing label.
  4977. </dd><dt class="description">
  4978. <span
  4979. class="cmssbx-10x-x-120">ISRC</span> </dt><dd
  4980. class="description">International Standard Recording Code for the track; see <a
  4981. href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
  4982. more information on ISRC numbers.
  4983. </dd></dl>
  4984. <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a
  4985. id="x1-870005.2.2"></a><span
  4986. class="cmbx-12">Implications</span></span>
  4987. Field names should not be &#8217;internationalized&#8217;; this is a concession to simplicity not
  4988. an attempt to exclude the majority of the world that doesn&#8217;t speak English. Field
  4989. <span
  4990. class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
  4991. language.
  4992. <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
  4993. the field name is bounded in a known way. Thus we also have the length of the field
  4994. contents.
  4995. <!--l. 170--><p class="noindent" >Individual &#8217;vendors&#8217; may use non-standard field names within reason. The proper
  4996. use of comment fields should be clear through context at this point. Abuse will be
  4997. discouraged.
  4998. <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to &#8217;nonstandard&#8217; field names. Vendors should make some effort
  4999. to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
  5000. tags here to help with standardization.
  5001. <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
  5002. example, assume a track was recorded by three well know artists; the following is permissible,
  5003. and encouraged:
  5004. <!--l. 183--><p class="noindent" >
  5005. <div class="quote">
  5006. <!--l. 184--><p class="noindent" >
  5007. <div class="fancyvrb" id="fancyvrb25">
  5008. <a
  5009. id="x1-87002r1"></a><span
  5010. class="cmr-6">1</span><span
  5011. class="cmtt-8">&#x00A0;</span><span
  5012. class="cmtt-8">&#x00A0;ARTIST=Dizzy</span><span
  5013. class="cmtt-8">&#x00A0;Gillespie</span>
  5014. <br class="fancyvrb" /><a
  5015. id="x1-87004r2"></a><span
  5016. class="cmr-6">2</span><span
  5017. class="cmtt-8">&#x00A0;</span><span
  5018. class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
  5019. class="cmtt-8">&#x00A0;Rollins</span>
  5020. <br class="fancyvrb" /><a
  5021. id="x1-87006r3"></a><span
  5022. class="cmr-6">3</span><span
  5023. class="cmtt-8">&#x00A0;</span><span
  5024. class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
  5025. class="cmtt-8">&#x00A0;Stitt</span>
  5026. </div>
  5027. </div>
  5028. <!--l. 197--><p class="noindent" >
  5029. <h5 class="subsubsectionHead"><span class="titlemark">5.2.3. </span> <a
  5030. id="x1-880005.2.3"></a>Encoding</h5>
  5031. <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
  5032. first bitstream header packet, it is not generally the only packet on the second page and may not
  5033. be restricted to within the second bitstream page. The length of the comment header packet is
  5034. (practically) unbounded. The comment header packet is not optional; it must be present in the
  5035. bitstream even if it is effectively empty.
  5036. <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg&#8217;s standard bitstream mapping which
  5037. renders least-significant-bit of the word to be coded into the least significant available bit of the
  5038. current bitstream octet first):
  5039. <!--l. 213--><p class="noindent" >
  5040. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  5041. 1. </dt><dd
  5042. class="enumerate-enumitem">Vendor string length (32 bit unsigned quantity specifying number of octets)
  5043. </dd><dt class="enumerate-enumitem">
  5044. 2. </dt><dd
  5045. class="enumerate-enumitem">Vendor string ([vendor string length] octets coded from beginning of string to end of
  5046. string, not null terminated)
  5047. </dd><dt class="enumerate-enumitem">
  5048. 3. </dt><dd
  5049. class="enumerate-enumitem">Number of comment fields (32 bit unsigned quantity specifying number of fields)
  5050. </dd><dt class="enumerate-enumitem">
  5051. 4. </dt><dd
  5052. class="enumerate-enumitem">Comment field 0 length (if [Number of comment fields] <span
  5053. class="cmmi-12">&#x003E; </span>0; 32 bit unsigned quantity
  5054. specifying number of octets)
  5055. </dd><dt class="enumerate-enumitem">
  5056. 5. </dt><dd
  5057. class="enumerate-enumitem">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
  5058. end of string, not null terminated)
  5059. </dd><dt class="enumerate-enumitem">
  5060. 6. </dt><dd
  5061. class="enumerate-enumitem">Comment field 1 length (if [Number of comment fields] <span
  5062. class="cmmi-12">&#x003E; </span>1...)...
  5063. </dd></dl>
  5064. <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
  5065. in <span
  5066. class="cmtt-12">vorbis/lib/info.c</span>, <span
  5067. class="cmtt-12">_vorbis_pack_comment() </span>and <span
  5068. class="cmtt-12">_vorbis_unpack_comment()</span>.
  5069. <h3 class="sectionHead"><span class="titlemark">6. </span> <a
  5070. id="x1-890006"></a>Floor type 0 setup and decode</h3>
  5071. <!--l. 6--><p class="noindent" >
  5072. <h4 class="subsectionHead"><span class="titlemark">6.1. </span> <a
  5073. id="x1-900006.1"></a>Overview</h4>
  5074. <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
  5075. Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
  5076. response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
  5077. impulse response filter as would be used in linear predictive coding; LSP representation may be
  5078. converted to LPC representation and vice-versa.
  5079. <!--l. 18--><p class="noindent" >
  5080. <h4 class="subsectionHead"><span class="titlemark">6.2. </span> <a
  5081. id="x1-910006.2"></a>Floor 0 format</h4>
  5082. <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
  5083. coding/decoding the LSP filter coefficient values used by each frame.
  5084. <!--l. 24--><p class="noindent" >
  5085. <h5 class="subsubsectionHead"><span class="titlemark">6.2.1. </span> <a
  5086. id="x1-920006.2.1"></a>header decode</h5>
  5087. <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
  5088. packet). configuration decode proceeds as follows:
  5089. <!--l. 30--><p class="noindent" >
  5090. <div class="fancyvrb" id="fancyvrb26">
  5091. <a
  5092. id="x1-92002r1"></a><span
  5093. class="cmr-6">1</span><span
  5094. class="cmtt-8">&#x00A0;</span><span
  5095. class="cmtt-8">&#x00A0;</span><span
  5096. class="cmtt-8">&#x00A0;</span><span
  5097. class="cmtt-8">&#x00A0;1)</span><span
  5098. class="cmtt-8">&#x00A0;[floor0_order]</span><span
  5099. class="cmtt-8">&#x00A0;=</span><span
  5100. class="cmtt-8">&#x00A0;read</span><span
  5101. class="cmtt-8">&#x00A0;an</span><span
  5102. class="cmtt-8">&#x00A0;unsigned</span><span
  5103. class="cmtt-8">&#x00A0;integer</span><span
  5104. class="cmtt-8">&#x00A0;of</span><span
  5105. class="cmtt-8">&#x00A0;8</span><span
  5106. class="cmtt-8">&#x00A0;bits</span>
  5107. <br class="fancyvrb" /><a
  5108. id="x1-92004r2"></a><span
  5109. class="cmr-6">2</span><span
  5110. class="cmtt-8">&#x00A0;</span><span
  5111. class="cmtt-8">&#x00A0;</span><span
  5112. class="cmtt-8">&#x00A0;</span><span
  5113. class="cmtt-8">&#x00A0;2)</span><span
  5114. class="cmtt-8">&#x00A0;[floor0_rate]</span><span
  5115. class="cmtt-8">&#x00A0;=</span><span
  5116. class="cmtt-8">&#x00A0;read</span><span
  5117. class="cmtt-8">&#x00A0;an</span><span
  5118. class="cmtt-8">&#x00A0;unsigned</span><span
  5119. class="cmtt-8">&#x00A0;integer</span><span
  5120. class="cmtt-8">&#x00A0;of</span><span
  5121. class="cmtt-8">&#x00A0;16</span><span
  5122. class="cmtt-8">&#x00A0;bits</span>
  5123. <br class="fancyvrb" /><a
  5124. id="x1-92006r3"></a><span
  5125. class="cmr-6">3</span><span
  5126. class="cmtt-8">&#x00A0;</span><span
  5127. class="cmtt-8">&#x00A0;</span><span
  5128. class="cmtt-8">&#x00A0;</span><span
  5129. class="cmtt-8">&#x00A0;3)</span><span
  5130. class="cmtt-8">&#x00A0;[floor0_bark_map_size]</span><span
  5131. class="cmtt-8">&#x00A0;=</span><span
  5132. class="cmtt-8">&#x00A0;read</span><span
  5133. class="cmtt-8">&#x00A0;an</span><span
  5134. class="cmtt-8">&#x00A0;unsigned</span><span
  5135. class="cmtt-8">&#x00A0;integer</span><span
  5136. class="cmtt-8">&#x00A0;of</span><span
  5137. class="cmtt-8">&#x00A0;16</span><span
  5138. class="cmtt-8">&#x00A0;bits</span>
  5139. <br class="fancyvrb" /><a
  5140. id="x1-92008r4"></a><span
  5141. class="cmr-6">4</span><span
  5142. class="cmtt-8">&#x00A0;</span><span
  5143. class="cmtt-8">&#x00A0;</span><span
  5144. class="cmtt-8">&#x00A0;</span><span
  5145. class="cmtt-8">&#x00A0;4)</span><span
  5146. class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
  5147. class="cmtt-8">&#x00A0;=</span><span
  5148. class="cmtt-8">&#x00A0;read</span><span
  5149. class="cmtt-8">&#x00A0;an</span><span
  5150. class="cmtt-8">&#x00A0;unsigned</span><span
  5151. class="cmtt-8">&#x00A0;integer</span><span
  5152. class="cmtt-8">&#x00A0;of</span><span
  5153. class="cmtt-8">&#x00A0;six</span><span
  5154. class="cmtt-8">&#x00A0;bits</span>
  5155. <br class="fancyvrb" /><a
  5156. id="x1-92010r5"></a><span
  5157. class="cmr-6">5</span><span
  5158. class="cmtt-8">&#x00A0;</span><span
  5159. class="cmtt-8">&#x00A0;</span><span
  5160. class="cmtt-8">&#x00A0;</span><span
  5161. class="cmtt-8">&#x00A0;5)</span><span
  5162. class="cmtt-8">&#x00A0;[floor0_amplitude_offset]</span><span
  5163. class="cmtt-8">&#x00A0;=</span><span
  5164. class="cmtt-8">&#x00A0;read</span><span
  5165. class="cmtt-8">&#x00A0;an</span><span
  5166. class="cmtt-8">&#x00A0;unsigned</span><span
  5167. class="cmtt-8">&#x00A0;integer</span><span
  5168. class="cmtt-8">&#x00A0;of</span><span
  5169. class="cmtt-8">&#x00A0;eight</span><span
  5170. class="cmtt-8">&#x00A0;bits</span>
  5171. <br class="fancyvrb" /><a
  5172. id="x1-92012r6"></a><span
  5173. class="cmr-6">6</span><span
  5174. class="cmtt-8">&#x00A0;</span><span
  5175. class="cmtt-8">&#x00A0;</span><span
  5176. class="cmtt-8">&#x00A0;</span><span
  5177. class="cmtt-8">&#x00A0;6)</span><span
  5178. class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
  5179. class="cmtt-8">&#x00A0;=</span><span
  5180. class="cmtt-8">&#x00A0;read</span><span
  5181. class="cmtt-8">&#x00A0;an</span><span
  5182. class="cmtt-8">&#x00A0;unsigned</span><span
  5183. class="cmtt-8">&#x00A0;integer</span><span
  5184. class="cmtt-8">&#x00A0;of</span><span
  5185. class="cmtt-8">&#x00A0;four</span><span
  5186. class="cmtt-8">&#x00A0;bits</span><span
  5187. class="cmtt-8">&#x00A0;and</span><span
  5188. class="cmtt-8">&#x00A0;add</span><span
  5189. class="cmtt-8">&#x00A0;1</span>
  5190. <br class="fancyvrb" /><a
  5191. id="x1-92014r7"></a><span
  5192. class="cmr-6">7</span><span
  5193. class="cmtt-8">&#x00A0;</span><span
  5194. class="cmtt-8">&#x00A0;</span><span
  5195. class="cmtt-8">&#x00A0;</span><span
  5196. class="cmtt-8">&#x00A0;7)</span><span
  5197. class="cmtt-8">&#x00A0;array</span><span
  5198. class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
  5199. class="cmtt-8">&#x00A0;=</span><span
  5200. class="cmtt-8">&#x00A0;read</span><span
  5201. class="cmtt-8">&#x00A0;a</span><span
  5202. class="cmtt-8">&#x00A0;list</span><span
  5203. class="cmtt-8">&#x00A0;of</span><span
  5204. class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
  5205. class="cmtt-8">&#x00A0;unsigned</span><span
  5206. class="cmtt-8">&#x00A0;integers</span><span
  5207. class="cmtt-8">&#x00A0;of</span><span
  5208. class="cmtt-8">&#x00A0;eight</span><span
  5209. class="cmtt-8">&#x00A0;bits</span><span
  5210. class="cmtt-8">&#x00A0;each;</span>
  5211. </div>
  5212. <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
  5213. In addition, any element of the array <span
  5214. class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
  5215. codebook number for this bitstream is an error condition that also renders the stream
  5216. undecodable.
  5217. <!--l. 48--><p class="noindent" >
  5218. <h5 class="subsubsectionHead"><span class="titlemark">6.2.2. </span> <a
  5219. id="x1-930006.2.2"></a>packet decode</h5>
  5220. <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
  5221. amplitude and <span
  5222. class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
  5223. computing the floor curve, which is defined as the frequency response of the decoded LSP
  5224. filter.
  5225. <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
  5226. <div class="fancyvrb" id="fancyvrb27">
  5227. <a
  5228. id="x1-93002r1"></a><span
  5229. class="cmr-6">1</span><span
  5230. class="cmtt-8">&#x00A0;</span><span
  5231. class="cmtt-8">&#x00A0;</span><span
  5232. class="cmtt-8">&#x00A0;</span><span
  5233. class="cmtt-8">&#x00A0;1)</span><span
  5234. class="cmtt-8">&#x00A0;[amplitude]</span><span
  5235. class="cmtt-8">&#x00A0;=</span><span
  5236. class="cmtt-8">&#x00A0;read</span><span
  5237. class="cmtt-8">&#x00A0;an</span><span
  5238. class="cmtt-8">&#x00A0;unsigned</span><span
  5239. class="cmtt-8">&#x00A0;integer</span><span
  5240. class="cmtt-8">&#x00A0;of</span><span
  5241. class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
  5242. class="cmtt-8">&#x00A0;bits</span>
  5243. <br class="fancyvrb" /><a
  5244. id="x1-93004r2"></a><span
  5245. class="cmr-6">2</span><span
  5246. class="cmtt-8">&#x00A0;</span><span
  5247. class="cmtt-8">&#x00A0;</span><span
  5248. class="cmtt-8">&#x00A0;</span><span
  5249. class="cmtt-8">&#x00A0;2)</span><span
  5250. class="cmtt-8">&#x00A0;if</span><span
  5251. class="cmtt-8">&#x00A0;(</span><span
  5252. class="cmtt-8">&#x00A0;[amplitude]</span><span
  5253. class="cmtt-8">&#x00A0;is</span><span
  5254. class="cmtt-8">&#x00A0;greater</span><span
  5255. class="cmtt-8">&#x00A0;than</span><span
  5256. class="cmtt-8">&#x00A0;zero</span><span
  5257. class="cmtt-8">&#x00A0;)</span><span
  5258. class="cmtt-8">&#x00A0;</span><span
  5259. class="cmsy-8">{</span>
  5260. <br class="fancyvrb" /><a
  5261. id="x1-93006r3"></a><span
  5262. class="cmr-6">3</span><span
  5263. class="cmtt-8">&#x00A0;</span><span
  5264. class="cmtt-8">&#x00A0;</span><span
  5265. class="cmtt-8">&#x00A0;</span><span
  5266. class="cmtt-8">&#x00A0;</span><span
  5267. class="cmtt-8">&#x00A0;</span><span
  5268. class="cmtt-8">&#x00A0;</span><span
  5269. class="cmtt-8">&#x00A0;</span><span
  5270. class="cmtt-8">&#x00A0;</span><span
  5271. class="cmtt-8">&#x00A0;3)</span><span
  5272. class="cmtt-8">&#x00A0;[coefficients]</span><span
  5273. class="cmtt-8">&#x00A0;is</span><span
  5274. class="cmtt-8">&#x00A0;an</span><span
  5275. class="cmtt-8">&#x00A0;empty,</span><span
  5276. class="cmtt-8">&#x00A0;zero</span><span
  5277. class="cmtt-8">&#x00A0;length</span><span
  5278. class="cmtt-8">&#x00A0;vector</span>
  5279. <br class="fancyvrb" /><a
  5280. id="x1-93008r4"></a><span
  5281. class="cmr-6">4</span><span
  5282. class="cmtt-8">&#x00A0;</span><span
  5283. class="cmtt-8">&#x00A0;</span><span
  5284. class="cmtt-8">&#x00A0;</span><span
  5285. class="cmtt-8">&#x00A0;</span><span
  5286. class="cmtt-8">&#x00A0;</span><span
  5287. class="cmtt-8">&#x00A0;</span><span
  5288. class="cmtt-8">&#x00A0;</span><span
  5289. class="cmtt-8">&#x00A0;</span><span
  5290. class="cmtt-8">&#x00A0;4)</span><span
  5291. class="cmtt-8">&#x00A0;[booknumber]</span><span
  5292. class="cmtt-8">&#x00A0;=</span><span
  5293. class="cmtt-8">&#x00A0;read</span><span
  5294. class="cmtt-8">&#x00A0;an</span><span
  5295. class="cmtt-8">&#x00A0;unsigned</span><span
  5296. class="cmtt-8">&#x00A0;integer</span><span
  5297. class="cmtt-8">&#x00A0;of</span><span
  5298. class="cmtt-8">&#x00A0;</span><a
  5299. href="#x1-1170009.2.1"><span
  5300. class="cmtt-8">ilog</span></a><span
  5301. class="cmtt-8">(</span><span
  5302. class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
  5303. class="cmtt-8">&#x00A0;)</span><span
  5304. class="cmtt-8">&#x00A0;bits</span>
  5305. <br class="fancyvrb" /><a
  5306. id="x1-93010r5"></a><span
  5307. class="cmr-6">5</span><span
  5308. class="cmtt-8">&#x00A0;</span><span
  5309. class="cmtt-8">&#x00A0;</span><span
  5310. class="cmtt-8">&#x00A0;</span><span
  5311. class="cmtt-8">&#x00A0;</span><span
  5312. class="cmtt-8">&#x00A0;</span><span
  5313. class="cmtt-8">&#x00A0;</span><span
  5314. class="cmtt-8">&#x00A0;</span><span
  5315. class="cmtt-8">&#x00A0;</span><span
  5316. class="cmtt-8">&#x00A0;5)</span><span
  5317. class="cmtt-8">&#x00A0;if</span><span
  5318. class="cmtt-8">&#x00A0;(</span><span
  5319. class="cmtt-8">&#x00A0;[booknumber]</span><span
  5320. class="cmtt-8">&#x00A0;is</span><span
  5321. class="cmtt-8">&#x00A0;greater</span><span
  5322. class="cmtt-8">&#x00A0;than</span><span
  5323. class="cmtt-8">&#x00A0;the</span><span
  5324. class="cmtt-8">&#x00A0;highest</span><span
  5325. class="cmtt-8">&#x00A0;number</span><span
  5326. class="cmtt-8">&#x00A0;decode</span><span
  5327. class="cmtt-8">&#x00A0;codebook</span><span
  5328. class="cmtt-8">&#x00A0;)</span><span
  5329. class="cmtt-8">&#x00A0;then</span><span
  5330. class="cmtt-8">&#x00A0;packet</span><span
  5331. class="cmtt-8">&#x00A0;is</span><span
  5332. class="cmtt-8">&#x00A0;undecodable</span>
  5333. <br class="fancyvrb" /><a
  5334. id="x1-93012r6"></a><span
  5335. class="cmr-6">6</span><span
  5336. class="cmtt-8">&#x00A0;</span><span
  5337. class="cmtt-8">&#x00A0;</span><span
  5338. class="cmtt-8">&#x00A0;</span><span
  5339. class="cmtt-8">&#x00A0;</span><span
  5340. class="cmtt-8">&#x00A0;</span><span
  5341. class="cmtt-8">&#x00A0;</span><span
  5342. class="cmtt-8">&#x00A0;</span><span
  5343. class="cmtt-8">&#x00A0;</span><span
  5344. class="cmtt-8">&#x00A0;6)</span><span
  5345. class="cmtt-8">&#x00A0;[last]</span><span
  5346. class="cmtt-8">&#x00A0;=</span><span
  5347. class="cmtt-8">&#x00A0;zero;</span>
  5348. <br class="fancyvrb" /><a
  5349. id="x1-93014r7"></a><span
  5350. class="cmr-6">7</span><span
  5351. class="cmtt-8">&#x00A0;</span><span
  5352. class="cmtt-8">&#x00A0;</span><span
  5353. class="cmtt-8">&#x00A0;</span><span
  5354. class="cmtt-8">&#x00A0;</span><span
  5355. class="cmtt-8">&#x00A0;</span><span
  5356. class="cmtt-8">&#x00A0;</span><span
  5357. class="cmtt-8">&#x00A0;</span><span
  5358. class="cmtt-8">&#x00A0;</span><span
  5359. class="cmtt-8">&#x00A0;7)</span><span
  5360. class="cmtt-8">&#x00A0;vector</span><span
  5361. class="cmtt-8">&#x00A0;[temp_vector]</span><span
  5362. class="cmtt-8">&#x00A0;=</span><span
  5363. class="cmtt-8">&#x00A0;read</span><span
  5364. class="cmtt-8">&#x00A0;vector</span><span
  5365. class="cmtt-8">&#x00A0;from</span><span
  5366. class="cmtt-8">&#x00A0;bitstream</span><span
  5367. class="cmtt-8">&#x00A0;using</span><span
  5368. class="cmtt-8">&#x00A0;codebook</span><span
  5369. class="cmtt-8">&#x00A0;number</span><span
  5370. class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
  5371. class="cmtt-8">&#x00A0;element</span><span
  5372. class="cmtt-8">&#x00A0;[booknumber]</span><span
  5373. class="cmtt-8">&#x00A0;in</span><span
  5374. class="cmtt-8">&#x00A0;VQ</span><span
  5375. class="cmtt-8">&#x00A0;context.</span>
  5376. <br class="fancyvrb" /><a
  5377. id="x1-93016r8"></a><span
  5378. class="cmr-6">8</span><span
  5379. class="cmtt-8">&#x00A0;</span><span
  5380. class="cmtt-8">&#x00A0;</span><span
  5381. class="cmtt-8">&#x00A0;</span><span
  5382. class="cmtt-8">&#x00A0;</span><span
  5383. class="cmtt-8">&#x00A0;</span><span
  5384. class="cmtt-8">&#x00A0;</span><span
  5385. class="cmtt-8">&#x00A0;</span><span
  5386. class="cmtt-8">&#x00A0;</span><span
  5387. class="cmtt-8">&#x00A0;8)</span><span
  5388. class="cmtt-8">&#x00A0;add</span><span
  5389. class="cmtt-8">&#x00A0;the</span><span
  5390. class="cmtt-8">&#x00A0;scalar</span><span
  5391. class="cmtt-8">&#x00A0;value</span><span
  5392. class="cmtt-8">&#x00A0;[last]</span><span
  5393. class="cmtt-8">&#x00A0;to</span><span
  5394. class="cmtt-8">&#x00A0;each</span><span
  5395. class="cmtt-8">&#x00A0;scalar</span><span
  5396. class="cmtt-8">&#x00A0;in</span><span
  5397. class="cmtt-8">&#x00A0;vector</span><span
  5398. class="cmtt-8">&#x00A0;[temp_vector]</span>
  5399. <br class="fancyvrb" /><a
  5400. id="x1-93018r9"></a><span
  5401. class="cmr-6">9</span><span
  5402. class="cmtt-8">&#x00A0;</span><span
  5403. class="cmtt-8">&#x00A0;</span><span
  5404. class="cmtt-8">&#x00A0;</span><span
  5405. class="cmtt-8">&#x00A0;</span><span
  5406. class="cmtt-8">&#x00A0;</span><span
  5407. class="cmtt-8">&#x00A0;</span><span
  5408. class="cmtt-8">&#x00A0;</span><span
  5409. class="cmtt-8">&#x00A0;</span><span
  5410. class="cmtt-8">&#x00A0;9)</span><span
  5411. class="cmtt-8">&#x00A0;[last]</span><span
  5412. class="cmtt-8">&#x00A0;=</span><span
  5413. class="cmtt-8">&#x00A0;the</span><span
  5414. class="cmtt-8">&#x00A0;value</span><span
  5415. class="cmtt-8">&#x00A0;of</span><span
  5416. class="cmtt-8">&#x00A0;the</span><span
  5417. class="cmtt-8">&#x00A0;last</span><span
  5418. class="cmtt-8">&#x00A0;scalar</span><span
  5419. class="cmtt-8">&#x00A0;in</span><span
  5420. class="cmtt-8">&#x00A0;vector</span><span
  5421. class="cmtt-8">&#x00A0;[temp_vector]</span>
  5422. <br class="fancyvrb" /><a
  5423. id="x1-93020r10"></a><span
  5424. class="cmr-6">10</span><span
  5425. class="cmtt-8">&#x00A0;</span><span
  5426. class="cmtt-8">&#x00A0;</span><span
  5427. class="cmtt-8">&#x00A0;</span><span
  5428. class="cmtt-8">&#x00A0;</span><span
  5429. class="cmtt-8">&#x00A0;</span><span
  5430. class="cmtt-8">&#x00A0;</span><span
  5431. class="cmtt-8">&#x00A0;</span><span
  5432. class="cmtt-8">&#x00A0;10)</span><span
  5433. class="cmtt-8">&#x00A0;concatenate</span><span
  5434. class="cmtt-8">&#x00A0;[temp_vector]</span><span
  5435. class="cmtt-8">&#x00A0;onto</span><span
  5436. class="cmtt-8">&#x00A0;the</span><span
  5437. class="cmtt-8">&#x00A0;end</span><span
  5438. class="cmtt-8">&#x00A0;of</span><span
  5439. class="cmtt-8">&#x00A0;the</span><span
  5440. class="cmtt-8">&#x00A0;[coefficients]</span><span
  5441. class="cmtt-8">&#x00A0;vector</span>
  5442. <br class="fancyvrb" /><a
  5443. id="x1-93022r11"></a><span
  5444. class="cmr-6">11</span><span
  5445. class="cmtt-8">&#x00A0;</span><span
  5446. class="cmtt-8">&#x00A0;</span><span
  5447. class="cmtt-8">&#x00A0;</span><span
  5448. class="cmtt-8">&#x00A0;</span><span
  5449. class="cmtt-8">&#x00A0;</span><span
  5450. class="cmtt-8">&#x00A0;</span><span
  5451. class="cmtt-8">&#x00A0;</span><span
  5452. class="cmtt-8">&#x00A0;11)</span><span
  5453. class="cmtt-8">&#x00A0;if</span><span
  5454. class="cmtt-8">&#x00A0;(length</span><span
  5455. class="cmtt-8">&#x00A0;of</span><span
  5456. class="cmtt-8">&#x00A0;vector</span><span
  5457. class="cmtt-8">&#x00A0;[coefficients]</span><span
  5458. class="cmtt-8">&#x00A0;is</span><span
  5459. class="cmtt-8">&#x00A0;less</span><span
  5460. class="cmtt-8">&#x00A0;than</span><span
  5461. class="cmtt-8">&#x00A0;[floor0_order],</span><span
  5462. class="cmtt-8">&#x00A0;continue</span><span
  5463. class="cmtt-8">&#x00A0;at</span><span
  5464. class="cmtt-8">&#x00A0;step</span><span
  5465. class="cmtt-8">&#x00A0;6</span>
  5466. <br class="fancyvrb" /><a
  5467. id="x1-93024r12"></a><span
  5468. class="cmr-6">12</span><span
  5469. class="cmtt-8">&#x00A0;</span><span
  5470. class="cmtt-8">&#x00A0;</span>
  5471. <br class="fancyvrb" /><a
  5472. id="x1-93026r13"></a><span
  5473. class="cmr-6">13</span><span
  5474. class="cmtt-8">&#x00A0;</span><span
  5475. class="cmtt-8">&#x00A0;</span><span
  5476. class="cmtt-8">&#x00A0;</span><span
  5477. class="cmtt-8">&#x00A0;</span><span
  5478. class="cmtt-8">&#x00A0;</span><span
  5479. class="cmtt-8">&#x00A0;</span><span
  5480. class="cmtt-8">&#x00A0;</span><span
  5481. class="cmsy-8">}</span>
  5482. <br class="fancyvrb" /><a
  5483. id="x1-93028r14"></a><span
  5484. class="cmr-6">14</span><span
  5485. class="cmtt-8">&#x00A0;</span><span
  5486. class="cmtt-8">&#x00A0;</span>
  5487. <br class="fancyvrb" /><a
  5488. id="x1-93030r15"></a><span
  5489. class="cmr-6">15</span><span
  5490. class="cmtt-8">&#x00A0;</span><span
  5491. class="cmtt-8">&#x00A0;</span><span
  5492. class="cmtt-8">&#x00A0;12)</span><span
  5493. class="cmtt-8">&#x00A0;done.</span>
  5494. <br class="fancyvrb" /><a
  5495. id="x1-93032r16"></a><span
  5496. class="cmr-6">16</span><span
  5497. class="cmtt-8">&#x00A0;</span><span
  5498. class="cmtt-8">&#x00A0;</span>
  5499. </div>
  5500. <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
  5501. <ul class="itemize1">
  5502. <li class="itemize">An <span
  5503. class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
  5504. is unused in this frame (the output of the channel will be all-zeroes in synthesis).
  5505. Several later stages of decode don&#8217;t occur for an unused channel.
  5506. </li>
  5507. <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
  5508. if end-of-packet is reached during any read operation above, floor decode is to return
  5509. &#8217;unused&#8217; status as if the <span
  5510. class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
  5511. </li>
  5512. <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a
  5513. href="#x1-1170009.2.1">ilog</a>(
  5514. <span
  5515. class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
  5516. and values greater than the maximum possible book value are reserved.
  5517. </li>
  5518. <li class="itemize">The number of scalars read into the vector <span
  5519. class="cmtt-12">[coefficients] </span>may be greater
  5520. than <span
  5521. class="cmtt-12">[floor0_order]</span>, the number actually required for curve computation. For
  5522. example, if the VQ codebook used for the floor currently being decoded has a
  5523. <span
  5524. class="cmtt-12">[codebook_dimensions] </span>value of three and <span
  5525. class="cmtt-12">[floor0_order] </span>is ten, the only way to
  5526. fill all the needed scalars in <span
  5527. class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
  5528. as four vectors of three scalars each. This is not an error condition, and care must
  5529. be taken not to allow a buffer overflow in decode. The extra values are not used and
  5530. may be ignored or discarded.</li></ul>
  5531. <!--l. 104--><p class="noindent" >
  5532. <h5 class="subsubsectionHead"><span class="titlemark">6.2.3. </span> <a
  5533. id="x1-940006.2.3"></a>curve computation</h5>
  5534. <!--l. 106--><p class="noindent" >Given an <span
  5535. class="cmtt-12">[amplitude] </span>integer and <span
  5536. class="cmtt-12">[coefficients] </span>vector from packet decode as well as
  5537. the [floor0_order], [floor0_rate], [floor0_bark_map_size], [floor0_amplitude_bits] and
  5538. [floor0_amplitude_offset] values from floor setup, and an output vector size <span
  5539. class="cmtt-12">[n] </span>specified by the
  5540. decode process, we compute a floor output vector.
  5541. <!--l. 113--><p class="noindent" >If the value <span
  5542. class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span
  5543. class="cmtt-12">[n] </span>vector with all-zero
  5544. scalars. Otherwise, begin by assuming the following definitions for the given vector to be
  5545. synthesized:
  5546. <center class="par-math-display" >
  5547. <img
  5548. src="Vorbis_I_spec7x.png" alt=" {
  5549. min (floor0_bark_map_size &minus; 1,foobar ) for i &isin; [0,n &minus; 1 ]
  5550. mapi = &minus; 1 for i = n
  5551. " class="par-math-display" ></center>
  5552. <!--l. 128--><p class="nopar" >
  5553. <!--l. 130--><p class="noindent" >where
  5554. <center class="par-math-display" >
  5555. <img
  5556. src="Vorbis_I_spec8x.png" alt=" &lfloor; &rfloor;
  5557. (floor0_rate &sdot; i) floor0_bark_map_size
  5558. foobar = bark -------2n------- &sdot;-bark(.5 &sdot; floor0_rate-)
  5559. " class="par-math-display" ></center>
  5560. <!--l. 137--><p class="nopar" >
  5561. <!--l. 139--><p class="noindent" >and
  5562. <center class="par-math-display" >
  5563. <img
  5564. src="Vorbis_I_spec9x.png" alt=" 2
  5565. bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x + .0001x )
  5566. " class="par-math-display" ></center>
  5567. <!--l. 143--><p class="nopar" >
  5568. <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
  5569. result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
  5570. LSP curve <span
  5571. class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
  5572. step:
  5573. <!--l. 151--><p class="noindent" >
  5574. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  5575. 1. </dt><dd
  5576. class="enumerate-enumitem"><span
  5577. class="cmtt-12">[i] </span>= 0
  5578. </dd><dt class="enumerate-enumitem">
  5579. 2. </dt><dd
  5580. class="enumerate-enumitem"><span
  5581. class="cmtt-12">[</span><span
  5582. class="cmmi-12">&omega;</span><span
  5583. class="cmtt-12">] </span>= <span
  5584. class="cmmi-12">&pi; </span>* map element <span
  5585. class="cmtt-12">[i] </span>/ <span
  5586. class="cmtt-12">[floor0_bark_map_size]</span>
  5587. </dd><dt class="enumerate-enumitem">
  5588. 3. </dt><dd
  5589. class="enumerate-enumitem">if ( <span
  5590. class="cmtt-12">[floor0_order] </span>is odd )
  5591. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  5592. a) </dt><dd
  5593. class="enumerate-enumitem">calculate <span
  5594. class="cmtt-12">[p] </span>and <span
  5595. class="cmtt-12">[q] </span>according to: <div class="eqnarray">
  5596. <center class="math-display" >
  5597. <img
  5598. src="Vorbis_I_spec10x.png" alt=" floor0_order&minus;3
  5599. 2 &prod;2 2
  5600. p = (1 &minus; cos &omega;) 4(cos([coefficients ]2j+1) &minus; cos&omega; )
  5601. floor0_order&minus;1 j=0
  5602. 1 ----&prod;2----
  5603. q = -- 4(cos([coefficients ]2j) &minus; cos&omega; )2
  5604. 4 j=0
  5605. " class="math-display" ></center>
  5606. </div>
  5607. </dd></dl>
  5608. <!--l. 162--><p class="noindent" >else <span
  5609. class="cmtt-12">[floor0_order] </span>is even
  5610. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  5611. b) </dt><dd
  5612. class="enumerate-enumitem">calculate <span
  5613. class="cmtt-12">[p] </span>and <span
  5614. class="cmtt-12">[q] </span>according to: <div class="eqnarray">
  5615. <center class="math-display" >
  5616. <img
  5617. src="Vorbis_I_spec11x.png" alt=" floor0_order&minus;2
  5618. (1-&minus;-cos&omega;-) &prod;2 2
  5619. p = 2 4(cos([coefficients ]2j+1) &minus; cos&omega;)
  5620. j=0
  5621. floor0_&prod;o2rder&minus;-2
  5622. q = (1-+-cos&omega;-) 4(cos([coefficients ]2j) &minus; cos &omega;)2
  5623. 2 j=0
  5624. " class="math-display" ></center>
  5625. </div>
  5626. </dd></dl>
  5627. </dd><dt class="enumerate-enumitem">
  5628. 4. </dt><dd
  5629. class="enumerate-enumitem">calculate <span
  5630. class="cmtt-12">[linear_floor_value] </span>according to:
  5631. <center class="math-display" >
  5632. <img
  5633. src="Vorbis_I_spec12x.png" alt=" ( ( ))
  5634. exp .11512925 amplitude---&sdot; floor0_amplitute_&radic;offset---&minus; floor0_amplitude_offset
  5635. (2floor0_amplitude_bits &minus; 1) p + q
  5636. " class="math-display" ></center>
  5637. <!--l. 177--><p class="nopar" >
  5638. </dd><dt class="enumerate-enumitem">
  5639. 5. </dt><dd
  5640. class="enumerate-enumitem"><span
  5641. class="cmtt-12">[iteration_condition] </span>= map element <span
  5642. class="cmtt-12">[i]</span>
  5643. </dd><dt class="enumerate-enumitem">
  5644. 6. </dt><dd
  5645. class="enumerate-enumitem"><span
  5646. class="cmtt-12">[output] </span>element <span
  5647. class="cmtt-12">[i] </span>= <span
  5648. class="cmtt-12">[linear_floor_value]</span>
  5649. </dd><dt class="enumerate-enumitem">
  5650. 7. </dt><dd
  5651. class="enumerate-enumitem">increment <span
  5652. class="cmtt-12">[i]</span>
  5653. </dd><dt class="enumerate-enumitem">
  5654. 8. </dt><dd
  5655. class="enumerate-enumitem">if ( map element <span
  5656. class="cmtt-12">[i] </span>is equal to <span
  5657. class="cmtt-12">[iteration_condition] </span>) continue at step
  5658. 5
  5659. </dd><dt class="enumerate-enumitem">
  5660. 9. </dt><dd
  5661. class="enumerate-enumitem">if ( <span
  5662. class="cmtt-12">[i] </span>is less than <span
  5663. class="cmtt-12">[n] </span>) continue at step 2
  5664. </dd><dt class="enumerate-enumitem">
  5665. 10. </dt><dd
  5666. class="enumerate-enumitem">done</dd></dl>
  5667. <h3 class="sectionHead"><span class="titlemark">7. </span> <a
  5668. id="x1-950007"></a>Floor type 1 setup and decode</h3>
  5669. <!--l. 6--><p class="noindent" >
  5670. <h4 class="subsectionHead"><span class="titlemark">7.1. </span> <a
  5671. id="x1-960007.1"></a>Overview</h4>
  5672. <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
  5673. curve. The representation plots this curve mechanically on a linear frequency axis and a
  5674. logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham&#8217;s
  5675. algorithm.
  5676. <!--l. 16--><p class="noindent" >
  5677. <h4 class="subsectionHead"><span class="titlemark">7.2. </span> <a
  5678. id="x1-970007.2"></a>Floor 1 format</h4>
  5679. <!--l. 18--><p class="noindent" >
  5680. <h5 class="subsubsectionHead"><span class="titlemark">7.2.1. </span> <a
  5681. id="x1-980007.2.1"></a>model</h5>
  5682. <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
  5683. floor curve using iterative prediction in a process roughly equivalent to the following simplified
  5684. description:
  5685. <ul class="itemize1">
  5686. <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
  5687. where in the base case x&#x02D9;0=0 and x&#x02D9;1=[n], the full range of the spectral floor to be
  5688. computed.
  5689. </li>
  5690. <li class="itemize">the induction step chooses a point x&#x02D9;new within an existing logical line segment and
  5691. produces a y&#x02D9;new value at that point computed from the existing line&#8217;s y value at
  5692. x&#x02D9;new (as plotted by the line) and a difference value decoded from the bitstream
  5693. packet.
  5694. </li>
  5695. <li class="itemize">floor computation produces two new line segments, one running from x&#x02D9;0,y&#x02D9;0 to
  5696. 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
  5697. y&#x02D9;new represents no change to the amplitude value at x&#x02D9;new so that later refinement
  5698. is additionally bounded at x&#x02D9;new.
  5699. </li>
  5700. <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
  5701. at floor 1 initialization time. Computation is completed at the end of the x value list.
  5702. </li></ul>
  5703. <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
  5704. representing typical configuration:
  5705. <!--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
  5706. in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
  5707. 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
  5708. example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
  5709. way, beginning with the first line:
  5710. <div class="center"
  5711. >
  5712. <!--l. 59--><p class="noindent" >
  5713. <!--l. 60--><p class="noindent" ><img
  5714. src="floor1-1.png" alt="PIC"
  5715. >
  5716. <br /> <div class="caption"
  5717. ><span class="id">Figure&#x00A0;7: </span><span
  5718. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980017 -->
  5719. </div>
  5720. <!--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
  5721. and 96:
  5722. <div class="center"
  5723. >
  5724. <!--l. 67--><p class="noindent" >
  5725. <!--l. 68--><p class="noindent" ><img
  5726. src="floor1-2.png" alt="PIC"
  5727. >
  5728. <br /> <div class="caption"
  5729. ><span class="id">Figure&#x00A0;8: </span><span
  5730. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980028 -->
  5731. </div>
  5732. <!--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
  5733. further refinement. From here on, the pattern should be clear; we complete the floor computation
  5734. as follows:
  5735. <div class="center"
  5736. >
  5737. <!--l. 76--><p class="noindent" >
  5738. <!--l. 77--><p class="noindent" ><img
  5739. src="floor1-3.png" alt="PIC"
  5740. >
  5741. <br /> <div class="caption"
  5742. ><span class="id">Figure&#x00A0;9: </span><span
  5743. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-980039 -->
  5744. </div>
  5745. <div class="center"
  5746. >
  5747. <!--l. 81--><p class="noindent" >
  5748. <!--l. 82--><p class="noindent" ><img
  5749. src="floor1-4.png" alt="PIC"
  5750. >
  5751. <br /> <div class="caption"
  5752. ><span class="id">Figure&#x00A0;10: </span><span
  5753. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-9800410 -->
  5754. </div>
  5755. <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
  5756. decode, as described later. The actual algorithm splits Y value computation and line plotting
  5757. into two steps with modifications to the above algorithm to eliminate noise accumulation
  5758. through integer roundoff/truncation.
  5759. <!--l. 94--><p class="noindent" >
  5760. <h5 class="subsubsectionHead"><span class="titlemark">7.2.2. </span> <a
  5761. id="x1-990007.2.2"></a>header decode</h5>
  5762. <!--l. 96--><p class="noindent" >A list of floor X values is stored in the packet header in interleaved format (used in list order
  5763. during packet decode and synthesis). This list is split into partitions, and each partition is
  5764. assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
  5765. partition or partition class.
  5766. <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
  5767. the partition class encodes at once), a &#8217;subclass&#8217; value representing the number of
  5768. alternate entropy books the partition class may use in representing Y values, the list of
  5769. [subclass] books and a master book used to encode which alternate books were chosen
  5770. for representation in a given packet. The master/subclass mechanism is meant to be
  5771. used as a flexible representation cascade while still using codebooks only in a scalar
  5772. context.
  5773. <!--l. 112--><p class="noindent" >
  5774. <div class="fancyvrb" id="fancyvrb28">
  5775. <a
  5776. id="x1-99002r1"></a><span
  5777. class="cmr-6">1</span><span
  5778. class="cmtt-8">&#x00A0;</span><span
  5779. class="cmtt-8">&#x00A0;</span>
  5780. <br class="fancyvrb" /><a
  5781. id="x1-99004r2"></a><span
  5782. class="cmr-6">2</span><span
  5783. class="cmtt-8">&#x00A0;</span><span
  5784. class="cmtt-8">&#x00A0;</span><span
  5785. class="cmtt-8">&#x00A0;</span><span
  5786. class="cmtt-8">&#x00A0;1)</span><span
  5787. class="cmtt-8">&#x00A0;[floor1_partitions]</span><span
  5788. class="cmtt-8">&#x00A0;=</span><span
  5789. class="cmtt-8">&#x00A0;read</span><span
  5790. class="cmtt-8">&#x00A0;5</span><span
  5791. class="cmtt-8">&#x00A0;bits</span><span
  5792. class="cmtt-8">&#x00A0;as</span><span
  5793. class="cmtt-8">&#x00A0;unsigned</span><span
  5794. class="cmtt-8">&#x00A0;integer</span>
  5795. <br class="fancyvrb" /><a
  5796. id="x1-99006r3"></a><span
  5797. class="cmr-6">3</span><span
  5798. class="cmtt-8">&#x00A0;</span><span
  5799. class="cmtt-8">&#x00A0;</span><span
  5800. class="cmtt-8">&#x00A0;</span><span
  5801. class="cmtt-8">&#x00A0;2)</span><span
  5802. class="cmtt-8">&#x00A0;[maximum_class]</span><span
  5803. class="cmtt-8">&#x00A0;=</span><span
  5804. class="cmtt-8">&#x00A0;-1</span>
  5805. <br class="fancyvrb" /><a
  5806. id="x1-99008r4"></a><span
  5807. class="cmr-6">4</span><span
  5808. class="cmtt-8">&#x00A0;</span><span
  5809. class="cmtt-8">&#x00A0;</span><span
  5810. class="cmtt-8">&#x00A0;</span><span
  5811. class="cmtt-8">&#x00A0;3)</span><span
  5812. class="cmtt-8">&#x00A0;iterate</span><span
  5813. class="cmtt-8">&#x00A0;[i]</span><span
  5814. class="cmtt-8">&#x00A0;over</span><span
  5815. class="cmtt-8">&#x00A0;the</span><span
  5816. class="cmtt-8">&#x00A0;range</span><span
  5817. class="cmtt-8">&#x00A0;0</span><span
  5818. class="cmtt-8">&#x00A0;...</span><span
  5819. class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
  5820. class="cmtt-8">&#x00A0;</span><span
  5821. class="cmsy-8">{</span>
  5822. <br class="fancyvrb" /><a
  5823. id="x1-99010r5"></a><span
  5824. class="cmr-6">5</span><span
  5825. class="cmtt-8">&#x00A0;</span><span
  5826. class="cmtt-8">&#x00A0;</span>
  5827. <br class="fancyvrb" /><a
  5828. id="x1-99012r6"></a><span
  5829. class="cmr-6">6</span><span
  5830. class="cmtt-8">&#x00A0;</span><span
  5831. class="cmtt-8">&#x00A0;</span><span
  5832. class="cmtt-8">&#x00A0;</span><span
  5833. class="cmtt-8">&#x00A0;</span><span
  5834. class="cmtt-8">&#x00A0;</span><span
  5835. class="cmtt-8">&#x00A0;</span><span
  5836. class="cmtt-8">&#x00A0;</span><span
  5837. class="cmtt-8">&#x00A0;</span><span
  5838. class="cmtt-8">&#x00A0;</span><span
  5839. class="cmtt-8">&#x00A0;4)</span><span
  5840. class="cmtt-8">&#x00A0;vector</span><span
  5841. class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
  5842. class="cmtt-8">&#x00A0;element</span><span
  5843. class="cmtt-8">&#x00A0;[i]</span><span
  5844. class="cmtt-8">&#x00A0;=</span><span
  5845. class="cmtt-8">&#x00A0;read</span><span
  5846. class="cmtt-8">&#x00A0;4</span><span
  5847. class="cmtt-8">&#x00A0;bits</span><span
  5848. class="cmtt-8">&#x00A0;as</span><span
  5849. class="cmtt-8">&#x00A0;unsigned</span><span
  5850. class="cmtt-8">&#x00A0;integer</span>
  5851. <br class="fancyvrb" /><a
  5852. id="x1-99014r7"></a><span
  5853. class="cmr-6">7</span><span
  5854. class="cmtt-8">&#x00A0;</span><span
  5855. class="cmtt-8">&#x00A0;</span>
  5856. <br class="fancyvrb" /><a
  5857. id="x1-99016r8"></a><span
  5858. class="cmr-6">8</span><span
  5859. class="cmtt-8">&#x00A0;</span><span
  5860. class="cmtt-8">&#x00A0;</span><span
  5861. class="cmtt-8">&#x00A0;</span><span
  5862. class="cmtt-8">&#x00A0;</span><span
  5863. class="cmtt-8">&#x00A0;</span><span
  5864. class="cmtt-8">&#x00A0;</span><span
  5865. class="cmtt-8">&#x00A0;</span><span
  5866. class="cmsy-8">}</span>
  5867. <br class="fancyvrb" /><a
  5868. id="x1-99018r9"></a><span
  5869. class="cmr-6">9</span><span
  5870. class="cmtt-8">&#x00A0;</span><span
  5871. class="cmtt-8">&#x00A0;</span>
  5872. <br class="fancyvrb" /><a
  5873. id="x1-99020r10"></a><span
  5874. class="cmr-6">10</span><span
  5875. class="cmtt-8">&#x00A0;</span><span
  5876. class="cmtt-8">&#x00A0;</span><span
  5877. class="cmtt-8">&#x00A0;</span><span
  5878. class="cmtt-8">&#x00A0;5)</span><span
  5879. class="cmtt-8">&#x00A0;[maximum_class]</span><span
  5880. class="cmtt-8">&#x00A0;=</span><span
  5881. class="cmtt-8">&#x00A0;largest</span><span
  5882. class="cmtt-8">&#x00A0;integer</span><span
  5883. class="cmtt-8">&#x00A0;scalar</span><span
  5884. class="cmtt-8">&#x00A0;value</span><span
  5885. class="cmtt-8">&#x00A0;in</span><span
  5886. class="cmtt-8">&#x00A0;vector</span><span
  5887. class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span>
  5888. <br class="fancyvrb" /><a
  5889. id="x1-99022r11"></a><span
  5890. class="cmr-6">11</span><span
  5891. class="cmtt-8">&#x00A0;</span><span
  5892. class="cmtt-8">&#x00A0;</span><span
  5893. class="cmtt-8">&#x00A0;</span><span
  5894. class="cmtt-8">&#x00A0;6)</span><span
  5895. class="cmtt-8">&#x00A0;iterate</span><span
  5896. class="cmtt-8">&#x00A0;[i]</span><span
  5897. class="cmtt-8">&#x00A0;over</span><span
  5898. class="cmtt-8">&#x00A0;the</span><span
  5899. class="cmtt-8">&#x00A0;range</span><span
  5900. class="cmtt-8">&#x00A0;0</span><span
  5901. class="cmtt-8">&#x00A0;...</span><span
  5902. class="cmtt-8">&#x00A0;[maximum_class]</span><span
  5903. class="cmtt-8">&#x00A0;</span><span
  5904. class="cmsy-8">{</span>
  5905. <br class="fancyvrb" /><a
  5906. id="x1-99024r12"></a><span
  5907. class="cmr-6">12</span><span
  5908. class="cmtt-8">&#x00A0;</span><span
  5909. class="cmtt-8">&#x00A0;</span>
  5910. <br class="fancyvrb" /><a
  5911. id="x1-99026r13"></a><span
  5912. class="cmr-6">13</span><span
  5913. class="cmtt-8">&#x00A0;</span><span
  5914. class="cmtt-8">&#x00A0;</span><span
  5915. class="cmtt-8">&#x00A0;</span><span
  5916. class="cmtt-8">&#x00A0;</span><span
  5917. class="cmtt-8">&#x00A0;</span><span
  5918. class="cmtt-8">&#x00A0;</span><span
  5919. class="cmtt-8">&#x00A0;</span><span
  5920. class="cmtt-8">&#x00A0;</span><span
  5921. class="cmtt-8">&#x00A0;</span><span
  5922. class="cmtt-8">&#x00A0;7)</span><span
  5923. class="cmtt-8">&#x00A0;vector</span><span
  5924. class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
  5925. class="cmtt-8">&#x00A0;element</span><span
  5926. class="cmtt-8">&#x00A0;[i]</span><span
  5927. class="cmtt-8">&#x00A0;=</span><span
  5928. class="cmtt-8">&#x00A0;read</span><span
  5929. class="cmtt-8">&#x00A0;3</span><span
  5930. class="cmtt-8">&#x00A0;bits</span><span
  5931. class="cmtt-8">&#x00A0;as</span><span
  5932. class="cmtt-8">&#x00A0;unsigned</span><span
  5933. class="cmtt-8">&#x00A0;integer</span><span
  5934. class="cmtt-8">&#x00A0;and</span><span
  5935. class="cmtt-8">&#x00A0;add</span><span
  5936. class="cmtt-8">&#x00A0;1</span>
  5937. <br class="fancyvrb" /><a
  5938. id="x1-99028r14"></a><span
  5939. class="cmr-6">14</span><span
  5940. class="cmtt-8">&#x00A0;</span><span
  5941. class="cmtt-8">&#x00A0; 8)</span><span
  5942. class="cmtt-8">&#x00A0;vector</span><span
  5943. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  5944. class="cmtt-8">&#x00A0;element</span><span
  5945. class="cmtt-8">&#x00A0;[i]</span><span
  5946. class="cmtt-8">&#x00A0;=</span><span
  5947. class="cmtt-8">&#x00A0;read</span><span
  5948. class="cmtt-8">&#x00A0;2</span><span
  5949. class="cmtt-8">&#x00A0;bits</span><span
  5950. class="cmtt-8">&#x00A0;as</span><span
  5951. class="cmtt-8">&#x00A0;unsigned</span><span
  5952. class="cmtt-8">&#x00A0;integer</span>
  5953. <br class="fancyvrb" /><a
  5954. id="x1-99030r15"></a><span
  5955. class="cmr-6">15</span><span
  5956. class="cmtt-8">&#x00A0;</span><span
  5957. class="cmtt-8">&#x00A0;</span><span
  5958. class="cmtt-8">&#x00A0;</span><span
  5959. class="cmtt-8">&#x00A0;</span><span
  5960. class="cmtt-8">&#x00A0;</span><span
  5961. class="cmtt-8">&#x00A0;</span><span
  5962. class="cmtt-8">&#x00A0;</span><span
  5963. class="cmtt-8">&#x00A0;</span><span
  5964. class="cmtt-8">&#x00A0;</span><span
  5965. class="cmtt-8">&#x00A0;9)</span><span
  5966. class="cmtt-8">&#x00A0;if</span><span
  5967. class="cmtt-8">&#x00A0;(</span><span
  5968. class="cmtt-8">&#x00A0;vector</span><span
  5969. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  5970. class="cmtt-8">&#x00A0;element</span><span
  5971. class="cmtt-8">&#x00A0;[i]</span><span
  5972. class="cmtt-8">&#x00A0;is</span><span
  5973. class="cmtt-8">&#x00A0;nonzero</span><span
  5974. class="cmtt-8">&#x00A0;)</span><span
  5975. class="cmtt-8">&#x00A0;</span><span
  5976. class="cmsy-8">{</span>
  5977. <br class="fancyvrb" /><a
  5978. id="x1-99032r16"></a><span
  5979. class="cmr-6">16</span><span
  5980. class="cmtt-8">&#x00A0;</span><span
  5981. class="cmtt-8">&#x00A0;</span>
  5982. <br class="fancyvrb" /><a
  5983. id="x1-99034r17"></a><span
  5984. class="cmr-6">17</span><span
  5985. class="cmtt-8">&#x00A0;</span><span
  5986. class="cmtt-8">&#x00A0;</span><span
  5987. class="cmtt-8">&#x00A0;</span><span
  5988. class="cmtt-8">&#x00A0;</span><span
  5989. class="cmtt-8">&#x00A0;</span><span
  5990. class="cmtt-8">&#x00A0;</span><span
  5991. class="cmtt-8">&#x00A0;</span><span
  5992. class="cmtt-8">&#x00A0;</span><span
  5993. class="cmtt-8">&#x00A0;</span><span
  5994. class="cmtt-8">&#x00A0;</span><span
  5995. class="cmtt-8">&#x00A0;</span><span
  5996. class="cmtt-8">&#x00A0;</span><span
  5997. class="cmtt-8">&#x00A0;</span><span
  5998. class="cmtt-8">&#x00A0;</span><span
  5999. class="cmtt-8">&#x00A0;10)</span><span
  6000. class="cmtt-8">&#x00A0;vector</span><span
  6001. class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
  6002. class="cmtt-8">&#x00A0;element</span><span
  6003. class="cmtt-8">&#x00A0;[i]</span><span
  6004. class="cmtt-8">&#x00A0;=</span><span
  6005. class="cmtt-8">&#x00A0;read</span><span
  6006. class="cmtt-8">&#x00A0;8</span><span
  6007. class="cmtt-8">&#x00A0;bits</span><span
  6008. class="cmtt-8">&#x00A0;as</span><span
  6009. class="cmtt-8">&#x00A0;unsigned</span><span
  6010. class="cmtt-8">&#x00A0;integer</span>
  6011. <br class="fancyvrb" /><a
  6012. id="x1-99036r18"></a><span
  6013. class="cmr-6">18</span><span
  6014. class="cmtt-8">&#x00A0;</span><span
  6015. class="cmtt-8">&#x00A0;</span>
  6016. <br class="fancyvrb" /><a
  6017. id="x1-99038r19"></a><span
  6018. class="cmr-6">19</span><span
  6019. class="cmtt-8">&#x00A0;</span><span
  6020. class="cmtt-8">&#x00A0;</span><span
  6021. class="cmtt-8">&#x00A0;</span><span
  6022. class="cmtt-8">&#x00A0;</span><span
  6023. class="cmtt-8">&#x00A0;</span><span
  6024. class="cmtt-8">&#x00A0;</span><span
  6025. class="cmtt-8">&#x00A0;</span><span
  6026. class="cmtt-8">&#x00A0;</span><span
  6027. class="cmtt-8">&#x00A0;</span><span
  6028. class="cmtt-8">&#x00A0;</span><span
  6029. class="cmtt-8">&#x00A0;</span><span
  6030. class="cmtt-8">&#x00A0;</span><span
  6031. class="cmtt-8">&#x00A0;</span><span
  6032. class="cmsy-8">}</span>
  6033. <br class="fancyvrb" /><a
  6034. id="x1-99040r20"></a><span
  6035. class="cmr-6">20</span><span
  6036. class="cmtt-8">&#x00A0;</span><span
  6037. class="cmtt-8">&#x00A0;</span>
  6038. <br class="fancyvrb" /><a
  6039. id="x1-99042r21"></a><span
  6040. class="cmr-6">21</span><span
  6041. class="cmtt-8">&#x00A0;</span><span
  6042. class="cmtt-8">&#x00A0;</span><span
  6043. class="cmtt-8">&#x00A0;</span><span
  6044. class="cmtt-8">&#x00A0;</span><span
  6045. class="cmtt-8">&#x00A0;</span><span
  6046. class="cmtt-8">&#x00A0;</span><span
  6047. class="cmtt-8">&#x00A0;</span><span
  6048. class="cmtt-8">&#x00A0;</span><span
  6049. class="cmtt-8">&#x00A0;11)</span><span
  6050. class="cmtt-8">&#x00A0;iterate</span><span
  6051. class="cmtt-8">&#x00A0;[j]</span><span
  6052. class="cmtt-8">&#x00A0;over</span><span
  6053. class="cmtt-8">&#x00A0;the</span><span
  6054. class="cmtt-8">&#x00A0;range</span><span
  6055. class="cmtt-8">&#x00A0;0</span><span
  6056. class="cmtt-8">&#x00A0;...</span><span
  6057. class="cmtt-8">&#x00A0;(2</span><span
  6058. class="cmtt-8">&#x00A0;exponent</span><span
  6059. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  6060. class="cmtt-8">&#x00A0;element</span><span
  6061. class="cmtt-8">&#x00A0;[i])</span><span
  6062. class="cmtt-8">&#x00A0;-</span><span
  6063. class="cmtt-8">&#x00A0;1</span><span
  6064. class="cmtt-8">&#x00A0;</span><span
  6065. class="cmsy-8">{</span>
  6066. <br class="fancyvrb" /><a
  6067. id="x1-99044r22"></a><span
  6068. class="cmr-6">22</span><span
  6069. class="cmtt-8">&#x00A0;</span><span
  6070. class="cmtt-8">&#x00A0;</span>
  6071. <br class="fancyvrb" /><a
  6072. id="x1-99046r23"></a><span
  6073. class="cmr-6">23</span><span
  6074. class="cmtt-8">&#x00A0;</span><span
  6075. class="cmtt-8">&#x00A0;</span><span
  6076. class="cmtt-8">&#x00A0;</span><span
  6077. class="cmtt-8">&#x00A0;</span><span
  6078. class="cmtt-8">&#x00A0;</span><span
  6079. class="cmtt-8">&#x00A0;</span><span
  6080. class="cmtt-8">&#x00A0;</span><span
  6081. class="cmtt-8">&#x00A0;</span><span
  6082. class="cmtt-8">&#x00A0;</span><span
  6083. class="cmtt-8">&#x00A0;</span><span
  6084. class="cmtt-8">&#x00A0;</span><span
  6085. class="cmtt-8">&#x00A0;</span><span
  6086. class="cmtt-8">&#x00A0;</span><span
  6087. class="cmtt-8">&#x00A0;</span><span
  6088. class="cmtt-8">&#x00A0;12)</span><span
  6089. class="cmtt-8">&#x00A0;array</span><span
  6090. class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
  6091. class="cmtt-8">&#x00A0;element</span><span
  6092. class="cmtt-8">&#x00A0;[i],[j]</span><span
  6093. class="cmtt-8">&#x00A0;=</span>
  6094. <br class="fancyvrb" /><a
  6095. id="x1-99048r24"></a><span
  6096. class="cmr-6">24</span><span
  6097. class="cmtt-8">&#x00A0;</span><span
  6098. class="cmtt-8">&#x00A0;</span><span
  6099. class="cmtt-8">&#x00A0;</span><span
  6100. class="cmtt-8">&#x00A0;</span><span
  6101. class="cmtt-8">&#x00A0;</span><span
  6102. class="cmtt-8">&#x00A0;</span><span
  6103. class="cmtt-8">&#x00A0;</span><span
  6104. class="cmtt-8">&#x00A0;</span><span
  6105. class="cmtt-8">&#x00A0;</span><span
  6106. class="cmtt-8">&#x00A0;</span><span
  6107. class="cmtt-8">&#x00A0;</span><span
  6108. class="cmtt-8">&#x00A0;</span><span
  6109. class="cmtt-8">&#x00A0;</span><span
  6110. class="cmtt-8">&#x00A0;</span><span
  6111. class="cmtt-8">&#x00A0;</span><span
  6112. class="cmtt-8">&#x00A0;</span><span
  6113. class="cmtt-8">&#x00A0;</span><span
  6114. class="cmtt-8">&#x00A0;</span><span
  6115. class="cmtt-8">&#x00A0;read</span><span
  6116. class="cmtt-8">&#x00A0;8</span><span
  6117. class="cmtt-8">&#x00A0;bits</span><span
  6118. class="cmtt-8">&#x00A0;as</span><span
  6119. class="cmtt-8">&#x00A0;unsigned</span><span
  6120. class="cmtt-8">&#x00A0;integer</span><span
  6121. class="cmtt-8">&#x00A0;and</span><span
  6122. class="cmtt-8">&#x00A0;subtract</span><span
  6123. class="cmtt-8">&#x00A0;one</span>
  6124. <br class="fancyvrb" /><a
  6125. id="x1-99050r25"></a><span
  6126. class="cmr-6">25</span><span
  6127. class="cmtt-8">&#x00A0;</span><span
  6128. class="cmtt-8">&#x00A0;</span><span
  6129. class="cmtt-8">&#x00A0;</span><span
  6130. class="cmtt-8">&#x00A0;</span><span
  6131. class="cmtt-8">&#x00A0;</span><span
  6132. class="cmtt-8">&#x00A0;</span><span
  6133. class="cmtt-8">&#x00A0;</span><span
  6134. class="cmtt-8">&#x00A0;</span><span
  6135. class="cmtt-8">&#x00A0;</span><span
  6136. class="cmtt-8">&#x00A0;</span><span
  6137. class="cmtt-8">&#x00A0;</span><span
  6138. class="cmtt-8">&#x00A0;</span><span
  6139. class="cmtt-8">&#x00A0;</span><span
  6140. class="cmsy-8">}</span>
  6141. <br class="fancyvrb" /><a
  6142. id="x1-99052r26"></a><span
  6143. class="cmr-6">26</span><span
  6144. class="cmtt-8">&#x00A0;</span><span
  6145. class="cmtt-8">&#x00A0;</span><span
  6146. class="cmtt-8">&#x00A0;</span><span
  6147. class="cmtt-8">&#x00A0;</span><span
  6148. class="cmtt-8">&#x00A0;</span><span
  6149. class="cmtt-8">&#x00A0;</span><span
  6150. class="cmtt-8">&#x00A0;</span><span
  6151. class="cmtt-8">&#x00A0;</span><span
  6152. class="cmsy-8">}</span>
  6153. <br class="fancyvrb" /><a
  6154. id="x1-99054r27"></a><span
  6155. class="cmr-6">27</span><span
  6156. class="cmtt-8">&#x00A0;</span><span
  6157. class="cmtt-8">&#x00A0;</span>
  6158. <br class="fancyvrb" /><a
  6159. id="x1-99056r28"></a><span
  6160. class="cmr-6">28</span><span
  6161. class="cmtt-8">&#x00A0;</span><span
  6162. class="cmtt-8">&#x00A0;</span><span
  6163. class="cmtt-8">&#x00A0;13)</span><span
  6164. class="cmtt-8">&#x00A0;[floor1_multiplier]</span><span
  6165. class="cmtt-8">&#x00A0;=</span><span
  6166. class="cmtt-8">&#x00A0;read</span><span
  6167. class="cmtt-8">&#x00A0;2</span><span
  6168. class="cmtt-8">&#x00A0;bits</span><span
  6169. class="cmtt-8">&#x00A0;as</span><span
  6170. class="cmtt-8">&#x00A0;unsigned</span><span
  6171. class="cmtt-8">&#x00A0;integer</span><span
  6172. class="cmtt-8">&#x00A0;and</span><span
  6173. class="cmtt-8">&#x00A0;add</span><span
  6174. class="cmtt-8">&#x00A0;one</span>
  6175. <br class="fancyvrb" /><a
  6176. id="x1-99058r29"></a><span
  6177. class="cmr-6">29</span><span
  6178. class="cmtt-8">&#x00A0;</span><span
  6179. class="cmtt-8">&#x00A0;</span><span
  6180. class="cmtt-8">&#x00A0;14)</span><span
  6181. class="cmtt-8">&#x00A0;[rangebits]</span><span
  6182. class="cmtt-8">&#x00A0;=</span><span
  6183. class="cmtt-8">&#x00A0;read</span><span
  6184. class="cmtt-8">&#x00A0;4</span><span
  6185. class="cmtt-8">&#x00A0;bits</span><span
  6186. class="cmtt-8">&#x00A0;as</span><span
  6187. class="cmtt-8">&#x00A0;unsigned</span><span
  6188. class="cmtt-8">&#x00A0;integer</span>
  6189. <br class="fancyvrb" /><a
  6190. id="x1-99060r30"></a><span
  6191. class="cmr-6">30</span><span
  6192. class="cmtt-8">&#x00A0;</span><span
  6193. class="cmtt-8">&#x00A0;</span><span
  6194. class="cmtt-8">&#x00A0;15)</span><span
  6195. class="cmtt-8">&#x00A0;vector</span><span
  6196. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  6197. class="cmtt-8">&#x00A0;element</span><span
  6198. class="cmtt-8">&#x00A0;[0]</span><span
  6199. class="cmtt-8">&#x00A0;=</span><span
  6200. class="cmtt-8">&#x00A0;0</span>
  6201. <br class="fancyvrb" /><a
  6202. id="x1-99062r31"></a><span
  6203. class="cmr-6">31</span><span
  6204. class="cmtt-8">&#x00A0;</span><span
  6205. class="cmtt-8">&#x00A0;</span><span
  6206. class="cmtt-8">&#x00A0;16)</span><span
  6207. class="cmtt-8">&#x00A0;vector</span><span
  6208. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  6209. class="cmtt-8">&#x00A0;element</span><span
  6210. class="cmtt-8">&#x00A0;[1]</span><span
  6211. class="cmtt-8">&#x00A0;=</span><span
  6212. class="cmtt-8">&#x00A0;2</span><span
  6213. class="cmtt-8">&#x00A0;exponent</span><span
  6214. class="cmtt-8">&#x00A0;[rangebits];</span>
  6215. <br class="fancyvrb" /><a
  6216. id="x1-99064r32"></a><span
  6217. class="cmr-6">32</span><span
  6218. class="cmtt-8">&#x00A0;</span><span
  6219. class="cmtt-8">&#x00A0;</span><span
  6220. class="cmtt-8">&#x00A0;17)</span><span
  6221. class="cmtt-8">&#x00A0;[floor1_values]</span><span
  6222. class="cmtt-8">&#x00A0;=</span><span
  6223. class="cmtt-8">&#x00A0;2</span>
  6224. <br class="fancyvrb" /><a
  6225. id="x1-99066r33"></a><span
  6226. class="cmr-6">33</span><span
  6227. class="cmtt-8">&#x00A0;</span><span
  6228. class="cmtt-8">&#x00A0;</span><span
  6229. class="cmtt-8">&#x00A0;18)</span><span
  6230. class="cmtt-8">&#x00A0;iterate</span><span
  6231. class="cmtt-8">&#x00A0;[i]</span><span
  6232. class="cmtt-8">&#x00A0;over</span><span
  6233. class="cmtt-8">&#x00A0;the</span><span
  6234. class="cmtt-8">&#x00A0;range</span><span
  6235. class="cmtt-8">&#x00A0;0</span><span
  6236. class="cmtt-8">&#x00A0;...</span><span
  6237. class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
  6238. class="cmtt-8">&#x00A0;</span><span
  6239. class="cmsy-8">{</span>
  6240. <br class="fancyvrb" /><a
  6241. id="x1-99068r34"></a><span
  6242. class="cmr-6">34</span><span
  6243. class="cmtt-8">&#x00A0;</span><span
  6244. class="cmtt-8">&#x00A0;</span>
  6245. <br class="fancyvrb" /><a
  6246. id="x1-99070r35"></a><span
  6247. class="cmr-6">35</span><span
  6248. class="cmtt-8">&#x00A0;</span><span
  6249. class="cmtt-8">&#x00A0;</span><span
  6250. class="cmtt-8">&#x00A0;</span><span
  6251. class="cmtt-8">&#x00A0;</span><span
  6252. class="cmtt-8">&#x00A0;</span><span
  6253. class="cmtt-8">&#x00A0;</span><span
  6254. class="cmtt-8">&#x00A0;</span><span
  6255. class="cmtt-8">&#x00A0;</span><span
  6256. class="cmtt-8">&#x00A0;19)</span><span
  6257. class="cmtt-8">&#x00A0;[current_class_number]</span><span
  6258. class="cmtt-8">&#x00A0;=</span><span
  6259. class="cmtt-8">&#x00A0;vector</span><span
  6260. class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
  6261. class="cmtt-8">&#x00A0;element</span><span
  6262. class="cmtt-8">&#x00A0;[i]</span>
  6263. <br class="fancyvrb" /><a
  6264. id="x1-99072r36"></a><span
  6265. class="cmr-6">36</span><span
  6266. class="cmtt-8">&#x00A0;</span><span
  6267. class="cmtt-8">&#x00A0;</span><span
  6268. class="cmtt-8">&#x00A0;</span><span
  6269. class="cmtt-8">&#x00A0;</span><span
  6270. class="cmtt-8">&#x00A0;</span><span
  6271. class="cmtt-8">&#x00A0;</span><span
  6272. class="cmtt-8">&#x00A0;</span><span
  6273. class="cmtt-8">&#x00A0;</span><span
  6274. class="cmtt-8">&#x00A0;20)</span><span
  6275. class="cmtt-8">&#x00A0;iterate</span><span
  6276. class="cmtt-8">&#x00A0;[j]</span><span
  6277. class="cmtt-8">&#x00A0;over</span><span
  6278. class="cmtt-8">&#x00A0;the</span><span
  6279. class="cmtt-8">&#x00A0;range</span><span
  6280. class="cmtt-8">&#x00A0;0</span><span
  6281. class="cmtt-8">&#x00A0;...</span><span
  6282. class="cmtt-8">&#x00A0;([floor1_class_dimensions]</span><span
  6283. class="cmtt-8">&#x00A0;element</span><span
  6284. class="cmtt-8">&#x00A0;[current_class_number])-1</span><span
  6285. class="cmtt-8">&#x00A0;</span><span
  6286. class="cmsy-8">{</span>
  6287. <br class="fancyvrb" /><a
  6288. id="x1-99074r37"></a><span
  6289. class="cmr-6">37</span><span
  6290. class="cmtt-8">&#x00A0;</span><span
  6291. class="cmtt-8">&#x00A0;</span><span
  6292. class="cmtt-8">&#x00A0;</span><span
  6293. class="cmtt-8">&#x00A0;</span><span
  6294. class="cmtt-8">&#x00A0;</span><span
  6295. class="cmtt-8">&#x00A0;</span><span
  6296. class="cmtt-8">&#x00A0;</span><span
  6297. class="cmtt-8">&#x00A0;</span><span
  6298. class="cmtt-8">&#x00A0;</span><span
  6299. class="cmtt-8">&#x00A0;</span><span
  6300. class="cmtt-8">&#x00A0;</span><span
  6301. class="cmtt-8">&#x00A0;</span><span
  6302. class="cmtt-8">&#x00A0;</span><span
  6303. class="cmtt-8">&#x00A0;</span><span
  6304. class="cmtt-8">&#x00A0;21)</span><span
  6305. class="cmtt-8">&#x00A0;vector</span><span
  6306. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  6307. class="cmtt-8">&#x00A0;element</span><span
  6308. class="cmtt-8">&#x00A0;([floor1_values])</span><span
  6309. class="cmtt-8">&#x00A0;=</span>
  6310. <br class="fancyvrb" /><a
  6311. id="x1-99076r38"></a><span
  6312. class="cmr-6">38</span><span
  6313. class="cmtt-8">&#x00A0;</span><span
  6314. class="cmtt-8">&#x00A0;</span><span
  6315. class="cmtt-8">&#x00A0;</span><span
  6316. class="cmtt-8">&#x00A0;</span><span
  6317. class="cmtt-8">&#x00A0;</span><span
  6318. class="cmtt-8">&#x00A0;</span><span
  6319. class="cmtt-8">&#x00A0;</span><span
  6320. class="cmtt-8">&#x00A0;</span><span
  6321. class="cmtt-8">&#x00A0;</span><span
  6322. class="cmtt-8">&#x00A0;</span><span
  6323. class="cmtt-8">&#x00A0;</span><span
  6324. class="cmtt-8">&#x00A0;</span><span
  6325. class="cmtt-8">&#x00A0;</span><span
  6326. class="cmtt-8">&#x00A0;</span><span
  6327. class="cmtt-8">&#x00A0;</span><span
  6328. class="cmtt-8">&#x00A0;</span><span
  6329. class="cmtt-8">&#x00A0;</span><span
  6330. class="cmtt-8">&#x00A0;</span><span
  6331. class="cmtt-8">&#x00A0;read</span><span
  6332. class="cmtt-8">&#x00A0;[rangebits]</span><span
  6333. class="cmtt-8">&#x00A0;bits</span><span
  6334. class="cmtt-8">&#x00A0;as</span><span
  6335. class="cmtt-8">&#x00A0;unsigned</span><span
  6336. class="cmtt-8">&#x00A0;integer</span>
  6337. <br class="fancyvrb" /><a
  6338. id="x1-99078r39"></a><span
  6339. class="cmr-6">39</span><span
  6340. class="cmtt-8">&#x00A0;</span><span
  6341. class="cmtt-8">&#x00A0;</span><span
  6342. class="cmtt-8">&#x00A0;</span><span
  6343. class="cmtt-8">&#x00A0;</span><span
  6344. class="cmtt-8">&#x00A0;</span><span
  6345. class="cmtt-8">&#x00A0;</span><span
  6346. class="cmtt-8">&#x00A0;</span><span
  6347. class="cmtt-8">&#x00A0;</span><span
  6348. class="cmtt-8">&#x00A0;</span><span
  6349. class="cmtt-8">&#x00A0;</span><span
  6350. class="cmtt-8">&#x00A0;</span><span
  6351. class="cmtt-8">&#x00A0;</span><span
  6352. class="cmtt-8">&#x00A0;</span><span
  6353. class="cmtt-8">&#x00A0;</span><span
  6354. class="cmtt-8">&#x00A0;22)</span><span
  6355. class="cmtt-8">&#x00A0;increment</span><span
  6356. class="cmtt-8">&#x00A0;[floor1_values]</span><span
  6357. class="cmtt-8">&#x00A0;by</span><span
  6358. class="cmtt-8">&#x00A0;one</span>
  6359. <br class="fancyvrb" /><a
  6360. id="x1-99080r40"></a><span
  6361. class="cmr-6">40</span><span
  6362. class="cmtt-8">&#x00A0;</span><span
  6363. class="cmtt-8">&#x00A0;</span><span
  6364. class="cmtt-8">&#x00A0;</span><span
  6365. class="cmtt-8">&#x00A0;</span><span
  6366. class="cmtt-8">&#x00A0;</span><span
  6367. class="cmtt-8">&#x00A0;</span><span
  6368. class="cmtt-8">&#x00A0;</span><span
  6369. class="cmtt-8">&#x00A0;</span><span
  6370. class="cmtt-8">&#x00A0;</span><span
  6371. class="cmtt-8">&#x00A0;</span><span
  6372. class="cmtt-8">&#x00A0;</span><span
  6373. class="cmtt-8">&#x00A0;</span><span
  6374. class="cmtt-8">&#x00A0;</span><span
  6375. class="cmsy-8">}</span>
  6376. <br class="fancyvrb" /><a
  6377. id="x1-99082r41"></a><span
  6378. class="cmr-6">41</span><span
  6379. class="cmtt-8">&#x00A0;</span><span
  6380. class="cmtt-8">&#x00A0;</span><span
  6381. class="cmtt-8">&#x00A0;</span><span
  6382. class="cmtt-8">&#x00A0;</span><span
  6383. class="cmtt-8">&#x00A0;</span><span
  6384. class="cmtt-8">&#x00A0;</span><span
  6385. class="cmtt-8">&#x00A0;</span><span
  6386. class="cmsy-8">}</span>
  6387. <br class="fancyvrb" /><a
  6388. id="x1-99084r42"></a><span
  6389. class="cmr-6">42</span><span
  6390. class="cmtt-8">&#x00A0;</span><span
  6391. class="cmtt-8">&#x00A0;</span>
  6392. <br class="fancyvrb" /><a
  6393. id="x1-99086r43"></a><span
  6394. class="cmr-6">43</span><span
  6395. class="cmtt-8">&#x00A0;</span><span
  6396. class="cmtt-8">&#x00A0;</span><span
  6397. class="cmtt-8">&#x00A0;23)</span><span
  6398. class="cmtt-8">&#x00A0;done</span>
  6399. </div>
  6400. <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
  6401. setup renders a stream undecodable. In addition, a <span
  6402. class="cmtt-12">[floor1_class_masterbooks] </span>or
  6403. <span
  6404. class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
  6405. configured in this stream is an error condition that renders the stream undecodable. Vector
  6406. [floor1_x_list] is limited to a maximum length of 65 elements; a setup indicating more than 65
  6407. total elements (including elements 0 and 1 set prior to the read loop) renders the stream
  6408. undecodable. All vector [floor1_x_list] element values must be unique within the vector; a
  6409. non-unique value renders the stream undecodable.
  6410. <!--l. 170--><p class="noindent" >
  6411. <h5 class="subsubsectionHead"><span class="titlemark">7.2.3. </span> <a
  6412. id="x1-1000007.2.3"></a>packet decode</h5>
  6413. <!--l. 172--><p class="noindent" >Packet decode begins by checking the <span
  6414. class="cmtt-12">[nonzero] </span>flag:
  6415. <!--l. 174--><p class="noindent" >
  6416. <div class="fancyvrb" id="fancyvrb29">
  6417. <a
  6418. id="x1-100002r1"></a><span
  6419. class="cmr-6">1</span><span
  6420. class="cmtt-8">&#x00A0;</span><span
  6421. class="cmtt-8">&#x00A0;</span><span
  6422. class="cmtt-8">&#x00A0;</span><span
  6423. class="cmtt-8">&#x00A0;1)</span><span
  6424. class="cmtt-8">&#x00A0;[nonzero]</span><span
  6425. class="cmtt-8">&#x00A0;=</span><span
  6426. class="cmtt-8">&#x00A0;read</span><span
  6427. class="cmtt-8">&#x00A0;1</span><span
  6428. class="cmtt-8">&#x00A0;bit</span><span
  6429. class="cmtt-8">&#x00A0;as</span><span
  6430. class="cmtt-8">&#x00A0;boolean</span>
  6431. </div>
  6432. <!--l. 178--><p class="noindent" >If <span
  6433. class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
  6434. Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
  6435. this frame. (A return status of &#8217;unused&#8217; is different from decoding a floor that has all
  6436. points set to minimum representation amplitude, which happens to be approximately
  6437. -140dB).
  6438. <!--l. 186--><p class="noindent" >Assuming <span
  6439. class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
  6440. <!--l. 188--><p class="noindent" >
  6441. <div class="fancyvrb" id="fancyvrb30">
  6442. <a
  6443. id="x1-100004r1"></a><span
  6444. class="cmr-6">1</span><span
  6445. class="cmtt-8">&#x00A0;</span><span
  6446. class="cmtt-8">&#x00A0;</span><span
  6447. class="cmtt-8">&#x00A0;</span><span
  6448. class="cmtt-8">&#x00A0;1)</span><span
  6449. class="cmtt-8">&#x00A0;[range]</span><span
  6450. class="cmtt-8">&#x00A0;=</span><span
  6451. class="cmtt-8">&#x00A0;vector</span><span
  6452. class="cmtt-8">&#x00A0;</span><span
  6453. class="cmsy-8">{</span><span
  6454. class="cmtt-8">&#x00A0;256,</span><span
  6455. class="cmtt-8">&#x00A0;128,</span><span
  6456. class="cmtt-8">&#x00A0;86,</span><span
  6457. class="cmtt-8">&#x00A0;64</span><span
  6458. class="cmtt-8">&#x00A0;</span><span
  6459. class="cmsy-8">}</span><span
  6460. class="cmtt-8">&#x00A0;element</span><span
  6461. class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
  6462. <br class="fancyvrb" /><a
  6463. id="x1-100006r2"></a><span
  6464. class="cmr-6">2</span><span
  6465. class="cmtt-8">&#x00A0;</span><span
  6466. class="cmtt-8">&#x00A0;</span><span
  6467. class="cmtt-8">&#x00A0;</span><span
  6468. class="cmtt-8">&#x00A0;2)</span><span
  6469. class="cmtt-8">&#x00A0;vector</span><span
  6470. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6471. class="cmtt-8">&#x00A0;element</span><span
  6472. class="cmtt-8">&#x00A0;[0]</span><span
  6473. class="cmtt-8">&#x00A0;=</span><span
  6474. class="cmtt-8">&#x00A0;read</span><span
  6475. class="cmtt-8">&#x00A0;</span><a
  6476. href="#x1-1170009.2.1"><span
  6477. class="cmtt-8">ilog</span></a><span
  6478. class="cmtt-8">([range]-1)</span><span
  6479. class="cmtt-8">&#x00A0;bits</span><span
  6480. class="cmtt-8">&#x00A0;as</span><span
  6481. class="cmtt-8">&#x00A0;unsigned</span><span
  6482. class="cmtt-8">&#x00A0;integer</span>
  6483. <br class="fancyvrb" /><a
  6484. id="x1-100008r3"></a><span
  6485. class="cmr-6">3</span><span
  6486. class="cmtt-8">&#x00A0;</span><span
  6487. class="cmtt-8">&#x00A0;</span><span
  6488. class="cmtt-8">&#x00A0;</span><span
  6489. class="cmtt-8">&#x00A0;3)</span><span
  6490. class="cmtt-8">&#x00A0;vector</span><span
  6491. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6492. class="cmtt-8">&#x00A0;element</span><span
  6493. class="cmtt-8">&#x00A0;[1]</span><span
  6494. class="cmtt-8">&#x00A0;=</span><span
  6495. class="cmtt-8">&#x00A0;read</span><span
  6496. class="cmtt-8">&#x00A0;</span><a
  6497. href="#x1-1170009.2.1"><span
  6498. class="cmtt-8">ilog</span></a><span
  6499. class="cmtt-8">([range]-1)</span><span
  6500. class="cmtt-8">&#x00A0;bits</span><span
  6501. class="cmtt-8">&#x00A0;as</span><span
  6502. class="cmtt-8">&#x00A0;unsigned</span><span
  6503. class="cmtt-8">&#x00A0;integer</span>
  6504. <br class="fancyvrb" /><a
  6505. id="x1-100010r4"></a><span
  6506. class="cmr-6">4</span><span
  6507. class="cmtt-8">&#x00A0;</span><span
  6508. class="cmtt-8">&#x00A0;</span><span
  6509. class="cmtt-8">&#x00A0;</span><span
  6510. class="cmtt-8">&#x00A0;4)</span><span
  6511. class="cmtt-8">&#x00A0;[offset]</span><span
  6512. class="cmtt-8">&#x00A0;=</span><span
  6513. class="cmtt-8">&#x00A0;2;</span>
  6514. <br class="fancyvrb" /><a
  6515. id="x1-100012r5"></a><span
  6516. class="cmr-6">5</span><span
  6517. class="cmtt-8">&#x00A0;</span><span
  6518. class="cmtt-8">&#x00A0;</span><span
  6519. class="cmtt-8">&#x00A0;</span><span
  6520. class="cmtt-8">&#x00A0;5)</span><span
  6521. class="cmtt-8">&#x00A0;iterate</span><span
  6522. class="cmtt-8">&#x00A0;[i]</span><span
  6523. class="cmtt-8">&#x00A0;over</span><span
  6524. class="cmtt-8">&#x00A0;the</span><span
  6525. class="cmtt-8">&#x00A0;range</span><span
  6526. class="cmtt-8">&#x00A0;0</span><span
  6527. class="cmtt-8">&#x00A0;...</span><span
  6528. class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
  6529. class="cmtt-8">&#x00A0;</span><span
  6530. class="cmsy-8">{</span>
  6531. <br class="fancyvrb" /><a
  6532. id="x1-100014r6"></a><span
  6533. class="cmr-6">6</span><span
  6534. class="cmtt-8">&#x00A0;</span><span
  6535. class="cmtt-8">&#x00A0;</span>
  6536. <br class="fancyvrb" /><a
  6537. id="x1-100016r7"></a><span
  6538. class="cmr-6">7</span><span
  6539. class="cmtt-8">&#x00A0;</span><span
  6540. class="cmtt-8">&#x00A0;</span><span
  6541. class="cmtt-8">&#x00A0;</span><span
  6542. class="cmtt-8">&#x00A0;</span><span
  6543. class="cmtt-8">&#x00A0;</span><span
  6544. class="cmtt-8">&#x00A0;</span><span
  6545. class="cmtt-8">&#x00A0;</span><span
  6546. class="cmtt-8">&#x00A0;</span><span
  6547. class="cmtt-8">&#x00A0;6)</span><span
  6548. class="cmtt-8">&#x00A0;[class]</span><span
  6549. class="cmtt-8">&#x00A0;=</span><span
  6550. class="cmtt-8">&#x00A0;vector</span><span
  6551. class="cmtt-8">&#x00A0;[floor1_partition_class]</span><span
  6552. class="cmtt-8">&#x00A0;</span><span
  6553. class="cmtt-8">&#x00A0;element</span><span
  6554. class="cmtt-8">&#x00A0;[i]</span>
  6555. <br class="fancyvrb" /><a
  6556. id="x1-100018r8"></a><span
  6557. class="cmr-6">8</span><span
  6558. class="cmtt-8">&#x00A0;</span><span
  6559. class="cmtt-8">&#x00A0;</span><span
  6560. class="cmtt-8">&#x00A0;</span><span
  6561. class="cmtt-8">&#x00A0;</span><span
  6562. class="cmtt-8">&#x00A0;</span><span
  6563. class="cmtt-8">&#x00A0;</span><span
  6564. class="cmtt-8">&#x00A0;</span><span
  6565. class="cmtt-8">&#x00A0;</span><span
  6566. class="cmtt-8">&#x00A0;7)</span><span
  6567. class="cmtt-8">&#x00A0;[cdim]</span><span
  6568. class="cmtt-8">&#x00A0;</span><span
  6569. class="cmtt-8">&#x00A0;=</span><span
  6570. class="cmtt-8">&#x00A0;vector</span><span
  6571. class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
  6572. class="cmtt-8">&#x00A0;element</span><span
  6573. class="cmtt-8">&#x00A0;[class]</span>
  6574. <br class="fancyvrb" /><a
  6575. id="x1-100020r9"></a><span
  6576. class="cmr-6">9</span><span
  6577. class="cmtt-8">&#x00A0;</span><span
  6578. class="cmtt-8">&#x00A0;</span><span
  6579. class="cmtt-8">&#x00A0;</span><span
  6580. class="cmtt-8">&#x00A0;</span><span
  6581. class="cmtt-8">&#x00A0;</span><span
  6582. class="cmtt-8">&#x00A0;</span><span
  6583. class="cmtt-8">&#x00A0;</span><span
  6584. class="cmtt-8">&#x00A0;</span><span
  6585. class="cmtt-8">&#x00A0;8)</span><span
  6586. class="cmtt-8">&#x00A0;[cbits]</span><span
  6587. class="cmtt-8">&#x00A0;=</span><span
  6588. class="cmtt-8">&#x00A0;vector</span><span
  6589. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  6590. class="cmtt-8">&#x00A0;element</span><span
  6591. class="cmtt-8">&#x00A0;[class]</span>
  6592. <br class="fancyvrb" /><a
  6593. id="x1-100022r10"></a><span
  6594. class="cmr-6">10</span><span
  6595. class="cmtt-8">&#x00A0;</span><span
  6596. class="cmtt-8">&#x00A0;</span><span
  6597. class="cmtt-8">&#x00A0;</span><span
  6598. class="cmtt-8">&#x00A0;</span><span
  6599. class="cmtt-8">&#x00A0;</span><span
  6600. class="cmtt-8">&#x00A0;</span><span
  6601. class="cmtt-8">&#x00A0;</span><span
  6602. class="cmtt-8">&#x00A0;</span><span
  6603. class="cmtt-8">&#x00A0;9)</span><span
  6604. class="cmtt-8">&#x00A0;[csub]</span><span
  6605. class="cmtt-8">&#x00A0;</span><span
  6606. class="cmtt-8">&#x00A0;=</span><span
  6607. class="cmtt-8">&#x00A0;(2</span><span
  6608. class="cmtt-8">&#x00A0;exponent</span><span
  6609. class="cmtt-8">&#x00A0;[cbits])-1</span>
  6610. <br class="fancyvrb" /><a
  6611. id="x1-100024r11"></a><span
  6612. class="cmr-6">11</span><span
  6613. class="cmtt-8">&#x00A0;</span><span
  6614. class="cmtt-8">&#x00A0;</span><span
  6615. class="cmtt-8">&#x00A0;</span><span
  6616. class="cmtt-8">&#x00A0;</span><span
  6617. class="cmtt-8">&#x00A0;</span><span
  6618. class="cmtt-8">&#x00A0;</span><span
  6619. class="cmtt-8">&#x00A0;</span><span
  6620. class="cmtt-8">&#x00A0;10)</span><span
  6621. class="cmtt-8">&#x00A0;[cval]</span><span
  6622. class="cmtt-8">&#x00A0;</span><span
  6623. class="cmtt-8">&#x00A0;=</span><span
  6624. class="cmtt-8">&#x00A0;0</span>
  6625. <br class="fancyvrb" /><a
  6626. id="x1-100026r12"></a><span
  6627. class="cmr-6">12</span><span
  6628. class="cmtt-8">&#x00A0;</span><span
  6629. class="cmtt-8">&#x00A0;</span><span
  6630. class="cmtt-8">&#x00A0;</span><span
  6631. class="cmtt-8">&#x00A0;</span><span
  6632. class="cmtt-8">&#x00A0;</span><span
  6633. class="cmtt-8">&#x00A0;</span><span
  6634. class="cmtt-8">&#x00A0;</span><span
  6635. class="cmtt-8">&#x00A0;11)</span><span
  6636. class="cmtt-8">&#x00A0;if</span><span
  6637. class="cmtt-8">&#x00A0;(</span><span
  6638. class="cmtt-8">&#x00A0;[cbits]</span><span
  6639. class="cmtt-8">&#x00A0;is</span><span
  6640. class="cmtt-8">&#x00A0;greater</span><span
  6641. class="cmtt-8">&#x00A0;than</span><span
  6642. class="cmtt-8">&#x00A0;zero</span><span
  6643. class="cmtt-8">&#x00A0;)</span><span
  6644. class="cmtt-8">&#x00A0;</span><span
  6645. class="cmsy-8">{</span>
  6646. <br class="fancyvrb" /><a
  6647. id="x1-100028r13"></a><span
  6648. class="cmr-6">13</span><span
  6649. class="cmtt-8">&#x00A0;</span><span
  6650. class="cmtt-8">&#x00A0;</span>
  6651. <br class="fancyvrb" /><a
  6652. id="x1-100030r14"></a><span
  6653. class="cmr-6">14</span><span
  6654. class="cmtt-8">&#x00A0;</span><span
  6655. class="cmtt-8">&#x00A0;</span><span
  6656. class="cmtt-8">&#x00A0;</span><span
  6657. class="cmtt-8">&#x00A0;</span><span
  6658. class="cmtt-8">&#x00A0;</span><span
  6659. class="cmtt-8">&#x00A0;</span><span
  6660. class="cmtt-8">&#x00A0;</span><span
  6661. class="cmtt-8">&#x00A0;</span><span
  6662. class="cmtt-8">&#x00A0;</span><span
  6663. class="cmtt-8">&#x00A0;</span><span
  6664. class="cmtt-8">&#x00A0;</span><span
  6665. class="cmtt-8">&#x00A0;</span><span
  6666. class="cmtt-8">&#x00A0;</span><span
  6667. class="cmtt-8">&#x00A0;</span><span
  6668. class="cmtt-8">&#x00A0;12)</span><span
  6669. class="cmtt-8">&#x00A0;[cval]</span><span
  6670. class="cmtt-8">&#x00A0;=</span><span
  6671. class="cmtt-8">&#x00A0;read</span><span
  6672. class="cmtt-8">&#x00A0;from</span><span
  6673. class="cmtt-8">&#x00A0;packet</span><span
  6674. class="cmtt-8">&#x00A0;using</span><span
  6675. class="cmtt-8">&#x00A0;codebook</span><span
  6676. class="cmtt-8">&#x00A0;number</span>
  6677. <br class="fancyvrb" /><a
  6678. id="x1-100032r15"></a><span
  6679. class="cmr-6">15</span><span
  6680. class="cmtt-8">&#x00A0;</span><span
  6681. class="cmtt-8">&#x00A0;</span><span
  6682. class="cmtt-8">&#x00A0;</span><span
  6683. class="cmtt-8">&#x00A0;</span><span
  6684. class="cmtt-8">&#x00A0;</span><span
  6685. class="cmtt-8">&#x00A0;</span><span
  6686. class="cmtt-8">&#x00A0;</span><span
  6687. class="cmtt-8">&#x00A0;</span><span
  6688. class="cmtt-8">&#x00A0;</span><span
  6689. class="cmtt-8">&#x00A0;</span><span
  6690. class="cmtt-8">&#x00A0;</span><span
  6691. class="cmtt-8">&#x00A0;</span><span
  6692. class="cmtt-8">&#x00A0;</span><span
  6693. class="cmtt-8">&#x00A0;</span><span
  6694. class="cmtt-8">&#x00A0;</span><span
  6695. class="cmtt-8">&#x00A0;</span><span
  6696. class="cmtt-8">&#x00A0;</span><span
  6697. class="cmtt-8">&#x00A0;</span><span
  6698. class="cmtt-8">&#x00A0;(vector</span><span
  6699. class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
  6700. class="cmtt-8">&#x00A0;element</span><span
  6701. class="cmtt-8">&#x00A0;[class])</span><span
  6702. class="cmtt-8">&#x00A0;in</span><span
  6703. class="cmtt-8">&#x00A0;scalar</span><span
  6704. class="cmtt-8">&#x00A0;context</span>
  6705. <br class="fancyvrb" /><a
  6706. id="x1-100034r16"></a><span
  6707. class="cmr-6">16</span><span
  6708. class="cmtt-8">&#x00A0;</span><span
  6709. class="cmtt-8">&#x00A0;</span><span
  6710. class="cmtt-8">&#x00A0;</span><span
  6711. class="cmtt-8">&#x00A0;</span><span
  6712. class="cmtt-8">&#x00A0;</span><span
  6713. class="cmtt-8">&#x00A0;</span><span
  6714. class="cmtt-8">&#x00A0;</span><span
  6715. class="cmtt-8">&#x00A0;</span><span
  6716. class="cmtt-8">&#x00A0;</span><span
  6717. class="cmtt-8">&#x00A0;</span><span
  6718. class="cmtt-8">&#x00A0;</span><span
  6719. class="cmtt-8">&#x00A0;</span><span
  6720. class="cmsy-8">}</span>
  6721. <br class="fancyvrb" /><a
  6722. id="x1-100036r17"></a><span
  6723. class="cmr-6">17</span><span
  6724. class="cmtt-8">&#x00A0;</span><span
  6725. class="cmtt-8">&#x00A0;</span>
  6726. <br class="fancyvrb" /><a
  6727. id="x1-100038r18"></a><span
  6728. class="cmr-6">18</span><span
  6729. class="cmtt-8">&#x00A0;</span><span
  6730. class="cmtt-8">&#x00A0;</span><span
  6731. class="cmtt-8">&#x00A0;</span><span
  6732. class="cmtt-8">&#x00A0;</span><span
  6733. class="cmtt-8">&#x00A0;</span><span
  6734. class="cmtt-8">&#x00A0;</span><span
  6735. class="cmtt-8">&#x00A0;</span><span
  6736. class="cmtt-8">&#x00A0;13)</span><span
  6737. class="cmtt-8">&#x00A0;iterate</span><span
  6738. class="cmtt-8">&#x00A0;[j]</span><span
  6739. class="cmtt-8">&#x00A0;over</span><span
  6740. class="cmtt-8">&#x00A0;the</span><span
  6741. class="cmtt-8">&#x00A0;range</span><span
  6742. class="cmtt-8">&#x00A0;0</span><span
  6743. class="cmtt-8">&#x00A0;...</span><span
  6744. class="cmtt-8">&#x00A0;[cdim]-1</span><span
  6745. class="cmtt-8">&#x00A0;</span><span
  6746. class="cmsy-8">{</span>
  6747. <br class="fancyvrb" /><a
  6748. id="x1-100040r19"></a><span
  6749. class="cmr-6">19</span><span
  6750. class="cmtt-8">&#x00A0;</span><span
  6751. class="cmtt-8">&#x00A0;</span>
  6752. <br class="fancyvrb" /><a
  6753. id="x1-100042r20"></a><span
  6754. class="cmr-6">20</span><span
  6755. class="cmtt-8">&#x00A0;</span><span
  6756. class="cmtt-8">&#x00A0;</span><span
  6757. class="cmtt-8">&#x00A0;</span><span
  6758. class="cmtt-8">&#x00A0;</span><span
  6759. class="cmtt-8">&#x00A0;</span><span
  6760. class="cmtt-8">&#x00A0;</span><span
  6761. class="cmtt-8">&#x00A0;</span><span
  6762. class="cmtt-8">&#x00A0;</span><span
  6763. class="cmtt-8">&#x00A0;</span><span
  6764. class="cmtt-8">&#x00A0;</span><span
  6765. class="cmtt-8">&#x00A0;</span><span
  6766. class="cmtt-8">&#x00A0;</span><span
  6767. class="cmtt-8">&#x00A0;</span><span
  6768. class="cmtt-8">&#x00A0;</span><span
  6769. class="cmtt-8">&#x00A0;14)</span><span
  6770. class="cmtt-8">&#x00A0;[book]</span><span
  6771. class="cmtt-8">&#x00A0;=</span><span
  6772. class="cmtt-8">&#x00A0;array</span><span
  6773. class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
  6774. class="cmtt-8">&#x00A0;element</span><span
  6775. class="cmtt-8">&#x00A0;[class],([cval]</span><span
  6776. class="cmtt-8">&#x00A0;bitwise</span><span
  6777. class="cmtt-8">&#x00A0;AND</span><span
  6778. class="cmtt-8">&#x00A0;[csub])</span>
  6779. <br class="fancyvrb" /><a
  6780. id="x1-100044r21"></a><span
  6781. class="cmr-6">21</span><span
  6782. class="cmtt-8">&#x00A0;</span><span
  6783. class="cmtt-8">&#x00A0;</span><span
  6784. class="cmtt-8">&#x00A0;</span><span
  6785. class="cmtt-8">&#x00A0;</span><span
  6786. class="cmtt-8">&#x00A0;</span><span
  6787. class="cmtt-8">&#x00A0;</span><span
  6788. class="cmtt-8">&#x00A0;</span><span
  6789. class="cmtt-8">&#x00A0;</span><span
  6790. class="cmtt-8">&#x00A0;</span><span
  6791. class="cmtt-8">&#x00A0;</span><span
  6792. class="cmtt-8">&#x00A0;</span><span
  6793. class="cmtt-8">&#x00A0;</span><span
  6794. class="cmtt-8">&#x00A0;</span><span
  6795. class="cmtt-8">&#x00A0;</span><span
  6796. class="cmtt-8">&#x00A0;15)</span><span
  6797. class="cmtt-8">&#x00A0;[cval]</span><span
  6798. class="cmtt-8">&#x00A0;=</span><span
  6799. class="cmtt-8">&#x00A0;[cval]</span><span
  6800. class="cmtt-8">&#x00A0;right</span><span
  6801. class="cmtt-8">&#x00A0;shifted</span><span
  6802. class="cmtt-8">&#x00A0;[cbits]</span><span
  6803. class="cmtt-8">&#x00A0;bits</span>
  6804. <br class="fancyvrb" /><a
  6805. id="x1-100046r22"></a><span
  6806. class="cmr-6">22</span><span
  6807. class="cmtt-8">&#x00A0;</span><span
  6808. class="cmtt-8">&#x00A0; </span><span
  6809. class="cmtt-8">&#x00A0;</span><span
  6810. class="cmtt-8">&#x00A0;</span><span
  6811. class="cmtt-8">&#x00A0;</span><span
  6812. class="cmtt-8">&#x00A0;</span><span
  6813. class="cmtt-8">&#x00A0;16)</span><span
  6814. class="cmtt-8">&#x00A0;if</span><span
  6815. class="cmtt-8">&#x00A0;(</span><span
  6816. class="cmtt-8">&#x00A0;[book]</span><span
  6817. class="cmtt-8">&#x00A0;is</span><span
  6818. class="cmtt-8">&#x00A0;not</span><span
  6819. class="cmtt-8">&#x00A0;less</span><span
  6820. class="cmtt-8">&#x00A0;than</span><span
  6821. class="cmtt-8">&#x00A0;zero</span><span
  6822. class="cmtt-8">&#x00A0;)</span><span
  6823. class="cmtt-8">&#x00A0;</span><span
  6824. class="cmsy-8">{</span>
  6825. <br class="fancyvrb" /><a
  6826. id="x1-100048r23"></a><span
  6827. class="cmr-6">23</span><span
  6828. class="cmtt-8">&#x00A0;</span><span
  6829. class="cmtt-8">&#x00A0;</span>
  6830. <br class="fancyvrb" /><a
  6831. id="x1-100050r24"></a><span
  6832. class="cmr-6">24</span><span
  6833. class="cmtt-8">&#x00A0;</span><span
  6834. class="cmtt-8">&#x00A0; </span><span
  6835. class="cmtt-8">&#x00A0;</span><span
  6836. class="cmtt-8">&#x00A0;</span><span
  6837. class="cmtt-8">&#x00A0;</span><span
  6838. class="cmtt-8">&#x00A0;</span><span
  6839. class="cmtt-8">&#x00A0;</span><span
  6840. class="cmtt-8">&#x00A0;</span><span
  6841. class="cmtt-8">&#x00A0;</span><span
  6842. class="cmtt-8">&#x00A0;</span><span
  6843. class="cmtt-8">&#x00A0;</span><span
  6844. class="cmtt-8">&#x00A0;</span><span
  6845. class="cmtt-8">&#x00A0;17)</span><span
  6846. class="cmtt-8">&#x00A0;vector</span><span
  6847. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6848. class="cmtt-8">&#x00A0;element</span><span
  6849. class="cmtt-8">&#x00A0;([j]+[offset])</span><span
  6850. class="cmtt-8">&#x00A0;=</span><span
  6851. class="cmtt-8">&#x00A0;read</span><span
  6852. class="cmtt-8">&#x00A0;from</span><span
  6853. class="cmtt-8">&#x00A0;packet</span><span
  6854. class="cmtt-8">&#x00A0;using</span><span
  6855. class="cmtt-8">&#x00A0;codebook</span>
  6856. <br class="fancyvrb" /><a
  6857. id="x1-100052r25"></a><span
  6858. class="cmr-6">25</span><span
  6859. class="cmtt-8">&#x00A0;</span><span
  6860. class="cmtt-8">&#x00A0;</span><span
  6861. class="cmtt-8">&#x00A0;</span><span
  6862. class="cmtt-8">&#x00A0;</span><span
  6863. class="cmtt-8">&#x00A0;</span><span
  6864. class="cmtt-8">&#x00A0;</span><span
  6865. class="cmtt-8">&#x00A0;</span><span
  6866. class="cmtt-8">&#x00A0;</span><span
  6867. class="cmtt-8">&#x00A0;</span><span
  6868. class="cmtt-8">&#x00A0;</span><span
  6869. class="cmtt-8">&#x00A0;</span><span
  6870. class="cmtt-8">&#x00A0;</span><span
  6871. class="cmtt-8">&#x00A0;</span><span
  6872. class="cmtt-8">&#x00A0;</span><span
  6873. class="cmtt-8">&#x00A0;</span><span
  6874. class="cmtt-8">&#x00A0;</span><span
  6875. class="cmtt-8">&#x00A0;</span><span
  6876. class="cmtt-8">&#x00A0;</span><span
  6877. class="cmtt-8">&#x00A0;</span><span
  6878. class="cmtt-8">&#x00A0;</span><span
  6879. class="cmtt-8">&#x00A0;</span><span
  6880. class="cmtt-8">&#x00A0;</span><span
  6881. class="cmtt-8">&#x00A0;</span><span
  6882. class="cmtt-8">&#x00A0;</span><span
  6883. class="cmtt-8">&#x00A0;[book]</span><span
  6884. class="cmtt-8">&#x00A0;in</span><span
  6885. class="cmtt-8">&#x00A0;scalar</span><span
  6886. class="cmtt-8">&#x00A0;context</span>
  6887. <br class="fancyvrb" /><a
  6888. id="x1-100054r26"></a><span
  6889. class="cmr-6">26</span><span
  6890. class="cmtt-8">&#x00A0;</span><span
  6891. class="cmtt-8">&#x00A0;</span>
  6892. <br class="fancyvrb" /><a
  6893. id="x1-100056r27"></a><span
  6894. class="cmr-6">27</span><span
  6895. class="cmtt-8">&#x00A0;</span><span
  6896. class="cmtt-8">&#x00A0;</span><span
  6897. class="cmtt-8">&#x00A0;</span><span
  6898. class="cmtt-8">&#x00A0;</span><span
  6899. class="cmtt-8">&#x00A0;</span><span
  6900. class="cmtt-8">&#x00A0;</span><span
  6901. class="cmtt-8">&#x00A0;</span><span
  6902. class="cmtt-8">&#x00A0;</span><span
  6903. class="cmtt-8">&#x00A0;</span><span
  6904. class="cmtt-8">&#x00A0;</span><span
  6905. class="cmtt-8">&#x00A0;</span><span
  6906. class="cmtt-8">&#x00A0;</span><span
  6907. class="cmtt-8">&#x00A0;</span><span
  6908. class="cmtt-8">&#x00A0;</span><span
  6909. class="cmtt-8">&#x00A0;</span><span
  6910. class="cmtt-8">&#x00A0;</span><span
  6911. class="cmtt-8">&#x00A0;</span><span
  6912. class="cmtt-8">&#x00A0;</span><span
  6913. class="cmtt-8">&#x00A0;</span><span
  6914. class="cmsy-8">}</span><span
  6915. class="cmtt-8">&#x00A0;else</span><span
  6916. class="cmtt-8">&#x00A0;[book]</span><span
  6917. class="cmtt-8">&#x00A0;is</span><span
  6918. class="cmtt-8">&#x00A0;less</span><span
  6919. class="cmtt-8">&#x00A0;than</span><span
  6920. class="cmtt-8">&#x00A0;zero</span><span
  6921. class="cmtt-8">&#x00A0;</span><span
  6922. class="cmsy-8">{</span>
  6923. <br class="fancyvrb" /><a
  6924. id="x1-100058r28"></a><span
  6925. class="cmr-6">28</span><span
  6926. class="cmtt-8">&#x00A0;</span><span
  6927. class="cmtt-8">&#x00A0;</span>
  6928. <br class="fancyvrb" /><a
  6929. id="x1-100060r29"></a><span
  6930. class="cmr-6">29</span><span
  6931. class="cmtt-8">&#x00A0;</span><span
  6932. class="cmtt-8">&#x00A0; </span><span
  6933. class="cmtt-8">&#x00A0;</span><span
  6934. class="cmtt-8">&#x00A0;</span><span
  6935. class="cmtt-8">&#x00A0;</span><span
  6936. class="cmtt-8">&#x00A0;</span><span
  6937. class="cmtt-8">&#x00A0;</span><span
  6938. class="cmtt-8">&#x00A0;</span><span
  6939. class="cmtt-8">&#x00A0;</span><span
  6940. class="cmtt-8">&#x00A0;</span><span
  6941. class="cmtt-8">&#x00A0;</span><span
  6942. class="cmtt-8">&#x00A0;</span><span
  6943. class="cmtt-8">&#x00A0;18)</span><span
  6944. class="cmtt-8">&#x00A0;vector</span><span
  6945. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6946. class="cmtt-8">&#x00A0;element</span><span
  6947. class="cmtt-8">&#x00A0;([j]+[offset])</span><span
  6948. class="cmtt-8">&#x00A0;=</span><span
  6949. class="cmtt-8">&#x00A0;0</span>
  6950. <br class="fancyvrb" /><a
  6951. id="x1-100062r30"></a><span
  6952. class="cmr-6">30</span><span
  6953. class="cmtt-8">&#x00A0;</span><span
  6954. class="cmtt-8">&#x00A0;</span>
  6955. <br class="fancyvrb" /><a
  6956. id="x1-100064r31"></a><span
  6957. class="cmr-6">31</span><span
  6958. class="cmtt-8">&#x00A0;</span><span
  6959. class="cmtt-8">&#x00A0;</span><span
  6960. class="cmtt-8">&#x00A0;</span><span
  6961. class="cmtt-8">&#x00A0;</span><span
  6962. class="cmtt-8">&#x00A0;</span><span
  6963. class="cmtt-8">&#x00A0;</span><span
  6964. class="cmtt-8">&#x00A0;</span><span
  6965. class="cmtt-8">&#x00A0;</span><span
  6966. class="cmtt-8">&#x00A0;</span><span
  6967. class="cmtt-8">&#x00A0;</span><span
  6968. class="cmtt-8">&#x00A0;</span><span
  6969. class="cmtt-8">&#x00A0;</span><span
  6970. class="cmtt-8">&#x00A0;</span><span
  6971. class="cmtt-8">&#x00A0;</span><span
  6972. class="cmtt-8">&#x00A0;</span><span
  6973. class="cmtt-8">&#x00A0;</span><span
  6974. class="cmtt-8">&#x00A0;</span><span
  6975. class="cmtt-8">&#x00A0;</span><span
  6976. class="cmtt-8">&#x00A0;</span><span
  6977. class="cmsy-8">}</span>
  6978. <br class="fancyvrb" /><a
  6979. id="x1-100066r32"></a><span
  6980. class="cmr-6">32</span><span
  6981. class="cmtt-8">&#x00A0;</span><span
  6982. class="cmtt-8">&#x00A0;</span><span
  6983. class="cmtt-8">&#x00A0;</span><span
  6984. class="cmtt-8">&#x00A0;</span><span
  6985. class="cmtt-8">&#x00A0;</span><span
  6986. class="cmtt-8">&#x00A0;</span><span
  6987. class="cmtt-8">&#x00A0;</span><span
  6988. class="cmtt-8">&#x00A0;</span><span
  6989. class="cmtt-8">&#x00A0;</span><span
  6990. class="cmtt-8">&#x00A0;</span><span
  6991. class="cmtt-8">&#x00A0;</span><span
  6992. class="cmtt-8">&#x00A0;</span><span
  6993. class="cmsy-8">}</span>
  6994. <br class="fancyvrb" /><a
  6995. id="x1-100068r33"></a><span
  6996. class="cmr-6">33</span><span
  6997. class="cmtt-8">&#x00A0;</span><span
  6998. class="cmtt-8">&#x00A0;</span>
  6999. <br class="fancyvrb" /><a
  7000. id="x1-100070r34"></a><span
  7001. class="cmr-6">34</span><span
  7002. class="cmtt-8">&#x00A0;</span><span
  7003. class="cmtt-8">&#x00A0;</span><span
  7004. class="cmtt-8">&#x00A0;</span><span
  7005. class="cmtt-8">&#x00A0;</span><span
  7006. class="cmtt-8">&#x00A0;</span><span
  7007. class="cmtt-8">&#x00A0;</span><span
  7008. class="cmtt-8">&#x00A0;</span><span
  7009. class="cmtt-8">&#x00A0;19)</span><span
  7010. class="cmtt-8">&#x00A0;[offset]</span><span
  7011. class="cmtt-8">&#x00A0;=</span><span
  7012. class="cmtt-8">&#x00A0;[offset]</span><span
  7013. class="cmtt-8">&#x00A0;+</span><span
  7014. class="cmtt-8">&#x00A0;[cdim]</span>
  7015. <br class="fancyvrb" /><a
  7016. id="x1-100072r35"></a><span
  7017. class="cmr-6">35</span><span
  7018. class="cmtt-8">&#x00A0;</span><span
  7019. class="cmtt-8">&#x00A0;</span>
  7020. <br class="fancyvrb" /><a
  7021. id="x1-100074r36"></a><span
  7022. class="cmr-6">36</span><span
  7023. class="cmtt-8">&#x00A0;</span><span
  7024. class="cmtt-8">&#x00A0;</span><span
  7025. class="cmtt-8">&#x00A0;</span><span
  7026. class="cmtt-8">&#x00A0;</span><span
  7027. class="cmtt-8">&#x00A0;</span><span
  7028. class="cmtt-8">&#x00A0;</span><span
  7029. class="cmtt-8">&#x00A0;</span><span
  7030. class="cmsy-8">}</span>
  7031. <br class="fancyvrb" /><a
  7032. id="x1-100076r37"></a><span
  7033. class="cmr-6">37</span><span
  7034. class="cmtt-8">&#x00A0;</span><span
  7035. class="cmtt-8">&#x00A0;</span>
  7036. <br class="fancyvrb" /><a
  7037. id="x1-100078r38"></a><span
  7038. class="cmr-6">38</span><span
  7039. class="cmtt-8">&#x00A0;</span><span
  7040. class="cmtt-8">&#x00A0;</span><span
  7041. class="cmtt-8">&#x00A0;20)</span><span
  7042. class="cmtt-8">&#x00A0;done</span>
  7043. </div>
  7044. <!--l. 229--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
  7045. end-of-packet is reached during any read operation above, floor decode is to return &#8217;unused&#8217;
  7046. status as if the <span
  7047. class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
  7048. <!--l. 235--><p class="noindent" >Vector <span
  7049. class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
  7050. <!--l. 240--><p class="noindent" >
  7051. <h5 class="subsubsectionHead"><span class="titlemark">7.2.4. </span> <a
  7052. id="x1-1010007.2.4"></a>curve computation</h5>
  7053. <!--l. 242--><p class="noindent" >Curve computation is split into two logical steps; the first step derives final Y amplitude values
  7054. from the encoded, wrapped difference values taken from the bitstream. The second step
  7055. plots the curve lines. Also, although zero-difference values are used in the iterative
  7056. prediction to find final Y values, these points are conditionally skipped during final
  7057. line computation in step two. Skipping zero-difference values allows a smoother line
  7058. fit.
  7059. <!--l. 250--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
  7060. implementors are warned to follow the details closely. Deviation from implementing a strictly
  7061. equivalent algorithm can result in serious decoding errors.
  7062. <!--l. 255--><p class="noindent" ><span
  7063. class="cmti-12">Additional note: </span>Although <span
  7064. class="cmtt-12">[floor1_final_Y] </span>values in the prediction loop and at the end of
  7065. step 1 are inherently limited by the prediction algorithm to [0, <span
  7066. class="cmtt-12">[range]</span>), it is possible to abuse
  7067. the setup and codebook machinery to produce negative or over-range results. We suggest that
  7068. decoder implementations guard the values in vector <span
  7069. class="cmtt-12">[floor1_final_Y] </span>by clamping each
  7070. element to [0, <span
  7071. class="cmtt-12">[range]</span>) after step 1. Variants of this suggestion are acceptable as valid floor1
  7072. setups cannot produce out of range values.
  7073. <!--l. 266--><p class="noindent" >
  7074. <dl class="description"><dt class="description">
  7075. <span
  7076. class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd
  7077. class="description">
  7078. <!--l. 268--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
  7079. values, then apply to line prediction.
  7080. <!--l. 271--><p class="noindent" >
  7081. <div class="fancyvrb" id="fancyvrb31">
  7082. <a
  7083. id="x1-101002r1"></a><span
  7084. class="cmr-6">1</span><span
  7085. class="cmtt-8">&#x00A0;</span><span
  7086. class="cmtt-8">&#x00A0;</span><span
  7087. class="cmtt-8">&#x00A0;</span><span
  7088. class="cmtt-8">&#x00A0;1)</span><span
  7089. class="cmtt-8">&#x00A0;[range]</span><span
  7090. class="cmtt-8">&#x00A0;=</span><span
  7091. class="cmtt-8">&#x00A0;vector</span><span
  7092. class="cmtt-8">&#x00A0;</span><span
  7093. class="cmsy-8">{</span><span
  7094. class="cmtt-8">&#x00A0;256,</span><span
  7095. class="cmtt-8">&#x00A0;128,</span><span
  7096. class="cmtt-8">&#x00A0;86,</span><span
  7097. class="cmtt-8">&#x00A0;64</span><span
  7098. class="cmtt-8">&#x00A0;</span><span
  7099. class="cmsy-8">}</span><span
  7100. class="cmtt-8">&#x00A0;element</span><span
  7101. class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
  7102. <br class="fancyvrb" /><a
  7103. id="x1-101004r2"></a><span
  7104. class="cmr-6">2</span><span
  7105. class="cmtt-8">&#x00A0;</span><span
  7106. class="cmtt-8">&#x00A0;</span><span
  7107. class="cmtt-8">&#x00A0;</span><span
  7108. class="cmtt-8">&#x00A0;2)</span><span
  7109. class="cmtt-8">&#x00A0;vector</span><span
  7110. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7111. class="cmtt-8">&#x00A0;element</span><span
  7112. class="cmtt-8">&#x00A0;[0]</span><span
  7113. class="cmtt-8">&#x00A0;=</span><span
  7114. class="cmtt-8">&#x00A0;set</span>
  7115. <br class="fancyvrb" /><a
  7116. id="x1-101006r3"></a><span
  7117. class="cmr-6">3</span><span
  7118. class="cmtt-8">&#x00A0;</span><span
  7119. class="cmtt-8">&#x00A0;</span><span
  7120. class="cmtt-8">&#x00A0;</span><span
  7121. class="cmtt-8">&#x00A0;3)</span><span
  7122. class="cmtt-8">&#x00A0;vector</span><span
  7123. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7124. class="cmtt-8">&#x00A0;element</span><span
  7125. class="cmtt-8">&#x00A0;[1]</span><span
  7126. class="cmtt-8">&#x00A0;=</span><span
  7127. class="cmtt-8">&#x00A0;set</span>
  7128. <br class="fancyvrb" /><a
  7129. id="x1-101008r4"></a><span
  7130. class="cmr-6">4</span><span
  7131. class="cmtt-8">&#x00A0;</span><span
  7132. class="cmtt-8">&#x00A0;</span><span
  7133. class="cmtt-8">&#x00A0;</span><span
  7134. class="cmtt-8">&#x00A0;4)</span><span
  7135. class="cmtt-8">&#x00A0;vector</span><span
  7136. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7137. class="cmtt-8">&#x00A0;element</span><span
  7138. class="cmtt-8">&#x00A0;[0]</span><span
  7139. class="cmtt-8">&#x00A0;=</span><span
  7140. class="cmtt-8">&#x00A0;vector</span><span
  7141. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  7142. class="cmtt-8">&#x00A0;element</span><span
  7143. class="cmtt-8">&#x00A0;[0]</span>
  7144. <br class="fancyvrb" /><a
  7145. id="x1-101010r5"></a><span
  7146. class="cmr-6">5</span><span
  7147. class="cmtt-8">&#x00A0;</span><span
  7148. class="cmtt-8">&#x00A0;</span><span
  7149. class="cmtt-8">&#x00A0;</span><span
  7150. class="cmtt-8">&#x00A0;5)</span><span
  7151. class="cmtt-8">&#x00A0;vector</span><span
  7152. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7153. class="cmtt-8">&#x00A0;element</span><span
  7154. class="cmtt-8">&#x00A0;[1]</span><span
  7155. class="cmtt-8">&#x00A0;=</span><span
  7156. class="cmtt-8">&#x00A0;vector</span><span
  7157. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  7158. class="cmtt-8">&#x00A0;element</span><span
  7159. class="cmtt-8">&#x00A0;[1]</span>
  7160. <br class="fancyvrb" /><a
  7161. id="x1-101012r6"></a><span
  7162. class="cmr-6">6</span><span
  7163. class="cmtt-8">&#x00A0;</span><span
  7164. class="cmtt-8">&#x00A0;</span><span
  7165. class="cmtt-8">&#x00A0;</span><span
  7166. class="cmtt-8">&#x00A0;6)</span><span
  7167. class="cmtt-8">&#x00A0;iterate</span><span
  7168. class="cmtt-8">&#x00A0;[i]</span><span
  7169. class="cmtt-8">&#x00A0;over</span><span
  7170. class="cmtt-8">&#x00A0;the</span><span
  7171. class="cmtt-8">&#x00A0;range</span><span
  7172. class="cmtt-8">&#x00A0;2</span><span
  7173. class="cmtt-8">&#x00A0;...</span><span
  7174. class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
  7175. class="cmtt-8">&#x00A0;</span><span
  7176. class="cmsy-8">{</span>
  7177. <br class="fancyvrb" /><a
  7178. id="x1-101014r7"></a><span
  7179. class="cmr-6">7</span><span
  7180. class="cmtt-8">&#x00A0;</span><span
  7181. class="cmtt-8">&#x00A0;</span>
  7182. <br class="fancyvrb" /><a
  7183. id="x1-101016r8"></a><span
  7184. class="cmr-6">8</span><span
  7185. class="cmtt-8">&#x00A0;</span><span
  7186. class="cmtt-8">&#x00A0;</span><span
  7187. class="cmtt-8">&#x00A0;</span><span
  7188. class="cmtt-8">&#x00A0;</span><span
  7189. class="cmtt-8">&#x00A0;</span><span
  7190. class="cmtt-8">&#x00A0;</span><span
  7191. class="cmtt-8">&#x00A0;</span><span
  7192. class="cmtt-8">&#x00A0;</span><span
  7193. class="cmtt-8">&#x00A0;7)</span><span
  7194. class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
  7195. class="cmtt-8">&#x00A0;=</span><span
  7196. class="cmtt-8">&#x00A0;</span><a
  7197. href="#x1-1200009.2.4"><span
  7198. class="cmtt-8">low_neighbor</span></a><span
  7199. class="cmtt-8">([floor1_X_list],[i])</span>
  7200. <br class="fancyvrb" /><a
  7201. id="x1-101018r9"></a><span
  7202. class="cmr-6">9</span><span
  7203. class="cmtt-8">&#x00A0;</span><span
  7204. class="cmtt-8">&#x00A0;</span><span
  7205. class="cmtt-8">&#x00A0;</span><span
  7206. class="cmtt-8">&#x00A0;</span><span
  7207. class="cmtt-8">&#x00A0;</span><span
  7208. class="cmtt-8">&#x00A0;</span><span
  7209. class="cmtt-8">&#x00A0;</span><span
  7210. class="cmtt-8">&#x00A0;</span><span
  7211. class="cmtt-8">&#x00A0;8)</span><span
  7212. class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
  7213. class="cmtt-8">&#x00A0;=</span><span
  7214. class="cmtt-8">&#x00A0;</span><a
  7215. href="#x1-1210009.2.5"><span
  7216. class="cmtt-8">high_neighbor</span></a><span
  7217. class="cmtt-8">([floor1_X_list],[i])</span>
  7218. <br class="fancyvrb" /><a
  7219. id="x1-101020r10"></a><span
  7220. class="cmr-6">10</span><span
  7221. class="cmtt-8">&#x00A0;</span><span
  7222. class="cmtt-8">&#x00A0;</span>
  7223. <br class="fancyvrb" /><a
  7224. id="x1-101022r11"></a><span
  7225. class="cmr-6">11</span><span
  7226. class="cmtt-8">&#x00A0;</span><span
  7227. class="cmtt-8">&#x00A0;</span><span
  7228. class="cmtt-8">&#x00A0;</span><span
  7229. class="cmtt-8">&#x00A0;</span><span
  7230. class="cmtt-8">&#x00A0;</span><span
  7231. class="cmtt-8">&#x00A0;</span><span
  7232. class="cmtt-8">&#x00A0;</span><span
  7233. class="cmtt-8">&#x00A0;</span><span
  7234. class="cmtt-8">&#x00A0;9)</span><span
  7235. class="cmtt-8">&#x00A0;[predicted]</span><span
  7236. class="cmtt-8">&#x00A0;=</span><span
  7237. class="cmtt-8">&#x00A0;</span><a
  7238. href="#x1-1220009.2.6"><span
  7239. class="cmtt-8">render_point</span></a><span
  7240. class="cmtt-8">(</span><span
  7241. class="cmtt-8">&#x00A0;vector</span><span
  7242. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  7243. class="cmtt-8">&#x00A0;element</span><span
  7244. class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
  7245. <br class="fancyvrb" /><a
  7246. id="x1-101024r12"></a><span
  7247. class="cmr-6">12</span><span
  7248. class="cmtt-8">&#x00A0;</span><span
  7249. class="cmtt-8">&#x00A0; </span><span
  7250. class="cmtt-8">&#x00A0;</span><span
  7251. class="cmtt-8">&#x00A0;</span><span
  7252. class="cmtt-8">&#x00A0;</span><span
  7253. class="cmtt-8">&#x00A0;</span><span
  7254. class="cmtt-8">&#x00A0;</span><span
  7255. class="cmtt-8">&#x00A0;vector</span><span
  7256. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7257. class="cmtt-8">&#x00A0;element</span><span
  7258. class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
  7259. <br class="fancyvrb" /><a
  7260. id="x1-101026r13"></a><span
  7261. class="cmr-6">13</span><span
  7262. class="cmtt-8">&#x00A0;</span><span
  7263. class="cmtt-8">&#x00A0;</span><span
  7264. class="cmtt-8">&#x00A0;</span><span
  7265. class="cmtt-8">&#x00A0;</span><span
  7266. class="cmtt-8">&#x00A0;</span><span
  7267. class="cmtt-8">&#x00A0;</span><span
  7268. class="cmtt-8">&#x00A0;</span><span
  7269. class="cmtt-8">&#x00A0;</span><span
  7270. class="cmtt-8">&#x00A0;</span><span
  7271. class="cmtt-8">&#x00A0;</span><span
  7272. class="cmtt-8">&#x00A0;</span><span
  7273. class="cmtt-8">&#x00A0;</span><span
  7274. class="cmtt-8">&#x00A0;</span><span
  7275. class="cmtt-8">&#x00A0;</span><span
  7276. class="cmtt-8">&#x00A0;</span><span
  7277. class="cmtt-8">&#x00A0;</span><span
  7278. class="cmtt-8">&#x00A0;</span><span
  7279. class="cmtt-8">&#x00A0;</span><span
  7280. class="cmtt-8">&#x00A0;</span><span
  7281. class="cmtt-8">&#x00A0;</span><span
  7282. class="cmtt-8">&#x00A0;</span><span
  7283. class="cmtt-8">&#x00A0;</span><span
  7284. class="cmtt-8">&#x00A0;</span><span
  7285. class="cmtt-8">&#x00A0;</span><span
  7286. class="cmtt-8">&#x00A0;</span><span
  7287. class="cmtt-8">&#x00A0;</span><span
  7288. class="cmtt-8">&#x00A0;</span><span
  7289. class="cmtt-8">&#x00A0;</span><span
  7290. class="cmtt-8">&#x00A0;</span><span
  7291. class="cmtt-8">&#x00A0;</span><span
  7292. class="cmtt-8">&#x00A0;</span><span
  7293. class="cmtt-8">&#x00A0;</span><span
  7294. class="cmtt-8">&#x00A0;</span><span
  7295. class="cmtt-8">&#x00A0;</span><span
  7296. class="cmtt-8">&#x00A0;</span><span
  7297. class="cmtt-8">&#x00A0;</span><span
  7298. class="cmtt-8">&#x00A0;</span><span
  7299. class="cmtt-8">&#x00A0;</span><span
  7300. class="cmtt-8">&#x00A0;</span><span
  7301. class="cmtt-8">&#x00A0;vector</span><span
  7302. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  7303. class="cmtt-8">&#x00A0;element</span><span
  7304. class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
  7305. <br class="fancyvrb" /><a
  7306. id="x1-101028r14"></a><span
  7307. class="cmr-6">14</span><span
  7308. class="cmtt-8">&#x00A0;</span><span
  7309. class="cmtt-8">&#x00A0; </span><span
  7310. class="cmtt-8">&#x00A0;</span><span
  7311. class="cmtt-8">&#x00A0;</span><span
  7312. class="cmtt-8">&#x00A0;</span><span
  7313. class="cmtt-8">&#x00A0;</span><span
  7314. class="cmtt-8">&#x00A0;</span><span
  7315. class="cmtt-8">&#x00A0;vector</span><span
  7316. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7317. class="cmtt-8">&#x00A0;element</span><span
  7318. class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
  7319. <br class="fancyvrb" /><a
  7320. id="x1-101030r15"></a><span
  7321. class="cmr-6">15</span><span
  7322. class="cmtt-8">&#x00A0;</span><span
  7323. class="cmtt-8">&#x00A0;</span><span
  7324. class="cmtt-8">&#x00A0;</span><span
  7325. class="cmtt-8">&#x00A0;</span><span
  7326. class="cmtt-8">&#x00A0;</span><span
  7327. class="cmtt-8">&#x00A0;</span><span
  7328. class="cmtt-8">&#x00A0;</span><span
  7329. class="cmtt-8">&#x00A0;</span><span
  7330. class="cmtt-8">&#x00A0;</span><span
  7331. class="cmtt-8">&#x00A0;</span><span
  7332. class="cmtt-8">&#x00A0;</span><span
  7333. class="cmtt-8">&#x00A0;</span><span
  7334. class="cmtt-8">&#x00A0;</span><span
  7335. class="cmtt-8">&#x00A0;</span><span
  7336. class="cmtt-8">&#x00A0;</span><span
  7337. class="cmtt-8">&#x00A0;</span><span
  7338. class="cmtt-8">&#x00A0;</span><span
  7339. class="cmtt-8">&#x00A0;</span><span
  7340. class="cmtt-8">&#x00A0;</span><span
  7341. class="cmtt-8">&#x00A0;</span><span
  7342. class="cmtt-8">&#x00A0;</span><span
  7343. class="cmtt-8">&#x00A0;</span><span
  7344. class="cmtt-8">&#x00A0;</span><span
  7345. class="cmtt-8">&#x00A0;</span><span
  7346. class="cmtt-8">&#x00A0;</span><span
  7347. class="cmtt-8">&#x00A0;</span><span
  7348. class="cmtt-8">&#x00A0;</span><span
  7349. class="cmtt-8">&#x00A0;</span><span
  7350. class="cmtt-8">&#x00A0;</span><span
  7351. class="cmtt-8">&#x00A0;</span><span
  7352. class="cmtt-8">&#x00A0;</span><span
  7353. class="cmtt-8">&#x00A0;</span><span
  7354. class="cmtt-8">&#x00A0;</span><span
  7355. class="cmtt-8">&#x00A0;</span><span
  7356. class="cmtt-8">&#x00A0;</span><span
  7357. class="cmtt-8">&#x00A0;</span><span
  7358. class="cmtt-8">&#x00A0;</span><span
  7359. class="cmtt-8">&#x00A0;</span><span
  7360. class="cmtt-8">&#x00A0;</span><span
  7361. class="cmtt-8">&#x00A0;vector</span><span
  7362. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  7363. class="cmtt-8">&#x00A0;element</span><span
  7364. class="cmtt-8">&#x00A0;[i]</span><span
  7365. class="cmtt-8">&#x00A0;)</span>
  7366. <br class="fancyvrb" /><a
  7367. id="x1-101032r16"></a><span
  7368. class="cmr-6">16</span><span
  7369. class="cmtt-8">&#x00A0;</span><span
  7370. class="cmtt-8">&#x00A0;</span>
  7371. <br class="fancyvrb" /><a
  7372. id="x1-101034r17"></a><span
  7373. class="cmr-6">17</span><span
  7374. class="cmtt-8">&#x00A0;</span><span
  7375. class="cmtt-8">&#x00A0;</span><span
  7376. class="cmtt-8">&#x00A0;</span><span
  7377. class="cmtt-8">&#x00A0;</span><span
  7378. class="cmtt-8">&#x00A0;</span><span
  7379. class="cmtt-8">&#x00A0;</span><span
  7380. class="cmtt-8">&#x00A0;</span><span
  7381. class="cmtt-8">&#x00A0;10)</span><span
  7382. class="cmtt-8">&#x00A0;[val]</span><span
  7383. class="cmtt-8">&#x00A0;=</span><span
  7384. class="cmtt-8">&#x00A0;vector</span><span
  7385. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  7386. class="cmtt-8">&#x00A0;element</span><span
  7387. class="cmtt-8">&#x00A0;[i]</span>
  7388. <br class="fancyvrb" /><a
  7389. id="x1-101036r18"></a><span
  7390. class="cmr-6">18</span><span
  7391. class="cmtt-8">&#x00A0;</span><span
  7392. class="cmtt-8">&#x00A0;</span><span
  7393. class="cmtt-8">&#x00A0;</span><span
  7394. class="cmtt-8">&#x00A0;</span><span
  7395. class="cmtt-8">&#x00A0;</span><span
  7396. class="cmtt-8">&#x00A0;</span><span
  7397. class="cmtt-8">&#x00A0;</span><span
  7398. class="cmtt-8">&#x00A0;11)</span><span
  7399. class="cmtt-8">&#x00A0;[highroom]</span><span
  7400. class="cmtt-8">&#x00A0;=</span><span
  7401. class="cmtt-8">&#x00A0;[range]</span><span
  7402. class="cmtt-8">&#x00A0;-</span><span
  7403. class="cmtt-8">&#x00A0;[predicted]</span>
  7404. <br class="fancyvrb" /><a
  7405. id="x1-101038r19"></a><span
  7406. class="cmr-6">19</span><span
  7407. class="cmtt-8">&#x00A0;</span><span
  7408. class="cmtt-8">&#x00A0;</span><span
  7409. class="cmtt-8">&#x00A0;</span><span
  7410. class="cmtt-8">&#x00A0;</span><span
  7411. class="cmtt-8">&#x00A0;</span><span
  7412. class="cmtt-8">&#x00A0;</span><span
  7413. class="cmtt-8">&#x00A0;</span><span
  7414. class="cmtt-8">&#x00A0;12)</span><span
  7415. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7416. class="cmtt-8">&#x00A0;</span><span
  7417. class="cmtt-8">&#x00A0;=</span><span
  7418. class="cmtt-8">&#x00A0;[predicted]</span>
  7419. <br class="fancyvrb" /><a
  7420. id="x1-101040r20"></a><span
  7421. class="cmr-6">20</span><span
  7422. class="cmtt-8">&#x00A0;</span><span
  7423. class="cmtt-8">&#x00A0;</span><span
  7424. class="cmtt-8">&#x00A0;</span><span
  7425. class="cmtt-8">&#x00A0;</span><span
  7426. class="cmtt-8">&#x00A0;</span><span
  7427. class="cmtt-8">&#x00A0;</span><span
  7428. class="cmtt-8">&#x00A0;</span><span
  7429. class="cmtt-8">&#x00A0;13)</span><span
  7430. class="cmtt-8">&#x00A0;if</span><span
  7431. class="cmtt-8">&#x00A0;(</span><span
  7432. class="cmtt-8">&#x00A0;[highroom]</span><span
  7433. class="cmtt-8">&#x00A0;is</span><span
  7434. class="cmtt-8">&#x00A0;less</span><span
  7435. class="cmtt-8">&#x00A0;than</span><span
  7436. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7437. class="cmtt-8">&#x00A0;)</span><span
  7438. class="cmtt-8">&#x00A0;</span><span
  7439. class="cmsy-8">{</span>
  7440. <br class="fancyvrb" /><a
  7441. id="x1-101042r21"></a><span
  7442. class="cmr-6">21</span><span
  7443. class="cmtt-8">&#x00A0;</span><span
  7444. class="cmtt-8">&#x00A0;</span>
  7445. <br class="fancyvrb" /><a
  7446. id="x1-101044r22"></a><span
  7447. class="cmr-6">22</span><span
  7448. class="cmtt-8">&#x00A0;</span><span
  7449. class="cmtt-8">&#x00A0;</span><span
  7450. class="cmtt-8">&#x00A0;</span><span
  7451. class="cmtt-8">&#x00A0;</span><span
  7452. class="cmtt-8">&#x00A0;</span><span
  7453. class="cmtt-8">&#x00A0;</span><span
  7454. class="cmtt-8">&#x00A0;</span><span
  7455. class="cmtt-8">&#x00A0;</span><span
  7456. class="cmtt-8">&#x00A0;</span><span
  7457. class="cmtt-8">&#x00A0;</span><span
  7458. class="cmtt-8">&#x00A0;</span><span
  7459. class="cmtt-8">&#x00A0;</span><span
  7460. class="cmtt-8">&#x00A0;</span><span
  7461. class="cmtt-8">&#x00A0;14)</span><span
  7462. class="cmtt-8">&#x00A0;[room]</span><span
  7463. class="cmtt-8">&#x00A0;=</span><span
  7464. class="cmtt-8">&#x00A0;[highroom]</span><span
  7465. class="cmtt-8">&#x00A0;*</span><span
  7466. class="cmtt-8">&#x00A0;2</span>
  7467. <br class="fancyvrb" /><a
  7468. id="x1-101046r23"></a><span
  7469. class="cmr-6">23</span><span
  7470. class="cmtt-8">&#x00A0;</span><span
  7471. class="cmtt-8">&#x00A0;</span>
  7472. <br class="fancyvrb" /><a
  7473. id="x1-101048r24"></a><span
  7474. class="cmr-6">24</span><span
  7475. class="cmtt-8">&#x00A0;</span><span
  7476. class="cmtt-8">&#x00A0;</span><span
  7477. class="cmtt-8">&#x00A0;</span><span
  7478. class="cmtt-8">&#x00A0;</span><span
  7479. class="cmtt-8">&#x00A0;</span><span
  7480. class="cmtt-8">&#x00A0;</span><span
  7481. class="cmtt-8">&#x00A0;</span><span
  7482. class="cmtt-8">&#x00A0;</span><span
  7483. class="cmtt-8">&#x00A0;</span><span
  7484. class="cmtt-8">&#x00A0;</span><span
  7485. class="cmtt-8">&#x00A0;</span><span
  7486. class="cmtt-8">&#x00A0;</span><span
  7487. class="cmsy-8">}</span><span
  7488. class="cmtt-8">&#x00A0;else</span><span
  7489. class="cmtt-8">&#x00A0;[highroom]</span><span
  7490. class="cmtt-8">&#x00A0;is</span><span
  7491. class="cmtt-8">&#x00A0;not</span><span
  7492. class="cmtt-8">&#x00A0;less</span><span
  7493. class="cmtt-8">&#x00A0;than</span><span
  7494. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7495. class="cmtt-8">&#x00A0;</span><span
  7496. class="cmsy-8">{</span>
  7497. <br class="fancyvrb" /><a
  7498. id="x1-101050r25"></a><span
  7499. class="cmr-6">25</span><span
  7500. class="cmtt-8">&#x00A0;</span><span
  7501. class="cmtt-8">&#x00A0;</span>
  7502. <br class="fancyvrb" /><a
  7503. id="x1-101052r26"></a><span
  7504. class="cmr-6">26</span><span
  7505. class="cmtt-8">&#x00A0;</span><span
  7506. class="cmtt-8">&#x00A0;</span><span
  7507. class="cmtt-8">&#x00A0;</span><span
  7508. class="cmtt-8">&#x00A0;</span><span
  7509. class="cmtt-8">&#x00A0;</span><span
  7510. class="cmtt-8">&#x00A0;</span><span
  7511. class="cmtt-8">&#x00A0;</span><span
  7512. class="cmtt-8">&#x00A0;</span><span
  7513. class="cmtt-8">&#x00A0;</span><span
  7514. class="cmtt-8">&#x00A0;</span><span
  7515. class="cmtt-8">&#x00A0;</span><span
  7516. class="cmtt-8">&#x00A0;</span><span
  7517. class="cmtt-8">&#x00A0;</span><span
  7518. class="cmtt-8">&#x00A0;15)</span><span
  7519. class="cmtt-8">&#x00A0;[room]</span><span
  7520. class="cmtt-8">&#x00A0;=</span><span
  7521. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7522. class="cmtt-8">&#x00A0;*</span><span
  7523. class="cmtt-8">&#x00A0;2</span>
  7524. <br class="fancyvrb" /><a
  7525. id="x1-101054r27"></a><span
  7526. class="cmr-6">27</span><span
  7527. class="cmtt-8">&#x00A0;</span><span
  7528. class="cmtt-8">&#x00A0;</span>
  7529. <br class="fancyvrb" /><a
  7530. id="x1-101056r28"></a><span
  7531. class="cmr-6">28</span><span
  7532. class="cmtt-8">&#x00A0;</span><span
  7533. class="cmtt-8">&#x00A0;</span><span
  7534. class="cmtt-8">&#x00A0;</span><span
  7535. class="cmtt-8">&#x00A0;</span><span
  7536. class="cmtt-8">&#x00A0;</span><span
  7537. class="cmtt-8">&#x00A0;</span><span
  7538. class="cmtt-8">&#x00A0;</span><span
  7539. class="cmtt-8">&#x00A0;</span><span
  7540. class="cmtt-8">&#x00A0;</span><span
  7541. class="cmtt-8">&#x00A0;</span><span
  7542. class="cmtt-8">&#x00A0;</span><span
  7543. class="cmtt-8">&#x00A0;</span><span
  7544. class="cmsy-8">}</span>
  7545. <br class="fancyvrb" /><a
  7546. id="x1-101058r29"></a><span
  7547. class="cmr-6">29</span><span
  7548. class="cmtt-8">&#x00A0;</span><span
  7549. class="cmtt-8">&#x00A0;</span>
  7550. <br class="fancyvrb" /><a
  7551. id="x1-101060r30"></a><span
  7552. class="cmr-6">30</span><span
  7553. class="cmtt-8">&#x00A0;</span><span
  7554. class="cmtt-8">&#x00A0;</span><span
  7555. class="cmtt-8">&#x00A0;</span><span
  7556. class="cmtt-8">&#x00A0;</span><span
  7557. class="cmtt-8">&#x00A0;</span><span
  7558. class="cmtt-8">&#x00A0;</span><span
  7559. class="cmtt-8">&#x00A0;</span><span
  7560. class="cmtt-8">&#x00A0;16)</span><span
  7561. class="cmtt-8">&#x00A0;if</span><span
  7562. class="cmtt-8">&#x00A0;(</span><span
  7563. class="cmtt-8">&#x00A0;[val]</span><span
  7564. class="cmtt-8">&#x00A0;is</span><span
  7565. class="cmtt-8">&#x00A0;nonzero</span><span
  7566. class="cmtt-8">&#x00A0;)</span><span
  7567. class="cmtt-8">&#x00A0;</span><span
  7568. class="cmsy-8">{</span>
  7569. <br class="fancyvrb" /><a
  7570. id="x1-101062r31"></a><span
  7571. class="cmr-6">31</span><span
  7572. class="cmtt-8">&#x00A0;</span><span
  7573. class="cmtt-8">&#x00A0;</span>
  7574. <br class="fancyvrb" /><a
  7575. id="x1-101064r32"></a><span
  7576. class="cmr-6">32</span><span
  7577. class="cmtt-8">&#x00A0;</span><span
  7578. class="cmtt-8">&#x00A0;</span><span
  7579. class="cmtt-8">&#x00A0;</span><span
  7580. class="cmtt-8">&#x00A0;</span><span
  7581. class="cmtt-8">&#x00A0;</span><span
  7582. class="cmtt-8">&#x00A0;</span><span
  7583. class="cmtt-8">&#x00A0;</span><span
  7584. class="cmtt-8">&#x00A0;</span><span
  7585. class="cmtt-8">&#x00A0;</span><span
  7586. class="cmtt-8">&#x00A0;</span><span
  7587. class="cmtt-8">&#x00A0;</span><span
  7588. class="cmtt-8">&#x00A0;</span><span
  7589. class="cmtt-8">&#x00A0;</span><span
  7590. class="cmtt-8">&#x00A0;17)</span><span
  7591. class="cmtt-8">&#x00A0;vector</span><span
  7592. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7593. class="cmtt-8">&#x00A0;element</span><span
  7594. class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
  7595. class="cmtt-8">&#x00A0;=</span><span
  7596. class="cmtt-8">&#x00A0;set</span>
  7597. <br class="fancyvrb" /><a
  7598. id="x1-101066r33"></a><span
  7599. class="cmr-6">33</span><span
  7600. class="cmtt-8">&#x00A0;</span><span
  7601. class="cmtt-8">&#x00A0;</span><span
  7602. class="cmtt-8">&#x00A0;</span><span
  7603. class="cmtt-8">&#x00A0;</span><span
  7604. class="cmtt-8">&#x00A0;</span><span
  7605. class="cmtt-8">&#x00A0;</span><span
  7606. class="cmtt-8">&#x00A0;</span><span
  7607. class="cmtt-8">&#x00A0;</span><span
  7608. class="cmtt-8">&#x00A0;</span><span
  7609. class="cmtt-8">&#x00A0;</span><span
  7610. class="cmtt-8">&#x00A0;</span><span
  7611. class="cmtt-8">&#x00A0;</span><span
  7612. class="cmtt-8">&#x00A0;</span><span
  7613. class="cmtt-8">&#x00A0;18)</span><span
  7614. class="cmtt-8">&#x00A0;vector</span><span
  7615. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7616. class="cmtt-8">&#x00A0;element</span><span
  7617. class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
  7618. class="cmtt-8">&#x00A0;=</span><span
  7619. class="cmtt-8">&#x00A0;set</span>
  7620. <br class="fancyvrb" /><a
  7621. id="x1-101068r34"></a><span
  7622. class="cmr-6">34</span><span
  7623. class="cmtt-8">&#x00A0;</span><span
  7624. class="cmtt-8">&#x00A0;</span><span
  7625. class="cmtt-8">&#x00A0;</span><span
  7626. class="cmtt-8">&#x00A0;</span><span
  7627. class="cmtt-8">&#x00A0;</span><span
  7628. class="cmtt-8">&#x00A0;</span><span
  7629. class="cmtt-8">&#x00A0;</span><span
  7630. class="cmtt-8">&#x00A0;</span><span
  7631. class="cmtt-8">&#x00A0;</span><span
  7632. class="cmtt-8">&#x00A0;</span><span
  7633. class="cmtt-8">&#x00A0;</span><span
  7634. class="cmtt-8">&#x00A0;</span><span
  7635. class="cmtt-8">&#x00A0;</span><span
  7636. class="cmtt-8">&#x00A0;19)</span><span
  7637. class="cmtt-8">&#x00A0;vector</span><span
  7638. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7639. class="cmtt-8">&#x00A0;element</span><span
  7640. class="cmtt-8">&#x00A0;[i]</span><span
  7641. class="cmtt-8">&#x00A0;=</span><span
  7642. class="cmtt-8">&#x00A0;set</span>
  7643. <br class="fancyvrb" /><a
  7644. id="x1-101070r35"></a><span
  7645. class="cmr-6">35</span><span
  7646. class="cmtt-8">&#x00A0;</span><span
  7647. class="cmtt-8">&#x00A0;</span><span
  7648. class="cmtt-8">&#x00A0;</span><span
  7649. class="cmtt-8">&#x00A0;</span><span
  7650. class="cmtt-8">&#x00A0;</span><span
  7651. class="cmtt-8">&#x00A0;</span><span
  7652. class="cmtt-8">&#x00A0;</span><span
  7653. class="cmtt-8">&#x00A0;</span><span
  7654. class="cmtt-8">&#x00A0;</span><span
  7655. class="cmtt-8">&#x00A0;</span><span
  7656. class="cmtt-8">&#x00A0;</span><span
  7657. class="cmtt-8">&#x00A0;</span><span
  7658. class="cmtt-8">&#x00A0;</span><span
  7659. class="cmtt-8">&#x00A0;20)</span><span
  7660. class="cmtt-8">&#x00A0;if</span><span
  7661. class="cmtt-8">&#x00A0;(</span><span
  7662. class="cmtt-8">&#x00A0;[val]</span><span
  7663. class="cmtt-8">&#x00A0;is</span><span
  7664. class="cmtt-8">&#x00A0;greater</span><span
  7665. class="cmtt-8">&#x00A0;than</span><span
  7666. class="cmtt-8">&#x00A0;or</span><span
  7667. class="cmtt-8">&#x00A0;equal</span><span
  7668. class="cmtt-8">&#x00A0;to</span><span
  7669. class="cmtt-8">&#x00A0;[room]</span><span
  7670. class="cmtt-8">&#x00A0;)</span><span
  7671. class="cmtt-8">&#x00A0;</span><span
  7672. class="cmsy-8">{</span>
  7673. <br class="fancyvrb" /><a
  7674. id="x1-101072r36"></a><span
  7675. class="cmr-6">36</span><span
  7676. class="cmtt-8">&#x00A0;</span><span
  7677. class="cmtt-8">&#x00A0;</span>
  7678. <br class="fancyvrb" /><a
  7679. id="x1-101074r37"></a><span
  7680. class="cmr-6">37</span><span
  7681. class="cmtt-8">&#x00A0;</span><span
  7682. class="cmtt-8">&#x00A0;</span><span
  7683. class="cmtt-8">&#x00A0;</span><span
  7684. class="cmtt-8">&#x00A0;</span><span
  7685. class="cmtt-8">&#x00A0;</span><span
  7686. class="cmtt-8">&#x00A0;</span><span
  7687. class="cmtt-8">&#x00A0;</span><span
  7688. class="cmtt-8">&#x00A0;</span><span
  7689. class="cmtt-8">&#x00A0;</span><span
  7690. class="cmtt-8">&#x00A0;</span><span
  7691. class="cmtt-8">&#x00A0;</span><span
  7692. class="cmtt-8">&#x00A0;</span><span
  7693. class="cmtt-8">&#x00A0;</span><span
  7694. class="cmtt-8">&#x00A0;</span><span
  7695. class="cmtt-8">&#x00A0;</span><span
  7696. class="cmtt-8">&#x00A0;</span><span
  7697. class="cmtt-8">&#x00A0;</span><span
  7698. class="cmtt-8">&#x00A0;</span><span
  7699. class="cmtt-8">&#x00A0;</span><span
  7700. class="cmtt-8">&#x00A0;21)</span><span
  7701. class="cmtt-8">&#x00A0;if</span><span
  7702. class="cmtt-8">&#x00A0;(</span><span
  7703. class="cmtt-8">&#x00A0;[highroom]</span><span
  7704. class="cmtt-8">&#x00A0;is</span><span
  7705. class="cmtt-8">&#x00A0;greater</span><span
  7706. class="cmtt-8">&#x00A0;than</span><span
  7707. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7708. class="cmtt-8">&#x00A0;)</span><span
  7709. class="cmtt-8">&#x00A0;</span><span
  7710. class="cmsy-8">{</span>
  7711. <br class="fancyvrb" /><a
  7712. id="x1-101076r38"></a><span
  7713. class="cmr-6">38</span><span
  7714. class="cmtt-8">&#x00A0;</span><span
  7715. class="cmtt-8">&#x00A0;</span>
  7716. <br class="fancyvrb" /><a
  7717. id="x1-101078r39"></a><span
  7718. class="cmr-6">39</span><span
  7719. class="cmtt-8">&#x00A0;</span><span
  7720. class="cmtt-8">&#x00A0;</span><span
  7721. class="cmtt-8">&#x00A0;</span><span
  7722. class="cmtt-8">&#x00A0;</span><span
  7723. class="cmtt-8">&#x00A0;</span><span
  7724. class="cmtt-8">&#x00A0;</span><span
  7725. class="cmtt-8">&#x00A0;</span><span
  7726. class="cmtt-8">&#x00A0;</span><span
  7727. class="cmtt-8">&#x00A0;</span><span
  7728. class="cmtt-8">&#x00A0;</span><span
  7729. class="cmtt-8">&#x00A0;</span><span
  7730. class="cmtt-8">&#x00A0;</span><span
  7731. class="cmtt-8">&#x00A0;</span><span
  7732. class="cmtt-8">&#x00A0;</span><span
  7733. class="cmtt-8">&#x00A0;</span><span
  7734. class="cmtt-8">&#x00A0;</span><span
  7735. class="cmtt-8">&#x00A0;</span><span
  7736. class="cmtt-8">&#x00A0;</span><span
  7737. class="cmtt-8">&#x00A0;</span><span
  7738. class="cmtt-8">&#x00A0;</span><span
  7739. class="cmtt-8">&#x00A0;</span><span
  7740. class="cmtt-8">&#x00A0;</span><span
  7741. class="cmtt-8">&#x00A0;</span><span
  7742. class="cmtt-8">&#x00A0;</span><span
  7743. class="cmtt-8">&#x00A0;</span><span
  7744. class="cmtt-8">&#x00A0;22)</span><span
  7745. class="cmtt-8">&#x00A0;vector</span><span
  7746. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7747. class="cmtt-8">&#x00A0;element</span><span
  7748. class="cmtt-8">&#x00A0;[i]</span><span
  7749. class="cmtt-8">&#x00A0;=</span><span
  7750. class="cmtt-8">&#x00A0;[val]</span><span
  7751. class="cmtt-8">&#x00A0;-</span><span
  7752. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7753. class="cmtt-8">&#x00A0;+</span><span
  7754. class="cmtt-8">&#x00A0;[predicted]</span>
  7755. <br class="fancyvrb" /><a
  7756. id="x1-101080r40"></a><span
  7757. class="cmr-6">40</span><span
  7758. class="cmtt-8">&#x00A0;</span><span
  7759. class="cmtt-8">&#x00A0;</span>
  7760. <br class="fancyvrb" /><a
  7761. id="x1-101082r41"></a><span
  7762. class="cmr-6">41</span><span
  7763. class="cmtt-8">&#x00A0;</span><span
  7764. class="cmtt-8">&#x00A0; </span><span
  7765. class="cmtt-8">&#x00A0;</span><span
  7766. class="cmtt-8">&#x00A0;</span><span
  7767. class="cmtt-8">&#x00A0;</span><span
  7768. class="cmtt-8">&#x00A0;</span><span
  7769. class="cmtt-8">&#x00A0;</span><span
  7770. class="cmtt-8">&#x00A0;</span><span
  7771. class="cmsy-8">}</span><span
  7772. class="cmtt-8">&#x00A0;else</span><span
  7773. class="cmtt-8">&#x00A0;[highroom]</span><span
  7774. class="cmtt-8">&#x00A0;is</span><span
  7775. class="cmtt-8">&#x00A0;not</span><span
  7776. class="cmtt-8">&#x00A0;greater</span><span
  7777. class="cmtt-8">&#x00A0;than</span><span
  7778. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7779. class="cmtt-8">&#x00A0;</span><span
  7780. class="cmsy-8">{</span>
  7781. <br class="fancyvrb" /><a
  7782. id="x1-101084r42"></a><span
  7783. class="cmr-6">42</span><span
  7784. class="cmtt-8">&#x00A0;</span><span
  7785. class="cmtt-8">&#x00A0;</span>
  7786. <br class="fancyvrb" /><a
  7787. id="x1-101086r43"></a><span
  7788. class="cmr-6">43</span><span
  7789. class="cmtt-8">&#x00A0;</span><span
  7790. class="cmtt-8">&#x00A0;</span><span
  7791. class="cmtt-8">&#x00A0;</span><span
  7792. class="cmtt-8">&#x00A0;</span><span
  7793. class="cmtt-8">&#x00A0;</span><span
  7794. class="cmtt-8">&#x00A0;</span><span
  7795. class="cmtt-8">&#x00A0;</span><span
  7796. class="cmtt-8">&#x00A0;</span><span
  7797. class="cmtt-8">&#x00A0;</span><span
  7798. class="cmtt-8">&#x00A0;</span><span
  7799. class="cmtt-8">&#x00A0;</span><span
  7800. class="cmtt-8">&#x00A0;</span><span
  7801. class="cmtt-8">&#x00A0;</span><span
  7802. class="cmtt-8">&#x00A0;</span><span
  7803. class="cmtt-8">&#x00A0;</span><span
  7804. class="cmtt-8">&#x00A0;</span><span
  7805. class="cmtt-8">&#x00A0;</span><span
  7806. class="cmtt-8">&#x00A0;</span><span
  7807. class="cmtt-8">&#x00A0;</span><span
  7808. class="cmtt-8">&#x00A0;</span><span
  7809. class="cmtt-8">&#x00A0;</span><span
  7810. class="cmtt-8">&#x00A0;</span><span
  7811. class="cmtt-8">&#x00A0;</span><span
  7812. class="cmtt-8">&#x00A0;</span><span
  7813. class="cmtt-8">&#x00A0;</span><span
  7814. class="cmtt-8">&#x00A0;23)</span><span
  7815. class="cmtt-8">&#x00A0;vector</span><span
  7816. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7817. class="cmtt-8">&#x00A0;element</span><span
  7818. class="cmtt-8">&#x00A0;[i]</span><span
  7819. class="cmtt-8">&#x00A0;=</span><span
  7820. class="cmtt-8">&#x00A0;[predicted]</span><span
  7821. class="cmtt-8">&#x00A0;-</span><span
  7822. class="cmtt-8">&#x00A0;[val]</span><span
  7823. class="cmtt-8">&#x00A0;+</span><span
  7824. class="cmtt-8">&#x00A0;[highroom]</span><span
  7825. class="cmtt-8">&#x00A0;-</span><span
  7826. class="cmtt-8">&#x00A0;1</span>
  7827. <br class="fancyvrb" /><a
  7828. id="x1-101088r44"></a><span
  7829. class="cmr-6">44</span><span
  7830. class="cmtt-8">&#x00A0;</span><span
  7831. class="cmtt-8">&#x00A0;</span>
  7832. <br class="fancyvrb" /><a
  7833. id="x1-101090r45"></a><span
  7834. class="cmr-6">45</span><span
  7835. class="cmtt-8">&#x00A0;</span><span
  7836. class="cmtt-8">&#x00A0;</span><span
  7837. class="cmtt-8">&#x00A0;</span><span
  7838. class="cmtt-8">&#x00A0;</span><span
  7839. class="cmtt-8">&#x00A0;</span><span
  7840. class="cmtt-8">&#x00A0;</span><span
  7841. class="cmtt-8">&#x00A0;</span><span
  7842. class="cmtt-8">&#x00A0;</span><span
  7843. class="cmtt-8">&#x00A0;</span><span
  7844. class="cmtt-8">&#x00A0;</span><span
  7845. class="cmtt-8">&#x00A0;</span><span
  7846. class="cmtt-8">&#x00A0;</span><span
  7847. class="cmtt-8">&#x00A0;</span><span
  7848. class="cmtt-8">&#x00A0;</span><span
  7849. class="cmtt-8">&#x00A0;</span><span
  7850. class="cmtt-8">&#x00A0;</span><span
  7851. class="cmtt-8">&#x00A0;</span><span
  7852. class="cmtt-8">&#x00A0;</span><span
  7853. class="cmtt-8">&#x00A0;</span><span
  7854. class="cmtt-8">&#x00A0;</span><span
  7855. class="cmtt-8">&#x00A0;</span><span
  7856. class="cmtt-8">&#x00A0;</span><span
  7857. class="cmtt-8">&#x00A0;</span><span
  7858. class="cmtt-8">&#x00A0;</span><span
  7859. class="cmsy-8">}</span>
  7860. <br class="fancyvrb" /><a
  7861. id="x1-101092r46"></a><span
  7862. class="cmr-6">46</span><span
  7863. class="cmtt-8">&#x00A0;</span><span
  7864. class="cmtt-8">&#x00A0;</span>
  7865. <br class="fancyvrb" /><a
  7866. id="x1-101094r47"></a><span
  7867. class="cmr-6">47</span><span
  7868. class="cmtt-8">&#x00A0;</span><span
  7869. class="cmtt-8">&#x00A0;</span><span
  7870. class="cmtt-8">&#x00A0;</span><span
  7871. class="cmtt-8">&#x00A0;</span><span
  7872. class="cmtt-8">&#x00A0;</span><span
  7873. class="cmtt-8">&#x00A0;</span><span
  7874. class="cmtt-8">&#x00A0;</span><span
  7875. class="cmtt-8">&#x00A0;</span><span
  7876. class="cmtt-8">&#x00A0;</span><span
  7877. class="cmtt-8">&#x00A0;</span><span
  7878. class="cmtt-8">&#x00A0;</span><span
  7879. class="cmtt-8">&#x00A0;</span><span
  7880. class="cmtt-8">&#x00A0;</span><span
  7881. class="cmtt-8">&#x00A0;</span><span
  7882. class="cmtt-8">&#x00A0;</span><span
  7883. class="cmtt-8">&#x00A0;</span><span
  7884. class="cmtt-8">&#x00A0;</span><span
  7885. class="cmtt-8">&#x00A0;</span><span
  7886. class="cmsy-8">}</span><span
  7887. class="cmtt-8">&#x00A0;else</span><span
  7888. class="cmtt-8">&#x00A0;[val]</span><span
  7889. class="cmtt-8">&#x00A0;is</span><span
  7890. class="cmtt-8">&#x00A0;less</span><span
  7891. class="cmtt-8">&#x00A0;than</span><span
  7892. class="cmtt-8">&#x00A0;[room]</span><span
  7893. class="cmtt-8">&#x00A0;</span><span
  7894. class="cmsy-8">{</span>
  7895. <br class="fancyvrb" /><a
  7896. id="x1-101096r48"></a><span
  7897. class="cmr-6">48</span><span
  7898. class="cmtt-8">&#x00A0;</span><span
  7899. class="cmtt-8">&#x00A0;</span>
  7900. <br class="fancyvrb" /><a
  7901. id="x1-101098r49"></a><span
  7902. class="cmr-6">49</span><span
  7903. class="cmtt-8">&#x00A0;</span><span
  7904. class="cmtt-8">&#x00A0;</span><span
  7905. class="cmtt-8">&#x00A0;</span><span
  7906. class="cmtt-8">&#x00A0;</span><span
  7907. class="cmtt-8">&#x00A0;</span><span
  7908. class="cmtt-8">&#x00A0;</span><span
  7909. class="cmtt-8">&#x00A0;</span><span
  7910. class="cmtt-8">&#x00A0;</span><span
  7911. class="cmtt-8">&#x00A0;</span><span
  7912. class="cmtt-8">&#x00A0;</span><span
  7913. class="cmtt-8">&#x00A0;</span><span
  7914. class="cmtt-8">&#x00A0;</span><span
  7915. class="cmtt-8">&#x00A0;</span><span
  7916. class="cmtt-8">&#x00A0;</span><span
  7917. class="cmtt-8">&#x00A0;</span><span
  7918. class="cmtt-8">&#x00A0;</span><span
  7919. class="cmtt-8">&#x00A0;</span><span
  7920. class="cmtt-8">&#x00A0;</span><span
  7921. class="cmtt-8">&#x00A0;</span><span
  7922. class="cmtt-8">&#x00A0;</span><span
  7923. class="cmtt-8">&#x00A0;</span><span
  7924. class="cmtt-8">&#x00A0;24)</span><span
  7925. class="cmtt-8">&#x00A0;if</span><span
  7926. class="cmtt-8">&#x00A0;([val]</span><span
  7927. class="cmtt-8">&#x00A0;is</span><span
  7928. class="cmtt-8">&#x00A0;odd)</span><span
  7929. class="cmtt-8">&#x00A0;</span><span
  7930. class="cmsy-8">{</span>
  7931. <br class="fancyvrb" /><a
  7932. id="x1-101100r50"></a><span
  7933. class="cmr-6">50</span><span
  7934. class="cmtt-8">&#x00A0;</span><span
  7935. class="cmtt-8">&#x00A0;</span>
  7936. <br class="fancyvrb" /><a
  7937. id="x1-101102r51"></a><span
  7938. class="cmr-6">51</span><span
  7939. class="cmtt-8">&#x00A0;</span><span
  7940. class="cmtt-8">&#x00A0;</span><span
  7941. class="cmtt-8">&#x00A0;</span><span
  7942. class="cmtt-8">&#x00A0;</span><span
  7943. class="cmtt-8">&#x00A0;</span><span
  7944. class="cmtt-8">&#x00A0;</span><span
  7945. class="cmtt-8">&#x00A0;</span><span
  7946. class="cmtt-8">&#x00A0;</span><span
  7947. class="cmtt-8">&#x00A0;</span><span
  7948. class="cmtt-8">&#x00A0;</span><span
  7949. class="cmtt-8">&#x00A0;</span><span
  7950. class="cmtt-8">&#x00A0;</span><span
  7951. class="cmtt-8">&#x00A0;</span><span
  7952. class="cmtt-8">&#x00A0;</span><span
  7953. class="cmtt-8">&#x00A0;</span><span
  7954. class="cmtt-8">&#x00A0;</span><span
  7955. class="cmtt-8">&#x00A0;</span><span
  7956. class="cmtt-8">&#x00A0;</span><span
  7957. class="cmtt-8">&#x00A0;</span><span
  7958. class="cmtt-8">&#x00A0;</span><span
  7959. class="cmtt-8">&#x00A0;</span><span
  7960. class="cmtt-8">&#x00A0;</span><span
  7961. class="cmtt-8">&#x00A0;</span><span
  7962. class="cmtt-8">&#x00A0;</span><span
  7963. class="cmtt-8">&#x00A0;</span><span
  7964. class="cmtt-8">&#x00A0;25)</span><span
  7965. class="cmtt-8">&#x00A0;vector</span><span
  7966. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7967. class="cmtt-8">&#x00A0;element</span><span
  7968. class="cmtt-8">&#x00A0;[i]</span><span
  7969. class="cmtt-8">&#x00A0;=</span>
  7970. <br class="fancyvrb" /><a
  7971. id="x1-101104r52"></a><span
  7972. class="cmr-6">52</span><span
  7973. class="cmtt-8">&#x00A0;</span><span
  7974. class="cmtt-8">&#x00A0;</span><span
  7975. class="cmtt-8">&#x00A0;</span><span
  7976. class="cmtt-8">&#x00A0;</span><span
  7977. class="cmtt-8">&#x00A0;</span><span
  7978. class="cmtt-8">&#x00A0;</span><span
  7979. class="cmtt-8">&#x00A0;</span><span
  7980. class="cmtt-8">&#x00A0;</span><span
  7981. class="cmtt-8">&#x00A0;</span><span
  7982. class="cmtt-8">&#x00A0;</span><span
  7983. class="cmtt-8">&#x00A0;</span><span
  7984. class="cmtt-8">&#x00A0;</span><span
  7985. class="cmtt-8">&#x00A0;</span><span
  7986. class="cmtt-8">&#x00A0;</span><span
  7987. class="cmtt-8">&#x00A0;</span><span
  7988. class="cmtt-8">&#x00A0;</span><span
  7989. class="cmtt-8">&#x00A0;</span><span
  7990. class="cmtt-8">&#x00A0;</span><span
  7991. class="cmtt-8">&#x00A0;</span><span
  7992. class="cmtt-8">&#x00A0;</span><span
  7993. class="cmtt-8">&#x00A0;</span><span
  7994. class="cmtt-8">&#x00A0;</span><span
  7995. class="cmtt-8">&#x00A0;</span><span
  7996. class="cmtt-8">&#x00A0;</span><span
  7997. class="cmtt-8">&#x00A0;</span><span
  7998. class="cmtt-8">&#x00A0;</span><span
  7999. class="cmtt-8">&#x00A0;</span><span
  8000. class="cmtt-8">&#x00A0;</span><span
  8001. class="cmtt-8">&#x00A0;</span><span
  8002. class="cmtt-8">&#x00A0;[predicted]</span><span
  8003. class="cmtt-8">&#x00A0;-</span><span
  8004. class="cmtt-8">&#x00A0;(([val]</span><span
  8005. class="cmtt-8">&#x00A0;+</span><span
  8006. class="cmtt-8">&#x00A0;1)</span><span
  8007. class="cmtt-8">&#x00A0;divided</span><span
  8008. class="cmtt-8">&#x00A0;by</span><span
  8009. class="cmtt-8">&#x00A0;</span><span
  8010. class="cmtt-8">&#x00A0;2</span><span
  8011. class="cmtt-8">&#x00A0;using</span><span
  8012. class="cmtt-8">&#x00A0;integer</span><span
  8013. class="cmtt-8">&#x00A0;division)</span>
  8014. <br class="fancyvrb" /><a
  8015. id="x1-101106r53"></a><span
  8016. class="cmr-6">53</span><span
  8017. class="cmtt-8">&#x00A0;</span><span
  8018. class="cmtt-8">&#x00A0;</span>
  8019. <br class="fancyvrb" /><a
  8020. id="x1-101108r54"></a><span
  8021. class="cmr-6">54</span><span
  8022. class="cmtt-8">&#x00A0;</span><span
  8023. class="cmtt-8">&#x00A0;</span><span
  8024. class="cmtt-8">&#x00A0;</span><span
  8025. class="cmtt-8">&#x00A0;</span><span
  8026. class="cmtt-8">&#x00A0;</span><span
  8027. class="cmtt-8">&#x00A0;</span><span
  8028. class="cmtt-8">&#x00A0;</span><span
  8029. class="cmtt-8">&#x00A0;</span><span
  8030. class="cmtt-8">&#x00A0;</span><span
  8031. class="cmtt-8">&#x00A0;</span><span
  8032. class="cmtt-8">&#x00A0;</span><span
  8033. class="cmtt-8">&#x00A0;</span><span
  8034. class="cmtt-8">&#x00A0;</span><span
  8035. class="cmtt-8">&#x00A0;</span><span
  8036. class="cmtt-8">&#x00A0;</span><span
  8037. class="cmtt-8">&#x00A0;</span><span
  8038. class="cmtt-8">&#x00A0;</span><span
  8039. class="cmtt-8">&#x00A0;</span><span
  8040. class="cmtt-8">&#x00A0;</span><span
  8041. class="cmtt-8">&#x00A0;</span><span
  8042. class="cmtt-8">&#x00A0;</span><span
  8043. class="cmtt-8">&#x00A0;</span><span
  8044. class="cmtt-8">&#x00A0;</span><span
  8045. class="cmtt-8">&#x00A0;</span><span
  8046. class="cmsy-8">}</span><span
  8047. class="cmtt-8">&#x00A0;else</span><span
  8048. class="cmtt-8">&#x00A0;[val]</span><span
  8049. class="cmtt-8">&#x00A0;is</span><span
  8050. class="cmtt-8">&#x00A0;even</span><span
  8051. class="cmtt-8">&#x00A0;</span><span
  8052. class="cmsy-8">{</span>
  8053. <br class="fancyvrb" /><a
  8054. id="x1-101110r55"></a><span
  8055. class="cmr-6">55</span><span
  8056. class="cmtt-8">&#x00A0;</span><span
  8057. class="cmtt-8">&#x00A0;</span>
  8058. <br class="fancyvrb" /><a
  8059. id="x1-101112r56"></a><span
  8060. class="cmr-6">56</span><span
  8061. class="cmtt-8">&#x00A0;</span><span
  8062. class="cmtt-8">&#x00A0;</span><span
  8063. class="cmtt-8">&#x00A0;</span><span
  8064. class="cmtt-8">&#x00A0;</span><span
  8065. class="cmtt-8">&#x00A0;</span><span
  8066. class="cmtt-8">&#x00A0;</span><span
  8067. class="cmtt-8">&#x00A0;</span><span
  8068. class="cmtt-8">&#x00A0;</span><span
  8069. class="cmtt-8">&#x00A0;</span><span
  8070. class="cmtt-8">&#x00A0;</span><span
  8071. class="cmtt-8">&#x00A0;</span><span
  8072. class="cmtt-8">&#x00A0;</span><span
  8073. class="cmtt-8">&#x00A0;</span><span
  8074. class="cmtt-8">&#x00A0;</span><span
  8075. class="cmtt-8">&#x00A0;</span><span
  8076. class="cmtt-8">&#x00A0;</span><span
  8077. class="cmtt-8">&#x00A0;</span><span
  8078. class="cmtt-8">&#x00A0;</span><span
  8079. class="cmtt-8">&#x00A0;</span><span
  8080. class="cmtt-8">&#x00A0;</span><span
  8081. class="cmtt-8">&#x00A0;</span><span
  8082. class="cmtt-8">&#x00A0;</span><span
  8083. class="cmtt-8">&#x00A0;</span><span
  8084. class="cmtt-8">&#x00A0;</span><span
  8085. class="cmtt-8">&#x00A0;</span><span
  8086. class="cmtt-8">&#x00A0;26)</span><span
  8087. class="cmtt-8">&#x00A0;vector</span><span
  8088. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  8089. class="cmtt-8">&#x00A0;element</span><span
  8090. class="cmtt-8">&#x00A0;[i]</span><span
  8091. class="cmtt-8">&#x00A0;=</span>
  8092. <br class="fancyvrb" /><a
  8093. id="x1-101114r57"></a><span
  8094. class="cmr-6">57</span><span
  8095. class="cmtt-8">&#x00A0;</span><span
  8096. class="cmtt-8">&#x00A0;</span><span
  8097. class="cmtt-8">&#x00A0;</span><span
  8098. class="cmtt-8">&#x00A0;</span><span
  8099. class="cmtt-8">&#x00A0;</span><span
  8100. class="cmtt-8">&#x00A0;</span><span
  8101. class="cmtt-8">&#x00A0;</span><span
  8102. class="cmtt-8">&#x00A0;</span><span
  8103. class="cmtt-8">&#x00A0;</span><span
  8104. class="cmtt-8">&#x00A0;</span><span
  8105. class="cmtt-8">&#x00A0;</span><span
  8106. class="cmtt-8">&#x00A0;</span><span
  8107. class="cmtt-8">&#x00A0;</span><span
  8108. class="cmtt-8">&#x00A0;</span><span
  8109. class="cmtt-8">&#x00A0;</span><span
  8110. class="cmtt-8">&#x00A0;</span><span
  8111. class="cmtt-8">&#x00A0;</span><span
  8112. class="cmtt-8">&#x00A0;</span><span
  8113. class="cmtt-8">&#x00A0;</span><span
  8114. class="cmtt-8">&#x00A0;</span><span
  8115. class="cmtt-8">&#x00A0;</span><span
  8116. class="cmtt-8">&#x00A0;</span><span
  8117. class="cmtt-8">&#x00A0;</span><span
  8118. class="cmtt-8">&#x00A0;</span><span
  8119. class="cmtt-8">&#x00A0;</span><span
  8120. class="cmtt-8">&#x00A0;</span><span
  8121. class="cmtt-8">&#x00A0;</span><span
  8122. class="cmtt-8">&#x00A0;</span><span
  8123. class="cmtt-8">&#x00A0;</span><span
  8124. class="cmtt-8">&#x00A0;[predicted]</span><span
  8125. class="cmtt-8">&#x00A0;+</span><span
  8126. class="cmtt-8">&#x00A0;([val]</span><span
  8127. class="cmtt-8">&#x00A0;/</span><span
  8128. class="cmtt-8">&#x00A0;2</span><span
  8129. class="cmtt-8">&#x00A0;using</span><span
  8130. class="cmtt-8">&#x00A0;integer</span><span
  8131. class="cmtt-8">&#x00A0;division)</span>
  8132. <br class="fancyvrb" /><a
  8133. id="x1-101116r58"></a><span
  8134. class="cmr-6">58</span><span
  8135. class="cmtt-8">&#x00A0;</span><span
  8136. class="cmtt-8">&#x00A0;</span>
  8137. <br class="fancyvrb" /><a
  8138. id="x1-101118r59"></a><span
  8139. class="cmr-6">59</span><span
  8140. class="cmtt-8">&#x00A0;</span><span
  8141. class="cmtt-8">&#x00A0;</span><span
  8142. class="cmtt-8">&#x00A0;</span><span
  8143. class="cmtt-8">&#x00A0;</span><span
  8144. class="cmtt-8">&#x00A0;</span><span
  8145. class="cmtt-8">&#x00A0;</span><span
  8146. class="cmtt-8">&#x00A0;</span><span
  8147. class="cmtt-8">&#x00A0;</span><span
  8148. class="cmtt-8">&#x00A0;</span><span
  8149. class="cmtt-8">&#x00A0;</span><span
  8150. class="cmtt-8">&#x00A0;</span><span
  8151. class="cmtt-8">&#x00A0;</span><span
  8152. class="cmtt-8">&#x00A0;</span><span
  8153. class="cmtt-8">&#x00A0;</span><span
  8154. class="cmtt-8">&#x00A0;</span><span
  8155. class="cmtt-8">&#x00A0;</span><span
  8156. class="cmtt-8">&#x00A0;</span><span
  8157. class="cmtt-8">&#x00A0;</span><span
  8158. class="cmtt-8">&#x00A0;</span><span
  8159. class="cmtt-8">&#x00A0;</span><span
  8160. class="cmtt-8">&#x00A0;</span><span
  8161. class="cmtt-8">&#x00A0;</span><span
  8162. class="cmtt-8">&#x00A0;</span><span
  8163. class="cmtt-8">&#x00A0;</span><span
  8164. class="cmsy-8">}</span>
  8165. <br class="fancyvrb" /><a
  8166. id="x1-101120r60"></a><span
  8167. class="cmr-6">60</span><span
  8168. class="cmtt-8">&#x00A0;</span><span
  8169. class="cmtt-8">&#x00A0;</span>
  8170. <br class="fancyvrb" /><a
  8171. id="x1-101122r61"></a><span
  8172. class="cmr-6">61</span><span
  8173. class="cmtt-8">&#x00A0;</span><span
  8174. class="cmtt-8">&#x00A0;</span><span
  8175. class="cmtt-8">&#x00A0;</span><span
  8176. class="cmtt-8">&#x00A0;</span><span
  8177. class="cmtt-8">&#x00A0;</span><span
  8178. class="cmtt-8">&#x00A0;</span><span
  8179. class="cmtt-8">&#x00A0;</span><span
  8180. class="cmtt-8">&#x00A0;</span><span
  8181. class="cmtt-8">&#x00A0;</span><span
  8182. class="cmtt-8">&#x00A0;</span><span
  8183. class="cmtt-8">&#x00A0;</span><span
  8184. class="cmtt-8">&#x00A0;</span><span
  8185. class="cmtt-8">&#x00A0;</span><span
  8186. class="cmtt-8">&#x00A0;</span><span
  8187. class="cmtt-8">&#x00A0;</span><span
  8188. class="cmtt-8">&#x00A0;</span><span
  8189. class="cmtt-8">&#x00A0;</span><span
  8190. class="cmtt-8">&#x00A0;</span><span
  8191. class="cmsy-8">}</span>
  8192. <br class="fancyvrb" /><a
  8193. id="x1-101124r62"></a><span
  8194. class="cmr-6">62</span><span
  8195. class="cmtt-8">&#x00A0;</span><span
  8196. class="cmtt-8">&#x00A0;</span>
  8197. <br class="fancyvrb" /><a
  8198. id="x1-101126r63"></a><span
  8199. class="cmr-6">63</span><span
  8200. class="cmtt-8">&#x00A0;</span><span
  8201. class="cmtt-8">&#x00A0;</span><span
  8202. class="cmtt-8">&#x00A0;</span><span
  8203. class="cmtt-8">&#x00A0;</span><span
  8204. class="cmtt-8">&#x00A0;</span><span
  8205. class="cmtt-8">&#x00A0;</span><span
  8206. class="cmtt-8">&#x00A0;</span><span
  8207. class="cmtt-8">&#x00A0;</span><span
  8208. class="cmtt-8">&#x00A0;</span><span
  8209. class="cmtt-8">&#x00A0;</span><span
  8210. class="cmtt-8">&#x00A0;</span><span
  8211. class="cmtt-8">&#x00A0;</span><span
  8212. class="cmsy-8">}</span><span
  8213. class="cmtt-8">&#x00A0;else</span><span
  8214. class="cmtt-8">&#x00A0;[val]</span><span
  8215. class="cmtt-8">&#x00A0;is</span><span
  8216. class="cmtt-8">&#x00A0;zero</span><span
  8217. class="cmtt-8">&#x00A0;</span><span
  8218. class="cmsy-8">{</span>
  8219. <br class="fancyvrb" /><a
  8220. id="x1-101128r64"></a><span
  8221. class="cmr-6">64</span><span
  8222. class="cmtt-8">&#x00A0;</span><span
  8223. class="cmtt-8">&#x00A0;</span>
  8224. <br class="fancyvrb" /><a
  8225. id="x1-101130r65"></a><span
  8226. class="cmr-6">65</span><span
  8227. class="cmtt-8">&#x00A0;</span><span
  8228. class="cmtt-8">&#x00A0;</span><span
  8229. class="cmtt-8">&#x00A0;</span><span
  8230. class="cmtt-8">&#x00A0;</span><span
  8231. class="cmtt-8">&#x00A0;</span><span
  8232. class="cmtt-8">&#x00A0;</span><span
  8233. class="cmtt-8">&#x00A0;</span><span
  8234. class="cmtt-8">&#x00A0;</span><span
  8235. class="cmtt-8">&#x00A0;</span><span
  8236. class="cmtt-8">&#x00A0;</span><span
  8237. class="cmtt-8">&#x00A0;</span><span
  8238. class="cmtt-8">&#x00A0;</span><span
  8239. class="cmtt-8">&#x00A0;</span><span
  8240. class="cmtt-8">&#x00A0;27)</span><span
  8241. class="cmtt-8">&#x00A0;vector</span><span
  8242. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  8243. class="cmtt-8">&#x00A0;element</span><span
  8244. class="cmtt-8">&#x00A0;[i]</span><span
  8245. class="cmtt-8">&#x00A0;=</span><span
  8246. class="cmtt-8">&#x00A0;unset</span>
  8247. <br class="fancyvrb" /><a
  8248. id="x1-101132r66"></a><span
  8249. class="cmr-6">66</span><span
  8250. class="cmtt-8">&#x00A0;</span><span
  8251. class="cmtt-8">&#x00A0;</span><span
  8252. class="cmtt-8">&#x00A0;</span><span
  8253. class="cmtt-8">&#x00A0;</span><span
  8254. class="cmtt-8">&#x00A0;</span><span
  8255. class="cmtt-8">&#x00A0;</span><span
  8256. class="cmtt-8">&#x00A0;</span><span
  8257. class="cmtt-8">&#x00A0;</span><span
  8258. class="cmtt-8">&#x00A0;</span><span
  8259. class="cmtt-8">&#x00A0;</span><span
  8260. class="cmtt-8">&#x00A0;</span><span
  8261. class="cmtt-8">&#x00A0;</span><span
  8262. class="cmtt-8">&#x00A0;</span><span
  8263. class="cmtt-8">&#x00A0;28)</span><span
  8264. class="cmtt-8">&#x00A0;vector</span><span
  8265. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  8266. class="cmtt-8">&#x00A0;element</span><span
  8267. class="cmtt-8">&#x00A0;[i]</span><span
  8268. class="cmtt-8">&#x00A0;=</span><span
  8269. class="cmtt-8">&#x00A0;[predicted]</span>
  8270. <br class="fancyvrb" /><a
  8271. id="x1-101134r67"></a><span
  8272. class="cmr-6">67</span><span
  8273. class="cmtt-8">&#x00A0;</span><span
  8274. class="cmtt-8">&#x00A0;</span>
  8275. <br class="fancyvrb" /><a
  8276. id="x1-101136r68"></a><span
  8277. class="cmr-6">68</span><span
  8278. class="cmtt-8">&#x00A0;</span><span
  8279. class="cmtt-8">&#x00A0;</span><span
  8280. class="cmtt-8">&#x00A0;</span><span
  8281. class="cmtt-8">&#x00A0;</span><span
  8282. class="cmtt-8">&#x00A0;</span><span
  8283. class="cmtt-8">&#x00A0;</span><span
  8284. class="cmtt-8">&#x00A0;</span><span
  8285. class="cmtt-8">&#x00A0;</span><span
  8286. class="cmtt-8">&#x00A0;</span><span
  8287. class="cmtt-8">&#x00A0;</span><span
  8288. class="cmtt-8">&#x00A0;</span><span
  8289. class="cmtt-8">&#x00A0;</span><span
  8290. class="cmsy-8">}</span>
  8291. <br class="fancyvrb" /><a
  8292. id="x1-101138r69"></a><span
  8293. class="cmr-6">69</span><span
  8294. class="cmtt-8">&#x00A0;</span><span
  8295. class="cmtt-8">&#x00A0;</span>
  8296. <br class="fancyvrb" /><a
  8297. id="x1-101140r70"></a><span
  8298. class="cmr-6">70</span><span
  8299. class="cmtt-8">&#x00A0;</span><span
  8300. class="cmtt-8">&#x00A0;</span><span
  8301. class="cmtt-8">&#x00A0;</span><span
  8302. class="cmtt-8">&#x00A0;</span><span
  8303. class="cmtt-8">&#x00A0;</span><span
  8304. class="cmtt-8">&#x00A0;</span><span
  8305. class="cmtt-8">&#x00A0;</span><span
  8306. class="cmsy-8">}</span>
  8307. <br class="fancyvrb" /><a
  8308. id="x1-101142r71"></a><span
  8309. class="cmr-6">71</span><span
  8310. class="cmtt-8">&#x00A0;</span><span
  8311. class="cmtt-8">&#x00A0;</span>
  8312. <br class="fancyvrb" /><a
  8313. id="x1-101144r72"></a><span
  8314. class="cmr-6">72</span><span
  8315. class="cmtt-8">&#x00A0;</span><span
  8316. class="cmtt-8">&#x00A0;</span><span
  8317. class="cmtt-8">&#x00A0;29)</span><span
  8318. class="cmtt-8">&#x00A0;done</span>
  8319. <br class="fancyvrb" /><a
  8320. id="x1-101146r73"></a><span
  8321. class="cmr-6">73</span><span
  8322. class="cmtt-8">&#x00A0;</span><span
  8323. class="cmtt-8">&#x00A0;</span>
  8324. </div>
  8325. </dd><dt class="description">
  8326. <span
  8327. class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd
  8328. class="description">
  8329. <!--l. 351--><p class="noindent" >Curve synthesis generates a return vector <span
  8330. class="cmtt-12">[floor] </span>of length <span
  8331. class="cmtt-12">[n] </span>(where <span
  8332. class="cmtt-12">[n] </span>is provided by
  8333. the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
  8334. <span
  8335. class="cmtt-12">[floor1_X_list]</span>, <span
  8336. class="cmtt-12">[floor1_final_Y] </span>and <span
  8337. class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
  8338. [floor1_multiplier] and [floor1_values] values.
  8339. <!--l. 358--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
  8340. class="cmtt-12">[floor1_X_list]</span>, <span
  8341. class="cmtt-12">[floor1_final_Y] </span>and
  8342. <span
  8343. class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span
  8344. class="cmtt-12">[floor1_X_list]&#8217;</span>, <span
  8345. class="cmtt-12">[floor1_final_Y]&#8217;</span>
  8346. and <span
  8347. class="cmtt-12">[floor1_step2_flag]&#8217; </span>according to ascending sort order of the values in
  8348. <span
  8349. class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span
  8350. class="cmtt-12">[floor1_X_list] </span>and then apply the same
  8351. permutation to elements of the other two vectors so that the X, Y and step2_flag values
  8352. still match.
  8353. <!--l. 368--><p class="noindent" >Then compute the final curve in one pass:
  8354. <!--l. 370--><p class="noindent" >
  8355. <div class="fancyvrb" id="fancyvrb32">
  8356. <a
  8357. id="x1-101148r1"></a><span
  8358. class="cmr-6">1</span><span
  8359. class="cmtt-8">&#x00A0;</span><span
  8360. class="cmtt-8">&#x00A0;</span><span
  8361. class="cmtt-8">&#x00A0;</span><span
  8362. class="cmtt-8">&#x00A0;1)</span><span
  8363. class="cmtt-8">&#x00A0;[hx]</span><span
  8364. class="cmtt-8">&#x00A0;=</span><span
  8365. class="cmtt-8">&#x00A0;0</span>
  8366. <br class="fancyvrb" /><a
  8367. id="x1-101150r2"></a><span
  8368. class="cmr-6">2</span><span
  8369. class="cmtt-8">&#x00A0;</span><span
  8370. class="cmtt-8">&#x00A0;</span><span
  8371. class="cmtt-8">&#x00A0;</span><span
  8372. class="cmtt-8">&#x00A0;2)</span><span
  8373. class="cmtt-8">&#x00A0;[lx]</span><span
  8374. class="cmtt-8">&#x00A0;=</span><span
  8375. class="cmtt-8">&#x00A0;0</span>
  8376. <br class="fancyvrb" /><a
  8377. id="x1-101152r3"></a><span
  8378. class="cmr-6">3</span><span
  8379. class="cmtt-8">&#x00A0;</span><span
  8380. class="cmtt-8">&#x00A0;</span><span
  8381. class="cmtt-8">&#x00A0;</span><span
  8382. class="cmtt-8">&#x00A0;3)</span><span
  8383. class="cmtt-8">&#x00A0;[ly]</span><span
  8384. class="cmtt-8">&#x00A0;=</span><span
  8385. class="cmtt-8">&#x00A0;vector</span><span
  8386. class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
  8387. class="cmtt-8">&#x00A0;element</span><span
  8388. class="cmtt-8">&#x00A0;[0]</span><span
  8389. class="cmtt-8">&#x00A0;*</span><span
  8390. class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
  8391. <br class="fancyvrb" /><a
  8392. id="x1-101154r4"></a><span
  8393. class="cmr-6">4</span><span
  8394. class="cmtt-8">&#x00A0;</span><span
  8395. class="cmtt-8">&#x00A0;</span><span
  8396. class="cmtt-8">&#x00A0;</span><span
  8397. class="cmtt-8">&#x00A0;4)</span><span
  8398. class="cmtt-8">&#x00A0;iterate</span><span
  8399. class="cmtt-8">&#x00A0;[i]</span><span
  8400. class="cmtt-8">&#x00A0;over</span><span
  8401. class="cmtt-8">&#x00A0;the</span><span
  8402. class="cmtt-8">&#x00A0;range</span><span
  8403. class="cmtt-8">&#x00A0;1</span><span
  8404. class="cmtt-8">&#x00A0;...</span><span
  8405. class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
  8406. class="cmtt-8">&#x00A0;</span><span
  8407. class="cmsy-8">{</span>
  8408. <br class="fancyvrb" /><a
  8409. id="x1-101156r5"></a><span
  8410. class="cmr-6">5</span><span
  8411. class="cmtt-8">&#x00A0;</span><span
  8412. class="cmtt-8">&#x00A0;</span>
  8413. <br class="fancyvrb" /><a
  8414. id="x1-101158r6"></a><span
  8415. class="cmr-6">6</span><span
  8416. class="cmtt-8">&#x00A0;</span><span
  8417. class="cmtt-8">&#x00A0;</span><span
  8418. class="cmtt-8">&#x00A0;</span><span
  8419. class="cmtt-8">&#x00A0;</span><span
  8420. class="cmtt-8">&#x00A0;</span><span
  8421. class="cmtt-8">&#x00A0;</span><span
  8422. class="cmtt-8">&#x00A0;</span><span
  8423. class="cmtt-8">&#x00A0;</span><span
  8424. class="cmtt-8">&#x00A0;5)</span><span
  8425. class="cmtt-8">&#x00A0;if</span><span
  8426. class="cmtt-8">&#x00A0;(</span><span
  8427. class="cmtt-8">&#x00A0;[floor1_step2_flag]&#8217;</span><span
  8428. class="cmtt-8">&#x00A0;element</span><span
  8429. class="cmtt-8">&#x00A0;[i]</span><span
  8430. class="cmtt-8">&#x00A0;is</span><span
  8431. class="cmtt-8">&#x00A0;set</span><span
  8432. class="cmtt-8">&#x00A0;)</span><span
  8433. class="cmtt-8">&#x00A0;</span><span
  8434. class="cmsy-8">{</span>
  8435. <br class="fancyvrb" /><a
  8436. id="x1-101160r7"></a><span
  8437. class="cmr-6">7</span><span
  8438. class="cmtt-8">&#x00A0;</span><span
  8439. class="cmtt-8">&#x00A0;</span>
  8440. <br class="fancyvrb" /><a
  8441. id="x1-101162r8"></a><span
  8442. class="cmr-6">8</span><span
  8443. class="cmtt-8">&#x00A0;</span><span
  8444. class="cmtt-8">&#x00A0;</span><span
  8445. class="cmtt-8">&#x00A0;</span><span
  8446. class="cmtt-8">&#x00A0;</span><span
  8447. class="cmtt-8">&#x00A0;</span><span
  8448. class="cmtt-8">&#x00A0;</span><span
  8449. class="cmtt-8">&#x00A0;</span><span
  8450. class="cmtt-8">&#x00A0;</span><span
  8451. class="cmtt-8">&#x00A0;</span><span
  8452. class="cmtt-8">&#x00A0;</span><span
  8453. class="cmtt-8">&#x00A0;</span><span
  8454. class="cmtt-8">&#x00A0;</span><span
  8455. class="cmtt-8">&#x00A0;</span><span
  8456. class="cmtt-8">&#x00A0;</span><span
  8457. class="cmtt-8">&#x00A0;6)</span><span
  8458. class="cmtt-8">&#x00A0;[hy]</span><span
  8459. class="cmtt-8">&#x00A0;=</span><span
  8460. class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
  8461. class="cmtt-8">&#x00A0;element</span><span
  8462. class="cmtt-8">&#x00A0;[i]</span><span
  8463. class="cmtt-8">&#x00A0;*</span><span
  8464. class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
  8465. <br class="fancyvrb" /><a
  8466. id="x1-101164r9"></a><span
  8467. class="cmr-6">9</span><span
  8468. class="cmtt-8">&#x00A0;</span><span
  8469. class="cmtt-8">&#x00A0;</span><span
  8470. class="cmtt-8">&#x00A0; </span><span
  8471. class="cmtt-8">&#x00A0;</span><span
  8472. class="cmtt-8">&#x00A0;</span><span
  8473. class="cmtt-8">&#x00A0;</span><span
  8474. class="cmtt-8">&#x00A0;</span><span
  8475. class="cmtt-8">&#x00A0;7)</span><span
  8476. class="cmtt-8">&#x00A0;[hx]</span><span
  8477. class="cmtt-8">&#x00A0;=</span><span
  8478. class="cmtt-8">&#x00A0;[floor1_X_list]&#8217;</span><span
  8479. class="cmtt-8">&#x00A0;element</span><span
  8480. class="cmtt-8">&#x00A0;[i]</span>
  8481. <br class="fancyvrb" /><a
  8482. id="x1-101166r10"></a><span
  8483. class="cmr-6">10</span><span
  8484. class="cmtt-8">&#x00A0;</span><span
  8485. class="cmtt-8">&#x00A0;</span><span
  8486. class="cmtt-8">&#x00A0;</span><span
  8487. class="cmtt-8">&#x00A0;</span><span
  8488. class="cmtt-8">&#x00A0;</span><span
  8489. class="cmtt-8">&#x00A0;</span><span
  8490. class="cmtt-8">&#x00A0;</span><span
  8491. class="cmtt-8">&#x00A0;</span><span
  8492. class="cmtt-8">&#x00A0;</span><span
  8493. class="cmtt-8">&#x00A0;</span><span
  8494. class="cmtt-8">&#x00A0;</span><span
  8495. class="cmtt-8">&#x00A0;</span><span
  8496. class="cmtt-8">&#x00A0;</span><span
  8497. class="cmtt-8">&#x00A0;</span><span
  8498. class="cmtt-8">&#x00A0;8)</span><span
  8499. class="cmtt-8">&#x00A0;</span><a
  8500. href="#x1-1230009.2.7"><span
  8501. class="cmtt-8">render_line</span></a><span
  8502. class="cmtt-8">(</span><span
  8503. class="cmtt-8">&#x00A0;[lx],</span><span
  8504. class="cmtt-8">&#x00A0;[ly],</span><span
  8505. class="cmtt-8">&#x00A0;[hx],</span><span
  8506. class="cmtt-8">&#x00A0;[hy],</span><span
  8507. class="cmtt-8">&#x00A0;[floor]</span><span
  8508. class="cmtt-8">&#x00A0;)</span>
  8509. <br class="fancyvrb" /><a
  8510. id="x1-101168r11"></a><span
  8511. class="cmr-6">11</span><span
  8512. class="cmtt-8">&#x00A0;</span><span
  8513. class="cmtt-8">&#x00A0;</span><span
  8514. class="cmtt-8">&#x00A0;</span><span
  8515. class="cmtt-8">&#x00A0;</span><span
  8516. class="cmtt-8">&#x00A0;</span><span
  8517. class="cmtt-8">&#x00A0;</span><span
  8518. class="cmtt-8">&#x00A0;</span><span
  8519. class="cmtt-8">&#x00A0;</span><span
  8520. class="cmtt-8">&#x00A0;</span><span
  8521. class="cmtt-8">&#x00A0;</span><span
  8522. class="cmtt-8">&#x00A0;</span><span
  8523. class="cmtt-8">&#x00A0;</span><span
  8524. class="cmtt-8">&#x00A0;</span><span
  8525. class="cmtt-8">&#x00A0;</span><span
  8526. class="cmtt-8">&#x00A0;9)</span><span
  8527. class="cmtt-8">&#x00A0;[lx]</span><span
  8528. class="cmtt-8">&#x00A0;=</span><span
  8529. class="cmtt-8">&#x00A0;[hx]</span>
  8530. <br class="fancyvrb" /><a
  8531. id="x1-101170r12"></a><span
  8532. class="cmr-6">12</span><span
  8533. class="cmtt-8">&#x00A0;</span><span
  8534. class="cmtt-8">&#x00A0; </span><span
  8535. class="cmtt-8">&#x00A0;</span><span
  8536. class="cmtt-8">&#x00A0;</span><span
  8537. class="cmtt-8">&#x00A0;</span><span
  8538. class="cmtt-8">&#x00A0;10)</span><span
  8539. class="cmtt-8">&#x00A0;[ly]</span><span
  8540. class="cmtt-8">&#x00A0;=</span><span
  8541. class="cmtt-8">&#x00A0;[hy]</span>
  8542. <br class="fancyvrb" /><a
  8543. id="x1-101172r13"></a><span
  8544. class="cmr-6">13</span><span
  8545. class="cmtt-8">&#x00A0;</span><span
  8546. class="cmtt-8">&#x00A0;</span><span
  8547. class="cmtt-8">&#x00A0;</span><span
  8548. class="cmtt-8">&#x00A0;</span><span
  8549. class="cmtt-8">&#x00A0;</span><span
  8550. class="cmtt-8">&#x00A0;</span><span
  8551. class="cmtt-8">&#x00A0;</span><span
  8552. class="cmtt-8">&#x00A0;</span><span
  8553. class="cmtt-8">&#x00A0;</span><span
  8554. class="cmtt-8">&#x00A0;</span><span
  8555. class="cmtt-8">&#x00A0;</span><span
  8556. class="cmtt-8">&#x00A0;</span><span
  8557. class="cmsy-8">}</span>
  8558. <br class="fancyvrb" /><a
  8559. id="x1-101174r14"></a><span
  8560. class="cmr-6">14</span><span
  8561. class="cmtt-8">&#x00A0;</span><span
  8562. class="cmtt-8">&#x00A0;</span><span
  8563. class="cmtt-8">&#x00A0;</span><span
  8564. class="cmtt-8">&#x00A0;</span><span
  8565. class="cmtt-8">&#x00A0;</span><span
  8566. class="cmtt-8">&#x00A0;</span><span
  8567. class="cmtt-8">&#x00A0;</span><span
  8568. class="cmsy-8">}</span>
  8569. <br class="fancyvrb" /><a
  8570. id="x1-101176r15"></a><span
  8571. class="cmr-6">15</span><span
  8572. class="cmtt-8">&#x00A0;</span><span
  8573. class="cmtt-8">&#x00A0;</span>
  8574. <br class="fancyvrb" /><a
  8575. id="x1-101178r16"></a><span
  8576. class="cmr-6">16</span><span
  8577. class="cmtt-8">&#x00A0;</span><span
  8578. class="cmtt-8">&#x00A0;</span><span
  8579. class="cmtt-8">&#x00A0;11)</span><span
  8580. class="cmtt-8">&#x00A0;if</span><span
  8581. class="cmtt-8">&#x00A0;(</span><span
  8582. class="cmtt-8">&#x00A0;[hx]</span><span
  8583. class="cmtt-8">&#x00A0;is</span><span
  8584. class="cmtt-8">&#x00A0;less</span><span
  8585. class="cmtt-8">&#x00A0;than</span><span
  8586. class="cmtt-8">&#x00A0;[n]</span><span
  8587. class="cmtt-8">&#x00A0;)</span><span
  8588. class="cmtt-8">&#x00A0;</span><span
  8589. class="cmsy-8">{</span>
  8590. <br class="fancyvrb" /><a
  8591. id="x1-101180r17"></a><span
  8592. class="cmr-6">17</span><span
  8593. class="cmtt-8">&#x00A0;</span><span
  8594. class="cmtt-8">&#x00A0;</span>
  8595. <br class="fancyvrb" /><a
  8596. id="x1-101182r18"></a><span
  8597. class="cmr-6">18</span><span
  8598. class="cmtt-8">&#x00A0;</span><span
  8599. class="cmtt-8">&#x00A0;</span><span
  8600. class="cmtt-8">&#x00A0;</span><span
  8601. class="cmtt-8">&#x00A0;</span><span
  8602. class="cmtt-8">&#x00A0;</span><span
  8603. class="cmtt-8">&#x00A0;</span><span
  8604. class="cmtt-8">&#x00A0;</span><span
  8605. class="cmtt-8">&#x00A0;</span><span
  8606. class="cmtt-8">&#x00A0;</span><span
  8607. class="cmtt-8">&#x00A0;12)</span><span
  8608. class="cmtt-8">&#x00A0;</span><a
  8609. href="#x1-1230009.2.7"><span
  8610. class="cmtt-8">render_line</span></a><span
  8611. class="cmtt-8">(</span><span
  8612. class="cmtt-8">&#x00A0;[hx],</span><span
  8613. class="cmtt-8">&#x00A0;[hy],</span><span
  8614. class="cmtt-8">&#x00A0;[n],</span><span
  8615. class="cmtt-8">&#x00A0;[hy],</span><span
  8616. class="cmtt-8">&#x00A0;[floor]</span><span
  8617. class="cmtt-8">&#x00A0;)</span>
  8618. <br class="fancyvrb" /><a
  8619. id="x1-101184r19"></a><span
  8620. class="cmr-6">19</span><span
  8621. class="cmtt-8">&#x00A0;</span><span
  8622. class="cmtt-8">&#x00A0;</span>
  8623. <br class="fancyvrb" /><a
  8624. id="x1-101186r20"></a><span
  8625. class="cmr-6">20</span><span
  8626. class="cmtt-8">&#x00A0;</span><span
  8627. class="cmtt-8">&#x00A0;</span><span
  8628. class="cmtt-8">&#x00A0;</span><span
  8629. class="cmtt-8">&#x00A0;</span><span
  8630. class="cmtt-8">&#x00A0;</span><span
  8631. class="cmtt-8">&#x00A0;</span><span
  8632. class="cmtt-8">&#x00A0;</span><span
  8633. class="cmsy-8">}</span>
  8634. <br class="fancyvrb" /><a
  8635. id="x1-101188r21"></a><span
  8636. class="cmr-6">21</span><span
  8637. class="cmtt-8">&#x00A0;</span><span
  8638. class="cmtt-8">&#x00A0;</span>
  8639. <br class="fancyvrb" /><a
  8640. id="x1-101190r22"></a><span
  8641. class="cmr-6">22</span><span
  8642. class="cmtt-8">&#x00A0;</span><span
  8643. class="cmtt-8">&#x00A0;</span><span
  8644. class="cmtt-8">&#x00A0;13)</span><span
  8645. class="cmtt-8">&#x00A0;if</span><span
  8646. class="cmtt-8">&#x00A0;(</span><span
  8647. class="cmtt-8">&#x00A0;[hx]</span><span
  8648. class="cmtt-8">&#x00A0;is</span><span
  8649. class="cmtt-8">&#x00A0;greater</span><span
  8650. class="cmtt-8">&#x00A0;than</span><span
  8651. class="cmtt-8">&#x00A0;[n]</span><span
  8652. class="cmtt-8">&#x00A0;)</span><span
  8653. class="cmtt-8">&#x00A0;</span><span
  8654. class="cmsy-8">{</span>
  8655. <br class="fancyvrb" /><a
  8656. id="x1-101192r23"></a><span
  8657. class="cmr-6">23</span><span
  8658. class="cmtt-8">&#x00A0;</span><span
  8659. class="cmtt-8">&#x00A0;</span>
  8660. <br class="fancyvrb" /><a
  8661. id="x1-101194r24"></a><span
  8662. class="cmr-6">24</span><span
  8663. class="cmtt-8">&#x00A0;</span><span
  8664. class="cmtt-8">&#x00A0;</span><span
  8665. class="cmtt-8">&#x00A0;</span><span
  8666. class="cmtt-8">&#x00A0;</span><span
  8667. class="cmtt-8">&#x00A0;</span><span
  8668. class="cmtt-8">&#x00A0;</span><span
  8669. class="cmtt-8">&#x00A0;</span><span
  8670. class="cmtt-8">&#x00A0;</span><span
  8671. class="cmtt-8">&#x00A0;</span><span
  8672. class="cmtt-8">&#x00A0;</span><span
  8673. class="cmtt-8">&#x00A0;</span><span
  8674. class="cmtt-8">&#x00A0;</span><span
  8675. class="cmtt-8">&#x00A0;</span><span
  8676. class="cmtt-8">&#x00A0;14)</span><span
  8677. class="cmtt-8">&#x00A0;truncate</span><span
  8678. class="cmtt-8">&#x00A0;vector</span><span
  8679. class="cmtt-8">&#x00A0;[floor]</span><span
  8680. class="cmtt-8">&#x00A0;to</span><span
  8681. class="cmtt-8">&#x00A0;[n]</span><span
  8682. class="cmtt-8">&#x00A0;elements</span>
  8683. <br class="fancyvrb" /><a
  8684. id="x1-101196r25"></a><span
  8685. class="cmr-6">25</span><span
  8686. class="cmtt-8">&#x00A0;</span><span
  8687. class="cmtt-8">&#x00A0;</span>
  8688. <br class="fancyvrb" /><a
  8689. id="x1-101198r26"></a><span
  8690. class="cmr-6">26</span><span
  8691. class="cmtt-8">&#x00A0;</span><span
  8692. class="cmtt-8">&#x00A0;</span><span
  8693. class="cmtt-8">&#x00A0;</span><span
  8694. class="cmtt-8">&#x00A0;</span><span
  8695. class="cmtt-8">&#x00A0;</span><span
  8696. class="cmtt-8">&#x00A0;</span><span
  8697. class="cmtt-8">&#x00A0;</span><span
  8698. class="cmsy-8">}</span>
  8699. <br class="fancyvrb" /><a
  8700. id="x1-101200r27"></a><span
  8701. class="cmr-6">27</span><span
  8702. class="cmtt-8">&#x00A0;</span><span
  8703. class="cmtt-8">&#x00A0;</span>
  8704. <br class="fancyvrb" /><a
  8705. id="x1-101202r28"></a><span
  8706. class="cmr-6">28</span><span
  8707. class="cmtt-8">&#x00A0;</span><span
  8708. class="cmtt-8">&#x00A0;</span><span
  8709. class="cmtt-8">&#x00A0;15)</span><span
  8710. class="cmtt-8">&#x00A0;for</span><span
  8711. class="cmtt-8">&#x00A0;each</span><span
  8712. class="cmtt-8">&#x00A0;scalar</span><span
  8713. class="cmtt-8">&#x00A0;in</span><span
  8714. class="cmtt-8">&#x00A0;vector</span><span
  8715. class="cmtt-8">&#x00A0;[floor],</span><span
  8716. class="cmtt-8">&#x00A0;perform</span><span
  8717. class="cmtt-8">&#x00A0;a</span><span
  8718. class="cmtt-8">&#x00A0;lookup</span><span
  8719. class="cmtt-8">&#x00A0;substitution</span><span
  8720. class="cmtt-8">&#x00A0;using</span>
  8721. <br class="fancyvrb" /><a
  8722. id="x1-101204r29"></a><span
  8723. class="cmr-6">29</span><span
  8724. class="cmtt-8">&#x00A0;</span><span
  8725. class="cmtt-8">&#x00A0;</span><span
  8726. class="cmtt-8">&#x00A0;</span><span
  8727. class="cmtt-8">&#x00A0;</span><span
  8728. class="cmtt-8">&#x00A0;</span><span
  8729. class="cmtt-8">&#x00A0;</span><span
  8730. class="cmtt-8">&#x00A0;the</span><span
  8731. class="cmtt-8">&#x00A0;scalar</span><span
  8732. class="cmtt-8">&#x00A0;value</span><span
  8733. class="cmtt-8">&#x00A0;from</span><span
  8734. class="cmtt-8">&#x00A0;[floor]</span><span
  8735. class="cmtt-8">&#x00A0;as</span><span
  8736. class="cmtt-8">&#x00A0;an</span><span
  8737. class="cmtt-8">&#x00A0;offset</span><span
  8738. class="cmtt-8">&#x00A0;into</span><span
  8739. class="cmtt-8">&#x00A0;the</span><span
  8740. class="cmtt-8">&#x00A0;vector</span><span
  8741. class="cmtt-8">&#x00A0;</span><a
  8742. href="#x1-12500010.1"><span
  8743. class="cmtt-8">[floor1_inverse_dB_static_table]</span></a>
  8744. <br class="fancyvrb" /><a
  8745. id="x1-101206r30"></a><span
  8746. class="cmr-6">30</span><span
  8747. class="cmtt-8">&#x00A0;</span><span
  8748. class="cmtt-8">&#x00A0;</span>
  8749. <br class="fancyvrb" /><a
  8750. id="x1-101208r31"></a><span
  8751. class="cmr-6">31</span><span
  8752. class="cmtt-8">&#x00A0;</span><span
  8753. class="cmtt-8">&#x00A0;</span><span
  8754. class="cmtt-8">&#x00A0;16)</span><span
  8755. class="cmtt-8">&#x00A0;done</span>
  8756. <br class="fancyvrb" /><a
  8757. id="x1-101210r32"></a><span
  8758. class="cmr-6">32</span><span
  8759. class="cmtt-8">&#x00A0;</span><span
  8760. class="cmtt-8">&#x00A0;</span>
  8761. </div>
  8762. </dd></dl>
  8763. <h3 class="sectionHead"><span class="titlemark">8. </span> <a
  8764. id="x1-1020008"></a>Residue setup and decode</h3>
  8765. <!--l. 6--><p class="noindent" >
  8766. <h4 class="subsectionHead"><span class="titlemark">8.1. </span> <a
  8767. id="x1-1030008.1"></a>Overview</h4>
  8768. <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
  8769. after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
  8770. may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
  8771. coupling. The exact semantic content of the vector does not matter to the residue
  8772. abstraction.
  8773. <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
  8774. bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
  8775. different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
  8776. abstraction.
  8777. <!--l. 23--><p class="noindent" >
  8778. <h4 class="subsectionHead"><span class="titlemark">8.2. </span> <a
  8779. id="x1-1040008.2"></a>Residue format</h4>
  8780. <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
  8781. chunk, encodes the chunk classifications and finally encodes the chunks themselves
  8782. using the the specific VQ arrangement defined for each selected classification. The
  8783. exact interleaving and partitioning vary by residue encoding number, however the
  8784. high-level process used to classify and encode the residue vector is the same in all three
  8785. variants.
  8786. <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
  8787. the moment exactly how a partition is encoded and simply trusting that it is, is as
  8788. follows:
  8789. <ul class="itemize1">
  8790. <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
  8791. specified. If we have a vector size of <span
  8792. class="cmti-12">n</span>, a partition size <span
  8793. class="cmti-12">residue</span><span
  8794. class="cmti-12">_partition</span><span
  8795. class="cmti-12">_size</span>,
  8796. and a total of <span
  8797. class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded
  8798. is <span
  8799. class="cmti-12">n</span>/<span
  8800. class="cmti-12">residue</span><span
  8801. class="cmti-12">_partition</span><span
  8802. class="cmti-12">_size</span>*<span
  8803. class="cmti-12">ch</span>. It is important to note that the integer division
  8804. truncates. In the below example, we assume an example <span
  8805. class="cmti-12">residue</span><span
  8806. class="cmti-12">_partition</span><span
  8807. class="cmti-12">_size </span>of 8.
  8808. </li>
  8809. <li class="itemize">Each partition in each vector has a classification number that specifies which of
  8810. multiple configured VQ codebook setups are used to decode that partition. The
  8811. classification numbers of each partition can be thought of as forming a vector in
  8812. their own right, as in the illustration below. Just as the residue vectors are coded
  8813. in grouped partitions to increase encoding efficiency, the classification vector is also
  8814. partitioned into chunks. The integer elements of each scalar in a classification chunk
  8815. are built into a single scalar that represents the classification numbers in that chunk.
  8816. In the below example, the classification codeword encodes two classification numbers.
  8817. </li>
  8818. <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
  8819. the residue vector, but more often efficient codebook design dictates that each vector
  8820. is encoded as the additive sum of several passes through the residue vector using
  8821. more than one VQ codebook. Thus, each residue value potentially accumulates values
  8822. from multiple decode passes. The classification value associated with a partition is
  8823. the same in each pass, thus the classification codeword is coded only in the first pass.
  8824. </li></ul>
  8825. <div class="center"
  8826. >
  8827. <!--l. 70--><p class="noindent" >
  8828. <!--l. 71--><p class="noindent" ><img
  8829. src="residue-pack.png" alt="PIC"
  8830. >
  8831. <br /> <div class="caption"
  8832. ><span class="id">Figure&#x00A0;11: </span><span
  8833. class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10400111 -->
  8834. </div>
  8835. <!--l. 77--><p class="noindent" >
  8836. <h4 class="subsectionHead"><span class="titlemark">8.3. </span> <a
  8837. id="x1-1050008.3"></a>residue 0</h4>
  8838. <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
  8839. partition encoding (visually treated as a black box&#8211;or cyan box or brown box&#8211;in the above
  8840. figure).
  8841. <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
  8842. encode a partition in a specific pass. The dimension of the codebook need not be the same in
  8843. multiple passes, however the partition size must be an even multiple of the codebook
  8844. dimension.
  8845. <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
  8846. codebook sizes of 8, 4, 2 and 1:
  8847. <!--l. 92--><p class="noindent" >
  8848. <div class="fancyvrb" id="fancyvrb33">
  8849. <a
  8850. id="x1-105002r1"></a><span
  8851. class="cmr-6">1</span><span
  8852. class="cmtt-8">&#x00A0;</span><span
  8853. class="cmtt-8">&#x00A0;</span>
  8854. <br class="fancyvrb" /><a
  8855. id="x1-105004r2"></a><span
  8856. class="cmr-6">2</span><span
  8857. class="cmtt-8">&#x00A0;</span><span
  8858. class="cmtt-8">&#x00A0;</span><span
  8859. class="cmtt-8">&#x00A0;</span><span
  8860. class="cmtt-8">&#x00A0;</span><span
  8861. class="cmtt-8">&#x00A0;</span><span
  8862. class="cmtt-8">&#x00A0;</span><span
  8863. class="cmtt-8">&#x00A0;</span><span
  8864. class="cmtt-8">&#x00A0;</span><span
  8865. class="cmtt-8">&#x00A0;</span><span
  8866. class="cmtt-8">&#x00A0;</span><span
  8867. class="cmtt-8">&#x00A0;</span><span
  8868. class="cmtt-8">&#x00A0;</span><span
  8869. class="cmtt-8">&#x00A0;</span><span
  8870. class="cmtt-8">&#x00A0;original</span><span
  8871. class="cmtt-8">&#x00A0;residue</span><span
  8872. class="cmtt-8">&#x00A0;vector:</span><span
  8873. class="cmtt-8">&#x00A0;[</span><span
  8874. class="cmtt-8">&#x00A0;0</span><span
  8875. class="cmtt-8">&#x00A0;1</span><span
  8876. class="cmtt-8">&#x00A0;2</span><span
  8877. class="cmtt-8">&#x00A0;3</span><span
  8878. class="cmtt-8">&#x00A0;4</span><span
  8879. class="cmtt-8">&#x00A0;5</span><span
  8880. class="cmtt-8">&#x00A0;6</span><span
  8881. class="cmtt-8">&#x00A0;7</span><span
  8882. class="cmtt-8">&#x00A0;]</span>
  8883. <br class="fancyvrb" /><a
  8884. id="x1-105006r3"></a><span
  8885. class="cmr-6">3</span><span
  8886. class="cmtt-8">&#x00A0;</span><span
  8887. class="cmtt-8">&#x00A0;</span>
  8888. <br class="fancyvrb" /><a
  8889. id="x1-105008r4"></a><span
  8890. class="cmr-6">4</span><span
  8891. class="cmtt-8">&#x00A0;</span><span
  8892. class="cmtt-8">&#x00A0;codebook</span><span
  8893. class="cmtt-8">&#x00A0;dimensions</span><span
  8894. class="cmtt-8">&#x00A0;=</span><span
  8895. class="cmtt-8">&#x00A0;8</span><span
  8896. class="cmtt-8">&#x00A0;</span><span
  8897. class="cmtt-8">&#x00A0;encoded</span><span
  8898. class="cmtt-8">&#x00A0;as:</span><span
  8899. class="cmtt-8">&#x00A0;[</span><span
  8900. class="cmtt-8">&#x00A0;0</span><span
  8901. class="cmtt-8">&#x00A0;1</span><span
  8902. class="cmtt-8">&#x00A0;2</span><span
  8903. class="cmtt-8">&#x00A0;3</span><span
  8904. class="cmtt-8">&#x00A0;4</span><span
  8905. class="cmtt-8">&#x00A0;5</span><span
  8906. class="cmtt-8">&#x00A0;6</span><span
  8907. class="cmtt-8">&#x00A0;7</span><span
  8908. class="cmtt-8">&#x00A0;]</span>
  8909. <br class="fancyvrb" /><a
  8910. id="x1-105010r5"></a><span
  8911. class="cmr-6">5</span><span
  8912. class="cmtt-8">&#x00A0;</span><span
  8913. class="cmtt-8">&#x00A0;</span>
  8914. <br class="fancyvrb" /><a
  8915. id="x1-105012r6"></a><span
  8916. class="cmr-6">6</span><span
  8917. class="cmtt-8">&#x00A0;</span><span
  8918. class="cmtt-8">&#x00A0;codebook</span><span
  8919. class="cmtt-8">&#x00A0;dimensions</span><span
  8920. class="cmtt-8">&#x00A0;=</span><span
  8921. class="cmtt-8">&#x00A0;4</span><span
  8922. class="cmtt-8">&#x00A0;</span><span
  8923. class="cmtt-8">&#x00A0;encoded</span><span
  8924. class="cmtt-8">&#x00A0;as:</span><span
  8925. class="cmtt-8">&#x00A0;[</span><span
  8926. class="cmtt-8">&#x00A0;0</span><span
  8927. class="cmtt-8">&#x00A0;2</span><span
  8928. class="cmtt-8">&#x00A0;4</span><span
  8929. class="cmtt-8">&#x00A0;6</span><span
  8930. class="cmtt-8">&#x00A0;],</span><span
  8931. class="cmtt-8">&#x00A0;[</span><span
  8932. class="cmtt-8">&#x00A0;1</span><span
  8933. class="cmtt-8">&#x00A0;3</span><span
  8934. class="cmtt-8">&#x00A0;5</span><span
  8935. class="cmtt-8">&#x00A0;7</span><span
  8936. class="cmtt-8">&#x00A0;]</span>
  8937. <br class="fancyvrb" /><a
  8938. id="x1-105014r7"></a><span
  8939. class="cmr-6">7</span><span
  8940. class="cmtt-8">&#x00A0;</span><span
  8941. class="cmtt-8">&#x00A0;</span>
  8942. <br class="fancyvrb" /><a
  8943. id="x1-105016r8"></a><span
  8944. class="cmr-6">8</span><span
  8945. class="cmtt-8">&#x00A0;</span><span
  8946. class="cmtt-8">&#x00A0;codebook</span><span
  8947. class="cmtt-8">&#x00A0;dimensions</span><span
  8948. class="cmtt-8">&#x00A0;=</span><span
  8949. class="cmtt-8">&#x00A0;2</span><span
  8950. class="cmtt-8">&#x00A0;</span><span
  8951. class="cmtt-8">&#x00A0;encoded</span><span
  8952. class="cmtt-8">&#x00A0;as:</span><span
  8953. class="cmtt-8">&#x00A0;[</span><span
  8954. class="cmtt-8">&#x00A0;0</span><span
  8955. class="cmtt-8">&#x00A0;4</span><span
  8956. class="cmtt-8">&#x00A0;],</span><span
  8957. class="cmtt-8">&#x00A0;[</span><span
  8958. class="cmtt-8">&#x00A0;1</span><span
  8959. class="cmtt-8">&#x00A0;5</span><span
  8960. class="cmtt-8">&#x00A0;],</span><span
  8961. class="cmtt-8">&#x00A0;[</span><span
  8962. class="cmtt-8">&#x00A0;2</span><span
  8963. class="cmtt-8">&#x00A0;6</span><span
  8964. class="cmtt-8">&#x00A0;],</span><span
  8965. class="cmtt-8">&#x00A0;[</span><span
  8966. class="cmtt-8">&#x00A0;3</span><span
  8967. class="cmtt-8">&#x00A0;7</span><span
  8968. class="cmtt-8">&#x00A0;]</span>
  8969. <br class="fancyvrb" /><a
  8970. id="x1-105018r9"></a><span
  8971. class="cmr-6">9</span><span
  8972. class="cmtt-8">&#x00A0;</span><span
  8973. class="cmtt-8">&#x00A0;</span>
  8974. <br class="fancyvrb" /><a
  8975. id="x1-105020r10"></a><span
  8976. class="cmr-6">10</span><span
  8977. class="cmtt-8">&#x00A0;</span><span
  8978. class="cmtt-8">&#x00A0;codebook</span><span
  8979. class="cmtt-8">&#x00A0;dimensions</span><span
  8980. class="cmtt-8">&#x00A0;=</span><span
  8981. class="cmtt-8">&#x00A0;1</span><span
  8982. class="cmtt-8">&#x00A0;</span><span
  8983. class="cmtt-8">&#x00A0;encoded</span><span
  8984. class="cmtt-8">&#x00A0;as:</span><span
  8985. class="cmtt-8">&#x00A0;[</span><span
  8986. class="cmtt-8">&#x00A0;0</span><span
  8987. class="cmtt-8">&#x00A0;],</span><span
  8988. class="cmtt-8">&#x00A0;[</span><span
  8989. class="cmtt-8">&#x00A0;1</span><span
  8990. class="cmtt-8">&#x00A0;],</span><span
  8991. class="cmtt-8">&#x00A0;[</span><span
  8992. class="cmtt-8">&#x00A0;2</span><span
  8993. class="cmtt-8">&#x00A0;],</span><span
  8994. class="cmtt-8">&#x00A0;[</span><span
  8995. class="cmtt-8">&#x00A0;3</span><span
  8996. class="cmtt-8">&#x00A0;],</span><span
  8997. class="cmtt-8">&#x00A0;[</span><span
  8998. class="cmtt-8">&#x00A0;4</span><span
  8999. class="cmtt-8">&#x00A0;],</span><span
  9000. class="cmtt-8">&#x00A0;[</span><span
  9001. class="cmtt-8">&#x00A0;5</span><span
  9002. class="cmtt-8">&#x00A0;],</span><span
  9003. class="cmtt-8">&#x00A0;[</span><span
  9004. class="cmtt-8">&#x00A0;6</span><span
  9005. class="cmtt-8">&#x00A0;],</span><span
  9006. class="cmtt-8">&#x00A0;[</span><span
  9007. class="cmtt-8">&#x00A0;7</span><span
  9008. class="cmtt-8">&#x00A0;]</span>
  9009. <br class="fancyvrb" /><a
  9010. id="x1-105022r11"></a><span
  9011. class="cmr-6">11</span><span
  9012. class="cmtt-8">&#x00A0;</span><span
  9013. class="cmtt-8">&#x00A0;</span>
  9014. </div>
  9015. <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
  9016. restricted to a power of two.
  9017. <!--l. 111--><p class="noindent" >
  9018. <h4 class="subsectionHead"><span class="titlemark">8.4. </span> <a
  9019. id="x1-1060008.4"></a>residue 1</h4>
  9020. <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
  9021. with residue 0, however, partition length must be an integer multiple of the codebook dimension,
  9022. although dimension may vary from pass to pass.
  9023. <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
  9024. codebook sizes of 8, 4, 2 and 1:
  9025. <!--l. 121--><p class="noindent" >
  9026. <div class="fancyvrb" id="fancyvrb34">
  9027. <a
  9028. id="x1-106002r1"></a><span
  9029. class="cmr-6">1</span><span
  9030. class="cmtt-8">&#x00A0;</span><span
  9031. class="cmtt-8">&#x00A0;</span>
  9032. <br class="fancyvrb" /><a
  9033. id="x1-106004r2"></a><span
  9034. class="cmr-6">2</span><span
  9035. class="cmtt-8">&#x00A0;</span><span
  9036. class="cmtt-8">&#x00A0;</span><span
  9037. class="cmtt-8">&#x00A0;</span><span
  9038. class="cmtt-8">&#x00A0;</span><span
  9039. class="cmtt-8">&#x00A0;</span><span
  9040. class="cmtt-8">&#x00A0;</span><span
  9041. class="cmtt-8">&#x00A0;</span><span
  9042. class="cmtt-8">&#x00A0;</span><span
  9043. class="cmtt-8">&#x00A0;</span><span
  9044. class="cmtt-8">&#x00A0;</span><span
  9045. class="cmtt-8">&#x00A0;</span><span
  9046. class="cmtt-8">&#x00A0;</span><span
  9047. class="cmtt-8">&#x00A0;</span><span
  9048. class="cmtt-8">&#x00A0;original</span><span
  9049. class="cmtt-8">&#x00A0;residue</span><span
  9050. class="cmtt-8">&#x00A0;vector:</span><span
  9051. class="cmtt-8">&#x00A0;[</span><span
  9052. class="cmtt-8">&#x00A0;0</span><span
  9053. class="cmtt-8">&#x00A0;1</span><span
  9054. class="cmtt-8">&#x00A0;2</span><span
  9055. class="cmtt-8">&#x00A0;3</span><span
  9056. class="cmtt-8">&#x00A0;4</span><span
  9057. class="cmtt-8">&#x00A0;5</span><span
  9058. class="cmtt-8">&#x00A0;6</span><span
  9059. class="cmtt-8">&#x00A0;7</span><span
  9060. class="cmtt-8">&#x00A0;]</span>
  9061. <br class="fancyvrb" /><a
  9062. id="x1-106006r3"></a><span
  9063. class="cmr-6">3</span><span
  9064. class="cmtt-8">&#x00A0;</span><span
  9065. class="cmtt-8">&#x00A0;</span>
  9066. <br class="fancyvrb" /><a
  9067. id="x1-106008r4"></a><span
  9068. class="cmr-6">4</span><span
  9069. class="cmtt-8">&#x00A0;</span><span
  9070. class="cmtt-8">&#x00A0;codebook</span><span
  9071. class="cmtt-8">&#x00A0;dimensions</span><span
  9072. class="cmtt-8">&#x00A0;=</span><span
  9073. class="cmtt-8">&#x00A0;8</span><span
  9074. class="cmtt-8">&#x00A0;</span><span
  9075. class="cmtt-8">&#x00A0;encoded</span><span
  9076. class="cmtt-8">&#x00A0;as:</span><span
  9077. class="cmtt-8">&#x00A0;[</span><span
  9078. class="cmtt-8">&#x00A0;0</span><span
  9079. class="cmtt-8">&#x00A0;1</span><span
  9080. class="cmtt-8">&#x00A0;2</span><span
  9081. class="cmtt-8">&#x00A0;3</span><span
  9082. class="cmtt-8">&#x00A0;4</span><span
  9083. class="cmtt-8">&#x00A0;5</span><span
  9084. class="cmtt-8">&#x00A0;6</span><span
  9085. class="cmtt-8">&#x00A0;7</span><span
  9086. class="cmtt-8">&#x00A0;]</span>
  9087. <br class="fancyvrb" /><a
  9088. id="x1-106010r5"></a><span
  9089. class="cmr-6">5</span><span
  9090. class="cmtt-8">&#x00A0;</span><span
  9091. class="cmtt-8">&#x00A0;</span>
  9092. <br class="fancyvrb" /><a
  9093. id="x1-106012r6"></a><span
  9094. class="cmr-6">6</span><span
  9095. class="cmtt-8">&#x00A0;</span><span
  9096. class="cmtt-8">&#x00A0;codebook</span><span
  9097. class="cmtt-8">&#x00A0;dimensions</span><span
  9098. class="cmtt-8">&#x00A0;=</span><span
  9099. class="cmtt-8">&#x00A0;4</span><span
  9100. class="cmtt-8">&#x00A0;</span><span
  9101. class="cmtt-8">&#x00A0;encoded</span><span
  9102. class="cmtt-8">&#x00A0;as:</span><span
  9103. class="cmtt-8">&#x00A0;[</span><span
  9104. class="cmtt-8">&#x00A0;0</span><span
  9105. class="cmtt-8">&#x00A0;1</span><span
  9106. class="cmtt-8">&#x00A0;2</span><span
  9107. class="cmtt-8">&#x00A0;3</span><span
  9108. class="cmtt-8">&#x00A0;],</span><span
  9109. class="cmtt-8">&#x00A0;[</span><span
  9110. class="cmtt-8">&#x00A0;4</span><span
  9111. class="cmtt-8">&#x00A0;5</span><span
  9112. class="cmtt-8">&#x00A0;6</span><span
  9113. class="cmtt-8">&#x00A0;7</span><span
  9114. class="cmtt-8">&#x00A0;]</span>
  9115. <br class="fancyvrb" /><a
  9116. id="x1-106014r7"></a><span
  9117. class="cmr-6">7</span><span
  9118. class="cmtt-8">&#x00A0;</span><span
  9119. class="cmtt-8">&#x00A0;</span>
  9120. <br class="fancyvrb" /><a
  9121. id="x1-106016r8"></a><span
  9122. class="cmr-6">8</span><span
  9123. class="cmtt-8">&#x00A0;</span><span
  9124. class="cmtt-8">&#x00A0;codebook</span><span
  9125. class="cmtt-8">&#x00A0;dimensions</span><span
  9126. class="cmtt-8">&#x00A0;=</span><span
  9127. class="cmtt-8">&#x00A0;2</span><span
  9128. class="cmtt-8">&#x00A0;</span><span
  9129. class="cmtt-8">&#x00A0;encoded</span><span
  9130. class="cmtt-8">&#x00A0;as:</span><span
  9131. class="cmtt-8">&#x00A0;[</span><span
  9132. class="cmtt-8">&#x00A0;0</span><span
  9133. class="cmtt-8">&#x00A0;1</span><span
  9134. class="cmtt-8">&#x00A0;],</span><span
  9135. class="cmtt-8">&#x00A0;[</span><span
  9136. class="cmtt-8">&#x00A0;2</span><span
  9137. class="cmtt-8">&#x00A0;3</span><span
  9138. class="cmtt-8">&#x00A0;],</span><span
  9139. class="cmtt-8">&#x00A0;[</span><span
  9140. class="cmtt-8">&#x00A0;4</span><span
  9141. class="cmtt-8">&#x00A0;5</span><span
  9142. class="cmtt-8">&#x00A0;],</span><span
  9143. class="cmtt-8">&#x00A0;[</span><span
  9144. class="cmtt-8">&#x00A0;6</span><span
  9145. class="cmtt-8">&#x00A0;7</span><span
  9146. class="cmtt-8">&#x00A0;]</span>
  9147. <br class="fancyvrb" /><a
  9148. id="x1-106018r9"></a><span
  9149. class="cmr-6">9</span><span
  9150. class="cmtt-8">&#x00A0;</span><span
  9151. class="cmtt-8">&#x00A0;</span>
  9152. <br class="fancyvrb" /><a
  9153. id="x1-106020r10"></a><span
  9154. class="cmr-6">10</span><span
  9155. class="cmtt-8">&#x00A0;</span><span
  9156. class="cmtt-8">&#x00A0;codebook</span><span
  9157. class="cmtt-8">&#x00A0;dimensions</span><span
  9158. class="cmtt-8">&#x00A0;=</span><span
  9159. class="cmtt-8">&#x00A0;1</span><span
  9160. class="cmtt-8">&#x00A0;</span><span
  9161. class="cmtt-8">&#x00A0;encoded</span><span
  9162. class="cmtt-8">&#x00A0;as:</span><span
  9163. class="cmtt-8">&#x00A0;[</span><span
  9164. class="cmtt-8">&#x00A0;0</span><span
  9165. class="cmtt-8">&#x00A0;],</span><span
  9166. class="cmtt-8">&#x00A0;[</span><span
  9167. class="cmtt-8">&#x00A0;1</span><span
  9168. class="cmtt-8">&#x00A0;],</span><span
  9169. class="cmtt-8">&#x00A0;[</span><span
  9170. class="cmtt-8">&#x00A0;2</span><span
  9171. class="cmtt-8">&#x00A0;],</span><span
  9172. class="cmtt-8">&#x00A0;[</span><span
  9173. class="cmtt-8">&#x00A0;3</span><span
  9174. class="cmtt-8">&#x00A0;],</span><span
  9175. class="cmtt-8">&#x00A0;[</span><span
  9176. class="cmtt-8">&#x00A0;4</span><span
  9177. class="cmtt-8">&#x00A0;],</span><span
  9178. class="cmtt-8">&#x00A0;[</span><span
  9179. class="cmtt-8">&#x00A0;5</span><span
  9180. class="cmtt-8">&#x00A0;],</span><span
  9181. class="cmtt-8">&#x00A0;[</span><span
  9182. class="cmtt-8">&#x00A0;6</span><span
  9183. class="cmtt-8">&#x00A0;],</span><span
  9184. class="cmtt-8">&#x00A0;[</span><span
  9185. class="cmtt-8">&#x00A0;7</span><span
  9186. class="cmtt-8">&#x00A0;]</span>
  9187. <br class="fancyvrb" /><a
  9188. id="x1-106022r11"></a><span
  9189. class="cmr-6">11</span><span
  9190. class="cmtt-8">&#x00A0;</span><span
  9191. class="cmtt-8">&#x00A0;</span>
  9192. </div>
  9193. <!--l. 137--><p class="noindent" >
  9194. <h4 class="subsectionHead"><span class="titlemark">8.5. </span> <a
  9195. id="x1-1070008.5"></a>residue 2</h4>
  9196. <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
  9197. passed-in vectors as in residue type 1, the <span
  9198. class="cmti-12">ch </span>passed in vectors of length <span
  9199. class="cmti-12">n </span>are first interleaved
  9200. and flattened into a single vector of length <span
  9201. class="cmti-12">ch</span>*<span
  9202. class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
  9203. is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
  9204. residue type 1 and type 2 are equivalent.
  9205. <div class="center"
  9206. >
  9207. <!--l. 147--><p class="noindent" >
  9208. <!--l. 148--><p class="noindent" ><img
  9209. src="residue2.png" alt="PIC"
  9210. >
  9211. <br /> <div class="caption"
  9212. ><span class="id">Figure&#x00A0;12: </span><span
  9213. class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10700112 -->
  9214. </div>
  9215. <!--l. 153--><p class="noindent" >
  9216. <h4 class="subsectionHead"><span class="titlemark">8.6. </span> <a
  9217. id="x1-1080008.6"></a>Residue decode</h4>
  9218. <!--l. 155--><p class="noindent" >
  9219. <h5 class="subsubsectionHead"><span class="titlemark">8.6.1. </span> <a
  9220. id="x1-1090008.6.1"></a>header decode</h5>
  9221. <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
  9222. <div class="fancyvrb" id="fancyvrb35">
  9223. <a
  9224. id="x1-109002r1"></a><span
  9225. class="cmr-6">1</span><span
  9226. class="cmtt-8">&#x00A0;</span><span
  9227. class="cmtt-8">&#x00A0;</span><span
  9228. class="cmtt-8">&#x00A0;</span><span
  9229. class="cmtt-8">&#x00A0;1)</span><span
  9230. class="cmtt-8">&#x00A0;[residue\_begin]</span><span
  9231. class="cmtt-8">&#x00A0;=</span><span
  9232. class="cmtt-8">&#x00A0;read</span><span
  9233. class="cmtt-8">&#x00A0;24</span><span
  9234. class="cmtt-8">&#x00A0;bits</span><span
  9235. class="cmtt-8">&#x00A0;as</span><span
  9236. class="cmtt-8">&#x00A0;unsigned</span><span
  9237. class="cmtt-8">&#x00A0;integer</span>
  9238. <br class="fancyvrb" /><a
  9239. id="x1-109004r2"></a><span
  9240. class="cmr-6">2</span><span
  9241. class="cmtt-8">&#x00A0;</span><span
  9242. class="cmtt-8">&#x00A0;</span><span
  9243. class="cmtt-8">&#x00A0;</span><span
  9244. class="cmtt-8">&#x00A0;2)</span><span
  9245. class="cmtt-8">&#x00A0;[residue\_end]</span><span
  9246. class="cmtt-8">&#x00A0;=</span><span
  9247. class="cmtt-8">&#x00A0;read</span><span
  9248. class="cmtt-8">&#x00A0;24</span><span
  9249. class="cmtt-8">&#x00A0;bits</span><span
  9250. class="cmtt-8">&#x00A0;as</span><span
  9251. class="cmtt-8">&#x00A0;unsigned</span><span
  9252. class="cmtt-8">&#x00A0;integer</span>
  9253. <br class="fancyvrb" /><a
  9254. id="x1-109006r3"></a><span
  9255. class="cmr-6">3</span><span
  9256. class="cmtt-8">&#x00A0;</span><span
  9257. class="cmtt-8">&#x00A0;</span><span
  9258. class="cmtt-8">&#x00A0;</span><span
  9259. class="cmtt-8">&#x00A0;3)</span><span
  9260. class="cmtt-8">&#x00A0;[residue\_partition\_size]</span><span
  9261. class="cmtt-8">&#x00A0;=</span><span
  9262. class="cmtt-8">&#x00A0;read</span><span
  9263. class="cmtt-8">&#x00A0;24</span><span
  9264. class="cmtt-8">&#x00A0;bits</span><span
  9265. class="cmtt-8">&#x00A0;as</span><span
  9266. class="cmtt-8">&#x00A0;unsigned</span><span
  9267. class="cmtt-8">&#x00A0;integer</span><span
  9268. class="cmtt-8">&#x00A0;and</span><span
  9269. class="cmtt-8">&#x00A0;add</span><span
  9270. class="cmtt-8">&#x00A0;one</span>
  9271. <br class="fancyvrb" /><a
  9272. id="x1-109008r4"></a><span
  9273. class="cmr-6">4</span><span
  9274. class="cmtt-8">&#x00A0;</span><span
  9275. class="cmtt-8">&#x00A0;</span><span
  9276. class="cmtt-8">&#x00A0;</span><span
  9277. class="cmtt-8">&#x00A0;4)</span><span
  9278. class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
  9279. class="cmtt-8">&#x00A0;=</span><span
  9280. class="cmtt-8">&#x00A0;read</span><span
  9281. class="cmtt-8">&#x00A0;6</span><span
  9282. class="cmtt-8">&#x00A0;bits</span><span
  9283. class="cmtt-8">&#x00A0;as</span><span
  9284. class="cmtt-8">&#x00A0;unsigned</span><span
  9285. class="cmtt-8">&#x00A0;integer</span><span
  9286. class="cmtt-8">&#x00A0;and</span><span
  9287. class="cmtt-8">&#x00A0;add</span><span
  9288. class="cmtt-8">&#x00A0;one</span>
  9289. <br class="fancyvrb" /><a
  9290. id="x1-109010r5"></a><span
  9291. class="cmr-6">5</span><span
  9292. class="cmtt-8">&#x00A0;</span><span
  9293. class="cmtt-8">&#x00A0;</span><span
  9294. class="cmtt-8">&#x00A0;</span><span
  9295. class="cmtt-8">&#x00A0;5)</span><span
  9296. class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
  9297. class="cmtt-8">&#x00A0;=</span><span
  9298. class="cmtt-8">&#x00A0;read</span><span
  9299. class="cmtt-8">&#x00A0;8</span><span
  9300. class="cmtt-8">&#x00A0;bits</span><span
  9301. class="cmtt-8">&#x00A0;as</span><span
  9302. class="cmtt-8">&#x00A0;unsigned</span><span
  9303. class="cmtt-8">&#x00A0;integer</span>
  9304. </div>
  9305. <!--l. 166--><p class="noindent" ><span
  9306. class="cmtt-12">[residue_begin] </span>and <span
  9307. class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
  9308. actually coded; it implements akin to a bandpass where, for coding purposes, the vector
  9309. effectively begins at element <span
  9310. class="cmtt-12">[residue_begin] </span>and ends at <span
  9311. class="cmtt-12">[residue_end]</span>. Preceding and
  9312. following values in the unpacked vectors are zeroed. Note that for residue type 2, these
  9313. values as well as <span
  9314. class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
  9315. individual vectors before interleave. <span
  9316. class="cmtt-12">[residue_partition_size] </span>is as explained above,
  9317. <span
  9318. class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
  9319. belong and <span
  9320. class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
  9321. codewords. The number of dimensions in book <span
  9322. class="cmtt-12">[residue_classbook] </span>determines how
  9323. many classification values are grouped into a single classification codeword. Note that
  9324. the number of entries and dimensions in book <span
  9325. class="cmtt-12">[residue_classbook]</span>, along with
  9326. <span
  9327. class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
  9328. codewords. If <span
  9329. class="cmtt-12">[residue_classifications]</span>&#x02C6;<span
  9330. class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
  9331. <span
  9332. class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
  9333. <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
  9334. passes.
  9335. <!--l. 193--><p class="noindent" >
  9336. <div class="fancyvrb" id="fancyvrb36">
  9337. <a
  9338. id="x1-109012r1"></a><span
  9339. class="cmr-6">1</span><span
  9340. class="cmtt-8">&#x00A0;</span><span
  9341. class="cmtt-8">&#x00A0;</span><span
  9342. class="cmtt-8">&#x00A0;</span><span
  9343. class="cmtt-8">&#x00A0;1)</span><span
  9344. class="cmtt-8">&#x00A0;iterate</span><span
  9345. class="cmtt-8">&#x00A0;[i]</span><span
  9346. class="cmtt-8">&#x00A0;over</span><span
  9347. class="cmtt-8">&#x00A0;the</span><span
  9348. class="cmtt-8">&#x00A0;range</span><span
  9349. class="cmtt-8">&#x00A0;0</span><span
  9350. class="cmtt-8">&#x00A0;...</span><span
  9351. class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
  9352. class="cmtt-8">&#x00A0;{</span>
  9353. <br class="fancyvrb" /><a
  9354. id="x1-109014r2"></a><span
  9355. class="cmr-6">2</span><span
  9356. class="cmtt-8">&#x00A0;</span><span
  9357. class="cmtt-8">&#x00A0;</span>
  9358. <br class="fancyvrb" /><a
  9359. id="x1-109016r3"></a><span
  9360. class="cmr-6">3</span><span
  9361. class="cmtt-8">&#x00A0;</span><span
  9362. class="cmtt-8">&#x00A0;</span><span
  9363. class="cmtt-8">&#x00A0;</span><span
  9364. class="cmtt-8">&#x00A0;</span><span
  9365. class="cmtt-8">&#x00A0;</span><span
  9366. class="cmtt-8">&#x00A0;</span><span
  9367. class="cmtt-8">&#x00A0;</span><span
  9368. class="cmtt-8">&#x00A0;</span><span
  9369. class="cmtt-8">&#x00A0;2)</span><span
  9370. class="cmtt-8">&#x00A0;[high\_bits]</span><span
  9371. class="cmtt-8">&#x00A0;=</span><span
  9372. class="cmtt-8">&#x00A0;0</span>
  9373. <br class="fancyvrb" /><a
  9374. id="x1-109018r4"></a><span
  9375. class="cmr-6">4</span><span
  9376. class="cmtt-8">&#x00A0;</span><span
  9377. class="cmtt-8">&#x00A0;</span><span
  9378. class="cmtt-8">&#x00A0;</span><span
  9379. class="cmtt-8">&#x00A0;</span><span
  9380. class="cmtt-8">&#x00A0;</span><span
  9381. class="cmtt-8">&#x00A0;</span><span
  9382. class="cmtt-8">&#x00A0;</span><span
  9383. class="cmtt-8">&#x00A0;</span><span
  9384. class="cmtt-8">&#x00A0;3)</span><span
  9385. class="cmtt-8">&#x00A0;[low\_bits]</span><span
  9386. class="cmtt-8">&#x00A0;=</span><span
  9387. class="cmtt-8">&#x00A0;read</span><span
  9388. class="cmtt-8">&#x00A0;3</span><span
  9389. class="cmtt-8">&#x00A0;bits</span><span
  9390. class="cmtt-8">&#x00A0;as</span><span
  9391. class="cmtt-8">&#x00A0;unsigned</span><span
  9392. class="cmtt-8">&#x00A0;integer</span>
  9393. <br class="fancyvrb" /><a
  9394. id="x1-109020r5"></a><span
  9395. class="cmr-6">5</span><span
  9396. class="cmtt-8">&#x00A0;</span><span
  9397. class="cmtt-8">&#x00A0;</span><span
  9398. class="cmtt-8">&#x00A0;</span><span
  9399. class="cmtt-8">&#x00A0;</span><span
  9400. class="cmtt-8">&#x00A0;</span><span
  9401. class="cmtt-8">&#x00A0;</span><span
  9402. class="cmtt-8">&#x00A0;</span><span
  9403. class="cmtt-8">&#x00A0;</span><span
  9404. class="cmtt-8">&#x00A0;4)</span><span
  9405. class="cmtt-8">&#x00A0;[bitflag]</span><span
  9406. class="cmtt-8">&#x00A0;=</span><span
  9407. class="cmtt-8">&#x00A0;read</span><span
  9408. class="cmtt-8">&#x00A0;one</span><span
  9409. class="cmtt-8">&#x00A0;bit</span><span
  9410. class="cmtt-8">&#x00A0;as</span><span
  9411. class="cmtt-8">&#x00A0;boolean</span>
  9412. <br class="fancyvrb" /><a
  9413. id="x1-109022r6"></a><span
  9414. class="cmr-6">6</span><span
  9415. class="cmtt-8">&#x00A0;</span><span
  9416. class="cmtt-8">&#x00A0;</span><span
  9417. class="cmtt-8">&#x00A0;</span><span
  9418. class="cmtt-8">&#x00A0;</span><span
  9419. class="cmtt-8">&#x00A0;</span><span
  9420. class="cmtt-8">&#x00A0;</span><span
  9421. class="cmtt-8">&#x00A0;</span><span
  9422. class="cmtt-8">&#x00A0;</span><span
  9423. class="cmtt-8">&#x00A0;5)</span><span
  9424. class="cmtt-8">&#x00A0;if</span><span
  9425. class="cmtt-8">&#x00A0;(</span><span
  9426. class="cmtt-8">&#x00A0;[bitflag]</span><span
  9427. class="cmtt-8">&#x00A0;is</span><span
  9428. class="cmtt-8">&#x00A0;set</span><span
  9429. class="cmtt-8">&#x00A0;)</span><span
  9430. class="cmtt-8">&#x00A0;then</span><span
  9431. class="cmtt-8">&#x00A0;[high\_bits]</span><span
  9432. class="cmtt-8">&#x00A0;=</span><span
  9433. class="cmtt-8">&#x00A0;read</span><span
  9434. class="cmtt-8">&#x00A0;five</span><span
  9435. class="cmtt-8">&#x00A0;bits</span><span
  9436. class="cmtt-8">&#x00A0;as</span><span
  9437. class="cmtt-8">&#x00A0;unsigned</span><span
  9438. class="cmtt-8">&#x00A0;integer</span>
  9439. <br class="fancyvrb" /><a
  9440. id="x1-109024r7"></a><span
  9441. class="cmr-6">7</span><span
  9442. class="cmtt-8">&#x00A0;</span><span
  9443. class="cmtt-8">&#x00A0;</span><span
  9444. class="cmtt-8">&#x00A0;</span><span
  9445. class="cmtt-8">&#x00A0;</span><span
  9446. class="cmtt-8">&#x00A0;</span><span
  9447. class="cmtt-8">&#x00A0;</span><span
  9448. class="cmtt-8">&#x00A0;</span><span
  9449. class="cmtt-8">&#x00A0;</span><span
  9450. class="cmtt-8">&#x00A0;6)</span><span
  9451. class="cmtt-8">&#x00A0;vector</span><span
  9452. class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
  9453. class="cmtt-8">&#x00A0;element</span><span
  9454. class="cmtt-8">&#x00A0;[i]</span><span
  9455. class="cmtt-8">&#x00A0;=</span><span
  9456. class="cmtt-8">&#x00A0;[high\_bits]</span><span
  9457. class="cmtt-8">&#x00A0;*</span><span
  9458. class="cmtt-8">&#x00A0;8</span><span
  9459. class="cmtt-8">&#x00A0;+</span><span
  9460. class="cmtt-8">&#x00A0;[low\_bits]</span>
  9461. <br class="fancyvrb" /><a
  9462. id="x1-109026r8"></a><span
  9463. class="cmr-6">8</span><span
  9464. class="cmtt-8">&#x00A0;</span><span
  9465. class="cmtt-8">&#x00A0;</span><span
  9466. class="cmtt-8">&#x00A0;</span><span
  9467. class="cmtt-8">&#x00A0;</span><span
  9468. class="cmtt-8">&#x00A0;</span><span
  9469. class="cmtt-8">&#x00A0;</span><span
  9470. class="cmtt-8">&#x00A0;}</span>
  9471. <br class="fancyvrb" /><a
  9472. id="x1-109028r9"></a><span
  9473. class="cmr-6">9</span><span
  9474. class="cmtt-8">&#x00A0;</span><span
  9475. class="cmtt-8">&#x00A0;</span><span
  9476. class="cmtt-8">&#x00A0;</span><span
  9477. class="cmtt-8">&#x00A0;7)</span><span
  9478. class="cmtt-8">&#x00A0;done</span>
  9479. </div>
  9480. <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
  9481. bitmap. We loop over the possible codebook classifications and the maximum possible number of
  9482. encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
  9483. bits):
  9484. <!--l. 211--><p class="noindent" >
  9485. <div class="fancyvrb" id="fancyvrb37">
  9486. <a
  9487. id="x1-109030r1"></a><span
  9488. class="cmr-6">1</span><span
  9489. class="cmtt-8">&#x00A0;</span><span
  9490. class="cmtt-8">&#x00A0;</span><span
  9491. class="cmtt-8">&#x00A0;</span><span
  9492. class="cmtt-8">&#x00A0;1)</span><span
  9493. class="cmtt-8">&#x00A0;iterate</span><span
  9494. class="cmtt-8">&#x00A0;[i]</span><span
  9495. class="cmtt-8">&#x00A0;over</span><span
  9496. class="cmtt-8">&#x00A0;the</span><span
  9497. class="cmtt-8">&#x00A0;range</span><span
  9498. class="cmtt-8">&#x00A0;0</span><span
  9499. class="cmtt-8">&#x00A0;...</span><span
  9500. class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
  9501. class="cmtt-8">&#x00A0;{</span>
  9502. <br class="fancyvrb" /><a
  9503. id="x1-109032r2"></a><span
  9504. class="cmr-6">2</span><span
  9505. class="cmtt-8">&#x00A0;</span><span
  9506. class="cmtt-8">&#x00A0;</span>
  9507. <br class="fancyvrb" /><a
  9508. id="x1-109034r3"></a><span
  9509. class="cmr-6">3</span><span
  9510. class="cmtt-8">&#x00A0;</span><span
  9511. class="cmtt-8">&#x00A0;</span><span
  9512. class="cmtt-8">&#x00A0;</span><span
  9513. class="cmtt-8">&#x00A0;</span><span
  9514. class="cmtt-8">&#x00A0;</span><span
  9515. class="cmtt-8">&#x00A0;</span><span
  9516. class="cmtt-8">&#x00A0;</span><span
  9517. class="cmtt-8">&#x00A0;</span><span
  9518. class="cmtt-8">&#x00A0;2)</span><span
  9519. class="cmtt-8">&#x00A0;iterate</span><span
  9520. class="cmtt-8">&#x00A0;[j]</span><span
  9521. class="cmtt-8">&#x00A0;over</span><span
  9522. class="cmtt-8">&#x00A0;the</span><span
  9523. class="cmtt-8">&#x00A0;range</span><span
  9524. class="cmtt-8">&#x00A0;0</span><span
  9525. class="cmtt-8">&#x00A0;...</span><span
  9526. class="cmtt-8">&#x00A0;7</span><span
  9527. class="cmtt-8">&#x00A0;{</span>
  9528. <br class="fancyvrb" /><a
  9529. id="x1-109036r4"></a><span
  9530. class="cmr-6">4</span><span
  9531. class="cmtt-8">&#x00A0;</span><span
  9532. class="cmtt-8">&#x00A0;</span>
  9533. <br class="fancyvrb" /><a
  9534. id="x1-109038r5"></a><span
  9535. class="cmr-6">5</span><span
  9536. class="cmtt-8">&#x00A0;</span><span
  9537. class="cmtt-8">&#x00A0;</span><span
  9538. class="cmtt-8">&#x00A0;</span><span
  9539. class="cmtt-8">&#x00A0;</span><span
  9540. class="cmtt-8">&#x00A0;</span><span
  9541. class="cmtt-8">&#x00A0;</span><span
  9542. class="cmtt-8">&#x00A0;</span><span
  9543. class="cmtt-8">&#x00A0;</span><span
  9544. class="cmtt-8">&#x00A0;</span><span
  9545. class="cmtt-8">&#x00A0;</span><span
  9546. class="cmtt-8">&#x00A0;</span><span
  9547. class="cmtt-8">&#x00A0;</span><span
  9548. class="cmtt-8">&#x00A0;</span><span
  9549. class="cmtt-8">&#x00A0;3)</span><span
  9550. class="cmtt-8">&#x00A0;if</span><span
  9551. class="cmtt-8">&#x00A0;(</span><span
  9552. class="cmtt-8">&#x00A0;vector</span><span
  9553. class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
  9554. class="cmtt-8">&#x00A0;element</span><span
  9555. class="cmtt-8">&#x00A0;[i]</span><span
  9556. class="cmtt-8">&#x00A0;bit</span><span
  9557. class="cmtt-8">&#x00A0;[j]</span><span
  9558. class="cmtt-8">&#x00A0;is</span><span
  9559. class="cmtt-8">&#x00A0;set</span><span
  9560. class="cmtt-8">&#x00A0;)</span><span
  9561. class="cmtt-8">&#x00A0;{</span>
  9562. <br class="fancyvrb" /><a
  9563. id="x1-109040r6"></a><span
  9564. class="cmr-6">6</span><span
  9565. class="cmtt-8">&#x00A0;</span><span
  9566. class="cmtt-8">&#x00A0;</span>
  9567. <br class="fancyvrb" /><a
  9568. id="x1-109042r7"></a><span
  9569. class="cmr-6">7</span><span
  9570. class="cmtt-8">&#x00A0;</span><span
  9571. class="cmtt-8">&#x00A0;</span><span
  9572. class="cmtt-8">&#x00A0;</span><span
  9573. class="cmtt-8">&#x00A0;</span><span
  9574. class="cmtt-8">&#x00A0;</span><span
  9575. class="cmtt-8">&#x00A0;</span><span
  9576. class="cmtt-8">&#x00A0;</span><span
  9577. class="cmtt-8">&#x00A0;</span><span
  9578. class="cmtt-8">&#x00A0;</span><span
  9579. class="cmtt-8">&#x00A0;</span><span
  9580. class="cmtt-8">&#x00A0;</span><span
  9581. class="cmtt-8">&#x00A0;</span><span
  9582. class="cmtt-8">&#x00A0;</span><span
  9583. class="cmtt-8">&#x00A0;</span><span
  9584. class="cmtt-8">&#x00A0;</span><span
  9585. class="cmtt-8">&#x00A0;</span><span
  9586. class="cmtt-8">&#x00A0;</span><span
  9587. class="cmtt-8">&#x00A0;</span><span
  9588. class="cmtt-8">&#x00A0;4)</span><span
  9589. class="cmtt-8">&#x00A0;array</span><span
  9590. class="cmtt-8">&#x00A0;[residue\_books]</span><span
  9591. class="cmtt-8">&#x00A0;element</span><span
  9592. class="cmtt-8">&#x00A0;[i][j]</span><span
  9593. class="cmtt-8">&#x00A0;=</span><span
  9594. class="cmtt-8">&#x00A0;read</span><span
  9595. class="cmtt-8">&#x00A0;8</span><span
  9596. class="cmtt-8">&#x00A0;bits</span><span
  9597. class="cmtt-8">&#x00A0;as</span><span
  9598. class="cmtt-8">&#x00A0;unsigned</span><span
  9599. class="cmtt-8">&#x00A0;integer</span>
  9600. <br class="fancyvrb" /><a
  9601. id="x1-109044r8"></a><span
  9602. class="cmr-6">8</span><span
  9603. class="cmtt-8">&#x00A0;</span><span
  9604. class="cmtt-8">&#x00A0;</span>
  9605. <br class="fancyvrb" /><a
  9606. id="x1-109046r9"></a><span
  9607. class="cmr-6">9</span><span
  9608. class="cmtt-8">&#x00A0;</span><span
  9609. class="cmtt-8">&#x00A0;</span><span
  9610. class="cmtt-8">&#x00A0;</span><span
  9611. class="cmtt-8">&#x00A0;</span><span
  9612. class="cmtt-8">&#x00A0;</span><span
  9613. class="cmtt-8">&#x00A0;</span><span
  9614. class="cmtt-8">&#x00A0;</span><span
  9615. class="cmtt-8">&#x00A0;</span><span
  9616. class="cmtt-8">&#x00A0;</span><span
  9617. class="cmtt-8">&#x00A0;</span><span
  9618. class="cmtt-8">&#x00A0;</span><span
  9619. class="cmtt-8">&#x00A0;</span><span
  9620. class="cmtt-8">&#x00A0;</span><span
  9621. class="cmtt-8">&#x00A0;</span><span
  9622. class="cmtt-8">&#x00A0;</span><span
  9623. class="cmtt-8">&#x00A0;</span><span
  9624. class="cmtt-8">&#x00A0;}</span><span
  9625. class="cmtt-8">&#x00A0;else</span><span
  9626. class="cmtt-8">&#x00A0;{</span>
  9627. <br class="fancyvrb" /><a
  9628. id="x1-109048r10"></a><span
  9629. class="cmr-6">10</span><span
  9630. class="cmtt-8">&#x00A0;</span><span
  9631. class="cmtt-8">&#x00A0;</span>
  9632. <br class="fancyvrb" /><a
  9633. id="x1-109050r11"></a><span
  9634. class="cmr-6">11</span><span
  9635. class="cmtt-8">&#x00A0;</span><span
  9636. class="cmtt-8">&#x00A0;</span><span
  9637. class="cmtt-8">&#x00A0;</span><span
  9638. class="cmtt-8">&#x00A0;</span><span
  9639. class="cmtt-8">&#x00A0;</span><span
  9640. class="cmtt-8">&#x00A0;</span><span
  9641. class="cmtt-8">&#x00A0;</span><span
  9642. class="cmtt-8">&#x00A0;</span><span
  9643. class="cmtt-8">&#x00A0;</span><span
  9644. class="cmtt-8">&#x00A0;</span><span
  9645. class="cmtt-8">&#x00A0;</span><span
  9646. class="cmtt-8">&#x00A0;</span><span
  9647. class="cmtt-8">&#x00A0;</span><span
  9648. class="cmtt-8">&#x00A0;</span><span
  9649. class="cmtt-8">&#x00A0;</span><span
  9650. class="cmtt-8">&#x00A0;</span><span
  9651. class="cmtt-8">&#x00A0;</span><span
  9652. class="cmtt-8">&#x00A0;</span><span
  9653. class="cmtt-8">&#x00A0;5)</span><span
  9654. class="cmtt-8">&#x00A0;array</span><span
  9655. class="cmtt-8">&#x00A0;[residue\_books]</span><span
  9656. class="cmtt-8">&#x00A0;element</span><span
  9657. class="cmtt-8">&#x00A0;[i][j]</span><span
  9658. class="cmtt-8">&#x00A0;=</span><span
  9659. class="cmtt-8">&#x00A0;unused</span>
  9660. <br class="fancyvrb" /><a
  9661. id="x1-109052r12"></a><span
  9662. class="cmr-6">12</span><span
  9663. class="cmtt-8">&#x00A0;</span><span
  9664. class="cmtt-8">&#x00A0;</span>
  9665. <br class="fancyvrb" /><a
  9666. id="x1-109054r13"></a><span
  9667. class="cmr-6">13</span><span
  9668. class="cmtt-8">&#x00A0;</span><span
  9669. class="cmtt-8">&#x00A0;</span><span
  9670. class="cmtt-8">&#x00A0;</span><span
  9671. class="cmtt-8">&#x00A0;</span><span
  9672. class="cmtt-8">&#x00A0;</span><span
  9673. class="cmtt-8">&#x00A0;</span><span
  9674. class="cmtt-8">&#x00A0;</span><span
  9675. class="cmtt-8">&#x00A0;</span><span
  9676. class="cmtt-8">&#x00A0;</span><span
  9677. class="cmtt-8">&#x00A0;</span><span
  9678. class="cmtt-8">&#x00A0;</span><span
  9679. class="cmtt-8">&#x00A0;</span><span
  9680. class="cmtt-8">&#x00A0;</span><span
  9681. class="cmtt-8">&#x00A0;</span><span
  9682. class="cmtt-8">&#x00A0;</span><span
  9683. class="cmtt-8">&#x00A0;</span><span
  9684. class="cmtt-8">&#x00A0;}</span>
  9685. <br class="fancyvrb" /><a
  9686. id="x1-109056r14"></a><span
  9687. class="cmr-6">14</span><span
  9688. class="cmtt-8">&#x00A0;</span><span
  9689. class="cmtt-8">&#x00A0;</span><span
  9690. class="cmtt-8">&#x00A0;</span><span
  9691. class="cmtt-8">&#x00A0;</span><span
  9692. class="cmtt-8">&#x00A0;</span><span
  9693. class="cmtt-8">&#x00A0;</span><span
  9694. class="cmtt-8">&#x00A0;</span><span
  9695. class="cmtt-8">&#x00A0;</span><span
  9696. class="cmtt-8">&#x00A0;</span><span
  9697. class="cmtt-8">&#x00A0;</span><span
  9698. class="cmtt-8">&#x00A0;</span><span
  9699. class="cmtt-8">&#x00A0;}</span>
  9700. <br class="fancyvrb" /><a
  9701. id="x1-109058r15"></a><span
  9702. class="cmr-6">15</span><span
  9703. class="cmtt-8">&#x00A0;</span><span
  9704. class="cmtt-8">&#x00A0;</span><span
  9705. class="cmtt-8">&#x00A0;</span><span
  9706. class="cmtt-8">&#x00A0;</span><span
  9707. class="cmtt-8">&#x00A0;</span><span
  9708. class="cmtt-8">&#x00A0;</span><span
  9709. class="cmtt-8">&#x00A0;</span><span
  9710. class="cmtt-8">&#x00A0;}</span>
  9711. <br class="fancyvrb" /><a
  9712. id="x1-109060r16"></a><span
  9713. class="cmr-6">16</span><span
  9714. class="cmtt-8">&#x00A0;</span><span
  9715. class="cmtt-8">&#x00A0;</span>
  9716. <br class="fancyvrb" /><a
  9717. id="x1-109062r17"></a><span
  9718. class="cmr-6">17</span><span
  9719. class="cmtt-8">&#x00A0;</span><span
  9720. class="cmtt-8">&#x00A0;</span><span
  9721. class="cmtt-8">&#x00A0;</span><span
  9722. class="cmtt-8">&#x00A0;6)</span><span
  9723. class="cmtt-8">&#x00A0;done</span>
  9724. </div>
  9725. <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
  9726. In addition, any codebook number greater than the maximum numbered codebook
  9727. set up in this stream also renders the stream undecodable. All codebooks in array
  9728. [residue_books] are required to have a value mapping. The presence of codebook in array
  9729. [residue_books] without a value mapping (maptype equals zero) renders the stream
  9730. undecodable.
  9731. <!--l. 241--><p class="noindent" >
  9732. <h5 class="subsubsectionHead"><span class="titlemark">8.6.2. </span> <a
  9733. id="x1-1100008.6.2"></a>packet decode</h5>
  9734. <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
  9735. decode can be built out of the format 1 decode process. Thus we describe first the decode
  9736. infrastructure identical to all three formats.
  9737. <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
  9738. vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
  9739. decoded. If the passed in number of vectors is 3 and vector number 1 is marked &#8217;do not decode&#8217;,
  9740. decode skips vector 1 during the decode loop. However, even &#8217;do not decode&#8217; vectors are
  9741. allocated and zeroed.
  9742. <!--l. 255--><p class="noindent" >Depending on the values of <span
  9743. class="cmtt-12">[residue_begin] </span>and <span
  9744. class="cmtt-12">[residue_end]</span>, it is obvious that the
  9745. encoded portion of a residue vector may be the entire possible residue vector or some other strict
  9746. subset of the actual residue vector size with zero padding at either uncoded end. However, it is
  9747. also possible to set <span
  9748. class="cmtt-12">[residue_begin] </span>and <span
  9749. class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
  9750. beyond the maximum vector size. Before beginning residue decode, limit <span
  9751. class="cmtt-12">[residue_begin]</span>
  9752. and <span
  9753. class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
  9754. the number of vectors being encoded, <span
  9755. class="cmtt-12">[ch] </span>is provided by the higher level decoding
  9756. process.
  9757. <!--l. 269--><p class="noindent" >
  9758. <div class="fancyvrb" id="fancyvrb38">
  9759. <a
  9760. id="x1-110002r1"></a><span
  9761. class="cmr-6">1</span><span
  9762. class="cmtt-8">&#x00A0;</span><span
  9763. class="cmtt-8">&#x00A0;</span><span
  9764. class="cmtt-8">&#x00A0;</span><span
  9765. class="cmtt-8">&#x00A0;1)</span><span
  9766. class="cmtt-8">&#x00A0;[actual\_size]</span><span
  9767. class="cmtt-8">&#x00A0;=</span><span
  9768. class="cmtt-8">&#x00A0;current</span><span
  9769. class="cmtt-8">&#x00A0;blocksize/2;</span>
  9770. <br class="fancyvrb" /><a
  9771. id="x1-110004r2"></a><span
  9772. class="cmr-6">2</span><span
  9773. class="cmtt-8">&#x00A0;</span><span
  9774. class="cmtt-8">&#x00A0;</span><span
  9775. class="cmtt-8">&#x00A0;</span><span
  9776. class="cmtt-8">&#x00A0;2)</span><span
  9777. class="cmtt-8">&#x00A0;if</span><span
  9778. class="cmtt-8">&#x00A0;residue</span><span
  9779. class="cmtt-8">&#x00A0;encoding</span><span
  9780. class="cmtt-8">&#x00A0;is</span><span
  9781. class="cmtt-8">&#x00A0;format</span><span
  9782. class="cmtt-8">&#x00A0;2</span>
  9783. <br class="fancyvrb" /><a
  9784. id="x1-110006r3"></a><span
  9785. class="cmr-6">3</span><span
  9786. class="cmtt-8">&#x00A0;</span><span
  9787. class="cmtt-8">&#x00A0;</span><span
  9788. class="cmtt-8">&#x00A0;</span><span
  9789. class="cmtt-8">&#x00A0;</span><span
  9790. class="cmtt-8">&#x00A0;</span><span
  9791. class="cmtt-8">&#x00A0;</span><span
  9792. class="cmtt-8">&#x00A0;</span><span
  9793. class="cmtt-8">&#x00A0;</span><span
  9794. class="cmtt-8">&#x00A0;3)</span><span
  9795. class="cmtt-8">&#x00A0;[actual\_size]</span><span
  9796. class="cmtt-8">&#x00A0;=</span><span
  9797. class="cmtt-8">&#x00A0;[actual\_size]</span><span
  9798. class="cmtt-8">&#x00A0;*</span><span
  9799. class="cmtt-8">&#x00A0;[ch];</span>
  9800. <br class="fancyvrb" /><a
  9801. id="x1-110008r4"></a><span
  9802. class="cmr-6">4</span><span
  9803. class="cmtt-8">&#x00A0;</span><span
  9804. class="cmtt-8">&#x00A0;</span><span
  9805. class="cmtt-8">&#x00A0;</span><span
  9806. class="cmtt-8">&#x00A0;4)</span><span
  9807. class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span><span
  9808. class="cmtt-8">&#x00A0;=</span><span
  9809. class="cmtt-8">&#x00A0;maximum</span><span
  9810. class="cmtt-8">&#x00A0;of</span><span
  9811. class="cmtt-8">&#x00A0;([residue\_begin],[actual\_size]);</span>
  9812. <br class="fancyvrb" /><a
  9813. id="x1-110010r5"></a><span
  9814. class="cmr-6">5</span><span
  9815. class="cmtt-8">&#x00A0;</span><span
  9816. class="cmtt-8">&#x00A0;</span><span
  9817. class="cmtt-8">&#x00A0;</span><span
  9818. class="cmtt-8">&#x00A0;5)</span><span
  9819. class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
  9820. class="cmtt-8">&#x00A0;=</span><span
  9821. class="cmtt-8">&#x00A0;maximum</span><span
  9822. class="cmtt-8">&#x00A0;of</span><span
  9823. class="cmtt-8">&#x00A0;([residue\_end],[actual\_size]);</span>
  9824. </div>
  9825. <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
  9826. <!--l. 280--><p class="noindent" >
  9827. <div class="fancyvrb" id="fancyvrb39">
  9828. <a
  9829. id="x1-110012r1"></a><span
  9830. class="cmr-6">1</span><span
  9831. class="cmtt-8">&#x00A0;</span><span
  9832. class="cmtt-8">&#x00A0;</span><span
  9833. class="cmtt-8">&#x00A0;</span><span
  9834. class="cmtt-8">&#x00A0;1)</span><span
  9835. class="cmtt-8">&#x00A0;[classwords\_per\_codeword]</span><span
  9836. class="cmtt-8">&#x00A0;=</span><span
  9837. class="cmtt-8">&#x00A0;[codebook\_dimensions]</span><span
  9838. class="cmtt-8">&#x00A0;value</span><span
  9839. class="cmtt-8">&#x00A0;of</span><span
  9840. class="cmtt-8">&#x00A0;codebook</span><span
  9841. class="cmtt-8">&#x00A0;[residue\_classbook]</span>
  9842. <br class="fancyvrb" /><a
  9843. id="x1-110014r2"></a><span
  9844. class="cmr-6">2</span><span
  9845. class="cmtt-8">&#x00A0;</span><span
  9846. class="cmtt-8">&#x00A0;</span><span
  9847. class="cmtt-8">&#x00A0;</span><span
  9848. class="cmtt-8">&#x00A0;2)</span><span
  9849. class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
  9850. class="cmtt-8">&#x00A0;=</span><span
  9851. class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
  9852. class="cmtt-8">&#x00A0;-</span><span
  9853. class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span>
  9854. <br class="fancyvrb" /><a
  9855. id="x1-110016r3"></a><span
  9856. class="cmr-6">3</span><span
  9857. class="cmtt-8">&#x00A0;</span><span
  9858. class="cmtt-8">&#x00A0;</span><span
  9859. class="cmtt-8">&#x00A0;</span><span
  9860. class="cmtt-8">&#x00A0;3)</span><span
  9861. class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
  9862. class="cmtt-8">&#x00A0;=</span><span
  9863. class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
  9864. class="cmtt-8">&#x00A0;/</span><span
  9865. class="cmtt-8">&#x00A0;[residue\_partition\_size]</span>
  9866. </div>
  9867. <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
  9868. <div class="fancyvrb" id="fancyvrb40">
  9869. <a
  9870. id="x1-110018r1"></a><span
  9871. class="cmr-6">1</span><span
  9872. class="cmtt-8">&#x00A0;</span><span
  9873. class="cmtt-8">&#x00A0;</span><span
  9874. class="cmtt-8">&#x00A0;</span><span
  9875. class="cmtt-8">&#x00A0;1)</span><span
  9876. class="cmtt-8">&#x00A0;allocate</span><span
  9877. class="cmtt-8">&#x00A0;and</span><span
  9878. class="cmtt-8">&#x00A0;zero</span><span
  9879. class="cmtt-8">&#x00A0;all</span><span
  9880. class="cmtt-8">&#x00A0;vectors</span><span
  9881. class="cmtt-8">&#x00A0;that</span><span
  9882. class="cmtt-8">&#x00A0;will</span><span
  9883. class="cmtt-8">&#x00A0;be</span><span
  9884. class="cmtt-8">&#x00A0;returned.</span>
  9885. <br class="fancyvrb" /><a
  9886. id="x1-110020r2"></a><span
  9887. class="cmr-6">2</span><span
  9888. class="cmtt-8">&#x00A0;</span><span
  9889. class="cmtt-8">&#x00A0;</span><span
  9890. class="cmtt-8">&#x00A0;</span><span
  9891. class="cmtt-8">&#x00A0;2)</span><span
  9892. class="cmtt-8">&#x00A0;if</span><span
  9893. class="cmtt-8">&#x00A0;([n\_to\_read]</span><span
  9894. class="cmtt-8">&#x00A0;is</span><span
  9895. class="cmtt-8">&#x00A0;zero),</span><span
  9896. class="cmtt-8">&#x00A0;stop;</span><span
  9897. class="cmtt-8">&#x00A0;there</span><span
  9898. class="cmtt-8">&#x00A0;is</span><span
  9899. class="cmtt-8">&#x00A0;no</span><span
  9900. class="cmtt-8">&#x00A0;residue</span><span
  9901. class="cmtt-8">&#x00A0;to</span><span
  9902. class="cmtt-8">&#x00A0;decode.</span>
  9903. <br class="fancyvrb" /><a
  9904. id="x1-110022r3"></a><span
  9905. class="cmr-6">3</span><span
  9906. class="cmtt-8">&#x00A0;</span><span
  9907. class="cmtt-8">&#x00A0;</span><span
  9908. class="cmtt-8">&#x00A0;</span><span
  9909. class="cmtt-8">&#x00A0;3)</span><span
  9910. class="cmtt-8">&#x00A0;iterate</span><span
  9911. class="cmtt-8">&#x00A0;[pass]</span><span
  9912. class="cmtt-8">&#x00A0;over</span><span
  9913. class="cmtt-8">&#x00A0;the</span><span
  9914. class="cmtt-8">&#x00A0;range</span><span
  9915. class="cmtt-8">&#x00A0;0</span><span
  9916. class="cmtt-8">&#x00A0;...</span><span
  9917. class="cmtt-8">&#x00A0;7</span><span
  9918. class="cmtt-8">&#x00A0;{</span>
  9919. <br class="fancyvrb" /><a
  9920. id="x1-110024r4"></a><span
  9921. class="cmr-6">4</span><span
  9922. class="cmtt-8">&#x00A0;</span><span
  9923. class="cmtt-8">&#x00A0;</span>
  9924. <br class="fancyvrb" /><a
  9925. id="x1-110026r5"></a><span
  9926. class="cmr-6">5</span><span
  9927. class="cmtt-8">&#x00A0;</span><span
  9928. class="cmtt-8">&#x00A0;</span><span
  9929. class="cmtt-8">&#x00A0;</span><span
  9930. class="cmtt-8">&#x00A0;</span><span
  9931. class="cmtt-8">&#x00A0;</span><span
  9932. class="cmtt-8">&#x00A0;</span><span
  9933. class="cmtt-8">&#x00A0;</span><span
  9934. class="cmtt-8">&#x00A0;</span><span
  9935. class="cmtt-8">&#x00A0;4)</span><span
  9936. class="cmtt-8">&#x00A0;[partition\_count]</span><span
  9937. class="cmtt-8">&#x00A0;=</span><span
  9938. class="cmtt-8">&#x00A0;0</span>
  9939. <br class="fancyvrb" /><a
  9940. id="x1-110028r6"></a><span
  9941. class="cmr-6">6</span><span
  9942. class="cmtt-8">&#x00A0;</span><span
  9943. class="cmtt-8">&#x00A0;</span>
  9944. <br class="fancyvrb" /><a
  9945. id="x1-110030r7"></a><span
  9946. class="cmr-6">7</span><span
  9947. class="cmtt-8">&#x00A0;</span><span
  9948. class="cmtt-8">&#x00A0;</span><span
  9949. class="cmtt-8">&#x00A0;</span><span
  9950. class="cmtt-8">&#x00A0;</span><span
  9951. class="cmtt-8">&#x00A0;</span><span
  9952. class="cmtt-8">&#x00A0;</span><span
  9953. class="cmtt-8">&#x00A0;</span><span
  9954. class="cmtt-8">&#x00A0;</span><span
  9955. class="cmtt-8">&#x00A0;5)</span><span
  9956. class="cmtt-8">&#x00A0;while</span><span
  9957. class="cmtt-8">&#x00A0;[partition\_count]</span><span
  9958. class="cmtt-8">&#x00A0;is</span><span
  9959. class="cmtt-8">&#x00A0;less</span><span
  9960. class="cmtt-8">&#x00A0;than</span><span
  9961. class="cmtt-8">&#x00A0;[partitions\_to\_read]</span>
  9962. <br class="fancyvrb" /><a
  9963. id="x1-110032r8"></a><span
  9964. class="cmr-6">8</span><span
  9965. class="cmtt-8">&#x00A0;</span><span
  9966. class="cmtt-8">&#x00A0;</span>
  9967. <br class="fancyvrb" /><a
  9968. id="x1-110034r9"></a><span
  9969. class="cmr-6">9</span><span
  9970. class="cmtt-8">&#x00A0;</span><span
  9971. class="cmtt-8">&#x00A0;</span><span
  9972. class="cmtt-8">&#x00A0;</span><span
  9973. class="cmtt-8">&#x00A0;</span><span
  9974. class="cmtt-8">&#x00A0;</span><span
  9975. class="cmtt-8">&#x00A0;</span><span
  9976. class="cmtt-8">&#x00A0;</span><span
  9977. class="cmtt-8">&#x00A0;</span><span
  9978. class="cmtt-8">&#x00A0;</span><span
  9979. class="cmtt-8">&#x00A0;</span><span
  9980. class="cmtt-8">&#x00A0;</span><span
  9981. class="cmtt-8">&#x00A0;</span><span
  9982. class="cmtt-8">&#x00A0;</span><span
  9983. class="cmtt-8">&#x00A0;6)</span><span
  9984. class="cmtt-8">&#x00A0;if</span><span
  9985. class="cmtt-8">&#x00A0;([pass]</span><span
  9986. class="cmtt-8">&#x00A0;is</span><span
  9987. class="cmtt-8">&#x00A0;zero)</span><span
  9988. class="cmtt-8">&#x00A0;{</span>
  9989. <br class="fancyvrb" /><a
  9990. id="x1-110036r10"></a><span
  9991. class="cmr-6">10</span><span
  9992. class="cmtt-8">&#x00A0;</span><span
  9993. class="cmtt-8">&#x00A0;</span>
  9994. <br class="fancyvrb" /><a
  9995. id="x1-110038r11"></a><span
  9996. class="cmr-6">11</span><span
  9997. class="cmtt-8">&#x00A0;</span><span
  9998. class="cmtt-8">&#x00A0;</span><span
  9999. class="cmtt-8">&#x00A0;</span><span
  10000. class="cmtt-8">&#x00A0;</span><span
  10001. class="cmtt-8">&#x00A0;</span><span
  10002. class="cmtt-8">&#x00A0;</span><span
  10003. class="cmtt-8">&#x00A0;</span><span
  10004. class="cmtt-8">&#x00A0;</span><span
  10005. class="cmtt-8">&#x00A0;</span><span
  10006. class="cmtt-8">&#x00A0;</span><span
  10007. class="cmtt-8">&#x00A0;</span><span
  10008. class="cmtt-8">&#x00A0;</span><span
  10009. class="cmtt-8">&#x00A0;</span><span
  10010. class="cmtt-8">&#x00A0;</span><span
  10011. class="cmtt-8">&#x00A0;</span><span
  10012. class="cmtt-8">&#x00A0;</span><span
  10013. class="cmtt-8">&#x00A0;</span><span
  10014. class="cmtt-8">&#x00A0;</span><span
  10015. class="cmtt-8">&#x00A0;7)</span><span
  10016. class="cmtt-8">&#x00A0;iterate</span><span
  10017. class="cmtt-8">&#x00A0;[j]</span><span
  10018. class="cmtt-8">&#x00A0;over</span><span
  10019. class="cmtt-8">&#x00A0;the</span><span
  10020. class="cmtt-8">&#x00A0;range</span><span
  10021. class="cmtt-8">&#x00A0;0</span><span
  10022. class="cmtt-8">&#x00A0;..</span><span
  10023. class="cmtt-8">&#x00A0;[ch]-1</span><span
  10024. class="cmtt-8">&#x00A0;{</span>
  10025. <br class="fancyvrb" /><a
  10026. id="x1-110040r12"></a><span
  10027. class="cmr-6">12</span><span
  10028. class="cmtt-8">&#x00A0;</span><span
  10029. class="cmtt-8">&#x00A0;</span>
  10030. <br class="fancyvrb" /><a
  10031. id="x1-110042r13"></a><span
  10032. class="cmr-6">13</span><span
  10033. class="cmtt-8">&#x00A0;</span><span
  10034. class="cmtt-8">&#x00A0;</span><span
  10035. class="cmtt-8">&#x00A0;</span><span
  10036. class="cmtt-8">&#x00A0;</span><span
  10037. class="cmtt-8">&#x00A0;</span><span
  10038. class="cmtt-8">&#x00A0;</span><span
  10039. class="cmtt-8">&#x00A0;</span><span
  10040. class="cmtt-8">&#x00A0;</span><span
  10041. class="cmtt-8">&#x00A0;</span><span
  10042. class="cmtt-8">&#x00A0;</span><span
  10043. class="cmtt-8">&#x00A0;</span><span
  10044. class="cmtt-8">&#x00A0;</span><span
  10045. class="cmtt-8">&#x00A0;</span><span
  10046. class="cmtt-8">&#x00A0;</span><span
  10047. class="cmtt-8">&#x00A0;</span><span
  10048. class="cmtt-8">&#x00A0;</span><span
  10049. class="cmtt-8">&#x00A0;</span><span
  10050. class="cmtt-8">&#x00A0;</span><span
  10051. class="cmtt-8">&#x00A0;</span><span
  10052. class="cmtt-8">&#x00A0;</span><span
  10053. class="cmtt-8">&#x00A0;</span><span
  10054. class="cmtt-8">&#x00A0;</span><span
  10055. class="cmtt-8">&#x00A0;</span><span
  10056. class="cmtt-8">&#x00A0;8)</span><span
  10057. class="cmtt-8">&#x00A0;if</span><span
  10058. class="cmtt-8">&#x00A0;vector</span><span
  10059. class="cmtt-8">&#x00A0;[j]</span><span
  10060. class="cmtt-8">&#x00A0;is</span><span
  10061. class="cmtt-8">&#x00A0;not</span><span
  10062. class="cmtt-8">&#x00A0;marked</span><span
  10063. class="cmtt-8">&#x00A0;&#8217;do</span><span
  10064. class="cmtt-8">&#x00A0;not</span><span
  10065. class="cmtt-8">&#x00A0;decode&#8217;</span><span
  10066. class="cmtt-8">&#x00A0;{</span>
  10067. <br class="fancyvrb" /><a
  10068. id="x1-110044r14"></a><span
  10069. class="cmr-6">14</span><span
  10070. class="cmtt-8">&#x00A0;</span><span
  10071. class="cmtt-8">&#x00A0;</span>
  10072. <br class="fancyvrb" /><a
  10073. id="x1-110046r15"></a><span
  10074. class="cmr-6">15</span><span
  10075. class="cmtt-8">&#x00A0;</span><span
  10076. class="cmtt-8">&#x00A0;</span><span
  10077. class="cmtt-8">&#x00A0;</span><span
  10078. class="cmtt-8">&#x00A0;</span><span
  10079. class="cmtt-8">&#x00A0;</span><span
  10080. class="cmtt-8">&#x00A0;</span><span
  10081. class="cmtt-8">&#x00A0;</span><span
  10082. class="cmtt-8">&#x00A0;</span><span
  10083. class="cmtt-8">&#x00A0;</span><span
  10084. class="cmtt-8">&#x00A0;</span><span
  10085. class="cmtt-8">&#x00A0;</span><span
  10086. class="cmtt-8">&#x00A0;</span><span
  10087. class="cmtt-8">&#x00A0;</span><span
  10088. class="cmtt-8">&#x00A0;</span><span
  10089. class="cmtt-8">&#x00A0;</span><span
  10090. class="cmtt-8">&#x00A0;</span><span
  10091. class="cmtt-8">&#x00A0;</span><span
  10092. class="cmtt-8">&#x00A0;</span><span
  10093. class="cmtt-8">&#x00A0;</span><span
  10094. class="cmtt-8">&#x00A0;</span><span
  10095. class="cmtt-8">&#x00A0;</span><span
  10096. class="cmtt-8">&#x00A0;</span><span
  10097. class="cmtt-8">&#x00A0;</span><span
  10098. class="cmtt-8">&#x00A0;</span><span
  10099. class="cmtt-8">&#x00A0;</span><span
  10100. class="cmtt-8">&#x00A0;</span><span
  10101. class="cmtt-8">&#x00A0;</span><span
  10102. class="cmtt-8">&#x00A0;</span><span
  10103. class="cmtt-8">&#x00A0;9)</span><span
  10104. class="cmtt-8">&#x00A0;[temp]</span><span
  10105. class="cmtt-8">&#x00A0;=</span><span
  10106. class="cmtt-8">&#x00A0;read</span><span
  10107. class="cmtt-8">&#x00A0;from</span><span
  10108. class="cmtt-8">&#x00A0;packet</span><span
  10109. class="cmtt-8">&#x00A0;using</span><span
  10110. class="cmtt-8">&#x00A0;codebook</span><span
  10111. class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
  10112. class="cmtt-8">&#x00A0;in</span><span
  10113. class="cmtt-8">&#x00A0;scalar</span><span
  10114. class="cmtt-8">&#x00A0;context</span>
  10115. <br class="fancyvrb" /><a
  10116. id="x1-110048r16"></a><span
  10117. class="cmr-6">16</span><span
  10118. class="cmtt-8">&#x00A0;</span><span
  10119. class="cmtt-8">&#x00A0;</span><span
  10120. class="cmtt-8">&#x00A0;</span><span
  10121. class="cmtt-8">&#x00A0;</span><span
  10122. class="cmtt-8">&#x00A0;</span><span
  10123. class="cmtt-8">&#x00A0;</span><span
  10124. class="cmtt-8">&#x00A0;</span><span
  10125. class="cmtt-8">&#x00A0;</span><span
  10126. class="cmtt-8">&#x00A0;</span><span
  10127. class="cmtt-8">&#x00A0;</span><span
  10128. class="cmtt-8">&#x00A0;</span><span
  10129. class="cmtt-8">&#x00A0;</span><span
  10130. class="cmtt-8">&#x00A0;</span><span
  10131. class="cmtt-8">&#x00A0;</span><span
  10132. class="cmtt-8">&#x00A0;</span><span
  10133. class="cmtt-8">&#x00A0;</span><span
  10134. class="cmtt-8">&#x00A0;</span><span
  10135. class="cmtt-8">&#x00A0;</span><span
  10136. class="cmtt-8">&#x00A0;</span><span
  10137. class="cmtt-8">&#x00A0;</span><span
  10138. class="cmtt-8">&#x00A0;</span><span
  10139. class="cmtt-8">&#x00A0;</span><span
  10140. class="cmtt-8">&#x00A0;</span><span
  10141. class="cmtt-8">&#x00A0;</span><span
  10142. class="cmtt-8">&#x00A0;</span><span
  10143. class="cmtt-8">&#x00A0;</span><span
  10144. class="cmtt-8">&#x00A0;</span><span
  10145. class="cmtt-8">&#x00A0;10)</span><span
  10146. class="cmtt-8">&#x00A0;iterate</span><span
  10147. class="cmtt-8">&#x00A0;[i]</span><span
  10148. class="cmtt-8">&#x00A0;descending</span><span
  10149. class="cmtt-8">&#x00A0;over</span><span
  10150. class="cmtt-8">&#x00A0;the</span><span
  10151. class="cmtt-8">&#x00A0;range</span><span
  10152. class="cmtt-8">&#x00A0;[classwords\_per\_codeword]-1</span><span
  10153. class="cmtt-8">&#x00A0;...</span><span
  10154. class="cmtt-8">&#x00A0;0</span><span
  10155. class="cmtt-8">&#x00A0;{</span>
  10156. <br class="fancyvrb" /><a
  10157. id="x1-110050r17"></a><span
  10158. class="cmr-6">17</span><span
  10159. class="cmtt-8">&#x00A0;</span><span
  10160. class="cmtt-8">&#x00A0;</span>
  10161. <br class="fancyvrb" /><a
  10162. id="x1-110052r18"></a><span
  10163. class="cmr-6">18</span><span
  10164. class="cmtt-8">&#x00A0;</span><span
  10165. class="cmtt-8">&#x00A0;</span><span
  10166. class="cmtt-8">&#x00A0;</span><span
  10167. class="cmtt-8">&#x00A0;</span><span
  10168. class="cmtt-8">&#x00A0;</span><span
  10169. class="cmtt-8">&#x00A0;</span><span
  10170. class="cmtt-8">&#x00A0;</span><span
  10171. class="cmtt-8">&#x00A0;</span><span
  10172. class="cmtt-8">&#x00A0;</span><span
  10173. class="cmtt-8">&#x00A0;</span><span
  10174. class="cmtt-8">&#x00A0;</span><span
  10175. class="cmtt-8">&#x00A0;</span><span
  10176. class="cmtt-8">&#x00A0;</span><span
  10177. class="cmtt-8">&#x00A0;</span><span
  10178. class="cmtt-8">&#x00A0;</span><span
  10179. class="cmtt-8">&#x00A0;</span><span
  10180. class="cmtt-8">&#x00A0;</span><span
  10181. class="cmtt-8">&#x00A0;</span><span
  10182. class="cmtt-8">&#x00A0;</span><span
  10183. class="cmtt-8">&#x00A0;</span><span
  10184. class="cmtt-8">&#x00A0;</span><span
  10185. class="cmtt-8">&#x00A0;</span><span
  10186. class="cmtt-8">&#x00A0;</span><span
  10187. class="cmtt-8">&#x00A0;</span><span
  10188. class="cmtt-8">&#x00A0;</span><span
  10189. class="cmtt-8">&#x00A0;</span><span
  10190. class="cmtt-8">&#x00A0;</span><span
  10191. class="cmtt-8">&#x00A0;</span><span
  10192. class="cmtt-8">&#x00A0;</span><span
  10193. class="cmtt-8">&#x00A0;</span><span
  10194. class="cmtt-8">&#x00A0;</span><span
  10195. class="cmtt-8">&#x00A0;</span><span
  10196. class="cmtt-8">&#x00A0;11)</span><span
  10197. class="cmtt-8">&#x00A0;array</span><span
  10198. class="cmtt-8">&#x00A0;[classifications]</span><span
  10199. class="cmtt-8">&#x00A0;element</span><span
  10200. class="cmtt-8">&#x00A0;[j],([i]+[partition\_count])</span><span
  10201. class="cmtt-8">&#x00A0;=</span>
  10202. <br class="fancyvrb" /><a
  10203. id="x1-110054r19"></a><span
  10204. class="cmr-6">19</span><span
  10205. class="cmtt-8">&#x00A0;</span><span
  10206. class="cmtt-8">&#x00A0;</span><span
  10207. class="cmtt-8">&#x00A0;</span><span
  10208. class="cmtt-8">&#x00A0;</span><span
  10209. class="cmtt-8">&#x00A0;</span><span
  10210. class="cmtt-8">&#x00A0;</span><span
  10211. class="cmtt-8">&#x00A0;</span><span
  10212. class="cmtt-8">&#x00A0;</span><span
  10213. class="cmtt-8">&#x00A0;</span><span
  10214. class="cmtt-8">&#x00A0;</span><span
  10215. class="cmtt-8">&#x00A0;</span><span
  10216. class="cmtt-8">&#x00A0;</span><span
  10217. class="cmtt-8">&#x00A0;</span><span
  10218. class="cmtt-8">&#x00A0;</span><span
  10219. class="cmtt-8">&#x00A0;</span><span
  10220. class="cmtt-8">&#x00A0;</span><span
  10221. class="cmtt-8">&#x00A0;</span><span
  10222. class="cmtt-8">&#x00A0;</span><span
  10223. class="cmtt-8">&#x00A0;</span><span
  10224. class="cmtt-8">&#x00A0;</span><span
  10225. class="cmtt-8">&#x00A0;</span><span
  10226. class="cmtt-8">&#x00A0;</span><span
  10227. class="cmtt-8">&#x00A0;</span><span
  10228. class="cmtt-8">&#x00A0;</span><span
  10229. class="cmtt-8">&#x00A0;</span><span
  10230. class="cmtt-8">&#x00A0;</span><span
  10231. class="cmtt-8">&#x00A0;</span><span
  10232. class="cmtt-8">&#x00A0;</span><span
  10233. class="cmtt-8">&#x00A0;</span><span
  10234. class="cmtt-8">&#x00A0;</span><span
  10235. class="cmtt-8">&#x00A0;</span><span
  10236. class="cmtt-8">&#x00A0;</span><span
  10237. class="cmtt-8">&#x00A0;</span><span
  10238. class="cmtt-8">&#x00A0;</span><span
  10239. class="cmtt-8">&#x00A0;</span><span
  10240. class="cmtt-8">&#x00A0;</span><span
  10241. class="cmtt-8">&#x00A0;[temp]</span><span
  10242. class="cmtt-8">&#x00A0;integer</span><span
  10243. class="cmtt-8">&#x00A0;modulo</span><span
  10244. class="cmtt-8">&#x00A0;[residue\_classifications]</span>
  10245. <br class="fancyvrb" /><a
  10246. id="x1-110056r20"></a><span
  10247. class="cmr-6">20</span><span
  10248. class="cmtt-8">&#x00A0;</span><span
  10249. class="cmtt-8">&#x00A0;</span><span
  10250. class="cmtt-8">&#x00A0;</span><span
  10251. class="cmtt-8">&#x00A0;</span><span
  10252. class="cmtt-8">&#x00A0;</span><span
  10253. class="cmtt-8">&#x00A0;</span><span
  10254. class="cmtt-8">&#x00A0;</span><span
  10255. class="cmtt-8">&#x00A0;</span><span
  10256. class="cmtt-8">&#x00A0;</span><span
  10257. class="cmtt-8">&#x00A0;</span><span
  10258. class="cmtt-8">&#x00A0;</span><span
  10259. class="cmtt-8">&#x00A0;</span><span
  10260. class="cmtt-8">&#x00A0;</span><span
  10261. class="cmtt-8">&#x00A0;</span><span
  10262. class="cmtt-8">&#x00A0;</span><span
  10263. class="cmtt-8">&#x00A0;</span><span
  10264. class="cmtt-8">&#x00A0;</span><span
  10265. class="cmtt-8">&#x00A0;</span><span
  10266. class="cmtt-8">&#x00A0;</span><span
  10267. class="cmtt-8">&#x00A0;</span><span
  10268. class="cmtt-8">&#x00A0;</span><span
  10269. class="cmtt-8">&#x00A0;</span><span
  10270. class="cmtt-8">&#x00A0;</span><span
  10271. class="cmtt-8">&#x00A0;</span><span
  10272. class="cmtt-8">&#x00A0;</span><span
  10273. class="cmtt-8">&#x00A0;</span><span
  10274. class="cmtt-8">&#x00A0;</span><span
  10275. class="cmtt-8">&#x00A0;</span><span
  10276. class="cmtt-8">&#x00A0;</span><span
  10277. class="cmtt-8">&#x00A0;</span><span
  10278. class="cmtt-8">&#x00A0;</span><span
  10279. class="cmtt-8">&#x00A0;</span><span
  10280. class="cmtt-8">&#x00A0;12)</span><span
  10281. class="cmtt-8">&#x00A0;[temp]</span><span
  10282. class="cmtt-8">&#x00A0;=</span><span
  10283. class="cmtt-8">&#x00A0;[temp]</span><span
  10284. class="cmtt-8">&#x00A0;/</span><span
  10285. class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
  10286. class="cmtt-8">&#x00A0;using</span><span
  10287. class="cmtt-8">&#x00A0;integer</span><span
  10288. class="cmtt-8">&#x00A0;division</span>
  10289. <br class="fancyvrb" /><a
  10290. id="x1-110058r21"></a><span
  10291. class="cmr-6">21</span><span
  10292. class="cmtt-8">&#x00A0;</span><span
  10293. class="cmtt-8">&#x00A0;</span>
  10294. <br class="fancyvrb" /><a
  10295. id="x1-110060r22"></a><span
  10296. class="cmr-6">22</span><span
  10297. class="cmtt-8">&#x00A0;</span><span
  10298. class="cmtt-8">&#x00A0;</span><span
  10299. class="cmtt-8">&#x00A0;</span><span
  10300. class="cmtt-8">&#x00A0;</span><span
  10301. class="cmtt-8">&#x00A0;</span><span
  10302. class="cmtt-8">&#x00A0;</span><span
  10303. class="cmtt-8">&#x00A0;</span><span
  10304. class="cmtt-8">&#x00A0;</span><span
  10305. class="cmtt-8">&#x00A0;</span><span
  10306. class="cmtt-8">&#x00A0;</span><span
  10307. class="cmtt-8">&#x00A0;</span><span
  10308. class="cmtt-8">&#x00A0;</span><span
  10309. class="cmtt-8">&#x00A0;</span><span
  10310. class="cmtt-8">&#x00A0;</span><span
  10311. class="cmtt-8">&#x00A0;</span><span
  10312. class="cmtt-8">&#x00A0;</span><span
  10313. class="cmtt-8">&#x00A0;</span><span
  10314. class="cmtt-8">&#x00A0;</span><span
  10315. class="cmtt-8">&#x00A0;</span><span
  10316. class="cmtt-8">&#x00A0;</span><span
  10317. class="cmtt-8">&#x00A0;</span><span
  10318. class="cmtt-8">&#x00A0;</span><span
  10319. class="cmtt-8">&#x00A0;</span><span
  10320. class="cmtt-8">&#x00A0;</span><span
  10321. class="cmtt-8">&#x00A0;</span><span
  10322. class="cmtt-8">&#x00A0;</span><span
  10323. class="cmtt-8">&#x00A0;</span><span
  10324. class="cmtt-8">&#x00A0;</span><span
  10325. class="cmtt-8">&#x00A0;</span><span
  10326. class="cmtt-8">&#x00A0;</span><span
  10327. class="cmtt-8">&#x00A0;</span><span
  10328. class="cmtt-8">&#x00A0;}</span>
  10329. <br class="fancyvrb" /><a
  10330. id="x1-110062r23"></a><span
  10331. class="cmr-6">23</span><span
  10332. class="cmtt-8">&#x00A0;</span><span
  10333. class="cmtt-8">&#x00A0;</span>
  10334. <br class="fancyvrb" /><a
  10335. id="x1-110064r24"></a><span
  10336. class="cmr-6">24</span><span
  10337. class="cmtt-8">&#x00A0;</span><span
  10338. class="cmtt-8">&#x00A0;</span><span
  10339. class="cmtt-8">&#x00A0;</span><span
  10340. class="cmtt-8">&#x00A0;</span><span
  10341. class="cmtt-8">&#x00A0;</span><span
  10342. class="cmtt-8">&#x00A0;</span><span
  10343. class="cmtt-8">&#x00A0;</span><span
  10344. class="cmtt-8">&#x00A0;</span><span
  10345. class="cmtt-8">&#x00A0;</span><span
  10346. class="cmtt-8">&#x00A0;</span><span
  10347. class="cmtt-8">&#x00A0;</span><span
  10348. class="cmtt-8">&#x00A0;</span><span
  10349. class="cmtt-8">&#x00A0;</span><span
  10350. class="cmtt-8">&#x00A0;</span><span
  10351. class="cmtt-8">&#x00A0;</span><span
  10352. class="cmtt-8">&#x00A0;</span><span
  10353. class="cmtt-8">&#x00A0;</span><span
  10354. class="cmtt-8">&#x00A0;</span><span
  10355. class="cmtt-8">&#x00A0;</span><span
  10356. class="cmtt-8">&#x00A0;</span><span
  10357. class="cmtt-8">&#x00A0;</span><span
  10358. class="cmtt-8">&#x00A0;</span><span
  10359. class="cmtt-8">&#x00A0;</span><span
  10360. class="cmtt-8">&#x00A0;</span><span
  10361. class="cmtt-8">&#x00A0;</span><span
  10362. class="cmtt-8">&#x00A0;</span><span
  10363. class="cmtt-8">&#x00A0;}</span>
  10364. <br class="fancyvrb" /><a
  10365. id="x1-110066r25"></a><span
  10366. class="cmr-6">25</span><span
  10367. class="cmtt-8">&#x00A0;</span><span
  10368. class="cmtt-8">&#x00A0;</span>
  10369. <br class="fancyvrb" /><a
  10370. id="x1-110068r26"></a><span
  10371. class="cmr-6">26</span><span
  10372. class="cmtt-8">&#x00A0;</span><span
  10373. class="cmtt-8">&#x00A0;</span><span
  10374. class="cmtt-8">&#x00A0;</span><span
  10375. class="cmtt-8">&#x00A0;</span><span
  10376. class="cmtt-8">&#x00A0;</span><span
  10377. class="cmtt-8">&#x00A0;</span><span
  10378. class="cmtt-8">&#x00A0;</span><span
  10379. class="cmtt-8">&#x00A0;</span><span
  10380. class="cmtt-8">&#x00A0;</span><span
  10381. class="cmtt-8">&#x00A0;</span><span
  10382. class="cmtt-8">&#x00A0;</span><span
  10383. class="cmtt-8">&#x00A0;</span><span
  10384. class="cmtt-8">&#x00A0;</span><span
  10385. class="cmtt-8">&#x00A0;</span><span
  10386. class="cmtt-8">&#x00A0;</span><span
  10387. class="cmtt-8">&#x00A0;</span><span
  10388. class="cmtt-8">&#x00A0;</span><span
  10389. class="cmtt-8">&#x00A0;</span><span
  10390. class="cmtt-8">&#x00A0;</span><span
  10391. class="cmtt-8">&#x00A0;</span><span
  10392. class="cmtt-8">&#x00A0;</span><span
  10393. class="cmtt-8">&#x00A0;}</span>
  10394. <br class="fancyvrb" /><a
  10395. id="x1-110070r27"></a><span
  10396. class="cmr-6">27</span><span
  10397. class="cmtt-8">&#x00A0;</span><span
  10398. class="cmtt-8">&#x00A0;</span>
  10399. <br class="fancyvrb" /><a
  10400. id="x1-110072r28"></a><span
  10401. class="cmr-6">28</span><span
  10402. class="cmtt-8">&#x00A0;</span><span
  10403. class="cmtt-8">&#x00A0;</span><span
  10404. class="cmtt-8">&#x00A0;</span><span
  10405. class="cmtt-8">&#x00A0;</span><span
  10406. class="cmtt-8">&#x00A0;</span><span
  10407. class="cmtt-8">&#x00A0;</span><span
  10408. class="cmtt-8">&#x00A0;</span><span
  10409. class="cmtt-8">&#x00A0;</span><span
  10410. class="cmtt-8">&#x00A0;</span><span
  10411. class="cmtt-8">&#x00A0;</span><span
  10412. class="cmtt-8">&#x00A0;</span><span
  10413. class="cmtt-8">&#x00A0;</span><span
  10414. class="cmtt-8">&#x00A0;</span><span
  10415. class="cmtt-8">&#x00A0;</span><span
  10416. class="cmtt-8">&#x00A0;</span><span
  10417. class="cmtt-8">&#x00A0;</span><span
  10418. class="cmtt-8">&#x00A0;}</span>
  10419. <br class="fancyvrb" /><a
  10420. id="x1-110074r29"></a><span
  10421. class="cmr-6">29</span><span
  10422. class="cmtt-8">&#x00A0;</span><span
  10423. class="cmtt-8">&#x00A0;</span>
  10424. <br class="fancyvrb" /><a
  10425. id="x1-110076r30"></a><span
  10426. class="cmr-6">30</span><span
  10427. class="cmtt-8">&#x00A0;</span><span
  10428. class="cmtt-8">&#x00A0;</span><span
  10429. class="cmtt-8">&#x00A0;</span><span
  10430. class="cmtt-8">&#x00A0;</span><span
  10431. class="cmtt-8">&#x00A0;</span><span
  10432. class="cmtt-8">&#x00A0;</span><span
  10433. class="cmtt-8">&#x00A0;</span><span
  10434. class="cmtt-8">&#x00A0;</span><span
  10435. class="cmtt-8">&#x00A0;</span><span
  10436. class="cmtt-8">&#x00A0;</span><span
  10437. class="cmtt-8">&#x00A0;</span><span
  10438. class="cmtt-8">&#x00A0;</span><span
  10439. class="cmtt-8">&#x00A0;13)</span><span
  10440. class="cmtt-8">&#x00A0;iterate</span><span
  10441. class="cmtt-8">&#x00A0;[i]</span><span
  10442. class="cmtt-8">&#x00A0;over</span><span
  10443. class="cmtt-8">&#x00A0;the</span><span
  10444. class="cmtt-8">&#x00A0;range</span><span
  10445. class="cmtt-8">&#x00A0;0</span><span
  10446. class="cmtt-8">&#x00A0;..</span><span
  10447. class="cmtt-8">&#x00A0;([classwords\_per\_codeword]</span><span
  10448. class="cmtt-8">&#x00A0;-</span><span
  10449. class="cmtt-8">&#x00A0;1)</span><span
  10450. class="cmtt-8">&#x00A0;while</span><span
  10451. class="cmtt-8">&#x00A0;[partition\_count]</span>
  10452. <br class="fancyvrb" /><a
  10453. id="x1-110078r31"></a><span
  10454. class="cmr-6">31</span><span
  10455. class="cmtt-8">&#x00A0;</span><span
  10456. class="cmtt-8">&#x00A0;</span><span
  10457. class="cmtt-8">&#x00A0;</span><span
  10458. class="cmtt-8">&#x00A0;</span><span
  10459. class="cmtt-8">&#x00A0;</span><span
  10460. class="cmtt-8">&#x00A0;</span><span
  10461. class="cmtt-8">&#x00A0;</span><span
  10462. class="cmtt-8">&#x00A0;</span><span
  10463. class="cmtt-8">&#x00A0;</span><span
  10464. class="cmtt-8">&#x00A0;</span><span
  10465. class="cmtt-8">&#x00A0;</span><span
  10466. class="cmtt-8">&#x00A0;</span><span
  10467. class="cmtt-8">&#x00A0;</span><span
  10468. class="cmtt-8">&#x00A0;</span><span
  10469. class="cmtt-8">&#x00A0;</span><span
  10470. class="cmtt-8">&#x00A0;</span><span
  10471. class="cmtt-8">&#x00A0;is</span><span
  10472. class="cmtt-8">&#x00A0;also</span><span
  10473. class="cmtt-8">&#x00A0;less</span><span
  10474. class="cmtt-8">&#x00A0;than</span><span
  10475. class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
  10476. class="cmtt-8">&#x00A0;{</span>
  10477. <br class="fancyvrb" /><a
  10478. id="x1-110080r32"></a><span
  10479. class="cmr-6">32</span><span
  10480. class="cmtt-8">&#x00A0;</span><span
  10481. class="cmtt-8">&#x00A0;</span>
  10482. <br class="fancyvrb" /><a
  10483. id="x1-110082r33"></a><span
  10484. class="cmr-6">33</span><span
  10485. class="cmtt-8">&#x00A0;</span><span
  10486. class="cmtt-8">&#x00A0;</span><span
  10487. class="cmtt-8">&#x00A0;</span><span
  10488. class="cmtt-8">&#x00A0;</span><span
  10489. class="cmtt-8">&#x00A0;</span><span
  10490. class="cmtt-8">&#x00A0;</span><span
  10491. class="cmtt-8">&#x00A0;</span><span
  10492. class="cmtt-8">&#x00A0;</span><span
  10493. class="cmtt-8">&#x00A0;</span><span
  10494. class="cmtt-8">&#x00A0;</span><span
  10495. class="cmtt-8">&#x00A0;</span><span
  10496. class="cmtt-8">&#x00A0;</span><span
  10497. class="cmtt-8">&#x00A0;</span><span
  10498. class="cmtt-8">&#x00A0;</span><span
  10499. class="cmtt-8">&#x00A0;</span><span
  10500. class="cmtt-8">&#x00A0;</span><span
  10501. class="cmtt-8">&#x00A0;</span><span
  10502. class="cmtt-8">&#x00A0;</span><span
  10503. class="cmtt-8">&#x00A0;14)</span><span
  10504. class="cmtt-8">&#x00A0;iterate</span><span
  10505. class="cmtt-8">&#x00A0;[j]</span><span
  10506. class="cmtt-8">&#x00A0;over</span><span
  10507. class="cmtt-8">&#x00A0;the</span><span
  10508. class="cmtt-8">&#x00A0;range</span><span
  10509. class="cmtt-8">&#x00A0;0</span><span
  10510. class="cmtt-8">&#x00A0;..</span><span
  10511. class="cmtt-8">&#x00A0;[ch]-1</span><span
  10512. class="cmtt-8">&#x00A0;{</span>
  10513. <br class="fancyvrb" /><a
  10514. id="x1-110084r34"></a><span
  10515. class="cmr-6">34</span><span
  10516. class="cmtt-8">&#x00A0;</span><span
  10517. class="cmtt-8">&#x00A0;</span>
  10518. <br class="fancyvrb" /><a
  10519. id="x1-110086r35"></a><span
  10520. class="cmr-6">35</span><span
  10521. class="cmtt-8">&#x00A0;</span><span
  10522. class="cmtt-8">&#x00A0;</span><span
  10523. class="cmtt-8">&#x00A0;</span><span
  10524. class="cmtt-8">&#x00A0;</span><span
  10525. class="cmtt-8">&#x00A0;</span><span
  10526. class="cmtt-8">&#x00A0;</span><span
  10527. class="cmtt-8">&#x00A0;</span><span
  10528. class="cmtt-8">&#x00A0;</span><span
  10529. class="cmtt-8">&#x00A0;</span><span
  10530. class="cmtt-8">&#x00A0;</span><span
  10531. class="cmtt-8">&#x00A0;</span><span
  10532. class="cmtt-8">&#x00A0;</span><span
  10533. class="cmtt-8">&#x00A0;</span><span
  10534. class="cmtt-8">&#x00A0;</span><span
  10535. class="cmtt-8">&#x00A0;</span><span
  10536. class="cmtt-8">&#x00A0;</span><span
  10537. class="cmtt-8">&#x00A0;</span><span
  10538. class="cmtt-8">&#x00A0;</span><span
  10539. class="cmtt-8">&#x00A0;</span><span
  10540. class="cmtt-8">&#x00A0;</span><span
  10541. class="cmtt-8">&#x00A0;</span><span
  10542. class="cmtt-8">&#x00A0;</span><span
  10543. class="cmtt-8">&#x00A0;</span><span
  10544. class="cmtt-8">&#x00A0;15)</span><span
  10545. class="cmtt-8">&#x00A0;if</span><span
  10546. class="cmtt-8">&#x00A0;vector</span><span
  10547. class="cmtt-8">&#x00A0;[j]</span><span
  10548. class="cmtt-8">&#x00A0;is</span><span
  10549. class="cmtt-8">&#x00A0;not</span><span
  10550. class="cmtt-8">&#x00A0;marked</span><span
  10551. class="cmtt-8">&#x00A0;&#8217;do</span><span
  10552. class="cmtt-8">&#x00A0;not</span><span
  10553. class="cmtt-8">&#x00A0;decode&#8217;</span><span
  10554. class="cmtt-8">&#x00A0;{</span>
  10555. <br class="fancyvrb" /><a
  10556. id="x1-110088r36"></a><span
  10557. class="cmr-6">36</span><span
  10558. class="cmtt-8">&#x00A0;</span><span
  10559. class="cmtt-8">&#x00A0;</span>
  10560. <br class="fancyvrb" /><a
  10561. id="x1-110090r37"></a><span
  10562. class="cmr-6">37</span><span
  10563. class="cmtt-8">&#x00A0;</span><span
  10564. class="cmtt-8">&#x00A0;</span><span
  10565. class="cmtt-8">&#x00A0;</span><span
  10566. class="cmtt-8">&#x00A0;</span><span
  10567. class="cmtt-8">&#x00A0;</span><span
  10568. class="cmtt-8">&#x00A0;</span><span
  10569. class="cmtt-8">&#x00A0;</span><span
  10570. class="cmtt-8">&#x00A0;</span><span
  10571. class="cmtt-8">&#x00A0;</span><span
  10572. class="cmtt-8">&#x00A0;</span><span
  10573. class="cmtt-8">&#x00A0;</span><span
  10574. class="cmtt-8">&#x00A0;</span><span
  10575. class="cmtt-8">&#x00A0;</span><span
  10576. class="cmtt-8">&#x00A0;</span><span
  10577. class="cmtt-8">&#x00A0;</span><span
  10578. class="cmtt-8">&#x00A0;</span><span
  10579. class="cmtt-8">&#x00A0;</span><span
  10580. class="cmtt-8">&#x00A0;</span><span
  10581. class="cmtt-8">&#x00A0;</span><span
  10582. class="cmtt-8">&#x00A0;</span><span
  10583. class="cmtt-8">&#x00A0;</span><span
  10584. class="cmtt-8">&#x00A0;</span><span
  10585. class="cmtt-8">&#x00A0;</span><span
  10586. class="cmtt-8">&#x00A0;</span><span
  10587. class="cmtt-8">&#x00A0;</span><span
  10588. class="cmtt-8">&#x00A0;</span><span
  10589. class="cmtt-8">&#x00A0;</span><span
  10590. class="cmtt-8">&#x00A0;</span><span
  10591. class="cmtt-8">&#x00A0;16)</span><span
  10592. class="cmtt-8">&#x00A0;[vqclass]</span><span
  10593. class="cmtt-8">&#x00A0;=</span><span
  10594. class="cmtt-8">&#x00A0;array</span><span
  10595. class="cmtt-8">&#x00A0;[classifications]</span><span
  10596. class="cmtt-8">&#x00A0;element</span><span
  10597. class="cmtt-8">&#x00A0;[j],[partition\_count]</span>
  10598. <br class="fancyvrb" /><a
  10599. id="x1-110092r38"></a><span
  10600. class="cmr-6">38</span><span
  10601. class="cmtt-8">&#x00A0;</span><span
  10602. class="cmtt-8">&#x00A0;</span><span
  10603. class="cmtt-8">&#x00A0;</span><span
  10604. class="cmtt-8">&#x00A0;</span><span
  10605. class="cmtt-8">&#x00A0;</span><span
  10606. class="cmtt-8">&#x00A0;</span><span
  10607. class="cmtt-8">&#x00A0;</span><span
  10608. class="cmtt-8">&#x00A0;</span><span
  10609. class="cmtt-8">&#x00A0;</span><span
  10610. class="cmtt-8">&#x00A0;</span><span
  10611. class="cmtt-8">&#x00A0;</span><span
  10612. class="cmtt-8">&#x00A0;</span><span
  10613. class="cmtt-8">&#x00A0;</span><span
  10614. class="cmtt-8">&#x00A0;</span><span
  10615. class="cmtt-8">&#x00A0;</span><span
  10616. class="cmtt-8">&#x00A0;</span><span
  10617. class="cmtt-8">&#x00A0;</span><span
  10618. class="cmtt-8">&#x00A0;</span><span
  10619. class="cmtt-8">&#x00A0;</span><span
  10620. class="cmtt-8">&#x00A0;</span><span
  10621. class="cmtt-8">&#x00A0;</span><span
  10622. class="cmtt-8">&#x00A0;</span><span
  10623. class="cmtt-8">&#x00A0;</span><span
  10624. class="cmtt-8">&#x00A0;</span><span
  10625. class="cmtt-8">&#x00A0;</span><span
  10626. class="cmtt-8">&#x00A0;</span><span
  10627. class="cmtt-8">&#x00A0;</span><span
  10628. class="cmtt-8">&#x00A0;</span><span
  10629. class="cmtt-8">&#x00A0;17)</span><span
  10630. class="cmtt-8">&#x00A0;[vqbook]</span><span
  10631. class="cmtt-8">&#x00A0;=</span><span
  10632. class="cmtt-8">&#x00A0;array</span><span
  10633. class="cmtt-8">&#x00A0;[residue\_books]</span><span
  10634. class="cmtt-8">&#x00A0;element</span><span
  10635. class="cmtt-8">&#x00A0;[vqclass],[pass]</span>
  10636. <br class="fancyvrb" /><a
  10637. id="x1-110094r39"></a><span
  10638. class="cmr-6">39</span><span
  10639. class="cmtt-8">&#x00A0;</span><span
  10640. class="cmtt-8">&#x00A0;</span><span
  10641. class="cmtt-8">&#x00A0;</span><span
  10642. class="cmtt-8">&#x00A0;</span><span
  10643. class="cmtt-8">&#x00A0;</span><span
  10644. class="cmtt-8">&#x00A0;</span><span
  10645. class="cmtt-8">&#x00A0;</span><span
  10646. class="cmtt-8">&#x00A0;</span><span
  10647. class="cmtt-8">&#x00A0;</span><span
  10648. class="cmtt-8">&#x00A0;</span><span
  10649. class="cmtt-8">&#x00A0;</span><span
  10650. class="cmtt-8">&#x00A0;</span><span
  10651. class="cmtt-8">&#x00A0;</span><span
  10652. class="cmtt-8">&#x00A0;</span><span
  10653. class="cmtt-8">&#x00A0;</span><span
  10654. class="cmtt-8">&#x00A0;</span><span
  10655. class="cmtt-8">&#x00A0;</span><span
  10656. class="cmtt-8">&#x00A0;</span><span
  10657. class="cmtt-8">&#x00A0;</span><span
  10658. class="cmtt-8">&#x00A0;</span><span
  10659. class="cmtt-8">&#x00A0;</span><span
  10660. class="cmtt-8">&#x00A0;</span><span
  10661. class="cmtt-8">&#x00A0;</span><span
  10662. class="cmtt-8">&#x00A0;</span><span
  10663. class="cmtt-8">&#x00A0;</span><span
  10664. class="cmtt-8">&#x00A0;</span><span
  10665. class="cmtt-8">&#x00A0;</span><span
  10666. class="cmtt-8">&#x00A0;</span><span
  10667. class="cmtt-8">&#x00A0;18)</span><span
  10668. class="cmtt-8">&#x00A0;if</span><span
  10669. class="cmtt-8">&#x00A0;([vqbook]</span><span
  10670. class="cmtt-8">&#x00A0;is</span><span
  10671. class="cmtt-8">&#x00A0;not</span><span
  10672. class="cmtt-8">&#x00A0;&#8217;unused&#8217;)</span><span
  10673. class="cmtt-8">&#x00A0;{</span>
  10674. <br class="fancyvrb" /><a
  10675. id="x1-110096r40"></a><span
  10676. class="cmr-6">40</span><span
  10677. class="cmtt-8">&#x00A0;</span><span
  10678. class="cmtt-8">&#x00A0;</span>
  10679. <br class="fancyvrb" /><a
  10680. id="x1-110098r41"></a><span
  10681. class="cmr-6">41</span><span
  10682. class="cmtt-8">&#x00A0;</span><span
  10683. class="cmtt-8">&#x00A0;</span><span
  10684. class="cmtt-8">&#x00A0;</span><span
  10685. class="cmtt-8">&#x00A0;</span><span
  10686. class="cmtt-8">&#x00A0;</span><span
  10687. class="cmtt-8">&#x00A0;</span><span
  10688. class="cmtt-8">&#x00A0;</span><span
  10689. class="cmtt-8">&#x00A0;</span><span
  10690. class="cmtt-8">&#x00A0;</span><span
  10691. class="cmtt-8">&#x00A0;</span><span
  10692. class="cmtt-8">&#x00A0;</span><span
  10693. class="cmtt-8">&#x00A0;</span><span
  10694. class="cmtt-8">&#x00A0;</span><span
  10695. class="cmtt-8">&#x00A0;</span><span
  10696. class="cmtt-8">&#x00A0;</span><span
  10697. class="cmtt-8">&#x00A0;</span><span
  10698. class="cmtt-8">&#x00A0;</span><span
  10699. class="cmtt-8">&#x00A0;</span><span
  10700. class="cmtt-8">&#x00A0;</span><span
  10701. class="cmtt-8">&#x00A0;</span><span
  10702. class="cmtt-8">&#x00A0;</span><span
  10703. class="cmtt-8">&#x00A0;</span><span
  10704. class="cmtt-8">&#x00A0;</span><span
  10705. class="cmtt-8">&#x00A0;</span><span
  10706. class="cmtt-8">&#x00A0;</span><span
  10707. class="cmtt-8">&#x00A0;</span><span
  10708. class="cmtt-8">&#x00A0;</span><span
  10709. class="cmtt-8">&#x00A0;</span><span
  10710. class="cmtt-8">&#x00A0;</span><span
  10711. class="cmtt-8">&#x00A0;</span><span
  10712. class="cmtt-8">&#x00A0;</span><span
  10713. class="cmtt-8">&#x00A0;</span><span
  10714. class="cmtt-8">&#x00A0;</span><span
  10715. class="cmtt-8">&#x00A0;19)</span><span
  10716. class="cmtt-8">&#x00A0;decode</span><span
  10717. class="cmtt-8">&#x00A0;partition</span><span
  10718. class="cmtt-8">&#x00A0;into</span><span
  10719. class="cmtt-8">&#x00A0;output</span><span
  10720. class="cmtt-8">&#x00A0;vector</span><span
  10721. class="cmtt-8">&#x00A0;number</span><span
  10722. class="cmtt-8">&#x00A0;[j],</span><span
  10723. class="cmtt-8">&#x00A0;starting</span><span
  10724. class="cmtt-8">&#x00A0;at</span><span
  10725. class="cmtt-8">&#x00A0;scalar</span>
  10726. <br class="fancyvrb" /><a
  10727. id="x1-110100r42"></a><span
  10728. class="cmr-6">42</span><span
  10729. class="cmtt-8">&#x00A0;</span><span
  10730. class="cmtt-8">&#x00A0;</span><span
  10731. class="cmtt-8">&#x00A0;</span><span
  10732. class="cmtt-8">&#x00A0;</span><span
  10733. class="cmtt-8">&#x00A0;</span><span
  10734. class="cmtt-8">&#x00A0;</span><span
  10735. class="cmtt-8">&#x00A0;</span><span
  10736. class="cmtt-8">&#x00A0;</span><span
  10737. class="cmtt-8">&#x00A0;</span><span
  10738. class="cmtt-8">&#x00A0;</span><span
  10739. class="cmtt-8">&#x00A0;</span><span
  10740. class="cmtt-8">&#x00A0;</span><span
  10741. class="cmtt-8">&#x00A0;</span><span
  10742. class="cmtt-8">&#x00A0;</span><span
  10743. class="cmtt-8">&#x00A0;</span><span
  10744. class="cmtt-8">&#x00A0;</span><span
  10745. class="cmtt-8">&#x00A0;</span><span
  10746. class="cmtt-8">&#x00A0;</span><span
  10747. class="cmtt-8">&#x00A0;</span><span
  10748. class="cmtt-8">&#x00A0;</span><span
  10749. class="cmtt-8">&#x00A0;</span><span
  10750. class="cmtt-8">&#x00A0;</span><span
  10751. class="cmtt-8">&#x00A0;</span><span
  10752. class="cmtt-8">&#x00A0;</span><span
  10753. class="cmtt-8">&#x00A0;</span><span
  10754. class="cmtt-8">&#x00A0;</span><span
  10755. class="cmtt-8">&#x00A0;</span><span
  10756. class="cmtt-8">&#x00A0;</span><span
  10757. class="cmtt-8">&#x00A0;</span><span
  10758. class="cmtt-8">&#x00A0;</span><span
  10759. class="cmtt-8">&#x00A0;</span><span
  10760. class="cmtt-8">&#x00A0;</span><span
  10761. class="cmtt-8">&#x00A0;</span><span
  10762. class="cmtt-8">&#x00A0;</span><span
  10763. class="cmtt-8">&#x00A0;</span><span
  10764. class="cmtt-8">&#x00A0;</span><span
  10765. class="cmtt-8">&#x00A0;</span><span
  10766. class="cmtt-8">&#x00A0;offset</span><span
  10767. class="cmtt-8">&#x00A0;[limit\_residue\_begin]+[partition\_count]*[residue\_partition\_size]</span><span
  10768. class="cmtt-8">&#x00A0;using</span>
  10769. <br class="fancyvrb" /><a
  10770. id="x1-110102r43"></a><span
  10771. class="cmr-6">43</span><span
  10772. class="cmtt-8">&#x00A0;</span><span
  10773. class="cmtt-8">&#x00A0;</span><span
  10774. class="cmtt-8">&#x00A0;</span><span
  10775. class="cmtt-8">&#x00A0;</span><span
  10776. class="cmtt-8">&#x00A0;</span><span
  10777. class="cmtt-8">&#x00A0;</span><span
  10778. class="cmtt-8">&#x00A0;</span><span
  10779. class="cmtt-8">&#x00A0;</span><span
  10780. class="cmtt-8">&#x00A0;</span><span
  10781. class="cmtt-8">&#x00A0;</span><span
  10782. class="cmtt-8">&#x00A0;</span><span
  10783. class="cmtt-8">&#x00A0;</span><span
  10784. class="cmtt-8">&#x00A0;</span><span
  10785. class="cmtt-8">&#x00A0;</span><span
  10786. class="cmtt-8">&#x00A0;</span><span
  10787. class="cmtt-8">&#x00A0;</span><span
  10788. class="cmtt-8">&#x00A0;</span><span
  10789. class="cmtt-8">&#x00A0;</span><span
  10790. class="cmtt-8">&#x00A0;</span><span
  10791. class="cmtt-8">&#x00A0;</span><span
  10792. class="cmtt-8">&#x00A0;</span><span
  10793. class="cmtt-8">&#x00A0;</span><span
  10794. class="cmtt-8">&#x00A0;</span><span
  10795. class="cmtt-8">&#x00A0;</span><span
  10796. class="cmtt-8">&#x00A0;</span><span
  10797. class="cmtt-8">&#x00A0;</span><span
  10798. class="cmtt-8">&#x00A0;</span><span
  10799. class="cmtt-8">&#x00A0;</span><span
  10800. class="cmtt-8">&#x00A0;</span><span
  10801. class="cmtt-8">&#x00A0;</span><span
  10802. class="cmtt-8">&#x00A0;</span><span
  10803. class="cmtt-8">&#x00A0;</span><span
  10804. class="cmtt-8">&#x00A0;</span><span
  10805. class="cmtt-8">&#x00A0;</span><span
  10806. class="cmtt-8">&#x00A0;</span><span
  10807. class="cmtt-8">&#x00A0;</span><span
  10808. class="cmtt-8">&#x00A0;</span><span
  10809. class="cmtt-8">&#x00A0;codebook</span><span
  10810. class="cmtt-8">&#x00A0;number</span><span
  10811. class="cmtt-8">&#x00A0;[vqbook]</span><span
  10812. class="cmtt-8">&#x00A0;in</span><span
  10813. class="cmtt-8">&#x00A0;VQ</span><span
  10814. class="cmtt-8">&#x00A0;context</span>
  10815. <br class="fancyvrb" /><a
  10816. id="x1-110104r44"></a><span
  10817. class="cmr-6">44</span><span
  10818. class="cmtt-8">&#x00A0;</span><span
  10819. class="cmtt-8">&#x00A0;</span><span
  10820. class="cmtt-8">&#x00A0;</span><span
  10821. class="cmtt-8">&#x00A0;</span><span
  10822. class="cmtt-8">&#x00A0;</span><span
  10823. class="cmtt-8">&#x00A0;</span><span
  10824. class="cmtt-8">&#x00A0;</span><span
  10825. class="cmtt-8">&#x00A0;</span><span
  10826. class="cmtt-8">&#x00A0;</span><span
  10827. class="cmtt-8">&#x00A0;</span><span
  10828. class="cmtt-8">&#x00A0;</span><span
  10829. class="cmtt-8">&#x00A0;</span><span
  10830. class="cmtt-8">&#x00A0;</span><span
  10831. class="cmtt-8">&#x00A0;</span><span
  10832. class="cmtt-8">&#x00A0;</span><span
  10833. class="cmtt-8">&#x00A0;</span><span
  10834. class="cmtt-8">&#x00A0;</span><span
  10835. class="cmtt-8">&#x00A0;</span><span
  10836. class="cmtt-8">&#x00A0;</span><span
  10837. class="cmtt-8">&#x00A0;</span><span
  10838. class="cmtt-8">&#x00A0;</span><span
  10839. class="cmtt-8">&#x00A0;</span><span
  10840. class="cmtt-8">&#x00A0;</span><span
  10841. class="cmtt-8">&#x00A0;</span><span
  10842. class="cmtt-8">&#x00A0;</span><span
  10843. class="cmtt-8">&#x00A0;</span><span
  10844. class="cmtt-8">&#x00A0;</span><span
  10845. class="cmtt-8">&#x00A0;}</span>
  10846. <br class="fancyvrb" /><a
  10847. id="x1-110106r45"></a><span
  10848. class="cmr-6">45</span><span
  10849. class="cmtt-8">&#x00A0;</span><span
  10850. class="cmtt-8">&#x00A0;</span><span
  10851. class="cmtt-8">&#x00A0;</span><span
  10852. class="cmtt-8">&#x00A0;</span><span
  10853. class="cmtt-8">&#x00A0;</span><span
  10854. class="cmtt-8">&#x00A0;</span><span
  10855. class="cmtt-8">&#x00A0;</span><span
  10856. class="cmtt-8">&#x00A0;</span><span
  10857. class="cmtt-8">&#x00A0;</span><span
  10858. class="cmtt-8">&#x00A0;</span><span
  10859. class="cmtt-8">&#x00A0;</span><span
  10860. class="cmtt-8">&#x00A0;</span><span
  10861. class="cmtt-8">&#x00A0;</span><span
  10862. class="cmtt-8">&#x00A0;</span><span
  10863. class="cmtt-8">&#x00A0;</span><span
  10864. class="cmtt-8">&#x00A0;</span><span
  10865. class="cmtt-8">&#x00A0;</span><span
  10866. class="cmtt-8">&#x00A0;</span><span
  10867. class="cmtt-8">&#x00A0;</span><span
  10868. class="cmtt-8">&#x00A0;</span><span
  10869. class="cmtt-8">&#x00A0;</span><span
  10870. class="cmtt-8">&#x00A0;</span><span
  10871. class="cmtt-8">&#x00A0;}</span>
  10872. <br class="fancyvrb" /><a
  10873. id="x1-110108r46"></a><span
  10874. class="cmr-6">46</span><span
  10875. class="cmtt-8">&#x00A0;</span><span
  10876. class="cmtt-8">&#x00A0;</span>
  10877. <br class="fancyvrb" /><a
  10878. id="x1-110110r47"></a><span
  10879. class="cmr-6">47</span><span
  10880. class="cmtt-8">&#x00A0;</span><span
  10881. class="cmtt-8">&#x00A0;</span><span
  10882. class="cmtt-8">&#x00A0;</span><span
  10883. class="cmtt-8">&#x00A0;</span><span
  10884. class="cmtt-8">&#x00A0;</span><span
  10885. class="cmtt-8">&#x00A0;</span><span
  10886. class="cmtt-8">&#x00A0;</span><span
  10887. class="cmtt-8">&#x00A0;</span><span
  10888. class="cmtt-8">&#x00A0;</span><span
  10889. class="cmtt-8">&#x00A0;</span><span
  10890. class="cmtt-8">&#x00A0;</span><span
  10891. class="cmtt-8">&#x00A0;</span><span
  10892. class="cmtt-8">&#x00A0;</span><span
  10893. class="cmtt-8">&#x00A0;</span><span
  10894. class="cmtt-8">&#x00A0;</span><span
  10895. class="cmtt-8">&#x00A0;</span><span
  10896. class="cmtt-8">&#x00A0;</span><span
  10897. class="cmtt-8">&#x00A0;</span><span
  10898. class="cmtt-8">&#x00A0;20)</span><span
  10899. class="cmtt-8">&#x00A0;increment</span><span
  10900. class="cmtt-8">&#x00A0;[partition\_count]</span><span
  10901. class="cmtt-8">&#x00A0;by</span><span
  10902. class="cmtt-8">&#x00A0;one</span>
  10903. <br class="fancyvrb" /><a
  10904. id="x1-110112r48"></a><span
  10905. class="cmr-6">48</span><span
  10906. class="cmtt-8">&#x00A0;</span><span
  10907. class="cmtt-8">&#x00A0;</span>
  10908. <br class="fancyvrb" /><a
  10909. id="x1-110114r49"></a><span
  10910. class="cmr-6">49</span><span
  10911. class="cmtt-8">&#x00A0;</span><span
  10912. class="cmtt-8">&#x00A0;</span><span
  10913. class="cmtt-8">&#x00A0;</span><span
  10914. class="cmtt-8">&#x00A0;</span><span
  10915. class="cmtt-8">&#x00A0;</span><span
  10916. class="cmtt-8">&#x00A0;</span><span
  10917. class="cmtt-8">&#x00A0;</span><span
  10918. class="cmtt-8">&#x00A0;</span><span
  10919. class="cmtt-8">&#x00A0;</span><span
  10920. class="cmtt-8">&#x00A0;</span><span
  10921. class="cmtt-8">&#x00A0;</span><span
  10922. class="cmtt-8">&#x00A0;</span><span
  10923. class="cmtt-8">&#x00A0;</span><span
  10924. class="cmtt-8">&#x00A0;</span><span
  10925. class="cmtt-8">&#x00A0;</span><span
  10926. class="cmtt-8">&#x00A0;</span><span
  10927. class="cmtt-8">&#x00A0;}</span>
  10928. <br class="fancyvrb" /><a
  10929. id="x1-110116r50"></a><span
  10930. class="cmr-6">50</span><span
  10931. class="cmtt-8">&#x00A0;</span><span
  10932. class="cmtt-8">&#x00A0;</span><span
  10933. class="cmtt-8">&#x00A0;</span><span
  10934. class="cmtt-8">&#x00A0;</span><span
  10935. class="cmtt-8">&#x00A0;</span><span
  10936. class="cmtt-8">&#x00A0;</span><span
  10937. class="cmtt-8">&#x00A0;</span><span
  10938. class="cmtt-8">&#x00A0;</span><span
  10939. class="cmtt-8">&#x00A0;</span><span
  10940. class="cmtt-8">&#x00A0;</span><span
  10941. class="cmtt-8">&#x00A0;</span><span
  10942. class="cmtt-8">&#x00A0;}</span>
  10943. <br class="fancyvrb" /><a
  10944. id="x1-110118r51"></a><span
  10945. class="cmr-6">51</span><span
  10946. class="cmtt-8">&#x00A0;</span><span
  10947. class="cmtt-8">&#x00A0;</span><span
  10948. class="cmtt-8">&#x00A0;</span><span
  10949. class="cmtt-8">&#x00A0;</span><span
  10950. class="cmtt-8">&#x00A0;</span><span
  10951. class="cmtt-8">&#x00A0;</span><span
  10952. class="cmtt-8">&#x00A0;}</span>
  10953. <br class="fancyvrb" /><a
  10954. id="x1-110120r52"></a><span
  10955. class="cmr-6">52</span><span
  10956. class="cmtt-8">&#x00A0;</span><span
  10957. class="cmtt-8">&#x00A0;</span>
  10958. <br class="fancyvrb" /><a
  10959. id="x1-110122r53"></a><span
  10960. class="cmr-6">53</span><span
  10961. class="cmtt-8">&#x00A0;</span><span
  10962. class="cmtt-8">&#x00A0;</span><span
  10963. class="cmtt-8">&#x00A0;21)</span><span
  10964. class="cmtt-8">&#x00A0;done</span>
  10965. <br class="fancyvrb" /><a
  10966. id="x1-110124r54"></a><span
  10967. class="cmr-6">54</span><span
  10968. class="cmtt-8">&#x00A0;</span><span
  10969. class="cmtt-8">&#x00A0;</span>
  10970. </div>
  10971. <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
  10972. Decode returns the result of vector decode up to that point.
  10973. <!--l. 350--><p class="noindent" >
  10974. <h5 class="subsubsectionHead"><span class="titlemark">8.6.3. </span> <a
  10975. id="x1-1110008.6.3"></a>format 0 specifics</h5>
  10976. <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 0&#8217;
  10977. section. The following pseudocode presents the same algorithm. Assume:
  10978. <ul class="itemize1">
  10979. <li class="itemize"><span
  10980. class="cmtt-12">[n] </span>is the value in <span
  10981. class="cmtt-12">[residue_partition_size]</span>
  10982. </li>
  10983. <li class="itemize"><span
  10984. class="cmtt-12">[v] </span>is the residue vector
  10985. </li>
  10986. <li class="itemize"><span
  10987. class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
  10988. <!--l. 363--><p class="noindent" >
  10989. <div class="fancyvrb" id="fancyvrb41">
  10990. <a
  10991. id="x1-111002r1"></a><span
  10992. class="cmr-6">1</span><span
  10993. class="cmtt-8">&#x00A0;</span><span
  10994. class="cmtt-8">&#x00A0;</span><span
  10995. class="cmtt-8">&#x00A0;1)</span><span
  10996. class="cmtt-8">&#x00A0;[step]</span><span
  10997. class="cmtt-8">&#x00A0;=</span><span
  10998. class="cmtt-8">&#x00A0;[n]</span><span
  10999. class="cmtt-8">&#x00A0;/</span><span
  11000. class="cmtt-8">&#x00A0;[codebook\_dimensions]</span>
  11001. <br class="fancyvrb" /><a
  11002. id="x1-111004r2"></a><span
  11003. class="cmr-6">2</span><span
  11004. class="cmtt-8">&#x00A0;</span><span
  11005. class="cmtt-8">&#x00A0;</span><span
  11006. class="cmtt-8">&#x00A0;2)</span><span
  11007. class="cmtt-8">&#x00A0;iterate</span><span
  11008. class="cmtt-8">&#x00A0;[i]</span><span
  11009. class="cmtt-8">&#x00A0;over</span><span
  11010. class="cmtt-8">&#x00A0;the</span><span
  11011. class="cmtt-8">&#x00A0;range</span><span
  11012. class="cmtt-8">&#x00A0;0</span><span
  11013. class="cmtt-8">&#x00A0;...</span><span
  11014. class="cmtt-8">&#x00A0;[step]-1</span><span
  11015. class="cmtt-8">&#x00A0;{</span>
  11016. <br class="fancyvrb" /><a
  11017. id="x1-111006r3"></a><span
  11018. class="cmr-6">3</span><span
  11019. class="cmtt-8">&#x00A0;</span><span
  11020. class="cmtt-8">&#x00A0;</span>
  11021. <br class="fancyvrb" /><a
  11022. id="x1-111008r4"></a><span
  11023. class="cmr-6">4</span><span
  11024. class="cmtt-8">&#x00A0;</span><span
  11025. class="cmtt-8">&#x00A0;</span><span
  11026. class="cmtt-8">&#x00A0;</span><span
  11027. class="cmtt-8">&#x00A0;</span><span
  11028. class="cmtt-8">&#x00A0;</span><span
  11029. class="cmtt-8">&#x00A0;</span><span
  11030. class="cmtt-8">&#x00A0;</span><span
  11031. class="cmtt-8">&#x00A0;3)</span><span
  11032. class="cmtt-8">&#x00A0;vector</span><span
  11033. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  11034. class="cmtt-8">&#x00A0;=</span><span
  11035. class="cmtt-8">&#x00A0;read</span><span
  11036. class="cmtt-8">&#x00A0;vector</span><span
  11037. class="cmtt-8">&#x00A0;from</span><span
  11038. class="cmtt-8">&#x00A0;packet</span><span
  11039. class="cmtt-8">&#x00A0;using</span><span
  11040. class="cmtt-8">&#x00A0;current</span><span
  11041. class="cmtt-8">&#x00A0;codebook</span><span
  11042. class="cmtt-8">&#x00A0;in</span><span
  11043. class="cmtt-8">&#x00A0;VQ</span><span
  11044. class="cmtt-8">&#x00A0;context</span>
  11045. <br class="fancyvrb" /><a
  11046. id="x1-111010r5"></a><span
  11047. class="cmr-6">5</span><span
  11048. class="cmtt-8">&#x00A0;</span><span
  11049. class="cmtt-8">&#x00A0;</span><span
  11050. class="cmtt-8">&#x00A0;</span><span
  11051. class="cmtt-8">&#x00A0;</span><span
  11052. class="cmtt-8">&#x00A0;</span><span
  11053. class="cmtt-8">&#x00A0;</span><span
  11054. class="cmtt-8">&#x00A0;</span><span
  11055. class="cmtt-8">&#x00A0;4)</span><span
  11056. class="cmtt-8">&#x00A0;iterate</span><span
  11057. class="cmtt-8">&#x00A0;[j]</span><span
  11058. class="cmtt-8">&#x00A0;over</span><span
  11059. class="cmtt-8">&#x00A0;the</span><span
  11060. class="cmtt-8">&#x00A0;range</span><span
  11061. class="cmtt-8">&#x00A0;0</span><span
  11062. class="cmtt-8">&#x00A0;...</span><span
  11063. class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
  11064. class="cmtt-8">&#x00A0;{</span>
  11065. <br class="fancyvrb" /><a
  11066. id="x1-111012r6"></a><span
  11067. class="cmr-6">6</span><span
  11068. class="cmtt-8">&#x00A0;</span><span
  11069. class="cmtt-8">&#x00A0;</span>
  11070. <br class="fancyvrb" /><a
  11071. id="x1-111014r7"></a><span
  11072. class="cmr-6">7</span><span
  11073. class="cmtt-8">&#x00A0;</span><span
  11074. class="cmtt-8">&#x00A0;</span><span
  11075. class="cmtt-8">&#x00A0;</span><span
  11076. class="cmtt-8">&#x00A0;</span><span
  11077. class="cmtt-8">&#x00A0;</span><span
  11078. class="cmtt-8">&#x00A0;</span><span
  11079. class="cmtt-8">&#x00A0;</span><span
  11080. class="cmtt-8">&#x00A0;</span><span
  11081. class="cmtt-8">&#x00A0;</span><span
  11082. class="cmtt-8">&#x00A0;</span><span
  11083. class="cmtt-8">&#x00A0;</span><span
  11084. class="cmtt-8">&#x00A0;</span><span
  11085. class="cmtt-8">&#x00A0;5)</span><span
  11086. class="cmtt-8">&#x00A0;vector</span><span
  11087. class="cmtt-8">&#x00A0;[v]</span><span
  11088. class="cmtt-8">&#x00A0;element</span><span
  11089. class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
  11090. class="cmtt-8">&#x00A0;=</span>
  11091. <br class="fancyvrb" /><a
  11092. id="x1-111016r8"></a><span
  11093. class="cmr-6">8</span><span
  11094. class="cmtt-8">&#x00A0;</span><span
  11095. class="cmtt-8">&#x00A0; </span><span
  11096. class="cmtt-8">&#x00A0;</span><span
  11097. class="cmtt-8">&#x00A0;</span><span
  11098. class="cmtt-8">&#x00A0;</span><span
  11099. class="cmtt-8">&#x00A0;</span><span
  11100. class="cmtt-8">&#x00A0;</span><span
  11101. class="cmtt-8">&#x00A0;</span><span
  11102. class="cmtt-8">&#x00A0;</span><span
  11103. class="cmtt-8">&#x00A0;vector</span><span
  11104. class="cmtt-8">&#x00A0;[v]</span><span
  11105. class="cmtt-8">&#x00A0;element</span><span
  11106. class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
  11107. class="cmtt-8">&#x00A0;+</span>
  11108. <br class="fancyvrb" /><a
  11109. id="x1-111018r9"></a><span
  11110. class="cmr-6">9</span><span
  11111. class="cmtt-8">&#x00A0;</span><span
  11112. class="cmtt-8">&#x00A0;</span><span
  11113. class="cmtt-8">&#x00A0;</span><span
  11114. class="cmtt-8">&#x00A0;</span><span
  11115. class="cmtt-8">&#x00A0;</span><span
  11116. class="cmtt-8">&#x00A0;</span><span
  11117. class="cmtt-8">&#x00A0;</span><span
  11118. class="cmtt-8">&#x00A0;</span><span
  11119. class="cmtt-8">&#x00A0;</span><span
  11120. class="cmtt-8">&#x00A0;</span><span
  11121. class="cmtt-8">&#x00A0;</span><span
  11122. class="cmtt-8">&#x00A0;</span><span
  11123. class="cmtt-8">&#x00A0;</span><span
  11124. class="cmtt-8">&#x00A0;</span><span
  11125. class="cmtt-8">&#x00A0;</span><span
  11126. class="cmtt-8">&#x00A0;</span><span
  11127. class="cmtt-8">&#x00A0;</span><span
  11128. class="cmtt-8">&#x00A0;vector</span><span
  11129. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  11130. class="cmtt-8">&#x00A0;element</span><span
  11131. class="cmtt-8">&#x00A0;[j]</span>
  11132. <br class="fancyvrb" /><a
  11133. id="x1-111020r10"></a><span
  11134. class="cmr-6">10</span><span
  11135. class="cmtt-8">&#x00A0;</span><span
  11136. class="cmtt-8">&#x00A0;</span>
  11137. <br class="fancyvrb" /><a
  11138. id="x1-111022r11"></a><span
  11139. class="cmr-6">11</span><span
  11140. class="cmtt-8">&#x00A0;</span><span
  11141. class="cmtt-8">&#x00A0;</span><span
  11142. class="cmtt-8">&#x00A0;</span><span
  11143. class="cmtt-8">&#x00A0;</span><span
  11144. class="cmtt-8">&#x00A0;</span><span
  11145. class="cmtt-8">&#x00A0;</span><span
  11146. class="cmtt-8">&#x00A0;</span><span
  11147. class="cmtt-8">&#x00A0;</span><span
  11148. class="cmtt-8">&#x00A0;</span><span
  11149. class="cmtt-8">&#x00A0;</span><span
  11150. class="cmtt-8">&#x00A0;}</span>
  11151. <br class="fancyvrb" /><a
  11152. id="x1-111024r12"></a><span
  11153. class="cmr-6">12</span><span
  11154. class="cmtt-8">&#x00A0;</span><span
  11155. class="cmtt-8">&#x00A0;</span>
  11156. <br class="fancyvrb" /><a
  11157. id="x1-111026r13"></a><span
  11158. class="cmr-6">13</span><span
  11159. class="cmtt-8">&#x00A0;</span><span
  11160. class="cmtt-8">&#x00A0;</span><span
  11161. class="cmtt-8">&#x00A0;</span><span
  11162. class="cmtt-8">&#x00A0;</span><span
  11163. class="cmtt-8">&#x00A0;</span><span
  11164. class="cmtt-8">&#x00A0;}</span>
  11165. <br class="fancyvrb" /><a
  11166. id="x1-111028r14"></a><span
  11167. class="cmr-6">14</span><span
  11168. class="cmtt-8">&#x00A0;</span><span
  11169. class="cmtt-8">&#x00A0;</span>
  11170. <br class="fancyvrb" /><a
  11171. id="x1-111030r15"></a><span
  11172. class="cmr-6">15</span><span
  11173. class="cmtt-8">&#x00A0;</span><span
  11174. class="cmtt-8">&#x00A0;</span><span
  11175. class="cmtt-8">&#x00A0;</span><span
  11176. class="cmtt-8">&#x00A0;6)</span><span
  11177. class="cmtt-8">&#x00A0;done</span>
  11178. <br class="fancyvrb" /><a
  11179. id="x1-111032r16"></a><span
  11180. class="cmr-6">16</span><span
  11181. class="cmtt-8">&#x00A0;</span><span
  11182. class="cmtt-8">&#x00A0;</span>
  11183. </div>
  11184. <!--l. 384--><p class="noindent" >
  11185. <h5 class="subsubsectionHead"><span class="titlemark">8.6.4. </span> <a
  11186. id="x1-1120008.6.4"></a>format 1 specifics</h5>
  11187. <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 1&#8217;
  11188. section. The following pseudocode presents the same algorithm. Assume:
  11189. <ul class="itemize1">
  11190. <li class="itemize"><span
  11191. class="cmtt-12">[n] </span>is the value in <span
  11192. class="cmtt-12">[residue_partition_size]</span>
  11193. </li>
  11194. <li class="itemize"><span
  11195. class="cmtt-12">[v] </span>is the residue vector
  11196. </li>
  11197. <li class="itemize"><span
  11198. class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
  11199. <!--l. 398--><p class="noindent" >
  11200. <div class="fancyvrb" id="fancyvrb42">
  11201. <a
  11202. id="x1-112002r1"></a><span
  11203. class="cmr-6">1</span><span
  11204. class="cmtt-8">&#x00A0;</span><span
  11205. class="cmtt-8">&#x00A0;</span><span
  11206. class="cmtt-8">&#x00A0;1)</span><span
  11207. class="cmtt-8">&#x00A0;[i]</span><span
  11208. class="cmtt-8">&#x00A0;=</span><span
  11209. class="cmtt-8">&#x00A0;0</span>
  11210. <br class="fancyvrb" /><a
  11211. id="x1-112004r2"></a><span
  11212. class="cmr-6">2</span><span
  11213. class="cmtt-8">&#x00A0;</span><span
  11214. class="cmtt-8">&#x00A0;</span><span
  11215. class="cmtt-8">&#x00A0;2)</span><span
  11216. class="cmtt-8">&#x00A0;vector</span><span
  11217. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  11218. class="cmtt-8">&#x00A0;=</span><span
  11219. class="cmtt-8">&#x00A0;read</span><span
  11220. class="cmtt-8">&#x00A0;vector</span><span
  11221. class="cmtt-8">&#x00A0;from</span><span
  11222. class="cmtt-8">&#x00A0;packet</span><span
  11223. class="cmtt-8">&#x00A0;using</span><span
  11224. class="cmtt-8">&#x00A0;current</span><span
  11225. class="cmtt-8">&#x00A0;codebook</span><span
  11226. class="cmtt-8">&#x00A0;in</span><span
  11227. class="cmtt-8">&#x00A0;VQ</span><span
  11228. class="cmtt-8">&#x00A0;context</span>
  11229. <br class="fancyvrb" /><a
  11230. id="x1-112006r3"></a><span
  11231. class="cmr-6">3</span><span
  11232. class="cmtt-8">&#x00A0;</span><span
  11233. class="cmtt-8">&#x00A0;</span><span
  11234. class="cmtt-8">&#x00A0;3)</span><span
  11235. class="cmtt-8">&#x00A0;iterate</span><span
  11236. class="cmtt-8">&#x00A0;[j]</span><span
  11237. class="cmtt-8">&#x00A0;over</span><span
  11238. class="cmtt-8">&#x00A0;the</span><span
  11239. class="cmtt-8">&#x00A0;range</span><span
  11240. class="cmtt-8">&#x00A0;0</span><span
  11241. class="cmtt-8">&#x00A0;...</span><span
  11242. class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
  11243. class="cmtt-8">&#x00A0;{</span>
  11244. <br class="fancyvrb" /><a
  11245. id="x1-112008r4"></a><span
  11246. class="cmr-6">4</span><span
  11247. class="cmtt-8">&#x00A0;</span><span
  11248. class="cmtt-8">&#x00A0;</span>
  11249. <br class="fancyvrb" /><a
  11250. id="x1-112010r5"></a><span
  11251. class="cmr-6">5</span><span
  11252. class="cmtt-8">&#x00A0;</span><span
  11253. class="cmtt-8">&#x00A0;</span><span
  11254. class="cmtt-8">&#x00A0;</span><span
  11255. class="cmtt-8">&#x00A0;</span><span
  11256. class="cmtt-8">&#x00A0;</span><span
  11257. class="cmtt-8">&#x00A0;</span><span
  11258. class="cmtt-8">&#x00A0;</span><span
  11259. class="cmtt-8">&#x00A0;4)</span><span
  11260. class="cmtt-8">&#x00A0;vector</span><span
  11261. class="cmtt-8">&#x00A0;[v]</span><span
  11262. class="cmtt-8">&#x00A0;element</span><span
  11263. class="cmtt-8">&#x00A0;([offset]+[i])</span><span
  11264. class="cmtt-8">&#x00A0;=</span>
  11265. <br class="fancyvrb" /><a
  11266. id="x1-112012r6"></a><span
  11267. class="cmr-6">6</span><span
  11268. class="cmtt-8">&#x00A0;</span><span
  11269. class="cmtt-8">&#x00A0; </span><span
  11270. class="cmtt-8">&#x00A0;</span><span
  11271. class="cmtt-8">&#x00A0;vector</span><span
  11272. class="cmtt-8">&#x00A0;[v]</span><span
  11273. class="cmtt-8">&#x00A0;element</span><span
  11274. class="cmtt-8">&#x00A0;([offset]+[i])</span><span
  11275. class="cmtt-8">&#x00A0;+</span>
  11276. <br class="fancyvrb" /><a
  11277. id="x1-112014r7"></a><span
  11278. class="cmr-6">7</span><span
  11279. class="cmtt-8">&#x00A0;</span><span
  11280. class="cmtt-8">&#x00A0;</span><span
  11281. class="cmtt-8">&#x00A0;</span><span
  11282. class="cmtt-8">&#x00A0;</span><span
  11283. class="cmtt-8">&#x00A0;</span><span
  11284. class="cmtt-8">&#x00A0;</span><span
  11285. class="cmtt-8">&#x00A0;</span><span
  11286. class="cmtt-8">&#x00A0;</span><span
  11287. class="cmtt-8">&#x00A0;</span><span
  11288. class="cmtt-8">&#x00A0;</span><span
  11289. class="cmtt-8">&#x00A0;</span><span
  11290. class="cmtt-8">&#x00A0;vector</span><span
  11291. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  11292. class="cmtt-8">&#x00A0;element</span><span
  11293. class="cmtt-8">&#x00A0;[j]</span>
  11294. <br class="fancyvrb" /><a
  11295. id="x1-112016r8"></a><span
  11296. class="cmr-6">8</span><span
  11297. class="cmtt-8">&#x00A0;</span><span
  11298. class="cmtt-8">&#x00A0;</span><span
  11299. class="cmtt-8">&#x00A0;</span><span
  11300. class="cmtt-8">&#x00A0;</span><span
  11301. class="cmtt-8">&#x00A0;</span><span
  11302. class="cmtt-8">&#x00A0;</span><span
  11303. class="cmtt-8">&#x00A0;</span><span
  11304. class="cmtt-8">&#x00A0;5)</span><span
  11305. class="cmtt-8">&#x00A0;increment</span><span
  11306. class="cmtt-8">&#x00A0;[i]</span>
  11307. <br class="fancyvrb" /><a
  11308. id="x1-112018r9"></a><span
  11309. class="cmr-6">9</span><span
  11310. class="cmtt-8">&#x00A0;</span><span
  11311. class="cmtt-8">&#x00A0;</span>
  11312. <br class="fancyvrb" /><a
  11313. id="x1-112020r10"></a><span
  11314. class="cmr-6">10</span><span
  11315. class="cmtt-8">&#x00A0;</span><span
  11316. class="cmtt-8">&#x00A0;</span><span
  11317. class="cmtt-8">&#x00A0;</span><span
  11318. class="cmtt-8">&#x00A0;</span><span
  11319. class="cmtt-8">&#x00A0;</span><span
  11320. class="cmtt-8">&#x00A0;}</span>
  11321. <br class="fancyvrb" /><a
  11322. id="x1-112022r11"></a><span
  11323. class="cmr-6">11</span><span
  11324. class="cmtt-8">&#x00A0;</span><span
  11325. class="cmtt-8">&#x00A0;</span>
  11326. <br class="fancyvrb" /><a
  11327. id="x1-112024r12"></a><span
  11328. class="cmr-6">12</span><span
  11329. class="cmtt-8">&#x00A0;</span><span
  11330. class="cmtt-8">&#x00A0;</span><span
  11331. class="cmtt-8">&#x00A0;</span><span
  11332. class="cmtt-8">&#x00A0;6)</span><span
  11333. class="cmtt-8">&#x00A0;if</span><span
  11334. class="cmtt-8">&#x00A0;(</span><span
  11335. class="cmtt-8">&#x00A0;[i]</span><span
  11336. class="cmtt-8">&#x00A0;is</span><span
  11337. class="cmtt-8">&#x00A0;less</span><span
  11338. class="cmtt-8">&#x00A0;than</span><span
  11339. class="cmtt-8">&#x00A0;[n]</span><span
  11340. class="cmtt-8">&#x00A0;)</span><span
  11341. class="cmtt-8">&#x00A0;continue</span><span
  11342. class="cmtt-8">&#x00A0;at</span><span
  11343. class="cmtt-8">&#x00A0;step</span><span
  11344. class="cmtt-8">&#x00A0;2</span>
  11345. <br class="fancyvrb" /><a
  11346. id="x1-112026r13"></a><span
  11347. class="cmr-6">13</span><span
  11348. class="cmtt-8">&#x00A0;</span><span
  11349. class="cmtt-8">&#x00A0;</span><span
  11350. class="cmtt-8">&#x00A0;</span><span
  11351. class="cmtt-8">&#x00A0;7)</span><span
  11352. class="cmtt-8">&#x00A0;done</span>
  11353. </div>
  11354. <!--l. 416--><p class="noindent" >
  11355. <h5 class="subsubsectionHead"><span class="titlemark">8.6.5. </span> <a
  11356. id="x1-1130008.6.5"></a>format 2 specifics</h5>
  11357. <!--l. 418--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
  11358. additional post-decode step after a normal format 1 decode.
  11359. <!--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
  11360. &#8217;do not decode&#8217;, no decode occurrs. However, if at least one vector is to be decoded, all
  11361. the vectors are decoded. We then request normal format 1 to decode a single vector
  11362. representing all output channels, rather than a vector for each channel. After decode,
  11363. deinterleave the vector into independent vectors, one for each output channel. That
  11364. is:
  11365. <!--l. 429--><p class="noindent" >
  11366. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  11367. 1. </dt><dd
  11368. class="enumerate-enumitem">If all vectors 0 through <span
  11369. class="cmti-12">ch</span>-1 are marked &#8217;do not decode&#8217;, allocate and clear a single
  11370. vector <span
  11371. class="cmtt-12">[v]</span>of length <span
  11372. class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
  11373. step.
  11374. </dd><dt class="enumerate-enumitem">
  11375. 2. </dt><dd
  11376. class="enumerate-enumitem">Rather than performing format 1 decode to produce <span
  11377. class="cmti-12">ch </span>vectors of length <span
  11378. class="cmti-12">n </span>each, call
  11379. format 1 decode to produce a single vector <span
  11380. class="cmtt-12">[v] </span>of length <span
  11381. class="cmti-12">ch*n</span>.
  11382. </dd><dt class="enumerate-enumitem">
  11383. 3. </dt><dd
  11384. class="enumerate-enumitem">Post decode: Deinterleave the single vector <span
  11385. class="cmtt-12">[v] </span>returned by format 1 decode as
  11386. described above into <span
  11387. class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
  11388. to:
  11389. <div class="fancyvrb" id="fancyvrb43">
  11390. <a
  11391. id="x1-113005r1"></a><span
  11392. class="cmr-6">1</span><span
  11393. class="cmtt-8">&#x00A0;</span><span
  11394. class="cmtt-8">&#x00A0;</span><span
  11395. class="cmtt-8">&#x00A0;</span><span
  11396. class="cmtt-8">&#x00A0;1)</span><span
  11397. class="cmtt-8">&#x00A0;iterate</span><span
  11398. class="cmtt-8">&#x00A0;[i]</span><span
  11399. class="cmtt-8">&#x00A0;over</span><span
  11400. class="cmtt-8">&#x00A0;the</span><span
  11401. class="cmtt-8">&#x00A0;range</span><span
  11402. class="cmtt-8">&#x00A0;0</span><span
  11403. class="cmtt-8">&#x00A0;...</span><span
  11404. class="cmtt-8">&#x00A0;[n]-1</span><span
  11405. class="cmtt-8">&#x00A0;{</span>
  11406. <br class="fancyvrb" /><a
  11407. id="x1-113007r2"></a><span
  11408. class="cmr-6">2</span><span
  11409. class="cmtt-8">&#x00A0;</span><span
  11410. class="cmtt-8">&#x00A0;</span>
  11411. <br class="fancyvrb" /><a
  11412. id="x1-113009r3"></a><span
  11413. class="cmr-6">3</span><span
  11414. class="cmtt-8">&#x00A0;</span><span
  11415. class="cmtt-8">&#x00A0;</span><span
  11416. class="cmtt-8">&#x00A0;</span><span
  11417. class="cmtt-8">&#x00A0;</span><span
  11418. class="cmtt-8">&#x00A0;</span><span
  11419. class="cmtt-8">&#x00A0;</span><span
  11420. class="cmtt-8">&#x00A0;</span><span
  11421. class="cmtt-8">&#x00A0;</span><span
  11422. class="cmtt-8">&#x00A0;2)</span><span
  11423. class="cmtt-8">&#x00A0;iterate</span><span
  11424. class="cmtt-8">&#x00A0;[j]</span><span
  11425. class="cmtt-8">&#x00A0;over</span><span
  11426. class="cmtt-8">&#x00A0;the</span><span
  11427. class="cmtt-8">&#x00A0;range</span><span
  11428. class="cmtt-8">&#x00A0;0</span><span
  11429. class="cmtt-8">&#x00A0;...</span><span
  11430. class="cmtt-8">&#x00A0;[ch]-1</span><span
  11431. class="cmtt-8">&#x00A0;{</span>
  11432. <br class="fancyvrb" /><a
  11433. id="x1-113011r4"></a><span
  11434. class="cmr-6">4</span><span
  11435. class="cmtt-8">&#x00A0;</span><span
  11436. class="cmtt-8">&#x00A0;</span>
  11437. <br class="fancyvrb" /><a
  11438. id="x1-113013r5"></a><span
  11439. class="cmr-6">5</span><span
  11440. class="cmtt-8">&#x00A0;</span><span
  11441. class="cmtt-8">&#x00A0;</span><span
  11442. class="cmtt-8">&#x00A0;</span><span
  11443. class="cmtt-8">&#x00A0;</span><span
  11444. class="cmtt-8">&#x00A0;</span><span
  11445. class="cmtt-8">&#x00A0;</span><span
  11446. class="cmtt-8">&#x00A0;</span><span
  11447. class="cmtt-8">&#x00A0;</span><span
  11448. class="cmtt-8">&#x00A0;</span><span
  11449. class="cmtt-8">&#x00A0;</span><span
  11450. class="cmtt-8">&#x00A0;</span><span
  11451. class="cmtt-8">&#x00A0;</span><span
  11452. class="cmtt-8">&#x00A0;</span><span
  11453. class="cmtt-8">&#x00A0;3)</span><span
  11454. class="cmtt-8">&#x00A0;output</span><span
  11455. class="cmtt-8">&#x00A0;vector</span><span
  11456. class="cmtt-8">&#x00A0;number</span><span
  11457. class="cmtt-8">&#x00A0;[j]</span><span
  11458. class="cmtt-8">&#x00A0;element</span><span
  11459. class="cmtt-8">&#x00A0;[i]</span><span
  11460. class="cmtt-8">&#x00A0;=</span><span
  11461. class="cmtt-8">&#x00A0;vector</span><span
  11462. class="cmtt-8">&#x00A0;[v]</span><span
  11463. class="cmtt-8">&#x00A0;element</span><span
  11464. class="cmtt-8">&#x00A0;([i]</span><span
  11465. class="cmtt-8">&#x00A0;*</span><span
  11466. class="cmtt-8">&#x00A0;[ch]</span><span
  11467. class="cmtt-8">&#x00A0;+</span><span
  11468. class="cmtt-8">&#x00A0;[j])</span>
  11469. <br class="fancyvrb" /><a
  11470. id="x1-113015r6"></a><span
  11471. class="cmr-6">6</span><span
  11472. class="cmtt-8">&#x00A0;</span><span
  11473. class="cmtt-8">&#x00A0;</span>
  11474. <br class="fancyvrb" /><a
  11475. id="x1-113017r7"></a><span
  11476. class="cmr-6">7</span><span
  11477. class="cmtt-8">&#x00A0;</span><span
  11478. class="cmtt-8">&#x00A0;</span><span
  11479. class="cmtt-8">&#x00A0;</span><span
  11480. class="cmtt-8">&#x00A0;</span><span
  11481. class="cmtt-8">&#x00A0;</span><span
  11482. class="cmtt-8">&#x00A0;</span><span
  11483. class="cmtt-8">&#x00A0;</span><span
  11484. class="cmtt-8">&#x00A0;</span><span
  11485. class="cmtt-8">&#x00A0;</span><span
  11486. class="cmtt-8">&#x00A0;</span><span
  11487. class="cmtt-8">&#x00A0;</span><span
  11488. class="cmtt-8">&#x00A0;}</span>
  11489. <br class="fancyvrb" /><a
  11490. id="x1-113019r8"></a><span
  11491. class="cmr-6">8</span><span
  11492. class="cmtt-8">&#x00A0;</span><span
  11493. class="cmtt-8">&#x00A0;</span><span
  11494. class="cmtt-8">&#x00A0;</span><span
  11495. class="cmtt-8">&#x00A0;</span><span
  11496. class="cmtt-8">&#x00A0;</span><span
  11497. class="cmtt-8">&#x00A0;</span><span
  11498. class="cmtt-8">&#x00A0;}</span>
  11499. <br class="fancyvrb" /><a
  11500. id="x1-113021r9"></a><span
  11501. class="cmr-6">9</span><span
  11502. class="cmtt-8">&#x00A0;</span><span
  11503. class="cmtt-8">&#x00A0;</span>
  11504. <br class="fancyvrb" /><a
  11505. id="x1-113023r10"></a><span
  11506. class="cmr-6">10</span><span
  11507. class="cmtt-8">&#x00A0;</span><span
  11508. class="cmtt-8">&#x00A0;</span><span
  11509. class="cmtt-8">&#x00A0;</span><span
  11510. class="cmtt-8">&#x00A0;4)</span><span
  11511. class="cmtt-8">&#x00A0;done</span>
  11512. </div>
  11513. </dd></dl>
  11514. <h3 class="sectionHead"><span class="titlemark">9. </span> <a
  11515. id="x1-1140009"></a>Helper equations</h3>
  11516. <!--l. 6--><p class="noindent" >
  11517. <h4 class="subsectionHead"><span class="titlemark">9.1. </span> <a
  11518. id="x1-1150009.1"></a>Overview</h4>
  11519. <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
  11520. cluttering up the main specification documents, they are defined here and referenced where
  11521. appropriate.
  11522. <!--l. 13--><p class="noindent" >
  11523. <h4 class="subsectionHead"><span class="titlemark">9.2. </span> <a
  11524. id="x1-1160009.2"></a>Functions</h4>
  11525. <!--l. 15--><p class="noindent" >
  11526. <h5 class="subsubsectionHead"><span class="titlemark">9.2.1. </span> <a
  11527. id="x1-1170009.2.1"></a>ilog</h5>
  11528. <!--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
  11529. two&#8217;s complement integer value <span
  11530. class="cmtt-12">[x]</span>. Values of <span
  11531. class="cmtt-12">[x] </span>less than zero are defined to return
  11532. zero.
  11533. <!--l. 20--><p class="noindent" >
  11534. <div class="fancyvrb" id="fancyvrb44">
  11535. <a
  11536. id="x1-117002r1"></a><span
  11537. class="cmr-6">1</span><span
  11538. class="cmtt-8">&#x00A0;</span><span
  11539. class="cmtt-8">&#x00A0;</span><span
  11540. class="cmtt-8">&#x00A0;</span><span
  11541. class="cmtt-8">&#x00A0;1)</span><span
  11542. class="cmtt-8">&#x00A0;[return\_value]</span><span
  11543. class="cmtt-8">&#x00A0;=</span><span
  11544. class="cmtt-8">&#x00A0;0;</span>
  11545. <br class="fancyvrb" /><a
  11546. id="x1-117004r2"></a><span
  11547. class="cmr-6">2</span><span
  11548. class="cmtt-8">&#x00A0;</span><span
  11549. class="cmtt-8">&#x00A0;</span><span
  11550. class="cmtt-8">&#x00A0;</span><span
  11551. class="cmtt-8">&#x00A0;2)</span><span
  11552. class="cmtt-8">&#x00A0;if</span><span
  11553. class="cmtt-8">&#x00A0;(</span><span
  11554. class="cmtt-8">&#x00A0;[x]</span><span
  11555. class="cmtt-8">&#x00A0;is</span><span
  11556. class="cmtt-8">&#x00A0;greater</span><span
  11557. class="cmtt-8">&#x00A0;than</span><span
  11558. class="cmtt-8">&#x00A0;zero</span><span
  11559. class="cmtt-8">&#x00A0;)</span><span
  11560. class="cmtt-8">&#x00A0;{</span>
  11561. <br class="fancyvrb" /><a
  11562. id="x1-117006r3"></a><span
  11563. class="cmr-6">3</span><span
  11564. class="cmtt-8">&#x00A0;</span><span
  11565. class="cmtt-8">&#x00A0;</span>
  11566. <br class="fancyvrb" /><a
  11567. id="x1-117008r4"></a><span
  11568. class="cmr-6">4</span><span
  11569. class="cmtt-8">&#x00A0;</span><span
  11570. class="cmtt-8">&#x00A0;</span><span
  11571. class="cmtt-8">&#x00A0;</span><span
  11572. class="cmtt-8">&#x00A0;</span><span
  11573. class="cmtt-8">&#x00A0;</span><span
  11574. class="cmtt-8">&#x00A0;</span><span
  11575. class="cmtt-8">&#x00A0;</span><span
  11576. class="cmtt-8">&#x00A0;</span><span
  11577. class="cmtt-8">&#x00A0;3)</span><span
  11578. class="cmtt-8">&#x00A0;increment</span><span
  11579. class="cmtt-8">&#x00A0;[return\_value];</span>
  11580. <br class="fancyvrb" /><a
  11581. id="x1-117010r5"></a><span
  11582. class="cmr-6">5</span><span
  11583. class="cmtt-8">&#x00A0;</span><span
  11584. class="cmtt-8">&#x00A0;</span><span
  11585. class="cmtt-8">&#x00A0;</span><span
  11586. class="cmtt-8">&#x00A0;</span><span
  11587. class="cmtt-8">&#x00A0;</span><span
  11588. class="cmtt-8">&#x00A0;</span><span
  11589. class="cmtt-8">&#x00A0;</span><span
  11590. class="cmtt-8">&#x00A0;</span><span
  11591. class="cmtt-8">&#x00A0;4)</span><span
  11592. class="cmtt-8">&#x00A0;logical</span><span
  11593. class="cmtt-8">&#x00A0;shift</span><span
  11594. class="cmtt-8">&#x00A0;[x]</span><span
  11595. class="cmtt-8">&#x00A0;one</span><span
  11596. class="cmtt-8">&#x00A0;bit</span><span
  11597. class="cmtt-8">&#x00A0;to</span><span
  11598. class="cmtt-8">&#x00A0;the</span><span
  11599. class="cmtt-8">&#x00A0;right,</span><span
  11600. class="cmtt-8">&#x00A0;padding</span><span
  11601. class="cmtt-8">&#x00A0;the</span><span
  11602. class="cmtt-8">&#x00A0;MSb</span><span
  11603. class="cmtt-8">&#x00A0;with</span><span
  11604. class="cmtt-8">&#x00A0;zero</span>
  11605. <br class="fancyvrb" /><a
  11606. id="x1-117012r6"></a><span
  11607. class="cmr-6">6</span><span
  11608. class="cmtt-8">&#x00A0;</span><span
  11609. class="cmtt-8">&#x00A0;</span><span
  11610. class="cmtt-8">&#x00A0;</span><span
  11611. class="cmtt-8">&#x00A0;</span><span
  11612. class="cmtt-8">&#x00A0;</span><span
  11613. class="cmtt-8">&#x00A0;</span><span
  11614. class="cmtt-8">&#x00A0;</span><span
  11615. class="cmtt-8">&#x00A0;</span><span
  11616. class="cmtt-8">&#x00A0;5)</span><span
  11617. class="cmtt-8">&#x00A0;repeat</span><span
  11618. class="cmtt-8">&#x00A0;at</span><span
  11619. class="cmtt-8">&#x00A0;step</span><span
  11620. class="cmtt-8">&#x00A0;2)</span>
  11621. <br class="fancyvrb" /><a
  11622. id="x1-117014r7"></a><span
  11623. class="cmr-6">7</span><span
  11624. class="cmtt-8">&#x00A0;</span><span
  11625. class="cmtt-8">&#x00A0;</span>
  11626. <br class="fancyvrb" /><a
  11627. id="x1-117016r8"></a><span
  11628. class="cmr-6">8</span><span
  11629. class="cmtt-8">&#x00A0;</span><span
  11630. class="cmtt-8">&#x00A0;</span><span
  11631. class="cmtt-8">&#x00A0;</span><span
  11632. class="cmtt-8">&#x00A0;</span><span
  11633. class="cmtt-8">&#x00A0;</span><span
  11634. class="cmtt-8">&#x00A0;</span><span
  11635. class="cmtt-8">&#x00A0;}</span>
  11636. <br class="fancyvrb" /><a
  11637. id="x1-117018r9"></a><span
  11638. class="cmr-6">9</span><span
  11639. class="cmtt-8">&#x00A0;</span><span
  11640. class="cmtt-8">&#x00A0;</span>
  11641. <br class="fancyvrb" /><a
  11642. id="x1-117020r10"></a><span
  11643. class="cmr-6">10</span><span
  11644. class="cmtt-8">&#x00A0;</span><span
  11645. class="cmtt-8">&#x00A0;</span><span
  11646. class="cmtt-8">&#x00A0;</span><span
  11647. class="cmtt-8">&#x00A0;</span><span
  11648. class="cmtt-8">&#x00A0;6)</span><span
  11649. class="cmtt-8">&#x00A0;done</span>
  11650. </div>
  11651. <!--l. 33--><p class="noindent" >Examples:
  11652. <ul class="itemize1">
  11653. <li class="itemize">ilog(0) = 0;
  11654. </li>
  11655. <li class="itemize">ilog(1) = 1;
  11656. </li>
  11657. <li class="itemize">ilog(2) = 2;
  11658. </li>
  11659. <li class="itemize">ilog(3) = 2;
  11660. </li>
  11661. <li class="itemize">ilog(4) = 3;
  11662. </li>
  11663. <li class="itemize">ilog(7) = 3;
  11664. </li>
  11665. <li class="itemize">ilog(negative number) = 0;</li></ul>
  11666. <!--l. 48--><p class="noindent" >
  11667. <h5 class="subsubsectionHead"><span class="titlemark">9.2.2. </span> <a
  11668. id="x1-1180009.2.2"></a>float32_unpack</h5>
  11669. <!--l. 50--><p class="noindent" >&#8221;float32_unpack(x)&#8221; is intended to translate the packed binary representation of a Vorbis
  11670. codebook float value into the representation used by the decoder for floating point numbers. For
  11671. purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
  11672. number.
  11673. <!--l. 56--><p class="noindent" >
  11674. <div class="fancyvrb" id="fancyvrb45">
  11675. <a
  11676. id="x1-118002r1"></a><span
  11677. class="cmr-6">1</span><span
  11678. class="cmtt-8">&#x00A0;</span><span
  11679. class="cmtt-8">&#x00A0;</span><span
  11680. class="cmtt-8">&#x00A0;</span><span
  11681. class="cmtt-8">&#x00A0;1)</span><span
  11682. class="cmtt-8">&#x00A0;[mantissa]</span><span
  11683. class="cmtt-8">&#x00A0;=</span><span
  11684. class="cmtt-8">&#x00A0;[x]</span><span
  11685. class="cmtt-8">&#x00A0;bitwise</span><span
  11686. class="cmtt-8">&#x00A0;AND</span><span
  11687. class="cmtt-8">&#x00A0;0x1fffff</span><span
  11688. class="cmtt-8">&#x00A0;(unsigned</span><span
  11689. class="cmtt-8">&#x00A0;result)</span>
  11690. <br class="fancyvrb" /><a
  11691. id="x1-118004r2"></a><span
  11692. class="cmr-6">2</span><span
  11693. class="cmtt-8">&#x00A0;</span><span
  11694. class="cmtt-8">&#x00A0;</span><span
  11695. class="cmtt-8">&#x00A0;</span><span
  11696. class="cmtt-8">&#x00A0;2)</span><span
  11697. class="cmtt-8">&#x00A0;[sign]</span><span
  11698. class="cmtt-8">&#x00A0;=</span><span
  11699. class="cmtt-8">&#x00A0;[x]</span><span
  11700. class="cmtt-8">&#x00A0;bitwise</span><span
  11701. class="cmtt-8">&#x00A0;AND</span><span
  11702. class="cmtt-8">&#x00A0;0x80000000</span><span
  11703. class="cmtt-8">&#x00A0;(unsigned</span><span
  11704. class="cmtt-8">&#x00A0;result)</span>
  11705. <br class="fancyvrb" /><a
  11706. id="x1-118006r3"></a><span
  11707. class="cmr-6">3</span><span
  11708. class="cmtt-8">&#x00A0;</span><span
  11709. class="cmtt-8">&#x00A0;</span><span
  11710. class="cmtt-8">&#x00A0;</span><span
  11711. class="cmtt-8">&#x00A0;3)</span><span
  11712. class="cmtt-8">&#x00A0;[exponent]</span><span
  11713. class="cmtt-8">&#x00A0;=</span><span
  11714. class="cmtt-8">&#x00A0;(</span><span
  11715. class="cmtt-8">&#x00A0;[x]</span><span
  11716. class="cmtt-8">&#x00A0;bitwise</span><span
  11717. class="cmtt-8">&#x00A0;AND</span><span
  11718. class="cmtt-8">&#x00A0;0x7fe00000)</span><span
  11719. class="cmtt-8">&#x00A0;shifted</span><span
  11720. class="cmtt-8">&#x00A0;right</span><span
  11721. class="cmtt-8">&#x00A0;21</span><span
  11722. class="cmtt-8">&#x00A0;bits</span><span
  11723. class="cmtt-8">&#x00A0;(unsigned</span><span
  11724. class="cmtt-8">&#x00A0;result)</span>
  11725. <br class="fancyvrb" /><a
  11726. id="x1-118008r4"></a><span
  11727. class="cmr-6">4</span><span
  11728. class="cmtt-8">&#x00A0;</span><span
  11729. class="cmtt-8">&#x00A0;</span><span
  11730. class="cmtt-8">&#x00A0;</span><span
  11731. class="cmtt-8">&#x00A0;4)</span><span
  11732. class="cmtt-8">&#x00A0;if</span><span
  11733. class="cmtt-8">&#x00A0;(</span><span
  11734. class="cmtt-8">&#x00A0;[sign]</span><span
  11735. class="cmtt-8">&#x00A0;is</span><span
  11736. class="cmtt-8">&#x00A0;nonzero</span><span
  11737. class="cmtt-8">&#x00A0;)</span><span
  11738. class="cmtt-8">&#x00A0;then</span><span
  11739. class="cmtt-8">&#x00A0;negate</span><span
  11740. class="cmtt-8">&#x00A0;[mantissa]</span>
  11741. <br class="fancyvrb" /><a
  11742. id="x1-118010r5"></a><span
  11743. class="cmr-6">5</span><span
  11744. class="cmtt-8">&#x00A0;</span><span
  11745. class="cmtt-8">&#x00A0;</span><span
  11746. class="cmtt-8">&#x00A0;</span><span
  11747. class="cmtt-8">&#x00A0;5)</span><span
  11748. class="cmtt-8">&#x00A0;return</span><span
  11749. class="cmtt-8">&#x00A0;[mantissa]</span><span
  11750. class="cmtt-8">&#x00A0;*</span><span
  11751. class="cmtt-8">&#x00A0;(</span><span
  11752. class="cmtt-8">&#x00A0;2</span><span
  11753. class="cmtt-8">&#x00A0;^</span><span
  11754. class="cmtt-8">&#x00A0;(</span><span
  11755. class="cmtt-8">&#x00A0;[exponent]</span><span
  11756. class="cmtt-8">&#x00A0;-</span><span
  11757. class="cmtt-8">&#x00A0;788</span><span
  11758. class="cmtt-8">&#x00A0;)</span><span
  11759. class="cmtt-8">&#x00A0;)</span>
  11760. </div>
  11761. <!--l. 66--><p class="noindent" >
  11762. <h5 class="subsubsectionHead"><span class="titlemark">9.2.3. </span> <a
  11763. id="x1-1190009.2.3"></a>lookup1_values</h5>
  11764. <!--l. 68--><p class="noindent" >&#8221;lookup1_values(codebook_entries,codebook_dimensions)&#8221; is used to compute the
  11765. correct length of the value index for a codebook VQ lookup table of lookup type 1.
  11766. The values on this list are permuted to construct the VQ vector lookup table of size
  11767. <span
  11768. class="cmtt-12">[codebook_entries]</span>.
  11769. <!--l. 74--><p class="noindent" >The return value for this function is defined to be &#8217;the greatest integer value for which
  11770. <span
  11771. class="cmtt-12">[return_value] </span>to the power of <span
  11772. class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
  11773. <span
  11774. class="cmtt-12">[codebook_entries]</span>&#8217;.
  11775. <!--l. 81--><p class="noindent" >
  11776. <h5 class="subsubsectionHead"><span class="titlemark">9.2.4. </span> <a
  11777. id="x1-1200009.2.4"></a>low_neighbor</h5>
  11778. <!--l. 83--><p class="noindent" >&#8221;low_neighbor(v,x)&#8221; finds the position <span
  11779. class="cmtt-12">n </span>in vector <span
  11780. class="cmtt-12">[v] </span>of the greatest value scalar element for
  11781. which <span
  11782. class="cmtt-12">n </span>is less than <span
  11783. class="cmtt-12">[x] </span>and vector <span
  11784. class="cmtt-12">[v] </span>element <span
  11785. class="cmtt-12">n </span>is less than vector <span
  11786. class="cmtt-12">[v] </span>element
  11787. <span
  11788. class="cmtt-12">[x]</span>.
  11789. <!--l. 88--><p class="noindent" >
  11790. <h5 class="subsubsectionHead"><span class="titlemark">9.2.5. </span> <a
  11791. id="x1-1210009.2.5"></a>high_neighbor</h5>
  11792. <!--l. 90--><p class="noindent" >&#8221;high_neighbor(v,x)&#8221; finds the position <span
  11793. class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
  11794. which <span
  11795. class="cmtt-12">n </span>is less than <span
  11796. class="cmtt-12">[x] </span>and vector <span
  11797. class="cmtt-12">[v] </span>element <span
  11798. class="cmtt-12">n </span>is greater than vector <span
  11799. class="cmtt-12">[v] </span>element
  11800. <span
  11801. class="cmtt-12">[x]</span>.
  11802. <!--l. 97--><p class="noindent" >
  11803. <h5 class="subsubsectionHead"><span class="titlemark">9.2.6. </span> <a
  11804. id="x1-1220009.2.6"></a>render_point</h5>
  11805. <!--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
  11806. x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
  11807. calculating intervening values along the line.
  11808. <!--l. 104--><p class="noindent" >
  11809. <div class="fancyvrb" id="fancyvrb46">
  11810. <a
  11811. id="x1-122002r1"></a><span
  11812. class="cmr-6">1</span><span
  11813. class="cmtt-8">&#x00A0;</span><span
  11814. class="cmtt-8">&#x00A0;</span><span
  11815. class="cmtt-8">&#x00A0;</span><span
  11816. class="cmtt-8">&#x00A0;1)</span><span
  11817. class="cmtt-8">&#x00A0;</span><span
  11818. class="cmtt-8">&#x00A0;[dy]</span><span
  11819. class="cmtt-8">&#x00A0;=</span><span
  11820. class="cmtt-8">&#x00A0;[y1]</span><span
  11821. class="cmtt-8">&#x00A0;-</span><span
  11822. class="cmtt-8">&#x00A0;[y0]</span>
  11823. <br class="fancyvrb" /><a
  11824. id="x1-122004r2"></a><span
  11825. class="cmr-6">2</span><span
  11826. class="cmtt-8">&#x00A0;</span><span
  11827. class="cmtt-8">&#x00A0;</span><span
  11828. class="cmtt-8">&#x00A0;</span><span
  11829. class="cmtt-8">&#x00A0;2)</span><span
  11830. class="cmtt-8">&#x00A0;[adx]</span><span
  11831. class="cmtt-8">&#x00A0;=</span><span
  11832. class="cmtt-8">&#x00A0;[x1]</span><span
  11833. class="cmtt-8">&#x00A0;-</span><span
  11834. class="cmtt-8">&#x00A0;[x0]</span>
  11835. <br class="fancyvrb" /><a
  11836. id="x1-122006r3"></a><span
  11837. class="cmr-6">3</span><span
  11838. class="cmtt-8">&#x00A0;</span><span
  11839. class="cmtt-8">&#x00A0;</span><span
  11840. class="cmtt-8">&#x00A0;</span><span
  11841. class="cmtt-8">&#x00A0;3)</span><span
  11842. class="cmtt-8">&#x00A0;[ady]</span><span
  11843. class="cmtt-8">&#x00A0;=</span><span
  11844. class="cmtt-8">&#x00A0;absolute</span><span
  11845. class="cmtt-8">&#x00A0;value</span><span
  11846. class="cmtt-8">&#x00A0;of</span><span
  11847. class="cmtt-8">&#x00A0;[dy]</span>
  11848. <br class="fancyvrb" /><a
  11849. id="x1-122008r4"></a><span
  11850. class="cmr-6">4</span><span
  11851. class="cmtt-8">&#x00A0;</span><span
  11852. class="cmtt-8">&#x00A0;</span><span
  11853. class="cmtt-8">&#x00A0;</span><span
  11854. class="cmtt-8">&#x00A0;4)</span><span
  11855. class="cmtt-8">&#x00A0;[err]</span><span
  11856. class="cmtt-8">&#x00A0;=</span><span
  11857. class="cmtt-8">&#x00A0;[ady]</span><span
  11858. class="cmtt-8">&#x00A0;*</span><span
  11859. class="cmtt-8">&#x00A0;([X]</span><span
  11860. class="cmtt-8">&#x00A0;-</span><span
  11861. class="cmtt-8">&#x00A0;[x0])</span>
  11862. <br class="fancyvrb" /><a
  11863. id="x1-122010r5"></a><span
  11864. class="cmr-6">5</span><span
  11865. class="cmtt-8">&#x00A0;</span><span
  11866. class="cmtt-8">&#x00A0;</span><span
  11867. class="cmtt-8">&#x00A0;</span><span
  11868. class="cmtt-8">&#x00A0;5)</span><span
  11869. class="cmtt-8">&#x00A0;[off]</span><span
  11870. class="cmtt-8">&#x00A0;=</span><span
  11871. class="cmtt-8">&#x00A0;[err]</span><span
  11872. class="cmtt-8">&#x00A0;/</span><span
  11873. class="cmtt-8">&#x00A0;[adx]</span><span
  11874. class="cmtt-8">&#x00A0;using</span><span
  11875. class="cmtt-8">&#x00A0;integer</span><span
  11876. class="cmtt-8">&#x00A0;division</span>
  11877. <br class="fancyvrb" /><a
  11878. id="x1-122012r6"></a><span
  11879. class="cmr-6">6</span><span
  11880. class="cmtt-8">&#x00A0;</span><span
  11881. class="cmtt-8">&#x00A0;</span><span
  11882. class="cmtt-8">&#x00A0;</span><span
  11883. class="cmtt-8">&#x00A0;6)</span><span
  11884. class="cmtt-8">&#x00A0;if</span><span
  11885. class="cmtt-8">&#x00A0;(</span><span
  11886. class="cmtt-8">&#x00A0;[dy]</span><span
  11887. class="cmtt-8">&#x00A0;is</span><span
  11888. class="cmtt-8">&#x00A0;less</span><span
  11889. class="cmtt-8">&#x00A0;than</span><span
  11890. class="cmtt-8">&#x00A0;zero</span><span
  11891. class="cmtt-8">&#x00A0;)</span><span
  11892. class="cmtt-8">&#x00A0;{</span>
  11893. <br class="fancyvrb" /><a
  11894. id="x1-122014r7"></a><span
  11895. class="cmr-6">7</span><span
  11896. class="cmtt-8">&#x00A0;</span><span
  11897. class="cmtt-8">&#x00A0;</span>
  11898. <br class="fancyvrb" /><a
  11899. id="x1-122016r8"></a><span
  11900. class="cmr-6">8</span><span
  11901. class="cmtt-8">&#x00A0;</span><span
  11902. class="cmtt-8">&#x00A0;</span><span
  11903. class="cmtt-8">&#x00A0;</span><span
  11904. class="cmtt-8">&#x00A0;</span><span
  11905. class="cmtt-8">&#x00A0;</span><span
  11906. class="cmtt-8">&#x00A0;</span><span
  11907. class="cmtt-8">&#x00A0;</span><span
  11908. class="cmtt-8">&#x00A0;</span><span
  11909. class="cmtt-8">&#x00A0;7)</span><span
  11910. class="cmtt-8">&#x00A0;[Y]</span><span
  11911. class="cmtt-8">&#x00A0;=</span><span
  11912. class="cmtt-8">&#x00A0;[y0]</span><span
  11913. class="cmtt-8">&#x00A0;-</span><span
  11914. class="cmtt-8">&#x00A0;[off]</span>
  11915. <br class="fancyvrb" /><a
  11916. id="x1-122018r9"></a><span
  11917. class="cmr-6">9</span><span
  11918. class="cmtt-8">&#x00A0;</span><span
  11919. class="cmtt-8">&#x00A0;</span>
  11920. <br class="fancyvrb" /><a
  11921. id="x1-122020r10"></a><span
  11922. class="cmr-6">10</span><span
  11923. class="cmtt-8">&#x00A0;</span><span
  11924. class="cmtt-8">&#x00A0;</span><span
  11925. class="cmtt-8">&#x00A0;</span><span
  11926. class="cmtt-8">&#x00A0;</span><span
  11927. class="cmtt-8">&#x00A0;</span><span
  11928. class="cmtt-8">&#x00A0;</span><span
  11929. class="cmtt-8">&#x00A0;}</span><span
  11930. class="cmtt-8">&#x00A0;else</span><span
  11931. class="cmtt-8">&#x00A0;{</span>
  11932. <br class="fancyvrb" /><a
  11933. id="x1-122022r11"></a><span
  11934. class="cmr-6">11</span><span
  11935. class="cmtt-8">&#x00A0;</span><span
  11936. class="cmtt-8">&#x00A0;</span>
  11937. <br class="fancyvrb" /><a
  11938. id="x1-122024r12"></a><span
  11939. class="cmr-6">12</span><span
  11940. class="cmtt-8">&#x00A0;</span><span
  11941. class="cmtt-8">&#x00A0;</span><span
  11942. class="cmtt-8">&#x00A0;</span><span
  11943. class="cmtt-8">&#x00A0;</span><span
  11944. class="cmtt-8">&#x00A0;</span><span
  11945. class="cmtt-8">&#x00A0;</span><span
  11946. class="cmtt-8">&#x00A0;</span><span
  11947. class="cmtt-8">&#x00A0;</span><span
  11948. class="cmtt-8">&#x00A0;8)</span><span
  11949. class="cmtt-8">&#x00A0;[Y]</span><span
  11950. class="cmtt-8">&#x00A0;=</span><span
  11951. class="cmtt-8">&#x00A0;[y0]</span><span
  11952. class="cmtt-8">&#x00A0;+</span><span
  11953. class="cmtt-8">&#x00A0;[off]</span>
  11954. <br class="fancyvrb" /><a
  11955. id="x1-122026r13"></a><span
  11956. class="cmr-6">13</span><span
  11957. class="cmtt-8">&#x00A0;</span><span
  11958. class="cmtt-8">&#x00A0;</span>
  11959. <br class="fancyvrb" /><a
  11960. id="x1-122028r14"></a><span
  11961. class="cmr-6">14</span><span
  11962. class="cmtt-8">&#x00A0;</span><span
  11963. class="cmtt-8">&#x00A0;</span><span
  11964. class="cmtt-8">&#x00A0;</span><span
  11965. class="cmtt-8">&#x00A0;</span><span
  11966. class="cmtt-8">&#x00A0;</span><span
  11967. class="cmtt-8">&#x00A0;</span><span
  11968. class="cmtt-8">&#x00A0;}</span>
  11969. <br class="fancyvrb" /><a
  11970. id="x1-122030r15"></a><span
  11971. class="cmr-6">15</span><span
  11972. class="cmtt-8">&#x00A0;</span><span
  11973. class="cmtt-8">&#x00A0;</span>
  11974. <br class="fancyvrb" /><a
  11975. id="x1-122032r16"></a><span
  11976. class="cmr-6">16</span><span
  11977. class="cmtt-8">&#x00A0;</span><span
  11978. class="cmtt-8">&#x00A0;</span><span
  11979. class="cmtt-8">&#x00A0;</span><span
  11980. class="cmtt-8">&#x00A0;9)</span><span
  11981. class="cmtt-8">&#x00A0;done</span>
  11982. </div>
  11983. <!--l. 125--><p class="noindent" >
  11984. <h5 class="subsubsectionHead"><span class="titlemark">9.2.7. </span> <a
  11985. id="x1-1230009.2.7"></a>render_line</h5>
  11986. <!--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;
  11987. to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
  11988. been relevant elsewhere, but here we must define integer division as rounding division of both
  11989. positive and negative numbers toward zero.
  11990. <!--l. 134--><p class="noindent" >
  11991. <div class="fancyvrb" id="fancyvrb47">
  11992. <a
  11993. id="x1-123002r1"></a><span
  11994. class="cmr-6">1</span><span
  11995. class="cmtt-8">&#x00A0;</span><span
  11996. class="cmtt-8">&#x00A0;</span><span
  11997. class="cmtt-8">&#x00A0;</span><span
  11998. class="cmtt-8">&#x00A0;1)</span><span
  11999. class="cmtt-8">&#x00A0;</span><span
  12000. class="cmtt-8">&#x00A0;</span><span
  12001. class="cmtt-8">&#x00A0;[dy]</span><span
  12002. class="cmtt-8">&#x00A0;=</span><span
  12003. class="cmtt-8">&#x00A0;[y1]</span><span
  12004. class="cmtt-8">&#x00A0;-</span><span
  12005. class="cmtt-8">&#x00A0;[y0]</span>
  12006. <br class="fancyvrb" /><a
  12007. id="x1-123004r2"></a><span
  12008. class="cmr-6">2</span><span
  12009. class="cmtt-8">&#x00A0;</span><span
  12010. class="cmtt-8">&#x00A0;</span><span
  12011. class="cmtt-8">&#x00A0;</span><span
  12012. class="cmtt-8">&#x00A0;2)</span><span
  12013. class="cmtt-8">&#x00A0;</span><span
  12014. class="cmtt-8">&#x00A0;[adx]</span><span
  12015. class="cmtt-8">&#x00A0;=</span><span
  12016. class="cmtt-8">&#x00A0;[x1]</span><span
  12017. class="cmtt-8">&#x00A0;-</span><span
  12018. class="cmtt-8">&#x00A0;[x0]</span>
  12019. <br class="fancyvrb" /><a
  12020. id="x1-123006r3"></a><span
  12021. class="cmr-6">3</span><span
  12022. class="cmtt-8">&#x00A0;</span><span
  12023. class="cmtt-8">&#x00A0;</span><span
  12024. class="cmtt-8">&#x00A0;</span><span
  12025. class="cmtt-8">&#x00A0;3)</span><span
  12026. class="cmtt-8">&#x00A0;</span><span
  12027. class="cmtt-8">&#x00A0;[ady]</span><span
  12028. class="cmtt-8">&#x00A0;=</span><span
  12029. class="cmtt-8">&#x00A0;absolute</span><span
  12030. class="cmtt-8">&#x00A0;value</span><span
  12031. class="cmtt-8">&#x00A0;of</span><span
  12032. class="cmtt-8">&#x00A0;[dy]</span>
  12033. <br class="fancyvrb" /><a
  12034. id="x1-123008r4"></a><span
  12035. class="cmr-6">4</span><span
  12036. class="cmtt-8">&#x00A0;</span><span
  12037. class="cmtt-8">&#x00A0;</span><span
  12038. class="cmtt-8">&#x00A0;</span><span
  12039. class="cmtt-8">&#x00A0;4)</span><span
  12040. class="cmtt-8">&#x00A0;[base]</span><span
  12041. class="cmtt-8">&#x00A0;=</span><span
  12042. class="cmtt-8">&#x00A0;[dy]</span><span
  12043. class="cmtt-8">&#x00A0;/</span><span
  12044. class="cmtt-8">&#x00A0;[adx]</span><span
  12045. class="cmtt-8">&#x00A0;using</span><span
  12046. class="cmtt-8">&#x00A0;integer</span><span
  12047. class="cmtt-8">&#x00A0;division</span>
  12048. <br class="fancyvrb" /><a
  12049. id="x1-123010r5"></a><span
  12050. class="cmr-6">5</span><span
  12051. class="cmtt-8">&#x00A0;</span><span
  12052. class="cmtt-8">&#x00A0;</span><span
  12053. class="cmtt-8">&#x00A0;</span><span
  12054. class="cmtt-8">&#x00A0;5)</span><span
  12055. class="cmtt-8">&#x00A0;</span><span
  12056. class="cmtt-8">&#x00A0;</span><span
  12057. class="cmtt-8">&#x00A0;</span><span
  12058. class="cmtt-8">&#x00A0;[x]</span><span
  12059. class="cmtt-8">&#x00A0;=</span><span
  12060. class="cmtt-8">&#x00A0;[x0]</span>
  12061. <br class="fancyvrb" /><a
  12062. id="x1-123012r6"></a><span
  12063. class="cmr-6">6</span><span
  12064. class="cmtt-8">&#x00A0;</span><span
  12065. class="cmtt-8">&#x00A0;</span><span
  12066. class="cmtt-8">&#x00A0;</span><span
  12067. class="cmtt-8">&#x00A0;6)</span><span
  12068. class="cmtt-8">&#x00A0;</span><span
  12069. class="cmtt-8">&#x00A0;</span><span
  12070. class="cmtt-8">&#x00A0;</span><span
  12071. class="cmtt-8">&#x00A0;[y]</span><span
  12072. class="cmtt-8">&#x00A0;=</span><span
  12073. class="cmtt-8">&#x00A0;[y0]</span>
  12074. <br class="fancyvrb" /><a
  12075. id="x1-123014r7"></a><span
  12076. class="cmr-6">7</span><span
  12077. class="cmtt-8">&#x00A0;</span><span
  12078. class="cmtt-8">&#x00A0;</span><span
  12079. class="cmtt-8">&#x00A0;</span><span
  12080. class="cmtt-8">&#x00A0;7)</span><span
  12081. class="cmtt-8">&#x00A0;</span><span
  12082. class="cmtt-8">&#x00A0;[err]</span><span
  12083. class="cmtt-8">&#x00A0;=</span><span
  12084. class="cmtt-8">&#x00A0;0</span>
  12085. <br class="fancyvrb" /><a
  12086. id="x1-123016r8"></a><span
  12087. class="cmr-6">8</span><span
  12088. class="cmtt-8">&#x00A0;</span><span
  12089. class="cmtt-8">&#x00A0;</span>
  12090. <br class="fancyvrb" /><a
  12091. id="x1-123018r9"></a><span
  12092. class="cmr-6">9</span><span
  12093. class="cmtt-8">&#x00A0;</span><span
  12094. class="cmtt-8">&#x00A0;</span><span
  12095. class="cmtt-8">&#x00A0;</span><span
  12096. class="cmtt-8">&#x00A0;8)</span><span
  12097. class="cmtt-8">&#x00A0;if</span><span
  12098. class="cmtt-8">&#x00A0;(</span><span
  12099. class="cmtt-8">&#x00A0;[dy]</span><span
  12100. class="cmtt-8">&#x00A0;is</span><span
  12101. class="cmtt-8">&#x00A0;less</span><span
  12102. class="cmtt-8">&#x00A0;than</span><span
  12103. class="cmtt-8">&#x00A0;0</span><span
  12104. class="cmtt-8">&#x00A0;)</span><span
  12105. class="cmtt-8">&#x00A0;{</span>
  12106. <br class="fancyvrb" /><a
  12107. id="x1-123020r10"></a><span
  12108. class="cmr-6">10</span><span
  12109. class="cmtt-8">&#x00A0;</span><span
  12110. class="cmtt-8">&#x00A0;</span>
  12111. <br class="fancyvrb" /><a
  12112. id="x1-123022r11"></a><span
  12113. class="cmr-6">11</span><span
  12114. class="cmtt-8">&#x00A0;</span><span
  12115. class="cmtt-8">&#x00A0;</span><span
  12116. class="cmtt-8">&#x00A0;</span><span
  12117. class="cmtt-8">&#x00A0;</span><span
  12118. class="cmtt-8">&#x00A0;</span><span
  12119. class="cmtt-8">&#x00A0;</span><span
  12120. class="cmtt-8">&#x00A0;</span><span
  12121. class="cmtt-8">&#x00A0;</span><span
  12122. class="cmtt-8">&#x00A0;</span><span
  12123. class="cmtt-8">&#x00A0;9)</span><span
  12124. class="cmtt-8">&#x00A0;[sy]</span><span
  12125. class="cmtt-8">&#x00A0;=</span><span
  12126. class="cmtt-8">&#x00A0;[base]</span><span
  12127. class="cmtt-8">&#x00A0;-</span><span
  12128. class="cmtt-8">&#x00A0;1</span>
  12129. <br class="fancyvrb" /><a
  12130. id="x1-123024r12"></a><span
  12131. class="cmr-6">12</span><span
  12132. class="cmtt-8">&#x00A0;</span><span
  12133. class="cmtt-8">&#x00A0;</span>
  12134. <br class="fancyvrb" /><a
  12135. id="x1-123026r13"></a><span
  12136. class="cmr-6">13</span><span
  12137. class="cmtt-8">&#x00A0;</span><span
  12138. class="cmtt-8">&#x00A0;</span><span
  12139. class="cmtt-8">&#x00A0;</span><span
  12140. class="cmtt-8">&#x00A0;</span><span
  12141. class="cmtt-8">&#x00A0;</span><span
  12142. class="cmtt-8">&#x00A0;</span><span
  12143. class="cmtt-8">&#x00A0;}</span><span
  12144. class="cmtt-8">&#x00A0;else</span><span
  12145. class="cmtt-8">&#x00A0;{</span>
  12146. <br class="fancyvrb" /><a
  12147. id="x1-123028r14"></a><span
  12148. class="cmr-6">14</span><span
  12149. class="cmtt-8">&#x00A0;</span><span
  12150. class="cmtt-8">&#x00A0;</span>
  12151. <br class="fancyvrb" /><a
  12152. id="x1-123030r15"></a><span
  12153. class="cmr-6">15</span><span
  12154. class="cmtt-8">&#x00A0;</span><span
  12155. class="cmtt-8">&#x00A0;</span><span
  12156. class="cmtt-8">&#x00A0;</span><span
  12157. class="cmtt-8">&#x00A0;</span><span
  12158. class="cmtt-8">&#x00A0;</span><span
  12159. class="cmtt-8">&#x00A0;</span><span
  12160. class="cmtt-8">&#x00A0;</span><span
  12161. class="cmtt-8">&#x00A0;</span><span
  12162. class="cmtt-8">&#x00A0;10)</span><span
  12163. class="cmtt-8">&#x00A0;[sy]</span><span
  12164. class="cmtt-8">&#x00A0;=</span><span
  12165. class="cmtt-8">&#x00A0;[base]</span><span
  12166. class="cmtt-8">&#x00A0;+</span><span
  12167. class="cmtt-8">&#x00A0;1</span>
  12168. <br class="fancyvrb" /><a
  12169. id="x1-123032r16"></a><span
  12170. class="cmr-6">16</span><span
  12171. class="cmtt-8">&#x00A0;</span><span
  12172. class="cmtt-8">&#x00A0;</span>
  12173. <br class="fancyvrb" /><a
  12174. id="x1-123034r17"></a><span
  12175. class="cmr-6">17</span><span
  12176. class="cmtt-8">&#x00A0;</span><span
  12177. class="cmtt-8">&#x00A0;</span><span
  12178. class="cmtt-8">&#x00A0;</span><span
  12179. class="cmtt-8">&#x00A0;</span><span
  12180. class="cmtt-8">&#x00A0;</span><span
  12181. class="cmtt-8">&#x00A0;</span><span
  12182. class="cmtt-8">&#x00A0;}</span>
  12183. <br class="fancyvrb" /><a
  12184. id="x1-123036r18"></a><span
  12185. class="cmr-6">18</span><span
  12186. class="cmtt-8">&#x00A0;</span><span
  12187. class="cmtt-8">&#x00A0;</span>
  12188. <br class="fancyvrb" /><a
  12189. id="x1-123038r19"></a><span
  12190. class="cmr-6">19</span><span
  12191. class="cmtt-8">&#x00A0;</span><span
  12192. class="cmtt-8">&#x00A0;</span><span
  12193. class="cmtt-8">&#x00A0;11)</span><span
  12194. class="cmtt-8">&#x00A0;[ady]</span><span
  12195. class="cmtt-8">&#x00A0;=</span><span
  12196. class="cmtt-8">&#x00A0;[ady]</span><span
  12197. class="cmtt-8">&#x00A0;-</span><span
  12198. class="cmtt-8">&#x00A0;(absolute</span><span
  12199. class="cmtt-8">&#x00A0;value</span><span
  12200. class="cmtt-8">&#x00A0;of</span><span
  12201. class="cmtt-8">&#x00A0;[base])</span><span
  12202. class="cmtt-8">&#x00A0;*</span><span
  12203. class="cmtt-8">&#x00A0;[adx]</span>
  12204. <br class="fancyvrb" /><a
  12205. id="x1-123040r20"></a><span
  12206. class="cmr-6">20</span><span
  12207. class="cmtt-8">&#x00A0;</span><span
  12208. class="cmtt-8">&#x00A0;</span><span
  12209. class="cmtt-8">&#x00A0;12)</span><span
  12210. class="cmtt-8">&#x00A0;vector</span><span
  12211. class="cmtt-8">&#x00A0;[v]</span><span
  12212. class="cmtt-8">&#x00A0;element</span><span
  12213. class="cmtt-8">&#x00A0;[x]</span><span
  12214. class="cmtt-8">&#x00A0;=</span><span
  12215. class="cmtt-8">&#x00A0;[y]</span>
  12216. <br class="fancyvrb" /><a
  12217. id="x1-123042r21"></a><span
  12218. class="cmr-6">21</span><span
  12219. class="cmtt-8">&#x00A0;</span><span
  12220. class="cmtt-8">&#x00A0;</span>
  12221. <br class="fancyvrb" /><a
  12222. id="x1-123044r22"></a><span
  12223. class="cmr-6">22</span><span
  12224. class="cmtt-8">&#x00A0;</span><span
  12225. class="cmtt-8">&#x00A0;</span><span
  12226. class="cmtt-8">&#x00A0;13)</span><span
  12227. class="cmtt-8">&#x00A0;iterate</span><span
  12228. class="cmtt-8">&#x00A0;[x]</span><span
  12229. class="cmtt-8">&#x00A0;over</span><span
  12230. class="cmtt-8">&#x00A0;the</span><span
  12231. class="cmtt-8">&#x00A0;range</span><span
  12232. class="cmtt-8">&#x00A0;[x0]+1</span><span
  12233. class="cmtt-8">&#x00A0;...</span><span
  12234. class="cmtt-8">&#x00A0;[x1]-1</span><span
  12235. class="cmtt-8">&#x00A0;{</span>
  12236. <br class="fancyvrb" /><a
  12237. id="x1-123046r23"></a><span
  12238. class="cmr-6">23</span><span
  12239. class="cmtt-8">&#x00A0;</span><span
  12240. class="cmtt-8">&#x00A0;</span>
  12241. <br class="fancyvrb" /><a
  12242. id="x1-123048r24"></a><span
  12243. class="cmr-6">24</span><span
  12244. class="cmtt-8">&#x00A0;</span><span
  12245. class="cmtt-8">&#x00A0;</span><span
  12246. class="cmtt-8">&#x00A0;</span><span
  12247. class="cmtt-8">&#x00A0;</span><span
  12248. class="cmtt-8">&#x00A0;</span><span
  12249. class="cmtt-8">&#x00A0;</span><span
  12250. class="cmtt-8">&#x00A0;</span><span
  12251. class="cmtt-8">&#x00A0;</span><span
  12252. class="cmtt-8">&#x00A0;14)</span><span
  12253. class="cmtt-8">&#x00A0;[err]</span><span
  12254. class="cmtt-8">&#x00A0;=</span><span
  12255. class="cmtt-8">&#x00A0;[err]</span><span
  12256. class="cmtt-8">&#x00A0;+</span><span
  12257. class="cmtt-8">&#x00A0;[ady];</span>
  12258. <br class="fancyvrb" /><a
  12259. id="x1-123050r25"></a><span
  12260. class="cmr-6">25</span><span
  12261. class="cmtt-8">&#x00A0;</span><span
  12262. class="cmtt-8">&#x00A0;</span><span
  12263. class="cmtt-8">&#x00A0;</span><span
  12264. class="cmtt-8">&#x00A0;</span><span
  12265. class="cmtt-8">&#x00A0;</span><span
  12266. class="cmtt-8">&#x00A0;</span><span
  12267. class="cmtt-8">&#x00A0;</span><span
  12268. class="cmtt-8">&#x00A0;</span><span
  12269. class="cmtt-8">&#x00A0;15)</span><span
  12270. class="cmtt-8">&#x00A0;if</span><span
  12271. class="cmtt-8">&#x00A0;(</span><span
  12272. class="cmtt-8">&#x00A0;[err]</span><span
  12273. class="cmtt-8">&#x00A0;&#x003E;=</span><span
  12274. class="cmtt-8">&#x00A0;[adx]</span><span
  12275. class="cmtt-8">&#x00A0;)</span><span
  12276. class="cmtt-8">&#x00A0;{</span>
  12277. <br class="fancyvrb" /><a
  12278. id="x1-123052r26"></a><span
  12279. class="cmr-6">26</span><span
  12280. class="cmtt-8">&#x00A0;</span><span
  12281. class="cmtt-8">&#x00A0;</span>
  12282. <br class="fancyvrb" /><a
  12283. id="x1-123054r27"></a><span
  12284. class="cmr-6">27</span><span
  12285. class="cmtt-8">&#x00A0;</span><span
  12286. class="cmtt-8">&#x00A0;</span><span
  12287. class="cmtt-8">&#x00A0;</span><span
  12288. class="cmtt-8">&#x00A0;</span><span
  12289. class="cmtt-8">&#x00A0;</span><span
  12290. class="cmtt-8">&#x00A0;</span><span
  12291. class="cmtt-8">&#x00A0;</span><span
  12292. class="cmtt-8">&#x00A0;</span><span
  12293. class="cmtt-8">&#x00A0;</span><span
  12294. class="cmtt-8">&#x00A0;</span><span
  12295. class="cmtt-8">&#x00A0;</span><span
  12296. class="cmtt-8">&#x00A0;</span><span
  12297. class="cmtt-8">&#x00A0;</span><span
  12298. class="cmtt-8">&#x00A0;</span><span
  12299. class="cmtt-8">&#x00A0;16)</span><span
  12300. class="cmtt-8">&#x00A0;[err]</span><span
  12301. class="cmtt-8">&#x00A0;=</span><span
  12302. class="cmtt-8">&#x00A0;[err]</span><span
  12303. class="cmtt-8">&#x00A0;-</span><span
  12304. class="cmtt-8">&#x00A0;[adx]</span>
  12305. <br class="fancyvrb" /><a
  12306. id="x1-123056r28"></a><span
  12307. class="cmr-6">28</span><span
  12308. class="cmtt-8">&#x00A0;</span><span
  12309. class="cmtt-8">&#x00A0;</span><span
  12310. class="cmtt-8">&#x00A0;</span><span
  12311. class="cmtt-8">&#x00A0;</span><span
  12312. class="cmtt-8">&#x00A0;</span><span
  12313. class="cmtt-8">&#x00A0;</span><span
  12314. class="cmtt-8">&#x00A0;</span><span
  12315. class="cmtt-8">&#x00A0;</span><span
  12316. class="cmtt-8">&#x00A0;</span><span
  12317. class="cmtt-8">&#x00A0;</span><span
  12318. class="cmtt-8">&#x00A0;</span><span
  12319. class="cmtt-8">&#x00A0;</span><span
  12320. class="cmtt-8">&#x00A0;</span><span
  12321. class="cmtt-8">&#x00A0;</span><span
  12322. class="cmtt-8">&#x00A0;17)</span><span
  12323. class="cmtt-8">&#x00A0;</span><span
  12324. class="cmtt-8">&#x00A0;</span><span
  12325. class="cmtt-8">&#x00A0;[y]</span><span
  12326. class="cmtt-8">&#x00A0;=</span><span
  12327. class="cmtt-8">&#x00A0;[y]</span><span
  12328. class="cmtt-8">&#x00A0;+</span><span
  12329. class="cmtt-8">&#x00A0;[sy]</span>
  12330. <br class="fancyvrb" /><a
  12331. id="x1-123058r29"></a><span
  12332. class="cmr-6">29</span><span
  12333. class="cmtt-8">&#x00A0;</span><span
  12334. class="cmtt-8">&#x00A0;</span>
  12335. <br class="fancyvrb" /><a
  12336. id="x1-123060r30"></a><span
  12337. class="cmr-6">30</span><span
  12338. class="cmtt-8">&#x00A0;</span><span
  12339. class="cmtt-8">&#x00A0;</span><span
  12340. class="cmtt-8">&#x00A0;</span><span
  12341. class="cmtt-8">&#x00A0;</span><span
  12342. class="cmtt-8">&#x00A0;</span><span
  12343. class="cmtt-8">&#x00A0;</span><span
  12344. class="cmtt-8">&#x00A0;</span><span
  12345. class="cmtt-8">&#x00A0;</span><span
  12346. class="cmtt-8">&#x00A0;</span><span
  12347. class="cmtt-8">&#x00A0;</span><span
  12348. class="cmtt-8">&#x00A0;</span><span
  12349. class="cmtt-8">&#x00A0;</span><span
  12350. class="cmtt-8">&#x00A0;}</span><span
  12351. class="cmtt-8">&#x00A0;else</span><span
  12352. class="cmtt-8">&#x00A0;{</span>
  12353. <br class="fancyvrb" /><a
  12354. id="x1-123062r31"></a><span
  12355. class="cmr-6">31</span><span
  12356. class="cmtt-8">&#x00A0;</span><span
  12357. class="cmtt-8">&#x00A0;</span>
  12358. <br class="fancyvrb" /><a
  12359. id="x1-123064r32"></a><span
  12360. class="cmr-6">32</span><span
  12361. class="cmtt-8">&#x00A0;</span><span
  12362. class="cmtt-8">&#x00A0;</span><span
  12363. class="cmtt-8">&#x00A0;</span><span
  12364. class="cmtt-8">&#x00A0;</span><span
  12365. class="cmtt-8">&#x00A0;</span><span
  12366. class="cmtt-8">&#x00A0;</span><span
  12367. class="cmtt-8">&#x00A0;</span><span
  12368. class="cmtt-8">&#x00A0;</span><span
  12369. class="cmtt-8">&#x00A0;</span><span
  12370. class="cmtt-8">&#x00A0;</span><span
  12371. class="cmtt-8">&#x00A0;</span><span
  12372. class="cmtt-8">&#x00A0;</span><span
  12373. class="cmtt-8">&#x00A0;</span><span
  12374. class="cmtt-8">&#x00A0;</span><span
  12375. class="cmtt-8">&#x00A0;18)</span><span
  12376. class="cmtt-8">&#x00A0;[y]</span><span
  12377. class="cmtt-8">&#x00A0;=</span><span
  12378. class="cmtt-8">&#x00A0;[y]</span><span
  12379. class="cmtt-8">&#x00A0;+</span><span
  12380. class="cmtt-8">&#x00A0;[base]</span>
  12381. <br class="fancyvrb" /><a
  12382. id="x1-123066r33"></a><span
  12383. class="cmr-6">33</span><span
  12384. class="cmtt-8">&#x00A0;</span><span
  12385. class="cmtt-8">&#x00A0;</span>
  12386. <br class="fancyvrb" /><a
  12387. id="x1-123068r34"></a><span
  12388. class="cmr-6">34</span><span
  12389. class="cmtt-8">&#x00A0;</span><span
  12390. class="cmtt-8">&#x00A0;</span><span
  12391. class="cmtt-8">&#x00A0;</span><span
  12392. class="cmtt-8">&#x00A0;</span><span
  12393. class="cmtt-8">&#x00A0;</span><span
  12394. class="cmtt-8">&#x00A0;</span><span
  12395. class="cmtt-8">&#x00A0;</span><span
  12396. class="cmtt-8">&#x00A0;</span><span
  12397. class="cmtt-8">&#x00A0;</span><span
  12398. class="cmtt-8">&#x00A0;</span><span
  12399. class="cmtt-8">&#x00A0;</span><span
  12400. class="cmtt-8">&#x00A0;</span><span
  12401. class="cmtt-8">&#x00A0;}</span>
  12402. <br class="fancyvrb" /><a
  12403. id="x1-123070r35"></a><span
  12404. class="cmr-6">35</span><span
  12405. class="cmtt-8">&#x00A0;</span><span
  12406. class="cmtt-8">&#x00A0;</span>
  12407. <br class="fancyvrb" /><a
  12408. id="x1-123072r36"></a><span
  12409. class="cmr-6">36</span><span
  12410. class="cmtt-8">&#x00A0;</span><span
  12411. class="cmtt-8">&#x00A0;</span><span
  12412. class="cmtt-8">&#x00A0;</span><span
  12413. class="cmtt-8">&#x00A0;</span><span
  12414. class="cmtt-8">&#x00A0;</span><span
  12415. class="cmtt-8">&#x00A0;</span><span
  12416. class="cmtt-8">&#x00A0;</span><span
  12417. class="cmtt-8">&#x00A0;</span><span
  12418. class="cmtt-8">&#x00A0;19)</span><span
  12419. class="cmtt-8">&#x00A0;vector</span><span
  12420. class="cmtt-8">&#x00A0;[v]</span><span
  12421. class="cmtt-8">&#x00A0;element</span><span
  12422. class="cmtt-8">&#x00A0;[x]</span><span
  12423. class="cmtt-8">&#x00A0;=</span><span
  12424. class="cmtt-8">&#x00A0;[y]</span>
  12425. <br class="fancyvrb" /><a
  12426. id="x1-123074r37"></a><span
  12427. class="cmr-6">37</span><span
  12428. class="cmtt-8">&#x00A0;</span><span
  12429. class="cmtt-8">&#x00A0;</span>
  12430. <br class="fancyvrb" /><a
  12431. id="x1-123076r38"></a><span
  12432. class="cmr-6">38</span><span
  12433. class="cmtt-8">&#x00A0;</span><span
  12434. class="cmtt-8">&#x00A0;</span><span
  12435. class="cmtt-8">&#x00A0;</span><span
  12436. class="cmtt-8">&#x00A0;</span><span
  12437. class="cmtt-8">&#x00A0;</span><span
  12438. class="cmtt-8">&#x00A0;</span><span
  12439. class="cmtt-8">&#x00A0;}</span>
  12440. </div>
  12441. <h3 class="sectionHead"><span class="titlemark">10. </span> <a
  12442. id="x1-12400010"></a>Tables</h3>
  12443. <!--l. 6--><p class="noindent" >
  12444. <h4 class="subsectionHead"><span class="titlemark">10.1. </span> <a
  12445. id="x1-12500010.1"></a>floor1_inverse_dB_table</h4>
  12446. <!--l. 8--><p class="noindent" >The vector <span
  12447. class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consiting of the
  12448. following values (read left to right then top to bottom):
  12449. <!--l. 12--><p class="noindent" >
  12450. <div class="fancyvrb" id="fancyvrb48">
  12451. <a
  12452. id="x1-125002r1"></a><span
  12453. class="cmr-6">1</span><span
  12454. class="cmtt-8">&#x00A0;</span><span
  12455. class="cmtt-8">&#x00A0;</span><span
  12456. class="cmtt-8">&#x00A0;</span><span
  12457. class="cmtt-8">&#x00A0;1.0649863e-07,</span><span
  12458. class="cmtt-8">&#x00A0;1.1341951e-07,</span><span
  12459. class="cmtt-8">&#x00A0;1.2079015e-07,</span><span
  12460. class="cmtt-8">&#x00A0;1.2863978e-07,</span>
  12461. <br class="fancyvrb" /><a
  12462. id="x1-125004r2"></a><span
  12463. class="cmr-6">2</span><span
  12464. class="cmtt-8">&#x00A0;</span><span
  12465. class="cmtt-8">&#x00A0;</span><span
  12466. class="cmtt-8">&#x00A0;</span><span
  12467. class="cmtt-8">&#x00A0;1.3699951e-07,</span><span
  12468. class="cmtt-8">&#x00A0;1.4590251e-07,</span><span
  12469. class="cmtt-8">&#x00A0;1.5538408e-07,</span><span
  12470. class="cmtt-8">&#x00A0;1.6548181e-07,</span>
  12471. <br class="fancyvrb" /><a
  12472. id="x1-125006r3"></a><span
  12473. class="cmr-6">3</span><span
  12474. class="cmtt-8">&#x00A0;</span><span
  12475. class="cmtt-8">&#x00A0;</span><span
  12476. class="cmtt-8">&#x00A0;</span><span
  12477. class="cmtt-8">&#x00A0;1.7623575e-07,</span><span
  12478. class="cmtt-8">&#x00A0;1.8768855e-07,</span><span
  12479. class="cmtt-8">&#x00A0;1.9988561e-07,</span><span
  12480. class="cmtt-8">&#x00A0;2.1287530e-07,</span>
  12481. <br class="fancyvrb" /><a
  12482. id="x1-125008r4"></a><span
  12483. class="cmr-6">4</span><span
  12484. class="cmtt-8">&#x00A0;</span><span
  12485. class="cmtt-8">&#x00A0;</span><span
  12486. class="cmtt-8">&#x00A0;</span><span
  12487. class="cmtt-8">&#x00A0;2.2670913e-07,</span><span
  12488. class="cmtt-8">&#x00A0;2.4144197e-07,</span><span
  12489. class="cmtt-8">&#x00A0;2.5713223e-07,</span><span
  12490. class="cmtt-8">&#x00A0;2.7384213e-07,</span>
  12491. <br class="fancyvrb" /><a
  12492. id="x1-125010r5"></a><span
  12493. class="cmr-6">5</span><span
  12494. class="cmtt-8">&#x00A0;</span><span
  12495. class="cmtt-8">&#x00A0;</span><span
  12496. class="cmtt-8">&#x00A0;</span><span
  12497. class="cmtt-8">&#x00A0;2.9163793e-07,</span><span
  12498. class="cmtt-8">&#x00A0;3.1059021e-07,</span><span
  12499. class="cmtt-8">&#x00A0;3.3077411e-07,</span><span
  12500. class="cmtt-8">&#x00A0;3.5226968e-07,</span>
  12501. <br class="fancyvrb" /><a
  12502. id="x1-125012r6"></a><span
  12503. class="cmr-6">6</span><span
  12504. class="cmtt-8">&#x00A0;</span><span
  12505. class="cmtt-8">&#x00A0;</span><span
  12506. class="cmtt-8">&#x00A0;</span><span
  12507. class="cmtt-8">&#x00A0;3.7516214e-07,</span><span
  12508. class="cmtt-8">&#x00A0;3.9954229e-07,</span><span
  12509. class="cmtt-8">&#x00A0;4.2550680e-07,</span><span
  12510. class="cmtt-8">&#x00A0;4.5315863e-07,</span>
  12511. <br class="fancyvrb" /><a
  12512. id="x1-125014r7"></a><span
  12513. class="cmr-6">7</span><span
  12514. class="cmtt-8">&#x00A0;</span><span
  12515. class="cmtt-8">&#x00A0;</span><span
  12516. class="cmtt-8">&#x00A0;</span><span
  12517. class="cmtt-8">&#x00A0;4.8260743e-07,</span><span
  12518. class="cmtt-8">&#x00A0;5.1396998e-07,</span><span
  12519. class="cmtt-8">&#x00A0;5.4737065e-07,</span><span
  12520. class="cmtt-8">&#x00A0;5.8294187e-07,</span>
  12521. <br class="fancyvrb" /><a
  12522. id="x1-125016r8"></a><span
  12523. class="cmr-6">8</span><span
  12524. class="cmtt-8">&#x00A0;</span><span
  12525. class="cmtt-8">&#x00A0;</span><span
  12526. class="cmtt-8">&#x00A0;</span><span
  12527. class="cmtt-8">&#x00A0;6.2082472e-07,</span><span
  12528. class="cmtt-8">&#x00A0;6.6116941e-07,</span><span
  12529. class="cmtt-8">&#x00A0;7.0413592e-07,</span><span
  12530. class="cmtt-8">&#x00A0;7.4989464e-07,</span>
  12531. <br class="fancyvrb" /><a
  12532. id="x1-125018r9"></a><span
  12533. class="cmr-6">9</span><span
  12534. class="cmtt-8">&#x00A0;</span><span
  12535. class="cmtt-8">&#x00A0;</span><span
  12536. class="cmtt-8">&#x00A0;</span><span
  12537. class="cmtt-8">&#x00A0;7.9862701e-07,</span><span
  12538. class="cmtt-8">&#x00A0;8.5052630e-07,</span><span
  12539. class="cmtt-8">&#x00A0;9.0579828e-07,</span><span
  12540. class="cmtt-8">&#x00A0;9.6466216e-07,</span>
  12541. <br class="fancyvrb" /><a
  12542. id="x1-125020r10"></a><span
  12543. class="cmr-6">10</span><span
  12544. class="cmtt-8">&#x00A0;</span><span
  12545. class="cmtt-8">&#x00A0;</span><span
  12546. class="cmtt-8">&#x00A0;</span><span
  12547. class="cmtt-8">&#x00A0;1.0273513e-06,</span><span
  12548. class="cmtt-8">&#x00A0;1.0941144e-06,</span><span
  12549. class="cmtt-8">&#x00A0;1.1652161e-06,</span><span
  12550. class="cmtt-8">&#x00A0;1.2409384e-06,</span>
  12551. <br class="fancyvrb" /><a
  12552. id="x1-125022r11"></a><span
  12553. class="cmr-6">11</span><span
  12554. class="cmtt-8">&#x00A0;</span><span
  12555. class="cmtt-8">&#x00A0;</span><span
  12556. class="cmtt-8">&#x00A0;</span><span
  12557. class="cmtt-8">&#x00A0;1.3215816e-06,</span><span
  12558. class="cmtt-8">&#x00A0;1.4074654e-06,</span><span
  12559. class="cmtt-8">&#x00A0;1.4989305e-06,</span><span
  12560. class="cmtt-8">&#x00A0;1.5963394e-06,</span>
  12561. <br class="fancyvrb" /><a
  12562. id="x1-125024r12"></a><span
  12563. class="cmr-6">12</span><span
  12564. class="cmtt-8">&#x00A0;</span><span
  12565. class="cmtt-8">&#x00A0;</span><span
  12566. class="cmtt-8">&#x00A0;</span><span
  12567. class="cmtt-8">&#x00A0;1.7000785e-06,</span><span
  12568. class="cmtt-8">&#x00A0;1.8105592e-06,</span><span
  12569. class="cmtt-8">&#x00A0;1.9282195e-06,</span><span
  12570. class="cmtt-8">&#x00A0;2.0535261e-06,</span>
  12571. <br class="fancyvrb" /><a
  12572. id="x1-125026r13"></a><span
  12573. class="cmr-6">13</span><span
  12574. class="cmtt-8">&#x00A0;</span><span
  12575. class="cmtt-8">&#x00A0;</span><span
  12576. class="cmtt-8">&#x00A0;</span><span
  12577. class="cmtt-8">&#x00A0;2.1869758e-06,</span><span
  12578. class="cmtt-8">&#x00A0;2.3290978e-06,</span><span
  12579. class="cmtt-8">&#x00A0;2.4804557e-06,</span><span
  12580. class="cmtt-8">&#x00A0;2.6416497e-06,</span>
  12581. <br class="fancyvrb" /><a
  12582. id="x1-125028r14"></a><span
  12583. class="cmr-6">14</span><span
  12584. class="cmtt-8">&#x00A0;</span><span
  12585. class="cmtt-8">&#x00A0;</span><span
  12586. class="cmtt-8">&#x00A0;</span><span
  12587. class="cmtt-8">&#x00A0;2.8133190e-06,</span><span
  12588. class="cmtt-8">&#x00A0;2.9961443e-06,</span><span
  12589. class="cmtt-8">&#x00A0;3.1908506e-06,</span><span
  12590. class="cmtt-8">&#x00A0;3.3982101e-06,</span>
  12591. <br class="fancyvrb" /><a
  12592. id="x1-125030r15"></a><span
  12593. class="cmr-6">15</span><span
  12594. class="cmtt-8">&#x00A0;</span><span
  12595. class="cmtt-8">&#x00A0;</span><span
  12596. class="cmtt-8">&#x00A0;</span><span
  12597. class="cmtt-8">&#x00A0;3.6190449e-06,</span><span
  12598. class="cmtt-8">&#x00A0;3.8542308e-06,</span><span
  12599. class="cmtt-8">&#x00A0;4.1047004e-06,</span><span
  12600. class="cmtt-8">&#x00A0;4.3714470e-06,</span>
  12601. <br class="fancyvrb" /><a
  12602. id="x1-125032r16"></a><span
  12603. class="cmr-6">16</span><span
  12604. class="cmtt-8">&#x00A0;</span><span
  12605. class="cmtt-8">&#x00A0;</span><span
  12606. class="cmtt-8">&#x00A0;</span><span
  12607. class="cmtt-8">&#x00A0;4.6555282e-06,</span><span
  12608. class="cmtt-8">&#x00A0;4.9580707e-06,</span><span
  12609. class="cmtt-8">&#x00A0;5.2802740e-06,</span><span
  12610. class="cmtt-8">&#x00A0;5.6234160e-06,</span>
  12611. <br class="fancyvrb" /><a
  12612. id="x1-125034r17"></a><span
  12613. class="cmr-6">17</span><span
  12614. class="cmtt-8">&#x00A0;</span><span
  12615. class="cmtt-8">&#x00A0;</span><span
  12616. class="cmtt-8">&#x00A0;</span><span
  12617. class="cmtt-8">&#x00A0;5.9888572e-06,</span><span
  12618. class="cmtt-8">&#x00A0;6.3780469e-06,</span><span
  12619. class="cmtt-8">&#x00A0;6.7925283e-06,</span><span
  12620. class="cmtt-8">&#x00A0;7.2339451e-06,</span>
  12621. <br class="fancyvrb" /><a
  12622. id="x1-125036r18"></a><span
  12623. class="cmr-6">18</span><span
  12624. class="cmtt-8">&#x00A0;</span><span
  12625. class="cmtt-8">&#x00A0;</span><span
  12626. class="cmtt-8">&#x00A0;</span><span
  12627. class="cmtt-8">&#x00A0;7.7040476e-06,</span><span
  12628. class="cmtt-8">&#x00A0;8.2047000e-06,</span><span
  12629. class="cmtt-8">&#x00A0;8.7378876e-06,</span><span
  12630. class="cmtt-8">&#x00A0;9.3057248e-06,</span>
  12631. <br class="fancyvrb" /><a
  12632. id="x1-125038r19"></a><span
  12633. class="cmr-6">19</span><span
  12634. class="cmtt-8">&#x00A0;</span><span
  12635. class="cmtt-8">&#x00A0;</span><span
  12636. class="cmtt-8">&#x00A0;</span><span
  12637. class="cmtt-8">&#x00A0;9.9104632e-06,</span><span
  12638. class="cmtt-8">&#x00A0;1.0554501e-05,</span><span
  12639. class="cmtt-8">&#x00A0;1.1240392e-05,</span><span
  12640. class="cmtt-8">&#x00A0;1.1970856e-05,</span>
  12641. <br class="fancyvrb" /><a
  12642. id="x1-125040r20"></a><span
  12643. class="cmr-6">20</span><span
  12644. class="cmtt-8">&#x00A0;</span><span
  12645. class="cmtt-8">&#x00A0;</span><span
  12646. class="cmtt-8">&#x00A0;</span><span
  12647. class="cmtt-8">&#x00A0;1.2748789e-05,</span><span
  12648. class="cmtt-8">&#x00A0;1.3577278e-05,</span><span
  12649. class="cmtt-8">&#x00A0;1.4459606e-05,</span><span
  12650. class="cmtt-8">&#x00A0;1.5399272e-05,</span>
  12651. <br class="fancyvrb" /><a
  12652. id="x1-125042r21"></a><span
  12653. class="cmr-6">21</span><span
  12654. class="cmtt-8">&#x00A0;</span><span
  12655. class="cmtt-8">&#x00A0;</span><span
  12656. class="cmtt-8">&#x00A0;</span><span
  12657. class="cmtt-8">&#x00A0;1.6400004e-05,</span><span
  12658. class="cmtt-8">&#x00A0;1.7465768e-05,</span><span
  12659. class="cmtt-8">&#x00A0;1.8600792e-05,</span><span
  12660. class="cmtt-8">&#x00A0;1.9809576e-05,</span>
  12661. <br class="fancyvrb" /><a
  12662. id="x1-125044r22"></a><span
  12663. class="cmr-6">22</span><span
  12664. class="cmtt-8">&#x00A0;</span><span
  12665. class="cmtt-8">&#x00A0;</span><span
  12666. class="cmtt-8">&#x00A0;</span><span
  12667. class="cmtt-8">&#x00A0;2.1096914e-05,</span><span
  12668. class="cmtt-8">&#x00A0;2.2467911e-05,</span><span
  12669. class="cmtt-8">&#x00A0;2.3928002e-05,</span><span
  12670. class="cmtt-8">&#x00A0;2.5482978e-05,</span>
  12671. <br class="fancyvrb" /><a
  12672. id="x1-125046r23"></a><span
  12673. class="cmr-6">23</span><span
  12674. class="cmtt-8">&#x00A0;</span><span
  12675. class="cmtt-8">&#x00A0;</span><span
  12676. class="cmtt-8">&#x00A0;</span><span
  12677. class="cmtt-8">&#x00A0;2.7139006e-05,</span><span
  12678. class="cmtt-8">&#x00A0;2.8902651e-05,</span><span
  12679. class="cmtt-8">&#x00A0;3.0780908e-05,</span><span
  12680. class="cmtt-8">&#x00A0;3.2781225e-05,</span>
  12681. <br class="fancyvrb" /><a
  12682. id="x1-125048r24"></a><span
  12683. class="cmr-6">24</span><span
  12684. class="cmtt-8">&#x00A0;</span><span
  12685. class="cmtt-8">&#x00A0;</span><span
  12686. class="cmtt-8">&#x00A0;</span><span
  12687. class="cmtt-8">&#x00A0;3.4911534e-05,</span><span
  12688. class="cmtt-8">&#x00A0;3.7180282e-05,</span><span
  12689. class="cmtt-8">&#x00A0;3.9596466e-05,</span><span
  12690. class="cmtt-8">&#x00A0;4.2169667e-05,</span>
  12691. <br class="fancyvrb" /><a
  12692. id="x1-125050r25"></a><span
  12693. class="cmr-6">25</span><span
  12694. class="cmtt-8">&#x00A0;</span><span
  12695. class="cmtt-8">&#x00A0;</span><span
  12696. class="cmtt-8">&#x00A0;</span><span
  12697. class="cmtt-8">&#x00A0;4.4910090e-05,</span><span
  12698. class="cmtt-8">&#x00A0;4.7828601e-05,</span><span
  12699. class="cmtt-8">&#x00A0;5.0936773e-05,</span><span
  12700. class="cmtt-8">&#x00A0;5.4246931e-05,</span>
  12701. <br class="fancyvrb" /><a
  12702. id="x1-125052r26"></a><span
  12703. class="cmr-6">26</span><span
  12704. class="cmtt-8">&#x00A0;</span><span
  12705. class="cmtt-8">&#x00A0;</span><span
  12706. class="cmtt-8">&#x00A0;</span><span
  12707. class="cmtt-8">&#x00A0;5.7772202e-05,</span><span
  12708. class="cmtt-8">&#x00A0;6.1526565e-05,</span><span
  12709. class="cmtt-8">&#x00A0;6.5524908e-05,</span><span
  12710. class="cmtt-8">&#x00A0;6.9783085e-05,</span>
  12711. <br class="fancyvrb" /><a
  12712. id="x1-125054r27"></a><span
  12713. class="cmr-6">27</span><span
  12714. class="cmtt-8">&#x00A0;</span><span
  12715. class="cmtt-8">&#x00A0;</span><span
  12716. class="cmtt-8">&#x00A0;</span><span
  12717. class="cmtt-8">&#x00A0;7.4317983e-05,</span><span
  12718. class="cmtt-8">&#x00A0;7.9147585e-05,</span><span
  12719. class="cmtt-8">&#x00A0;8.4291040e-05,</span><span
  12720. class="cmtt-8">&#x00A0;8.9768747e-05,</span>
  12721. <br class="fancyvrb" /><a
  12722. id="x1-125056r28"></a><span
  12723. class="cmr-6">28</span><span
  12724. class="cmtt-8">&#x00A0;</span><span
  12725. class="cmtt-8">&#x00A0;</span><span
  12726. class="cmtt-8">&#x00A0;</span><span
  12727. class="cmtt-8">&#x00A0;9.5602426e-05,</span><span
  12728. class="cmtt-8">&#x00A0;0.00010181521,</span><span
  12729. class="cmtt-8">&#x00A0;0.00010843174,</span><span
  12730. class="cmtt-8">&#x00A0;0.00011547824,</span>
  12731. <br class="fancyvrb" /><a
  12732. id="x1-125058r29"></a><span
  12733. class="cmr-6">29</span><span
  12734. class="cmtt-8">&#x00A0;</span><span
  12735. class="cmtt-8">&#x00A0;</span><span
  12736. class="cmtt-8">&#x00A0;</span><span
  12737. class="cmtt-8">&#x00A0;0.00012298267,</span><span
  12738. class="cmtt-8">&#x00A0;0.00013097477,</span><span
  12739. class="cmtt-8">&#x00A0;0.00013948625,</span><span
  12740. class="cmtt-8">&#x00A0;0.00014855085,</span>
  12741. <br class="fancyvrb" /><a
  12742. id="x1-125060r30"></a><span
  12743. class="cmr-6">30</span><span
  12744. class="cmtt-8">&#x00A0;</span><span
  12745. class="cmtt-8">&#x00A0;</span><span
  12746. class="cmtt-8">&#x00A0;</span><span
  12747. class="cmtt-8">&#x00A0;0.00015820453,</span><span
  12748. class="cmtt-8">&#x00A0;0.00016848555,</span><span
  12749. class="cmtt-8">&#x00A0;0.00017943469,</span><span
  12750. class="cmtt-8">&#x00A0;0.00019109536,</span>
  12751. <br class="fancyvrb" /><a
  12752. id="x1-125062r31"></a><span
  12753. class="cmr-6">31</span><span
  12754. class="cmtt-8">&#x00A0;</span><span
  12755. class="cmtt-8">&#x00A0;</span><span
  12756. class="cmtt-8">&#x00A0;</span><span
  12757. class="cmtt-8">&#x00A0;0.00020351382,</span><span
  12758. class="cmtt-8">&#x00A0;0.00021673929,</span><span
  12759. class="cmtt-8">&#x00A0;0.00023082423,</span><span
  12760. class="cmtt-8">&#x00A0;0.00024582449,</span>
  12761. <br class="fancyvrb" /><a
  12762. id="x1-125064r32"></a><span
  12763. class="cmr-6">32</span><span
  12764. class="cmtt-8">&#x00A0;</span><span
  12765. class="cmtt-8">&#x00A0;</span><span
  12766. class="cmtt-8">&#x00A0;</span><span
  12767. class="cmtt-8">&#x00A0;0.00026179955,</span><span
  12768. class="cmtt-8">&#x00A0;0.00027881276,</span><span
  12769. class="cmtt-8">&#x00A0;0.00029693158,</span><span
  12770. class="cmtt-8">&#x00A0;0.00031622787,</span>
  12771. <br class="fancyvrb" /><a
  12772. id="x1-125066r33"></a><span
  12773. class="cmr-6">33</span><span
  12774. class="cmtt-8">&#x00A0;</span><span
  12775. class="cmtt-8">&#x00A0;</span><span
  12776. class="cmtt-8">&#x00A0;</span><span
  12777. class="cmtt-8">&#x00A0;0.00033677814,</span><span
  12778. class="cmtt-8">&#x00A0;0.00035866388,</span><span
  12779. class="cmtt-8">&#x00A0;0.00038197188,</span><span
  12780. class="cmtt-8">&#x00A0;0.00040679456,</span>
  12781. <br class="fancyvrb" /><a
  12782. id="x1-125068r34"></a><span
  12783. class="cmr-6">34</span><span
  12784. class="cmtt-8">&#x00A0;</span><span
  12785. class="cmtt-8">&#x00A0;</span><span
  12786. class="cmtt-8">&#x00A0;</span><span
  12787. class="cmtt-8">&#x00A0;0.00043323036,</span><span
  12788. class="cmtt-8">&#x00A0;0.00046138411,</span><span
  12789. class="cmtt-8">&#x00A0;0.00049136745,</span><span
  12790. class="cmtt-8">&#x00A0;0.00052329927,</span>
  12791. <br class="fancyvrb" /><a
  12792. id="x1-125070r35"></a><span
  12793. class="cmr-6">35</span><span
  12794. class="cmtt-8">&#x00A0;</span><span
  12795. class="cmtt-8">&#x00A0;</span><span
  12796. class="cmtt-8">&#x00A0;</span><span
  12797. class="cmtt-8">&#x00A0;0.00055730621,</span><span
  12798. class="cmtt-8">&#x00A0;0.00059352311,</span><span
  12799. class="cmtt-8">&#x00A0;0.00063209358,</span><span
  12800. class="cmtt-8">&#x00A0;0.00067317058,</span>
  12801. <br class="fancyvrb" /><a
  12802. id="x1-125072r36"></a><span
  12803. class="cmr-6">36</span><span
  12804. class="cmtt-8">&#x00A0;</span><span
  12805. class="cmtt-8">&#x00A0;</span><span
  12806. class="cmtt-8">&#x00A0;</span><span
  12807. class="cmtt-8">&#x00A0;0.00071691700,</span><span
  12808. class="cmtt-8">&#x00A0;0.00076350630,</span><span
  12809. class="cmtt-8">&#x00A0;0.00081312324,</span><span
  12810. class="cmtt-8">&#x00A0;0.00086596457,</span>
  12811. <br class="fancyvrb" /><a
  12812. id="x1-125074r37"></a><span
  12813. class="cmr-6">37</span><span
  12814. class="cmtt-8">&#x00A0;</span><span
  12815. class="cmtt-8">&#x00A0;</span><span
  12816. class="cmtt-8">&#x00A0;</span><span
  12817. class="cmtt-8">&#x00A0;0.00092223983,</span><span
  12818. class="cmtt-8">&#x00A0;0.00098217216,</span><span
  12819. class="cmtt-8">&#x00A0;0.0010459992,</span><span
  12820. class="cmtt-8">&#x00A0;</span><span
  12821. class="cmtt-8">&#x00A0;0.0011139742,</span>
  12822. <br class="fancyvrb" /><a
  12823. id="x1-125076r38"></a><span
  12824. class="cmr-6">38</span><span
  12825. class="cmtt-8">&#x00A0;</span><span
  12826. class="cmtt-8">&#x00A0;</span><span
  12827. class="cmtt-8">&#x00A0;</span><span
  12828. class="cmtt-8">&#x00A0;0.0011863665,</span><span
  12829. class="cmtt-8">&#x00A0;</span><span
  12830. class="cmtt-8">&#x00A0;0.0012634633,</span><span
  12831. class="cmtt-8">&#x00A0;</span><span
  12832. class="cmtt-8">&#x00A0;0.0013455702,</span><span
  12833. class="cmtt-8">&#x00A0;</span><span
  12834. class="cmtt-8">&#x00A0;0.0014330129,</span>
  12835. <br class="fancyvrb" /><a
  12836. id="x1-125078r39"></a><span
  12837. class="cmr-6">39</span><span
  12838. class="cmtt-8">&#x00A0;</span><span
  12839. class="cmtt-8">&#x00A0;</span><span
  12840. class="cmtt-8">&#x00A0;</span><span
  12841. class="cmtt-8">&#x00A0;0.0015261382,</span><span
  12842. class="cmtt-8">&#x00A0;</span><span
  12843. class="cmtt-8">&#x00A0;0.0016253153,</span><span
  12844. class="cmtt-8">&#x00A0;</span><span
  12845. class="cmtt-8">&#x00A0;0.0017309374,</span><span
  12846. class="cmtt-8">&#x00A0;</span><span
  12847. class="cmtt-8">&#x00A0;0.0018434235,</span>
  12848. <br class="fancyvrb" /><a
  12849. id="x1-125080r40"></a><span
  12850. class="cmr-6">40</span><span
  12851. class="cmtt-8">&#x00A0;</span><span
  12852. class="cmtt-8">&#x00A0;</span><span
  12853. class="cmtt-8">&#x00A0;</span><span
  12854. class="cmtt-8">&#x00A0;0.0019632195,</span><span
  12855. class="cmtt-8">&#x00A0;</span><span
  12856. class="cmtt-8">&#x00A0;0.0020908006,</span><span
  12857. class="cmtt-8">&#x00A0;</span><span
  12858. class="cmtt-8">&#x00A0;0.0022266726,</span><span
  12859. class="cmtt-8">&#x00A0;</span><span
  12860. class="cmtt-8">&#x00A0;0.0023713743,</span>
  12861. <br class="fancyvrb" /><a
  12862. id="x1-125082r41"></a><span
  12863. class="cmr-6">41</span><span
  12864. class="cmtt-8">&#x00A0;</span><span
  12865. class="cmtt-8">&#x00A0;</span><span
  12866. class="cmtt-8">&#x00A0;</span><span
  12867. class="cmtt-8">&#x00A0;0.0025254795,</span><span
  12868. class="cmtt-8">&#x00A0;</span><span
  12869. class="cmtt-8">&#x00A0;0.0026895994,</span><span
  12870. class="cmtt-8">&#x00A0;</span><span
  12871. class="cmtt-8">&#x00A0;0.0028643847,</span><span
  12872. class="cmtt-8">&#x00A0;</span><span
  12873. class="cmtt-8">&#x00A0;0.0030505286,</span>
  12874. <br class="fancyvrb" /><a
  12875. id="x1-125084r42"></a><span
  12876. class="cmr-6">42</span><span
  12877. class="cmtt-8">&#x00A0;</span><span
  12878. class="cmtt-8">&#x00A0;</span><span
  12879. class="cmtt-8">&#x00A0;</span><span
  12880. class="cmtt-8">&#x00A0;0.0032487691,</span><span
  12881. class="cmtt-8">&#x00A0;</span><span
  12882. class="cmtt-8">&#x00A0;0.0034598925,</span><span
  12883. class="cmtt-8">&#x00A0;</span><span
  12884. class="cmtt-8">&#x00A0;0.0036847358,</span><span
  12885. class="cmtt-8">&#x00A0;</span><span
  12886. class="cmtt-8">&#x00A0;0.0039241906,</span>
  12887. <br class="fancyvrb" /><a
  12888. id="x1-125086r43"></a><span
  12889. class="cmr-6">43</span><span
  12890. class="cmtt-8">&#x00A0;</span><span
  12891. class="cmtt-8">&#x00A0;</span><span
  12892. class="cmtt-8">&#x00A0;</span><span
  12893. class="cmtt-8">&#x00A0;0.0041792066,</span><span
  12894. class="cmtt-8">&#x00A0;</span><span
  12895. class="cmtt-8">&#x00A0;0.0044507950,</span><span
  12896. class="cmtt-8">&#x00A0;</span><span
  12897. class="cmtt-8">&#x00A0;0.0047400328,</span><span
  12898. class="cmtt-8">&#x00A0;</span><span
  12899. class="cmtt-8">&#x00A0;0.0050480668,</span>
  12900. <br class="fancyvrb" /><a
  12901. id="x1-125088r44"></a><span
  12902. class="cmr-6">44</span><span
  12903. class="cmtt-8">&#x00A0;</span><span
  12904. class="cmtt-8">&#x00A0;</span><span
  12905. class="cmtt-8">&#x00A0;</span><span
  12906. class="cmtt-8">&#x00A0;0.0053761186,</span><span
  12907. class="cmtt-8">&#x00A0;</span><span
  12908. class="cmtt-8">&#x00A0;0.0057254891,</span><span
  12909. class="cmtt-8">&#x00A0;</span><span
  12910. class="cmtt-8">&#x00A0;0.0060975636,</span><span
  12911. class="cmtt-8">&#x00A0;</span><span
  12912. class="cmtt-8">&#x00A0;0.0064938176,</span>
  12913. <br class="fancyvrb" /><a
  12914. id="x1-125090r45"></a><span
  12915. class="cmr-6">45</span><span
  12916. class="cmtt-8">&#x00A0;</span><span
  12917. class="cmtt-8">&#x00A0;</span><span
  12918. class="cmtt-8">&#x00A0;</span><span
  12919. class="cmtt-8">&#x00A0;0.0069158225,</span><span
  12920. class="cmtt-8">&#x00A0;</span><span
  12921. class="cmtt-8">&#x00A0;0.0073652516,</span><span
  12922. class="cmtt-8">&#x00A0;</span><span
  12923. class="cmtt-8">&#x00A0;0.0078438871,</span><span
  12924. class="cmtt-8">&#x00A0;</span><span
  12925. class="cmtt-8">&#x00A0;0.0083536271,</span>
  12926. <br class="fancyvrb" /><a
  12927. id="x1-125092r46"></a><span
  12928. class="cmr-6">46</span><span
  12929. class="cmtt-8">&#x00A0;</span><span
  12930. class="cmtt-8">&#x00A0;</span><span
  12931. class="cmtt-8">&#x00A0;</span><span
  12932. class="cmtt-8">&#x00A0;0.0088964928,</span><span
  12933. class="cmtt-8">&#x00A0;</span><span
  12934. class="cmtt-8">&#x00A0;0.009474637,</span><span
  12935. class="cmtt-8">&#x00A0;</span><span
  12936. class="cmtt-8">&#x00A0;</span><span
  12937. class="cmtt-8">&#x00A0;0.010090352,</span><span
  12938. class="cmtt-8">&#x00A0;</span><span
  12939. class="cmtt-8">&#x00A0;</span><span
  12940. class="cmtt-8">&#x00A0;0.010746080,</span>
  12941. <br class="fancyvrb" /><a
  12942. id="x1-125094r47"></a><span
  12943. class="cmr-6">47</span><span
  12944. class="cmtt-8">&#x00A0;</span><span
  12945. class="cmtt-8">&#x00A0;</span><span
  12946. class="cmtt-8">&#x00A0;</span><span
  12947. class="cmtt-8">&#x00A0;0.011444421,</span><span
  12948. class="cmtt-8">&#x00A0;</span><span
  12949. class="cmtt-8">&#x00A0;</span><span
  12950. class="cmtt-8">&#x00A0;0.012188144,</span><span
  12951. class="cmtt-8">&#x00A0;</span><span
  12952. class="cmtt-8">&#x00A0;</span><span
  12953. class="cmtt-8">&#x00A0;0.012980198,</span><span
  12954. class="cmtt-8">&#x00A0;</span><span
  12955. class="cmtt-8">&#x00A0;</span><span
  12956. class="cmtt-8">&#x00A0;0.013823725,</span>
  12957. <br class="fancyvrb" /><a
  12958. id="x1-125096r48"></a><span
  12959. class="cmr-6">48</span><span
  12960. class="cmtt-8">&#x00A0;</span><span
  12961. class="cmtt-8">&#x00A0;</span><span
  12962. class="cmtt-8">&#x00A0;</span><span
  12963. class="cmtt-8">&#x00A0;0.014722068,</span><span
  12964. class="cmtt-8">&#x00A0;</span><span
  12965. class="cmtt-8">&#x00A0;</span><span
  12966. class="cmtt-8">&#x00A0;0.015678791,</span><span
  12967. class="cmtt-8">&#x00A0;</span><span
  12968. class="cmtt-8">&#x00A0;</span><span
  12969. class="cmtt-8">&#x00A0;0.016697687,</span><span
  12970. class="cmtt-8">&#x00A0;</span><span
  12971. class="cmtt-8">&#x00A0;</span><span
  12972. class="cmtt-8">&#x00A0;0.017782797,</span>
  12973. <br class="fancyvrb" /><a
  12974. id="x1-125098r49"></a><span
  12975. class="cmr-6">49</span><span
  12976. class="cmtt-8">&#x00A0;</span><span
  12977. class="cmtt-8">&#x00A0;</span><span
  12978. class="cmtt-8">&#x00A0;</span><span
  12979. class="cmtt-8">&#x00A0;0.018938423,</span><span
  12980. class="cmtt-8">&#x00A0;</span><span
  12981. class="cmtt-8">&#x00A0;</span><span
  12982. class="cmtt-8">&#x00A0;0.020169149,</span><span
  12983. class="cmtt-8">&#x00A0;</span><span
  12984. class="cmtt-8">&#x00A0;</span><span
  12985. class="cmtt-8">&#x00A0;0.021479854,</span><span
  12986. class="cmtt-8">&#x00A0;</span><span
  12987. class="cmtt-8">&#x00A0;</span><span
  12988. class="cmtt-8">&#x00A0;0.022875735,</span>
  12989. <br class="fancyvrb" /><a
  12990. id="x1-125100r50"></a><span
  12991. class="cmr-6">50</span><span
  12992. class="cmtt-8">&#x00A0;</span><span
  12993. class="cmtt-8">&#x00A0;</span><span
  12994. class="cmtt-8">&#x00A0;</span><span
  12995. class="cmtt-8">&#x00A0;0.024362330,</span><span
  12996. class="cmtt-8">&#x00A0;</span><span
  12997. class="cmtt-8">&#x00A0;</span><span
  12998. class="cmtt-8">&#x00A0;0.025945531,</span><span
  12999. class="cmtt-8">&#x00A0;</span><span
  13000. class="cmtt-8">&#x00A0;</span><span
  13001. class="cmtt-8">&#x00A0;0.027631618,</span><span
  13002. class="cmtt-8">&#x00A0;</span><span
  13003. class="cmtt-8">&#x00A0;</span><span
  13004. class="cmtt-8">&#x00A0;0.029427276,</span>
  13005. <br class="fancyvrb" /><a
  13006. id="x1-125102r51"></a><span
  13007. class="cmr-6">51</span><span
  13008. class="cmtt-8">&#x00A0;</span><span
  13009. class="cmtt-8">&#x00A0;</span><span
  13010. class="cmtt-8">&#x00A0;</span><span
  13011. class="cmtt-8">&#x00A0;0.031339626,</span><span
  13012. class="cmtt-8">&#x00A0;</span><span
  13013. class="cmtt-8">&#x00A0;</span><span
  13014. class="cmtt-8">&#x00A0;0.033376252,</span><span
  13015. class="cmtt-8">&#x00A0;</span><span
  13016. class="cmtt-8">&#x00A0;</span><span
  13017. class="cmtt-8">&#x00A0;0.035545228,</span><span
  13018. class="cmtt-8">&#x00A0;</span><span
  13019. class="cmtt-8">&#x00A0;</span><span
  13020. class="cmtt-8">&#x00A0;0.037855157,</span>
  13021. <br class="fancyvrb" /><a
  13022. id="x1-125104r52"></a><span
  13023. class="cmr-6">52</span><span
  13024. class="cmtt-8">&#x00A0;</span><span
  13025. class="cmtt-8">&#x00A0;</span><span
  13026. class="cmtt-8">&#x00A0;</span><span
  13027. class="cmtt-8">&#x00A0;0.040315199,</span><span
  13028. class="cmtt-8">&#x00A0;</span><span
  13029. class="cmtt-8">&#x00A0;</span><span
  13030. class="cmtt-8">&#x00A0;0.042935108,</span><span
  13031. class="cmtt-8">&#x00A0;</span><span
  13032. class="cmtt-8">&#x00A0;</span><span
  13033. class="cmtt-8">&#x00A0;0.045725273,</span><span
  13034. class="cmtt-8">&#x00A0;</span><span
  13035. class="cmtt-8">&#x00A0;</span><span
  13036. class="cmtt-8">&#x00A0;0.048696758,</span>
  13037. <br class="fancyvrb" /><a
  13038. id="x1-125106r53"></a><span
  13039. class="cmr-6">53</span><span
  13040. class="cmtt-8">&#x00A0;</span><span
  13041. class="cmtt-8">&#x00A0;</span><span
  13042. class="cmtt-8">&#x00A0;</span><span
  13043. class="cmtt-8">&#x00A0;0.051861348,</span><span
  13044. class="cmtt-8">&#x00A0;</span><span
  13045. class="cmtt-8">&#x00A0;</span><span
  13046. class="cmtt-8">&#x00A0;0.055231591,</span><span
  13047. class="cmtt-8">&#x00A0;</span><span
  13048. class="cmtt-8">&#x00A0;</span><span
  13049. class="cmtt-8">&#x00A0;0.058820850,</span><span
  13050. class="cmtt-8">&#x00A0;</span><span
  13051. class="cmtt-8">&#x00A0;</span><span
  13052. class="cmtt-8">&#x00A0;0.062643361,</span>
  13053. <br class="fancyvrb" /><a
  13054. id="x1-125108r54"></a><span
  13055. class="cmr-6">54</span><span
  13056. class="cmtt-8">&#x00A0;</span><span
  13057. class="cmtt-8">&#x00A0;</span><span
  13058. class="cmtt-8">&#x00A0;</span><span
  13059. class="cmtt-8">&#x00A0;0.066714279,</span><span
  13060. class="cmtt-8">&#x00A0;</span><span
  13061. class="cmtt-8">&#x00A0;</span><span
  13062. class="cmtt-8">&#x00A0;0.071049749,</span><span
  13063. class="cmtt-8">&#x00A0;</span><span
  13064. class="cmtt-8">&#x00A0;</span><span
  13065. class="cmtt-8">&#x00A0;0.075666962,</span><span
  13066. class="cmtt-8">&#x00A0;</span><span
  13067. class="cmtt-8">&#x00A0;</span><span
  13068. class="cmtt-8">&#x00A0;0.080584227,</span>
  13069. <br class="fancyvrb" /><a
  13070. id="x1-125110r55"></a><span
  13071. class="cmr-6">55</span><span
  13072. class="cmtt-8">&#x00A0;</span><span
  13073. class="cmtt-8">&#x00A0;</span><span
  13074. class="cmtt-8">&#x00A0;</span><span
  13075. class="cmtt-8">&#x00A0;0.085821044,</span><span
  13076. class="cmtt-8">&#x00A0;</span><span
  13077. class="cmtt-8">&#x00A0;</span><span
  13078. class="cmtt-8">&#x00A0;0.091398179,</span><span
  13079. class="cmtt-8">&#x00A0;</span><span
  13080. class="cmtt-8">&#x00A0;</span><span
  13081. class="cmtt-8">&#x00A0;0.097337747,</span><span
  13082. class="cmtt-8">&#x00A0;</span><span
  13083. class="cmtt-8">&#x00A0;</span><span
  13084. class="cmtt-8">&#x00A0;0.10366330,</span>
  13085. <br class="fancyvrb" /><a
  13086. id="x1-125112r56"></a><span
  13087. class="cmr-6">56</span><span
  13088. class="cmtt-8">&#x00A0;</span><span
  13089. class="cmtt-8">&#x00A0;</span><span
  13090. class="cmtt-8">&#x00A0;</span><span
  13091. class="cmtt-8">&#x00A0;0.11039993,</span><span
  13092. class="cmtt-8">&#x00A0;</span><span
  13093. class="cmtt-8">&#x00A0;</span><span
  13094. class="cmtt-8">&#x00A0;</span><span
  13095. class="cmtt-8">&#x00A0;0.11757434,</span><span
  13096. class="cmtt-8">&#x00A0;</span><span
  13097. class="cmtt-8">&#x00A0;</span><span
  13098. class="cmtt-8">&#x00A0;</span><span
  13099. class="cmtt-8">&#x00A0;0.12521498,</span><span
  13100. class="cmtt-8">&#x00A0;</span><span
  13101. class="cmtt-8">&#x00A0;</span><span
  13102. class="cmtt-8">&#x00A0;</span><span
  13103. class="cmtt-8">&#x00A0;0.13335215,</span>
  13104. <br class="fancyvrb" /><a
  13105. id="x1-125114r57"></a><span
  13106. class="cmr-6">57</span><span
  13107. class="cmtt-8">&#x00A0;</span><span
  13108. class="cmtt-8">&#x00A0;</span><span
  13109. class="cmtt-8">&#x00A0;</span><span
  13110. class="cmtt-8">&#x00A0;0.14201813,</span><span
  13111. class="cmtt-8">&#x00A0;</span><span
  13112. class="cmtt-8">&#x00A0;</span><span
  13113. class="cmtt-8">&#x00A0;</span><span
  13114. class="cmtt-8">&#x00A0;0.15124727,</span><span
  13115. class="cmtt-8">&#x00A0;</span><span
  13116. class="cmtt-8">&#x00A0;</span><span
  13117. class="cmtt-8">&#x00A0;</span><span
  13118. class="cmtt-8">&#x00A0;0.16107617,</span><span
  13119. class="cmtt-8">&#x00A0;</span><span
  13120. class="cmtt-8">&#x00A0;</span><span
  13121. class="cmtt-8">&#x00A0;</span><span
  13122. class="cmtt-8">&#x00A0;0.17154380,</span>
  13123. <br class="fancyvrb" /><a
  13124. id="x1-125116r58"></a><span
  13125. class="cmr-6">58</span><span
  13126. class="cmtt-8">&#x00A0;</span><span
  13127. class="cmtt-8">&#x00A0;</span><span
  13128. class="cmtt-8">&#x00A0;</span><span
  13129. class="cmtt-8">&#x00A0;0.18269168,</span><span
  13130. class="cmtt-8">&#x00A0;</span><span
  13131. class="cmtt-8">&#x00A0;</span><span
  13132. class="cmtt-8">&#x00A0;</span><span
  13133. class="cmtt-8">&#x00A0;0.19456402,</span><span
  13134. class="cmtt-8">&#x00A0;</span><span
  13135. class="cmtt-8">&#x00A0;</span><span
  13136. class="cmtt-8">&#x00A0;</span><span
  13137. class="cmtt-8">&#x00A0;0.20720788,</span><span
  13138. class="cmtt-8">&#x00A0;</span><span
  13139. class="cmtt-8">&#x00A0;</span><span
  13140. class="cmtt-8">&#x00A0;</span><span
  13141. class="cmtt-8">&#x00A0;0.22067342,</span>
  13142. <br class="fancyvrb" /><a
  13143. id="x1-125118r59"></a><span
  13144. class="cmr-6">59</span><span
  13145. class="cmtt-8">&#x00A0;</span><span
  13146. class="cmtt-8">&#x00A0;</span><span
  13147. class="cmtt-8">&#x00A0;</span><span
  13148. class="cmtt-8">&#x00A0;0.23501402,</span><span
  13149. class="cmtt-8">&#x00A0;</span><span
  13150. class="cmtt-8">&#x00A0;</span><span
  13151. class="cmtt-8">&#x00A0;</span><span
  13152. class="cmtt-8">&#x00A0;0.25028656,</span><span
  13153. class="cmtt-8">&#x00A0;</span><span
  13154. class="cmtt-8">&#x00A0;</span><span
  13155. class="cmtt-8">&#x00A0;</span><span
  13156. class="cmtt-8">&#x00A0;0.26655159,</span><span
  13157. class="cmtt-8">&#x00A0;</span><span
  13158. class="cmtt-8">&#x00A0;</span><span
  13159. class="cmtt-8">&#x00A0;</span><span
  13160. class="cmtt-8">&#x00A0;0.28387361,</span>
  13161. <br class="fancyvrb" /><a
  13162. id="x1-125120r60"></a><span
  13163. class="cmr-6">60</span><span
  13164. class="cmtt-8">&#x00A0;</span><span
  13165. class="cmtt-8">&#x00A0;</span><span
  13166. class="cmtt-8">&#x00A0;</span><span
  13167. class="cmtt-8">&#x00A0;0.30232132,</span><span
  13168. class="cmtt-8">&#x00A0;</span><span
  13169. class="cmtt-8">&#x00A0;</span><span
  13170. class="cmtt-8">&#x00A0;</span><span
  13171. class="cmtt-8">&#x00A0;0.32196786,</span><span
  13172. class="cmtt-8">&#x00A0;</span><span
  13173. class="cmtt-8">&#x00A0;</span><span
  13174. class="cmtt-8">&#x00A0;</span><span
  13175. class="cmtt-8">&#x00A0;0.34289114,</span><span
  13176. class="cmtt-8">&#x00A0;</span><span
  13177. class="cmtt-8">&#x00A0;</span><span
  13178. class="cmtt-8">&#x00A0;</span><span
  13179. class="cmtt-8">&#x00A0;0.36517414,</span>
  13180. <br class="fancyvrb" /><a
  13181. id="x1-125122r61"></a><span
  13182. class="cmr-6">61</span><span
  13183. class="cmtt-8">&#x00A0;</span><span
  13184. class="cmtt-8">&#x00A0;</span><span
  13185. class="cmtt-8">&#x00A0;</span><span
  13186. class="cmtt-8">&#x00A0;0.38890521,</span><span
  13187. class="cmtt-8">&#x00A0;</span><span
  13188. class="cmtt-8">&#x00A0;</span><span
  13189. class="cmtt-8">&#x00A0;</span><span
  13190. class="cmtt-8">&#x00A0;0.41417847,</span><span
  13191. class="cmtt-8">&#x00A0;</span><span
  13192. class="cmtt-8">&#x00A0;</span><span
  13193. class="cmtt-8">&#x00A0;</span><span
  13194. class="cmtt-8">&#x00A0;0.44109412,</span><span
  13195. class="cmtt-8">&#x00A0;</span><span
  13196. class="cmtt-8">&#x00A0;</span><span
  13197. class="cmtt-8">&#x00A0;</span><span
  13198. class="cmtt-8">&#x00A0;0.46975890,</span>
  13199. <br class="fancyvrb" /><a
  13200. id="x1-125124r62"></a><span
  13201. class="cmr-6">62</span><span
  13202. class="cmtt-8">&#x00A0;</span><span
  13203. class="cmtt-8">&#x00A0;</span><span
  13204. class="cmtt-8">&#x00A0;</span><span
  13205. class="cmtt-8">&#x00A0;0.50028648,</span><span
  13206. class="cmtt-8">&#x00A0;</span><span
  13207. class="cmtt-8">&#x00A0;</span><span
  13208. class="cmtt-8">&#x00A0;</span><span
  13209. class="cmtt-8">&#x00A0;0.53279791,</span><span
  13210. class="cmtt-8">&#x00A0;</span><span
  13211. class="cmtt-8">&#x00A0;</span><span
  13212. class="cmtt-8">&#x00A0;</span><span
  13213. class="cmtt-8">&#x00A0;0.56742212,</span><span
  13214. class="cmtt-8">&#x00A0;</span><span
  13215. class="cmtt-8">&#x00A0;</span><span
  13216. class="cmtt-8">&#x00A0;</span><span
  13217. class="cmtt-8">&#x00A0;0.60429640,</span>
  13218. <br class="fancyvrb" /><a
  13219. id="x1-125126r63"></a><span
  13220. class="cmr-6">63</span><span
  13221. class="cmtt-8">&#x00A0;</span><span
  13222. class="cmtt-8">&#x00A0;</span><span
  13223. class="cmtt-8">&#x00A0;</span><span
  13224. class="cmtt-8">&#x00A0;0.64356699,</span><span
  13225. class="cmtt-8">&#x00A0;</span><span
  13226. class="cmtt-8">&#x00A0;</span><span
  13227. class="cmtt-8">&#x00A0;</span><span
  13228. class="cmtt-8">&#x00A0;0.68538959,</span><span
  13229. class="cmtt-8">&#x00A0;</span><span
  13230. class="cmtt-8">&#x00A0;</span><span
  13231. class="cmtt-8">&#x00A0;</span><span
  13232. class="cmtt-8">&#x00A0;0.72993007,</span><span
  13233. class="cmtt-8">&#x00A0;</span><span
  13234. class="cmtt-8">&#x00A0;</span><span
  13235. class="cmtt-8">&#x00A0;</span><span
  13236. class="cmtt-8">&#x00A0;0.77736504,</span>
  13237. <br class="fancyvrb" /><a
  13238. id="x1-125128r64"></a><span
  13239. class="cmr-6">64</span><span
  13240. class="cmtt-8">&#x00A0;</span><span
  13241. class="cmtt-8">&#x00A0;</span><span
  13242. class="cmtt-8">&#x00A0;</span><span
  13243. class="cmtt-8">&#x00A0;0.82788260,</span><span
  13244. class="cmtt-8">&#x00A0;</span><span
  13245. class="cmtt-8">&#x00A0;</span><span
  13246. class="cmtt-8">&#x00A0;</span><span
  13247. class="cmtt-8">&#x00A0;0.88168307,</span><span
  13248. class="cmtt-8">&#x00A0;</span><span
  13249. class="cmtt-8">&#x00A0;</span><span
  13250. class="cmtt-8">&#x00A0;</span><span
  13251. class="cmtt-8">&#x00A0;0.9389798,</span><span
  13252. class="cmtt-8">&#x00A0;</span><span
  13253. class="cmtt-8">&#x00A0;</span><span
  13254. class="cmtt-8">&#x00A0;</span><span
  13255. class="cmtt-8">&#x00A0;</span><span
  13256. class="cmtt-8">&#x00A0;1.</span>
  13257. </div>
  13258. <h3 class="sectionHead"><span class="titlemark">A. </span> <a
  13259. id="x1-126000A"></a>Embedding Vorbis into an Ogg stream</h3>
  13260. <!--l. 6--><p class="noindent" >
  13261. <h4 class="subsectionHead"><span class="titlemark">A.1. </span> <a
  13262. id="x1-127000A.1"></a>Overview</h4>
  13263. <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
  13264. compressed audio packet data into file form.
  13265. <!--l. 12--><p class="noindent" >The <a
  13266. href="#x1-20001">Section&#x00A0;1</a>, &#8220;<a
  13267. href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221; provides an overview of the construction of
  13268. Vorbis audio packets.
  13269. <!--l. 15--><p class="noindent" >The <a
  13270. href="oggstream.html" >Ogg bitstream overview</a> and <a
  13271. href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
  13272. descriptions of Ogg transport streams. This specification document assumes a working
  13273. knowledge of the concepts covered in these named backround documents. Please read them
  13274. first.
  13275. <!--l. 22--><p class="noindent" >
  13276. <h5 class="subsubsectionHead"><span class="titlemark">A.1.1. </span> <a
  13277. id="x1-128000A.1.1"></a>Restrictions</h5>
  13278. <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
  13279. streams in degenerate, unmultiplexed form only. That is:
  13280. <ul class="itemize1">
  13281. <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
  13282. </li>
  13283. <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
  13284. (links).
  13285. </li>
  13286. <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
  13287. per link)
  13288. </li></ul>
  13289. <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
  13290. types into a multi-stream Ogg file. At the time this document was written, Ogg was
  13291. becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
  13292. audio. However, a &#8217;Vorbis I audio file&#8217; is taken to imply Vorbis audio existing alone
  13293. within a degenerate Ogg stream. A compliant &#8217;Vorbis audio player&#8217; is not required to
  13294. implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
  13295. stream (naturally, application authors are encouraged to support full multiplexed Ogg
  13296. handling).
  13297. <!--l. 55--><p class="noindent" >
  13298. <h5 class="subsubsectionHead"><span class="titlemark">A.1.2. </span> <a
  13299. id="x1-129000A.1.2"></a>MIME type</h5>
  13300. <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
  13301. applications should use <span
  13302. class="cmtt-12">application/ogg</span>, while visual media should use <span
  13303. class="cmtt-12">video/ogg</span>, and audio
  13304. <span
  13305. class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
  13306. encapsulated Vorbis should use <span
  13307. class="cmtt-12">audio/vorbis </span>+ <span
  13308. class="cmtt-12">audio/vorbis-config</span>.
  13309. <!--l. 65--><p class="noindent" >
  13310. <h4 class="subsectionHead"><span class="titlemark">A.2. </span> <a
  13311. id="x1-130000A.2"></a>Encapsulation</h4>
  13312. <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
  13313. <ul class="itemize1">
  13314. <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
  13315. as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
  13316. results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
  13317. stream.
  13318. </li>
  13319. <li class="itemize">This first page is marked &#8217;beginning of stream&#8217; in the page flags.
  13320. </li>
  13321. <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
  13322. more pages beginning on the second page of the logical stream. However many pages
  13323. they span, the third header packet finishes the page on which it ends. The next (first
  13324. audio) packet must begin on a fresh page.
  13325. </li>
  13326. <li class="itemize">The granule position of these first pages containing only headers is zero.
  13327. </li>
  13328. <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
  13329. </li>
  13330. <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
  13331. </li>
  13332. <li class="itemize">The last page is marked &#8217;end of stream&#8217; in the page flags.
  13333. </li>
  13334. <li class="itemize">Vorbis packets may span page boundaries.
  13335. </li>
  13336. <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
  13337. samples (per channel; a stereo stream&#8217;s granule position does not increment at twice
  13338. the speed of a mono stream).
  13339. </li>
  13340. <li class="itemize">The granule position of a page represents the end PCM sample position of the last
  13341. packet <span
  13342. class="cmti-12">completed </span>on that page. The &#8217;last PCM sample&#8217; is the last complete sample
  13343. returned by decode, not an internal sample awaiting lapping with a subsequent block.
  13344. A page that is entirely spanned by a single packet (that completes on a subsequent
  13345. page) has no granule position, and the granule position is set to &#8217;-1&#8217;.
  13346. <!--l. 126--><p class="noindent" >Note that the last decoded (fully lapped) PCM sample from a packet is not
  13347. necessarily the middle sample from that block. If, eg, the current Vorbis packet
  13348. encodes a &#8221;long block&#8221; and the next Vorbis packet encodes a &#8221;short block&#8221;, the last
  13349. decodable sample from the current packet be at position (3*long_block_length/4) -
  13350. (short_block_length/4).
  13351. </li>
  13352. <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
  13353. started at position zero. Although the granule position belongs to the last completed
  13354. packet on the page and a valid granule position must be positive, by inference it may
  13355. indicate that the PCM position of the beginning of audio is positive or negative.
  13356. <ul class="itemize2">
  13357. <li class="itemize">A positive starting value simply indicates that this stream begins at some
  13358. positive time offset, potentially within a larger program. This is a common case
  13359. when connecting to the middle of broadcast stream.
  13360. </li>
  13361. <li class="itemize">A negative value indicates that output samples preceeding time zero should be
  13362. discarded during decoding; this technique is used to allow sample-granularity
  13363. editing of the stream start time of already-encoded Vorbis streams. The number
  13364. of samples to be discarded must not exceed the overlap-add span of the first two
  13365. audio packets.
  13366. </li></ul>
  13367. <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
  13368. second finished audio packet must flush the page on which it appears and the
  13369. third packet begin a fresh page. This allows the decoder to always be able to
  13370. perform PCM position adjustments before needing to return any PCM data from
  13371. synthesis, resulting in correct positioning information without any aditional seeking
  13372. logic.
  13373. <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a
  13374. id="x1-131000A.2"></a><span
  13375. class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
  13376. incorrect positioning information for seeking operations at the very beginning of the
  13377. stream.
  13378. </li>
  13379. <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
  13380. final packet would normally return is used to end the stream on other than even frame
  13381. boundaries. The difference between the actual available data returned and the
  13382. declared amount indicates how many trailing samples to discard from the decoding
  13383. process.
  13384. </li></ul>
  13385. <h3 class="sectionHead"><span class="titlemark">B. </span> <a
  13386. id="x1-132000B"></a>Vorbis encapsulation in RTP</h3>
  13387. <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span
  13388. class="cmti-12">&#8220;RTP Payload Format for Vorbis Encoded Audio&#8221; </span>for description of
  13389. how to embed Vorbis audio in an RTP stream.
  13390. <h3 class="likesectionHead"><a
  13391. id="x1-133000B"></a>Colophon</h3>
  13392. <!--l. 6--><p class="noindent" ><img
  13393. src="Vorbis_I_spec13x.png" alt="PIC" class="graphics"><!--tex4ht:graphics
  13394. name="Vorbis_I_spec13x.png" src="xifish.pdf"
  13395. -->
  13396. <!--l. 10--><p class="noindent" >Ogg is a <a
  13397. href="http://www.xiph.org/" >Xiph.Org Foundation</a> effort to protect essential tenets of Internet multimedia from
  13398. corporate hostage-taking; Open Source is the net&#8217;s greatest tool to keep everyone honest. See
  13399. <a
  13400. href="http://www.xiph.org/about.html" >About the Xiph.Org Foundation</a> for details.
  13401. <!--l. 17--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
  13402. Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.Org
  13403. Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
  13404. and certify specification compliance.
  13405. <!--l. 23--><p class="noindent" >Xiph.Org&#8217;s Vorbis software CODEC implementation is distributed under a BSD-like license. This
  13406. does not restrict third parties from distributing independent implementations of Vorbis software
  13407. under other licenses.
  13408. <!--l. 28--><p class="noindent" >Ogg, Vorbis, Xiph.Org Foundation and their logos are trademarks (tm) of the <a
  13409. href="http://www.xiph.org/" >Xiph.Org
  13410. Foundation</a>. These pages are copyright (C) 1994-2007 Xiph.Org Foundation. All rights
  13411. reserved.
  13412. <!--l. 33--><p class="noindent" >This document is set using <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span
  13413. class="E">E</span>X</span></span>.
  13414. <h3 class="likesectionHead"><a
  13415. id="x1-134000B"></a>References</h3>
  13416. <!--l. 125--><p class="noindent" >
  13417. <div class="thebibliography">
  13418. <p class="bibitem" ><span class="biblabel">
  13419. [1]<span class="bibsp">&#x00A0;&#x00A0;&#x00A0;</span></span><a
  13420. id="XSporer/Brandenburg/Edler"></a>T.&#x00A0;Sporer, K.&#x00A0;Brandenburg and
  13421. B.&#x00A0;Edler, The use of multirate filter banks for coding of high quality digital audio,
  13422. <a
  13423. href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span
  13424. class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
  13425. </p>
  13426. </div>
  13427. </body></html>