Vorbis_I_spec.html 566 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244
  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.tug.org/tex4ht/)">
  7. <meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)">
  8. <!-- html -->
  9. <meta name="src" content="Vorbis_I_spec.tex">
  10. <meta name="date" content="2015-02-27 13:18: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 27, 2015</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-580003.3" id="QQ2-1-63">Use of the codebook abstraction</a></span>
  94. <br />&#x00A0;<span class="sectionToc" >4 <a
  95. href="#x1-590004" id="QQ2-1-64">Codec Setup and Packet Decode</a></span>
  96. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.1 <a
  97. href="#x1-600004.1" id="QQ2-1-65">Overview</a></span>
  98. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.2 <a
  99. href="#x1-610004.2" id="QQ2-1-66">Header decode and decode setup</a></span>
  100. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.1 <a
  101. href="#x1-620004.2.1" id="QQ2-1-67">Common header decode</a></span>
  102. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.2 <a
  103. href="#x1-630004.2.2" id="QQ2-1-68">Identification header</a></span>
  104. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.3 <a
  105. href="#x1-640004.2.3" id="QQ2-1-69">Comment header</a></span>
  106. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.2.4 <a
  107. href="#x1-650004.2.4" id="QQ2-1-70">Setup header</a></span>
  108. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >4.3 <a
  109. href="#x1-720004.3" id="QQ2-1-78">Audio packet decode and synthesis</a></span>
  110. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.1 <a
  111. href="#x1-730004.3.1" id="QQ2-1-79">packet type, mode and window decode</a></span>
  112. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.2 <a
  113. href="#x1-740004.3.2" id="QQ2-1-80">floor curve decode</a></span>
  114. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.3 <a
  115. href="#x1-750004.3.3" id="QQ2-1-81">nonzero vector propagate</a></span>
  116. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.4 <a
  117. href="#x1-760004.3.4" id="QQ2-1-82">residue decode</a></span>
  118. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.5 <a
  119. href="#x1-770004.3.5" id="QQ2-1-83">inverse coupling</a></span>
  120. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.6 <a
  121. href="#x1-780004.3.6" id="QQ2-1-84">dot product</a></span>
  122. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.7 <a
  123. href="#x1-790004.3.7" id="QQ2-1-85">inverse MDCT</a></span>
  124. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.8 <a
  125. href="#x1-800004.3.8" id="QQ2-1-86">overlap_add</a></span>
  126. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >4.3.9 <a
  127. href="#x1-810004.3.9" id="QQ2-1-87">output channel order</a></span>
  128. <br />&#x00A0;<span class="sectionToc" >5 <a
  129. href="#x1-820005" id="QQ2-1-88">comment field and header specification</a></span>
  130. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.1 <a
  131. href="#x1-830005.1" id="QQ2-1-89">Overview</a></span>
  132. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >5.2 <a
  133. href="#x1-840005.2" id="QQ2-1-90">Comment encoding</a></span>
  134. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.1 <a
  135. href="#x1-850005.2.1" id="QQ2-1-91">Structure</a></span>
  136. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.2 <a
  137. href="#x1-860005.2.2" id="QQ2-1-92">Content vector format</a></span>
  138. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >5.2.3 <a
  139. href="#x1-890005.2.3" id="QQ2-1-95">Encoding</a></span>
  140. <br />&#x00A0;<span class="sectionToc" >6 <a
  141. href="#x1-900006" id="QQ2-1-96">Floor type 0 setup and decode</a></span>
  142. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.1 <a
  143. href="#x1-910006.1" id="QQ2-1-97">Overview</a></span>
  144. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >6.2 <a
  145. href="#x1-920006.2" id="QQ2-1-98">Floor 0 format</a></span>
  146. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.1 <a
  147. href="#x1-930006.2.1" id="QQ2-1-99">header decode</a></span>
  148. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.2 <a
  149. href="#x1-940006.2.2" id="QQ2-1-100">packet decode</a></span>
  150. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >6.2.3 <a
  151. href="#x1-950006.2.3" id="QQ2-1-101">curve computation</a></span>
  152. <br />&#x00A0;<span class="sectionToc" >7 <a
  153. href="#x1-970007" id="QQ2-1-103">Floor type 1 setup and decode</a></span>
  154. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.1 <a
  155. href="#x1-980007.1" id="QQ2-1-104">Overview</a></span>
  156. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >7.2 <a
  157. href="#x1-990007.2" id="QQ2-1-105">Floor 1 format</a></span>
  158. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.1 <a
  159. href="#x1-1000007.2.1" id="QQ2-1-106">model</a></span>
  160. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.2 <a
  161. href="#x1-1010007.2.2" id="QQ2-1-111">header decode</a></span>
  162. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.3 <a
  163. href="#x1-1020007.2.3" id="QQ2-1-112">packet decode</a></span>
  164. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >7.2.4 <a
  165. href="#x1-1030007.2.4" id="QQ2-1-113">curve computation</a></span>
  166. <br />&#x00A0;<span class="sectionToc" >8 <a
  167. href="#x1-1040008" id="QQ2-1-114">Residue setup and decode</a></span>
  168. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.1 <a
  169. href="#x1-1050008.1" id="QQ2-1-115">Overview</a></span>
  170. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.2 <a
  171. href="#x1-1060008.2" id="QQ2-1-116">Residue format</a></span>
  172. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.3 <a
  173. href="#x1-1070008.3" id="QQ2-1-118">residue 0</a></span>
  174. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.4 <a
  175. href="#x1-1080008.4" id="QQ2-1-119">residue 1</a></span>
  176. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.5 <a
  177. href="#x1-1090008.5" id="QQ2-1-120">residue 2</a></span>
  178. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >8.6 <a
  179. href="#x1-1100008.6" id="QQ2-1-122">Residue decode</a></span>
  180. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.1 <a
  181. href="#x1-1110008.6.1" id="QQ2-1-123">header decode</a></span>
  182. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.2 <a
  183. href="#x1-1120008.6.2" id="QQ2-1-124">packet decode</a></span>
  184. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.3 <a
  185. href="#x1-1130008.6.3" id="QQ2-1-125">format 0 specifics</a></span>
  186. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.4 <a
  187. href="#x1-1140008.6.4" id="QQ2-1-126">format 1 specifics</a></span>
  188. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >8.6.5 <a
  189. href="#x1-1150008.6.5" id="QQ2-1-127">format 2 specifics</a></span>
  190. <br />&#x00A0;<span class="sectionToc" >9 <a
  191. href="#x1-1160009" id="QQ2-1-128">Helper equations</a></span>
  192. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.1 <a
  193. href="#x1-1170009.1" id="QQ2-1-129">Overview</a></span>
  194. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >9.2 <a
  195. href="#x1-1180009.2" id="QQ2-1-130">Functions</a></span>
  196. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.1 <a
  197. href="#x1-1190009.2.1" id="QQ2-1-131">ilog</a></span>
  198. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.2 <a
  199. href="#x1-1200009.2.2" id="QQ2-1-132">float32_unpack</a></span>
  200. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.3 <a
  201. href="#x1-1210009.2.3" id="QQ2-1-133">lookup1_values</a></span>
  202. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.4 <a
  203. href="#x1-1220009.2.4" id="QQ2-1-134">low_neighbor</a></span>
  204. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.5 <a
  205. href="#x1-1230009.2.5" id="QQ2-1-135">high_neighbor</a></span>
  206. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.6 <a
  207. href="#x1-1240009.2.6" id="QQ2-1-136">render_point</a></span>
  208. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >9.2.7 <a
  209. href="#x1-1250009.2.7" id="QQ2-1-137">render_line</a></span>
  210. <br />&#x00A0;<span class="sectionToc" >10 <a
  211. href="#x1-12600010" id="QQ2-1-138">Tables</a></span>
  212. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >10.1 <a
  213. href="#x1-12700010.1" id="QQ2-1-139">floor1_inverse_dB_table</a></span>
  214. <br />&#x00A0;<span class="sectionToc" >A <a
  215. href="#x1-128000A" id="QQ2-1-140">Embedding Vorbis into an Ogg stream</a></span>
  216. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.1 <a
  217. href="#x1-129000A.1" id="QQ2-1-141">Overview</a></span>
  218. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.1 <a
  219. href="#x1-130000A.1.1" id="QQ2-1-142">Restrictions</a></span>
  220. <br />&#x00A0;&#x00A0;&#x00A0;<span class="subsubsectionToc" >A.1.2 <a
  221. href="#x1-131000A.1.2" id="QQ2-1-143">MIME type</a></span>
  222. <br />&#x00A0;&#x00A0;<span class="subsectionToc" >A.2 <a
  223. href="#x1-132000A.2" id="QQ2-1-144">Encapsulation</a></span>
  224. <br />&#x00A0;<span class="sectionToc" >B <a
  225. href="#x1-134000B" id="QQ2-1-146">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-590004">section&#x00A0;4</a>, &#8220;<a
  235. href="#x1-590004">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-128000A">section&#x00A0;A</a>,
  285. &#8220;<a
  286. href="#x1-128000A">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-820005">section&#x00A0;5</a>, &#8220;<a
  456. href="#x1-820005">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 * &#x03C0; sin2((x + .5)&#x2215;n * &#x03C0;)).
  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">~</span>140dB (<span
  634. class="cmsy-10x-x-120">~</span>24 bits unsigned), and the audio spectrum
  635. vector should represent a minimum of 120dB (<span
  636. class="cmsy-10x-x-120">~</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">-</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">-</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">-</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"><a
  685. id="x1-35002r1"></a><span
  686. class="cmr-6">1</span><span
  687. class="cmtt-8">&#x00A0;</span><span
  688. class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span></div>
  689. <!--l. 523--><p class="noindent" >from the center of the previous window to the center of the current window.
  690. <!--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
  691. encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
  692. PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
  693. <h3 class="sectionHead"><span class="titlemark">2. </span> <a
  694. id="x1-360002"></a>Bitpacking Convention</h3>
  695. <!--l. 6--><p class="noindent" >
  696. <h4 class="subsectionHead"><span class="titlemark">2.1. </span> <a
  697. id="x1-370002.1"></a>Overview</h4>
  698. <!--l. 8--><p class="noindent" >The Vorbis codec uses relatively unstructured raw packets containing arbitrary-width binary
  699. integer fields. Logically, these packets are a bitstream in which bits are coded one-by-one by the
  700. encoder and then read one-by-one in the same monotonically increasing order by the decoder.
  701. Most current binary storage arrangements group bits into a native word size of eight bits
  702. (octets), sixteen bits, thirty-two bits or, less commonly other fixed word sizes. The Vorbis
  703. bitpacking convention specifies the correct mapping of the logical packet bitstream into an actual
  704. representation in fixed-width words.
  705. <!--l. 19--><p class="noindent" >
  706. <h5 class="subsubsectionHead"><span class="titlemark">2.1.1. </span> <a
  707. id="x1-380002.1.1"></a>octets, bytes and words</h5>
  708. <!--l. 21--><p class="noindent" >In most contemporary architectures, a &#8217;byte&#8217; is synonymous with an &#8217;octet&#8217;, that is, eight bits.
  709. This has not always been the case; seven, ten, eleven and sixteen bit &#8217;bytes&#8217; have been used.
  710. For purposes of the bitpacking convention, a byte implies the native, smallest integer
  711. storage representation offered by a platform. On modern platforms, this is generally
  712. assumed to be eight bits (not necessarily because of the processor but because of the
  713. filesystem/memory architecture. Modern filesystems invariably offer bytes as the fundamental
  714. atom of storage). A &#8217;word&#8217; is an integer size that is a grouped multiple of this smallest
  715. size.
  716. <!--l. 32--><p class="noindent" >The most ubiquitous architectures today consider a &#8217;byte&#8217; to be an octet (eight bits) and a word
  717. to be a group of two, four or eight bytes (16, 32 or 64 bits). Note however that the Vorbis
  718. bitpacking convention is still well defined for any native byte size; Vorbis uses the native
  719. bit-width of a given storage system. This document assumes that a byte is one octet for purposes
  720. of example.
  721. <!--l. 39--><p class="noindent" >
  722. <h5 class="subsubsectionHead"><span class="titlemark">2.1.2. </span> <a
  723. id="x1-390002.1.2"></a>bit order</h5>
  724. <!--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
  725. storing the two&#8217;s complement integer value +1. A byte&#8217;s &#8217;most significant&#8217; bit (MSb) is at the
  726. opposite end of the byte. Bits in a byte are numbered from zero at the LSb to <span
  727. class="cmmi-12">n </span>(<span
  728. class="cmmi-12">n </span>= 7 in an
  729. octet) for the MSb.
  730. <!--l. 50--><p class="noindent" >
  731. <h5 class="subsubsectionHead"><span class="titlemark">2.1.3. </span> <a
  732. id="x1-400002.1.3"></a>byte order</h5>
  733. <!--l. 52--><p class="noindent" >Words are native groupings of multiple bytes. Several byte orderings are possible in a word; the
  734. common ones are 3-2-1-0 (&#8217;big endian&#8217; or &#8217;most significant byte first&#8217; in which the
  735. highest-valued byte comes first), 0-1-2-3 (&#8217;little endian&#8217; or &#8217;least significant byte first&#8217; in
  736. which the lowest value byte comes first) and less commonly 3-1-2-0 and 0-2-1-3 (&#8217;mixed
  737. endian&#8217;).
  738. <!--l. 59--><p class="noindent" >The Vorbis bitpacking convention specifies storage and bitstream manipulation at the byte, not
  739. word, level, thus host word ordering is of a concern only during optimization when writing high
  740. performance code that operates on a word of storage at a time rather than by byte.
  741. Logically, bytes are always coded and decoded in order from byte zero through byte
  742. <span
  743. class="cmmi-12">n</span>.
  744. <!--l. 68--><p class="noindent" >
  745. <h5 class="subsubsectionHead"><span class="titlemark">2.1.4. </span> <a
  746. id="x1-410002.1.4"></a>coding bits into byte sequences</h5>
  747. <!--l. 70--><p class="noindent" >The Vorbis codec has need to code arbitrary bit-width integers, from zero to 32 bits
  748. wide, into packets. These integer fields are not aligned to the boundaries of the byte
  749. representation; the next field is written at the bit position at which the previous field
  750. ends.
  751. <!--l. 75--><p class="noindent" >The encoder logically packs integers by writing the LSb of a binary integer to the logical
  752. bitstream first, followed by next least significant bit, etc, until the requested number of bits
  753. have been coded. When packing the bits into bytes, the encoder begins by placing
  754. the LSb of the integer to be written into the least significant unused bit position of
  755. the destination byte, followed by the next-least significant bit of the source integer
  756. and so on up to the requested number of bits. When all bits of the destination byte
  757. have been filled, encoding continues by zeroing all bits of the next byte and writing
  758. the next bit into the bit position 0 of that byte. Decoding follows the same process
  759. as encoding, but by reading bits from the byte stream and reassembling them into
  760. integers.
  761. <!--l. 90--><p class="noindent" >
  762. <h5 class="subsubsectionHead"><span class="titlemark">2.1.5. </span> <a
  763. id="x1-420002.1.5"></a>signedness</h5>
  764. <!--l. 92--><p class="noindent" >The signedness of a specific number resulting from decode is to be interpreted by the decoder
  765. given decode context. That is, the three bit binary pattern &#8217;b111&#8217; can be taken to represent
  766. either &#8217;seven&#8217; as an unsigned integer, or &#8217;-1&#8217; as a signed, two&#8217;s complement integer. The
  767. encoder and decoder are responsible for knowing if fields are to be treated as signed or
  768. unsigned.
  769. <!--l. 101--><p class="noindent" >
  770. <h5 class="subsubsectionHead"><span class="titlemark">2.1.6. </span> <a
  771. id="x1-430002.1.6"></a>coding example</h5>
  772. <!--l. 103--><p class="noindent" >Code the 4 bit integer value &#8217;12&#8217; [b1100] into an empty bytestream. Bytestream result:
  773. <!--l. 106--><p class="noindent" >
  774. <div class="fancyvrb" id="fancyvrb2"><a
  775. id="x1-43002r1"></a><span
  776. class="cmr-6">1</span><span
  777. class="cmtt-8">&#x00A0;</span><span
  778. class="cmtt-8">&#x00A0;</span><span
  779. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  793. id="x1-43004r2"></a><span
  794. class="cmr-6">2</span><span
  795. class="cmtt-8">&#x00A0;</span><span
  796. class="cmtt-8">&#x00A0;</span><span
  797. class="cmtt-8">&#x00A0;</span><span
  798. class="cmtt-8">&#x00A0;</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;V</span><br class="fancyvrb" /><a
  811. id="x1-43006r3"></a><span
  812. class="cmr-6">3</span><span
  813. class="cmtt-8">&#x00A0;</span><span
  814. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  815. id="x1-43008r4"></a><span
  816. class="cmr-6">4</span><span
  817. class="cmtt-8">&#x00A0;</span><span
  818. class="cmtt-8">&#x00A0;</span><span
  819. class="cmtt-8">&#x00A0;</span><span
  820. class="cmtt-8">&#x00A0;</span><span
  821. class="cmtt-8">&#x00A0;</span><span
  822. class="cmtt-8">&#x00A0;</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;7</span><span
  827. class="cmtt-8">&#x00A0;6</span><span
  828. class="cmtt-8">&#x00A0;5</span><span
  829. class="cmtt-8">&#x00A0;4</span><span
  830. class="cmtt-8">&#x00A0;3</span><span
  831. class="cmtt-8">&#x00A0;2</span><span
  832. class="cmtt-8">&#x00A0;1</span><span
  833. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  834. id="x1-43010r5"></a><span
  835. class="cmr-6">5</span><span
  836. class="cmtt-8">&#x00A0;</span><span
  837. class="cmtt-8">&#x00A0;byte</span><span
  838. class="cmtt-8">&#x00A0;0</span><span
  839. class="cmtt-8">&#x00A0;[0</span><span
  840. class="cmtt-8">&#x00A0;0</span><span
  841. class="cmtt-8">&#x00A0;0</span><span
  842. class="cmtt-8">&#x00A0;0</span><span
  843. class="cmtt-8">&#x00A0;1</span><span
  844. class="cmtt-8">&#x00A0;1</span><span
  845. class="cmtt-8">&#x00A0;0</span><span
  846. class="cmtt-8">&#x00A0;0]</span><span
  847. class="cmtt-8">&#x00A0;</span><span
  848. class="cmtt-8">&#x00A0;&#x003C;-</span><br class="fancyvrb" /><a
  849. id="x1-43012r6"></a><span
  850. class="cmr-6">6</span><span
  851. class="cmtt-8">&#x00A0;</span><span
  852. class="cmtt-8">&#x00A0;byte</span><span
  853. class="cmtt-8">&#x00A0;1</span><span
  854. class="cmtt-8">&#x00A0;[</span><span
  855. class="cmtt-8">&#x00A0;</span><span
  856. class="cmtt-8">&#x00A0;</span><span
  857. class="cmtt-8">&#x00A0;</span><span
  858. class="cmtt-8">&#x00A0;</span><span
  859. class="cmtt-8">&#x00A0;</span><span
  860. class="cmtt-8">&#x00A0;</span><span
  861. class="cmtt-8">&#x00A0;</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>
  870. <br class="fancyvrb" /><a
  871. id="x1-43014r7"></a><span
  872. class="cmr-6">7</span><span
  873. class="cmtt-8">&#x00A0;</span><span
  874. class="cmtt-8">&#x00A0;byte</span><span
  875. class="cmtt-8">&#x00A0;2</span><span
  876. class="cmtt-8">&#x00A0;[</span><span
  877. class="cmtt-8">&#x00A0;</span><span
  878. class="cmtt-8">&#x00A0;</span><span
  879. class="cmtt-8">&#x00A0;</span><span
  880. class="cmtt-8">&#x00A0;</span><span
  881. class="cmtt-8">&#x00A0;</span><span
  882. class="cmtt-8">&#x00A0;</span><span
  883. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  892. id="x1-43016r8"></a><span
  893. class="cmr-6">8</span><span
  894. class="cmtt-8">&#x00A0;</span><span
  895. class="cmtt-8">&#x00A0;byte</span><span
  896. class="cmtt-8">&#x00A0;3</span><span
  897. class="cmtt-8">&#x00A0;[</span><span
  898. class="cmtt-8">&#x00A0;</span><span
  899. class="cmtt-8">&#x00A0;</span><span
  900. class="cmtt-8">&#x00A0;</span><span
  901. class="cmtt-8">&#x00A0;</span><span
  902. class="cmtt-8">&#x00A0;</span><span
  903. class="cmtt-8">&#x00A0;</span><span
  904. class="cmtt-8">&#x00A0;</span><span
  905. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  913. id="x1-43018r9"></a><span
  914. class="cmr-6">9</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><span
  922. class="cmtt-8">&#x00A0;</span><span
  923. class="cmtt-8">&#x00A0;</span><span
  924. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  930. id="x1-43020r10"></a><span
  931. class="cmr-6">10</span><span
  932. class="cmtt-8">&#x00A0;</span><span
  933. class="cmtt-8">&#x00A0;byte</span><span
  934. class="cmtt-8">&#x00A0;n</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><span
  940. class="cmtt-8">&#x00A0;</span><span
  941. class="cmtt-8">&#x00A0;</span><span
  942. class="cmtt-8">&#x00A0;</span><span
  943. class="cmtt-8">&#x00A0;</span><span
  944. class="cmtt-8">&#x00A0;</span><span
  945. class="cmtt-8">&#x00A0;</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;bytestream</span><span
  953. class="cmtt-8">&#x00A0;length</span><span
  954. class="cmtt-8">&#x00A0;==</span><span
  955. class="cmtt-8">&#x00A0;1</span><span
  956. class="cmtt-8">&#x00A0;byte</span><br class="fancyvrb" /><a
  957. id="x1-43022r11"></a><span
  958. class="cmr-6">11</span><span
  959. class="cmtt-8">&#x00A0;</span><span
  960. class="cmtt-8">&#x00A0;</span></div>
  961. <!--l. 121--><p class="noindent" >Continue by coding the 3 bit integer value &#8217;-1&#8217; [b111]:
  962. <!--l. 123--><p class="noindent" >
  963. <div class="fancyvrb" id="fancyvrb3"><a
  964. id="x1-43024r1"></a><span
  965. class="cmr-6">1</span><span
  966. class="cmtt-8">&#x00A0;</span><span
  967. class="cmtt-8">&#x00A0;</span><span
  968. class="cmtt-8">&#x00A0;</span><span
  969. class="cmtt-8">&#x00A0;</span><span
  970. class="cmtt-8">&#x00A0;</span><span
  971. class="cmtt-8">&#x00A0;</span><span
  972. class="cmtt-8">&#x00A0;</span><span
  973. class="cmtt-8">&#x00A0;</span><span
  974. class="cmtt-8">&#x00A0;</span><span
  975. class="cmtt-8">&#x00A0;|</span><br class="fancyvrb" /><a
  976. id="x1-43026r2"></a><span
  977. class="cmr-6">2</span><span
  978. class="cmtt-8">&#x00A0;</span><span
  979. class="cmtt-8">&#x00A0;</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;V</span><br class="fancyvrb" /><a
  988. id="x1-43028r3"></a><span
  989. class="cmr-6">3</span><span
  990. class="cmtt-8">&#x00A0;</span><span
  991. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  992. id="x1-43030r4"></a><span
  993. class="cmr-6">4</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;</span><span
  1003. class="cmtt-8">&#x00A0;7</span><span
  1004. class="cmtt-8">&#x00A0;6</span><span
  1005. class="cmtt-8">&#x00A0;5</span><span
  1006. class="cmtt-8">&#x00A0;4</span><span
  1007. class="cmtt-8">&#x00A0;3</span><span
  1008. class="cmtt-8">&#x00A0;2</span><span
  1009. class="cmtt-8">&#x00A0;1</span><span
  1010. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  1011. id="x1-43032r5"></a><span
  1012. class="cmr-6">5</span><span
  1013. class="cmtt-8">&#x00A0;</span><span
  1014. class="cmtt-8">&#x00A0;byte</span><span
  1015. class="cmtt-8">&#x00A0;0</span><span
  1016. class="cmtt-8">&#x00A0;[0</span><span
  1017. class="cmtt-8">&#x00A0;1</span><span
  1018. class="cmtt-8">&#x00A0;1</span><span
  1019. class="cmtt-8">&#x00A0;1</span><span
  1020. class="cmtt-8">&#x00A0;1</span><span
  1021. class="cmtt-8">&#x00A0;1</span><span
  1022. class="cmtt-8">&#x00A0;0</span><span
  1023. class="cmtt-8">&#x00A0;0]</span><span
  1024. class="cmtt-8">&#x00A0;</span><span
  1025. class="cmtt-8">&#x00A0;&#x003C;-</span><br class="fancyvrb" /><a
  1026. id="x1-43034r6"></a><span
  1027. class="cmr-6">6</span><span
  1028. class="cmtt-8">&#x00A0;</span><span
  1029. class="cmtt-8">&#x00A0;byte</span><span
  1030. class="cmtt-8">&#x00A0;1</span><span
  1031. class="cmtt-8">&#x00A0;[</span><span
  1032. class="cmtt-8">&#x00A0;</span><span
  1033. class="cmtt-8">&#x00A0;</span><span
  1034. class="cmtt-8">&#x00A0;</span><span
  1035. class="cmtt-8">&#x00A0;</span><span
  1036. class="cmtt-8">&#x00A0;</span><span
  1037. class="cmtt-8">&#x00A0;</span><span
  1038. class="cmtt-8">&#x00A0;</span><span
  1039. class="cmtt-8">&#x00A0;</span><span
  1040. class="cmtt-8">&#x00A0;</span><span
  1041. class="cmtt-8">&#x00A0;</span><span
  1042. class="cmtt-8">&#x00A0;</span><span
  1043. class="cmtt-8">&#x00A0;</span><span
  1044. class="cmtt-8">&#x00A0;</span><span
  1045. class="cmtt-8">&#x00A0;</span><span
  1046. class="cmtt-8">&#x00A0;]</span>
  1047. <br class="fancyvrb" /><a
  1048. id="x1-43036r7"></a><span
  1049. class="cmr-6">7</span><span
  1050. class="cmtt-8">&#x00A0;</span><span
  1051. class="cmtt-8">&#x00A0;byte</span><span
  1052. class="cmtt-8">&#x00A0;2</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><span
  1066. class="cmtt-8">&#x00A0;</span><span
  1067. class="cmtt-8">&#x00A0;</span><span
  1068. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  1069. id="x1-43038r8"></a><span
  1070. class="cmr-6">8</span><span
  1071. class="cmtt-8">&#x00A0;</span><span
  1072. class="cmtt-8">&#x00A0;byte</span><span
  1073. class="cmtt-8">&#x00A0;3</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><span
  1088. class="cmtt-8">&#x00A0;</span><span
  1089. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  1090. id="x1-43040r9"></a><span
  1091. class="cmr-6">9</span><span
  1092. class="cmtt-8">&#x00A0;</span><span
  1093. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  1107. id="x1-43042r10"></a><span
  1108. class="cmr-6">10</span><span
  1109. class="cmtt-8">&#x00A0;</span><span
  1110. class="cmtt-8">&#x00A0;byte</span><span
  1111. class="cmtt-8">&#x00A0;n</span><span
  1112. class="cmtt-8">&#x00A0;[</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><span
  1128. class="cmtt-8">&#x00A0;</span><span
  1129. class="cmtt-8">&#x00A0;bytestream</span><span
  1130. class="cmtt-8">&#x00A0;length</span><span
  1131. class="cmtt-8">&#x00A0;==</span><span
  1132. class="cmtt-8">&#x00A0;1</span><span
  1133. class="cmtt-8">&#x00A0;byte</span></div>
  1134. <!--l. 137--><p class="noindent" >Continue by coding the 7 bit integer value &#8217;17&#8217; [b0010001]:
  1135. <!--l. 139--><p class="noindent" >
  1136. <div class="fancyvrb" id="fancyvrb4"><a
  1137. id="x1-43044r1"></a><span
  1138. class="cmr-6">1</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><br class="fancyvrb" /><a
  1151. id="x1-43046r2"></a><span
  1152. class="cmr-6">2</span><span
  1153. class="cmtt-8">&#x00A0;</span><span
  1154. class="cmtt-8">&#x00A0;</span><span
  1155. class="cmtt-8">&#x00A0;</span><span
  1156. class="cmtt-8">&#x00A0;</span><span
  1157. class="cmtt-8">&#x00A0;</span><span
  1158. class="cmtt-8">&#x00A0;</span><span
  1159. class="cmtt-8">&#x00A0;</span><span
  1160. class="cmtt-8">&#x00A0;</span><span
  1161. class="cmtt-8">&#x00A0;</span><span
  1162. class="cmtt-8">&#x00A0;</span><span
  1163. class="cmtt-8">&#x00A0;</span><span
  1164. class="cmtt-8">&#x00A0;V</span><br class="fancyvrb" /><a
  1165. id="x1-43048r3"></a><span
  1166. class="cmr-6">3</span><span
  1167. class="cmtt-8">&#x00A0;</span><span
  1168. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  1169. id="x1-43050r4"></a><span
  1170. class="cmr-6">4</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><span
  1175. class="cmtt-8">&#x00A0;</span><span
  1176. class="cmtt-8">&#x00A0;</span><span
  1177. class="cmtt-8">&#x00A0;</span><span
  1178. class="cmtt-8">&#x00A0;</span><span
  1179. class="cmtt-8">&#x00A0;</span><span
  1180. class="cmtt-8">&#x00A0;7</span><span
  1181. class="cmtt-8">&#x00A0;6</span><span
  1182. class="cmtt-8">&#x00A0;5</span><span
  1183. class="cmtt-8">&#x00A0;4</span><span
  1184. class="cmtt-8">&#x00A0;3</span><span
  1185. class="cmtt-8">&#x00A0;2</span><span
  1186. class="cmtt-8">&#x00A0;1</span><span
  1187. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  1188. id="x1-43052r5"></a><span
  1189. class="cmr-6">5</span><span
  1190. class="cmtt-8">&#x00A0;</span><span
  1191. class="cmtt-8">&#x00A0;byte</span><span
  1192. class="cmtt-8">&#x00A0;0</span><span
  1193. class="cmtt-8">&#x00A0;[1</span><span
  1194. class="cmtt-8">&#x00A0;1</span><span
  1195. class="cmtt-8">&#x00A0;1</span><span
  1196. class="cmtt-8">&#x00A0;1</span><span
  1197. class="cmtt-8">&#x00A0;1</span><span
  1198. class="cmtt-8">&#x00A0;1</span><span
  1199. class="cmtt-8">&#x00A0;0</span><span
  1200. class="cmtt-8">&#x00A0;0]</span><br class="fancyvrb" /><a
  1201. id="x1-43054r6"></a><span
  1202. class="cmr-6">6</span><span
  1203. class="cmtt-8">&#x00A0;</span><span
  1204. class="cmtt-8">&#x00A0;byte</span><span
  1205. class="cmtt-8">&#x00A0;1</span><span
  1206. class="cmtt-8">&#x00A0;[0</span><span
  1207. class="cmtt-8">&#x00A0;0</span><span
  1208. class="cmtt-8">&#x00A0;0</span><span
  1209. class="cmtt-8">&#x00A0;0</span><span
  1210. class="cmtt-8">&#x00A0;1</span><span
  1211. class="cmtt-8">&#x00A0;0</span><span
  1212. class="cmtt-8">&#x00A0;0</span><span
  1213. class="cmtt-8">&#x00A0;0]</span><span
  1214. class="cmtt-8">&#x00A0;</span><span
  1215. class="cmtt-8">&#x00A0;&#x003C;-</span><br class="fancyvrb" /><a
  1216. id="x1-43056r7"></a><span
  1217. class="cmr-6">7</span><span
  1218. class="cmtt-8">&#x00A0;</span><span
  1219. class="cmtt-8">&#x00A0;byte</span><span
  1220. class="cmtt-8">&#x00A0;2</span><span
  1221. class="cmtt-8">&#x00A0;[</span><span
  1222. class="cmtt-8">&#x00A0;</span><span
  1223. class="cmtt-8">&#x00A0;</span><span
  1224. class="cmtt-8">&#x00A0;</span><span
  1225. class="cmtt-8">&#x00A0;</span><span
  1226. class="cmtt-8">&#x00A0;</span><span
  1227. class="cmtt-8">&#x00A0;</span><span
  1228. class="cmtt-8">&#x00A0;</span><span
  1229. class="cmtt-8">&#x00A0;</span><span
  1230. class="cmtt-8">&#x00A0;</span><span
  1231. class="cmtt-8">&#x00A0;</span><span
  1232. class="cmtt-8">&#x00A0;</span><span
  1233. class="cmtt-8">&#x00A0;</span><span
  1234. class="cmtt-8">&#x00A0;</span><span
  1235. class="cmtt-8">&#x00A0;</span><span
  1236. class="cmtt-8">&#x00A0;]</span>
  1237. <br class="fancyvrb" /><a
  1238. id="x1-43058r8"></a><span
  1239. class="cmr-6">8</span><span
  1240. class="cmtt-8">&#x00A0;</span><span
  1241. class="cmtt-8">&#x00A0;byte</span><span
  1242. class="cmtt-8">&#x00A0;3</span><span
  1243. class="cmtt-8">&#x00A0;[</span><span
  1244. class="cmtt-8">&#x00A0;</span><span
  1245. class="cmtt-8">&#x00A0;</span><span
  1246. class="cmtt-8">&#x00A0;</span><span
  1247. class="cmtt-8">&#x00A0;</span><span
  1248. class="cmtt-8">&#x00A0;</span><span
  1249. class="cmtt-8">&#x00A0;</span><span
  1250. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  1259. id="x1-43060r9"></a><span
  1260. class="cmr-6">9</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><span
  1267. class="cmtt-8">&#x00A0;</span><span
  1268. class="cmtt-8">&#x00A0;</span><span
  1269. class="cmtt-8">&#x00A0;</span><span
  1270. class="cmtt-8">&#x00A0;</span><span
  1271. class="cmtt-8">&#x00A0;</span><span
  1272. class="cmtt-8">&#x00A0;</span><span
  1273. class="cmtt-8">&#x00A0;</span><span
  1274. class="cmtt-8">&#x00A0;</span><span
  1275. class="cmtt-8">&#x00A0;...</span><br class="fancyvrb" /><a
  1276. id="x1-43062r10"></a><span
  1277. class="cmr-6">10</span><span
  1278. class="cmtt-8">&#x00A0;</span><span
  1279. class="cmtt-8">&#x00A0;byte</span><span
  1280. class="cmtt-8">&#x00A0;n</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><span
  1289. class="cmtt-8">&#x00A0;</span><span
  1290. class="cmtt-8">&#x00A0;</span><span
  1291. class="cmtt-8">&#x00A0;</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;bytestream</span><span
  1299. class="cmtt-8">&#x00A0;length</span><span
  1300. class="cmtt-8">&#x00A0;==</span><span
  1301. class="cmtt-8">&#x00A0;2</span><span
  1302. class="cmtt-8">&#x00A0;bytes</span><br class="fancyvrb" /><a
  1303. id="x1-43064r11"></a><span
  1304. class="cmr-6">11</span><span
  1305. class="cmtt-8">&#x00A0;</span><span
  1306. class="cmtt-8">&#x00A0;</span><span
  1307. class="cmtt-8">&#x00A0;</span><span
  1308. class="cmtt-8">&#x00A0;</span><span
  1309. class="cmtt-8">&#x00A0;</span><span
  1310. class="cmtt-8">&#x00A0;</span><span
  1311. class="cmtt-8">&#x00A0;</span><span
  1312. class="cmtt-8">&#x00A0;</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;</span><span
  1331. class="cmtt-8">&#x00A0;</span><span
  1332. class="cmtt-8">&#x00A0;bit</span><span
  1333. class="cmtt-8">&#x00A0;cursor</span><span
  1334. class="cmtt-8">&#x00A0;==</span><span
  1335. class="cmtt-8">&#x00A0;6</span></div>
  1336. <!--l. 154--><p class="noindent" >Continue by coding the 13 bit integer value &#8217;6969&#8217; [b110 11001110 01]:
  1337. <!--l. 156--><p class="noindent" >
  1338. <div class="fancyvrb" id="fancyvrb5"><a
  1339. id="x1-43066r1"></a><span
  1340. class="cmr-6">1</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><br class="fancyvrb" /><a
  1359. id="x1-43068r2"></a><span
  1360. class="cmr-6">2</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;</span><span
  1366. class="cmtt-8">&#x00A0;</span><span
  1367. class="cmtt-8">&#x00A0;</span><span
  1368. class="cmtt-8">&#x00A0;</span><span
  1369. class="cmtt-8">&#x00A0;</span><span
  1370. class="cmtt-8">&#x00A0;</span><span
  1371. class="cmtt-8">&#x00A0;</span><span
  1372. class="cmtt-8">&#x00A0;</span><span
  1373. class="cmtt-8">&#x00A0;</span><span
  1374. class="cmtt-8">&#x00A0;</span><span
  1375. class="cmtt-8">&#x00A0;</span><span
  1376. class="cmtt-8">&#x00A0;</span><span
  1377. class="cmtt-8">&#x00A0;</span><span
  1378. class="cmtt-8">&#x00A0;V</span><br class="fancyvrb" /><a
  1379. id="x1-43070r3"></a><span
  1380. class="cmr-6">3</span><span
  1381. class="cmtt-8">&#x00A0;</span><span
  1382. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  1383. id="x1-43072r4"></a><span
  1384. class="cmr-6">4</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><span
  1394. class="cmtt-8">&#x00A0;7</span><span
  1395. class="cmtt-8">&#x00A0;6</span><span
  1396. class="cmtt-8">&#x00A0;5</span><span
  1397. class="cmtt-8">&#x00A0;4</span><span
  1398. class="cmtt-8">&#x00A0;3</span><span
  1399. class="cmtt-8">&#x00A0;2</span><span
  1400. class="cmtt-8">&#x00A0;1</span><span
  1401. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  1402. id="x1-43074r5"></a><span
  1403. class="cmr-6">5</span><span
  1404. class="cmtt-8">&#x00A0;</span><span
  1405. class="cmtt-8">&#x00A0;byte</span><span
  1406. class="cmtt-8">&#x00A0;0</span><span
  1407. class="cmtt-8">&#x00A0;[1</span><span
  1408. class="cmtt-8">&#x00A0;1</span><span
  1409. class="cmtt-8">&#x00A0;1</span><span
  1410. class="cmtt-8">&#x00A0;1</span><span
  1411. class="cmtt-8">&#x00A0;1</span><span
  1412. class="cmtt-8">&#x00A0;1</span><span
  1413. class="cmtt-8">&#x00A0;0</span><span
  1414. class="cmtt-8">&#x00A0;0]</span><br class="fancyvrb" /><a
  1415. id="x1-43076r6"></a><span
  1416. class="cmr-6">6</span><span
  1417. class="cmtt-8">&#x00A0;</span><span
  1418. class="cmtt-8">&#x00A0;byte</span><span
  1419. class="cmtt-8">&#x00A0;1</span><span
  1420. class="cmtt-8">&#x00A0;[0</span><span
  1421. class="cmtt-8">&#x00A0;1</span><span
  1422. class="cmtt-8">&#x00A0;0</span><span
  1423. class="cmtt-8">&#x00A0;0</span><span
  1424. class="cmtt-8">&#x00A0;1</span><span
  1425. class="cmtt-8">&#x00A0;0</span><span
  1426. class="cmtt-8">&#x00A0;0</span><span
  1427. class="cmtt-8">&#x00A0;0]</span>
  1428. <br class="fancyvrb" /><a
  1429. id="x1-43078r7"></a><span
  1430. class="cmr-6">7</span><span
  1431. class="cmtt-8">&#x00A0;</span><span
  1432. class="cmtt-8">&#x00A0;byte</span><span
  1433. class="cmtt-8">&#x00A0;2</span><span
  1434. class="cmtt-8">&#x00A0;[1</span><span
  1435. class="cmtt-8">&#x00A0;1</span><span
  1436. class="cmtt-8">&#x00A0;0</span><span
  1437. class="cmtt-8">&#x00A0;0</span><span
  1438. class="cmtt-8">&#x00A0;1</span><span
  1439. class="cmtt-8">&#x00A0;1</span><span
  1440. class="cmtt-8">&#x00A0;1</span><span
  1441. class="cmtt-8">&#x00A0;0]</span><br class="fancyvrb" /><a
  1442. id="x1-43080r8"></a><span
  1443. class="cmr-6">8</span><span
  1444. class="cmtt-8">&#x00A0;</span><span
  1445. class="cmtt-8">&#x00A0;byte</span><span
  1446. class="cmtt-8">&#x00A0;3</span><span
  1447. class="cmtt-8">&#x00A0;[0</span><span
  1448. class="cmtt-8">&#x00A0;0</span><span
  1449. class="cmtt-8">&#x00A0;0</span><span
  1450. class="cmtt-8">&#x00A0;0</span><span
  1451. class="cmtt-8">&#x00A0;0</span><span
  1452. class="cmtt-8">&#x00A0;1</span><span
  1453. class="cmtt-8">&#x00A0;1</span><span
  1454. class="cmtt-8">&#x00A0;0]</span><span
  1455. class="cmtt-8">&#x00A0;</span><span
  1456. class="cmtt-8">&#x00A0;&#x003C;-</span><br class="fancyvrb" /><a
  1457. id="x1-43082r9"></a><span
  1458. class="cmr-6">9</span><span
  1459. class="cmtt-8">&#x00A0;</span><span
  1460. class="cmtt-8">&#x00A0;</span><span
  1461. class="cmtt-8">&#x00A0;</span><span
  1462. class="cmtt-8">&#x00A0;</span><span
  1463. class="cmtt-8">&#x00A0;</span><span
  1464. class="cmtt-8">&#x00A0;</span><span
  1465. class="cmtt-8">&#x00A0;</span><span
  1466. class="cmtt-8">&#x00A0;</span><span
  1467. class="cmtt-8">&#x00A0;</span><span
  1468. class="cmtt-8">&#x00A0;</span><span
  1469. class="cmtt-8">&#x00A0;</span><span
  1470. class="cmtt-8">&#x00A0;</span><span
  1471. class="cmtt-8">&#x00A0;</span><span
  1472. class="cmtt-8">&#x00A0;</span><span
  1473. class="cmtt-8">&#x00A0;...</span><br class="fancyvrb" /><a
  1474. id="x1-43084r10"></a><span
  1475. class="cmr-6">10</span><span
  1476. class="cmtt-8">&#x00A0;</span><span
  1477. class="cmtt-8">&#x00A0;byte</span><span
  1478. class="cmtt-8">&#x00A0;n</span><span
  1479. class="cmtt-8">&#x00A0;[</span><span
  1480. class="cmtt-8">&#x00A0;</span><span
  1481. class="cmtt-8">&#x00A0;</span><span
  1482. class="cmtt-8">&#x00A0;</span><span
  1483. class="cmtt-8">&#x00A0;</span><span
  1484. class="cmtt-8">&#x00A0;</span><span
  1485. class="cmtt-8">&#x00A0;</span><span
  1486. class="cmtt-8">&#x00A0;</span><span
  1487. class="cmtt-8">&#x00A0;</span><span
  1488. class="cmtt-8">&#x00A0;</span><span
  1489. class="cmtt-8">&#x00A0;</span><span
  1490. class="cmtt-8">&#x00A0;</span><span
  1491. class="cmtt-8">&#x00A0;</span><span
  1492. class="cmtt-8">&#x00A0;</span><span
  1493. class="cmtt-8">&#x00A0;</span><span
  1494. class="cmtt-8">&#x00A0;]</span><span
  1495. class="cmtt-8">&#x00A0;</span><span
  1496. class="cmtt-8">&#x00A0;bytestream</span><span
  1497. class="cmtt-8">&#x00A0;length</span><span
  1498. class="cmtt-8">&#x00A0;==</span><span
  1499. class="cmtt-8">&#x00A0;4</span><span
  1500. class="cmtt-8">&#x00A0;bytes</span><br class="fancyvrb" /><a
  1501. id="x1-43086r11"></a><span
  1502. class="cmr-6">11</span><span
  1503. class="cmtt-8">&#x00A0;</span><span
  1504. class="cmtt-8">&#x00A0;</span></div>
  1505. <!--l. 173--><p class="noindent" >
  1506. <h5 class="subsubsectionHead"><span class="titlemark">2.1.7. </span> <a
  1507. id="x1-440002.1.7"></a>decoding example</h5>
  1508. <!--l. 175--><p class="noindent" >Reading from the beginning of the bytestream encoded in the above example:
  1509. <!--l. 177--><p class="noindent" >
  1510. <div class="fancyvrb" id="fancyvrb6"><a
  1511. id="x1-44002r1"></a><span
  1512. class="cmr-6">1</span><span
  1513. class="cmtt-8">&#x00A0;</span><span
  1514. class="cmtt-8">&#x00A0;</span><span
  1515. class="cmtt-8">&#x00A0;</span><span
  1516. class="cmtt-8">&#x00A0;</span><span
  1517. class="cmtt-8">&#x00A0;</span><span
  1518. class="cmtt-8">&#x00A0;</span><span
  1519. class="cmtt-8">&#x00A0;</span><span
  1520. class="cmtt-8">&#x00A0;</span><span
  1521. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  1537. id="x1-44004r2"></a><span
  1538. class="cmr-6">2</span><span
  1539. class="cmtt-8">&#x00A0;</span><span
  1540. class="cmtt-8">&#x00A0;</span><span
  1541. class="cmtt-8">&#x00A0;</span><span
  1542. class="cmtt-8">&#x00A0;</span><span
  1543. class="cmtt-8">&#x00A0;</span><span
  1544. class="cmtt-8">&#x00A0;</span><span
  1545. class="cmtt-8">&#x00A0;</span><span
  1546. class="cmtt-8">&#x00A0;</span><span
  1547. class="cmtt-8">&#x00A0;</span><span
  1548. class="cmtt-8">&#x00A0;</span><span
  1549. class="cmtt-8">&#x00A0;</span><span
  1550. class="cmtt-8">&#x00A0;</span><span
  1551. class="cmtt-8">&#x00A0;</span><span
  1552. class="cmtt-8">&#x00A0;</span><span
  1553. class="cmtt-8">&#x00A0;</span><span
  1554. class="cmtt-8">&#x00A0;</span><span
  1555. class="cmtt-8">&#x00A0;</span><span
  1556. class="cmtt-8">&#x00A0;</span><span
  1557. class="cmtt-8">&#x00A0;</span><span
  1558. class="cmtt-8">&#x00A0;</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;V</span><br class="fancyvrb" /><a
  1563. id="x1-44006r3"></a><span
  1564. class="cmr-6">3</span><span
  1565. class="cmtt-8">&#x00A0;</span><span
  1566. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  1567. id="x1-44008r4"></a><span
  1568. class="cmr-6">4</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;7</span><span
  1579. class="cmtt-8">&#x00A0;6</span><span
  1580. class="cmtt-8">&#x00A0;5</span><span
  1581. class="cmtt-8">&#x00A0;4</span><span
  1582. class="cmtt-8">&#x00A0;3</span><span
  1583. class="cmtt-8">&#x00A0;2</span><span
  1584. class="cmtt-8">&#x00A0;1</span><span
  1585. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  1586. id="x1-44010r5"></a><span
  1587. class="cmr-6">5</span><span
  1588. class="cmtt-8">&#x00A0;</span><span
  1589. class="cmtt-8">&#x00A0;byte</span><span
  1590. class="cmtt-8">&#x00A0;0</span><span
  1591. class="cmtt-8">&#x00A0;[1</span><span
  1592. class="cmtt-8">&#x00A0;1</span><span
  1593. class="cmtt-8">&#x00A0;1</span><span
  1594. class="cmtt-8">&#x00A0;1</span><span
  1595. class="cmtt-8">&#x00A0;1</span><span
  1596. class="cmtt-8">&#x00A0;1</span><span
  1597. class="cmtt-8">&#x00A0;0</span><span
  1598. class="cmtt-8">&#x00A0;0]</span><span
  1599. class="cmtt-8">&#x00A0;</span><span
  1600. class="cmtt-8">&#x00A0;&#x003C;-</span>
  1601. <br class="fancyvrb" /><a
  1602. id="x1-44012r6"></a><span
  1603. class="cmr-6">6</span><span
  1604. class="cmtt-8">&#x00A0;</span><span
  1605. class="cmtt-8">&#x00A0;byte</span><span
  1606. class="cmtt-8">&#x00A0;1</span><span
  1607. class="cmtt-8">&#x00A0;[0</span><span
  1608. class="cmtt-8">&#x00A0;1</span><span
  1609. class="cmtt-8">&#x00A0;0</span><span
  1610. class="cmtt-8">&#x00A0;0</span><span
  1611. class="cmtt-8">&#x00A0;1</span><span
  1612. class="cmtt-8">&#x00A0;0</span><span
  1613. class="cmtt-8">&#x00A0;0</span><span
  1614. class="cmtt-8">&#x00A0;0]</span><br class="fancyvrb" /><a
  1615. id="x1-44014r7"></a><span
  1616. class="cmr-6">7</span><span
  1617. class="cmtt-8">&#x00A0;</span><span
  1618. class="cmtt-8">&#x00A0;byte</span><span
  1619. class="cmtt-8">&#x00A0;2</span><span
  1620. class="cmtt-8">&#x00A0;[1</span><span
  1621. class="cmtt-8">&#x00A0;1</span><span
  1622. class="cmtt-8">&#x00A0;0</span><span
  1623. class="cmtt-8">&#x00A0;0</span><span
  1624. class="cmtt-8">&#x00A0;1</span><span
  1625. class="cmtt-8">&#x00A0;1</span><span
  1626. class="cmtt-8">&#x00A0;1</span><span
  1627. class="cmtt-8">&#x00A0;0]</span><br class="fancyvrb" /><a
  1628. id="x1-44016r8"></a><span
  1629. class="cmr-6">8</span><span
  1630. class="cmtt-8">&#x00A0;</span><span
  1631. class="cmtt-8">&#x00A0;byte</span><span
  1632. class="cmtt-8">&#x00A0;3</span><span
  1633. class="cmtt-8">&#x00A0;[0</span><span
  1634. class="cmtt-8">&#x00A0;0</span><span
  1635. class="cmtt-8">&#x00A0;0</span><span
  1636. class="cmtt-8">&#x00A0;0</span><span
  1637. class="cmtt-8">&#x00A0;0</span><span
  1638. class="cmtt-8">&#x00A0;1</span><span
  1639. class="cmtt-8">&#x00A0;1</span><span
  1640. class="cmtt-8">&#x00A0;0]</span><span
  1641. class="cmtt-8">&#x00A0;</span><span
  1642. class="cmtt-8">&#x00A0;bytestream</span><span
  1643. class="cmtt-8">&#x00A0;length</span><span
  1644. class="cmtt-8">&#x00A0;==</span><span
  1645. class="cmtt-8">&#x00A0;4</span><span
  1646. class="cmtt-8">&#x00A0;bytes</span><br class="fancyvrb" /><a
  1647. id="x1-44018r9"></a><span
  1648. class="cmr-6">9</span><span
  1649. class="cmtt-8">&#x00A0;</span><span
  1650. class="cmtt-8">&#x00A0;</span></div>
  1651. <!--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
  1652. are worth noting here:
  1653. <ul class="itemize1">
  1654. <li class="itemize">Although these four bits were originally written as a single four-bit integer, reading
  1655. some other combination of bit-widths from the bitstream is well defined. There are
  1656. no artificial alignment boundaries maintained in the bitstream.
  1657. </li>
  1658. <li class="itemize">The second value is the two-bit-wide integer &#8217;b11&#8217;. This value may be interpreted
  1659. either as the unsigned value &#8217;3&#8217;, or the signed value &#8217;-1&#8217;. Signedness is dependent on
  1660. decode context.</li></ul>
  1661. <!--l. 208--><p class="noindent" >
  1662. <h5 class="subsubsectionHead"><span class="titlemark">2.1.8. </span> <a
  1663. id="x1-450002.1.8"></a>end-of-packet alignment</h5>
  1664. <!--l. 210--><p class="noindent" >The typical use of bitpacking is to produce many independent byte-aligned packets which are
  1665. embedded into a larger byte-aligned container structure, such as an Ogg transport bitstream.
  1666. Externally, each bytestream (encoded bitstream) must begin and end on a byte boundary. Often,
  1667. the encoded bitstream is not an integer number of bytes, and so there is unused (uncoded) space
  1668. in the last byte of a packet.
  1669. <!--l. 218--><p class="noindent" >Unused space in the last byte of a bytestream is always zeroed during the coding process. Thus,
  1670. should this unused space be read, it will return binary zeroes.
  1671. <!--l. 222--><p class="noindent" >Attempting to read past the end of an encoded packet results in an &#8217;end-of-packet&#8217; condition.
  1672. End-of-packet is not to be considered an error; it is merely a state indicating that there is
  1673. insufficient remaining data to fulfill the desired read size. Vorbis uses truncated packets as a
  1674. normal mode of operation, and as such, decoders must handle reading past the end of a packet as
  1675. a typical mode of operation. Any further read operations after an &#8217;end-of-packet&#8217; condition shall
  1676. also return &#8217;end-of-packet&#8217;.
  1677. <!--l. 233--><p class="noindent" >
  1678. <h5 class="subsubsectionHead"><span class="titlemark">2.1.9. </span> <a
  1679. id="x1-460002.1.9"></a>reading zero bits</h5>
  1680. <!--l. 235--><p class="noindent" >Reading a zero-bit-wide integer returns the value &#8217;0&#8217; and does not increment the stream cursor.
  1681. Reading to the end of the packet (but not past, such that an &#8217;end-of-packet&#8217; condition has not
  1682. triggered) and then reading a zero bit integer shall succeed, returning 0, and not trigger an
  1683. end-of-packet condition. Reading a zero-bit-wide integer after a previous read sets &#8217;end-of-packet&#8217;
  1684. shall also fail with &#8217;end-of-packet&#8217;.
  1685. <h3 class="sectionHead"><span class="titlemark">3. </span> <a
  1686. id="x1-470003"></a>Probability Model and Codebooks</h3>
  1687. <!--l. 6--><p class="noindent" >
  1688. <h4 class="subsectionHead"><span class="titlemark">3.1. </span> <a
  1689. id="x1-480003.1"></a>Overview</h4>
  1690. <!--l. 8--><p class="noindent" >Unlike practically every other mainstream audio codec, Vorbis has no statically configured
  1691. probability model, instead packing all entropy decoding configuration, VQ and Huffman, into the
  1692. bitstream itself in the third header, the codec setup header. This packed configuration consists of
  1693. multiple &#8217;codebooks&#8217;, each containing a specific Huffman-equivalent representation for decoding
  1694. compressed codewords as well as an optional lookup table of output vector values to which a
  1695. decoded Huffman value is applied as an offset, generating the final decoded output corresponding
  1696. to a given compressed codeword.
  1697. <!--l. 18--><p class="noindent" >
  1698. <h5 class="subsubsectionHead"><span class="titlemark">3.1.1. </span> <a
  1699. id="x1-490003.1.1"></a>Bitwise operation</h5>
  1700. <!--l. 19--><p class="noindent" >The codebook mechanism is built on top of the vorbis bitpacker. Both the codebooks themselves
  1701. and the codewords they decode are unrolled from a packet as a series of arbitrary-width values
  1702. read from the stream according to <a
  1703. href="#x1-360002">section&#x00A0;2</a>, &#8220;<a
  1704. href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221;.
  1705. <!--l. 27--><p class="noindent" >
  1706. <h4 class="subsectionHead"><span class="titlemark">3.2. </span> <a
  1707. id="x1-500003.2"></a>Packed codebook format</h4>
  1708. <!--l. 29--><p class="noindent" >For purposes of the examples below, we assume that the storage system&#8217;s native byte width is
  1709. eight bits. This is not universally true; see <a
  1710. href="#x1-360002">section&#x00A0;2</a>, &#8220;<a
  1711. href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; for discussion
  1712. relating to non-eight-bit bytes.
  1713. <!--l. 34--><p class="noindent" >
  1714. <h5 class="subsubsectionHead"><span class="titlemark">3.2.1. </span> <a
  1715. id="x1-510003.2.1"></a>codebook decode</h5>
  1716. <!--l. 36--><p class="noindent" >A codebook begins with a 24 bit sync pattern, 0x564342:
  1717. <!--l. 38--><p class="noindent" >
  1718. <div class="fancyvrb" id="fancyvrb7"><a
  1719. id="x1-51002r1"></a><span
  1720. class="cmr-6">1</span><span
  1721. class="cmtt-8">&#x00A0;</span><span
  1722. class="cmtt-8">&#x00A0;byte</span><span
  1723. class="cmtt-8">&#x00A0;0:</span><span
  1724. class="cmtt-8">&#x00A0;[</span><span
  1725. class="cmtt-8">&#x00A0;0</span><span
  1726. class="cmtt-8">&#x00A0;1</span><span
  1727. class="cmtt-8">&#x00A0;0</span><span
  1728. class="cmtt-8">&#x00A0;0</span><span
  1729. class="cmtt-8">&#x00A0;0</span><span
  1730. class="cmtt-8">&#x00A0;0</span><span
  1731. class="cmtt-8">&#x00A0;1</span><span
  1732. class="cmtt-8">&#x00A0;0</span><span
  1733. class="cmtt-8">&#x00A0;]</span><span
  1734. class="cmtt-8">&#x00A0;(0x42)</span><br class="fancyvrb" /><a
  1735. id="x1-51004r2"></a><span
  1736. class="cmr-6">2</span><span
  1737. class="cmtt-8">&#x00A0;</span><span
  1738. class="cmtt-8">&#x00A0;byte</span><span
  1739. class="cmtt-8">&#x00A0;1:</span><span
  1740. class="cmtt-8">&#x00A0;[</span><span
  1741. class="cmtt-8">&#x00A0;0</span><span
  1742. class="cmtt-8">&#x00A0;1</span><span
  1743. class="cmtt-8">&#x00A0;0</span><span
  1744. class="cmtt-8">&#x00A0;0</span><span
  1745. class="cmtt-8">&#x00A0;0</span><span
  1746. class="cmtt-8">&#x00A0;0</span><span
  1747. class="cmtt-8">&#x00A0;1</span><span
  1748. class="cmtt-8">&#x00A0;1</span><span
  1749. class="cmtt-8">&#x00A0;]</span><span
  1750. class="cmtt-8">&#x00A0;(0x43)</span><br class="fancyvrb" /><a
  1751. id="x1-51006r3"></a><span
  1752. class="cmr-6">3</span><span
  1753. class="cmtt-8">&#x00A0;</span><span
  1754. class="cmtt-8">&#x00A0;byte</span><span
  1755. class="cmtt-8">&#x00A0;2:</span><span
  1756. class="cmtt-8">&#x00A0;[</span><span
  1757. class="cmtt-8">&#x00A0;0</span><span
  1758. class="cmtt-8">&#x00A0;1</span><span
  1759. class="cmtt-8">&#x00A0;0</span><span
  1760. class="cmtt-8">&#x00A0;1</span><span
  1761. class="cmtt-8">&#x00A0;0</span><span
  1762. class="cmtt-8">&#x00A0;1</span><span
  1763. class="cmtt-8">&#x00A0;1</span><span
  1764. class="cmtt-8">&#x00A0;0</span><span
  1765. class="cmtt-8">&#x00A0;]</span><span
  1766. class="cmtt-8">&#x00A0;(0x56)</span></div>
  1767. <!--l. 44--><p class="noindent" >16 bit <span
  1768. class="cmtt-12">[codebook_dimensions] </span>and 24 bit <span
  1769. class="cmtt-12">[codebook_entries] </span>fields:
  1770. <!--l. 46--><p class="noindent" >
  1771. <div class="fancyvrb" id="fancyvrb8"><a
  1772. id="x1-51008r1"></a><span
  1773. class="cmr-6">1</span><span
  1774. class="cmtt-8">&#x00A0;</span><span
  1775. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  1776. id="x1-51010r2"></a><span
  1777. class="cmr-6">2</span><span
  1778. class="cmtt-8">&#x00A0;</span><span
  1779. class="cmtt-8">&#x00A0;byte</span><span
  1780. class="cmtt-8">&#x00A0;3:</span><span
  1781. class="cmtt-8">&#x00A0;[</span><span
  1782. class="cmtt-8">&#x00A0;X</span><span
  1783. class="cmtt-8">&#x00A0;X</span><span
  1784. class="cmtt-8">&#x00A0;X</span><span
  1785. class="cmtt-8">&#x00A0;X</span><span
  1786. class="cmtt-8">&#x00A0;X</span><span
  1787. class="cmtt-8">&#x00A0;X</span><span
  1788. class="cmtt-8">&#x00A0;X</span><span
  1789. class="cmtt-8">&#x00A0;X</span><span
  1790. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  1791. id="x1-51012r3"></a><span
  1792. class="cmr-6">3</span><span
  1793. class="cmtt-8">&#x00A0;</span><span
  1794. class="cmtt-8">&#x00A0;byte</span><span
  1795. class="cmtt-8">&#x00A0;4:</span><span
  1796. class="cmtt-8">&#x00A0;[</span><span
  1797. class="cmtt-8">&#x00A0;X</span><span
  1798. class="cmtt-8">&#x00A0;X</span><span
  1799. class="cmtt-8">&#x00A0;X</span><span
  1800. class="cmtt-8">&#x00A0;X</span><span
  1801. class="cmtt-8">&#x00A0;X</span><span
  1802. class="cmtt-8">&#x00A0;X</span><span
  1803. class="cmtt-8">&#x00A0;X</span><span
  1804. class="cmtt-8">&#x00A0;X</span><span
  1805. class="cmtt-8">&#x00A0;]</span><span
  1806. class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
  1807. class="cmtt-8">&#x00A0;(16</span><span
  1808. class="cmtt-8">&#x00A0;bit</span><span
  1809. class="cmtt-8">&#x00A0;unsigned)</span><br class="fancyvrb" /><a
  1810. id="x1-51014r4"></a><span
  1811. class="cmr-6">4</span><span
  1812. class="cmtt-8">&#x00A0;</span><span
  1813. class="cmtt-8">&#x00A0;</span>
  1814. <br class="fancyvrb" /><a
  1815. id="x1-51016r5"></a><span
  1816. class="cmr-6">5</span><span
  1817. class="cmtt-8">&#x00A0;</span><span
  1818. class="cmtt-8">&#x00A0;byte</span><span
  1819. class="cmtt-8">&#x00A0;5:</span><span
  1820. class="cmtt-8">&#x00A0;[</span><span
  1821. class="cmtt-8">&#x00A0;X</span><span
  1822. class="cmtt-8">&#x00A0;X</span><span
  1823. class="cmtt-8">&#x00A0;X</span><span
  1824. class="cmtt-8">&#x00A0;X</span><span
  1825. class="cmtt-8">&#x00A0;X</span><span
  1826. class="cmtt-8">&#x00A0;X</span><span
  1827. class="cmtt-8">&#x00A0;X</span><span
  1828. class="cmtt-8">&#x00A0;X</span><span
  1829. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  1830. id="x1-51018r6"></a><span
  1831. class="cmr-6">6</span><span
  1832. class="cmtt-8">&#x00A0;</span><span
  1833. class="cmtt-8">&#x00A0;byte</span><span
  1834. class="cmtt-8">&#x00A0;6:</span><span
  1835. class="cmtt-8">&#x00A0;[</span><span
  1836. class="cmtt-8">&#x00A0;X</span><span
  1837. class="cmtt-8">&#x00A0;X</span><span
  1838. class="cmtt-8">&#x00A0;X</span><span
  1839. class="cmtt-8">&#x00A0;X</span><span
  1840. class="cmtt-8">&#x00A0;X</span><span
  1841. class="cmtt-8">&#x00A0;X</span><span
  1842. class="cmtt-8">&#x00A0;X</span><span
  1843. class="cmtt-8">&#x00A0;X</span><span
  1844. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  1845. id="x1-51020r7"></a><span
  1846. class="cmr-6">7</span><span
  1847. class="cmtt-8">&#x00A0;</span><span
  1848. class="cmtt-8">&#x00A0;byte</span><span
  1849. class="cmtt-8">&#x00A0;7:</span><span
  1850. class="cmtt-8">&#x00A0;[</span><span
  1851. class="cmtt-8">&#x00A0;X</span><span
  1852. class="cmtt-8">&#x00A0;X</span><span
  1853. class="cmtt-8">&#x00A0;X</span><span
  1854. class="cmtt-8">&#x00A0;X</span><span
  1855. class="cmtt-8">&#x00A0;X</span><span
  1856. class="cmtt-8">&#x00A0;X</span><span
  1857. class="cmtt-8">&#x00A0;X</span><span
  1858. class="cmtt-8">&#x00A0;X</span><span
  1859. class="cmtt-8">&#x00A0;]</span><span
  1860. class="cmtt-8">&#x00A0;[codebook_entries]</span><span
  1861. class="cmtt-8">&#x00A0;(24</span><span
  1862. class="cmtt-8">&#x00A0;bit</span><span
  1863. class="cmtt-8">&#x00A0;unsigned)</span><br class="fancyvrb" /><a
  1864. id="x1-51022r8"></a><span
  1865. class="cmr-6">8</span><span
  1866. class="cmtt-8">&#x00A0;</span><span
  1867. class="cmtt-8">&#x00A0;</span></div>
  1868. <!--l. 57--><p class="noindent" >Next is the <span
  1869. class="cmtt-12">[ordered] </span>bit flag:
  1870. <!--l. 59--><p class="noindent" >
  1871. <div class="fancyvrb" id="fancyvrb9"><a
  1872. id="x1-51024r1"></a><span
  1873. class="cmr-6">1</span><span
  1874. class="cmtt-8">&#x00A0;</span><span
  1875. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  1876. id="x1-51026r2"></a><span
  1877. class="cmr-6">2</span><span
  1878. class="cmtt-8">&#x00A0;</span><span
  1879. class="cmtt-8">&#x00A0;byte</span><span
  1880. class="cmtt-8">&#x00A0;8:</span><span
  1881. class="cmtt-8">&#x00A0;[</span><span
  1882. class="cmtt-8">&#x00A0;</span><span
  1883. class="cmtt-8">&#x00A0;</span><span
  1884. class="cmtt-8">&#x00A0;</span><span
  1885. class="cmtt-8">&#x00A0;</span><span
  1886. class="cmtt-8">&#x00A0;</span><span
  1887. class="cmtt-8">&#x00A0;</span><span
  1888. class="cmtt-8">&#x00A0;</span><span
  1889. class="cmtt-8">&#x00A0;</span><span
  1890. class="cmtt-8">&#x00A0;</span><span
  1891. class="cmtt-8">&#x00A0;</span><span
  1892. class="cmtt-8">&#x00A0;</span><span
  1893. class="cmtt-8">&#x00A0;</span><span
  1894. class="cmtt-8">&#x00A0;</span><span
  1895. class="cmtt-8">&#x00A0;</span><span
  1896. class="cmtt-8">&#x00A0;X</span><span
  1897. class="cmtt-8">&#x00A0;]</span><span
  1898. class="cmtt-8">&#x00A0;[ordered]</span><span
  1899. class="cmtt-8">&#x00A0;(1</span><span
  1900. class="cmtt-8">&#x00A0;bit)</span><br class="fancyvrb" /><a
  1901. id="x1-51028r3"></a><span
  1902. class="cmr-6">3</span><span
  1903. class="cmtt-8">&#x00A0;</span><span
  1904. class="cmtt-8">&#x00A0;</span></div>
  1905. <!--l. 65--><p class="noindent" >Each entry, numbering a total of <span
  1906. class="cmtt-12">[codebook_entries]</span>, is assigned a codeword length.
  1907. We now read the list of codeword lengths and store these lengths in the array
  1908. <span
  1909. class="cmtt-12">[codebook_codeword_lengths]</span>. Decode of lengths is according to whether the <span
  1910. class="cmtt-12">[ordered] </span>flag
  1911. is set or unset.
  1912. <ul class="itemize1">
  1913. <li class="itemize">If the <span
  1914. class="cmtt-12">[ordered] </span>flag is unset, the codeword list is not length ordered and the decoder
  1915. needs to read each codeword length one-by-one.
  1916. <!--l. 77--><p class="noindent" >The decoder first reads one additional bit flag, the <span
  1917. class="cmtt-12">[sparse] </span>flag. This flag determines
  1918. whether or not the codebook contains unused entries that are not to be included in
  1919. the codeword decode tree:
  1920. <!--l. 82--><p class="noindent" >
  1921. <div class="fancyvrb" id="fancyvrb10"><a
  1922. id="x1-51030r1"></a><span
  1923. class="cmr-6">1</span><span
  1924. class="cmtt-8">&#x00A0;</span><span
  1925. class="cmtt-8">&#x00A0;byte</span><span
  1926. class="cmtt-8">&#x00A0;8:</span><span
  1927. class="cmtt-8">&#x00A0;[</span><span
  1928. class="cmtt-8">&#x00A0;</span><span
  1929. class="cmtt-8">&#x00A0;</span><span
  1930. class="cmtt-8">&#x00A0;</span><span
  1931. class="cmtt-8">&#x00A0;</span><span
  1932. class="cmtt-8">&#x00A0;</span><span
  1933. class="cmtt-8">&#x00A0;</span><span
  1934. class="cmtt-8">&#x00A0;</span><span
  1935. class="cmtt-8">&#x00A0;</span><span
  1936. class="cmtt-8">&#x00A0;</span><span
  1937. class="cmtt-8">&#x00A0;</span><span
  1938. class="cmtt-8">&#x00A0;</span><span
  1939. class="cmtt-8">&#x00A0;</span><span
  1940. class="cmtt-8">&#x00A0;X</span><span
  1941. class="cmtt-8">&#x00A0;1</span><span
  1942. class="cmtt-8">&#x00A0;]</span><span
  1943. class="cmtt-8">&#x00A0;[sparse]</span><span
  1944. class="cmtt-8">&#x00A0;flag</span><span
  1945. class="cmtt-8">&#x00A0;(1</span><span
  1946. class="cmtt-8">&#x00A0;bit)</span></div>
  1947. <!--l. 86--><p class="noindent" >The decoder now performs for each of the <span
  1948. class="cmtt-12">[codebook_entries] </span>codebook entries:
  1949. <!--l. 89--><p class="noindent" >
  1950. <div class="fancyvrb" id="fancyvrb11"><a
  1951. id="x1-51032r1"></a><span
  1952. class="cmr-6">1</span><span
  1953. class="cmtt-8">&#x00A0;</span><span
  1954. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  1955. id="x1-51034r2"></a><span
  1956. class="cmr-6">2</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;1)</span><span
  1961. class="cmtt-8">&#x00A0;if([sparse]</span><span
  1962. class="cmtt-8">&#x00A0;is</span><span
  1963. class="cmtt-8">&#x00A0;set)</span><span
  1964. class="cmtt-8">&#x00A0;</span><span
  1965. class="cmsy-8">{</span><br class="fancyvrb" /><a
  1966. id="x1-51036r3"></a><span
  1967. class="cmr-6">3</span><span
  1968. class="cmtt-8">&#x00A0;</span><span
  1969. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  1970. id="x1-51038r4"></a><span
  1971. class="cmr-6">4</span><span
  1972. class="cmtt-8">&#x00A0;</span><span
  1973. class="cmtt-8">&#x00A0;</span><span
  1974. class="cmtt-8">&#x00A0;</span><span
  1975. class="cmtt-8">&#x00A0;</span><span
  1976. class="cmtt-8">&#x00A0;</span><span
  1977. class="cmtt-8">&#x00A0;</span><span
  1978. class="cmtt-8">&#x00A0;</span><span
  1979. class="cmtt-8">&#x00A0;</span><span
  1980. class="cmtt-8">&#x00A0;</span><span
  1981. class="cmtt-8">&#x00A0;</span><span
  1982. class="cmtt-8">&#x00A0;2)</span><span
  1983. class="cmtt-8">&#x00A0;[flag]</span><span
  1984. class="cmtt-8">&#x00A0;=</span><span
  1985. class="cmtt-8">&#x00A0;read</span><span
  1986. class="cmtt-8">&#x00A0;one</span><span
  1987. class="cmtt-8">&#x00A0;bit;</span><br class="fancyvrb" /><a
  1988. id="x1-51040r5"></a><span
  1989. class="cmr-6">5</span><span
  1990. class="cmtt-8">&#x00A0;</span><span
  1991. class="cmtt-8">&#x00A0;</span><span
  1992. class="cmtt-8">&#x00A0;</span><span
  1993. class="cmtt-8">&#x00A0;</span><span
  1994. class="cmtt-8">&#x00A0;</span><span
  1995. class="cmtt-8">&#x00A0;</span><span
  1996. class="cmtt-8">&#x00A0;</span><span
  1997. class="cmtt-8">&#x00A0;</span><span
  1998. class="cmtt-8">&#x00A0;</span><span
  1999. class="cmtt-8">&#x00A0;</span><span
  2000. class="cmtt-8">&#x00A0;3)</span><span
  2001. class="cmtt-8">&#x00A0;if([flag]</span><span
  2002. class="cmtt-8">&#x00A0;is</span><span
  2003. class="cmtt-8">&#x00A0;set)</span><span
  2004. class="cmtt-8">&#x00A0;</span><span
  2005. class="cmsy-8">{</span><br class="fancyvrb" /><a
  2006. id="x1-51042r6"></a><span
  2007. class="cmr-6">6</span><span
  2008. class="cmtt-8">&#x00A0;</span><span
  2009. class="cmtt-8">&#x00A0;</span>
  2010. <br class="fancyvrb" /><a
  2011. id="x1-51044r7"></a><span
  2012. class="cmr-6">7</span><span
  2013. class="cmtt-8">&#x00A0;</span><span
  2014. class="cmtt-8">&#x00A0;</span><span
  2015. class="cmtt-8">&#x00A0;</span><span
  2016. class="cmtt-8">&#x00A0;</span><span
  2017. class="cmtt-8">&#x00A0;</span><span
  2018. class="cmtt-8">&#x00A0;</span><span
  2019. class="cmtt-8">&#x00A0;</span><span
  2020. class="cmtt-8">&#x00A0;</span><span
  2021. class="cmtt-8">&#x00A0;</span><span
  2022. class="cmtt-8">&#x00A0;</span><span
  2023. class="cmtt-8">&#x00A0;</span><span
  2024. class="cmtt-8">&#x00A0;</span><span
  2025. class="cmtt-8">&#x00A0;</span><span
  2026. class="cmtt-8">&#x00A0;</span><span
  2027. class="cmtt-8">&#x00A0;</span><span
  2028. class="cmtt-8">&#x00A0;4)</span><span
  2029. class="cmtt-8">&#x00A0;[length]</span><span
  2030. class="cmtt-8">&#x00A0;=</span><span
  2031. class="cmtt-8">&#x00A0;read</span><span
  2032. class="cmtt-8">&#x00A0;a</span><span
  2033. class="cmtt-8">&#x00A0;five</span><span
  2034. class="cmtt-8">&#x00A0;bit</span><span
  2035. class="cmtt-8">&#x00A0;unsigned</span><span
  2036. class="cmtt-8">&#x00A0;integer;</span><br class="fancyvrb" /><a
  2037. id="x1-51046r8"></a><span
  2038. class="cmr-6">8</span><span
  2039. class="cmtt-8">&#x00A0;</span><span
  2040. class="cmtt-8">&#x00A0;</span><span
  2041. class="cmtt-8">&#x00A0;</span><span
  2042. class="cmtt-8">&#x00A0;</span><span
  2043. class="cmtt-8">&#x00A0;</span><span
  2044. class="cmtt-8">&#x00A0;</span><span
  2045. class="cmtt-8">&#x00A0;</span><span
  2046. class="cmtt-8">&#x00A0;</span><span
  2047. class="cmtt-8">&#x00A0;</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;5)</span><span
  2055. class="cmtt-8">&#x00A0;codeword</span><span
  2056. class="cmtt-8">&#x00A0;length</span><span
  2057. class="cmtt-8">&#x00A0;for</span><span
  2058. class="cmtt-8">&#x00A0;this</span><span
  2059. class="cmtt-8">&#x00A0;entry</span><span
  2060. class="cmtt-8">&#x00A0;is</span><span
  2061. class="cmtt-8">&#x00A0;[length]+1;</span><br class="fancyvrb" /><a
  2062. id="x1-51048r9"></a><span
  2063. class="cmr-6">9</span><span
  2064. class="cmtt-8">&#x00A0;</span><span
  2065. class="cmtt-8">&#x00A0;</span>
  2066. <br class="fancyvrb" /><a
  2067. id="x1-51050r10"></a><span
  2068. class="cmr-6">10</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;</span><span
  2078. class="cmtt-8">&#x00A0;</span><span
  2079. class="cmtt-8">&#x00A0;</span><span
  2080. class="cmtt-8">&#x00A0;</span><span
  2081. class="cmtt-8">&#x00A0;</span><span
  2082. class="cmtt-8">&#x00A0;</span><span
  2083. class="cmsy-8">}</span><span
  2084. class="cmtt-8">&#x00A0;else</span><span
  2085. class="cmtt-8">&#x00A0;</span><span
  2086. class="cmsy-8">{</span><br class="fancyvrb" /><a
  2087. id="x1-51052r11"></a><span
  2088. class="cmr-6">11</span><span
  2089. class="cmtt-8">&#x00A0;</span><span
  2090. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2091. id="x1-51054r12"></a><span
  2092. class="cmr-6">12</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;</span><span
  2107. class="cmtt-8">&#x00A0;</span><span
  2108. class="cmtt-8">&#x00A0;6)</span><span
  2109. class="cmtt-8">&#x00A0;this</span><span
  2110. class="cmtt-8">&#x00A0;entry</span><span
  2111. class="cmtt-8">&#x00A0;is</span><span
  2112. class="cmtt-8">&#x00A0;unused.</span><span
  2113. class="cmtt-8">&#x00A0;</span><span
  2114. class="cmtt-8">&#x00A0;mark</span><span
  2115. class="cmtt-8">&#x00A0;it</span><span
  2116. class="cmtt-8">&#x00A0;as</span><span
  2117. class="cmtt-8">&#x00A0;such.</span><br class="fancyvrb" /><a
  2118. id="x1-51056r13"></a><span
  2119. class="cmr-6">13</span><span
  2120. class="cmtt-8">&#x00A0;</span><span
  2121. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2122. id="x1-51058r14"></a><span
  2123. class="cmr-6">14</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;</span><span
  2134. class="cmtt-8">&#x00A0;</span><span
  2135. class="cmtt-8">&#x00A0;</span><span
  2136. class="cmtt-8">&#x00A0;</span><span
  2137. class="cmtt-8">&#x00A0;</span><span
  2138. class="cmsy-8">}</span><br class="fancyvrb" /><a
  2139. id="x1-51060r15"></a><span
  2140. class="cmr-6">15</span><span
  2141. class="cmtt-8">&#x00A0;</span><span
  2142. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2143. id="x1-51062r16"></a><span
  2144. class="cmr-6">16</span><span
  2145. class="cmtt-8">&#x00A0;</span><span
  2146. class="cmtt-8">&#x00A0;</span><span
  2147. class="cmtt-8">&#x00A0;</span><span
  2148. class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><span
  2153. class="cmtt-8">&#x00A0;else</span><span
  2154. class="cmtt-8">&#x00A0;the</span><span
  2155. class="cmtt-8">&#x00A0;sparse</span><span
  2156. class="cmtt-8">&#x00A0;flag</span><span
  2157. class="cmtt-8">&#x00A0;is</span><span
  2158. class="cmtt-8">&#x00A0;not</span><span
  2159. class="cmtt-8">&#x00A0;set</span><span
  2160. class="cmtt-8">&#x00A0;</span><span
  2161. class="cmsy-8">{</span>
  2162. <br class="fancyvrb" /><a
  2163. id="x1-51064r17"></a><span
  2164. class="cmr-6">17</span><span
  2165. class="cmtt-8">&#x00A0;</span><span
  2166. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2167. id="x1-51066r18"></a><span
  2168. class="cmr-6">18</span><span
  2169. class="cmtt-8">&#x00A0;</span><span
  2170. class="cmtt-8">&#x00A0;</span><span
  2171. class="cmtt-8">&#x00A0;</span><span
  2172. class="cmtt-8">&#x00A0;</span><span
  2173. class="cmtt-8">&#x00A0;</span><span
  2174. class="cmtt-8">&#x00A0;</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;7)</span><span
  2179. class="cmtt-8">&#x00A0;[length]</span><span
  2180. class="cmtt-8">&#x00A0;=</span><span
  2181. class="cmtt-8">&#x00A0;read</span><span
  2182. class="cmtt-8">&#x00A0;a</span><span
  2183. class="cmtt-8">&#x00A0;five</span><span
  2184. class="cmtt-8">&#x00A0;bit</span><span
  2185. class="cmtt-8">&#x00A0;unsigned</span><span
  2186. class="cmtt-8">&#x00A0;integer;</span><br class="fancyvrb" /><a
  2187. id="x1-51068r19"></a><span
  2188. class="cmr-6">19</span><span
  2189. class="cmtt-8">&#x00A0;</span><span
  2190. class="cmtt-8">&#x00A0;</span><span
  2191. class="cmtt-8">&#x00A0;</span><span
  2192. class="cmtt-8">&#x00A0;</span><span
  2193. class="cmtt-8">&#x00A0;</span><span
  2194. class="cmtt-8">&#x00A0;</span><span
  2195. class="cmtt-8">&#x00A0;</span><span
  2196. class="cmtt-8">&#x00A0;</span><span
  2197. class="cmtt-8">&#x00A0;</span><span
  2198. class="cmtt-8">&#x00A0;8)</span><span
  2199. class="cmtt-8">&#x00A0;the</span><span
  2200. class="cmtt-8">&#x00A0;codeword</span><span
  2201. class="cmtt-8">&#x00A0;length</span><span
  2202. class="cmtt-8">&#x00A0;for</span><span
  2203. class="cmtt-8">&#x00A0;this</span><span
  2204. class="cmtt-8">&#x00A0;entry</span><span
  2205. class="cmtt-8">&#x00A0;is</span><span
  2206. class="cmtt-8">&#x00A0;[length]+1;</span><br class="fancyvrb" /><a
  2207. id="x1-51070r20"></a><span
  2208. class="cmr-6">20</span><span
  2209. class="cmtt-8">&#x00A0;</span><span
  2210. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2211. id="x1-51072r21"></a><span
  2212. class="cmr-6">21</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="cmsy-8">}</span><br class="fancyvrb" /><a
  2221. id="x1-51074r22"></a><span
  2222. class="cmr-6">22</span><span
  2223. class="cmtt-8">&#x00A0;</span><span
  2224. class="cmtt-8">&#x00A0;</span></div>
  2225. </li>
  2226. <li class="itemize">If the <span
  2227. class="cmtt-12">[ordered] </span>flag is set, the codeword list for this codebook is encoded in
  2228. ascending length order. Rather than reading a length for every codeword, the
  2229. encoder reads the number of codewords per length. That is, beginning at entry
  2230. zero:
  2231. <!--l. 120--><p class="noindent" >
  2232. <div class="fancyvrb" id="fancyvrb12"><a
  2233. id="x1-51076r1"></a><span
  2234. class="cmr-6">1</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="cmtt-8">&#x00A0;1)</span><span
  2239. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2240. class="cmtt-8">&#x00A0;=</span><span
  2241. class="cmtt-8">&#x00A0;0;</span><br class="fancyvrb" /><a
  2242. id="x1-51078r2"></a><span
  2243. class="cmr-6">2</span><span
  2244. class="cmtt-8">&#x00A0;</span><span
  2245. class="cmtt-8">&#x00A0;</span><span
  2246. class="cmtt-8">&#x00A0;</span><span
  2247. class="cmtt-8">&#x00A0;2)</span><span
  2248. class="cmtt-8">&#x00A0;[current_length]</span><span
  2249. class="cmtt-8">&#x00A0;=</span><span
  2250. class="cmtt-8">&#x00A0;read</span><span
  2251. class="cmtt-8">&#x00A0;a</span><span
  2252. class="cmtt-8">&#x00A0;five</span><span
  2253. class="cmtt-8">&#x00A0;bit</span><span
  2254. class="cmtt-8">&#x00A0;unsigned</span><span
  2255. class="cmtt-8">&#x00A0;integer</span><span
  2256. class="cmtt-8">&#x00A0;and</span><span
  2257. class="cmtt-8">&#x00A0;add</span><span
  2258. class="cmtt-8">&#x00A0;1;</span>
  2259. <br class="fancyvrb" /><a
  2260. id="x1-51080r3"></a><span
  2261. class="cmr-6">3</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;3)</span><span
  2266. class="cmtt-8">&#x00A0;[number]</span><span
  2267. class="cmtt-8">&#x00A0;=</span><span
  2268. class="cmtt-8">&#x00A0;read</span><span
  2269. class="cmtt-8">&#x00A0;</span><a
  2270. href="#x1-1190009.2.1"><span
  2271. class="cmtt-8">ilog</span></a><span
  2272. class="cmtt-8">([codebook_entries]</span><span
  2273. class="cmtt-8">&#x00A0;-</span><span
  2274. class="cmtt-8">&#x00A0;[current_entry])</span><span
  2275. class="cmtt-8">&#x00A0;bits</span><span
  2276. class="cmtt-8">&#x00A0;as</span><span
  2277. class="cmtt-8">&#x00A0;an</span><span
  2278. class="cmtt-8">&#x00A0;unsigned</span><span
  2279. class="cmtt-8">&#x00A0;integer</span>
  2280. <br class="fancyvrb" /><a
  2281. id="x1-51082r4"></a><span
  2282. class="cmr-6">4</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;4)</span><span
  2287. class="cmtt-8">&#x00A0;set</span><span
  2288. class="cmtt-8">&#x00A0;the</span><span
  2289. class="cmtt-8">&#x00A0;entries</span><span
  2290. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2291. class="cmtt-8">&#x00A0;through</span><span
  2292. class="cmtt-8">&#x00A0;[current_entry]+[number]-1,</span><span
  2293. class="cmtt-8">&#x00A0;inclusive,</span>
  2294. <br class="fancyvrb" /><a
  2295. id="x1-51084r5"></a><span
  2296. class="cmr-6">5</span><span
  2297. class="cmtt-8">&#x00A0;</span><span
  2298. class="cmtt-8">&#x00A0;</span><span
  2299. class="cmtt-8">&#x00A0;</span><span
  2300. class="cmtt-8">&#x00A0;</span><span
  2301. class="cmtt-8">&#x00A0;</span><span
  2302. class="cmtt-8">&#x00A0;of</span><span
  2303. class="cmtt-8">&#x00A0;the</span><span
  2304. class="cmtt-8">&#x00A0;[codebook_codeword_lengths]</span><span
  2305. class="cmtt-8">&#x00A0;array</span><span
  2306. class="cmtt-8">&#x00A0;to</span><span
  2307. class="cmtt-8">&#x00A0;[current_length]</span>
  2308. <br class="fancyvrb" /><a
  2309. id="x1-51086r6"></a><span
  2310. class="cmr-6">6</span><span
  2311. class="cmtt-8">&#x00A0;</span><span
  2312. class="cmtt-8">&#x00A0;</span><span
  2313. class="cmtt-8">&#x00A0;</span><span
  2314. class="cmtt-8">&#x00A0;5)</span><span
  2315. class="cmtt-8">&#x00A0;set</span><span
  2316. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2317. class="cmtt-8">&#x00A0;to</span><span
  2318. class="cmtt-8">&#x00A0;[number]</span><span
  2319. class="cmtt-8">&#x00A0;+</span><span
  2320. class="cmtt-8">&#x00A0;[current_entry]</span><br class="fancyvrb" /><a
  2321. id="x1-51088r7"></a><span
  2322. class="cmr-6">7</span><span
  2323. class="cmtt-8">&#x00A0;</span><span
  2324. class="cmtt-8">&#x00A0;</span><span
  2325. class="cmtt-8">&#x00A0;</span><span
  2326. class="cmtt-8">&#x00A0;6)</span><span
  2327. class="cmtt-8">&#x00A0;increment</span><span
  2328. class="cmtt-8">&#x00A0;[current_length]</span><span
  2329. class="cmtt-8">&#x00A0;by</span><span
  2330. class="cmtt-8">&#x00A0;1</span>
  2331. <br class="fancyvrb" /><a
  2332. id="x1-51090r8"></a><span
  2333. class="cmr-6">8</span><span
  2334. class="cmtt-8">&#x00A0;</span><span
  2335. class="cmtt-8">&#x00A0;</span><span
  2336. class="cmtt-8">&#x00A0;</span><span
  2337. class="cmtt-8">&#x00A0;7)</span><span
  2338. class="cmtt-8">&#x00A0;if</span><span
  2339. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2340. class="cmtt-8">&#x00A0;is</span><span
  2341. class="cmtt-8">&#x00A0;greater</span><span
  2342. class="cmtt-8">&#x00A0;than</span><span
  2343. class="cmtt-8">&#x00A0;[codebook_entries]</span><span
  2344. class="cmtt-8">&#x00A0;ERROR</span><span
  2345. class="cmtt-8">&#x00A0;CONDITION;</span><br class="fancyvrb" /><a
  2346. id="x1-51092r9"></a><span
  2347. class="cmr-6">9</span><span
  2348. class="cmtt-8">&#x00A0;</span><span
  2349. class="cmtt-8">&#x00A0;</span><span
  2350. class="cmtt-8">&#x00A0;</span><span
  2351. class="cmtt-8">&#x00A0;</span><span
  2352. class="cmtt-8">&#x00A0;</span><span
  2353. class="cmtt-8">&#x00A0;the</span><span
  2354. class="cmtt-8">&#x00A0;decoder</span><span
  2355. class="cmtt-8">&#x00A0;will</span><span
  2356. class="cmtt-8">&#x00A0;not</span><span
  2357. class="cmtt-8">&#x00A0;be</span><span
  2358. class="cmtt-8">&#x00A0;able</span><span
  2359. class="cmtt-8">&#x00A0;to</span><span
  2360. class="cmtt-8">&#x00A0;read</span><span
  2361. class="cmtt-8">&#x00A0;this</span><span
  2362. class="cmtt-8">&#x00A0;stream.</span>
  2363. <br class="fancyvrb" /><a
  2364. id="x1-51094r10"></a><span
  2365. class="cmr-6">10</span><span
  2366. class="cmtt-8">&#x00A0;</span><span
  2367. class="cmtt-8">&#x00A0;</span><span
  2368. class="cmtt-8">&#x00A0;</span><span
  2369. class="cmtt-8">&#x00A0;8)</span><span
  2370. class="cmtt-8">&#x00A0;if</span><span
  2371. class="cmtt-8">&#x00A0;[current_entry]</span><span
  2372. class="cmtt-8">&#x00A0;is</span><span
  2373. class="cmtt-8">&#x00A0;less</span><span
  2374. class="cmtt-8">&#x00A0;than</span><span
  2375. class="cmtt-8">&#x00A0;[codebook_entries],</span><span
  2376. class="cmtt-8">&#x00A0;repeat</span><span
  2377. class="cmtt-8">&#x00A0;process</span><span
  2378. class="cmtt-8">&#x00A0;starting</span><span
  2379. class="cmtt-8">&#x00A0;at</span><span
  2380. class="cmtt-8">&#x00A0;3)</span><br class="fancyvrb" /><a
  2381. id="x1-51096r11"></a><span
  2382. class="cmr-6">11</span><span
  2383. class="cmtt-8">&#x00A0;</span><span
  2384. class="cmtt-8">&#x00A0;</span><span
  2385. class="cmtt-8">&#x00A0;</span><span
  2386. class="cmtt-8">&#x00A0;9)</span><span
  2387. class="cmtt-8">&#x00A0;done.</span></div>
  2388. </li></ul>
  2389. <!--l. 136--><p class="noindent" >After all codeword lengths have been decoded, the decoder reads the vector lookup table. Vorbis
  2390. I supports three lookup types:
  2391. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  2392. 1. </dt><dd
  2393. class="enumerate-enumitem">No lookup
  2394. </dd><dt class="enumerate-enumitem">
  2395. 2. </dt><dd
  2396. class="enumerate-enumitem">Implicitly populated value mapping (lattice VQ)
  2397. </dd><dt class="enumerate-enumitem">
  2398. 3. </dt><dd
  2399. class="enumerate-enumitem">Explicitly populated value mapping (tessellated or &#8217;foam&#8217; VQ)</dd></dl>
  2400. <!--l. 149--><p class="noindent" >The lookup table type is read as a four bit unsigned integer:
  2401. <div class="fancyvrb" id="fancyvrb13"><a
  2402. id="x1-51101r1"></a><span
  2403. class="cmr-6">1</span><span
  2404. class="cmtt-8">&#x00A0;</span><span
  2405. class="cmtt-8">&#x00A0;</span><span
  2406. class="cmtt-8">&#x00A0;</span><span
  2407. class="cmtt-8">&#x00A0;1)</span><span
  2408. class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
  2409. class="cmtt-8">&#x00A0;=</span><span
  2410. class="cmtt-8">&#x00A0;read</span><span
  2411. class="cmtt-8">&#x00A0;four</span><span
  2412. class="cmtt-8">&#x00A0;bits</span><span
  2413. class="cmtt-8">&#x00A0;as</span><span
  2414. class="cmtt-8">&#x00A0;an</span><span
  2415. class="cmtt-8">&#x00A0;unsigned</span><span
  2416. class="cmtt-8">&#x00A0;integer</span></div>
  2417. <!--l. 154--><p class="noindent" >Codebook decode precedes according to <span
  2418. class="cmtt-12">[codebook_lookup_type]</span>:
  2419. <ul class="itemize1">
  2420. <li class="itemize">Lookup type zero indicates no lookup to be read. Proceed past lookup decode.
  2421. </li>
  2422. <li class="itemize">Lookup types one and two are similar, differing only in the number of lookup values to
  2423. be read. Lookup type one reads a list of values that are permuted in a set pattern to
  2424. build a list of vectors, each vector of order <span
  2425. class="cmtt-12">[codebook_dimensions] </span>scalars. Lookup
  2426. type two builds the same vector list, but reads each scalar for each vector explicitly,
  2427. rather than building vectors from a smaller list of possible scalar values. Lookup
  2428. decode proceeds as follows:
  2429. <!--l. 168--><p class="noindent" >
  2430. <div class="fancyvrb" id="fancyvrb14"><a
  2431. id="x1-51103r1"></a><span
  2432. class="cmr-6">1</span><span
  2433. class="cmtt-8">&#x00A0;</span><span
  2434. class="cmtt-8">&#x00A0;</span><span
  2435. class="cmtt-8">&#x00A0;</span><span
  2436. class="cmtt-8">&#x00A0;1)</span><span
  2437. class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
  2438. class="cmtt-8">&#x00A0;=</span><span
  2439. class="cmtt-8">&#x00A0;</span><a
  2440. href="#x1-1200009.2.2"><span
  2441. class="cmtt-8">float32_unpack</span></a><span
  2442. class="cmtt-8">(</span><span
  2443. class="cmtt-8">&#x00A0;read</span><span
  2444. class="cmtt-8">&#x00A0;32</span><span
  2445. class="cmtt-8">&#x00A0;bits</span><span
  2446. class="cmtt-8">&#x00A0;as</span><span
  2447. class="cmtt-8">&#x00A0;an</span><span
  2448. class="cmtt-8">&#x00A0;unsigned</span><span
  2449. class="cmtt-8">&#x00A0;integer)</span>
  2450. <br class="fancyvrb" /><a
  2451. id="x1-51105r2"></a><span
  2452. class="cmr-6">2</span><span
  2453. class="cmtt-8">&#x00A0;</span><span
  2454. class="cmtt-8">&#x00A0;</span><span
  2455. class="cmtt-8">&#x00A0;</span><span
  2456. class="cmtt-8">&#x00A0;2)</span><span
  2457. class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
  2458. class="cmtt-8">&#x00A0;=</span><span
  2459. class="cmtt-8">&#x00A0;</span><a
  2460. href="#x1-1200009.2.2"><span
  2461. class="cmtt-8">float32_unpack</span></a><span
  2462. class="cmtt-8">(</span><span
  2463. class="cmtt-8">&#x00A0;read</span><span
  2464. class="cmtt-8">&#x00A0;32</span><span
  2465. class="cmtt-8">&#x00A0;bits</span><span
  2466. class="cmtt-8">&#x00A0;as</span><span
  2467. class="cmtt-8">&#x00A0;an</span><span
  2468. class="cmtt-8">&#x00A0;unsigned</span><span
  2469. class="cmtt-8">&#x00A0;integer)</span>
  2470. <br class="fancyvrb" /><a
  2471. id="x1-51107r3"></a><span
  2472. class="cmr-6">3</span><span
  2473. class="cmtt-8">&#x00A0;</span><span
  2474. class="cmtt-8">&#x00A0;</span><span
  2475. class="cmtt-8">&#x00A0;</span><span
  2476. class="cmtt-8">&#x00A0;3)</span><span
  2477. class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
  2478. class="cmtt-8">&#x00A0;=</span><span
  2479. class="cmtt-8">&#x00A0;read</span><span
  2480. class="cmtt-8">&#x00A0;4</span><span
  2481. class="cmtt-8">&#x00A0;bits</span><span
  2482. class="cmtt-8">&#x00A0;as</span><span
  2483. class="cmtt-8">&#x00A0;an</span><span
  2484. class="cmtt-8">&#x00A0;unsigned</span><span
  2485. class="cmtt-8">&#x00A0;integer</span><span
  2486. class="cmtt-8">&#x00A0;and</span><span
  2487. class="cmtt-8">&#x00A0;add</span><span
  2488. class="cmtt-8">&#x00A0;1</span><br class="fancyvrb" /><a
  2489. id="x1-51109r4"></a><span
  2490. class="cmr-6">4</span><span
  2491. class="cmtt-8">&#x00A0;</span><span
  2492. class="cmtt-8">&#x00A0;</span><span
  2493. class="cmtt-8">&#x00A0;</span><span
  2494. class="cmtt-8">&#x00A0;4)</span><span
  2495. class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
  2496. class="cmtt-8">&#x00A0;=</span><span
  2497. class="cmtt-8">&#x00A0;read</span><span
  2498. class="cmtt-8">&#x00A0;1</span><span
  2499. class="cmtt-8">&#x00A0;bit</span><span
  2500. class="cmtt-8">&#x00A0;as</span><span
  2501. class="cmtt-8">&#x00A0;a</span><span
  2502. class="cmtt-8">&#x00A0;boolean</span><span
  2503. class="cmtt-8">&#x00A0;flag</span><br class="fancyvrb" /><a
  2504. id="x1-51111r5"></a><span
  2505. class="cmr-6">5</span><span
  2506. class="cmtt-8">&#x00A0;</span><span
  2507. class="cmtt-8">&#x00A0;</span>
  2508. <br class="fancyvrb" /><a
  2509. id="x1-51113r6"></a><span
  2510. class="cmr-6">6</span><span
  2511. class="cmtt-8">&#x00A0;</span><span
  2512. class="cmtt-8">&#x00A0;</span><span
  2513. class="cmtt-8">&#x00A0;</span><span
  2514. class="cmtt-8">&#x00A0;if</span><span
  2515. class="cmtt-8">&#x00A0;(</span><span
  2516. class="cmtt-8">&#x00A0;[codebook_lookup_type]</span><span
  2517. class="cmtt-8">&#x00A0;is</span><span
  2518. class="cmtt-8">&#x00A0;1</span><span
  2519. class="cmtt-8">&#x00A0;)</span><span
  2520. class="cmtt-8">&#x00A0;</span><span
  2521. class="cmsy-8">{</span><br class="fancyvrb" /><a
  2522. id="x1-51115r7"></a><span
  2523. class="cmr-6">7</span><span
  2524. class="cmtt-8">&#x00A0;</span><span
  2525. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2526. id="x1-51117r8"></a><span
  2527. class="cmr-6">8</span><span
  2528. class="cmtt-8">&#x00A0;</span><span
  2529. class="cmtt-8">&#x00A0;</span><span
  2530. class="cmtt-8">&#x00A0;</span><span
  2531. class="cmtt-8">&#x00A0;</span><span
  2532. class="cmtt-8">&#x00A0;</span><span
  2533. class="cmtt-8">&#x00A0;</span><span
  2534. class="cmtt-8">&#x00A0;5)</span><span
  2535. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
  2536. class="cmtt-8">&#x00A0;=</span><span
  2537. class="cmtt-8">&#x00A0;</span><a
  2538. href="#x1-1210009.2.3"><span
  2539. class="cmtt-8">lookup1_values</span></a><span
  2540. class="cmtt-8">([codebook_entries],</span><span
  2541. class="cmtt-8">&#x00A0;[codebook_dimensions]</span><span
  2542. class="cmtt-8">&#x00A0;)</span>
  2543. <br class="fancyvrb" /><a
  2544. id="x1-51119r9"></a><span
  2545. class="cmr-6">9</span><span
  2546. class="cmtt-8">&#x00A0;</span><span
  2547. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2548. id="x1-51121r10"></a><span
  2549. class="cmr-6">10</span><span
  2550. class="cmtt-8">&#x00A0;</span><span
  2551. class="cmtt-8">&#x00A0;</span><span
  2552. class="cmtt-8">&#x00A0;</span><span
  2553. class="cmtt-8">&#x00A0;</span><span
  2554. class="cmsy-8">}</span><span
  2555. class="cmtt-8">&#x00A0;else</span><span
  2556. class="cmtt-8">&#x00A0;</span><span
  2557. class="cmsy-8">{</span><br class="fancyvrb" /><a
  2558. id="x1-51123r11"></a><span
  2559. class="cmr-6">11</span><span
  2560. class="cmtt-8">&#x00A0;</span><span
  2561. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2562. id="x1-51125r12"></a><span
  2563. class="cmr-6">12</span><span
  2564. class="cmtt-8">&#x00A0;</span><span
  2565. class="cmtt-8">&#x00A0;</span><span
  2566. class="cmtt-8">&#x00A0;</span><span
  2567. class="cmtt-8">&#x00A0;</span><span
  2568. class="cmtt-8">&#x00A0;</span><span
  2569. class="cmtt-8">&#x00A0;</span><span
  2570. class="cmtt-8">&#x00A0;6)</span><span
  2571. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
  2572. class="cmtt-8">&#x00A0;=</span><span
  2573. class="cmtt-8">&#x00A0;[codebook_entries]</span><span
  2574. class="cmtt-8">&#x00A0;*</span><span
  2575. class="cmtt-8">&#x00A0;[codebook_dimensions]</span><br class="fancyvrb" /><a
  2576. id="x1-51127r13"></a><span
  2577. class="cmr-6">13</span><span
  2578. class="cmtt-8">&#x00A0;</span><span
  2579. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2580. id="x1-51129r14"></a><span
  2581. class="cmr-6">14</span><span
  2582. class="cmtt-8">&#x00A0;</span><span
  2583. class="cmtt-8">&#x00A0;</span><span
  2584. class="cmtt-8">&#x00A0;</span><span
  2585. class="cmtt-8">&#x00A0;</span><span
  2586. class="cmsy-8">}</span><br class="fancyvrb" /><a
  2587. id="x1-51131r15"></a><span
  2588. class="cmr-6">15</span><span
  2589. class="cmtt-8">&#x00A0;</span><span
  2590. class="cmtt-8">&#x00A0;</span>
  2591. <br class="fancyvrb" /><a
  2592. id="x1-51133r16"></a><span
  2593. class="cmr-6">16</span><span
  2594. class="cmtt-8">&#x00A0;</span><span
  2595. class="cmtt-8">&#x00A0;</span><span
  2596. class="cmtt-8">&#x00A0;</span><span
  2597. class="cmtt-8">&#x00A0;7)</span><span
  2598. class="cmtt-8">&#x00A0;read</span><span
  2599. class="cmtt-8">&#x00A0;a</span><span
  2600. class="cmtt-8">&#x00A0;total</span><span
  2601. class="cmtt-8">&#x00A0;of</span><span
  2602. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><span
  2603. class="cmtt-8">&#x00A0;unsigned</span><span
  2604. class="cmtt-8">&#x00A0;integers</span><span
  2605. class="cmtt-8">&#x00A0;of</span><span
  2606. class="cmtt-8">&#x00A0;[codebook_value_bits]</span><span
  2607. class="cmtt-8">&#x00A0;each;</span>
  2608. <br class="fancyvrb" /><a
  2609. id="x1-51135r17"></a><span
  2610. class="cmr-6">17</span><span
  2611. class="cmtt-8">&#x00A0;</span><span
  2612. class="cmtt-8">&#x00A0;</span><span
  2613. class="cmtt-8">&#x00A0;</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;store</span><span
  2618. class="cmtt-8">&#x00A0;these</span><span
  2619. class="cmtt-8">&#x00A0;in</span><span
  2620. class="cmtt-8">&#x00A0;order</span><span
  2621. class="cmtt-8">&#x00A0;in</span><span
  2622. class="cmtt-8">&#x00A0;the</span><span
  2623. class="cmtt-8">&#x00A0;array</span><span
  2624. class="cmtt-8">&#x00A0;[codebook_multiplicands]</span></div>
  2625. </li>
  2626. <li class="itemize">A <span
  2627. class="cmtt-12">[codebook_lookup_type] </span>of greater than two is reserved and indicates a stream that is
  2628. not decodable by the specification in this document.
  2629. </li></ul>
  2630. <!--l. 195--><p class="noindent" >An &#8217;end of packet&#8217; during any read operation in the above steps is considered an error condition
  2631. rendering the stream undecodable.
  2632. <!--l. 198--><p class="noindent" ><span class="paragraphHead"><a
  2633. id="x1-520003.2.1"></a><span
  2634. class="cmbx-12">Huffman decision tree representation</span></span>
  2635. The <span
  2636. class="cmtt-12">[codebook_codeword_lengths] </span>array and <span
  2637. class="cmtt-12">[codebook_entries] </span>value uniquely define the
  2638. Huffman decision tree used for entropy decoding.
  2639. <!--l. 204--><p class="noindent" >Briefly, each used codebook entry (recall that length-unordered codebooks support unused
  2640. codeword entries) is assigned, in order, the lowest valued unused binary Huffman codeword
  2641. possible. Assume the following codeword length list:
  2642. <!--l. 209--><p class="noindent" >
  2643. <div class="fancyvrb" id="fancyvrb15"><a
  2644. id="x1-52002r1"></a><span
  2645. class="cmr-6">1</span><span
  2646. class="cmtt-8">&#x00A0;</span><span
  2647. class="cmtt-8">&#x00A0;entry</span><span
  2648. class="cmtt-8">&#x00A0;0:</span><span
  2649. class="cmtt-8">&#x00A0;length</span><span
  2650. class="cmtt-8">&#x00A0;2</span><br class="fancyvrb" /><a
  2651. id="x1-52004r2"></a><span
  2652. class="cmr-6">2</span><span
  2653. class="cmtt-8">&#x00A0;</span><span
  2654. class="cmtt-8">&#x00A0;entry</span><span
  2655. class="cmtt-8">&#x00A0;1:</span><span
  2656. class="cmtt-8">&#x00A0;length</span><span
  2657. class="cmtt-8">&#x00A0;4</span><br class="fancyvrb" /><a
  2658. id="x1-52006r3"></a><span
  2659. class="cmr-6">3</span><span
  2660. class="cmtt-8">&#x00A0;</span><span
  2661. class="cmtt-8">&#x00A0;entry</span><span
  2662. class="cmtt-8">&#x00A0;2:</span><span
  2663. class="cmtt-8">&#x00A0;length</span><span
  2664. class="cmtt-8">&#x00A0;4</span><br class="fancyvrb" /><a
  2665. id="x1-52008r4"></a><span
  2666. class="cmr-6">4</span><span
  2667. class="cmtt-8">&#x00A0;</span><span
  2668. class="cmtt-8">&#x00A0;entry</span><span
  2669. class="cmtt-8">&#x00A0;3:</span><span
  2670. class="cmtt-8">&#x00A0;length</span><span
  2671. class="cmtt-8">&#x00A0;4</span><br class="fancyvrb" /><a
  2672. id="x1-52010r5"></a><span
  2673. class="cmr-6">5</span><span
  2674. class="cmtt-8">&#x00A0;</span><span
  2675. class="cmtt-8">&#x00A0;entry</span><span
  2676. class="cmtt-8">&#x00A0;4:</span><span
  2677. class="cmtt-8">&#x00A0;length</span><span
  2678. class="cmtt-8">&#x00A0;4</span><br class="fancyvrb" /><a
  2679. id="x1-52012r6"></a><span
  2680. class="cmr-6">6</span><span
  2681. class="cmtt-8">&#x00A0;</span><span
  2682. class="cmtt-8">&#x00A0;entry</span><span
  2683. class="cmtt-8">&#x00A0;5:</span><span
  2684. class="cmtt-8">&#x00A0;length</span><span
  2685. class="cmtt-8">&#x00A0;2</span>
  2686. <br class="fancyvrb" /><a
  2687. id="x1-52014r7"></a><span
  2688. class="cmr-6">7</span><span
  2689. class="cmtt-8">&#x00A0;</span><span
  2690. class="cmtt-8">&#x00A0;entry</span><span
  2691. class="cmtt-8">&#x00A0;6:</span><span
  2692. class="cmtt-8">&#x00A0;length</span><span
  2693. class="cmtt-8">&#x00A0;3</span><br class="fancyvrb" /><a
  2694. id="x1-52016r8"></a><span
  2695. class="cmr-6">8</span><span
  2696. class="cmtt-8">&#x00A0;</span><span
  2697. class="cmtt-8">&#x00A0;entry</span><span
  2698. class="cmtt-8">&#x00A0;7:</span><span
  2699. class="cmtt-8">&#x00A0;length</span><span
  2700. class="cmtt-8">&#x00A0;3</span></div>
  2701. <!--l. 220--><p class="noindent" >Assigning codewords in order (lowest possible value of the appropriate length to highest) results
  2702. in the following codeword list:
  2703. <!--l. 223--><p class="noindent" >
  2704. <div class="fancyvrb" id="fancyvrb16"><a
  2705. id="x1-52018r1"></a><span
  2706. class="cmr-6">1</span><span
  2707. class="cmtt-8">&#x00A0;</span><span
  2708. class="cmtt-8">&#x00A0;entry</span><span
  2709. class="cmtt-8">&#x00A0;0:</span><span
  2710. class="cmtt-8">&#x00A0;length</span><span
  2711. class="cmtt-8">&#x00A0;2</span><span
  2712. class="cmtt-8">&#x00A0;codeword</span><span
  2713. class="cmtt-8">&#x00A0;00</span><br class="fancyvrb" /><a
  2714. id="x1-52020r2"></a><span
  2715. class="cmr-6">2</span><span
  2716. class="cmtt-8">&#x00A0;</span><span
  2717. class="cmtt-8">&#x00A0;entry</span><span
  2718. class="cmtt-8">&#x00A0;1:</span><span
  2719. class="cmtt-8">&#x00A0;length</span><span
  2720. class="cmtt-8">&#x00A0;4</span><span
  2721. class="cmtt-8">&#x00A0;codeword</span><span
  2722. class="cmtt-8">&#x00A0;0100</span><br class="fancyvrb" /><a
  2723. id="x1-52022r3"></a><span
  2724. class="cmr-6">3</span><span
  2725. class="cmtt-8">&#x00A0;</span><span
  2726. class="cmtt-8">&#x00A0;entry</span><span
  2727. class="cmtt-8">&#x00A0;2:</span><span
  2728. class="cmtt-8">&#x00A0;length</span><span
  2729. class="cmtt-8">&#x00A0;4</span><span
  2730. class="cmtt-8">&#x00A0;codeword</span><span
  2731. class="cmtt-8">&#x00A0;0101</span><br class="fancyvrb" /><a
  2732. id="x1-52024r4"></a><span
  2733. class="cmr-6">4</span><span
  2734. class="cmtt-8">&#x00A0;</span><span
  2735. class="cmtt-8">&#x00A0;entry</span><span
  2736. class="cmtt-8">&#x00A0;3:</span><span
  2737. class="cmtt-8">&#x00A0;length</span><span
  2738. class="cmtt-8">&#x00A0;4</span><span
  2739. class="cmtt-8">&#x00A0;codeword</span><span
  2740. class="cmtt-8">&#x00A0;0110</span>
  2741. <br class="fancyvrb" /><a
  2742. id="x1-52026r5"></a><span
  2743. class="cmr-6">5</span><span
  2744. class="cmtt-8">&#x00A0;</span><span
  2745. class="cmtt-8">&#x00A0;entry</span><span
  2746. class="cmtt-8">&#x00A0;4:</span><span
  2747. class="cmtt-8">&#x00A0;length</span><span
  2748. class="cmtt-8">&#x00A0;4</span><span
  2749. class="cmtt-8">&#x00A0;codeword</span><span
  2750. class="cmtt-8">&#x00A0;0111</span><br class="fancyvrb" /><a
  2751. id="x1-52028r6"></a><span
  2752. class="cmr-6">6</span><span
  2753. class="cmtt-8">&#x00A0;</span><span
  2754. class="cmtt-8">&#x00A0;entry</span><span
  2755. class="cmtt-8">&#x00A0;5:</span><span
  2756. class="cmtt-8">&#x00A0;length</span><span
  2757. class="cmtt-8">&#x00A0;2</span><span
  2758. class="cmtt-8">&#x00A0;codeword</span><span
  2759. class="cmtt-8">&#x00A0;10</span><br class="fancyvrb" /><a
  2760. id="x1-52030r7"></a><span
  2761. class="cmr-6">7</span><span
  2762. class="cmtt-8">&#x00A0;</span><span
  2763. class="cmtt-8">&#x00A0;entry</span><span
  2764. class="cmtt-8">&#x00A0;6:</span><span
  2765. class="cmtt-8">&#x00A0;length</span><span
  2766. class="cmtt-8">&#x00A0;3</span><span
  2767. class="cmtt-8">&#x00A0;codeword</span><span
  2768. class="cmtt-8">&#x00A0;110</span><br class="fancyvrb" /><a
  2769. id="x1-52032r8"></a><span
  2770. class="cmr-6">8</span><span
  2771. class="cmtt-8">&#x00A0;</span><span
  2772. class="cmtt-8">&#x00A0;entry</span><span
  2773. class="cmtt-8">&#x00A0;7:</span><span
  2774. class="cmtt-8">&#x00A0;length</span><span
  2775. class="cmtt-8">&#x00A0;3</span><span
  2776. class="cmtt-8">&#x00A0;codeword</span><span
  2777. class="cmtt-8">&#x00A0;111</span></div>
  2778. <!--l. 235--><p class="noindent" ><span class="likesubparagraphHead"><a
  2779. id="x1-530003.2.1"></a><span
  2780. class="cmbx-12">Note:</span></span> Unlike most binary numerical values in this document, we intend the above codewords to
  2781. be read and used bit by bit from left to right, thus the codeword &#8217;001&#8217; is the bit string &#8217;zero, zero,
  2782. one&#8217;. When determining &#8217;lowest possible value&#8217; in the assignment definition above, the leftmost
  2783. bit is the MSb.
  2784. <!--l. 243--><p class="noindent" >It is clear that the codeword length list represents a Huffman decision tree with the entry
  2785. numbers equivalent to the leaves numbered left-to-right:
  2786. <div class="center"
  2787. >
  2788. <!--l. 247--><p class="noindent" >
  2789. <!--l. 248--><p class="noindent" ><img
  2790. src="hufftree.png" alt="PIC"
  2791. >
  2792. <br /> <div class="caption"
  2793. ><span class="id">Figure&#x00A0;4: </span><span
  2794. class="content">huffman tree illustration</span></div><!--tex4ht:label?: x1-530014 -->
  2795. </div>
  2796. <!--l. 253--><p class="noindent" >As we assign codewords in order, we see that each choice constructs a new leaf in the leftmost
  2797. possible position.
  2798. <!--l. 256--><p class="noindent" >Note that it&#8217;s possible to underspecify or overspecify a Huffman tree via the length list.
  2799. In the above example, if codeword seven were eliminated, it&#8217;s clear that the tree is
  2800. unfinished:
  2801. <div class="center"
  2802. >
  2803. <!--l. 260--><p class="noindent" >
  2804. <!--l. 261--><p class="noindent" ><img
  2805. src="hufftree-under.png" alt="PIC"
  2806. >
  2807. <br /> <div class="caption"
  2808. ><span class="id">Figure&#x00A0;5: </span><span
  2809. class="content">underspecified huffman tree illustration</span></div><!--tex4ht:label?: x1-530025 -->
  2810. </div>
  2811. <!--l. 266--><p class="noindent" >Similarly, in the original codebook, it&#8217;s clear that the tree is fully populated and a ninth
  2812. codeword is impossible. Both underspecified and overspecified trees are an error condition
  2813. rendering the stream undecodable.
  2814. <!--l. 271--><p class="noindent" >Codebook entries marked &#8217;unused&#8217; are simply skipped in the assigning process. They have no
  2815. codeword and do not appear in the decision tree, thus it&#8217;s impossible for any bit pattern read
  2816. from the stream to decode to that entry number.
  2817. <!--l. 276--><p class="noindent" ><span class="paragraphHead"><a
  2818. id="x1-540003.2.1"></a><span
  2819. class="cmbx-12">Errata 20150226: Single entry codebooks</span></span>
  2820. A &#8217;single-entry codebook&#8217; is a codebook with one active codeword entry. A single-entry codebook
  2821. may be either a fully populated codebook with only one declared entry, or a sparse codebook
  2822. with only one entry marked used. The Vorbis I spec provides no means to specify a codeword
  2823. length of zero, and as a result, a single-entry codebook is inherently malformed because it is
  2824. underpopulated. The original specification did not address directly the matter of single-entry
  2825. codebooks; they were implicitly illegal as it was not possible to write such a codebook with a
  2826. valid tree structure.
  2827. <!--l. 288--><p class="noindent" >In r14811 of the libvorbis reference implementation, Xiph added an additional check to the
  2828. codebook implementation to reject underpopulated Huffman trees. This change led to the
  2829. discovery of single-entry books used &#8217;in the wild&#8217; when the new, stricter checks rejected a number
  2830. of apparently working streams.
  2831. <!--l. 294--><p class="noindent" >In order to minimize breakage of deployed (if technically erroneous) streams, r16073 of the
  2832. reference implementation explicitly special-cased single-entry codebooks to tolerate the
  2833. single-entry case. Commit r16073 also added the following to the specification:
  2834. <!--l. 303--><p class="noindent" >&#8220;<span class="sout">Take special care that a codebook with a single used entry is handled properly; it consists of a
  2835. single codework of zero bits and reading a value out of such a codebook always returns the single
  2836. used value and sinks zero bits. </span>&#8221;
  2837. <!--l. 305--><p class="noindent" >The intent was to clarify the spec and codify current practice. However, this addition is
  2838. erroneously at odds with the intent of preserving usability of existing streams using single-entry
  2839. codebooks, disagrees with the code changes that reinstated decoding, and does not address how
  2840. single-entry codebooks should be encoded.
  2841. <!--l. 311--><p class="noindent" >As such, the above addition made in r16037 is struck from the specification and replaced by the
  2842. following:
  2843. <!--l. 330--><p class="noindent" >
  2844. <div class="quote">
  2845. <!--l. 330--><p class="noindent" >It is possible to declare a Vorbis codebook containing a single codework
  2846. entry. A single-entry codebook may be either a fully populated codebook with
  2847. <span
  2848. class="cmtt-12">[codebook_entries] </span>set to 1, or a sparse codebook marking only one entry
  2849. used. Note that it is not possible to also encode a <span
  2850. class="cmtt-12">[codeword_length] </span>of zero
  2851. for the single used codeword, as the unsigned value written to the stream
  2852. is <span
  2853. class="cmtt-12">[codeword_length]-1</span>. Instead, encoder implementations should indicate a
  2854. <span
  2855. class="cmtt-12">[codeword_length] </span>of 1 and &#8217;write&#8217; the codeword to a stream during audio
  2856. encoding by writing a single zero bit.
  2857. <!--l. 330--><p class="noindent" >Decoder implementations shall reject a codebook if it contains only one used
  2858. entry and the encoded <span
  2859. class="cmtt-12">[codeword_length] </span>of that entry is not 1. &#8217;Reading&#8217; a
  2860. value from single-entry codebook always returns the single used codeword value
  2861. and sinks one bit. Decoders should tolerate that the bit read from the stream
  2862. be &#8217;1&#8217; instead of &#8217;0&#8217;; both values shall return the single used codeword.</div>
  2863. <!--l. 332--><p class="noindent" ><span class="paragraphHead"><a
  2864. id="x1-550003.2.1"></a><span
  2865. class="cmbx-12">VQ lookup table vector representation</span></span>
  2866. Unpacking the VQ lookup table vectors relies on the following values:
  2867. <div class="fancyvrb" id="fancyvrb17"><a
  2868. id="x1-55002r1"></a><span
  2869. class="cmr-6">1</span><span
  2870. class="cmtt-8">&#x00A0;</span><span
  2871. class="cmtt-8">&#x00A0;the</span><span
  2872. class="cmtt-8">&#x00A0;[codebook\_multiplicands]</span><span
  2873. class="cmtt-8">&#x00A0;array</span><br class="fancyvrb" /><a
  2874. id="x1-55004r2"></a><span
  2875. class="cmr-6">2</span><span
  2876. class="cmtt-8">&#x00A0;</span><span
  2877. class="cmtt-8">&#x00A0;[codebook\_minimum\_value]</span><br class="fancyvrb" /><a
  2878. id="x1-55006r3"></a><span
  2879. class="cmr-6">3</span><span
  2880. class="cmtt-8">&#x00A0;</span><span
  2881. class="cmtt-8">&#x00A0;[codebook\_delta\_value]</span><br class="fancyvrb" /><a
  2882. id="x1-55008r4"></a><span
  2883. class="cmr-6">4</span><span
  2884. class="cmtt-8">&#x00A0;</span><span
  2885. class="cmtt-8">&#x00A0;[codebook\_sequence\_p]</span>
  2886. <br class="fancyvrb" /><a
  2887. id="x1-55010r5"></a><span
  2888. class="cmr-6">5</span><span
  2889. class="cmtt-8">&#x00A0;</span><span
  2890. class="cmtt-8">&#x00A0;[codebook\_lookup\_type]</span><br class="fancyvrb" /><a
  2891. id="x1-55012r6"></a><span
  2892. class="cmr-6">6</span><span
  2893. class="cmtt-8">&#x00A0;</span><span
  2894. class="cmtt-8">&#x00A0;[codebook\_entries]</span><br class="fancyvrb" /><a
  2895. id="x1-55014r7"></a><span
  2896. class="cmr-6">7</span><span
  2897. class="cmtt-8">&#x00A0;</span><span
  2898. class="cmtt-8">&#x00A0;[codebook\_dimensions]</span><br class="fancyvrb" /><a
  2899. id="x1-55016r8"></a><span
  2900. class="cmr-6">8</span><span
  2901. class="cmtt-8">&#x00A0;</span><span
  2902. class="cmtt-8">&#x00A0;[codebook\_lookup\_values]</span></div>
  2903. <!--l. 348--><p class="noindent" >Decoding (unpacking) a specific vector in the vector lookup table proceeds according to
  2904. <span
  2905. class="cmtt-12">[codebook_lookup_type]</span>. The unpacked vector values are what a codebook would return
  2906. during audio packet decode in a VQ context.
  2907. <!--l. 353--><p class="noindent" ><span class="paragraphHead"><a
  2908. id="x1-560003.2.1"></a><span
  2909. class="cmbx-12">Vector value decode: Lookup type 1</span></span>
  2910. Lookup type one specifies a lattice VQ lookup table built algorithmically from a list of
  2911. scalar values. Calculate (unpack) the final values of a codebook entry vector from
  2912. the entries in <span
  2913. class="cmtt-12">[codebook_multiplicands] </span>as follows (<span
  2914. class="cmtt-12">[value_vector] </span>is the output
  2915. vector representing the vector of values for entry number <span
  2916. class="cmtt-12">[lookup_offset] </span>in this
  2917. codebook):
  2918. <!--l. 362--><p class="noindent" >
  2919. <div class="fancyvrb" id="fancyvrb18"><a
  2920. id="x1-56002r1"></a><span
  2921. class="cmr-6">1</span><span
  2922. class="cmtt-8">&#x00A0;</span><span
  2923. class="cmtt-8">&#x00A0;</span><span
  2924. class="cmtt-8">&#x00A0;</span><span
  2925. class="cmtt-8">&#x00A0;1)</span><span
  2926. class="cmtt-8">&#x00A0;[last]</span><span
  2927. class="cmtt-8">&#x00A0;=</span><span
  2928. class="cmtt-8">&#x00A0;0;</span><br class="fancyvrb" /><a
  2929. id="x1-56004r2"></a><span
  2930. class="cmr-6">2</span><span
  2931. class="cmtt-8">&#x00A0;</span><span
  2932. class="cmtt-8">&#x00A0;</span><span
  2933. class="cmtt-8">&#x00A0;</span><span
  2934. class="cmtt-8">&#x00A0;2)</span><span
  2935. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  2936. class="cmtt-8">&#x00A0;=</span><span
  2937. class="cmtt-8">&#x00A0;1;</span><br class="fancyvrb" /><a
  2938. id="x1-56006r3"></a><span
  2939. class="cmr-6">3</span><span
  2940. class="cmtt-8">&#x00A0;</span><span
  2941. class="cmtt-8">&#x00A0;</span><span
  2942. class="cmtt-8">&#x00A0;</span><span
  2943. class="cmtt-8">&#x00A0;3)</span><span
  2944. class="cmtt-8">&#x00A0;iterate</span><span
  2945. class="cmtt-8">&#x00A0;[i]</span><span
  2946. class="cmtt-8">&#x00A0;over</span><span
  2947. class="cmtt-8">&#x00A0;the</span><span
  2948. class="cmtt-8">&#x00A0;range</span><span
  2949. class="cmtt-8">&#x00A0;0</span><span
  2950. class="cmtt-8">&#x00A0;...</span><span
  2951. class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
  2952. class="cmtt-8">&#x00A0;(once</span><span
  2953. class="cmtt-8">&#x00A0;for</span><span
  2954. class="cmtt-8">&#x00A0;each</span><span
  2955. class="cmtt-8">&#x00A0;scalar</span><span
  2956. class="cmtt-8">&#x00A0;value</span><span
  2957. class="cmtt-8">&#x00A0;in</span><span
  2958. class="cmtt-8">&#x00A0;the</span><span
  2959. class="cmtt-8">&#x00A0;value</span><span
  2960. class="cmtt-8">&#x00A0;vector)</span><span
  2961. class="cmtt-8">&#x00A0;</span><span
  2962. class="cmsy-8">{</span>
  2963. <br class="fancyvrb" /><a
  2964. id="x1-56008r4"></a><span
  2965. class="cmr-6">4</span><span
  2966. class="cmtt-8">&#x00A0;</span><span
  2967. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  2968. id="x1-56010r5"></a><span
  2969. class="cmr-6">5</span><span
  2970. class="cmtt-8">&#x00A0;</span><span
  2971. class="cmtt-8">&#x00A0;</span><span
  2972. class="cmtt-8">&#x00A0;</span><span
  2973. class="cmtt-8">&#x00A0;</span><span
  2974. class="cmtt-8">&#x00A0;</span><span
  2975. class="cmtt-8">&#x00A0;</span><span
  2976. class="cmtt-8">&#x00A0;</span><span
  2977. class="cmtt-8">&#x00A0;</span><span
  2978. class="cmtt-8">&#x00A0;4)</span><span
  2979. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  2980. class="cmtt-8">&#x00A0;=</span><span
  2981. class="cmtt-8">&#x00A0;(</span><span
  2982. class="cmtt-8">&#x00A0;[lookup_offset]</span><span
  2983. class="cmtt-8">&#x00A0;divided</span><span
  2984. class="cmtt-8">&#x00A0;by</span><span
  2985. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  2986. class="cmtt-8">&#x00A0;using</span><span
  2987. class="cmtt-8">&#x00A0;integer</span>
  2988. <br class="fancyvrb" /><a
  2989. id="x1-56012r6"></a><span
  2990. class="cmr-6">6</span><span
  2991. class="cmtt-8">&#x00A0;</span><span
  2992. class="cmtt-8">&#x00A0;</span><span
  2993. class="cmtt-8">&#x00A0;</span><span
  2994. class="cmtt-8">&#x00A0;</span><span
  2995. class="cmtt-8">&#x00A0;</span><span
  2996. class="cmtt-8">&#x00A0;</span><span
  2997. class="cmtt-8">&#x00A0;</span><span
  2998. class="cmtt-8">&#x00A0;</span><span
  2999. class="cmtt-8">&#x00A0;</span><span
  3000. class="cmtt-8">&#x00A0;</span><span
  3001. class="cmtt-8">&#x00A0;</span><span
  3002. class="cmtt-8">&#x00A0;division</span><span
  3003. class="cmtt-8">&#x00A0;)</span><span
  3004. class="cmtt-8">&#x00A0;integer</span><span
  3005. class="cmtt-8">&#x00A0;modulo</span><span
  3006. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><br class="fancyvrb" /><a
  3007. id="x1-56014r7"></a><span
  3008. class="cmr-6">7</span><span
  3009. class="cmtt-8">&#x00A0;</span><span
  3010. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  3011. id="x1-56016r8"></a><span
  3012. class="cmr-6">8</span><span
  3013. class="cmtt-8">&#x00A0;</span><span
  3014. class="cmtt-8">&#x00A0;</span><span
  3015. class="cmtt-8">&#x00A0;</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;</span><span
  3020. class="cmtt-8">&#x00A0;</span><span
  3021. class="cmtt-8">&#x00A0;5)</span><span
  3022. class="cmtt-8">&#x00A0;vector</span><span
  3023. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3024. class="cmtt-8">&#x00A0;element</span><span
  3025. class="cmtt-8">&#x00A0;[i]</span><span
  3026. class="cmtt-8">&#x00A0;=</span>
  3027. <br class="fancyvrb" /><a
  3028. id="x1-56018r9"></a><span
  3029. class="cmr-6">9</span><span
  3030. class="cmtt-8">&#x00A0;</span><span
  3031. class="cmtt-8">&#x00A0;</span><span
  3032. class="cmtt-8">&#x00A0;</span><span
  3033. class="cmtt-8">&#x00A0;</span><span
  3034. class="cmtt-8">&#x00A0;</span><span
  3035. class="cmtt-8">&#x00A0;</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;</span><span
  3040. class="cmtt-8">&#x00A0;</span><span
  3041. class="cmtt-8">&#x00A0;</span><span
  3042. class="cmtt-8">&#x00A0;</span><span
  3043. class="cmtt-8">&#x00A0;(</span><span
  3044. class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
  3045. class="cmtt-8">&#x00A0;array</span><span
  3046. class="cmtt-8">&#x00A0;element</span><span
  3047. class="cmtt-8">&#x00A0;number</span><span
  3048. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  3049. class="cmtt-8">&#x00A0;)</span><span
  3050. class="cmtt-8">&#x00A0;*</span>
  3051. <br class="fancyvrb" /><a
  3052. id="x1-56020r10"></a><span
  3053. class="cmr-6">10</span><span
  3054. class="cmtt-8">&#x00A0;</span><span
  3055. class="cmtt-8">&#x00A0;</span><span
  3056. class="cmtt-8">&#x00A0;</span><span
  3057. class="cmtt-8">&#x00A0;</span><span
  3058. class="cmtt-8">&#x00A0;</span><span
  3059. class="cmtt-8">&#x00A0;</span><span
  3060. class="cmtt-8">&#x00A0;</span><span
  3061. class="cmtt-8">&#x00A0;</span><span
  3062. class="cmtt-8">&#x00A0;</span><span
  3063. class="cmtt-8">&#x00A0;</span><span
  3064. class="cmtt-8">&#x00A0;</span><span
  3065. class="cmtt-8">&#x00A0;</span><span
  3066. class="cmtt-8">&#x00A0;</span><span
  3067. class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
  3068. class="cmtt-8">&#x00A0;+</span><span
  3069. class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
  3070. class="cmtt-8">&#x00A0;+</span><span
  3071. class="cmtt-8">&#x00A0;[last];</span><br class="fancyvrb" /><a
  3072. id="x1-56022r11"></a><span
  3073. class="cmr-6">11</span><span
  3074. class="cmtt-8">&#x00A0;</span><span
  3075. class="cmtt-8">&#x00A0;</span>
  3076. <br class="fancyvrb" /><a
  3077. id="x1-56024r12"></a><span
  3078. class="cmr-6">12</span><span
  3079. class="cmtt-8">&#x00A0;</span><span
  3080. class="cmtt-8">&#x00A0;</span><span
  3081. class="cmtt-8">&#x00A0;</span><span
  3082. class="cmtt-8">&#x00A0;</span><span
  3083. class="cmtt-8">&#x00A0;</span><span
  3084. class="cmtt-8">&#x00A0;</span><span
  3085. class="cmtt-8">&#x00A0;</span><span
  3086. class="cmtt-8">&#x00A0;</span><span
  3087. class="cmtt-8">&#x00A0;6)</span><span
  3088. class="cmtt-8">&#x00A0;if</span><span
  3089. class="cmtt-8">&#x00A0;(</span><span
  3090. class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
  3091. class="cmtt-8">&#x00A0;is</span><span
  3092. class="cmtt-8">&#x00A0;set</span><span
  3093. class="cmtt-8">&#x00A0;)</span><span
  3094. class="cmtt-8">&#x00A0;then</span><span
  3095. class="cmtt-8">&#x00A0;set</span><span
  3096. class="cmtt-8">&#x00A0;[last]</span><span
  3097. class="cmtt-8">&#x00A0;=</span><span
  3098. class="cmtt-8">&#x00A0;vector</span><span
  3099. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3100. class="cmtt-8">&#x00A0;element</span><span
  3101. class="cmtt-8">&#x00A0;[i]</span><br class="fancyvrb" /><a
  3102. id="x1-56026r13"></a><span
  3103. class="cmr-6">13</span><span
  3104. class="cmtt-8">&#x00A0;</span><span
  3105. class="cmtt-8">&#x00A0;</span>
  3106. <br class="fancyvrb" /><a
  3107. id="x1-56028r14"></a><span
  3108. class="cmr-6">14</span><span
  3109. class="cmtt-8">&#x00A0;</span><span
  3110. class="cmtt-8">&#x00A0;</span><span
  3111. class="cmtt-8">&#x00A0;</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;7)</span><span
  3118. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  3119. class="cmtt-8">&#x00A0;=</span><span
  3120. class="cmtt-8">&#x00A0;[index_divisor]</span><span
  3121. class="cmtt-8">&#x00A0;*</span><span
  3122. class="cmtt-8">&#x00A0;[codebook_lookup_values]</span><br class="fancyvrb" /><a
  3123. id="x1-56030r15"></a><span
  3124. class="cmr-6">15</span><span
  3125. class="cmtt-8">&#x00A0;</span><span
  3126. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  3127. id="x1-56032r16"></a><span
  3128. class="cmr-6">16</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="cmsy-8">}</span><br class="fancyvrb" /><a
  3137. id="x1-56034r17"></a><span
  3138. class="cmr-6">17</span><span
  3139. class="cmtt-8">&#x00A0;</span><span
  3140. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  3141. id="x1-56036r18"></a><span
  3142. class="cmr-6">18</span><span
  3143. class="cmtt-8">&#x00A0;</span><span
  3144. class="cmtt-8">&#x00A0;</span><span
  3145. class="cmtt-8">&#x00A0;</span><span
  3146. class="cmtt-8">&#x00A0;8)</span><span
  3147. class="cmtt-8">&#x00A0;vector</span><span
  3148. class="cmtt-8">&#x00A0;calculation</span><span
  3149. class="cmtt-8">&#x00A0;completed.</span></div>
  3150. <!--l. 385--><p class="noindent" ><span class="paragraphHead"><a
  3151. id="x1-570003.2.1"></a><span
  3152. class="cmbx-12">Vector value decode: Lookup type 2</span></span>
  3153. Lookup type two specifies a VQ lookup table in which each scalar in each vector is explicitly set
  3154. by the <span
  3155. class="cmtt-12">[codebook_multiplicands] </span>array in a one-to-one mapping. Calculate [unpack] the final
  3156. values of a codebook entry vector from the entries in <span
  3157. class="cmtt-12">[codebook_multiplicands] </span>as follows
  3158. (<span
  3159. class="cmtt-12">[value_vector] </span>is the output vector representing the vector of values for entry number
  3160. <span
  3161. class="cmtt-12">[lookup_offset] </span>in this codebook):
  3162. <!--l. 395--><p class="noindent" >
  3163. <div class="fancyvrb" id="fancyvrb19"><a
  3164. id="x1-57002r1"></a><span
  3165. class="cmr-6">1</span><span
  3166. class="cmtt-8">&#x00A0;</span><span
  3167. class="cmtt-8">&#x00A0;</span><span
  3168. class="cmtt-8">&#x00A0;</span><span
  3169. class="cmtt-8">&#x00A0;1)</span><span
  3170. class="cmtt-8">&#x00A0;[last]</span><span
  3171. class="cmtt-8">&#x00A0;=</span><span
  3172. class="cmtt-8">&#x00A0;0;</span><br class="fancyvrb" /><a
  3173. id="x1-57004r2"></a><span
  3174. class="cmr-6">2</span><span
  3175. class="cmtt-8">&#x00A0;</span><span
  3176. class="cmtt-8">&#x00A0;</span><span
  3177. class="cmtt-8">&#x00A0;</span><span
  3178. class="cmtt-8">&#x00A0;2)</span><span
  3179. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  3180. class="cmtt-8">&#x00A0;=</span><span
  3181. class="cmtt-8">&#x00A0;[lookup_offset]</span><span
  3182. class="cmtt-8">&#x00A0;*</span><span
  3183. class="cmtt-8">&#x00A0;[codebook_dimensions]</span>
  3184. <br class="fancyvrb" /><a
  3185. id="x1-57006r3"></a><span
  3186. class="cmr-6">3</span><span
  3187. class="cmtt-8">&#x00A0;</span><span
  3188. class="cmtt-8">&#x00A0;</span><span
  3189. class="cmtt-8">&#x00A0;</span><span
  3190. class="cmtt-8">&#x00A0;3)</span><span
  3191. class="cmtt-8">&#x00A0;iterate</span><span
  3192. class="cmtt-8">&#x00A0;[i]</span><span
  3193. class="cmtt-8">&#x00A0;over</span><span
  3194. class="cmtt-8">&#x00A0;the</span><span
  3195. class="cmtt-8">&#x00A0;range</span><span
  3196. class="cmtt-8">&#x00A0;0</span><span
  3197. class="cmtt-8">&#x00A0;...</span><span
  3198. class="cmtt-8">&#x00A0;[codebook_dimensions]-1</span><span
  3199. class="cmtt-8">&#x00A0;(once</span><span
  3200. class="cmtt-8">&#x00A0;for</span><span
  3201. class="cmtt-8">&#x00A0;each</span><span
  3202. class="cmtt-8">&#x00A0;scalar</span><span
  3203. class="cmtt-8">&#x00A0;value</span><span
  3204. class="cmtt-8">&#x00A0;in</span><span
  3205. class="cmtt-8">&#x00A0;the</span><span
  3206. class="cmtt-8">&#x00A0;value</span><span
  3207. class="cmtt-8">&#x00A0;vector)</span><span
  3208. class="cmtt-8">&#x00A0;</span><span
  3209. class="cmsy-8">{</span><br class="fancyvrb" /><a
  3210. id="x1-57008r4"></a><span
  3211. class="cmr-6">4</span><span
  3212. class="cmtt-8">&#x00A0;</span><span
  3213. class="cmtt-8">&#x00A0;</span>
  3214. <br class="fancyvrb" /><a
  3215. id="x1-57010r5"></a><span
  3216. class="cmr-6">5</span><span
  3217. class="cmtt-8">&#x00A0;</span><span
  3218. class="cmtt-8">&#x00A0;</span><span
  3219. class="cmtt-8">&#x00A0;</span><span
  3220. class="cmtt-8">&#x00A0;</span><span
  3221. class="cmtt-8">&#x00A0;</span><span
  3222. class="cmtt-8">&#x00A0;</span><span
  3223. class="cmtt-8">&#x00A0;</span><span
  3224. class="cmtt-8">&#x00A0;</span><span
  3225. class="cmtt-8">&#x00A0;4)</span><span
  3226. class="cmtt-8">&#x00A0;vector</span><span
  3227. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3228. class="cmtt-8">&#x00A0;element</span><span
  3229. class="cmtt-8">&#x00A0;[i]</span><span
  3230. class="cmtt-8">&#x00A0;=</span><br class="fancyvrb" /><a
  3231. id="x1-57012r6"></a><span
  3232. class="cmr-6">6</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="cmtt-8">&#x00A0;</span><span
  3240. class="cmtt-8">&#x00A0;</span><span
  3241. class="cmtt-8">&#x00A0;</span><span
  3242. class="cmtt-8">&#x00A0;</span><span
  3243. class="cmtt-8">&#x00A0;</span><span
  3244. class="cmtt-8">&#x00A0;</span><span
  3245. class="cmtt-8">&#x00A0;</span><span
  3246. class="cmtt-8">&#x00A0;(</span><span
  3247. class="cmtt-8">&#x00A0;[codebook_multiplicands]</span><span
  3248. class="cmtt-8">&#x00A0;array</span><span
  3249. class="cmtt-8">&#x00A0;element</span><span
  3250. class="cmtt-8">&#x00A0;number</span><span
  3251. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><span
  3252. class="cmtt-8">&#x00A0;)</span><span
  3253. class="cmtt-8">&#x00A0;*</span>
  3254. <br class="fancyvrb" /><a
  3255. id="x1-57014r7"></a><span
  3256. class="cmr-6">7</span><span
  3257. class="cmtt-8">&#x00A0;</span><span
  3258. class="cmtt-8">&#x00A0;</span><span
  3259. class="cmtt-8">&#x00A0;</span><span
  3260. class="cmtt-8">&#x00A0;</span><span
  3261. class="cmtt-8">&#x00A0;</span><span
  3262. class="cmtt-8">&#x00A0;</span><span
  3263. class="cmtt-8">&#x00A0;</span><span
  3264. class="cmtt-8">&#x00A0;</span><span
  3265. class="cmtt-8">&#x00A0;</span><span
  3266. class="cmtt-8">&#x00A0;</span><span
  3267. class="cmtt-8">&#x00A0;</span><span
  3268. class="cmtt-8">&#x00A0;</span><span
  3269. class="cmtt-8">&#x00A0;</span><span
  3270. class="cmtt-8">&#x00A0;[codebook_delta_value]</span><span
  3271. class="cmtt-8">&#x00A0;+</span><span
  3272. class="cmtt-8">&#x00A0;[codebook_minimum_value]</span><span
  3273. class="cmtt-8">&#x00A0;+</span><span
  3274. class="cmtt-8">&#x00A0;[last];</span><br class="fancyvrb" /><a
  3275. id="x1-57016r8"></a><span
  3276. class="cmr-6">8</span><span
  3277. class="cmtt-8">&#x00A0;</span><span
  3278. class="cmtt-8">&#x00A0;</span>
  3279. <br class="fancyvrb" /><a
  3280. id="x1-57018r9"></a><span
  3281. class="cmr-6">9</span><span
  3282. class="cmtt-8">&#x00A0;</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;</span><span
  3287. class="cmtt-8">&#x00A0;</span><span
  3288. class="cmtt-8">&#x00A0;</span><span
  3289. class="cmtt-8">&#x00A0;</span><span
  3290. class="cmtt-8">&#x00A0;5)</span><span
  3291. class="cmtt-8">&#x00A0;if</span><span
  3292. class="cmtt-8">&#x00A0;(</span><span
  3293. class="cmtt-8">&#x00A0;[codebook_sequence_p]</span><span
  3294. class="cmtt-8">&#x00A0;is</span><span
  3295. class="cmtt-8">&#x00A0;set</span><span
  3296. class="cmtt-8">&#x00A0;)</span><span
  3297. class="cmtt-8">&#x00A0;then</span><span
  3298. class="cmtt-8">&#x00A0;set</span><span
  3299. class="cmtt-8">&#x00A0;[last]</span><span
  3300. class="cmtt-8">&#x00A0;=</span><span
  3301. class="cmtt-8">&#x00A0;vector</span><span
  3302. class="cmtt-8">&#x00A0;[value_vector]</span><span
  3303. class="cmtt-8">&#x00A0;element</span><span
  3304. class="cmtt-8">&#x00A0;[i]</span><br class="fancyvrb" /><a
  3305. id="x1-57020r10"></a><span
  3306. class="cmr-6">10</span><span
  3307. class="cmtt-8">&#x00A0;</span><span
  3308. class="cmtt-8">&#x00A0;</span>
  3309. <br class="fancyvrb" /><a
  3310. id="x1-57022r11"></a><span
  3311. class="cmr-6">11</span><span
  3312. class="cmtt-8">&#x00A0;</span><span
  3313. class="cmtt-8">&#x00A0;</span><span
  3314. class="cmtt-8">&#x00A0;</span><span
  3315. class="cmtt-8">&#x00A0;</span><span
  3316. class="cmtt-8">&#x00A0;</span><span
  3317. class="cmtt-8">&#x00A0;</span><span
  3318. class="cmtt-8">&#x00A0;</span><span
  3319. class="cmtt-8">&#x00A0;</span><span
  3320. class="cmtt-8">&#x00A0;6)</span><span
  3321. class="cmtt-8">&#x00A0;increment</span><span
  3322. class="cmtt-8">&#x00A0;[multiplicand_offset]</span><br class="fancyvrb" /><a
  3323. id="x1-57024r12"></a><span
  3324. class="cmr-6">12</span><span
  3325. class="cmtt-8">&#x00A0;</span><span
  3326. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  3327. id="x1-57026r13"></a><span
  3328. class="cmr-6">13</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;</span><span
  3335. class="cmtt-8">&#x00A0;</span><span
  3336. class="cmsy-8">}</span><br class="fancyvrb" /><a
  3337. id="x1-57028r14"></a><span
  3338. class="cmr-6">14</span><span
  3339. class="cmtt-8">&#x00A0;</span><span
  3340. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  3341. id="x1-57030r15"></a><span
  3342. class="cmr-6">15</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;7)</span><span
  3347. class="cmtt-8">&#x00A0;vector</span><span
  3348. class="cmtt-8">&#x00A0;calculation</span><span
  3349. class="cmtt-8">&#x00A0;completed.</span></div>
  3350. <!--l. 421--><p class="noindent" >
  3351. <h4 class="subsectionHead"><span class="titlemark">3.3. </span> <a
  3352. id="x1-580003.3"></a>Use of the codebook abstraction</h4>
  3353. <!--l. 423--><p class="noindent" >The decoder uses the codebook abstraction much as it does the bit-unpacking convention; a
  3354. specific codebook reads a codeword from the bitstream, decoding it into an entry number, and
  3355. then returns that entry number to the decoder (when used in a scalar entropy coding context), or
  3356. uses that entry number as an offset into the VQ lookup table, returning a vector of values (when
  3357. used in a context desiring a VQ value). Scalar or VQ context is always explicit; any
  3358. call to the codebook mechanism requests either a scalar entry number or a lookup
  3359. vector.
  3360. <!--l. 433--><p class="noindent" >Note that VQ lookup type zero indicates that there is no lookup table; requesting
  3361. decode using a codebook of lookup type 0 in any context expecting a vector return
  3362. value (even in a case where a vector of dimension one) is forbidden. If decoder setup
  3363. or decode requests such an action, that is an error condition rendering the packet
  3364. undecodable.
  3365. <!--l. 440--><p class="noindent" >Using a codebook to read from the packet bitstream consists first of reading and decoding the
  3366. next codeword in the bitstream. The decoder reads bits until the accumulated bits match a
  3367. codeword in the codebook. This process can be though of as logically walking the
  3368. Huffman decode tree by reading one bit at a time from the bitstream, and using the
  3369. bit as a decision boolean to take the 0 branch (left in the above examples) or the 1
  3370. branch (right in the above examples). Walking the tree finishes when the decode process
  3371. hits a leaf in the decision tree; the result is the entry number corresponding to that
  3372. leaf. Reading past the end of a packet propagates the &#8217;end-of-stream&#8217; condition to the
  3373. decoder.
  3374. <!--l. 452--><p class="noindent" >When used in a scalar context, the resulting codeword entry is the desired return
  3375. value.
  3376. <!--l. 455--><p class="noindent" >When used in a VQ context, the codeword entry number is used as an offset into the VQ lookup
  3377. table. The value returned to the decoder is the vector of scalars corresponding to this
  3378. offset.
  3379. <h3 class="sectionHead"><span class="titlemark">4. </span> <a
  3380. id="x1-590004"></a>Codec Setup and Packet Decode</h3>
  3381. <!--l. 7--><p class="noindent" >
  3382. <h4 class="subsectionHead"><span class="titlemark">4.1. </span> <a
  3383. id="x1-600004.1"></a>Overview</h4>
  3384. <!--l. 9--><p class="noindent" >This document serves as the top-level reference document for the bit-by-bit decode specification
  3385. of Vorbis I. This document assumes a high-level understanding of the Vorbis decode
  3386. process, which is provided in <a
  3387. href="#x1-20001">section&#x00A0;1</a>, &#8220;<a
  3388. href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221;. <a
  3389. href="#x1-360002">section&#x00A0;2</a>,
  3390. &#8220;<a
  3391. href="#x1-360002">Bitpacking Convention<!--tex4ht:ref: vorbis:spec:bitpacking --></a>&#8221; covers reading and writing bit fields from and to bitstream
  3392. packets.
  3393. <!--l. 17--><p class="noindent" >
  3394. <h4 class="subsectionHead"><span class="titlemark">4.2. </span> <a
  3395. id="x1-610004.2"></a>Header decode and decode setup</h4>
  3396. <!--l. 19--><p class="noindent" >A Vorbis bitstream begins with three header packets. The header packets are, in order, the
  3397. identification header, the comments header, and the setup header. All are required for decode
  3398. compliance. An end-of-packet condition during decoding the first or third header packet renders
  3399. the stream undecodable. End-of-packet decoding the comment header is a non-fatal error
  3400. condition.
  3401. <!--l. 26--><p class="noindent" >
  3402. <h5 class="subsubsectionHead"><span class="titlemark">4.2.1. </span> <a
  3403. id="x1-620004.2.1"></a>Common header decode</h5>
  3404. <!--l. 28--><p class="noindent" >Each header packet begins with the same header fields.
  3405. <!--l. 31--><p class="noindent" >
  3406. <div class="fancyvrb" id="fancyvrb20"><a
  3407. id="x1-62002r1"></a><span
  3408. class="cmr-6">1</span><span
  3409. class="cmtt-8">&#x00A0;</span><span
  3410. class="cmtt-8">&#x00A0;</span><span
  3411. class="cmtt-8">&#x00A0;</span><span
  3412. class="cmtt-8">&#x00A0;1)</span><span
  3413. class="cmtt-8">&#x00A0;[packet_type]</span><span
  3414. class="cmtt-8">&#x00A0;:</span><span
  3415. class="cmtt-8">&#x00A0;8</span><span
  3416. class="cmtt-8">&#x00A0;bit</span><span
  3417. class="cmtt-8">&#x00A0;value</span><br class="fancyvrb" /><a
  3418. id="x1-62004r2"></a><span
  3419. class="cmr-6">2</span><span
  3420. class="cmtt-8">&#x00A0;</span><span
  3421. class="cmtt-8">&#x00A0;</span><span
  3422. class="cmtt-8">&#x00A0;</span><span
  3423. class="cmtt-8">&#x00A0;2)</span><span
  3424. class="cmtt-8">&#x00A0;0x76,</span><span
  3425. class="cmtt-8">&#x00A0;0x6f,</span><span
  3426. class="cmtt-8">&#x00A0;0x72,</span><span
  3427. class="cmtt-8">&#x00A0;0x62,</span><span
  3428. class="cmtt-8">&#x00A0;0x69,</span><span
  3429. class="cmtt-8">&#x00A0;0x73:</span><span
  3430. class="cmtt-8">&#x00A0;the</span><span
  3431. class="cmtt-8">&#x00A0;characters</span><span
  3432. class="cmtt-8">&#x00A0;&#8217;v&#8217;,&#8217;o&#8217;,&#8217;r&#8217;,&#8217;b&#8217;,&#8217;i&#8217;,&#8217;s&#8217;</span><span
  3433. class="cmtt-8">&#x00A0;as</span><span
  3434. class="cmtt-8">&#x00A0;six</span><span
  3435. class="cmtt-8">&#x00A0;octets</span></div>
  3436. <!--l. 36--><p class="noindent" >Decode continues according to packet type; the identification header is type 1, the comment
  3437. header type 3 and the setup header type 5 (these types are all odd as a packet with a leading
  3438. single bit of &#8217;0&#8217; is an audio packet). The packets must occur in the order of identification,
  3439. comment, setup.
  3440. <!--l. 44--><p class="noindent" >
  3441. <h5 class="subsubsectionHead"><span class="titlemark">4.2.2. </span> <a
  3442. id="x1-630004.2.2"></a>Identification header</h5>
  3443. <!--l. 46--><p class="noindent" >The identification header is a short header of only a few fields used to declare the stream
  3444. definitively as Vorbis, and provide a few externally relevant pieces of information about the audio
  3445. stream. The identification header is coded as follows:
  3446. <!--l. 51--><p class="noindent" >
  3447. <div class="fancyvrb" id="fancyvrb21"><a
  3448. id="x1-63002r1"></a><span
  3449. class="cmr-6">1</span><span
  3450. class="cmtt-8">&#x00A0;</span><span
  3451. class="cmtt-8">&#x00A0;</span><span
  3452. class="cmtt-8">&#x00A0;1)</span><span
  3453. class="cmtt-8">&#x00A0;[vorbis_version]</span><span
  3454. class="cmtt-8">&#x00A0;=</span><span
  3455. class="cmtt-8">&#x00A0;read</span><span
  3456. class="cmtt-8">&#x00A0;32</span><span
  3457. class="cmtt-8">&#x00A0;bits</span><span
  3458. class="cmtt-8">&#x00A0;as</span><span
  3459. class="cmtt-8">&#x00A0;unsigned</span><span
  3460. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  3461. id="x1-63004r2"></a><span
  3462. class="cmr-6">2</span><span
  3463. class="cmtt-8">&#x00A0;</span><span
  3464. class="cmtt-8">&#x00A0;</span><span
  3465. class="cmtt-8">&#x00A0;2)</span><span
  3466. class="cmtt-8">&#x00A0;[audio_channels]</span><span
  3467. class="cmtt-8">&#x00A0;=</span><span
  3468. class="cmtt-8">&#x00A0;read</span><span
  3469. class="cmtt-8">&#x00A0;8</span><span
  3470. class="cmtt-8">&#x00A0;bit</span><span
  3471. class="cmtt-8">&#x00A0;integer</span><span
  3472. class="cmtt-8">&#x00A0;as</span><span
  3473. class="cmtt-8">&#x00A0;unsigned</span>
  3474. <br class="fancyvrb" /><a
  3475. id="x1-63006r3"></a><span
  3476. class="cmr-6">3</span><span
  3477. class="cmtt-8">&#x00A0;</span><span
  3478. class="cmtt-8">&#x00A0;</span><span
  3479. class="cmtt-8">&#x00A0;3)</span><span
  3480. class="cmtt-8">&#x00A0;[audio_sample_rate]</span><span
  3481. class="cmtt-8">&#x00A0;=</span><span
  3482. class="cmtt-8">&#x00A0;read</span><span
  3483. class="cmtt-8">&#x00A0;32</span><span
  3484. class="cmtt-8">&#x00A0;bits</span><span
  3485. class="cmtt-8">&#x00A0;as</span><span
  3486. class="cmtt-8">&#x00A0;unsigned</span><span
  3487. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  3488. id="x1-63008r4"></a><span
  3489. class="cmr-6">4</span><span
  3490. class="cmtt-8">&#x00A0;</span><span
  3491. class="cmtt-8">&#x00A0;</span><span
  3492. class="cmtt-8">&#x00A0;4)</span><span
  3493. class="cmtt-8">&#x00A0;[bitrate_maximum]</span><span
  3494. class="cmtt-8">&#x00A0;=</span><span
  3495. class="cmtt-8">&#x00A0;read</span><span
  3496. class="cmtt-8">&#x00A0;32</span><span
  3497. class="cmtt-8">&#x00A0;bits</span><span
  3498. class="cmtt-8">&#x00A0;as</span><span
  3499. class="cmtt-8">&#x00A0;signed</span><span
  3500. class="cmtt-8">&#x00A0;integer</span>
  3501. <br class="fancyvrb" /><a
  3502. id="x1-63010r5"></a><span
  3503. class="cmr-6">5</span><span
  3504. class="cmtt-8">&#x00A0;</span><span
  3505. class="cmtt-8">&#x00A0;</span><span
  3506. class="cmtt-8">&#x00A0;5)</span><span
  3507. class="cmtt-8">&#x00A0;[bitrate_nominal]</span><span
  3508. class="cmtt-8">&#x00A0;=</span><span
  3509. class="cmtt-8">&#x00A0;read</span><span
  3510. class="cmtt-8">&#x00A0;32</span><span
  3511. class="cmtt-8">&#x00A0;bits</span><span
  3512. class="cmtt-8">&#x00A0;as</span><span
  3513. class="cmtt-8">&#x00A0;signed</span><span
  3514. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  3515. id="x1-63012r6"></a><span
  3516. class="cmr-6">6</span><span
  3517. class="cmtt-8">&#x00A0;</span><span
  3518. class="cmtt-8">&#x00A0;</span><span
  3519. class="cmtt-8">&#x00A0;6)</span><span
  3520. class="cmtt-8">&#x00A0;[bitrate_minimum]</span><span
  3521. class="cmtt-8">&#x00A0;=</span><span
  3522. class="cmtt-8">&#x00A0;read</span><span
  3523. class="cmtt-8">&#x00A0;32</span><span
  3524. class="cmtt-8">&#x00A0;bits</span><span
  3525. class="cmtt-8">&#x00A0;as</span><span
  3526. class="cmtt-8">&#x00A0;signed</span><span
  3527. class="cmtt-8">&#x00A0;integer</span>
  3528. <br class="fancyvrb" /><a
  3529. id="x1-63014r7"></a><span
  3530. class="cmr-6">7</span><span
  3531. class="cmtt-8">&#x00A0;</span><span
  3532. class="cmtt-8">&#x00A0;</span><span
  3533. class="cmtt-8">&#x00A0;7)</span><span
  3534. class="cmtt-8">&#x00A0;[blocksize_0]</span><span
  3535. class="cmtt-8">&#x00A0;=</span><span
  3536. class="cmtt-8">&#x00A0;2</span><span
  3537. class="cmtt-8">&#x00A0;exponent</span><span
  3538. class="cmtt-8">&#x00A0;(read</span><span
  3539. class="cmtt-8">&#x00A0;4</span><span
  3540. class="cmtt-8">&#x00A0;bits</span><span
  3541. class="cmtt-8">&#x00A0;as</span><span
  3542. class="cmtt-8">&#x00A0;unsigned</span><span
  3543. class="cmtt-8">&#x00A0;integer)</span><br class="fancyvrb" /><a
  3544. id="x1-63016r8"></a><span
  3545. class="cmr-6">8</span><span
  3546. class="cmtt-8">&#x00A0;</span><span
  3547. class="cmtt-8">&#x00A0;</span><span
  3548. class="cmtt-8">&#x00A0;8)</span><span
  3549. class="cmtt-8">&#x00A0;[blocksize_1]</span><span
  3550. class="cmtt-8">&#x00A0;=</span><span
  3551. class="cmtt-8">&#x00A0;2</span><span
  3552. class="cmtt-8">&#x00A0;exponent</span><span
  3553. class="cmtt-8">&#x00A0;(read</span><span
  3554. class="cmtt-8">&#x00A0;4</span><span
  3555. class="cmtt-8">&#x00A0;bits</span><span
  3556. class="cmtt-8">&#x00A0;as</span><span
  3557. class="cmtt-8">&#x00A0;unsigned</span><span
  3558. class="cmtt-8">&#x00A0;integer)</span>
  3559. <br class="fancyvrb" /><a
  3560. id="x1-63018r9"></a><span
  3561. class="cmr-6">9</span><span
  3562. class="cmtt-8">&#x00A0;</span><span
  3563. class="cmtt-8">&#x00A0;</span><span
  3564. class="cmtt-8">&#x00A0;9)</span><span
  3565. class="cmtt-8">&#x00A0;[framing_flag]</span><span
  3566. class="cmtt-8">&#x00A0;=</span><span
  3567. class="cmtt-8">&#x00A0;read</span><span
  3568. class="cmtt-8">&#x00A0;one</span><span
  3569. class="cmtt-8">&#x00A0;bit</span></div>
  3570. <!--l. 63--><p class="noindent" ><span
  3571. class="cmtt-12">[vorbis_version] </span>is to read &#8217;0&#8217; in order to be compatible with this document. Both
  3572. <span
  3573. class="cmtt-12">[audio_channels] </span>and <span
  3574. class="cmtt-12">[audio_sample_rate] </span>must read greater than zero. Allowed final
  3575. blocksize values are 64, 128, 256, 512, 1024, 2048, 4096 and 8192 in Vorbis I. <span
  3576. class="cmtt-12">[blocksize_0]</span>
  3577. must be less than or equal to <span
  3578. class="cmtt-12">[blocksize_1]</span>. The framing bit must be nonzero. Failure to meet
  3579. any of these conditions renders a stream undecodable.
  3580. <!--l. 71--><p class="noindent" >The bitrate fields above are used only as hints. The nominal bitrate field especially may be
  3581. considerably off in purely VBR streams. The fields are meaningful only when greater than
  3582. zero.
  3583. <ul class="itemize1">
  3584. <li class="itemize">All three fields set to the same value implies a fixed rate, or tightly bounded, nearly
  3585. fixed-rate bitstream
  3586. </li>
  3587. <li class="itemize">Only nominal set implies a VBR or ABR stream that averages the nominal bitrate
  3588. </li>
  3589. <li class="itemize">Maximum and or minimum set implies a VBR bitstream that obeys the bitrate limits
  3590. </li>
  3591. <li class="itemize">None set indicates the encoder does not care to speculate.</li></ul>
  3592. <!--l. 85--><p class="noindent" >
  3593. <h5 class="subsubsectionHead"><span class="titlemark">4.2.3. </span> <a
  3594. id="x1-640004.2.3"></a>Comment header</h5>
  3595. <!--l. 86--><p class="noindent" >Comment header decode and data specification is covered in <a
  3596. href="#x1-820005">section&#x00A0;5</a>, &#8220;<a
  3597. href="#x1-820005">comment field and
  3598. header specification<!--tex4ht:ref: vorbis:spec:comment --></a>&#8221;.
  3599. <!--l. 90--><p class="noindent" >
  3600. <h5 class="subsubsectionHead"><span class="titlemark">4.2.4. </span> <a
  3601. id="x1-650004.2.4"></a>Setup header</h5>
  3602. <!--l. 92--><p class="noindent" >Vorbis codec setup is configurable to an extreme degree:
  3603. <div class="center"
  3604. >
  3605. <!--l. 94--><p class="noindent" >
  3606. <!--l. 95--><p class="noindent" ><img
  3607. src="components.png" alt="PIC"
  3608. >
  3609. <br /> <div class="caption"
  3610. ><span class="id">Figure&#x00A0;6: </span><span
  3611. class="content">decoder pipeline configuration</span></div><!--tex4ht:label?: x1-650016 -->
  3612. </div>
  3613. <!--l. 100--><p class="noindent" >The setup header contains the bulk of the codec setup information needed for decode. The setup
  3614. header contains, in order, the lists of codebook configurations, time-domain transform
  3615. configurations (placeholders in Vorbis I), floor configurations, residue configurations, channel
  3616. mapping configurations and mode configurations. It finishes with a framing bit of &#8217;1&#8217;. Header
  3617. decode proceeds in the following order:
  3618. <!--l. 108--><p class="noindent" ><span class="paragraphHead"><a
  3619. id="x1-660004.2.4"></a><span
  3620. class="cmbx-12">Codebooks</span></span>
  3621. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3622. 1. </dt><dd
  3623. class="enumerate-enumitem"><span
  3624. class="cmtt-12">[vorbis_codebook_count] </span>= read eight bits as unsigned integer and add one
  3625. </dd><dt class="enumerate-enumitem">
  3626. 2. </dt><dd
  3627. class="enumerate-enumitem">Decode <span
  3628. class="cmtt-12">[vorbis_codebook_count] </span>codebooks in order as defined in <a
  3629. href="#x1-470003">section&#x00A0;3</a>,
  3630. &#8220;<a
  3631. href="#x1-470003">Probability Model and Codebooks<!--tex4ht:ref: vorbis:spec:codebook --></a>&#8221;. Save each configuration, in order, in an array
  3632. of codebook configurations <span
  3633. class="cmtt-12">[vorbis_codebook_configurations]</span>.</dd></dl>
  3634. <!--l. 120--><p class="noindent" ><span class="paragraphHead"><a
  3635. id="x1-670004.2.4"></a><span
  3636. class="cmbx-12">Time domain transforms</span></span>
  3637. These hooks are placeholders in Vorbis I. Nevertheless, the configuration placeholder values must
  3638. be read to maintain bitstream sync.
  3639. <!--l. 127--><p class="noindent" >
  3640. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3641. 1. </dt><dd
  3642. class="enumerate-enumitem"><span
  3643. class="cmtt-12">[vorbis_time_count] </span>= read 6 bits as unsigned integer and add one
  3644. </dd><dt class="enumerate-enumitem">
  3645. 2. </dt><dd
  3646. class="enumerate-enumitem">read <span
  3647. class="cmtt-12">[vorbis_time_count] </span>16 bit values; each value should be zero. If any value is
  3648. nonzero, this is an error condition and the stream is undecodable.</dd></dl>
  3649. <!--l. 133--><p class="noindent" ><span class="paragraphHead"><a
  3650. id="x1-680004.2.4"></a><span
  3651. class="cmbx-12">Floors</span></span>
  3652. Vorbis uses two floor types; header decode is handed to the decode abstraction of the appropriate
  3653. type.
  3654. <!--l. 139--><p class="noindent" >
  3655. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3656. 1. </dt><dd
  3657. class="enumerate-enumitem"><span
  3658. class="cmtt-12">[vorbis_floor_count] </span>= read 6 bits as unsigned integer and add one
  3659. </dd><dt class="enumerate-enumitem">
  3660. 2. </dt><dd
  3661. class="enumerate-enumitem">For each <span
  3662. class="cmtt-12">[i] </span>of <span
  3663. class="cmtt-12">[vorbis_floor_count] </span>floor numbers:
  3664. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3665. a) </dt><dd
  3666. class="enumerate-enumitem">read the floor type: vector <span
  3667. class="cmtt-12">[vorbis_floor_types] </span>element <span
  3668. class="cmtt-12">[i] </span>= read 16 bits
  3669. as unsigned integer
  3670. </dd><dt class="enumerate-enumitem">
  3671. b) </dt><dd
  3672. class="enumerate-enumitem">If the floor type is zero, decode the floor configuration as defined in <a
  3673. href="#x1-900006">section&#x00A0;6</a>,
  3674. &#8220;<a
  3675. href="#x1-900006">Floor type 0 setup and decode<!--tex4ht:ref: vorbis:spec:floor0 --></a>&#8221;; save this configuration in slot <span
  3676. class="cmtt-12">[i] </span>of the floor
  3677. configuration array <span
  3678. class="cmtt-12">[vorbis_floor_configurations]</span>.
  3679. </dd><dt class="enumerate-enumitem">
  3680. c) </dt><dd
  3681. class="enumerate-enumitem">If the floor type is one, decode the floor configuration as defined in <a
  3682. href="#x1-970007">section&#x00A0;7</a>,
  3683. &#8220;<a
  3684. href="#x1-970007">Floor type 1 setup and decode<!--tex4ht:ref: vorbis:spec:floor1 --></a>&#8221;; save this configuration in slot <span
  3685. class="cmtt-12">[i] </span>of the floor
  3686. configuration array <span
  3687. class="cmtt-12">[vorbis_floor_configurations]</span>.
  3688. </dd><dt class="enumerate-enumitem">
  3689. d) </dt><dd
  3690. class="enumerate-enumitem">If the the floor type is greater than one, this stream is undecodable; ERROR
  3691. CONDITION</dd></dl>
  3692. </dd></dl>
  3693. <!--l. 157--><p class="noindent" ><span class="paragraphHead"><a
  3694. id="x1-690004.2.4"></a><span
  3695. class="cmbx-12">Residues</span></span>
  3696. Vorbis uses three residue types; header decode of each type is identical.
  3697. <!--l. 163--><p class="noindent" >
  3698. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3699. 1. </dt><dd
  3700. class="enumerate-enumitem"><span
  3701. class="cmtt-12">[vorbis_residue_count] </span>= read 6 bits as unsigned integer and add one
  3702. </dd><dt class="enumerate-enumitem">
  3703. 2. </dt><dd
  3704. class="enumerate-enumitem">For each of <span
  3705. class="cmtt-12">[vorbis_residue_count] </span>residue numbers:
  3706. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3707. a) </dt><dd
  3708. class="enumerate-enumitem">read the residue type; vector <span
  3709. class="cmtt-12">[vorbis_residue_types] </span>element <span
  3710. class="cmtt-12">[i] </span>= read 16
  3711. bits as unsigned integer
  3712. </dd><dt class="enumerate-enumitem">
  3713. b) </dt><dd
  3714. class="enumerate-enumitem">If the residue type is zero, one or two, decode the residue configuration as defined
  3715. in <a
  3716. href="#x1-1040008">section&#x00A0;8</a>, &#8220;<a
  3717. href="#x1-1040008">Residue setup and decode<!--tex4ht:ref: vorbis:spec:residue --></a>&#8221;; save this configuration in slot <span
  3718. class="cmtt-12">[i] </span>of
  3719. the residue configuration array <span
  3720. class="cmtt-12">[vorbis_residue_configurations]</span>.
  3721. </dd><dt class="enumerate-enumitem">
  3722. c) </dt><dd
  3723. class="enumerate-enumitem">If the the residue type is greater than two, this stream is undecodable; ERROR
  3724. CONDITION</dd></dl>
  3725. </dd></dl>
  3726. <!--l. 177--><p class="noindent" ><span class="paragraphHead"><a
  3727. id="x1-700004.2.4"></a><span
  3728. class="cmbx-12">Mappings</span></span>
  3729. Mappings are used to set up specific pipelines for encoding multichannel audio with varying
  3730. channel mapping applications. Vorbis I uses a single mapping type (0), with implicit PCM
  3731. channel mappings.
  3732. <!--l. 188--><p class="noindent" >
  3733. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3734. 1. </dt><dd
  3735. class="enumerate-enumitem"><span
  3736. class="cmtt-12">[vorbis_mapping_count] </span>= read 6 bits as unsigned integer and add one
  3737. </dd><dt class="enumerate-enumitem">
  3738. 2. </dt><dd
  3739. class="enumerate-enumitem">For each <span
  3740. class="cmtt-12">[i] </span>of <span
  3741. class="cmtt-12">[vorbis_mapping_count] </span>mapping numbers:
  3742. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3743. a) </dt><dd
  3744. class="enumerate-enumitem">read the mapping type: 16 bits as unsigned integer. There&#8217;s no reason to save
  3745. the mapping type in Vorbis I.
  3746. </dd><dt class="enumerate-enumitem">
  3747. b) </dt><dd
  3748. class="enumerate-enumitem">If the mapping type is nonzero, the stream is undecodable
  3749. </dd><dt class="enumerate-enumitem">
  3750. c) </dt><dd
  3751. class="enumerate-enumitem">If the mapping type is zero:
  3752. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3753. i. </dt><dd
  3754. class="enumerate-enumitem">read 1 bit as a boolean flag
  3755. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3756. A. </dt><dd
  3757. class="enumerate-enumitem">if set, <span
  3758. class="cmtt-12">[vorbis_mapping_submaps] </span>= read 4 bits as unsigned integer
  3759. and add one
  3760. </dd><dt class="enumerate-enumitem">
  3761. B. </dt><dd
  3762. class="enumerate-enumitem">if unset, <span
  3763. class="cmtt-12">[vorbis_mapping_submaps] </span>= 1</dd></dl>
  3764. </dd><dt class="enumerate-enumitem">
  3765. ii. </dt><dd
  3766. class="enumerate-enumitem">read 1 bit as a boolean flag
  3767. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3768. A. </dt><dd
  3769. class="enumerate-enumitem">if set, square polar channel mapping is in use:
  3770. <ul class="itemize1">
  3771. <li class="itemize"><span
  3772. class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= read 8 bits as unsigned
  3773. integer and add one
  3774. </li>
  3775. <li class="itemize">for <span
  3776. class="cmtt-12">[j] </span>each of <span
  3777. class="cmtt-12">[vorbis_mapping_coupling_steps] </span>steps:
  3778. <ul class="itemize2">
  3779. <li class="itemize">vector <span
  3780. class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
  3781. class="cmtt-12">[j]</span>= read
  3782. <a
  3783. href="#x1-1190009.2.1">ilog</a>(<span
  3784. class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
  3785. </li>
  3786. <li class="itemize">vector <span
  3787. class="cmtt-12">[vorbis_mapping_angle] </span>element <span
  3788. class="cmtt-12">[j]</span>= read
  3789. <a
  3790. href="#x1-1190009.2.1">ilog</a>(<span
  3791. class="cmtt-12">[audio_channels] </span>- 1) bits as unsigned integer
  3792. </li>
  3793. <li class="itemize">the numbers read in the above two steps are channel numbers
  3794. representing the channel to treat as magnitude and the channel
  3795. to treat as angle, respectively. If for any coupling step the
  3796. angle channel number equals the magnitude channel number, the
  3797. magnitude channel number is greater than <span
  3798. class="cmtt-12">[audio_channels]</span>-1, or
  3799. the angle channel is greater than <span
  3800. class="cmtt-12">[audio_channels]</span>-1, the stream
  3801. is undecodable.</li></ul>
  3802. </li></ul>
  3803. </dd><dt class="enumerate-enumitem">
  3804. B. </dt><dd
  3805. class="enumerate-enumitem">if unset, <span
  3806. class="cmtt-12">[vorbis_mapping_coupling_steps] </span>= 0</dd></dl>
  3807. </dd><dt class="enumerate-enumitem">
  3808. iii. </dt><dd
  3809. class="enumerate-enumitem">read 2 bits (reserved field); if the value is nonzero, the stream is undecodable
  3810. </dd><dt class="enumerate-enumitem">
  3811. iv. </dt><dd
  3812. class="enumerate-enumitem">if <span
  3813. class="cmtt-12">[vorbis_mapping_submaps] </span>is greater than one, we read channel multiplex
  3814. settings. For each <span
  3815. class="cmtt-12">[j] </span>of <span
  3816. class="cmtt-12">[audio_channels] </span>channels:
  3817. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3818. A. </dt><dd
  3819. class="enumerate-enumitem">vector <span
  3820. class="cmtt-12">[vorbis_mapping_mux] </span>element <span
  3821. class="cmtt-12">[j] </span>= read 4 bits as unsigned
  3822. integer
  3823. </dd><dt class="enumerate-enumitem">
  3824. B. </dt><dd
  3825. class="enumerate-enumitem">if the value is greater than the highest numbered submap
  3826. (<span
  3827. class="cmtt-12">[vorbis_mapping_submaps] </span>- 1), this in an error condition rendering
  3828. the stream undecodable</dd></dl>
  3829. </dd><dt class="enumerate-enumitem">
  3830. v. </dt><dd
  3831. class="enumerate-enumitem">for each submap <span
  3832. class="cmtt-12">[j] </span>of <span
  3833. class="cmtt-12">[vorbis_mapping_submaps] </span>submaps, read the floor and
  3834. residue numbers for use in decoding that submap:
  3835. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3836. A. </dt><dd
  3837. class="enumerate-enumitem">read and discard 8 bits (the unused time configuration placeholder)
  3838. </dd><dt class="enumerate-enumitem">
  3839. B. </dt><dd
  3840. class="enumerate-enumitem">read 8 bits as unsigned integer for the floor number; save in vector
  3841. <span
  3842. class="cmtt-12">[vorbis_mapping_submap_floor] </span>element <span
  3843. class="cmtt-12">[j]</span>
  3844. </dd><dt class="enumerate-enumitem">
  3845. C. </dt><dd
  3846. class="enumerate-enumitem">verify the floor number is not greater than the highest number floor
  3847. configured for the bitstream. If it is, the bitstream is undecodable
  3848. </dd><dt class="enumerate-enumitem">
  3849. D. </dt><dd
  3850. class="enumerate-enumitem">read 8 bits as unsigned integer for the residue number; save in vector
  3851. <span
  3852. class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
  3853. class="cmtt-12">[j]</span>
  3854. </dd><dt class="enumerate-enumitem">
  3855. E. </dt><dd
  3856. class="enumerate-enumitem">verify the residue number is not greater than the highest number residue
  3857. configured for the bitstream. If it is, the bitstream is undecodable</dd></dl>
  3858. </dd><dt class="enumerate-enumitem">
  3859. vi. </dt><dd
  3860. class="enumerate-enumitem">save this mapping configuration in slot <span
  3861. class="cmtt-12">[i] </span>of the mapping configuration array
  3862. <span
  3863. class="cmtt-12">[vorbis_mapping_configurations]</span>.</dd></dl>
  3864. </dd></dl>
  3865. </dd></dl>
  3866. <!--l. 247--><p class="noindent" ><span class="paragraphHead"><a
  3867. id="x1-710004.2.4"></a><span
  3868. class="cmbx-12">Modes</span></span>
  3869. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3870. 1. </dt><dd
  3871. class="enumerate-enumitem"><span
  3872. class="cmtt-12">[vorbis_mode_count] </span>= read 6 bits as unsigned integer and add one
  3873. </dd><dt class="enumerate-enumitem">
  3874. 2. </dt><dd
  3875. class="enumerate-enumitem">For each of <span
  3876. class="cmtt-12">[vorbis_mode_count] </span>mode numbers:
  3877. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3878. a) </dt><dd
  3879. class="enumerate-enumitem"><span
  3880. class="cmtt-12">[vorbis_mode_blockflag] </span>= read 1 bit
  3881. </dd><dt class="enumerate-enumitem">
  3882. b) </dt><dd
  3883. class="enumerate-enumitem"><span
  3884. class="cmtt-12">[vorbis_mode_windowtype] </span>= read 16 bits as unsigned integer
  3885. </dd><dt class="enumerate-enumitem">
  3886. c) </dt><dd
  3887. class="enumerate-enumitem"><span
  3888. class="cmtt-12">[vorbis_mode_transformtype] </span>= read 16 bits as unsigned integer
  3889. </dd><dt class="enumerate-enumitem">
  3890. d) </dt><dd
  3891. class="enumerate-enumitem"><span
  3892. class="cmtt-12">[vorbis_mode_mapping] </span>= read 8 bits as unsigned integer
  3893. </dd><dt class="enumerate-enumitem">
  3894. e) </dt><dd
  3895. class="enumerate-enumitem">verify ranges; zero is the only legal value in
  3896. Vorbis I for <span
  3897. class="cmtt-12">[vorbis_mode_windowtype] </span>and <span
  3898. class="cmtt-12">[vorbis_mode_transformtype]</span>.
  3899. <span
  3900. class="cmtt-12">[vorbis_mode_mapping] </span>must not be greater than the highest number mapping
  3901. in use. Any illegal values render the stream undecodable.
  3902. </dd><dt class="enumerate-enumitem">
  3903. f) </dt><dd
  3904. class="enumerate-enumitem">save this mode configuration in slot <span
  3905. class="cmtt-12">[i] </span>of the mode configuration array
  3906. <span
  3907. class="cmtt-12">[vorbis_mode_configurations]</span>.</dd></dl>
  3908. </dd><dt class="enumerate-enumitem">
  3909. 3. </dt><dd
  3910. class="enumerate-enumitem">read 1 bit as a framing flag. If unset, a framing error occurred and the stream is not
  3911. decodable.</dd></dl>
  3912. <!--l. 268--><p class="noindent" >After reading mode descriptions, setup header decode is complete.
  3913. <!--l. 277--><p class="noindent" >
  3914. <h4 class="subsectionHead"><span class="titlemark">4.3. </span> <a
  3915. id="x1-720004.3"></a>Audio packet decode and synthesis</h4>
  3916. <!--l. 279--><p class="noindent" >Following the three header packets, all packets in a Vorbis I stream are audio. The first step of
  3917. audio packet decode is to read and verify the packet type. <span
  3918. class="cmti-12">A non-audio packet when audio is</span>
  3919. <span
  3920. class="cmti-12">expected indicates stream corruption or a non-compliant stream. The decoder must ignore the</span>
  3921. <span
  3922. class="cmti-12">packet and not attempt decoding it to audio</span>.
  3923. <!--l. 286--><p class="noindent" >
  3924. <h5 class="subsubsectionHead"><span class="titlemark">4.3.1. </span> <a
  3925. id="x1-730004.3.1"></a>packet type, mode and window decode</h5>
  3926. <!--l. 289--><p class="noindent" >
  3927. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3928. 1. </dt><dd
  3929. class="enumerate-enumitem">read 1 bit <span
  3930. class="cmtt-12">[packet_type]</span>; check that packet type is 0 (audio)
  3931. </dd><dt class="enumerate-enumitem">
  3932. 2. </dt><dd
  3933. class="enumerate-enumitem">read <a
  3934. href="#x1-1190009.2.1">ilog</a>([vorbis_mode_count]-1) bits <span
  3935. class="cmtt-12">[mode_number]</span>
  3936. </dd><dt class="enumerate-enumitem">
  3937. 3. </dt><dd
  3938. class="enumerate-enumitem">decode blocksize <span
  3939. class="cmtt-12">[n] </span>is equal to <span
  3940. class="cmtt-12">[blocksize_0] </span>if <span
  3941. class="cmtt-12">[vorbis_mode_blockflag] </span>is 0,
  3942. else <span
  3943. class="cmtt-12">[n] </span>is equal to <span
  3944. class="cmtt-12">[blocksize_1]</span>.
  3945. </dd><dt class="enumerate-enumitem">
  3946. 4. </dt><dd
  3947. class="enumerate-enumitem">perform window selection and setup; this window is used later by the inverse
  3948. MDCT:
  3949. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3950. a) </dt><dd
  3951. class="enumerate-enumitem">if this is a long window (the <span
  3952. class="cmtt-12">[vorbis_mode_blockflag] </span>flag of this mode is
  3953. set):
  3954. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  3955. i. </dt><dd
  3956. class="enumerate-enumitem">read 1 bit for <span
  3957. class="cmtt-12">[previous_window_flag]</span>
  3958. </dd><dt class="enumerate-enumitem">
  3959. ii. </dt><dd
  3960. class="enumerate-enumitem">read 1 bit for <span
  3961. class="cmtt-12">[next_window_flag]</span>
  3962. </dd><dt class="enumerate-enumitem">
  3963. iii. </dt><dd
  3964. class="enumerate-enumitem">if <span
  3965. class="cmtt-12">[previous_window_flag] </span>is not set, the left half of the window will
  3966. be a hybrid window for lapping with a short block. See <a
  3967. href="#paragraph.1" >paragraph&#x00A0;<a
  3968. href="#x1-260001.3.2">1.3.2</a></a>,
  3969. &#8220;<a
  3970. href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
  3971. overlapping dissimilar windows. Else, the left half window will have normal
  3972. long shape.
  3973. </dd><dt class="enumerate-enumitem">
  3974. iv. </dt><dd
  3975. class="enumerate-enumitem">if <span
  3976. class="cmtt-12">[next_window_flag] </span>is not set, the right half of the window will be
  3977. a hybrid window for lapping with a short block. See <a
  3978. href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>,
  3979. &#8220;<a
  3980. href="#x1-260001.3.2">Window shape decode (long windows only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221; for an illustration of
  3981. overlapping dissimilar windows. Else, the left right window will have normal
  3982. long shape.</dd></dl>
  3983. </dd><dt class="enumerate-enumitem">
  3984. b) </dt><dd
  3985. class="enumerate-enumitem">if this is a short window, the window is always the same short-window
  3986. shape.</dd></dl>
  3987. </dd></dl>
  3988. <!--l. 321--><p class="noindent" >Vorbis windows all use the slope function <span
  3989. class="cmmi-12">y </span>= sin(<img
  3990. src="Vorbis_I_spec1x.png" alt="&#x03C0;
  3991. 2" class="frac" align="middle"> <span
  3992. class="cmsy-10x-x-120">*</span> sin <sup><span
  3993. class="cmr-8">2</span></sup>((<span
  3994. class="cmmi-12">x </span>+ 0<span
  3995. class="cmmi-12">.</span>5)<span
  3996. class="cmmi-12">&#x2215;n </span><span
  3997. class="cmsy-10x-x-120">* </span><span
  3998. class="cmmi-12">&#x03C0;</span>)), where <span
  3999. class="cmmi-12">n </span>is window
  4000. size and <span
  4001. class="cmmi-12">x </span>ranges 0<span
  4002. class="cmmi-12">&#x2026;</span><span
  4003. class="cmmi-12">n</span><span
  4004. class="cmsy-10x-x-120">- </span>1, but dissimilar lapping requirements can affect overall shape. Window
  4005. generation proceeds as follows:
  4006. <!--l. 327--><p class="noindent" >
  4007. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4008. 1. </dt><dd
  4009. class="enumerate-enumitem"><span
  4010. class="cmtt-12">[window_center] </span>= <span
  4011. class="cmtt-12">[n] </span>/ 2
  4012. </dd><dt class="enumerate-enumitem">
  4013. 2. </dt><dd
  4014. class="enumerate-enumitem">if (<span
  4015. class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
  4016. class="cmtt-12">[previous_window_flag] </span>is not set)
  4017. then
  4018. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4019. a) </dt><dd
  4020. class="enumerate-enumitem"><span
  4021. class="cmtt-12">[left_window_start] </span>= <span
  4022. class="cmtt-12">[n]</span>/4 - <span
  4023. class="cmtt-12">[blocksize_0]</span>/4
  4024. </dd><dt class="enumerate-enumitem">
  4025. b) </dt><dd
  4026. class="enumerate-enumitem"><span
  4027. class="cmtt-12">[left_window_end] </span>= <span
  4028. class="cmtt-12">[n]</span>/4 + <span
  4029. class="cmtt-12">[blocksize_0]</span>/4
  4030. </dd><dt class="enumerate-enumitem">
  4031. c) </dt><dd
  4032. class="enumerate-enumitem"><span
  4033. class="cmtt-12">[left_n] </span>= <span
  4034. class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
  4035. <!--l. 336--><p class="noindent" >else
  4036. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4037. a) </dt><dd
  4038. class="enumerate-enumitem"><span
  4039. class="cmtt-12">[left_window_start] </span>= 0
  4040. </dd><dt class="enumerate-enumitem">
  4041. b) </dt><dd
  4042. class="enumerate-enumitem"><span
  4043. class="cmtt-12">[left_window_end] </span>= <span
  4044. class="cmtt-12">[window_center]</span>
  4045. </dd><dt class="enumerate-enumitem">
  4046. c) </dt><dd
  4047. class="enumerate-enumitem"><span
  4048. class="cmtt-12">[left_n] </span>= <span
  4049. class="cmtt-12">[n]</span>/2</dd></dl>
  4050. </dd><dt class="enumerate-enumitem">
  4051. 3. </dt><dd
  4052. class="enumerate-enumitem">if (<span
  4053. class="cmtt-12">[vorbis_mode_blockflag] </span>is set and <span
  4054. class="cmtt-12">[next_window_flag] </span>is not set) then
  4055. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4056. a) </dt><dd
  4057. class="enumerate-enumitem"><span
  4058. class="cmtt-12">[right_window_start] </span>= <span
  4059. class="cmtt-12">[n]*3</span>/4 - <span
  4060. class="cmtt-12">[blocksize_0]</span>/4
  4061. </dd><dt class="enumerate-enumitem">
  4062. b) </dt><dd
  4063. class="enumerate-enumitem"><span
  4064. class="cmtt-12">[right_window_end] </span>= <span
  4065. class="cmtt-12">[n]*3</span>/4 + <span
  4066. class="cmtt-12">[blocksize_0]</span>/4
  4067. </dd><dt class="enumerate-enumitem">
  4068. c) </dt><dd
  4069. class="enumerate-enumitem"><span
  4070. class="cmtt-12">[right_n] </span>= <span
  4071. class="cmtt-12">[blocksize_0]</span>/2</dd></dl>
  4072. <!--l. 352--><p class="noindent" >else
  4073. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4074. a) </dt><dd
  4075. class="enumerate-enumitem"><span
  4076. class="cmtt-12">[right_window_start] </span>= <span
  4077. class="cmtt-12">[window_center]</span>
  4078. </dd><dt class="enumerate-enumitem">
  4079. b) </dt><dd
  4080. class="enumerate-enumitem"><span
  4081. class="cmtt-12">[right_window_end] </span>= <span
  4082. class="cmtt-12">[n]</span>
  4083. </dd><dt class="enumerate-enumitem">
  4084. c) </dt><dd
  4085. class="enumerate-enumitem"><span
  4086. class="cmtt-12">[right_n] </span>= <span
  4087. class="cmtt-12">[n]</span>/2</dd></dl>
  4088. </dd><dt class="enumerate-enumitem">
  4089. 4. </dt><dd
  4090. class="enumerate-enumitem">window from range 0 ... <span
  4091. class="cmtt-12">[left_window_start]</span>-1 inclusive is zero
  4092. </dd><dt class="enumerate-enumitem">
  4093. 5. </dt><dd
  4094. class="enumerate-enumitem">for <span
  4095. class="cmtt-12">[i] </span>in range <span
  4096. class="cmtt-12">[left_window_start] </span>... <span
  4097. class="cmtt-12">[left_window_end]</span>-1, window(<span
  4098. class="cmtt-12">[i]</span>) =
  4099. sin(<img
  4100. src="Vorbis_I_spec2x.png" alt="&#x03C0;
  4101. 2" class="frac" align="middle"> <span
  4102. class="cmsy-10x-x-120">*</span> sin <sup><span
  4103. class="cmr-8">2</span></sup>( (<span
  4104. class="cmtt-12">[i]</span>-<span
  4105. class="cmtt-12">[left_window_start]</span>+0.5) / <span
  4106. class="cmtt-12">[left_n] </span><span
  4107. class="cmsy-10x-x-120">*</span><img
  4108. src="Vorbis_I_spec3x.png" alt="&#x03C0;
  4109. 2" class="frac" align="middle">) )
  4110. </dd><dt class="enumerate-enumitem">
  4111. 6. </dt><dd
  4112. class="enumerate-enumitem">window from range <span
  4113. class="cmtt-12">[left_window_end] </span>... <span
  4114. class="cmtt-12">[right_window_start]</span>-1 inclusive is
  4115. one
  4116. </dd><dt class="enumerate-enumitem">
  4117. 7. </dt><dd
  4118. class="enumerate-enumitem">for <span
  4119. class="cmtt-12">[i] </span>in range <span
  4120. class="cmtt-12">[right_window_start] </span>... <span
  4121. class="cmtt-12">[right_window_end]</span>-1, window(<span
  4122. class="cmtt-12">[i]</span>) =
  4123. sin(<img
  4124. src="Vorbis_I_spec4x.png" alt="&#x03C0;2" class="frac" align="middle"> <span
  4125. class="cmsy-10x-x-120">*</span> sin <sup><span
  4126. class="cmr-8">2</span></sup>( (<span
  4127. class="cmtt-12">[i]</span>-<span
  4128. class="cmtt-12">[right_window_start]</span>+0.5) / <span
  4129. class="cmtt-12">[right_n] </span><span
  4130. class="cmsy-10x-x-120">*</span><img
  4131. src="Vorbis_I_spec5x.png" alt="&#x03C0;2" class="frac" align="middle"> + <img
  4132. src="Vorbis_I_spec6x.png" alt="&#x03C0;2" class="frac" align="middle">) )
  4133. </dd><dt class="enumerate-enumitem">
  4134. 8. </dt><dd
  4135. class="enumerate-enumitem">window from range <span
  4136. class="cmtt-12">[right_window_start] </span>... <span
  4137. class="cmtt-12">[n]</span>-1 is zero</dd></dl>
  4138. <!--l. 368--><p class="noindent" >An end-of-packet condition up to this point should be considered an error that discards this
  4139. packet from the stream. An end of packet condition past this point is to be considered a possible
  4140. nominal occurrence.
  4141. <!--l. 375--><p class="noindent" >
  4142. <h5 class="subsubsectionHead"><span class="titlemark">4.3.2. </span> <a
  4143. id="x1-740004.3.2"></a>floor curve decode</h5>
  4144. <!--l. 377--><p class="noindent" >From this point on, we assume out decode context is using mode number <span
  4145. class="cmtt-12">[mode_number]</span>
  4146. from configuration array <span
  4147. class="cmtt-12">[vorbis_mode_configurations] </span>and the map number
  4148. <span
  4149. class="cmtt-12">[vorbis_mode_mapping] </span>(specified by the current mode) taken from the mapping configuration
  4150. array <span
  4151. class="cmtt-12">[vorbis_mapping_configurations]</span>.
  4152. <!--l. 384--><p class="noindent" >Floor curves are decoded one-by-one in channel order.
  4153. <!--l. 386--><p class="noindent" >For each floor <span
  4154. class="cmtt-12">[i] </span>of <span
  4155. class="cmtt-12">[audio_channels]</span>
  4156. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4157. 1. </dt><dd
  4158. class="enumerate-enumitem"><span
  4159. class="cmtt-12">[submap_number] </span>= element <span
  4160. class="cmtt-12">[i] </span>of vector [vorbis_mapping_mux]
  4161. </dd><dt class="enumerate-enumitem">
  4162. 2. </dt><dd
  4163. class="enumerate-enumitem"><span
  4164. class="cmtt-12">[floor_number] </span>= element <span
  4165. class="cmtt-12">[submap_number] </span>of vector [vorbis_submap_floor]
  4166. </dd><dt class="enumerate-enumitem">
  4167. 3. </dt><dd
  4168. class="enumerate-enumitem">if the floor type of this floor (vector
  4169. <span
  4170. class="cmtt-12">[vorbis_floor_types] </span>element <span
  4171. class="cmtt-12">[floor_number]</span>) is zero then decode the floor for
  4172. channel <span
  4173. class="cmtt-12">[i] </span>according to the <a
  4174. href="#x1-940006.2.2">subsubsection&#x00A0;6.2.2</a>, &#8220;<a
  4175. href="#x1-940006.2.2">packet decode<!--tex4ht:ref: vorbis:spec:floor0-decode --></a>&#8221;
  4176. </dd><dt class="enumerate-enumitem">
  4177. 4. </dt><dd
  4178. class="enumerate-enumitem">if the type of this floor is one then decode the floor for channel <span
  4179. class="cmtt-12">[i] </span>according to the
  4180. <a
  4181. href="#x1-1020007.2.3">subsubsection&#x00A0;7.2.3</a>, &#8220;<a
  4182. href="#x1-1020007.2.3">packet decode<!--tex4ht:ref: vorbis:spec:floor1-decode --></a>&#8221;
  4183. </dd><dt class="enumerate-enumitem">
  4184. 5. </dt><dd
  4185. class="enumerate-enumitem">save the needed decoded floor information for channel for later synthesis
  4186. </dd><dt class="enumerate-enumitem">
  4187. 6. </dt><dd
  4188. class="enumerate-enumitem">if the decoded floor returned &#8217;unused&#8217;, set vector <span
  4189. class="cmtt-12">[no_residue] </span>element <span
  4190. class="cmtt-12">[i] </span>to true,
  4191. else set vector <span
  4192. class="cmtt-12">[no_residue] </span>element <span
  4193. class="cmtt-12">[i] </span>to false</dd></dl>
  4194. <!--l. 406--><p class="noindent" >An end-of-packet condition during floor decode shall result in packet decode zeroing all channel
  4195. output vectors and skipping to the add/overlap output stage.
  4196. <!--l. 412--><p class="noindent" >
  4197. <h5 class="subsubsectionHead"><span class="titlemark">4.3.3. </span> <a
  4198. id="x1-750004.3.3"></a>nonzero vector propagate</h5>
  4199. <!--l. 414--><p class="noindent" >A possible result of floor decode is that a specific vector is marked &#8217;unused&#8217; which indicates that
  4200. that final output vector is all-zero values (and the floor is zero). The residue for that vector is not
  4201. coded in the stream, save for one complication. If some vectors are used and some are not,
  4202. channel coupling could result in mixing a zeroed and nonzeroed vector to produce two nonzeroed
  4203. vectors.
  4204. <!--l. 421--><p class="noindent" >for each <span
  4205. class="cmtt-12">[i] </span>from 0 ... <span
  4206. class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1
  4207. <!--l. 424--><p class="noindent" >
  4208. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4209. 1. </dt><dd
  4210. class="enumerate-enumitem">if either <span
  4211. class="cmtt-12">[no_residue] </span>entry for channel (<span
  4212. class="cmtt-12">[vorbis_mapping_magnitude] </span>element
  4213. <span
  4214. class="cmtt-12">[i]</span>) or channel (<span
  4215. class="cmtt-12">[vorbis_mapping_angle] </span>element <span
  4216. class="cmtt-12">[i]</span>) are set to false, then both
  4217. must be set to false. Note that an &#8217;unused&#8217; floor has no decoded floor information; it
  4218. is important that this is remembered at floor curve synthesis time.</dd></dl>
  4219. <!--l. 436--><p class="noindent" >
  4220. <h5 class="subsubsectionHead"><span class="titlemark">4.3.4. </span> <a
  4221. id="x1-760004.3.4"></a>residue decode</h5>
  4222. <!--l. 438--><p class="noindent" >Unlike floors, which are decoded in channel order, the residue vectors are decoded in submap
  4223. order.
  4224. <!--l. 441--><p class="noindent" >for each submap <span
  4225. class="cmtt-12">[i] </span>in order from 0 ... <span
  4226. class="cmtt-12">[vorbis_mapping_submaps]</span>-1
  4227. <!--l. 444--><p class="noindent" >
  4228. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4229. 1. </dt><dd
  4230. class="enumerate-enumitem"><span
  4231. class="cmtt-12">[ch] </span>= 0
  4232. </dd><dt class="enumerate-enumitem">
  4233. 2. </dt><dd
  4234. class="enumerate-enumitem">for each channel <span
  4235. class="cmtt-12">[j] </span>in order from 0 ... <span
  4236. class="cmtt-12">[audio_channels] </span>- 1
  4237. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4238. a) </dt><dd
  4239. class="enumerate-enumitem">if channel <span
  4240. class="cmtt-12">[j] </span>in submap <span
  4241. class="cmtt-12">[i] </span>(vector <span
  4242. class="cmtt-12">[vorbis_mapping_mux] </span>element <span
  4243. class="cmtt-12">[j] </span>is equal to
  4244. <span
  4245. class="cmtt-12">[i]</span>)
  4246. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4247. i. </dt><dd
  4248. class="enumerate-enumitem">if vector <span
  4249. class="cmtt-12">[no_residue] </span>element <span
  4250. class="cmtt-12">[j] </span>is true
  4251. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4252. A. </dt><dd
  4253. class="enumerate-enumitem">vector <span
  4254. class="cmtt-12">[do_not_decode_flag] </span>element <span
  4255. class="cmtt-12">[ch] </span>is set</dd></dl>
  4256. <!--l. 453--><p class="noindent" >else
  4257. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4258. A. </dt><dd
  4259. class="enumerate-enumitem">vector <span
  4260. class="cmtt-12">[do_not_decode_flag] </span>element <span
  4261. class="cmtt-12">[ch] </span>is unset</dd></dl>
  4262. </dd><dt class="enumerate-enumitem">
  4263. ii. </dt><dd
  4264. class="enumerate-enumitem">increment <span
  4265. class="cmtt-12">[ch]</span></dd></dl>
  4266. </dd></dl>
  4267. </dd><dt class="enumerate-enumitem">
  4268. 3. </dt><dd
  4269. class="enumerate-enumitem"><span
  4270. class="cmtt-12">[residue_number] </span>= vector <span
  4271. class="cmtt-12">[vorbis_mapping_submap_residue] </span>element <span
  4272. class="cmtt-12">[i]</span>
  4273. </dd><dt class="enumerate-enumitem">
  4274. 4. </dt><dd
  4275. class="enumerate-enumitem"><span
  4276. class="cmtt-12">[residue_type] </span>= vector <span
  4277. class="cmtt-12">[vorbis_residue_types] </span>element <span
  4278. class="cmtt-12">[residue_number]</span>
  4279. </dd><dt class="enumerate-enumitem">
  4280. 5. </dt><dd
  4281. class="enumerate-enumitem">decode <span
  4282. class="cmtt-12">[ch] </span>vectors using residue <span
  4283. class="cmtt-12">[residue_number]</span>, according to type <span
  4284. class="cmtt-12">[residue_type]</span>,
  4285. also passing vector <span
  4286. class="cmtt-12">[do_not_decode_flag] </span>to indicate which vectors in the bundle should
  4287. not be decoded. Correct per-vector decode length is <span
  4288. class="cmtt-12">[n]</span>/2.
  4289. </dd><dt class="enumerate-enumitem">
  4290. 6. </dt><dd
  4291. class="enumerate-enumitem"><span
  4292. class="cmtt-12">[ch] </span>= 0
  4293. </dd><dt class="enumerate-enumitem">
  4294. 7. </dt><dd
  4295. class="enumerate-enumitem">for each channel <span
  4296. class="cmtt-12">[j] </span>in order from 0 ... <span
  4297. class="cmtt-12">[audio_channels]</span>
  4298. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4299. a) </dt><dd
  4300. class="enumerate-enumitem">if channel <span
  4301. class="cmtt-12">[j] </span>is in submap <span
  4302. class="cmtt-12">[i] </span>(vector <span
  4303. class="cmtt-12">[vorbis_mapping_mux] </span>element <span
  4304. class="cmtt-12">[j] </span>is equal
  4305. to <span
  4306. class="cmtt-12">[i]</span>)
  4307. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4308. i. </dt><dd
  4309. class="enumerate-enumitem">residue vector for channel <span
  4310. class="cmtt-12">[j] </span>is set to decoded residue vector <span
  4311. class="cmtt-12">[ch]</span>
  4312. </dd><dt class="enumerate-enumitem">
  4313. ii. </dt><dd
  4314. class="enumerate-enumitem">increment <span
  4315. class="cmtt-12">[ch]</span></dd></dl>
  4316. </dd></dl>
  4317. </dd></dl>
  4318. <!--l. 480--><p class="noindent" >
  4319. <h5 class="subsubsectionHead"><span class="titlemark">4.3.5. </span> <a
  4320. id="x1-770004.3.5"></a>inverse coupling</h5>
  4321. <!--l. 482--><p class="noindent" >for each <span
  4322. class="cmtt-12">[i] </span>from <span
  4323. class="cmtt-12">[vorbis_mapping_coupling_steps]</span>-1 descending to 0
  4324. <!--l. 485--><p class="noindent" >
  4325. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4326. 1. </dt><dd
  4327. class="enumerate-enumitem"><span
  4328. class="cmtt-12">[magnitude_vector] </span>= the residue vector for channel (vector
  4329. <span
  4330. class="cmtt-12">[vorbis_mapping_magnitude] </span>element <span
  4331. class="cmtt-12">[i]</span>)
  4332. </dd><dt class="enumerate-enumitem">
  4333. 2. </dt><dd
  4334. class="enumerate-enumitem"><span
  4335. class="cmtt-12">[angle_vector] </span>= the residue vector for channel (vector <span
  4336. class="cmtt-12">[vorbis_mapping_angle]</span>
  4337. element <span
  4338. class="cmtt-12">[i]</span>)
  4339. </dd><dt class="enumerate-enumitem">
  4340. 3. </dt><dd
  4341. class="enumerate-enumitem">for each scalar value <span
  4342. class="cmtt-12">[M] </span>in vector <span
  4343. class="cmtt-12">[magnitude_vector] </span>and the corresponding scalar value
  4344. <span
  4345. class="cmtt-12">[A] </span>in vector <span
  4346. class="cmtt-12">[angle_vector]</span>:
  4347. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4348. a) </dt><dd
  4349. class="enumerate-enumitem">if (<span
  4350. class="cmtt-12">[M] </span>is greater than zero)
  4351. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4352. i. </dt><dd
  4353. class="enumerate-enumitem">if (<span
  4354. class="cmtt-12">[A] </span>is greater than zero)
  4355. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4356. A. </dt><dd
  4357. class="enumerate-enumitem"><span
  4358. class="cmtt-12">[new_M] </span>= <span
  4359. class="cmtt-12">[M]</span>
  4360. </dd><dt class="enumerate-enumitem">
  4361. B. </dt><dd
  4362. class="enumerate-enumitem"><span
  4363. class="cmtt-12">[new_A] </span>= <span
  4364. class="cmtt-12">[M]</span>-<span
  4365. class="cmtt-12">[A]</span></dd></dl>
  4366. <!--l. 498--><p class="noindent" >else
  4367. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4368. A. </dt><dd
  4369. class="enumerate-enumitem"><span
  4370. class="cmtt-12">[new_A] </span>= <span
  4371. class="cmtt-12">[M]</span>
  4372. </dd><dt class="enumerate-enumitem">
  4373. B. </dt><dd
  4374. class="enumerate-enumitem"><span
  4375. class="cmtt-12">[new_M] </span>= <span
  4376. class="cmtt-12">[M]</span>+<span
  4377. class="cmtt-12">[A]</span></dd></dl>
  4378. </dd></dl>
  4379. <!--l. 505--><p class="noindent" >else
  4380. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4381. i. </dt><dd
  4382. class="enumerate-enumitem">if (<span
  4383. class="cmtt-12">[A] </span>is greater than zero)
  4384. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4385. A. </dt><dd
  4386. class="enumerate-enumitem"><span
  4387. class="cmtt-12">[new_M] </span>= <span
  4388. class="cmtt-12">[M]</span>
  4389. </dd><dt class="enumerate-enumitem">
  4390. B. </dt><dd
  4391. class="enumerate-enumitem"><span
  4392. class="cmtt-12">[new_A] </span>= <span
  4393. class="cmtt-12">[M]</span>+<span
  4394. class="cmtt-12">[A]</span></dd></dl>
  4395. <!--l. 512--><p class="noindent" >else
  4396. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4397. A. </dt><dd
  4398. class="enumerate-enumitem"><span
  4399. class="cmtt-12">[new_A] </span>= <span
  4400. class="cmtt-12">[M]</span>
  4401. </dd><dt class="enumerate-enumitem">
  4402. B. </dt><dd
  4403. class="enumerate-enumitem"><span
  4404. class="cmtt-12">[new_M] </span>= <span
  4405. class="cmtt-12">[M]</span>-<span
  4406. class="cmtt-12">[A]</span></dd></dl>
  4407. </dd></dl>
  4408. </dd><dt class="enumerate-enumitem">
  4409. b) </dt><dd
  4410. class="enumerate-enumitem">set scalar value <span
  4411. class="cmtt-12">[M] </span>in vector <span
  4412. class="cmtt-12">[magnitude_vector] </span>to <span
  4413. class="cmtt-12">[new_M]</span>
  4414. </dd><dt class="enumerate-enumitem">
  4415. c) </dt><dd
  4416. class="enumerate-enumitem">set scalar value <span
  4417. class="cmtt-12">[A] </span>in vector <span
  4418. class="cmtt-12">[angle_vector] </span>to <span
  4419. class="cmtt-12">[new_A]</span></dd></dl>
  4420. </dd></dl>
  4421. <!--l. 529--><p class="noindent" >
  4422. <h5 class="subsubsectionHead"><span class="titlemark">4.3.6. </span> <a
  4423. id="x1-780004.3.6"></a>dot product</h5>
  4424. <!--l. 531--><p class="noindent" >For each channel, synthesize the floor curve from the decoded floor information, according to
  4425. packet type. Note that the vector synthesis length for floor computation is <span
  4426. class="cmtt-12">[n]</span>/2.
  4427. <!--l. 535--><p class="noindent" >For each channel, multiply each element of the floor curve by each element of that
  4428. channel&#8217;s residue vector. The result is the dot product of the floor and residue vectors for
  4429. each channel; the produced vectors are the length <span
  4430. class="cmtt-12">[n]</span>/2 audio spectrum for each
  4431. channel.
  4432. <!--l. 543--><p class="noindent" >One point is worth mentioning about this dot product; a common mistake in a fixed point
  4433. implementation might be to assume that a 32 bit fixed-point representation for floor and
  4434. residue and direct multiplication of the vectors is sufficient for acceptable spectral depth
  4435. in all cases because it happens to mostly work with the current Xiph.Org reference
  4436. encoder.
  4437. <!--l. 550--><p class="noindent" >However, floor vector values can span <span
  4438. class="cmsy-10x-x-120">~</span>140dB (<span
  4439. class="cmsy-10x-x-120">~</span>24 bits unsigned), and the audio spectrum
  4440. vector should represent a minimum of 120dB (<span
  4441. class="cmsy-10x-x-120">~</span>21 bits with sign), even when output is to a 16
  4442. bit PCM device. For the residue vector to represent full scale if the floor is nailed
  4443. to <span
  4444. class="cmsy-10x-x-120">-</span>140dB, it must be able to span 0 to +140dB. For the residue vector to reach
  4445. full scale if the floor is nailed at 0dB, it must be able to represent <span
  4446. class="cmsy-10x-x-120">-</span>140dB to +0dB.
  4447. Thus, in order to handle full range dynamics, a residue vector may span <span
  4448. class="cmsy-10x-x-120">-</span>140dB to
  4449. +140dB entirely within spec. A 280dB range is approximately 48 bits with sign; thus the
  4450. residue vector must be able to represent a 48 bit range and the dot product must
  4451. be able to handle an effective 48 bit times 24 bit multiplication. This range may be
  4452. achieved using large (64 bit or larger) integers, or implementing a movable binary point
  4453. representation.
  4454. <!--l. 567--><p class="noindent" >
  4455. <h5 class="subsubsectionHead"><span class="titlemark">4.3.7. </span> <a
  4456. id="x1-790004.3.7"></a>inverse MDCT</h5>
  4457. <!--l. 569--><p class="noindent" >Convert the audio spectrum vector of each channel back into time domain PCM audio via an
  4458. inverse Modified Discrete Cosine Transform (MDCT). A detailed description of the MDCT is
  4459. available in <span class="cite">[<a
  4460. href="#XSporer/Brandenburg/Edler">1</a>]</span>. The window function used for the MDCT is the function described
  4461. earlier.
  4462. <!--l. 576--><p class="noindent" >
  4463. <h5 class="subsubsectionHead"><span class="titlemark">4.3.8. </span> <a
  4464. id="x1-800004.3.8"></a>overlap_add</h5>
  4465. <!--l. 578--><p class="noindent" >Windowed MDCT output is overlapped and added with the right hand data of the previous
  4466. window such that the 3/4 point of the previous window is aligned with the 1/4 point of the
  4467. current window (as illustrated in <a
  4468. href="#x1-260001.3.2">paragraph&#x00A0;1.3.2</a>, &#8220;<a
  4469. href="#x1-260001.3.2">Window shape decode (long windows
  4470. only)<!--tex4ht:ref: vorbis:spec:window --></a>&#8221;). The overlapped portion produced from overlapping the previous and current frame data
  4471. is finished data to be returned by the decoder. This data spans from the center of
  4472. the previous window to the center of the current window. In the case of same-sized
  4473. windows, the amount of data to return is one-half block consisting of and only of the
  4474. overlapped portions. When overlapping a short and long window, much of the returned
  4475. range does not actually overlap. This does not damage transform orthogonality. Pay
  4476. attention however to returning the correct data range; the amount of data to be returned
  4477. is:
  4478. <!--l. 592--><p class="noindent" >
  4479. <div class="fancyvrb" id="fancyvrb22"><a
  4480. id="x1-80002r1"></a><span
  4481. class="cmr-6">1</span><span
  4482. class="cmtt-8">&#x00A0;</span><span
  4483. class="cmtt-8">&#x00A0;window_blocksize(previous_window)/4+window_blocksize(current_window)/4</span></div>
  4484. <!--l. 596--><p class="noindent" >from the center (element windowsize/2) of the previous window to the center (element
  4485. windowsize/2-1, inclusive) of the current window.
  4486. <!--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
  4487. encoder accounts for this priming when calculating PCM offsets; after the first frame, the proper
  4488. PCM output offset is &#8217;0&#8217; (as no data has been returned yet).
  4489. <!--l. 606--><p class="noindent" >
  4490. <h5 class="subsubsectionHead"><span class="titlemark">4.3.9. </span> <a
  4491. id="x1-810004.3.9"></a>output channel order</h5>
  4492. <!--l. 608--><p class="noindent" >Vorbis I specifies only a channel mapping type 0. In mapping type 0, channel mapping is
  4493. implicitly defined as follows for standard audio applications. As of revision 16781 (20100113), the
  4494. specification adds defined channel locations for 6.1 and 7.1 surround. Ordering/location for
  4495. greater-than-eight channels remains &#8217;left to the implementation&#8217;.
  4496. <!--l. 614--><p class="noindent" >These channel orderings refer to order within the encoded stream. It is naturally possible for a
  4497. decoder to produce output with channels in any order. Any such decoder should explicitly
  4498. document channel reordering behavior.
  4499. <!--l. 620--><p class="noindent" >
  4500. <dl class="description"><dt class="description">
  4501. <span
  4502. class="cmssbx-10x-x-120">one channel</span> </dt><dd
  4503. class="description">the stream is monophonic
  4504. </dd><dt class="description">
  4505. <span
  4506. class="cmssbx-10x-x-120">two channels</span> </dt><dd
  4507. class="description">the stream is stereo. channel order: left, right
  4508. </dd><dt class="description">
  4509. <span
  4510. class="cmssbx-10x-x-120">three channels</span> </dt><dd
  4511. class="description">the stream is a 1d-surround encoding. channel order: left, center, right
  4512. </dd><dt class="description">
  4513. <span
  4514. class="cmssbx-10x-x-120">four channels</span> </dt><dd
  4515. class="description">the stream is quadraphonic surround. channel order: front left, front right,
  4516. rear left, rear right
  4517. </dd><dt class="description">
  4518. <span
  4519. class="cmssbx-10x-x-120">five channels</span> </dt><dd
  4520. class="description">the stream is five-channel surround. channel order: front left, center, front
  4521. right, rear left, rear right
  4522. </dd><dt class="description">
  4523. <span
  4524. class="cmssbx-10x-x-120">six channels</span> </dt><dd
  4525. class="description">the stream is 5.1 surround. channel order: front left, center, front right, rear
  4526. left, rear right, LFE
  4527. </dd><dt class="description">
  4528. <span
  4529. class="cmssbx-10x-x-120">seven channels</span> </dt><dd
  4530. class="description">the stream is 6.1 surround. channel order: front left, center, front right,
  4531. side left, side right, rear center, LFE
  4532. </dd><dt class="description">
  4533. <span
  4534. class="cmssbx-10x-x-120">eight channels</span> </dt><dd
  4535. class="description">the stream is 7.1 surround. channel order: front left, center, front right,
  4536. side left, side right, rear left, rear right, LFE
  4537. </dd><dt class="description">
  4538. <span
  4539. class="cmssbx-10x-x-120">greater than eight channels</span> </dt><dd
  4540. class="description">channel use and order is defined by the application
  4541. </dd></dl>
  4542. <!--l. 656--><p class="noindent" >Applications using Vorbis for dedicated purposes may define channel mapping as seen fit. Future
  4543. channel mappings (such as three and four channel <a
  4544. href="http://www.ambisonic.net/" >Ambisonics</a>) will make use of channel
  4545. mappings other than mapping 0.
  4546. <h3 class="sectionHead"><span class="titlemark">5. </span> <a
  4547. id="x1-820005"></a>comment field and header specification</h3>
  4548. <!--l. 6--><p class="noindent" >
  4549. <h4 class="subsectionHead"><span class="titlemark">5.1. </span> <a
  4550. id="x1-830005.1"></a>Overview</h4>
  4551. <!--l. 8--><p class="noindent" >The Vorbis text comment header is the second (of three) header packets that begin a Vorbis
  4552. bitstream. It is meant for short text comments, not arbitrary metadata; arbitrary metadata
  4553. belongs in a separate logical bitstream (usually an XML stream type) that provides greater
  4554. structure and machine parseability.
  4555. <!--l. 14--><p class="noindent" >The comment field is meant to be used much like someone jotting a quick note on the bottom of
  4556. a CDR. It should be a little information to remember the disc by and explain it to others; a
  4557. short, to-the-point text note that need not only be a couple words, but isn&#8217;t going to be more
  4558. than a short paragraph. The essentials, in other words, whatever they turn out to be,
  4559. eg:
  4560. <!--l. 21--><p class="noindent" >
  4561. <div class="quote">
  4562. <!--l. 22--><p class="noindent" >Honest Bob and the Factory-to-Dealer-Incentives, <span
  4563. class="cmti-12">&#8220;I&#8217;m Still Around&#8221;</span>, opening
  4564. for Moxy Früvous, 1997.</div>
  4565. <!--l. 29--><p class="noindent" >
  4566. <h4 class="subsectionHead"><span class="titlemark">5.2. </span> <a
  4567. id="x1-840005.2"></a>Comment encoding</h4>
  4568. <!--l. 31--><p class="noindent" >
  4569. <h5 class="subsubsectionHead"><span class="titlemark">5.2.1. </span> <a
  4570. id="x1-850005.2.1"></a>Structure</h5>
  4571. <!--l. 33--><p class="noindent" >The comment header is logically a list of eight-bit-clean vectors; the number of vectors is
  4572. bounded to 2<sup><span
  4573. class="cmr-8">32</span></sup> <span
  4574. class="cmsy-10x-x-120">- </span>1 and the length of each vector is limited to 2<sup><span
  4575. class="cmr-8">32</span></sup> <span
  4576. class="cmsy-10x-x-120">- </span>1 bytes. The vector length is
  4577. encoded; the vector contents themselves are not null terminated. In addition to the vector list,
  4578. there is a single vector for vendor name (also 8 bit clean, length encoded in 32 bits). For
  4579. example, the 1.0 release of libvorbis set the vendor string to &#8220;Xiph.Org libVorbis I
  4580. 20020717&#8221;.
  4581. <!--l. 41--><p class="noindent" >The vector lengths and number of vectors are stored lsb first, according to the bit
  4582. packing conventions of the vorbis codec. However, since data in the comment header
  4583. is octet-aligned, they can simply be read as unaligned 32 bit little endian unsigned
  4584. integers.
  4585. <!--l. 46--><p class="noindent" >The comment header is decoded as follows:
  4586. <!--l. 48--><p class="noindent" >
  4587. <div class="fancyvrb" id="fancyvrb23"><a
  4588. id="x1-85002r1"></a><span
  4589. class="cmr-6">1</span><span
  4590. class="cmtt-8">&#x00A0;</span><span
  4591. class="cmtt-8">&#x00A0;</span><span
  4592. class="cmtt-8">&#x00A0;</span><span
  4593. class="cmtt-8">&#x00A0;1)</span><span
  4594. class="cmtt-8">&#x00A0;[vendor\_length]</span><span
  4595. class="cmtt-8">&#x00A0;=</span><span
  4596. class="cmtt-8">&#x00A0;read</span><span
  4597. class="cmtt-8">&#x00A0;an</span><span
  4598. class="cmtt-8">&#x00A0;unsigned</span><span
  4599. class="cmtt-8">&#x00A0;integer</span><span
  4600. class="cmtt-8">&#x00A0;of</span><span
  4601. class="cmtt-8">&#x00A0;32</span><span
  4602. class="cmtt-8">&#x00A0;bits</span><br class="fancyvrb" /><a
  4603. id="x1-85004r2"></a><span
  4604. class="cmr-6">2</span><span
  4605. class="cmtt-8">&#x00A0;</span><span
  4606. class="cmtt-8">&#x00A0;</span><span
  4607. class="cmtt-8">&#x00A0;</span><span
  4608. class="cmtt-8">&#x00A0;2)</span><span
  4609. class="cmtt-8">&#x00A0;[vendor\_string]</span><span
  4610. class="cmtt-8">&#x00A0;=</span><span
  4611. class="cmtt-8">&#x00A0;read</span><span
  4612. class="cmtt-8">&#x00A0;a</span><span
  4613. class="cmtt-8">&#x00A0;UTF-8</span><span
  4614. class="cmtt-8">&#x00A0;vector</span><span
  4615. class="cmtt-8">&#x00A0;as</span><span
  4616. class="cmtt-8">&#x00A0;[vendor\_length]</span><span
  4617. class="cmtt-8">&#x00A0;octets</span>
  4618. <br class="fancyvrb" /><a
  4619. id="x1-85006r3"></a><span
  4620. class="cmr-6">3</span><span
  4621. class="cmtt-8">&#x00A0;</span><span
  4622. class="cmtt-8">&#x00A0;</span><span
  4623. class="cmtt-8">&#x00A0;</span><span
  4624. class="cmtt-8">&#x00A0;3)</span><span
  4625. class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
  4626. class="cmtt-8">&#x00A0;=</span><span
  4627. class="cmtt-8">&#x00A0;read</span><span
  4628. class="cmtt-8">&#x00A0;an</span><span
  4629. class="cmtt-8">&#x00A0;unsigned</span><span
  4630. class="cmtt-8">&#x00A0;integer</span><span
  4631. class="cmtt-8">&#x00A0;of</span><span
  4632. class="cmtt-8">&#x00A0;32</span><span
  4633. class="cmtt-8">&#x00A0;bits</span><br class="fancyvrb" /><a
  4634. id="x1-85008r4"></a><span
  4635. class="cmr-6">4</span><span
  4636. class="cmtt-8">&#x00A0;</span><span
  4637. class="cmtt-8">&#x00A0;</span><span
  4638. class="cmtt-8">&#x00A0;</span><span
  4639. class="cmtt-8">&#x00A0;4)</span><span
  4640. class="cmtt-8">&#x00A0;iterate</span><span
  4641. class="cmtt-8">&#x00A0;[user\_comment\_list\_length]</span><span
  4642. class="cmtt-8">&#x00A0;times</span><span
  4643. class="cmtt-8">&#x00A0;{</span>
  4644. <br class="fancyvrb" /><a
  4645. id="x1-85010r5"></a><span
  4646. class="cmr-6">5</span><span
  4647. class="cmtt-8">&#x00A0;</span><span
  4648. class="cmtt-8">&#x00A0;</span><span
  4649. class="cmtt-8">&#x00A0;</span><span
  4650. class="cmtt-8">&#x00A0;</span><span
  4651. class="cmtt-8">&#x00A0;</span><span
  4652. class="cmtt-8">&#x00A0;</span><span
  4653. class="cmtt-8">&#x00A0;</span><span
  4654. class="cmtt-8">&#x00A0;</span><span
  4655. class="cmtt-8">&#x00A0;5)</span><span
  4656. class="cmtt-8">&#x00A0;[length]</span><span
  4657. class="cmtt-8">&#x00A0;=</span><span
  4658. class="cmtt-8">&#x00A0;read</span><span
  4659. class="cmtt-8">&#x00A0;an</span><span
  4660. class="cmtt-8">&#x00A0;unsigned</span><span
  4661. class="cmtt-8">&#x00A0;integer</span><span
  4662. class="cmtt-8">&#x00A0;of</span><span
  4663. class="cmtt-8">&#x00A0;32</span><span
  4664. class="cmtt-8">&#x00A0;bits</span><br class="fancyvrb" /><a
  4665. id="x1-85012r6"></a><span
  4666. class="cmr-6">6</span><span
  4667. class="cmtt-8">&#x00A0;</span><span
  4668. class="cmtt-8">&#x00A0;</span><span
  4669. class="cmtt-8">&#x00A0;</span><span
  4670. class="cmtt-8">&#x00A0;</span><span
  4671. class="cmtt-8">&#x00A0;</span><span
  4672. class="cmtt-8">&#x00A0;</span><span
  4673. class="cmtt-8">&#x00A0;</span><span
  4674. class="cmtt-8">&#x00A0;</span><span
  4675. class="cmtt-8">&#x00A0;6)</span><span
  4676. class="cmtt-8">&#x00A0;this</span><span
  4677. class="cmtt-8">&#x00A0;iteration&#8217;s</span><span
  4678. class="cmtt-8">&#x00A0;user</span><span
  4679. class="cmtt-8">&#x00A0;comment</span><span
  4680. class="cmtt-8">&#x00A0;=</span><span
  4681. class="cmtt-8">&#x00A0;read</span><span
  4682. class="cmtt-8">&#x00A0;a</span><span
  4683. class="cmtt-8">&#x00A0;UTF-8</span><span
  4684. class="cmtt-8">&#x00A0;vector</span><span
  4685. class="cmtt-8">&#x00A0;as</span><span
  4686. class="cmtt-8">&#x00A0;[length]</span><span
  4687. class="cmtt-8">&#x00A0;octets</span>
  4688. <br class="fancyvrb" /><a
  4689. id="x1-85014r7"></a><span
  4690. class="cmr-6">7</span><span
  4691. class="cmtt-8">&#x00A0;</span><span
  4692. class="cmtt-8">&#x00A0;</span><span
  4693. class="cmtt-8">&#x00A0;</span><span
  4694. class="cmtt-8">&#x00A0;</span><span
  4695. class="cmtt-8">&#x00A0;</span><span
  4696. class="cmtt-8">&#x00A0;</span><span
  4697. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  4698. id="x1-85016r8"></a><span
  4699. class="cmr-6">8</span><span
  4700. class="cmtt-8">&#x00A0;</span><span
  4701. class="cmtt-8">&#x00A0;</span><span
  4702. class="cmtt-8">&#x00A0;</span><span
  4703. class="cmtt-8">&#x00A0;7)</span><span
  4704. class="cmtt-8">&#x00A0;[framing\_bit]</span><span
  4705. class="cmtt-8">&#x00A0;=</span><span
  4706. class="cmtt-8">&#x00A0;read</span><span
  4707. class="cmtt-8">&#x00A0;a</span><span
  4708. class="cmtt-8">&#x00A0;single</span><span
  4709. class="cmtt-8">&#x00A0;bit</span><span
  4710. class="cmtt-8">&#x00A0;as</span><span
  4711. class="cmtt-8">&#x00A0;boolean</span><br class="fancyvrb" /><a
  4712. id="x1-85018r9"></a><span
  4713. class="cmr-6">9</span><span
  4714. class="cmtt-8">&#x00A0;</span><span
  4715. class="cmtt-8">&#x00A0;</span><span
  4716. class="cmtt-8">&#x00A0;</span><span
  4717. class="cmtt-8">&#x00A0;8)</span><span
  4718. class="cmtt-8">&#x00A0;if</span><span
  4719. class="cmtt-8">&#x00A0;(</span><span
  4720. class="cmtt-8">&#x00A0;[framing\_bit]</span><span
  4721. class="cmtt-8">&#x00A0;unset</span><span
  4722. class="cmtt-8">&#x00A0;or</span><span
  4723. class="cmtt-8">&#x00A0;end-of-packet</span><span
  4724. class="cmtt-8">&#x00A0;)</span><span
  4725. class="cmtt-8">&#x00A0;then</span><span
  4726. class="cmtt-8">&#x00A0;ERROR</span><br class="fancyvrb" /><a
  4727. id="x1-85020r10"></a><span
  4728. class="cmr-6">10</span><span
  4729. class="cmtt-8">&#x00A0;</span><span
  4730. class="cmtt-8">&#x00A0;</span><span
  4731. class="cmtt-8">&#x00A0;</span><span
  4732. class="cmtt-8">&#x00A0;9)</span><span
  4733. class="cmtt-8">&#x00A0;done.</span></div>
  4734. <!--l. 64--><p class="noindent" >
  4735. <h5 class="subsubsectionHead"><span class="titlemark">5.2.2. </span> <a
  4736. id="x1-860005.2.2"></a>Content vector format</h5>
  4737. <!--l. 66--><p class="noindent" >The comment vectors are structured similarly to a UNIX environment variable. That is,
  4738. comment fields consist of a field name and a corresponding value and look like:
  4739. <!--l. 70--><p class="noindent" >
  4740. <div class="quote">
  4741. <!--l. 71--><p class="noindent" >
  4742. <div class="fancyvrb" id="fancyvrb24"><a
  4743. id="x1-86002r1"></a><span
  4744. class="cmr-6">1</span><span
  4745. class="cmtt-8">&#x00A0;</span><span
  4746. class="cmtt-8">&#x00A0;comment[0]="ARTIST=me";</span><br class="fancyvrb" /><a
  4747. id="x1-86004r2"></a><span
  4748. class="cmr-6">2</span><span
  4749. class="cmtt-8">&#x00A0;</span><span
  4750. class="cmtt-8">&#x00A0;comment[1]="TITLE=the</span><span
  4751. class="cmtt-8">&#x00A0;sound</span><span
  4752. class="cmtt-8">&#x00A0;of</span><span
  4753. class="cmtt-8">&#x00A0;Vorbis";</span></div>
  4754. </div>
  4755. <!--l. 77--><p class="noindent" >The field name is case-insensitive and may consist of ASCII 0x20 through 0x7D, 0x3D (&#8217;=&#8217;)
  4756. excluded. ASCII 0x41 through 0x5A inclusive (characters A-Z) is to be considered equivalent to
  4757. ASCII 0x61 through 0x7A inclusive (characters a-z).
  4758. <!--l. 83--><p class="noindent" >The field name is immediately followed by ASCII 0x3D (&#8217;=&#8217;); this equals sign is used to
  4759. terminate the field name.
  4760. <!--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
  4761. field.
  4762. <!--l. 91--><p class="noindent" ><span class="paragraphHead"><a
  4763. id="x1-870005.2.2"></a><span
  4764. class="cmbx-12">Field names</span></span>
  4765. Below is a proposed, minimal list of standard field names with a description of intended use. No
  4766. single or group of field names is mandatory; a comment header may contain one, all or none of
  4767. the names in this list.
  4768. <!--l. 99--><p class="noindent" >
  4769. <dl class="description"><dt class="description">
  4770. <span
  4771. class="cmssbx-10x-x-120">TITLE</span> </dt><dd
  4772. class="description">Track/Work name
  4773. </dd><dt class="description">
  4774. <span
  4775. class="cmssbx-10x-x-120">VERSION</span> </dt><dd
  4776. class="description">The version field may be used to differentiate multiple versions of the same
  4777. track title in a single collection. (e.g. remix info)
  4778. </dd><dt class="description">
  4779. <span
  4780. class="cmssbx-10x-x-120">ALBUM</span> </dt><dd
  4781. class="description">The collection name to which this track belongs
  4782. </dd><dt class="description">
  4783. <span
  4784. class="cmssbx-10x-x-120">TRACKNUMBER</span> </dt><dd
  4785. class="description">The track number of this piece if part of a specific larger collection or
  4786. album
  4787. </dd><dt class="description">
  4788. <span
  4789. class="cmssbx-10x-x-120">ARTIST</span> </dt><dd
  4790. class="description">The artist generally considered responsible for the work. In popular music this is
  4791. usually the performing band or singer. For classical music it would be the composer.
  4792. For an audio book it would be the author of the original text.
  4793. </dd><dt class="description">
  4794. <span
  4795. class="cmssbx-10x-x-120">PERFORMER</span> </dt><dd
  4796. class="description">The artist(s) who performed the work. In classical music this would be the
  4797. conductor, orchestra, soloists. In an audio book it would be the actor who did the
  4798. reading. In popular music this is typically the same as the ARTIST and is omitted.
  4799. </dd><dt class="description">
  4800. <span
  4801. class="cmssbx-10x-x-120">COPYRIGHT</span> </dt><dd
  4802. class="description">Copyright attribution, e.g., &#8217;2001 Nobody&#8217;s Band&#8217; or &#8217;1999 Jack Moffitt&#8217;
  4803. </dd><dt class="description">
  4804. <span
  4805. class="cmssbx-10x-x-120">LICENSE</span> </dt><dd
  4806. class="description">License information, eg, &#8217;All Rights Reserved&#8217;, &#8217;Any Use Permitted&#8217;, a URL to
  4807. a license such as a Creative
  4808. Commons license (&#8221;www.creativecommons.org/blahblah/license.html&#8221;) or the EFF
  4809. Open Audio License (&#8217;distributed under the terms of the Open Audio License. see
  4810. http://www.eff.org/IP/Open_licenses/eff_oal.html for details&#8217;), etc.
  4811. </dd><dt class="description">
  4812. <span
  4813. class="cmssbx-10x-x-120">ORGANIZATION</span> </dt><dd
  4814. class="description">Name of the organization producing the track (i.e. the &#8217;record label&#8217;)
  4815. </dd><dt class="description">
  4816. <span
  4817. class="cmssbx-10x-x-120">DESCRIPTION</span> </dt><dd
  4818. class="description">A short text description of the contents
  4819. </dd><dt class="description">
  4820. <span
  4821. class="cmssbx-10x-x-120">GENRE</span> </dt><dd
  4822. class="description">A short text indication of music genre
  4823. </dd><dt class="description">
  4824. <span
  4825. class="cmssbx-10x-x-120">DATE</span> </dt><dd
  4826. class="description">Date the track was recorded
  4827. </dd><dt class="description">
  4828. <span
  4829. class="cmssbx-10x-x-120">LOCATION</span> </dt><dd
  4830. class="description">Location where track was recorded
  4831. </dd><dt class="description">
  4832. <span
  4833. class="cmssbx-10x-x-120">CONTACT</span> </dt><dd
  4834. class="description">Contact information for the creators or distributors of the track. This could
  4835. be a URL, an email address, the physical address of the producing label.
  4836. </dd><dt class="description">
  4837. <span
  4838. class="cmssbx-10x-x-120">ISRC</span> </dt><dd
  4839. class="description">International Standard Recording Code for the track; see <a
  4840. href="http://www.ifpi.org/isrc/" >the ISRC intro page</a> for
  4841. more information on ISRC numbers.
  4842. </dd></dl>
  4843. <!--l. 158--><p class="noindent" ><span class="paragraphHead"><a
  4844. id="x1-880005.2.2"></a><span
  4845. class="cmbx-12">Implications</span></span>
  4846. Field names should not be &#8217;internationalized&#8217;; this is a concession to simplicity not
  4847. an attempt to exclude the majority of the world that doesn&#8217;t speak English. Field
  4848. <span
  4849. class="cmti-12">contents</span>, however, use the UTF-8 character encoding to allow easy representation of any
  4850. language.
  4851. <!--l. 166--><p class="noindent" >We have the length of the entirety of the field and restrictions on the field name so that
  4852. the field name is bounded in a known way. Thus we also have the length of the field
  4853. contents.
  4854. <!--l. 170--><p class="noindent" >Individual &#8217;vendors&#8217; may use non-standard field names within reason. The proper
  4855. use of comment fields should be clear through context at this point. Abuse will be
  4856. discouraged.
  4857. <!--l. 174--><p class="noindent" >There is no vendor-specific prefix to &#8217;nonstandard&#8217; field names. Vendors should make some effort
  4858. to avoid arbitrarily polluting the common namespace. We will generally collect the more useful
  4859. tags here to help with standardization.
  4860. <!--l. 179--><p class="noindent" >Field names are not required to be unique (occur once) within a comment header. As an
  4861. example, assume a track was recorded by three well know artists; the following is permissible,
  4862. and encouraged:
  4863. <!--l. 183--><p class="noindent" >
  4864. <div class="quote">
  4865. <!--l. 184--><p class="noindent" >
  4866. <div class="fancyvrb" id="fancyvrb25"><a
  4867. id="x1-88002r1"></a><span
  4868. class="cmr-6">1</span><span
  4869. class="cmtt-8">&#x00A0;</span><span
  4870. class="cmtt-8">&#x00A0;ARTIST=Dizzy</span><span
  4871. class="cmtt-8">&#x00A0;Gillespie</span><br class="fancyvrb" /><a
  4872. id="x1-88004r2"></a><span
  4873. class="cmr-6">2</span><span
  4874. class="cmtt-8">&#x00A0;</span><span
  4875. class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
  4876. class="cmtt-8">&#x00A0;Rollins</span><br class="fancyvrb" /><a
  4877. id="x1-88006r3"></a><span
  4878. class="cmr-6">3</span><span
  4879. class="cmtt-8">&#x00A0;</span><span
  4880. class="cmtt-8">&#x00A0;ARTIST=Sonny</span><span
  4881. class="cmtt-8">&#x00A0;Stitt</span></div>
  4882. </div>
  4883. <!--l. 197--><p class="noindent" >
  4884. <h5 class="subsubsectionHead"><span class="titlemark">5.2.3. </span> <a
  4885. id="x1-890005.2.3"></a>Encoding</h5>
  4886. <!--l. 199--><p class="noindent" >The comment header comprises the entirety of the second bitstream header packet. Unlike the
  4887. first bitstream header packet, it is not generally the only packet on the second page and may not
  4888. be restricted to within the second bitstream page. The length of the comment header packet is
  4889. (practically) unbounded. The comment header packet is not optional; it must be present in the
  4890. bitstream even if it is effectively empty.
  4891. <!--l. 207--><p class="noindent" >The comment header is encoded as follows (as per Ogg&#8217;s standard bitstream mapping which
  4892. renders least-significant-bit of the word to be coded into the least significant available bit of the
  4893. current bitstream octet first):
  4894. <!--l. 213--><p class="noindent" >
  4895. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  4896. 1. </dt><dd
  4897. class="enumerate-enumitem">Vendor string length (32 bit unsigned quantity specifying number of octets)
  4898. </dd><dt class="enumerate-enumitem">
  4899. 2. </dt><dd
  4900. class="enumerate-enumitem">Vendor string ([vendor string length] octets coded from beginning of string to end of
  4901. string, not null terminated)
  4902. </dd><dt class="enumerate-enumitem">
  4903. 3. </dt><dd
  4904. class="enumerate-enumitem">Number of comment fields (32 bit unsigned quantity specifying number of fields)
  4905. </dd><dt class="enumerate-enumitem">
  4906. 4. </dt><dd
  4907. class="enumerate-enumitem">Comment field 0 length (if [Number of comment fields] <span
  4908. class="cmmi-12">&#x003E; </span>0; 32 bit unsigned quantity
  4909. specifying number of octets)
  4910. </dd><dt class="enumerate-enumitem">
  4911. 5. </dt><dd
  4912. class="enumerate-enumitem">Comment field 0 ([Comment field 0 length] octets coded from beginning of string to
  4913. end of string, not null terminated)
  4914. </dd><dt class="enumerate-enumitem">
  4915. 6. </dt><dd
  4916. class="enumerate-enumitem">Comment field 1 length (if [Number of comment fields] <span
  4917. class="cmmi-12">&#x003E; </span>1...)...
  4918. </dd></dl>
  4919. <!--l. 234--><p class="noindent" >This is actually somewhat easier to describe in code; implementation of the above can be found
  4920. in <span
  4921. class="cmtt-12">vorbis/lib/info.c</span>, <span
  4922. class="cmtt-12">_vorbis_pack_comment() </span>and <span
  4923. class="cmtt-12">_vorbis_unpack_comment()</span>.
  4924. <h3 class="sectionHead"><span class="titlemark">6. </span> <a
  4925. id="x1-900006"></a>Floor type 0 setup and decode</h3>
  4926. <!--l. 6--><p class="noindent" >
  4927. <h4 class="subsectionHead"><span class="titlemark">6.1. </span> <a
  4928. id="x1-910006.1"></a>Overview</h4>
  4929. <!--l. 8--><p class="noindent" >Vorbis floor type zero uses Line Spectral Pair (LSP, also alternately known as Line Spectral
  4930. Frequency or LSF) representation to encode a smooth spectral envelope curve as the frequency
  4931. response of the LSP filter. This representation is equivalent to a traditional all-pole infinite
  4932. impulse response filter as would be used in linear predictive coding; LSP representation may be
  4933. converted to LPC representation and vice-versa.
  4934. <!--l. 18--><p class="noindent" >
  4935. <h4 class="subsectionHead"><span class="titlemark">6.2. </span> <a
  4936. id="x1-920006.2"></a>Floor 0 format</h4>
  4937. <!--l. 20--><p class="noindent" >Floor zero configuration consists of six integer fields and a list of VQ codebooks for use in
  4938. coding/decoding the LSP filter coefficient values used by each frame.
  4939. <!--l. 24--><p class="noindent" >
  4940. <h5 class="subsubsectionHead"><span class="titlemark">6.2.1. </span> <a
  4941. id="x1-930006.2.1"></a>header decode</h5>
  4942. <!--l. 26--><p class="noindent" >Configuration information for instances of floor zero decodes from the codec setup header (third
  4943. packet). configuration decode proceeds as follows:
  4944. <!--l. 30--><p class="noindent" >
  4945. <div class="fancyvrb" id="fancyvrb26"><a
  4946. id="x1-93002r1"></a><span
  4947. class="cmr-6">1</span><span
  4948. class="cmtt-8">&#x00A0;</span><span
  4949. class="cmtt-8">&#x00A0;</span><span
  4950. class="cmtt-8">&#x00A0;</span><span
  4951. class="cmtt-8">&#x00A0;1)</span><span
  4952. class="cmtt-8">&#x00A0;[floor0_order]</span><span
  4953. class="cmtt-8">&#x00A0;=</span><span
  4954. class="cmtt-8">&#x00A0;read</span><span
  4955. class="cmtt-8">&#x00A0;an</span><span
  4956. class="cmtt-8">&#x00A0;unsigned</span><span
  4957. class="cmtt-8">&#x00A0;integer</span><span
  4958. class="cmtt-8">&#x00A0;of</span><span
  4959. class="cmtt-8">&#x00A0;8</span><span
  4960. class="cmtt-8">&#x00A0;bits</span><br class="fancyvrb" /><a
  4961. id="x1-93004r2"></a><span
  4962. class="cmr-6">2</span><span
  4963. class="cmtt-8">&#x00A0;</span><span
  4964. class="cmtt-8">&#x00A0;</span><span
  4965. class="cmtt-8">&#x00A0;</span><span
  4966. class="cmtt-8">&#x00A0;2)</span><span
  4967. class="cmtt-8">&#x00A0;[floor0_rate]</span><span
  4968. class="cmtt-8">&#x00A0;=</span><span
  4969. class="cmtt-8">&#x00A0;read</span><span
  4970. class="cmtt-8">&#x00A0;an</span><span
  4971. class="cmtt-8">&#x00A0;unsigned</span><span
  4972. class="cmtt-8">&#x00A0;integer</span><span
  4973. class="cmtt-8">&#x00A0;of</span><span
  4974. class="cmtt-8">&#x00A0;16</span><span
  4975. class="cmtt-8">&#x00A0;bits</span>
  4976. <br class="fancyvrb" /><a
  4977. id="x1-93006r3"></a><span
  4978. class="cmr-6">3</span><span
  4979. class="cmtt-8">&#x00A0;</span><span
  4980. class="cmtt-8">&#x00A0;</span><span
  4981. class="cmtt-8">&#x00A0;</span><span
  4982. class="cmtt-8">&#x00A0;3)</span><span
  4983. class="cmtt-8">&#x00A0;[floor0_bark_map_size]</span><span
  4984. class="cmtt-8">&#x00A0;=</span><span
  4985. class="cmtt-8">&#x00A0;read</span><span
  4986. class="cmtt-8">&#x00A0;an</span><span
  4987. class="cmtt-8">&#x00A0;unsigned</span><span
  4988. class="cmtt-8">&#x00A0;integer</span><span
  4989. class="cmtt-8">&#x00A0;of</span><span
  4990. class="cmtt-8">&#x00A0;16</span><span
  4991. class="cmtt-8">&#x00A0;bits</span><br class="fancyvrb" /><a
  4992. id="x1-93008r4"></a><span
  4993. class="cmr-6">4</span><span
  4994. class="cmtt-8">&#x00A0;</span><span
  4995. class="cmtt-8">&#x00A0;</span><span
  4996. class="cmtt-8">&#x00A0;</span><span
  4997. class="cmtt-8">&#x00A0;4)</span><span
  4998. class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
  4999. class="cmtt-8">&#x00A0;=</span><span
  5000. class="cmtt-8">&#x00A0;read</span><span
  5001. class="cmtt-8">&#x00A0;an</span><span
  5002. class="cmtt-8">&#x00A0;unsigned</span><span
  5003. class="cmtt-8">&#x00A0;integer</span><span
  5004. class="cmtt-8">&#x00A0;of</span><span
  5005. class="cmtt-8">&#x00A0;six</span><span
  5006. class="cmtt-8">&#x00A0;bits</span>
  5007. <br class="fancyvrb" /><a
  5008. id="x1-93010r5"></a><span
  5009. class="cmr-6">5</span><span
  5010. class="cmtt-8">&#x00A0;</span><span
  5011. class="cmtt-8">&#x00A0;</span><span
  5012. class="cmtt-8">&#x00A0;</span><span
  5013. class="cmtt-8">&#x00A0;5)</span><span
  5014. class="cmtt-8">&#x00A0;[floor0_amplitude_offset]</span><span
  5015. class="cmtt-8">&#x00A0;=</span><span
  5016. class="cmtt-8">&#x00A0;read</span><span
  5017. class="cmtt-8">&#x00A0;an</span><span
  5018. class="cmtt-8">&#x00A0;unsigned</span><span
  5019. class="cmtt-8">&#x00A0;integer</span><span
  5020. class="cmtt-8">&#x00A0;of</span><span
  5021. class="cmtt-8">&#x00A0;eight</span><span
  5022. class="cmtt-8">&#x00A0;bits</span>
  5023. <br class="fancyvrb" /><a
  5024. id="x1-93012r6"></a><span
  5025. class="cmr-6">6</span><span
  5026. class="cmtt-8">&#x00A0;</span><span
  5027. class="cmtt-8">&#x00A0;</span><span
  5028. class="cmtt-8">&#x00A0;</span><span
  5029. class="cmtt-8">&#x00A0;6)</span><span
  5030. class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
  5031. class="cmtt-8">&#x00A0;=</span><span
  5032. class="cmtt-8">&#x00A0;read</span><span
  5033. class="cmtt-8">&#x00A0;an</span><span
  5034. class="cmtt-8">&#x00A0;unsigned</span><span
  5035. class="cmtt-8">&#x00A0;integer</span><span
  5036. class="cmtt-8">&#x00A0;of</span><span
  5037. class="cmtt-8">&#x00A0;four</span><span
  5038. class="cmtt-8">&#x00A0;bits</span><span
  5039. class="cmtt-8">&#x00A0;and</span><span
  5040. class="cmtt-8">&#x00A0;add</span><span
  5041. class="cmtt-8">&#x00A0;1</span>
  5042. <br class="fancyvrb" /><a
  5043. id="x1-93014r7"></a><span
  5044. class="cmr-6">7</span><span
  5045. class="cmtt-8">&#x00A0;</span><span
  5046. class="cmtt-8">&#x00A0;</span><span
  5047. class="cmtt-8">&#x00A0;</span><span
  5048. class="cmtt-8">&#x00A0;7)</span><span
  5049. class="cmtt-8">&#x00A0;array</span><span
  5050. class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
  5051. class="cmtt-8">&#x00A0;=</span><span
  5052. class="cmtt-8">&#x00A0;read</span><span
  5053. class="cmtt-8">&#x00A0;a</span><span
  5054. class="cmtt-8">&#x00A0;list</span><span
  5055. class="cmtt-8">&#x00A0;of</span><span
  5056. class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
  5057. class="cmtt-8">&#x00A0;unsigned</span><span
  5058. class="cmtt-8">&#x00A0;integers</span><span
  5059. class="cmtt-8">&#x00A0;of</span><span
  5060. class="cmtt-8">&#x00A0;eight</span><span
  5061. class="cmtt-8">&#x00A0;bits</span><span
  5062. class="cmtt-8">&#x00A0;each;</span></div>
  5063. <!--l. 40--><p class="noindent" >An end-of-packet condition during any of these bitstream reads renders this stream undecodable.
  5064. In addition, any element of the array <span
  5065. class="cmtt-12">[floor0_book_list] </span>that is greater than the maximum
  5066. codebook number for this bitstream is an error condition that also renders the stream
  5067. undecodable.
  5068. <!--l. 48--><p class="noindent" >
  5069. <h5 class="subsubsectionHead"><span class="titlemark">6.2.2. </span> <a
  5070. id="x1-940006.2.2"></a>packet decode</h5>
  5071. <!--l. 50--><p class="noindent" >Extracting a floor0 curve from an audio packet consists of first decoding the curve
  5072. amplitude and <span
  5073. class="cmtt-12">[floor0_order] </span>LSP coefficient values from the bitstream, and then
  5074. computing the floor curve, which is defined as the frequency response of the decoded LSP
  5075. filter.
  5076. <!--l. 56--><p class="noindent" >Packet decode proceeds as follows:
  5077. <div class="fancyvrb" id="fancyvrb27"><a
  5078. id="x1-94002r1"></a><span
  5079. class="cmr-6">1</span><span
  5080. class="cmtt-8">&#x00A0;</span><span
  5081. class="cmtt-8">&#x00A0;</span><span
  5082. class="cmtt-8">&#x00A0;</span><span
  5083. class="cmtt-8">&#x00A0;1)</span><span
  5084. class="cmtt-8">&#x00A0;[amplitude]</span><span
  5085. class="cmtt-8">&#x00A0;=</span><span
  5086. class="cmtt-8">&#x00A0;read</span><span
  5087. class="cmtt-8">&#x00A0;an</span><span
  5088. class="cmtt-8">&#x00A0;unsigned</span><span
  5089. class="cmtt-8">&#x00A0;integer</span><span
  5090. class="cmtt-8">&#x00A0;of</span><span
  5091. class="cmtt-8">&#x00A0;[floor0_amplitude_bits]</span><span
  5092. class="cmtt-8">&#x00A0;bits</span><br class="fancyvrb" /><a
  5093. id="x1-94004r2"></a><span
  5094. class="cmr-6">2</span><span
  5095. class="cmtt-8">&#x00A0;</span><span
  5096. class="cmtt-8">&#x00A0;</span><span
  5097. class="cmtt-8">&#x00A0;</span><span
  5098. class="cmtt-8">&#x00A0;2)</span><span
  5099. class="cmtt-8">&#x00A0;if</span><span
  5100. class="cmtt-8">&#x00A0;(</span><span
  5101. class="cmtt-8">&#x00A0;[amplitude]</span><span
  5102. class="cmtt-8">&#x00A0;is</span><span
  5103. class="cmtt-8">&#x00A0;greater</span><span
  5104. class="cmtt-8">&#x00A0;than</span><span
  5105. class="cmtt-8">&#x00A0;zero</span><span
  5106. class="cmtt-8">&#x00A0;)</span><span
  5107. class="cmtt-8">&#x00A0;</span><span
  5108. class="cmsy-8">{</span>
  5109. <br class="fancyvrb" /><a
  5110. id="x1-94006r3"></a><span
  5111. class="cmr-6">3</span><span
  5112. class="cmtt-8">&#x00A0;</span><span
  5113. class="cmtt-8">&#x00A0;</span><span
  5114. class="cmtt-8">&#x00A0;</span><span
  5115. class="cmtt-8">&#x00A0;</span><span
  5116. class="cmtt-8">&#x00A0;</span><span
  5117. class="cmtt-8">&#x00A0;</span><span
  5118. class="cmtt-8">&#x00A0;</span><span
  5119. class="cmtt-8">&#x00A0;</span><span
  5120. class="cmtt-8">&#x00A0;3)</span><span
  5121. class="cmtt-8">&#x00A0;[coefficients]</span><span
  5122. class="cmtt-8">&#x00A0;is</span><span
  5123. class="cmtt-8">&#x00A0;an</span><span
  5124. class="cmtt-8">&#x00A0;empty,</span><span
  5125. class="cmtt-8">&#x00A0;zero</span><span
  5126. class="cmtt-8">&#x00A0;length</span><span
  5127. class="cmtt-8">&#x00A0;vector</span><br class="fancyvrb" /><a
  5128. id="x1-94008r4"></a><span
  5129. class="cmr-6">4</span><span
  5130. class="cmtt-8">&#x00A0;</span><span
  5131. class="cmtt-8">&#x00A0;</span><span
  5132. class="cmtt-8">&#x00A0;</span><span
  5133. class="cmtt-8">&#x00A0;</span><span
  5134. class="cmtt-8">&#x00A0;</span><span
  5135. class="cmtt-8">&#x00A0;</span><span
  5136. class="cmtt-8">&#x00A0;</span><span
  5137. class="cmtt-8">&#x00A0;</span><span
  5138. class="cmtt-8">&#x00A0;4)</span><span
  5139. class="cmtt-8">&#x00A0;[booknumber]</span><span
  5140. class="cmtt-8">&#x00A0;=</span><span
  5141. class="cmtt-8">&#x00A0;read</span><span
  5142. class="cmtt-8">&#x00A0;an</span><span
  5143. class="cmtt-8">&#x00A0;unsigned</span><span
  5144. class="cmtt-8">&#x00A0;integer</span><span
  5145. class="cmtt-8">&#x00A0;of</span><span
  5146. class="cmtt-8">&#x00A0;</span><a
  5147. href="#x1-1190009.2.1"><span
  5148. class="cmtt-8">ilog</span></a><span
  5149. class="cmtt-8">(</span><span
  5150. class="cmtt-8">&#x00A0;[floor0_number_of_books]</span><span
  5151. class="cmtt-8">&#x00A0;)</span><span
  5152. class="cmtt-8">&#x00A0;bits</span>
  5153. <br class="fancyvrb" /><a
  5154. id="x1-94010r5"></a><span
  5155. class="cmr-6">5</span><span
  5156. class="cmtt-8">&#x00A0;</span><span
  5157. class="cmtt-8">&#x00A0;</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;</span><span
  5162. class="cmtt-8">&#x00A0;</span><span
  5163. class="cmtt-8">&#x00A0;</span><span
  5164. class="cmtt-8">&#x00A0;5)</span><span
  5165. class="cmtt-8">&#x00A0;if</span><span
  5166. class="cmtt-8">&#x00A0;(</span><span
  5167. class="cmtt-8">&#x00A0;[booknumber]</span><span
  5168. class="cmtt-8">&#x00A0;is</span><span
  5169. class="cmtt-8">&#x00A0;greater</span><span
  5170. class="cmtt-8">&#x00A0;than</span><span
  5171. class="cmtt-8">&#x00A0;the</span><span
  5172. class="cmtt-8">&#x00A0;highest</span><span
  5173. class="cmtt-8">&#x00A0;number</span><span
  5174. class="cmtt-8">&#x00A0;decode</span><span
  5175. class="cmtt-8">&#x00A0;codebook</span><span
  5176. class="cmtt-8">&#x00A0;)</span><span
  5177. class="cmtt-8">&#x00A0;then</span><span
  5178. class="cmtt-8">&#x00A0;packet</span><span
  5179. class="cmtt-8">&#x00A0;is</span><span
  5180. class="cmtt-8">&#x00A0;undecodable</span><br class="fancyvrb" /><a
  5181. id="x1-94012r6"></a><span
  5182. class="cmr-6">6</span><span
  5183. class="cmtt-8">&#x00A0;</span><span
  5184. class="cmtt-8">&#x00A0;</span><span
  5185. class="cmtt-8">&#x00A0;</span><span
  5186. class="cmtt-8">&#x00A0;</span><span
  5187. class="cmtt-8">&#x00A0;</span><span
  5188. class="cmtt-8">&#x00A0;</span><span
  5189. class="cmtt-8">&#x00A0;</span><span
  5190. class="cmtt-8">&#x00A0;</span><span
  5191. class="cmtt-8">&#x00A0;6)</span><span
  5192. class="cmtt-8">&#x00A0;[last]</span><span
  5193. class="cmtt-8">&#x00A0;=</span><span
  5194. class="cmtt-8">&#x00A0;zero;</span>
  5195. <br class="fancyvrb" /><a
  5196. id="x1-94014r7"></a><span
  5197. class="cmr-6">7</span><span
  5198. class="cmtt-8">&#x00A0;</span><span
  5199. class="cmtt-8">&#x00A0;</span><span
  5200. class="cmtt-8">&#x00A0;</span><span
  5201. class="cmtt-8">&#x00A0;</span><span
  5202. class="cmtt-8">&#x00A0;</span><span
  5203. class="cmtt-8">&#x00A0;</span><span
  5204. class="cmtt-8">&#x00A0;</span><span
  5205. class="cmtt-8">&#x00A0;</span><span
  5206. class="cmtt-8">&#x00A0;7)</span><span
  5207. class="cmtt-8">&#x00A0;vector</span><span
  5208. class="cmtt-8">&#x00A0;[temp_vector]</span><span
  5209. class="cmtt-8">&#x00A0;=</span><span
  5210. class="cmtt-8">&#x00A0;read</span><span
  5211. class="cmtt-8">&#x00A0;vector</span><span
  5212. class="cmtt-8">&#x00A0;from</span><span
  5213. class="cmtt-8">&#x00A0;bitstream</span><span
  5214. class="cmtt-8">&#x00A0;using</span><span
  5215. class="cmtt-8">&#x00A0;codebook</span><span
  5216. class="cmtt-8">&#x00A0;number</span><span
  5217. class="cmtt-8">&#x00A0;[floor0_book_list]</span><span
  5218. class="cmtt-8">&#x00A0;element</span><span
  5219. class="cmtt-8">&#x00A0;[booknumber]</span><span
  5220. class="cmtt-8">&#x00A0;in</span><span
  5221. class="cmtt-8">&#x00A0;VQ</span><span
  5222. class="cmtt-8">&#x00A0;context.</span>
  5223. <br class="fancyvrb" /><a
  5224. id="x1-94016r8"></a><span
  5225. class="cmr-6">8</span><span
  5226. class="cmtt-8">&#x00A0;</span><span
  5227. class="cmtt-8">&#x00A0;</span><span
  5228. class="cmtt-8">&#x00A0;</span><span
  5229. class="cmtt-8">&#x00A0;</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;</span><span
  5234. class="cmtt-8">&#x00A0;8)</span><span
  5235. class="cmtt-8">&#x00A0;add</span><span
  5236. class="cmtt-8">&#x00A0;the</span><span
  5237. class="cmtt-8">&#x00A0;scalar</span><span
  5238. class="cmtt-8">&#x00A0;value</span><span
  5239. class="cmtt-8">&#x00A0;[last]</span><span
  5240. class="cmtt-8">&#x00A0;to</span><span
  5241. class="cmtt-8">&#x00A0;each</span><span
  5242. class="cmtt-8">&#x00A0;scalar</span><span
  5243. class="cmtt-8">&#x00A0;in</span><span
  5244. class="cmtt-8">&#x00A0;vector</span><span
  5245. class="cmtt-8">&#x00A0;[temp_vector]</span><br class="fancyvrb" /><a
  5246. id="x1-94018r9"></a><span
  5247. class="cmr-6">9</span><span
  5248. class="cmtt-8">&#x00A0;</span><span
  5249. class="cmtt-8">&#x00A0;</span><span
  5250. class="cmtt-8">&#x00A0;</span><span
  5251. class="cmtt-8">&#x00A0;</span><span
  5252. class="cmtt-8">&#x00A0;</span><span
  5253. class="cmtt-8">&#x00A0;</span><span
  5254. class="cmtt-8">&#x00A0;</span><span
  5255. class="cmtt-8">&#x00A0;</span><span
  5256. class="cmtt-8">&#x00A0;9)</span><span
  5257. class="cmtt-8">&#x00A0;[last]</span><span
  5258. class="cmtt-8">&#x00A0;=</span><span
  5259. class="cmtt-8">&#x00A0;the</span><span
  5260. class="cmtt-8">&#x00A0;value</span><span
  5261. class="cmtt-8">&#x00A0;of</span><span
  5262. class="cmtt-8">&#x00A0;the</span><span
  5263. class="cmtt-8">&#x00A0;last</span><span
  5264. class="cmtt-8">&#x00A0;scalar</span><span
  5265. class="cmtt-8">&#x00A0;in</span><span
  5266. class="cmtt-8">&#x00A0;vector</span><span
  5267. class="cmtt-8">&#x00A0;[temp_vector]</span>
  5268. <br class="fancyvrb" /><a
  5269. id="x1-94020r10"></a><span
  5270. class="cmr-6">10</span><span
  5271. class="cmtt-8">&#x00A0;</span><span
  5272. class="cmtt-8">&#x00A0;</span><span
  5273. class="cmtt-8">&#x00A0;</span><span
  5274. class="cmtt-8">&#x00A0;</span><span
  5275. class="cmtt-8">&#x00A0;</span><span
  5276. class="cmtt-8">&#x00A0;</span><span
  5277. class="cmtt-8">&#x00A0;</span><span
  5278. class="cmtt-8">&#x00A0;10)</span><span
  5279. class="cmtt-8">&#x00A0;concatenate</span><span
  5280. class="cmtt-8">&#x00A0;[temp_vector]</span><span
  5281. class="cmtt-8">&#x00A0;onto</span><span
  5282. class="cmtt-8">&#x00A0;the</span><span
  5283. class="cmtt-8">&#x00A0;end</span><span
  5284. class="cmtt-8">&#x00A0;of</span><span
  5285. class="cmtt-8">&#x00A0;the</span><span
  5286. class="cmtt-8">&#x00A0;[coefficients]</span><span
  5287. class="cmtt-8">&#x00A0;vector</span>
  5288. <br class="fancyvrb" /><a
  5289. id="x1-94022r11"></a><span
  5290. class="cmr-6">11</span><span
  5291. class="cmtt-8">&#x00A0;</span><span
  5292. class="cmtt-8">&#x00A0;</span><span
  5293. class="cmtt-8">&#x00A0;</span><span
  5294. class="cmtt-8">&#x00A0;</span><span
  5295. class="cmtt-8">&#x00A0;</span><span
  5296. class="cmtt-8">&#x00A0;</span><span
  5297. class="cmtt-8">&#x00A0;</span><span
  5298. class="cmtt-8">&#x00A0;11)</span><span
  5299. class="cmtt-8">&#x00A0;if</span><span
  5300. class="cmtt-8">&#x00A0;(length</span><span
  5301. class="cmtt-8">&#x00A0;of</span><span
  5302. class="cmtt-8">&#x00A0;vector</span><span
  5303. class="cmtt-8">&#x00A0;[coefficients]</span><span
  5304. class="cmtt-8">&#x00A0;is</span><span
  5305. class="cmtt-8">&#x00A0;less</span><span
  5306. class="cmtt-8">&#x00A0;than</span><span
  5307. class="cmtt-8">&#x00A0;[floor0_order],</span><span
  5308. class="cmtt-8">&#x00A0;continue</span><span
  5309. class="cmtt-8">&#x00A0;at</span><span
  5310. class="cmtt-8">&#x00A0;step</span><span
  5311. class="cmtt-8">&#x00A0;6</span><br class="fancyvrb" /><a
  5312. id="x1-94024r12"></a><span
  5313. class="cmr-6">12</span><span
  5314. class="cmtt-8">&#x00A0;</span><span
  5315. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5316. id="x1-94026r13"></a><span
  5317. class="cmr-6">13</span><span
  5318. class="cmtt-8">&#x00A0;</span><span
  5319. class="cmtt-8">&#x00A0;</span><span
  5320. class="cmtt-8">&#x00A0;</span><span
  5321. class="cmtt-8">&#x00A0;</span><span
  5322. class="cmtt-8">&#x00A0;</span><span
  5323. class="cmtt-8">&#x00A0;</span><span
  5324. class="cmtt-8">&#x00A0;</span><span
  5325. class="cmsy-8">}</span><br class="fancyvrb" /><a
  5326. id="x1-94028r14"></a><span
  5327. class="cmr-6">14</span><span
  5328. class="cmtt-8">&#x00A0;</span><span
  5329. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5330. id="x1-94030r15"></a><span
  5331. class="cmr-6">15</span><span
  5332. class="cmtt-8">&#x00A0;</span><span
  5333. class="cmtt-8">&#x00A0;</span><span
  5334. class="cmtt-8">&#x00A0;12)</span><span
  5335. class="cmtt-8">&#x00A0;done.</span><br class="fancyvrb" /><a
  5336. id="x1-94032r16"></a><span
  5337. class="cmr-6">16</span><span
  5338. class="cmtt-8">&#x00A0;</span><span
  5339. class="cmtt-8">&#x00A0;</span></div>
  5340. <!--l. 76--><p class="noindent" >Take note of the following properties of decode:
  5341. <ul class="itemize1">
  5342. <li class="itemize">An <span
  5343. class="cmtt-12">[amplitude] </span>value of zero must result in a return code that indicates this channel
  5344. is unused in this frame (the output of the channel will be all-zeroes in synthesis).
  5345. Several later stages of decode don&#8217;t occur for an unused channel.
  5346. </li>
  5347. <li class="itemize">An end-of-packet condition during decode should be considered a nominal occruence;
  5348. if end-of-packet is reached during any read operation above, floor decode is to return
  5349. &#8217;unused&#8217; status as if the <span
  5350. class="cmtt-12">[amplitude] </span>value had read zero at the beginning of decode.
  5351. </li>
  5352. <li class="itemize">The book number used for decode can, in fact, be stored in the bitstream in <a
  5353. href="#x1-1190009.2.1">ilog</a>(
  5354. <span
  5355. class="cmtt-12">[floor0_number_of_books] </span>- 1 ) bits. Nevertheless, the above specification is correct
  5356. and values greater than the maximum possible book value are reserved.
  5357. </li>
  5358. <li class="itemize">The number of scalars read into the vector <span
  5359. class="cmtt-12">[coefficients] </span>may be greater
  5360. than <span
  5361. class="cmtt-12">[floor0_order]</span>, the number actually required for curve computation. For
  5362. example, if the VQ codebook used for the floor currently being decoded has a
  5363. <span
  5364. class="cmtt-12">[codebook_dimensions] </span>value of three and <span
  5365. class="cmtt-12">[floor0_order] </span>is ten, the only way to
  5366. fill all the needed scalars in <span
  5367. class="cmtt-12">[coefficients] </span>is to to read a total of twelve scalars
  5368. as four vectors of three scalars each. This is not an error condition, and care must
  5369. be taken not to allow a buffer overflow in decode. The extra values are not used and
  5370. may be ignored or discarded.</li></ul>
  5371. <!--l. 104--><p class="noindent" >
  5372. <h5 class="subsubsectionHead"><span class="titlemark">6.2.3. </span> <a
  5373. id="x1-950006.2.3"></a>curve computation</h5>
  5374. <!--l. 106--><p class="noindent" >Given an <span
  5375. class="cmtt-12">[amplitude] </span>integer and <span
  5376. class="cmtt-12">[coefficients] </span>vector from packet decode as well as
  5377. the [floor0_order], [floor0_rate], [floor0_bark_map_size], [floor0_amplitude_bits] and
  5378. [floor0_amplitude_offset] values from floor setup, and an output vector size <span
  5379. class="cmtt-12">[n] </span>specified by the
  5380. decode process, we compute a floor output vector.
  5381. <!--l. 113--><p class="noindent" >If the value <span
  5382. class="cmtt-12">[amplitude] </span>is zero, the return value is a length <span
  5383. class="cmtt-12">[n] </span>vector with all-zero
  5384. scalars. Otherwise, begin by assuming the following definitions for the given vector to be
  5385. synthesized:
  5386. <center class="par-math-display" >
  5387. <img
  5388. src="Vorbis_I_spec7x.png" alt=" {
  5389. map = min (floor0_bark_map_size - 1,f oobar) for i &#x2208; [0, n - 1]
  5390. i - 1 for i = n
  5391. " class="par-math-display" ></center>
  5392. <!--l. 128--><p class="nopar" >
  5393. <!--l. 130--><p class="noindent" >where
  5394. <center class="par-math-display" >
  5395. <img
  5396. src="Vorbis_I_spec8x.png" alt=" &#x230A; &#x230B;
  5397. ( floor0_rate--&#x22C5; i) floor0_bark_map_size----
  5398. f oobar = bark 2n &#x22C5; bark(.5 &#x22C5; floor0_rate )
  5399. " class="par-math-display" ></center>
  5400. <!--l. 137--><p class="nopar" >
  5401. <!--l. 139--><p class="noindent" >and
  5402. <center class="par-math-display" >
  5403. <img
  5404. src="Vorbis_I_spec9x.png" alt=" 2
  5405. bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x ) + .0001x
  5406. " class="par-math-display" ></center>
  5407. <!--l. 143--><p class="nopar" >
  5408. <!--l. 145--><p class="noindent" >The above is used to synthesize the LSP curve on a Bark-scale frequency axis, then map the
  5409. result to a linear-scale frequency axis. Similarly, the below calculation synthesizes the output
  5410. LSP curve <span
  5411. class="cmtt-12">[output] </span>on a log (dB) amplitude scale, mapping it to linear amplitude in the last
  5412. step:
  5413. <!--l. 151--><p class="noindent" >
  5414. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  5415. 1. </dt><dd
  5416. class="enumerate-enumitem"><span
  5417. class="cmtt-12">[i] </span>= 0
  5418. </dd><dt class="enumerate-enumitem">
  5419. 2. </dt><dd
  5420. class="enumerate-enumitem"><span
  5421. class="cmtt-12">[</span><span
  5422. class="cmmi-12">&#x03C9;</span><span
  5423. class="cmtt-12">] </span>= <span
  5424. class="cmmi-12">&#x03C0; </span>* map element <span
  5425. class="cmtt-12">[i] </span>/ <span
  5426. class="cmtt-12">[floor0_bark_map_size]</span>
  5427. </dd><dt class="enumerate-enumitem">
  5428. 3. </dt><dd
  5429. class="enumerate-enumitem">if ( <span
  5430. class="cmtt-12">[floor0_order] </span>is odd )
  5431. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  5432. a) </dt><dd
  5433. class="enumerate-enumitem">calculate <span
  5434. class="cmtt-12">[p] </span>and <span
  5435. class="cmtt-12">[q] </span>according to: <div class="eqnarray">
  5436. <center class="math-display" >
  5437. <img
  5438. src="Vorbis_I_spec10x.png" alt=" floor0&#x220F;_2order-3
  5439. p = (1 - cos2&#x03C9;) 4(cos([coefficients ]2j+1) - cos&#x03C9; )2
  5440. j=0
  5441. floor0_order-1
  5442. 1 &#x220F;2 2
  5443. q = 4- 4(cos([coefficients ]2j) - cos&#x03C9; )
  5444. j=0
  5445. " class="math-display" ></center>
  5446. </div>
  5447. </dd></dl>
  5448. <!--l. 162--><p class="noindent" >else <span
  5449. class="cmtt-12">[floor0_order] </span>is even
  5450. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  5451. a) </dt><dd
  5452. class="enumerate-enumitem">calculate <span
  5453. class="cmtt-12">[p] </span>and <span
  5454. class="cmtt-12">[q] </span>according to: <div class="eqnarray">
  5455. <center class="math-display" >
  5456. <img
  5457. src="Vorbis_I_spec11x.png" alt=" floor0_order-2
  5458. (1 - cos&#x03C9; ) ---&#x220F;2-----
  5459. p = ----------- 4(cos([coefficients ]2j+1) - cos&#x03C9;)2
  5460. 2 j=0
  5461. floor0_order--2
  5462. (1-+-cos&#x03C9;-) &#x220F;2 2
  5463. q = 2 4(cos([coefficients ]2j) - cos &#x03C9;)
  5464. j=0
  5465. " class="math-display" ></center>
  5466. </div>
  5467. </dd></dl>
  5468. </dd><dt class="enumerate-enumitem">
  5469. 4. </dt><dd
  5470. class="enumerate-enumitem">calculate <span
  5471. class="cmtt-12">[linear_floor_value] </span>according to:
  5472. <center class="math-display" >
  5473. <img
  5474. src="Vorbis_I_spec12x.png" alt=" ( ( ))
  5475. amplitude---&#x22C5; floor0_amplitute_offset---
  5476. exp .11512925 (2floor0_amplitude_bits - 1)&#x221A;p--+-q - floor0_amplitude_offset
  5477. " class="math-display" ></center>
  5478. <!--l. 177--><p class="nopar" >
  5479. </dd><dt class="enumerate-enumitem">
  5480. 5. </dt><dd
  5481. class="enumerate-enumitem"><span
  5482. class="cmtt-12">[iteration_condition] </span>= map element <span
  5483. class="cmtt-12">[i]</span>
  5484. </dd><dt class="enumerate-enumitem">
  5485. 6. </dt><dd
  5486. class="enumerate-enumitem"><span
  5487. class="cmtt-12">[output] </span>element <span
  5488. class="cmtt-12">[i] </span>= <span
  5489. class="cmtt-12">[linear_floor_value]</span>
  5490. </dd><dt class="enumerate-enumitem">
  5491. 7. </dt><dd
  5492. class="enumerate-enumitem">increment <span
  5493. class="cmtt-12">[i]</span>
  5494. </dd><dt class="enumerate-enumitem">
  5495. 8. </dt><dd
  5496. class="enumerate-enumitem">if ( map element <span
  5497. class="cmtt-12">[i] </span>is equal to <span
  5498. class="cmtt-12">[iteration_condition] </span>) continue at step
  5499. 5
  5500. </dd><dt class="enumerate-enumitem">
  5501. 9. </dt><dd
  5502. class="enumerate-enumitem">if ( <span
  5503. class="cmtt-12">[i] </span>is less than <span
  5504. class="cmtt-12">[n] </span>) continue at step 2
  5505. </dd><dt class="enumerate-enumitem">
  5506. 10. </dt><dd
  5507. class="enumerate-enumitem">done</dd></dl>
  5508. <!--l. 187--><p class="noindent" ><span class="paragraphHead"><a
  5509. id="x1-960006.2.3"></a><span
  5510. class="cmbx-12">Errata 20150227: Bark scale computation</span></span>
  5511. Due to a typo when typesetting this version of the specification from the original HTML
  5512. document, the Bark scale computation previously erroneously read:
  5513. <center class="par-math-display" >
  5514. <img
  5515. src="Vorbis_I_spec13x.png" alt=" 2
  5516. bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x + .0001x )
  5517. " class="par-math-display" ></center>
  5518. <!--l. 195--><p class="nopar" >
  5519. <!--l. 197--><p class="noindent" >Note that the last parenthesis is misplaced. This document now uses the correct equation as it
  5520. appeared in the original HTML spec document:
  5521. <center class="par-math-display" >
  5522. <img
  5523. src="Vorbis_I_spec14x.png" alt="bark(x) = 13.1arctan (.00074x ) + 2.24 arctan(.0000000185x2 ) + .0001x
  5524. " class="par-math-display" ></center>
  5525. <!--l. 201--><p class="nopar" >
  5526. <h3 class="sectionHead"><span class="titlemark">7. </span> <a
  5527. id="x1-970007"></a>Floor type 1 setup and decode</h3>
  5528. <!--l. 6--><p class="noindent" >
  5529. <h4 class="subsectionHead"><span class="titlemark">7.1. </span> <a
  5530. id="x1-980007.1"></a>Overview</h4>
  5531. <!--l. 8--><p class="noindent" >Vorbis floor type one uses a piecewise straight-line representation to encode a spectral envelope
  5532. curve. The representation plots this curve mechanically on a linear frequency axis and a
  5533. logarithmic (dB) amplitude axis. The integer plotting algorithm used is similar to Bresenham&#8217;s
  5534. algorithm.
  5535. <!--l. 16--><p class="noindent" >
  5536. <h4 class="subsectionHead"><span class="titlemark">7.2. </span> <a
  5537. id="x1-990007.2"></a>Floor 1 format</h4>
  5538. <!--l. 18--><p class="noindent" >
  5539. <h5 class="subsubsectionHead"><span class="titlemark">7.2.1. </span> <a
  5540. id="x1-1000007.2.1"></a>model</h5>
  5541. <!--l. 20--><p class="noindent" >Floor type one represents a spectral curve as a series of line segments. Synthesis constructs a
  5542. floor curve using iterative prediction in a process roughly equivalent to the following simplified
  5543. description:
  5544. <ul class="itemize1">
  5545. <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
  5546. where in the base case x&#x02D9;0=0 and x&#x02D9;1=[n], the full range of the spectral floor to be
  5547. computed.
  5548. </li>
  5549. <li class="itemize">the induction step chooses a point x&#x02D9;new within an existing logical line segment and
  5550. produces a y&#x02D9;new value at that point computed from the existing line&#8217;s y value at
  5551. x&#x02D9;new (as plotted by the line) and a difference value decoded from the bitstream
  5552. packet.
  5553. </li>
  5554. <li class="itemize">floor computation produces two new line segments, one running from x&#x02D9;0,y&#x02D9;0 to
  5555. 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
  5556. y&#x02D9;new represents no change to the amplitude value at x&#x02D9;new so that later refinement
  5557. is additionally bounded at x&#x02D9;new.
  5558. </li>
  5559. <li class="itemize">the induction step repeats, using a list of x values specified in the codec setup header
  5560. at floor 1 initialization time. Computation is completed at the end of the x value list.
  5561. </li></ul>
  5562. <!--l. 48--><p class="noindent" >Consider the following example, with values chosen for ease of understanding rather than
  5563. representing typical configuration:
  5564. <!--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
  5565. in increasing order is 0,16,32,48,64,80,96,112 and 128. In list order, the values interleave as 0,
  5566. 128, 64, 32, 96, 16, 48, 80 and 112. The corresponding list-order Y values as decoded from an
  5567. example packet are 110, 20, -5, -45, 0, -25, -10, 30 and -10. We compute the floor in the following
  5568. way, beginning with the first line:
  5569. <div class="center"
  5570. >
  5571. <!--l. 59--><p class="noindent" >
  5572. <!--l. 60--><p class="noindent" ><img
  5573. src="floor1-1.png" alt="PIC"
  5574. >
  5575. <br /> <div class="caption"
  5576. ><span class="id">Figure&#x00A0;7: </span><span
  5577. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-1000017 -->
  5578. </div>
  5579. <!--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
  5580. and 96:
  5581. <div class="center"
  5582. >
  5583. <!--l. 67--><p class="noindent" >
  5584. <!--l. 68--><p class="noindent" ><img
  5585. src="floor1-2.png" alt="PIC"
  5586. >
  5587. <br /> <div class="caption"
  5588. ><span class="id">Figure&#x00A0;8: </span><span
  5589. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-1000028 -->
  5590. </div>
  5591. <!--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
  5592. further refinement. From here on, the pattern should be clear; we complete the floor computation
  5593. as follows:
  5594. <div class="center"
  5595. >
  5596. <!--l. 76--><p class="noindent" >
  5597. <!--l. 77--><p class="noindent" ><img
  5598. src="floor1-3.png" alt="PIC"
  5599. >
  5600. <br /> <div class="caption"
  5601. ><span class="id">Figure&#x00A0;9: </span><span
  5602. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-1000039 -->
  5603. </div>
  5604. <div class="center"
  5605. >
  5606. <!--l. 81--><p class="noindent" >
  5607. <!--l. 82--><p class="noindent" ><img
  5608. src="floor1-4.png" alt="PIC"
  5609. >
  5610. <br /> <div class="caption"
  5611. ><span class="id">Figure&#x00A0;10: </span><span
  5612. class="content">graph of example floor</span></div><!--tex4ht:label?: x1-10000410 -->
  5613. </div>
  5614. <!--l. 86--><p class="noindent" >A more efficient algorithm with carefully defined integer rounding behavior is used for actual
  5615. decode, as described later. The actual algorithm splits Y value computation and line plotting
  5616. into two steps with modifications to the above algorithm to eliminate noise accumulation
  5617. through integer roundoff/truncation.
  5618. <!--l. 94--><p class="noindent" >
  5619. <h5 class="subsubsectionHead"><span class="titlemark">7.2.2. </span> <a
  5620. id="x1-1010007.2.2"></a>header decode</h5>
  5621. <!--l. 96--><p class="noindent" >A list of floor X values is stored in the packet header in interleaved format (used in list order
  5622. during packet decode and synthesis). This list is split into partitions, and each partition is
  5623. assigned to a partition class. X positions 0 and [n] are implicit and do not belong to an explicit
  5624. partition or partition class.
  5625. <!--l. 102--><p class="noindent" >A partition class consists of a representation vector width (the number of Y values which
  5626. the partition class encodes at once), a &#8217;subclass&#8217; value representing the number of
  5627. alternate entropy books the partition class may use in representing Y values, the list of
  5628. [subclass] books and a master book used to encode which alternate books were chosen
  5629. for representation in a given packet. The master/subclass mechanism is meant to be
  5630. used as a flexible representation cascade while still using codebooks only in a scalar
  5631. context.
  5632. <!--l. 112--><p class="noindent" >
  5633. <div class="fancyvrb" id="fancyvrb28"><a
  5634. id="x1-101002r1"></a><span
  5635. class="cmr-6">1</span><span
  5636. class="cmtt-8">&#x00A0;</span><span
  5637. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5638. id="x1-101004r2"></a><span
  5639. class="cmr-6">2</span><span
  5640. class="cmtt-8">&#x00A0;</span><span
  5641. class="cmtt-8">&#x00A0;</span><span
  5642. class="cmtt-8">&#x00A0;</span><span
  5643. class="cmtt-8">&#x00A0;1)</span><span
  5644. class="cmtt-8">&#x00A0;[floor1_partitions]</span><span
  5645. class="cmtt-8">&#x00A0;=</span><span
  5646. class="cmtt-8">&#x00A0;read</span><span
  5647. class="cmtt-8">&#x00A0;5</span><span
  5648. class="cmtt-8">&#x00A0;bits</span><span
  5649. class="cmtt-8">&#x00A0;as</span><span
  5650. class="cmtt-8">&#x00A0;unsigned</span><span
  5651. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  5652. id="x1-101006r3"></a><span
  5653. class="cmr-6">3</span><span
  5654. class="cmtt-8">&#x00A0;</span><span
  5655. class="cmtt-8">&#x00A0;</span><span
  5656. class="cmtt-8">&#x00A0;</span><span
  5657. class="cmtt-8">&#x00A0;2)</span><span
  5658. class="cmtt-8">&#x00A0;[maximum_class]</span><span
  5659. class="cmtt-8">&#x00A0;=</span><span
  5660. class="cmtt-8">&#x00A0;-1</span><br class="fancyvrb" /><a
  5661. id="x1-101008r4"></a><span
  5662. class="cmr-6">4</span><span
  5663. class="cmtt-8">&#x00A0;</span><span
  5664. class="cmtt-8">&#x00A0;</span><span
  5665. class="cmtt-8">&#x00A0;</span><span
  5666. class="cmtt-8">&#x00A0;3)</span><span
  5667. class="cmtt-8">&#x00A0;iterate</span><span
  5668. class="cmtt-8">&#x00A0;[i]</span><span
  5669. class="cmtt-8">&#x00A0;over</span><span
  5670. class="cmtt-8">&#x00A0;the</span><span
  5671. class="cmtt-8">&#x00A0;range</span><span
  5672. class="cmtt-8">&#x00A0;0</span><span
  5673. class="cmtt-8">&#x00A0;...</span><span
  5674. class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
  5675. class="cmtt-8">&#x00A0;</span><span
  5676. class="cmsy-8">{</span>
  5677. <br class="fancyvrb" /><a
  5678. id="x1-101010r5"></a><span
  5679. class="cmr-6">5</span><span
  5680. class="cmtt-8">&#x00A0;</span><span
  5681. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5682. id="x1-101012r6"></a><span
  5683. class="cmr-6">6</span><span
  5684. class="cmtt-8">&#x00A0;</span><span
  5685. class="cmtt-8">&#x00A0;</span><span
  5686. class="cmtt-8">&#x00A0;</span><span
  5687. class="cmtt-8">&#x00A0;</span><span
  5688. class="cmtt-8">&#x00A0;</span><span
  5689. class="cmtt-8">&#x00A0;</span><span
  5690. class="cmtt-8">&#x00A0;</span><span
  5691. class="cmtt-8">&#x00A0;</span><span
  5692. class="cmtt-8">&#x00A0;</span><span
  5693. class="cmtt-8">&#x00A0;4)</span><span
  5694. class="cmtt-8">&#x00A0;vector</span><span
  5695. class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
  5696. class="cmtt-8">&#x00A0;element</span><span
  5697. class="cmtt-8">&#x00A0;[i]</span><span
  5698. class="cmtt-8">&#x00A0;=</span><span
  5699. class="cmtt-8">&#x00A0;read</span><span
  5700. class="cmtt-8">&#x00A0;4</span><span
  5701. class="cmtt-8">&#x00A0;bits</span><span
  5702. class="cmtt-8">&#x00A0;as</span><span
  5703. class="cmtt-8">&#x00A0;unsigned</span><span
  5704. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  5705. id="x1-101014r7"></a><span
  5706. class="cmr-6">7</span><span
  5707. class="cmtt-8">&#x00A0;</span><span
  5708. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5709. id="x1-101016r8"></a><span
  5710. class="cmr-6">8</span><span
  5711. class="cmtt-8">&#x00A0;</span><span
  5712. class="cmtt-8">&#x00A0;</span><span
  5713. class="cmtt-8">&#x00A0;</span><span
  5714. class="cmtt-8">&#x00A0;</span><span
  5715. class="cmtt-8">&#x00A0;</span><span
  5716. class="cmtt-8">&#x00A0;</span><span
  5717. class="cmtt-8">&#x00A0;</span><span
  5718. class="cmsy-8">}</span><br class="fancyvrb" /><a
  5719. id="x1-101018r9"></a><span
  5720. class="cmr-6">9</span><span
  5721. class="cmtt-8">&#x00A0;</span><span
  5722. class="cmtt-8">&#x00A0;</span>
  5723. <br class="fancyvrb" /><a
  5724. id="x1-101020r10"></a><span
  5725. class="cmr-6">10</span><span
  5726. class="cmtt-8">&#x00A0;</span><span
  5727. class="cmtt-8">&#x00A0;</span><span
  5728. class="cmtt-8">&#x00A0;</span><span
  5729. class="cmtt-8">&#x00A0;5)</span><span
  5730. class="cmtt-8">&#x00A0;[maximum_class]</span><span
  5731. class="cmtt-8">&#x00A0;=</span><span
  5732. class="cmtt-8">&#x00A0;largest</span><span
  5733. class="cmtt-8">&#x00A0;integer</span><span
  5734. class="cmtt-8">&#x00A0;scalar</span><span
  5735. class="cmtt-8">&#x00A0;value</span><span
  5736. class="cmtt-8">&#x00A0;in</span><span
  5737. class="cmtt-8">&#x00A0;vector</span><span
  5738. class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><br class="fancyvrb" /><a
  5739. id="x1-101022r11"></a><span
  5740. class="cmr-6">11</span><span
  5741. class="cmtt-8">&#x00A0;</span><span
  5742. class="cmtt-8">&#x00A0;</span><span
  5743. class="cmtt-8">&#x00A0;</span><span
  5744. class="cmtt-8">&#x00A0;6)</span><span
  5745. class="cmtt-8">&#x00A0;iterate</span><span
  5746. class="cmtt-8">&#x00A0;[i]</span><span
  5747. class="cmtt-8">&#x00A0;over</span><span
  5748. class="cmtt-8">&#x00A0;the</span><span
  5749. class="cmtt-8">&#x00A0;range</span><span
  5750. class="cmtt-8">&#x00A0;0</span><span
  5751. class="cmtt-8">&#x00A0;...</span><span
  5752. class="cmtt-8">&#x00A0;[maximum_class]</span><span
  5753. class="cmtt-8">&#x00A0;</span><span
  5754. class="cmsy-8">{</span>
  5755. <br class="fancyvrb" /><a
  5756. id="x1-101024r12"></a><span
  5757. class="cmr-6">12</span><span
  5758. class="cmtt-8">&#x00A0;</span><span
  5759. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5760. id="x1-101026r13"></a><span
  5761. class="cmr-6">13</span><span
  5762. class="cmtt-8">&#x00A0;</span><span
  5763. class="cmtt-8">&#x00A0;</span><span
  5764. class="cmtt-8">&#x00A0;</span><span
  5765. class="cmtt-8">&#x00A0;</span><span
  5766. class="cmtt-8">&#x00A0;</span><span
  5767. class="cmtt-8">&#x00A0;</span><span
  5768. class="cmtt-8">&#x00A0;</span><span
  5769. class="cmtt-8">&#x00A0;</span><span
  5770. class="cmtt-8">&#x00A0;</span><span
  5771. class="cmtt-8">&#x00A0;7)</span><span
  5772. class="cmtt-8">&#x00A0;vector</span><span
  5773. class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
  5774. class="cmtt-8">&#x00A0;element</span><span
  5775. class="cmtt-8">&#x00A0;[i]</span><span
  5776. class="cmtt-8">&#x00A0;=</span><span
  5777. class="cmtt-8">&#x00A0;read</span><span
  5778. class="cmtt-8">&#x00A0;3</span><span
  5779. class="cmtt-8">&#x00A0;bits</span><span
  5780. class="cmtt-8">&#x00A0;as</span><span
  5781. class="cmtt-8">&#x00A0;unsigned</span><span
  5782. class="cmtt-8">&#x00A0;integer</span><span
  5783. class="cmtt-8">&#x00A0;and</span><span
  5784. class="cmtt-8">&#x00A0;add</span><span
  5785. class="cmtt-8">&#x00A0;1</span>
  5786. <br class="fancyvrb" /><a
  5787. id="x1-101028r14"></a><span
  5788. class="cmr-6">14</span><span
  5789. class="cmtt-8">&#x00A0;</span><span
  5790. class="cmtt-8">&#x00A0; 8)</span><span
  5791. class="cmtt-8">&#x00A0;vector</span><span
  5792. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  5793. class="cmtt-8">&#x00A0;element</span><span
  5794. class="cmtt-8">&#x00A0;[i]</span><span
  5795. class="cmtt-8">&#x00A0;=</span><span
  5796. class="cmtt-8">&#x00A0;read</span><span
  5797. class="cmtt-8">&#x00A0;2</span><span
  5798. class="cmtt-8">&#x00A0;bits</span><span
  5799. class="cmtt-8">&#x00A0;as</span><span
  5800. class="cmtt-8">&#x00A0;unsigned</span><span
  5801. class="cmtt-8">&#x00A0;integer</span>
  5802. <br class="fancyvrb" /><a
  5803. id="x1-101030r15"></a><span
  5804. class="cmr-6">15</span><span
  5805. class="cmtt-8">&#x00A0;</span><span
  5806. class="cmtt-8">&#x00A0;</span><span
  5807. class="cmtt-8">&#x00A0;</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;</span><span
  5812. class="cmtt-8">&#x00A0;</span><span
  5813. class="cmtt-8">&#x00A0;</span><span
  5814. class="cmtt-8">&#x00A0;9)</span><span
  5815. class="cmtt-8">&#x00A0;if</span><span
  5816. class="cmtt-8">&#x00A0;(</span><span
  5817. class="cmtt-8">&#x00A0;vector</span><span
  5818. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  5819. class="cmtt-8">&#x00A0;element</span><span
  5820. class="cmtt-8">&#x00A0;[i]</span><span
  5821. class="cmtt-8">&#x00A0;is</span><span
  5822. class="cmtt-8">&#x00A0;nonzero</span><span
  5823. class="cmtt-8">&#x00A0;)</span><span
  5824. class="cmtt-8">&#x00A0;</span><span
  5825. class="cmsy-8">{</span><br class="fancyvrb" /><a
  5826. id="x1-101032r16"></a><span
  5827. class="cmr-6">16</span><span
  5828. class="cmtt-8">&#x00A0;</span><span
  5829. class="cmtt-8">&#x00A0;</span>
  5830. <br class="fancyvrb" /><a
  5831. id="x1-101034r17"></a><span
  5832. class="cmr-6">17</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;</span><span
  5840. class="cmtt-8">&#x00A0;</span><span
  5841. class="cmtt-8">&#x00A0;</span><span
  5842. class="cmtt-8">&#x00A0;</span><span
  5843. class="cmtt-8">&#x00A0;</span><span
  5844. class="cmtt-8">&#x00A0;</span><span
  5845. class="cmtt-8">&#x00A0;</span><span
  5846. class="cmtt-8">&#x00A0;</span><span
  5847. class="cmtt-8">&#x00A0;10)</span><span
  5848. class="cmtt-8">&#x00A0;vector</span><span
  5849. class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
  5850. class="cmtt-8">&#x00A0;element</span><span
  5851. class="cmtt-8">&#x00A0;[i]</span><span
  5852. class="cmtt-8">&#x00A0;=</span><span
  5853. class="cmtt-8">&#x00A0;read</span><span
  5854. class="cmtt-8">&#x00A0;8</span><span
  5855. class="cmtt-8">&#x00A0;bits</span><span
  5856. class="cmtt-8">&#x00A0;as</span><span
  5857. class="cmtt-8">&#x00A0;unsigned</span><span
  5858. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  5859. id="x1-101036r18"></a><span
  5860. class="cmr-6">18</span><span
  5861. class="cmtt-8">&#x00A0;</span><span
  5862. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5863. id="x1-101038r19"></a><span
  5864. class="cmr-6">19</span><span
  5865. class="cmtt-8">&#x00A0;</span><span
  5866. class="cmtt-8">&#x00A0;</span><span
  5867. class="cmtt-8">&#x00A0;</span><span
  5868. class="cmtt-8">&#x00A0;</span><span
  5869. class="cmtt-8">&#x00A0;</span><span
  5870. class="cmtt-8">&#x00A0;</span><span
  5871. class="cmtt-8">&#x00A0;</span><span
  5872. class="cmtt-8">&#x00A0;</span><span
  5873. class="cmtt-8">&#x00A0;</span><span
  5874. class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><br class="fancyvrb" /><a
  5879. id="x1-101040r20"></a><span
  5880. class="cmr-6">20</span><span
  5881. class="cmtt-8">&#x00A0;</span><span
  5882. class="cmtt-8">&#x00A0;</span>
  5883. <br class="fancyvrb" /><a
  5884. id="x1-101042r21"></a><span
  5885. class="cmr-6">21</span><span
  5886. class="cmtt-8">&#x00A0;</span><span
  5887. class="cmtt-8">&#x00A0;</span><span
  5888. class="cmtt-8">&#x00A0;</span><span
  5889. class="cmtt-8">&#x00A0;</span><span
  5890. class="cmtt-8">&#x00A0;</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;11)</span><span
  5895. class="cmtt-8">&#x00A0;iterate</span><span
  5896. class="cmtt-8">&#x00A0;[j]</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;(2</span><span
  5903. class="cmtt-8">&#x00A0;exponent</span><span
  5904. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  5905. class="cmtt-8">&#x00A0;element</span><span
  5906. class="cmtt-8">&#x00A0;[i])</span><span
  5907. class="cmtt-8">&#x00A0;-</span><span
  5908. class="cmtt-8">&#x00A0;1</span><span
  5909. class="cmtt-8">&#x00A0;</span><span
  5910. class="cmsy-8">{</span><br class="fancyvrb" /><a
  5911. id="x1-101044r22"></a><span
  5912. class="cmr-6">22</span><span
  5913. class="cmtt-8">&#x00A0;</span><span
  5914. class="cmtt-8">&#x00A0;</span>
  5915. <br class="fancyvrb" /><a
  5916. id="x1-101046r23"></a><span
  5917. class="cmr-6">23</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;</span><span
  5923. class="cmtt-8">&#x00A0;</span><span
  5924. class="cmtt-8">&#x00A0;</span><span
  5925. class="cmtt-8">&#x00A0;</span><span
  5926. class="cmtt-8">&#x00A0;</span><span
  5927. class="cmtt-8">&#x00A0;</span><span
  5928. class="cmtt-8">&#x00A0;</span><span
  5929. class="cmtt-8">&#x00A0;</span><span
  5930. class="cmtt-8">&#x00A0;</span><span
  5931. class="cmtt-8">&#x00A0;</span><span
  5932. class="cmtt-8">&#x00A0;12)</span><span
  5933. class="cmtt-8">&#x00A0;array</span><span
  5934. class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
  5935. class="cmtt-8">&#x00A0;element</span><span
  5936. class="cmtt-8">&#x00A0;[i],[j]</span><span
  5937. class="cmtt-8">&#x00A0;=</span><br class="fancyvrb" /><a
  5938. id="x1-101048r24"></a><span
  5939. class="cmr-6">24</span><span
  5940. class="cmtt-8">&#x00A0;</span><span
  5941. class="cmtt-8">&#x00A0;</span><span
  5942. class="cmtt-8">&#x00A0;</span><span
  5943. class="cmtt-8">&#x00A0;</span><span
  5944. class="cmtt-8">&#x00A0;</span><span
  5945. class="cmtt-8">&#x00A0;</span><span
  5946. class="cmtt-8">&#x00A0;</span><span
  5947. class="cmtt-8">&#x00A0;</span><span
  5948. class="cmtt-8">&#x00A0;</span><span
  5949. class="cmtt-8">&#x00A0;</span><span
  5950. class="cmtt-8">&#x00A0;</span><span
  5951. class="cmtt-8">&#x00A0;</span><span
  5952. class="cmtt-8">&#x00A0;</span><span
  5953. class="cmtt-8">&#x00A0;</span><span
  5954. class="cmtt-8">&#x00A0;</span><span
  5955. class="cmtt-8">&#x00A0;</span><span
  5956. class="cmtt-8">&#x00A0;</span><span
  5957. class="cmtt-8">&#x00A0;</span><span
  5958. class="cmtt-8">&#x00A0;read</span><span
  5959. class="cmtt-8">&#x00A0;8</span><span
  5960. class="cmtt-8">&#x00A0;bits</span><span
  5961. class="cmtt-8">&#x00A0;as</span><span
  5962. class="cmtt-8">&#x00A0;unsigned</span><span
  5963. class="cmtt-8">&#x00A0;integer</span><span
  5964. class="cmtt-8">&#x00A0;and</span><span
  5965. class="cmtt-8">&#x00A0;subtract</span><span
  5966. class="cmtt-8">&#x00A0;one</span><br class="fancyvrb" /><a
  5967. id="x1-101050r25"></a><span
  5968. class="cmr-6">25</span><span
  5969. class="cmtt-8">&#x00A0;</span><span
  5970. class="cmtt-8">&#x00A0;</span><span
  5971. class="cmtt-8">&#x00A0;</span><span
  5972. class="cmtt-8">&#x00A0;</span><span
  5973. class="cmtt-8">&#x00A0;</span><span
  5974. class="cmtt-8">&#x00A0;</span><span
  5975. class="cmtt-8">&#x00A0;</span><span
  5976. class="cmtt-8">&#x00A0;</span><span
  5977. class="cmtt-8">&#x00A0;</span><span
  5978. class="cmtt-8">&#x00A0;</span><span
  5979. class="cmtt-8">&#x00A0;</span><span
  5980. class="cmtt-8">&#x00A0;</span><span
  5981. class="cmtt-8">&#x00A0;</span><span
  5982. class="cmsy-8">}</span>
  5983. <br class="fancyvrb" /><a
  5984. id="x1-101052r26"></a><span
  5985. class="cmr-6">26</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="cmsy-8">}</span><br class="fancyvrb" /><a
  5995. id="x1-101054r27"></a><span
  5996. class="cmr-6">27</span><span
  5997. class="cmtt-8">&#x00A0;</span><span
  5998. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  5999. id="x1-101056r28"></a><span
  6000. class="cmr-6">28</span><span
  6001. class="cmtt-8">&#x00A0;</span><span
  6002. class="cmtt-8">&#x00A0;</span><span
  6003. class="cmtt-8">&#x00A0;13)</span><span
  6004. class="cmtt-8">&#x00A0;[floor1_multiplier]</span><span
  6005. class="cmtt-8">&#x00A0;=</span><span
  6006. class="cmtt-8">&#x00A0;read</span><span
  6007. class="cmtt-8">&#x00A0;2</span><span
  6008. class="cmtt-8">&#x00A0;bits</span><span
  6009. class="cmtt-8">&#x00A0;as</span><span
  6010. class="cmtt-8">&#x00A0;unsigned</span><span
  6011. class="cmtt-8">&#x00A0;integer</span><span
  6012. class="cmtt-8">&#x00A0;and</span><span
  6013. class="cmtt-8">&#x00A0;add</span><span
  6014. class="cmtt-8">&#x00A0;one</span><br class="fancyvrb" /><a
  6015. id="x1-101058r29"></a><span
  6016. class="cmr-6">29</span><span
  6017. class="cmtt-8">&#x00A0;</span><span
  6018. class="cmtt-8">&#x00A0;</span><span
  6019. class="cmtt-8">&#x00A0;14)</span><span
  6020. class="cmtt-8">&#x00A0;[rangebits]</span><span
  6021. class="cmtt-8">&#x00A0;=</span><span
  6022. class="cmtt-8">&#x00A0;read</span><span
  6023. class="cmtt-8">&#x00A0;4</span><span
  6024. class="cmtt-8">&#x00A0;bits</span><span
  6025. class="cmtt-8">&#x00A0;as</span><span
  6026. class="cmtt-8">&#x00A0;unsigned</span><span
  6027. class="cmtt-8">&#x00A0;integer</span>
  6028. <br class="fancyvrb" /><a
  6029. id="x1-101060r30"></a><span
  6030. class="cmr-6">30</span><span
  6031. class="cmtt-8">&#x00A0;</span><span
  6032. class="cmtt-8">&#x00A0;</span><span
  6033. class="cmtt-8">&#x00A0;15)</span><span
  6034. class="cmtt-8">&#x00A0;vector</span><span
  6035. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  6036. class="cmtt-8">&#x00A0;element</span><span
  6037. class="cmtt-8">&#x00A0;[0]</span><span
  6038. class="cmtt-8">&#x00A0;=</span><span
  6039. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  6040. id="x1-101062r31"></a><span
  6041. class="cmr-6">31</span><span
  6042. class="cmtt-8">&#x00A0;</span><span
  6043. class="cmtt-8">&#x00A0;</span><span
  6044. class="cmtt-8">&#x00A0;16)</span><span
  6045. class="cmtt-8">&#x00A0;vector</span><span
  6046. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  6047. class="cmtt-8">&#x00A0;element</span><span
  6048. class="cmtt-8">&#x00A0;[1]</span><span
  6049. class="cmtt-8">&#x00A0;=</span><span
  6050. class="cmtt-8">&#x00A0;2</span><span
  6051. class="cmtt-8">&#x00A0;exponent</span><span
  6052. class="cmtt-8">&#x00A0;[rangebits];</span>
  6053. <br class="fancyvrb" /><a
  6054. id="x1-101064r32"></a><span
  6055. class="cmr-6">32</span><span
  6056. class="cmtt-8">&#x00A0;</span><span
  6057. class="cmtt-8">&#x00A0;</span><span
  6058. class="cmtt-8">&#x00A0;17)</span><span
  6059. class="cmtt-8">&#x00A0;[floor1_values]</span><span
  6060. class="cmtt-8">&#x00A0;=</span><span
  6061. class="cmtt-8">&#x00A0;2</span><br class="fancyvrb" /><a
  6062. id="x1-101066r33"></a><span
  6063. class="cmr-6">33</span><span
  6064. class="cmtt-8">&#x00A0;</span><span
  6065. class="cmtt-8">&#x00A0;</span><span
  6066. class="cmtt-8">&#x00A0;18)</span><span
  6067. class="cmtt-8">&#x00A0;iterate</span><span
  6068. class="cmtt-8">&#x00A0;[i]</span><span
  6069. class="cmtt-8">&#x00A0;over</span><span
  6070. class="cmtt-8">&#x00A0;the</span><span
  6071. class="cmtt-8">&#x00A0;range</span><span
  6072. class="cmtt-8">&#x00A0;0</span><span
  6073. class="cmtt-8">&#x00A0;...</span><span
  6074. class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
  6075. class="cmtt-8">&#x00A0;</span><span
  6076. class="cmsy-8">{</span>
  6077. <br class="fancyvrb" /><a
  6078. id="x1-101068r34"></a><span
  6079. class="cmr-6">34</span><span
  6080. class="cmtt-8">&#x00A0;</span><span
  6081. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6082. id="x1-101070r35"></a><span
  6083. class="cmr-6">35</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;</span><span
  6089. class="cmtt-8">&#x00A0;</span><span
  6090. class="cmtt-8">&#x00A0;</span><span
  6091. class="cmtt-8">&#x00A0;</span><span
  6092. class="cmtt-8">&#x00A0;19)</span><span
  6093. class="cmtt-8">&#x00A0;[current_class_number]</span><span
  6094. class="cmtt-8">&#x00A0;=</span><span
  6095. class="cmtt-8">&#x00A0;vector</span><span
  6096. class="cmtt-8">&#x00A0;[floor1_partition_class_list]</span><span
  6097. class="cmtt-8">&#x00A0;element</span><span
  6098. class="cmtt-8">&#x00A0;[i]</span>
  6099. <br class="fancyvrb" /><a
  6100. id="x1-101072r36"></a><span
  6101. class="cmr-6">36</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;20)</span><span
  6111. class="cmtt-8">&#x00A0;iterate</span><span
  6112. class="cmtt-8">&#x00A0;[j]</span><span
  6113. class="cmtt-8">&#x00A0;over</span><span
  6114. class="cmtt-8">&#x00A0;the</span><span
  6115. class="cmtt-8">&#x00A0;range</span><span
  6116. class="cmtt-8">&#x00A0;0</span><span
  6117. class="cmtt-8">&#x00A0;...</span><span
  6118. class="cmtt-8">&#x00A0;([floor1_class_dimensions]</span><span
  6119. class="cmtt-8">&#x00A0;element</span><span
  6120. class="cmtt-8">&#x00A0;[current_class_number])-1</span><span
  6121. class="cmtt-8">&#x00A0;</span><span
  6122. class="cmsy-8">{</span>
  6123. <br class="fancyvrb" /><a
  6124. id="x1-101074r37"></a><span
  6125. class="cmr-6">37</span><span
  6126. class="cmtt-8">&#x00A0;</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="cmtt-8">&#x00A0;21)</span><span
  6141. class="cmtt-8">&#x00A0;vector</span><span
  6142. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  6143. class="cmtt-8">&#x00A0;element</span><span
  6144. class="cmtt-8">&#x00A0;([floor1_values])</span><span
  6145. class="cmtt-8">&#x00A0;=</span><br class="fancyvrb" /><a
  6146. id="x1-101076r38"></a><span
  6147. class="cmr-6">38</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="cmtt-8">&#x00A0;</span><span
  6153. class="cmtt-8">&#x00A0;</span><span
  6154. class="cmtt-8">&#x00A0;</span><span
  6155. class="cmtt-8">&#x00A0;</span><span
  6156. class="cmtt-8">&#x00A0;</span><span
  6157. class="cmtt-8">&#x00A0;</span><span
  6158. class="cmtt-8">&#x00A0;</span><span
  6159. class="cmtt-8">&#x00A0;</span><span
  6160. class="cmtt-8">&#x00A0;</span><span
  6161. class="cmtt-8">&#x00A0;</span><span
  6162. class="cmtt-8">&#x00A0;</span><span
  6163. class="cmtt-8">&#x00A0;</span><span
  6164. class="cmtt-8">&#x00A0;</span><span
  6165. class="cmtt-8">&#x00A0;</span><span
  6166. class="cmtt-8">&#x00A0;read</span><span
  6167. class="cmtt-8">&#x00A0;[rangebits]</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>
  6172. <br class="fancyvrb" /><a
  6173. id="x1-101078r39"></a><span
  6174. class="cmr-6">39</span><span
  6175. class="cmtt-8">&#x00A0;</span><span
  6176. class="cmtt-8">&#x00A0;</span><span
  6177. class="cmtt-8">&#x00A0;</span><span
  6178. class="cmtt-8">&#x00A0;</span><span
  6179. class="cmtt-8">&#x00A0;</span><span
  6180. class="cmtt-8">&#x00A0;</span><span
  6181. class="cmtt-8">&#x00A0;</span><span
  6182. class="cmtt-8">&#x00A0;</span><span
  6183. class="cmtt-8">&#x00A0;</span><span
  6184. class="cmtt-8">&#x00A0;</span><span
  6185. class="cmtt-8">&#x00A0;</span><span
  6186. class="cmtt-8">&#x00A0;</span><span
  6187. class="cmtt-8">&#x00A0;</span><span
  6188. class="cmtt-8">&#x00A0;</span><span
  6189. class="cmtt-8">&#x00A0;22)</span><span
  6190. class="cmtt-8">&#x00A0;increment</span><span
  6191. class="cmtt-8">&#x00A0;[floor1_values]</span><span
  6192. class="cmtt-8">&#x00A0;by</span><span
  6193. class="cmtt-8">&#x00A0;one</span><br class="fancyvrb" /><a
  6194. id="x1-101080r40"></a><span
  6195. class="cmr-6">40</span><span
  6196. class="cmtt-8">&#x00A0;</span><span
  6197. class="cmtt-8">&#x00A0;</span><span
  6198. class="cmtt-8">&#x00A0;</span><span
  6199. class="cmtt-8">&#x00A0;</span><span
  6200. class="cmtt-8">&#x00A0;</span><span
  6201. class="cmtt-8">&#x00A0;</span><span
  6202. class="cmtt-8">&#x00A0;</span><span
  6203. class="cmtt-8">&#x00A0;</span><span
  6204. class="cmtt-8">&#x00A0;</span><span
  6205. class="cmtt-8">&#x00A0;</span><span
  6206. class="cmtt-8">&#x00A0;</span><span
  6207. class="cmtt-8">&#x00A0;</span><span
  6208. class="cmtt-8">&#x00A0;</span><span
  6209. class="cmsy-8">}</span><br class="fancyvrb" /><a
  6210. id="x1-101082r41"></a><span
  6211. class="cmr-6">41</span><span
  6212. class="cmtt-8">&#x00A0;</span><span
  6213. class="cmtt-8">&#x00A0;</span><span
  6214. class="cmtt-8">&#x00A0;</span><span
  6215. class="cmtt-8">&#x00A0;</span><span
  6216. class="cmtt-8">&#x00A0;</span><span
  6217. class="cmtt-8">&#x00A0;</span><span
  6218. class="cmtt-8">&#x00A0;</span><span
  6219. class="cmsy-8">}</span><br class="fancyvrb" /><a
  6220. id="x1-101084r42"></a><span
  6221. class="cmr-6">42</span><span
  6222. class="cmtt-8">&#x00A0;</span><span
  6223. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6224. id="x1-101086r43"></a><span
  6225. class="cmr-6">43</span><span
  6226. class="cmtt-8">&#x00A0;</span><span
  6227. class="cmtt-8">&#x00A0;</span><span
  6228. class="cmtt-8">&#x00A0;23)</span><span
  6229. class="cmtt-8">&#x00A0;done</span></div>
  6230. <!--l. 158--><p class="noindent" >An end-of-packet condition while reading any aspect of a floor 1 configuration during
  6231. setup renders a stream undecodable. In addition, a <span
  6232. class="cmtt-12">[floor1_class_masterbooks] </span>or
  6233. <span
  6234. class="cmtt-12">[floor1_subclass_books] </span>scalar element greater than the highest numbered codebook
  6235. configured in this stream is an error condition that renders the stream undecodable. Vector
  6236. [floor1_x_list] is limited to a maximum length of 65 elements; a setup indicating more than 65
  6237. total elements (including elements 0 and 1 set prior to the read loop) renders the stream
  6238. undecodable. All vector [floor1_x_list] element values must be unique within the vector; a
  6239. non-unique value renders the stream undecodable.
  6240. <!--l. 170--><p class="noindent" >
  6241. <h5 class="subsubsectionHead"><span class="titlemark">7.2.3. </span> <a
  6242. id="x1-1020007.2.3"></a>packet decode</h5>
  6243. <!--l. 172--><p class="noindent" >Packet decode begins by checking the <span
  6244. class="cmtt-12">[nonzero] </span>flag:
  6245. <!--l. 174--><p class="noindent" >
  6246. <div class="fancyvrb" id="fancyvrb29"><a
  6247. id="x1-102002r1"></a><span
  6248. class="cmr-6">1</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;1)</span><span
  6253. class="cmtt-8">&#x00A0;[nonzero]</span><span
  6254. class="cmtt-8">&#x00A0;=</span><span
  6255. class="cmtt-8">&#x00A0;read</span><span
  6256. class="cmtt-8">&#x00A0;1</span><span
  6257. class="cmtt-8">&#x00A0;bit</span><span
  6258. class="cmtt-8">&#x00A0;as</span><span
  6259. class="cmtt-8">&#x00A0;boolean</span></div>
  6260. <!--l. 178--><p class="noindent" >If <span
  6261. class="cmtt-12">[nonzero] </span>is unset, that indicates this channel contained no audio energy in this frame.
  6262. Decode immediately returns a status indicating this floor curve (and thus this channel) is unused
  6263. this frame. (A return status of &#8217;unused&#8217; is different from decoding a floor that has all
  6264. points set to minimum representation amplitude, which happens to be approximately
  6265. -140dB).
  6266. <!--l. 186--><p class="noindent" >Assuming <span
  6267. class="cmtt-12">[nonzero] </span>is set, decode proceeds as follows:
  6268. <!--l. 188--><p class="noindent" >
  6269. <div class="fancyvrb" id="fancyvrb30"><a
  6270. id="x1-102004r1"></a><span
  6271. class="cmr-6">1</span><span
  6272. class="cmtt-8">&#x00A0;</span><span
  6273. class="cmtt-8">&#x00A0;</span><span
  6274. class="cmtt-8">&#x00A0;</span><span
  6275. class="cmtt-8">&#x00A0;1)</span><span
  6276. class="cmtt-8">&#x00A0;[range]</span><span
  6277. class="cmtt-8">&#x00A0;=</span><span
  6278. class="cmtt-8">&#x00A0;vector</span><span
  6279. class="cmtt-8">&#x00A0;</span><span
  6280. class="cmsy-8">{</span><span
  6281. class="cmtt-8">&#x00A0;256,</span><span
  6282. class="cmtt-8">&#x00A0;128,</span><span
  6283. class="cmtt-8">&#x00A0;86,</span><span
  6284. class="cmtt-8">&#x00A0;64</span><span
  6285. class="cmtt-8">&#x00A0;</span><span
  6286. class="cmsy-8">}</span><span
  6287. class="cmtt-8">&#x00A0;element</span><span
  6288. class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span>
  6289. <br class="fancyvrb" /><a
  6290. id="x1-102006r2"></a><span
  6291. class="cmr-6">2</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;2)</span><span
  6296. class="cmtt-8">&#x00A0;vector</span><span
  6297. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6298. class="cmtt-8">&#x00A0;element</span><span
  6299. class="cmtt-8">&#x00A0;[0]</span><span
  6300. class="cmtt-8">&#x00A0;=</span><span
  6301. class="cmtt-8">&#x00A0;read</span><span
  6302. class="cmtt-8">&#x00A0;</span><a
  6303. href="#x1-1190009.2.1"><span
  6304. class="cmtt-8">ilog</span></a><span
  6305. class="cmtt-8">([range]-1)</span><span
  6306. class="cmtt-8">&#x00A0;bits</span><span
  6307. class="cmtt-8">&#x00A0;as</span><span
  6308. class="cmtt-8">&#x00A0;unsigned</span><span
  6309. class="cmtt-8">&#x00A0;integer</span>
  6310. <br class="fancyvrb" /><a
  6311. id="x1-102008r3"></a><span
  6312. class="cmr-6">3</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;3)</span><span
  6317. class="cmtt-8">&#x00A0;vector</span><span
  6318. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6319. class="cmtt-8">&#x00A0;element</span><span
  6320. class="cmtt-8">&#x00A0;[1]</span><span
  6321. class="cmtt-8">&#x00A0;=</span><span
  6322. class="cmtt-8">&#x00A0;read</span><span
  6323. class="cmtt-8">&#x00A0;</span><a
  6324. href="#x1-1190009.2.1"><span
  6325. class="cmtt-8">ilog</span></a><span
  6326. class="cmtt-8">([range]-1)</span><span
  6327. class="cmtt-8">&#x00A0;bits</span><span
  6328. class="cmtt-8">&#x00A0;as</span><span
  6329. class="cmtt-8">&#x00A0;unsigned</span><span
  6330. class="cmtt-8">&#x00A0;integer</span>
  6331. <br class="fancyvrb" /><a
  6332. id="x1-102010r4"></a><span
  6333. class="cmr-6">4</span><span
  6334. class="cmtt-8">&#x00A0;</span><span
  6335. class="cmtt-8">&#x00A0;</span><span
  6336. class="cmtt-8">&#x00A0;</span><span
  6337. class="cmtt-8">&#x00A0;4)</span><span
  6338. class="cmtt-8">&#x00A0;[offset]</span><span
  6339. class="cmtt-8">&#x00A0;=</span><span
  6340. class="cmtt-8">&#x00A0;2;</span><br class="fancyvrb" /><a
  6341. id="x1-102012r5"></a><span
  6342. class="cmr-6">5</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;5)</span><span
  6347. class="cmtt-8">&#x00A0;iterate</span><span
  6348. class="cmtt-8">&#x00A0;[i]</span><span
  6349. class="cmtt-8">&#x00A0;over</span><span
  6350. class="cmtt-8">&#x00A0;the</span><span
  6351. class="cmtt-8">&#x00A0;range</span><span
  6352. class="cmtt-8">&#x00A0;0</span><span
  6353. class="cmtt-8">&#x00A0;...</span><span
  6354. class="cmtt-8">&#x00A0;[floor1_partitions]-1</span><span
  6355. class="cmtt-8">&#x00A0;</span><span
  6356. class="cmsy-8">{</span><br class="fancyvrb" /><a
  6357. id="x1-102014r6"></a><span
  6358. class="cmr-6">6</span><span
  6359. class="cmtt-8">&#x00A0;</span><span
  6360. class="cmtt-8">&#x00A0;</span>
  6361. <br class="fancyvrb" /><a
  6362. id="x1-102016r7"></a><span
  6363. class="cmr-6">7</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;6)</span><span
  6373. class="cmtt-8">&#x00A0;[class]</span><span
  6374. class="cmtt-8">&#x00A0;=</span><span
  6375. class="cmtt-8">&#x00A0;vector</span><span
  6376. class="cmtt-8">&#x00A0;[floor1_partition_class]</span><span
  6377. class="cmtt-8">&#x00A0;</span><span
  6378. class="cmtt-8">&#x00A0;element</span><span
  6379. class="cmtt-8">&#x00A0;[i]</span><br class="fancyvrb" /><a
  6380. id="x1-102018r8"></a><span
  6381. class="cmr-6">8</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="cmtt-8">&#x00A0;</span><span
  6387. class="cmtt-8">&#x00A0;</span><span
  6388. class="cmtt-8">&#x00A0;</span><span
  6389. class="cmtt-8">&#x00A0;</span><span
  6390. class="cmtt-8">&#x00A0;7)</span><span
  6391. class="cmtt-8">&#x00A0;[cdim]</span><span
  6392. class="cmtt-8">&#x00A0;</span><span
  6393. class="cmtt-8">&#x00A0;=</span><span
  6394. class="cmtt-8">&#x00A0;vector</span><span
  6395. class="cmtt-8">&#x00A0;[floor1_class_dimensions]</span><span
  6396. class="cmtt-8">&#x00A0;element</span><span
  6397. class="cmtt-8">&#x00A0;[class]</span>
  6398. <br class="fancyvrb" /><a
  6399. id="x1-102020r9"></a><span
  6400. class="cmr-6">9</span><span
  6401. class="cmtt-8">&#x00A0;</span><span
  6402. class="cmtt-8">&#x00A0;</span><span
  6403. class="cmtt-8">&#x00A0;</span><span
  6404. class="cmtt-8">&#x00A0;</span><span
  6405. class="cmtt-8">&#x00A0;</span><span
  6406. class="cmtt-8">&#x00A0;</span><span
  6407. class="cmtt-8">&#x00A0;</span><span
  6408. class="cmtt-8">&#x00A0;</span><span
  6409. class="cmtt-8">&#x00A0;8)</span><span
  6410. class="cmtt-8">&#x00A0;[cbits]</span><span
  6411. class="cmtt-8">&#x00A0;=</span><span
  6412. class="cmtt-8">&#x00A0;vector</span><span
  6413. class="cmtt-8">&#x00A0;[floor1_class_subclasses]</span><span
  6414. class="cmtt-8">&#x00A0;element</span><span
  6415. class="cmtt-8">&#x00A0;[class]</span><br class="fancyvrb" /><a
  6416. id="x1-102022r10"></a><span
  6417. class="cmr-6">10</span><span
  6418. class="cmtt-8">&#x00A0;</span><span
  6419. class="cmtt-8">&#x00A0;</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;</span><span
  6424. class="cmtt-8">&#x00A0;</span><span
  6425. class="cmtt-8">&#x00A0;</span><span
  6426. class="cmtt-8">&#x00A0;9)</span><span
  6427. class="cmtt-8">&#x00A0;[csub]</span><span
  6428. class="cmtt-8">&#x00A0;</span><span
  6429. class="cmtt-8">&#x00A0;=</span><span
  6430. class="cmtt-8">&#x00A0;(2</span><span
  6431. class="cmtt-8">&#x00A0;exponent</span><span
  6432. class="cmtt-8">&#x00A0;[cbits])-1</span><br class="fancyvrb" /><a
  6433. id="x1-102024r11"></a><span
  6434. class="cmr-6">11</span><span
  6435. class="cmtt-8">&#x00A0;</span><span
  6436. class="cmtt-8">&#x00A0;</span><span
  6437. class="cmtt-8">&#x00A0;</span><span
  6438. class="cmtt-8">&#x00A0;</span><span
  6439. class="cmtt-8">&#x00A0;</span><span
  6440. class="cmtt-8">&#x00A0;</span><span
  6441. class="cmtt-8">&#x00A0;</span><span
  6442. class="cmtt-8">&#x00A0;10)</span><span
  6443. class="cmtt-8">&#x00A0;[cval]</span><span
  6444. class="cmtt-8">&#x00A0;</span><span
  6445. class="cmtt-8">&#x00A0;=</span><span
  6446. class="cmtt-8">&#x00A0;0</span>
  6447. <br class="fancyvrb" /><a
  6448. id="x1-102026r12"></a><span
  6449. class="cmr-6">12</span><span
  6450. class="cmtt-8">&#x00A0;</span><span
  6451. class="cmtt-8">&#x00A0;</span><span
  6452. class="cmtt-8">&#x00A0;</span><span
  6453. class="cmtt-8">&#x00A0;</span><span
  6454. class="cmtt-8">&#x00A0;</span><span
  6455. class="cmtt-8">&#x00A0;</span><span
  6456. class="cmtt-8">&#x00A0;</span><span
  6457. class="cmtt-8">&#x00A0;11)</span><span
  6458. class="cmtt-8">&#x00A0;if</span><span
  6459. class="cmtt-8">&#x00A0;(</span><span
  6460. class="cmtt-8">&#x00A0;[cbits]</span><span
  6461. class="cmtt-8">&#x00A0;is</span><span
  6462. class="cmtt-8">&#x00A0;greater</span><span
  6463. class="cmtt-8">&#x00A0;than</span><span
  6464. class="cmtt-8">&#x00A0;zero</span><span
  6465. class="cmtt-8">&#x00A0;)</span><span
  6466. class="cmtt-8">&#x00A0;</span><span
  6467. class="cmsy-8">{</span><br class="fancyvrb" /><a
  6468. id="x1-102028r13"></a><span
  6469. class="cmr-6">13</span><span
  6470. class="cmtt-8">&#x00A0;</span><span
  6471. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6472. id="x1-102030r14"></a><span
  6473. class="cmr-6">14</span><span
  6474. class="cmtt-8">&#x00A0;</span><span
  6475. class="cmtt-8">&#x00A0;</span><span
  6476. class="cmtt-8">&#x00A0;</span><span
  6477. class="cmtt-8">&#x00A0;</span><span
  6478. class="cmtt-8">&#x00A0;</span><span
  6479. class="cmtt-8">&#x00A0;</span><span
  6480. class="cmtt-8">&#x00A0;</span><span
  6481. class="cmtt-8">&#x00A0;</span><span
  6482. class="cmtt-8">&#x00A0;</span><span
  6483. class="cmtt-8">&#x00A0;</span><span
  6484. class="cmtt-8">&#x00A0;</span><span
  6485. class="cmtt-8">&#x00A0;</span><span
  6486. class="cmtt-8">&#x00A0;</span><span
  6487. class="cmtt-8">&#x00A0;</span><span
  6488. class="cmtt-8">&#x00A0;12)</span><span
  6489. class="cmtt-8">&#x00A0;[cval]</span><span
  6490. class="cmtt-8">&#x00A0;=</span><span
  6491. class="cmtt-8">&#x00A0;read</span><span
  6492. class="cmtt-8">&#x00A0;from</span><span
  6493. class="cmtt-8">&#x00A0;packet</span><span
  6494. class="cmtt-8">&#x00A0;using</span><span
  6495. class="cmtt-8">&#x00A0;codebook</span><span
  6496. class="cmtt-8">&#x00A0;number</span>
  6497. <br class="fancyvrb" /><a
  6498. id="x1-102032r15"></a><span
  6499. class="cmr-6">15</span><span
  6500. class="cmtt-8">&#x00A0;</span><span
  6501. class="cmtt-8">&#x00A0;</span><span
  6502. class="cmtt-8">&#x00A0;</span><span
  6503. class="cmtt-8">&#x00A0;</span><span
  6504. class="cmtt-8">&#x00A0;</span><span
  6505. class="cmtt-8">&#x00A0;</span><span
  6506. class="cmtt-8">&#x00A0;</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;</span><span
  6511. class="cmtt-8">&#x00A0;</span><span
  6512. class="cmtt-8">&#x00A0;</span><span
  6513. class="cmtt-8">&#x00A0;</span><span
  6514. class="cmtt-8">&#x00A0;</span><span
  6515. class="cmtt-8">&#x00A0;</span><span
  6516. class="cmtt-8">&#x00A0;</span><span
  6517. class="cmtt-8">&#x00A0;</span><span
  6518. class="cmtt-8">&#x00A0;(vector</span><span
  6519. class="cmtt-8">&#x00A0;[floor1_class_masterbooks]</span><span
  6520. class="cmtt-8">&#x00A0;element</span><span
  6521. class="cmtt-8">&#x00A0;[class])</span><span
  6522. class="cmtt-8">&#x00A0;in</span><span
  6523. class="cmtt-8">&#x00A0;scalar</span><span
  6524. class="cmtt-8">&#x00A0;context</span>
  6525. <br class="fancyvrb" /><a
  6526. id="x1-102034r16"></a><span
  6527. class="cmr-6">16</span><span
  6528. class="cmtt-8">&#x00A0;</span><span
  6529. class="cmtt-8">&#x00A0;</span><span
  6530. class="cmtt-8">&#x00A0;</span><span
  6531. class="cmtt-8">&#x00A0;</span><span
  6532. class="cmtt-8">&#x00A0;</span><span
  6533. class="cmtt-8">&#x00A0;</span><span
  6534. class="cmtt-8">&#x00A0;</span><span
  6535. class="cmtt-8">&#x00A0;</span><span
  6536. class="cmtt-8">&#x00A0;</span><span
  6537. class="cmtt-8">&#x00A0;</span><span
  6538. class="cmtt-8">&#x00A0;</span><span
  6539. class="cmtt-8">&#x00A0;</span><span
  6540. class="cmsy-8">}</span><br class="fancyvrb" /><a
  6541. id="x1-102036r17"></a><span
  6542. class="cmr-6">17</span><span
  6543. class="cmtt-8">&#x00A0;</span><span
  6544. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6545. id="x1-102038r18"></a><span
  6546. class="cmr-6">18</span><span
  6547. class="cmtt-8">&#x00A0;</span><span
  6548. class="cmtt-8">&#x00A0;</span><span
  6549. class="cmtt-8">&#x00A0;</span><span
  6550. class="cmtt-8">&#x00A0;</span><span
  6551. class="cmtt-8">&#x00A0;</span><span
  6552. class="cmtt-8">&#x00A0;</span><span
  6553. class="cmtt-8">&#x00A0;</span><span
  6554. class="cmtt-8">&#x00A0;13)</span><span
  6555. class="cmtt-8">&#x00A0;iterate</span><span
  6556. class="cmtt-8">&#x00A0;[j]</span><span
  6557. class="cmtt-8">&#x00A0;over</span><span
  6558. class="cmtt-8">&#x00A0;the</span><span
  6559. class="cmtt-8">&#x00A0;range</span><span
  6560. class="cmtt-8">&#x00A0;0</span><span
  6561. class="cmtt-8">&#x00A0;...</span><span
  6562. class="cmtt-8">&#x00A0;[cdim]-1</span><span
  6563. class="cmtt-8">&#x00A0;</span><span
  6564. class="cmsy-8">{</span><br class="fancyvrb" /><a
  6565. id="x1-102040r19"></a><span
  6566. class="cmr-6">19</span><span
  6567. class="cmtt-8">&#x00A0;</span><span
  6568. class="cmtt-8">&#x00A0;</span>
  6569. <br class="fancyvrb" /><a
  6570. id="x1-102042r20"></a><span
  6571. class="cmr-6">20</span><span
  6572. class="cmtt-8">&#x00A0;</span><span
  6573. class="cmtt-8">&#x00A0;</span><span
  6574. class="cmtt-8">&#x00A0;</span><span
  6575. class="cmtt-8">&#x00A0;</span><span
  6576. class="cmtt-8">&#x00A0;</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;</span><span
  6586. class="cmtt-8">&#x00A0;14)</span><span
  6587. class="cmtt-8">&#x00A0;[book]</span><span
  6588. class="cmtt-8">&#x00A0;=</span><span
  6589. class="cmtt-8">&#x00A0;array</span><span
  6590. class="cmtt-8">&#x00A0;[floor1_subclass_books]</span><span
  6591. class="cmtt-8">&#x00A0;element</span><span
  6592. class="cmtt-8">&#x00A0;[class],([cval]</span><span
  6593. class="cmtt-8">&#x00A0;bitwise</span><span
  6594. class="cmtt-8">&#x00A0;AND</span><span
  6595. class="cmtt-8">&#x00A0;[csub])</span>
  6596. <br class="fancyvrb" /><a
  6597. id="x1-102044r21"></a><span
  6598. class="cmr-6">21</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;</span><span
  6604. class="cmtt-8">&#x00A0;</span><span
  6605. class="cmtt-8">&#x00A0;</span><span
  6606. class="cmtt-8">&#x00A0;</span><span
  6607. class="cmtt-8">&#x00A0;</span><span
  6608. class="cmtt-8">&#x00A0;</span><span
  6609. class="cmtt-8">&#x00A0;</span><span
  6610. class="cmtt-8">&#x00A0;</span><span
  6611. class="cmtt-8">&#x00A0;</span><span
  6612. class="cmtt-8">&#x00A0;</span><span
  6613. class="cmtt-8">&#x00A0;15)</span><span
  6614. class="cmtt-8">&#x00A0;[cval]</span><span
  6615. class="cmtt-8">&#x00A0;=</span><span
  6616. class="cmtt-8">&#x00A0;[cval]</span><span
  6617. class="cmtt-8">&#x00A0;right</span><span
  6618. class="cmtt-8">&#x00A0;shifted</span><span
  6619. class="cmtt-8">&#x00A0;[cbits]</span><span
  6620. class="cmtt-8">&#x00A0;bits</span><br class="fancyvrb" /><a
  6621. id="x1-102046r22"></a><span
  6622. class="cmr-6">22</span><span
  6623. class="cmtt-8">&#x00A0;</span><span
  6624. class="cmtt-8">&#x00A0; </span><span
  6625. class="cmtt-8">&#x00A0;</span><span
  6626. class="cmtt-8">&#x00A0;</span><span
  6627. class="cmtt-8">&#x00A0;</span><span
  6628. class="cmtt-8">&#x00A0;</span><span
  6629. class="cmtt-8">&#x00A0;16)</span><span
  6630. class="cmtt-8">&#x00A0;if</span><span
  6631. class="cmtt-8">&#x00A0;(</span><span
  6632. class="cmtt-8">&#x00A0;[book]</span><span
  6633. class="cmtt-8">&#x00A0;is</span><span
  6634. class="cmtt-8">&#x00A0;not</span><span
  6635. class="cmtt-8">&#x00A0;less</span><span
  6636. class="cmtt-8">&#x00A0;than</span><span
  6637. class="cmtt-8">&#x00A0;zero</span><span
  6638. class="cmtt-8">&#x00A0;)</span><span
  6639. class="cmtt-8">&#x00A0;</span><span
  6640. class="cmsy-8">{</span><br class="fancyvrb" /><a
  6641. id="x1-102048r23"></a><span
  6642. class="cmr-6">23</span><span
  6643. class="cmtt-8">&#x00A0;</span><span
  6644. class="cmtt-8">&#x00A0;</span>
  6645. <br class="fancyvrb" /><a
  6646. id="x1-102050r24"></a><span
  6647. class="cmr-6">24</span><span
  6648. class="cmtt-8">&#x00A0;</span><span
  6649. class="cmtt-8">&#x00A0; </span><span
  6650. class="cmtt-8">&#x00A0;</span><span
  6651. class="cmtt-8">&#x00A0;</span><span
  6652. class="cmtt-8">&#x00A0;</span><span
  6653. class="cmtt-8">&#x00A0;</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;17)</span><span
  6661. class="cmtt-8">&#x00A0;vector</span><span
  6662. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6663. class="cmtt-8">&#x00A0;element</span><span
  6664. class="cmtt-8">&#x00A0;([j]+[offset])</span><span
  6665. class="cmtt-8">&#x00A0;=</span><span
  6666. class="cmtt-8">&#x00A0;read</span><span
  6667. class="cmtt-8">&#x00A0;from</span><span
  6668. class="cmtt-8">&#x00A0;packet</span><span
  6669. class="cmtt-8">&#x00A0;using</span><span
  6670. class="cmtt-8">&#x00A0;codebook</span><br class="fancyvrb" /><a
  6671. id="x1-102052r25"></a><span
  6672. class="cmr-6">25</span><span
  6673. class="cmtt-8">&#x00A0;</span><span
  6674. class="cmtt-8">&#x00A0;</span><span
  6675. class="cmtt-8">&#x00A0;</span><span
  6676. class="cmtt-8">&#x00A0;</span><span
  6677. class="cmtt-8">&#x00A0;</span><span
  6678. class="cmtt-8">&#x00A0;</span><span
  6679. class="cmtt-8">&#x00A0;</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;[book]</span><span
  6698. class="cmtt-8">&#x00A0;in</span><span
  6699. class="cmtt-8">&#x00A0;scalar</span><span
  6700. class="cmtt-8">&#x00A0;context</span>
  6701. <br class="fancyvrb" /><a
  6702. id="x1-102054r26"></a><span
  6703. class="cmr-6">26</span><span
  6704. class="cmtt-8">&#x00A0;</span><span
  6705. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6706. id="x1-102056r27"></a><span
  6707. class="cmr-6">27</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="cmtt-8">&#x00A0;</span><span
  6721. class="cmtt-8">&#x00A0;</span><span
  6722. class="cmtt-8">&#x00A0;</span><span
  6723. class="cmtt-8">&#x00A0;</span><span
  6724. class="cmtt-8">&#x00A0;</span><span
  6725. class="cmtt-8">&#x00A0;</span><span
  6726. class="cmtt-8">&#x00A0;</span><span
  6727. class="cmsy-8">}</span><span
  6728. class="cmtt-8">&#x00A0;else</span><span
  6729. class="cmtt-8">&#x00A0;[book]</span><span
  6730. class="cmtt-8">&#x00A0;is</span><span
  6731. class="cmtt-8">&#x00A0;less</span><span
  6732. class="cmtt-8">&#x00A0;than</span><span
  6733. class="cmtt-8">&#x00A0;zero</span><span
  6734. class="cmtt-8">&#x00A0;</span><span
  6735. class="cmsy-8">{</span><br class="fancyvrb" /><a
  6736. id="x1-102058r28"></a><span
  6737. class="cmr-6">28</span><span
  6738. class="cmtt-8">&#x00A0;</span><span
  6739. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6740. id="x1-102060r29"></a><span
  6741. class="cmr-6">29</span><span
  6742. class="cmtt-8">&#x00A0;</span><span
  6743. class="cmtt-8">&#x00A0; </span><span
  6744. class="cmtt-8">&#x00A0;</span><span
  6745. class="cmtt-8">&#x00A0;</span><span
  6746. class="cmtt-8">&#x00A0;</span><span
  6747. class="cmtt-8">&#x00A0;</span><span
  6748. class="cmtt-8">&#x00A0;</span><span
  6749. class="cmtt-8">&#x00A0;</span><span
  6750. class="cmtt-8">&#x00A0;</span><span
  6751. class="cmtt-8">&#x00A0;</span><span
  6752. class="cmtt-8">&#x00A0;</span><span
  6753. class="cmtt-8">&#x00A0;</span><span
  6754. class="cmtt-8">&#x00A0;18)</span><span
  6755. class="cmtt-8">&#x00A0;vector</span><span
  6756. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6757. class="cmtt-8">&#x00A0;element</span><span
  6758. class="cmtt-8">&#x00A0;([j]+[offset])</span><span
  6759. class="cmtt-8">&#x00A0;=</span><span
  6760. class="cmtt-8">&#x00A0;0</span>
  6761. <br class="fancyvrb" /><a
  6762. id="x1-102062r30"></a><span
  6763. class="cmr-6">30</span><span
  6764. class="cmtt-8">&#x00A0;</span><span
  6765. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6766. id="x1-102064r31"></a><span
  6767. class="cmr-6">31</span><span
  6768. class="cmtt-8">&#x00A0;</span><span
  6769. class="cmtt-8">&#x00A0;</span><span
  6770. class="cmtt-8">&#x00A0;</span><span
  6771. class="cmtt-8">&#x00A0;</span><span
  6772. class="cmtt-8">&#x00A0;</span><span
  6773. class="cmtt-8">&#x00A0;</span><span
  6774. class="cmtt-8">&#x00A0;</span><span
  6775. class="cmtt-8">&#x00A0;</span><span
  6776. class="cmtt-8">&#x00A0;</span><span
  6777. class="cmtt-8">&#x00A0;</span><span
  6778. class="cmtt-8">&#x00A0;</span><span
  6779. class="cmtt-8">&#x00A0;</span><span
  6780. class="cmtt-8">&#x00A0;</span><span
  6781. class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><br class="fancyvrb" /><a
  6788. id="x1-102066r32"></a><span
  6789. class="cmr-6">32</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;</span><span
  6797. class="cmtt-8">&#x00A0;</span><span
  6798. class="cmtt-8">&#x00A0;</span><span
  6799. class="cmtt-8">&#x00A0;</span><span
  6800. class="cmtt-8">&#x00A0;</span><span
  6801. class="cmtt-8">&#x00A0;</span><span
  6802. class="cmsy-8">}</span><br class="fancyvrb" /><a
  6803. id="x1-102068r33"></a><span
  6804. class="cmr-6">33</span><span
  6805. class="cmtt-8">&#x00A0;</span><span
  6806. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6807. id="x1-102070r34"></a><span
  6808. class="cmr-6">34</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;</span><span
  6814. class="cmtt-8">&#x00A0;</span><span
  6815. class="cmtt-8">&#x00A0;</span><span
  6816. class="cmtt-8">&#x00A0;19)</span><span
  6817. class="cmtt-8">&#x00A0;[offset]</span><span
  6818. class="cmtt-8">&#x00A0;=</span><span
  6819. class="cmtt-8">&#x00A0;[offset]</span><span
  6820. class="cmtt-8">&#x00A0;+</span><span
  6821. class="cmtt-8">&#x00A0;[cdim]</span><br class="fancyvrb" /><a
  6822. id="x1-102072r35"></a><span
  6823. class="cmr-6">35</span><span
  6824. class="cmtt-8">&#x00A0;</span><span
  6825. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6826. id="x1-102074r36"></a><span
  6827. class="cmr-6">36</span><span
  6828. class="cmtt-8">&#x00A0;</span><span
  6829. class="cmtt-8">&#x00A0;</span><span
  6830. class="cmtt-8">&#x00A0;</span><span
  6831. class="cmtt-8">&#x00A0;</span><span
  6832. class="cmtt-8">&#x00A0;</span><span
  6833. class="cmtt-8">&#x00A0;</span><span
  6834. class="cmtt-8">&#x00A0;</span><span
  6835. class="cmsy-8">}</span><br class="fancyvrb" /><a
  6836. id="x1-102076r37"></a><span
  6837. class="cmr-6">37</span><span
  6838. class="cmtt-8">&#x00A0;</span><span
  6839. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  6840. id="x1-102078r38"></a><span
  6841. class="cmr-6">38</span><span
  6842. class="cmtt-8">&#x00A0;</span><span
  6843. class="cmtt-8">&#x00A0;</span><span
  6844. class="cmtt-8">&#x00A0;20)</span><span
  6845. class="cmtt-8">&#x00A0;done</span></div>
  6846. <!--l. 229--><p class="noindent" >An end-of-packet condition during curve decode should be considered a nominal occurrence; if
  6847. end-of-packet is reached during any read operation above, floor decode is to return &#8217;unused&#8217;
  6848. status as if the <span
  6849. class="cmtt-12">[nonzero] </span>flag had been unset at the beginning of decode.
  6850. <!--l. 235--><p class="noindent" >Vector <span
  6851. class="cmtt-12">[floor1_Y] </span>contains the values from packet decode needed for floor 1 synthesis.
  6852. <!--l. 240--><p class="noindent" >
  6853. <h5 class="subsubsectionHead"><span class="titlemark">7.2.4. </span> <a
  6854. id="x1-1030007.2.4"></a>curve computation</h5>
  6855. <!--l. 242--><p class="noindent" >Curve computation is split into two logical steps; the first step derives final Y amplitude values
  6856. from the encoded, wrapped difference values taken from the bitstream. The second step
  6857. plots the curve lines. Also, although zero-difference values are used in the iterative
  6858. prediction to find final Y values, these points are conditionally skipped during final
  6859. line computation in step two. Skipping zero-difference values allows a smoother line
  6860. fit.
  6861. <!--l. 250--><p class="noindent" >Although some aspects of the below algorithm look like inconsequential optimizations,
  6862. implementors are warned to follow the details closely. Deviation from implementing a strictly
  6863. equivalent algorithm can result in serious decoding errors.
  6864. <!--l. 255--><p class="noindent" ><span
  6865. class="cmti-12">Additional note: </span>Although <span
  6866. class="cmtt-12">[floor1_final_Y] </span>values in the prediction loop and at the end of
  6867. step 1 are inherently limited by the prediction algorithm to [0, <span
  6868. class="cmtt-12">[range]</span>), it is possible to abuse
  6869. the setup and codebook machinery to produce negative or over-range results. We suggest that
  6870. decoder implementations guard the values in vector <span
  6871. class="cmtt-12">[floor1_final_Y] </span>by clamping each
  6872. element to [0, <span
  6873. class="cmtt-12">[range]</span>) after step 1. Variants of this suggestion are acceptable as valid floor1
  6874. setups cannot produce out of range values.
  6875. <!--l. 266--><p class="noindent" >
  6876. <dl class="description"><dt class="description">
  6877. <span
  6878. class="cmssbx-10x-x-120">step 1: amplitude value synthesis</span> </dt><dd
  6879. class="description">
  6880. <!--l. 268--><p class="noindent" >Unwrap the always-positive-or-zero values read from the packet into +/- difference
  6881. values, then apply to line prediction.
  6882. <!--l. 271--><p class="noindent" >
  6883. <div class="fancyvrb" id="fancyvrb31"><a
  6884. id="x1-103002r1"></a><span
  6885. class="cmr-6">1</span><span
  6886. class="cmtt-8">&#x00A0;</span><span
  6887. class="cmtt-8">&#x00A0;</span><span
  6888. class="cmtt-8">&#x00A0;</span><span
  6889. class="cmtt-8">&#x00A0;1)</span><span
  6890. class="cmtt-8">&#x00A0;[range]</span><span
  6891. class="cmtt-8">&#x00A0;=</span><span
  6892. class="cmtt-8">&#x00A0;vector</span><span
  6893. class="cmtt-8">&#x00A0;</span><span
  6894. class="cmsy-8">{</span><span
  6895. class="cmtt-8">&#x00A0;256,</span><span
  6896. class="cmtt-8">&#x00A0;128,</span><span
  6897. class="cmtt-8">&#x00A0;86,</span><span
  6898. class="cmtt-8">&#x00A0;64</span><span
  6899. class="cmtt-8">&#x00A0;</span><span
  6900. class="cmsy-8">}</span><span
  6901. class="cmtt-8">&#x00A0;element</span><span
  6902. class="cmtt-8">&#x00A0;([floor1_multiplier]-1)</span><br class="fancyvrb" /><a
  6903. id="x1-103004r2"></a><span
  6904. class="cmr-6">2</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;2)</span><span
  6909. class="cmtt-8">&#x00A0;vector</span><span
  6910. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  6911. class="cmtt-8">&#x00A0;element</span><span
  6912. class="cmtt-8">&#x00A0;[0]</span><span
  6913. class="cmtt-8">&#x00A0;=</span><span
  6914. class="cmtt-8">&#x00A0;set</span>
  6915. <br class="fancyvrb" /><a
  6916. id="x1-103006r3"></a><span
  6917. class="cmr-6">3</span><span
  6918. class="cmtt-8">&#x00A0;</span><span
  6919. class="cmtt-8">&#x00A0;</span><span
  6920. class="cmtt-8">&#x00A0;</span><span
  6921. class="cmtt-8">&#x00A0;3)</span><span
  6922. class="cmtt-8">&#x00A0;vector</span><span
  6923. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  6924. class="cmtt-8">&#x00A0;element</span><span
  6925. class="cmtt-8">&#x00A0;[1]</span><span
  6926. class="cmtt-8">&#x00A0;=</span><span
  6927. class="cmtt-8">&#x00A0;set</span><br class="fancyvrb" /><a
  6928. id="x1-103008r4"></a><span
  6929. class="cmr-6">4</span><span
  6930. class="cmtt-8">&#x00A0;</span><span
  6931. class="cmtt-8">&#x00A0;</span><span
  6932. class="cmtt-8">&#x00A0;</span><span
  6933. class="cmtt-8">&#x00A0;4)</span><span
  6934. class="cmtt-8">&#x00A0;vector</span><span
  6935. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  6936. class="cmtt-8">&#x00A0;element</span><span
  6937. class="cmtt-8">&#x00A0;[0]</span><span
  6938. class="cmtt-8">&#x00A0;=</span><span
  6939. class="cmtt-8">&#x00A0;vector</span><span
  6940. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6941. class="cmtt-8">&#x00A0;element</span><span
  6942. class="cmtt-8">&#x00A0;[0]</span>
  6943. <br class="fancyvrb" /><a
  6944. id="x1-103010r5"></a><span
  6945. class="cmr-6">5</span><span
  6946. class="cmtt-8">&#x00A0;</span><span
  6947. class="cmtt-8">&#x00A0;</span><span
  6948. class="cmtt-8">&#x00A0;</span><span
  6949. class="cmtt-8">&#x00A0;5)</span><span
  6950. class="cmtt-8">&#x00A0;vector</span><span
  6951. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  6952. class="cmtt-8">&#x00A0;element</span><span
  6953. class="cmtt-8">&#x00A0;[1]</span><span
  6954. class="cmtt-8">&#x00A0;=</span><span
  6955. class="cmtt-8">&#x00A0;vector</span><span
  6956. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  6957. class="cmtt-8">&#x00A0;element</span><span
  6958. class="cmtt-8">&#x00A0;[1]</span><br class="fancyvrb" /><a
  6959. id="x1-103012r6"></a><span
  6960. class="cmr-6">6</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;6)</span><span
  6965. class="cmtt-8">&#x00A0;iterate</span><span
  6966. class="cmtt-8">&#x00A0;[i]</span><span
  6967. class="cmtt-8">&#x00A0;over</span><span
  6968. class="cmtt-8">&#x00A0;the</span><span
  6969. class="cmtt-8">&#x00A0;range</span><span
  6970. class="cmtt-8">&#x00A0;2</span><span
  6971. class="cmtt-8">&#x00A0;...</span><span
  6972. class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
  6973. class="cmtt-8">&#x00A0;</span><span
  6974. class="cmsy-8">{</span><br class="fancyvrb" /><a
  6975. id="x1-103014r7"></a><span
  6976. class="cmr-6">7</span><span
  6977. class="cmtt-8">&#x00A0;</span><span
  6978. class="cmtt-8">&#x00A0;</span>
  6979. <br class="fancyvrb" /><a
  6980. id="x1-103016r8"></a><span
  6981. class="cmr-6">8</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;7)</span><span
  6991. class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
  6992. class="cmtt-8">&#x00A0;=</span><span
  6993. class="cmtt-8">&#x00A0;</span><a
  6994. href="#x1-1220009.2.4"><span
  6995. class="cmtt-8">low_neighbor</span></a><span
  6996. class="cmtt-8">([floor1_X_list],[i])</span><br class="fancyvrb" /><a
  6997. id="x1-103018r9"></a><span
  6998. class="cmr-6">9</span><span
  6999. class="cmtt-8">&#x00A0;</span><span
  7000. class="cmtt-8">&#x00A0;</span><span
  7001. class="cmtt-8">&#x00A0;</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;8)</span><span
  7008. class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
  7009. class="cmtt-8">&#x00A0;=</span><span
  7010. class="cmtt-8">&#x00A0;</span><a
  7011. href="#x1-1230009.2.5"><span
  7012. class="cmtt-8">high_neighbor</span></a><span
  7013. class="cmtt-8">([floor1_X_list],[i])</span>
  7014. <br class="fancyvrb" /><a
  7015. id="x1-103020r10"></a><span
  7016. class="cmr-6">10</span><span
  7017. class="cmtt-8">&#x00A0;</span><span
  7018. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7019. id="x1-103022r11"></a><span
  7020. class="cmr-6">11</span><span
  7021. class="cmtt-8">&#x00A0;</span><span
  7022. class="cmtt-8">&#x00A0;</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;9)</span><span
  7030. class="cmtt-8">&#x00A0;[predicted]</span><span
  7031. class="cmtt-8">&#x00A0;=</span><span
  7032. class="cmtt-8">&#x00A0;</span><a
  7033. href="#x1-1240009.2.6"><span
  7034. class="cmtt-8">render_point</span></a><span
  7035. class="cmtt-8">(</span><span
  7036. class="cmtt-8">&#x00A0;vector</span><span
  7037. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  7038. class="cmtt-8">&#x00A0;element</span><span
  7039. class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
  7040. <br class="fancyvrb" /><a
  7041. id="x1-103024r12"></a><span
  7042. class="cmr-6">12</span><span
  7043. class="cmtt-8">&#x00A0;</span><span
  7044. class="cmtt-8">&#x00A0; </span><span
  7045. class="cmtt-8">&#x00A0;</span><span
  7046. class="cmtt-8">&#x00A0;</span><span
  7047. class="cmtt-8">&#x00A0;</span><span
  7048. class="cmtt-8">&#x00A0;</span><span
  7049. class="cmtt-8">&#x00A0;</span><span
  7050. class="cmtt-8">&#x00A0;vector</span><span
  7051. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7052. class="cmtt-8">&#x00A0;element</span><span
  7053. class="cmtt-8">&#x00A0;[low_neighbor_offset],</span>
  7054. <br class="fancyvrb" /><a
  7055. id="x1-103026r13"></a><span
  7056. class="cmr-6">13</span><span
  7057. class="cmtt-8">&#x00A0;</span><span
  7058. class="cmtt-8">&#x00A0;</span><span
  7059. class="cmtt-8">&#x00A0;</span><span
  7060. class="cmtt-8">&#x00A0;</span><span
  7061. class="cmtt-8">&#x00A0;</span><span
  7062. class="cmtt-8">&#x00A0;</span><span
  7063. class="cmtt-8">&#x00A0;</span><span
  7064. class="cmtt-8">&#x00A0;</span><span
  7065. class="cmtt-8">&#x00A0;</span><span
  7066. class="cmtt-8">&#x00A0;</span><span
  7067. class="cmtt-8">&#x00A0;</span><span
  7068. class="cmtt-8">&#x00A0;</span><span
  7069. class="cmtt-8">&#x00A0;</span><span
  7070. class="cmtt-8">&#x00A0;</span><span
  7071. class="cmtt-8">&#x00A0;</span><span
  7072. class="cmtt-8">&#x00A0;</span><span
  7073. class="cmtt-8">&#x00A0;</span><span
  7074. class="cmtt-8">&#x00A0;</span><span
  7075. class="cmtt-8">&#x00A0;</span><span
  7076. class="cmtt-8">&#x00A0;</span><span
  7077. class="cmtt-8">&#x00A0;</span><span
  7078. class="cmtt-8">&#x00A0;</span><span
  7079. class="cmtt-8">&#x00A0;</span><span
  7080. class="cmtt-8">&#x00A0;</span><span
  7081. class="cmtt-8">&#x00A0;</span><span
  7082. class="cmtt-8">&#x00A0;</span><span
  7083. class="cmtt-8">&#x00A0;</span><span
  7084. class="cmtt-8">&#x00A0;</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;</span><span
  7089. class="cmtt-8">&#x00A0;</span><span
  7090. class="cmtt-8">&#x00A0;</span><span
  7091. class="cmtt-8">&#x00A0;</span><span
  7092. class="cmtt-8">&#x00A0;</span><span
  7093. class="cmtt-8">&#x00A0;</span><span
  7094. class="cmtt-8">&#x00A0;</span><span
  7095. class="cmtt-8">&#x00A0;</span><span
  7096. class="cmtt-8">&#x00A0;vector</span><span
  7097. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  7098. class="cmtt-8">&#x00A0;element</span><span
  7099. class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
  7100. <br class="fancyvrb" /><a
  7101. id="x1-103028r14"></a><span
  7102. class="cmr-6">14</span><span
  7103. class="cmtt-8">&#x00A0;</span><span
  7104. class="cmtt-8">&#x00A0; </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;</span><span
  7109. class="cmtt-8">&#x00A0;</span><span
  7110. class="cmtt-8">&#x00A0;vector</span><span
  7111. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7112. class="cmtt-8">&#x00A0;element</span><span
  7113. class="cmtt-8">&#x00A0;[high_neighbor_offset],</span>
  7114. <br class="fancyvrb" /><a
  7115. id="x1-103030r15"></a><span
  7116. class="cmr-6">15</span><span
  7117. class="cmtt-8">&#x00A0;</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;</span><span
  7122. class="cmtt-8">&#x00A0;</span><span
  7123. class="cmtt-8">&#x00A0;</span><span
  7124. class="cmtt-8">&#x00A0;</span><span
  7125. class="cmtt-8">&#x00A0;</span><span
  7126. class="cmtt-8">&#x00A0;</span><span
  7127. class="cmtt-8">&#x00A0;</span><span
  7128. class="cmtt-8">&#x00A0;</span><span
  7129. class="cmtt-8">&#x00A0;</span><span
  7130. class="cmtt-8">&#x00A0;</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;</span><span
  7135. class="cmtt-8">&#x00A0;</span><span
  7136. class="cmtt-8">&#x00A0;</span><span
  7137. class="cmtt-8">&#x00A0;</span><span
  7138. class="cmtt-8">&#x00A0;</span><span
  7139. class="cmtt-8">&#x00A0;</span><span
  7140. class="cmtt-8">&#x00A0;</span><span
  7141. class="cmtt-8">&#x00A0;</span><span
  7142. class="cmtt-8">&#x00A0;</span><span
  7143. class="cmtt-8">&#x00A0;</span><span
  7144. class="cmtt-8">&#x00A0;</span><span
  7145. class="cmtt-8">&#x00A0;</span><span
  7146. class="cmtt-8">&#x00A0;</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;</span><span
  7151. class="cmtt-8">&#x00A0;</span><span
  7152. class="cmtt-8">&#x00A0;</span><span
  7153. class="cmtt-8">&#x00A0;</span><span
  7154. class="cmtt-8">&#x00A0;</span><span
  7155. class="cmtt-8">&#x00A0;</span><span
  7156. class="cmtt-8">&#x00A0;vector</span><span
  7157. class="cmtt-8">&#x00A0;[floor1_X_list]</span><span
  7158. class="cmtt-8">&#x00A0;element</span><span
  7159. class="cmtt-8">&#x00A0;[i]</span><span
  7160. class="cmtt-8">&#x00A0;)</span><br class="fancyvrb" /><a
  7161. id="x1-103032r16"></a><span
  7162. class="cmr-6">16</span><span
  7163. class="cmtt-8">&#x00A0;</span><span
  7164. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7165. id="x1-103034r17"></a><span
  7166. class="cmr-6">17</span><span
  7167. class="cmtt-8">&#x00A0;</span><span
  7168. class="cmtt-8">&#x00A0;</span><span
  7169. class="cmtt-8">&#x00A0;</span><span
  7170. class="cmtt-8">&#x00A0;</span><span
  7171. class="cmtt-8">&#x00A0;</span><span
  7172. class="cmtt-8">&#x00A0;</span><span
  7173. class="cmtt-8">&#x00A0;</span><span
  7174. class="cmtt-8">&#x00A0;10)</span><span
  7175. class="cmtt-8">&#x00A0;[val]</span><span
  7176. class="cmtt-8">&#x00A0;=</span><span
  7177. class="cmtt-8">&#x00A0;vector</span><span
  7178. class="cmtt-8">&#x00A0;[floor1_Y]</span><span
  7179. class="cmtt-8">&#x00A0;element</span><span
  7180. class="cmtt-8">&#x00A0;[i]</span>
  7181. <br class="fancyvrb" /><a
  7182. id="x1-103036r18"></a><span
  7183. class="cmr-6">18</span><span
  7184. class="cmtt-8">&#x00A0;</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;11)</span><span
  7192. class="cmtt-8">&#x00A0;[highroom]</span><span
  7193. class="cmtt-8">&#x00A0;=</span><span
  7194. class="cmtt-8">&#x00A0;[range]</span><span
  7195. class="cmtt-8">&#x00A0;-</span><span
  7196. class="cmtt-8">&#x00A0;[predicted]</span><br class="fancyvrb" /><a
  7197. id="x1-103038r19"></a><span
  7198. class="cmr-6">19</span><span
  7199. class="cmtt-8">&#x00A0;</span><span
  7200. class="cmtt-8">&#x00A0;</span><span
  7201. class="cmtt-8">&#x00A0;</span><span
  7202. class="cmtt-8">&#x00A0;</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;12)</span><span
  7207. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7208. class="cmtt-8">&#x00A0;</span><span
  7209. class="cmtt-8">&#x00A0;=</span><span
  7210. class="cmtt-8">&#x00A0;[predicted]</span>
  7211. <br class="fancyvrb" /><a
  7212. id="x1-103040r20"></a><span
  7213. class="cmr-6">20</span><span
  7214. class="cmtt-8">&#x00A0;</span><span
  7215. class="cmtt-8">&#x00A0;</span><span
  7216. class="cmtt-8">&#x00A0;</span><span
  7217. class="cmtt-8">&#x00A0;</span><span
  7218. class="cmtt-8">&#x00A0;</span><span
  7219. class="cmtt-8">&#x00A0;</span><span
  7220. class="cmtt-8">&#x00A0;</span><span
  7221. class="cmtt-8">&#x00A0;13)</span><span
  7222. class="cmtt-8">&#x00A0;if</span><span
  7223. class="cmtt-8">&#x00A0;(</span><span
  7224. class="cmtt-8">&#x00A0;[highroom]</span><span
  7225. class="cmtt-8">&#x00A0;is</span><span
  7226. class="cmtt-8">&#x00A0;less</span><span
  7227. class="cmtt-8">&#x00A0;than</span><span
  7228. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7229. class="cmtt-8">&#x00A0;)</span><span
  7230. class="cmtt-8">&#x00A0;</span><span
  7231. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7232. id="x1-103042r21"></a><span
  7233. class="cmr-6">21</span><span
  7234. class="cmtt-8">&#x00A0;</span><span
  7235. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7236. id="x1-103044r22"></a><span
  7237. class="cmr-6">22</span><span
  7238. class="cmtt-8">&#x00A0;</span><span
  7239. class="cmtt-8">&#x00A0;</span><span
  7240. class="cmtt-8">&#x00A0;</span><span
  7241. class="cmtt-8">&#x00A0;</span><span
  7242. class="cmtt-8">&#x00A0;</span><span
  7243. class="cmtt-8">&#x00A0;</span><span
  7244. class="cmtt-8">&#x00A0;</span><span
  7245. class="cmtt-8">&#x00A0;</span><span
  7246. class="cmtt-8">&#x00A0;</span><span
  7247. class="cmtt-8">&#x00A0;</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;14)</span><span
  7252. class="cmtt-8">&#x00A0;[room]</span><span
  7253. class="cmtt-8">&#x00A0;=</span><span
  7254. class="cmtt-8">&#x00A0;[highroom]</span><span
  7255. class="cmtt-8">&#x00A0;*</span><span
  7256. class="cmtt-8">&#x00A0;2</span><br class="fancyvrb" /><a
  7257. id="x1-103046r23"></a><span
  7258. class="cmr-6">23</span><span
  7259. class="cmtt-8">&#x00A0;</span><span
  7260. class="cmtt-8">&#x00A0;</span>
  7261. <br class="fancyvrb" /><a
  7262. id="x1-103048r24"></a><span
  7263. class="cmr-6">24</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="cmsy-8">}</span><span
  7277. class="cmtt-8">&#x00A0;else</span><span
  7278. class="cmtt-8">&#x00A0;[highroom]</span><span
  7279. class="cmtt-8">&#x00A0;is</span><span
  7280. class="cmtt-8">&#x00A0;not</span><span
  7281. class="cmtt-8">&#x00A0;less</span><span
  7282. class="cmtt-8">&#x00A0;than</span><span
  7283. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7284. class="cmtt-8">&#x00A0;</span><span
  7285. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7286. id="x1-103050r25"></a><span
  7287. class="cmr-6">25</span><span
  7288. class="cmtt-8">&#x00A0;</span><span
  7289. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7290. id="x1-103052r26"></a><span
  7291. class="cmr-6">26</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;</span><span
  7302. class="cmtt-8">&#x00A0;</span><span
  7303. class="cmtt-8">&#x00A0;</span><span
  7304. class="cmtt-8">&#x00A0;</span><span
  7305. class="cmtt-8">&#x00A0;15)</span><span
  7306. class="cmtt-8">&#x00A0;[room]</span><span
  7307. class="cmtt-8">&#x00A0;=</span><span
  7308. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7309. class="cmtt-8">&#x00A0;*</span><span
  7310. class="cmtt-8">&#x00A0;2</span><br class="fancyvrb" /><a
  7311. id="x1-103054r27"></a><span
  7312. class="cmr-6">27</span><span
  7313. class="cmtt-8">&#x00A0;</span><span
  7314. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7315. id="x1-103056r28"></a><span
  7316. class="cmr-6">28</span><span
  7317. class="cmtt-8">&#x00A0;</span><span
  7318. class="cmtt-8">&#x00A0;</span><span
  7319. class="cmtt-8">&#x00A0;</span><span
  7320. class="cmtt-8">&#x00A0;</span><span
  7321. class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><br class="fancyvrb" /><a
  7330. id="x1-103058r29"></a><span
  7331. class="cmr-6">29</span><span
  7332. class="cmtt-8">&#x00A0;</span><span
  7333. class="cmtt-8">&#x00A0;</span>
  7334. <br class="fancyvrb" /><a
  7335. id="x1-103060r30"></a><span
  7336. class="cmr-6">30</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;16)</span><span
  7345. class="cmtt-8">&#x00A0;if</span><span
  7346. class="cmtt-8">&#x00A0;(</span><span
  7347. class="cmtt-8">&#x00A0;[val]</span><span
  7348. class="cmtt-8">&#x00A0;is</span><span
  7349. class="cmtt-8">&#x00A0;nonzero</span><span
  7350. class="cmtt-8">&#x00A0;)</span><span
  7351. class="cmtt-8">&#x00A0;</span><span
  7352. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7353. id="x1-103062r31"></a><span
  7354. class="cmr-6">31</span><span
  7355. class="cmtt-8">&#x00A0;</span><span
  7356. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7357. id="x1-103064r32"></a><span
  7358. class="cmr-6">32</span><span
  7359. class="cmtt-8">&#x00A0;</span><span
  7360. class="cmtt-8">&#x00A0;</span><span
  7361. class="cmtt-8">&#x00A0;</span><span
  7362. class="cmtt-8">&#x00A0;</span><span
  7363. class="cmtt-8">&#x00A0;</span><span
  7364. class="cmtt-8">&#x00A0;</span><span
  7365. class="cmtt-8">&#x00A0;</span><span
  7366. class="cmtt-8">&#x00A0;</span><span
  7367. class="cmtt-8">&#x00A0;</span><span
  7368. class="cmtt-8">&#x00A0;</span><span
  7369. class="cmtt-8">&#x00A0;</span><span
  7370. class="cmtt-8">&#x00A0;</span><span
  7371. class="cmtt-8">&#x00A0;</span><span
  7372. class="cmtt-8">&#x00A0;17)</span><span
  7373. class="cmtt-8">&#x00A0;vector</span><span
  7374. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7375. class="cmtt-8">&#x00A0;element</span><span
  7376. class="cmtt-8">&#x00A0;[low_neighbor_offset]</span><span
  7377. class="cmtt-8">&#x00A0;=</span><span
  7378. class="cmtt-8">&#x00A0;set</span>
  7379. <br class="fancyvrb" /><a
  7380. id="x1-103066r33"></a><span
  7381. class="cmr-6">33</span><span
  7382. class="cmtt-8">&#x00A0;</span><span
  7383. class="cmtt-8">&#x00A0;</span><span
  7384. class="cmtt-8">&#x00A0;</span><span
  7385. class="cmtt-8">&#x00A0;</span><span
  7386. class="cmtt-8">&#x00A0;</span><span
  7387. class="cmtt-8">&#x00A0;</span><span
  7388. class="cmtt-8">&#x00A0;</span><span
  7389. class="cmtt-8">&#x00A0;</span><span
  7390. class="cmtt-8">&#x00A0;</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;18)</span><span
  7396. class="cmtt-8">&#x00A0;vector</span><span
  7397. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7398. class="cmtt-8">&#x00A0;element</span><span
  7399. class="cmtt-8">&#x00A0;[high_neighbor_offset]</span><span
  7400. class="cmtt-8">&#x00A0;=</span><span
  7401. class="cmtt-8">&#x00A0;set</span>
  7402. <br class="fancyvrb" /><a
  7403. id="x1-103068r34"></a><span
  7404. class="cmr-6">34</span><span
  7405. class="cmtt-8">&#x00A0;</span><span
  7406. class="cmtt-8">&#x00A0;</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;</span><span
  7415. class="cmtt-8">&#x00A0;</span><span
  7416. class="cmtt-8">&#x00A0;</span><span
  7417. class="cmtt-8">&#x00A0;</span><span
  7418. class="cmtt-8">&#x00A0;19)</span><span
  7419. class="cmtt-8">&#x00A0;vector</span><span
  7420. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  7421. class="cmtt-8">&#x00A0;element</span><span
  7422. class="cmtt-8">&#x00A0;[i]</span><span
  7423. class="cmtt-8">&#x00A0;=</span><span
  7424. class="cmtt-8">&#x00A0;set</span><br class="fancyvrb" /><a
  7425. id="x1-103070r35"></a><span
  7426. class="cmr-6">35</span><span
  7427. class="cmtt-8">&#x00A0;</span><span
  7428. class="cmtt-8">&#x00A0;</span><span
  7429. class="cmtt-8">&#x00A0;</span><span
  7430. class="cmtt-8">&#x00A0;</span><span
  7431. class="cmtt-8">&#x00A0;</span><span
  7432. class="cmtt-8">&#x00A0;</span><span
  7433. class="cmtt-8">&#x00A0;</span><span
  7434. class="cmtt-8">&#x00A0;</span><span
  7435. class="cmtt-8">&#x00A0;</span><span
  7436. class="cmtt-8">&#x00A0;</span><span
  7437. class="cmtt-8">&#x00A0;</span><span
  7438. class="cmtt-8">&#x00A0;</span><span
  7439. class="cmtt-8">&#x00A0;</span><span
  7440. class="cmtt-8">&#x00A0;20)</span><span
  7441. class="cmtt-8">&#x00A0;if</span><span
  7442. class="cmtt-8">&#x00A0;(</span><span
  7443. class="cmtt-8">&#x00A0;[val]</span><span
  7444. class="cmtt-8">&#x00A0;is</span><span
  7445. class="cmtt-8">&#x00A0;greater</span><span
  7446. class="cmtt-8">&#x00A0;than</span><span
  7447. class="cmtt-8">&#x00A0;or</span><span
  7448. class="cmtt-8">&#x00A0;equal</span><span
  7449. class="cmtt-8">&#x00A0;to</span><span
  7450. class="cmtt-8">&#x00A0;[room]</span><span
  7451. class="cmtt-8">&#x00A0;)</span><span
  7452. class="cmtt-8">&#x00A0;</span><span
  7453. class="cmsy-8">{</span>
  7454. <br class="fancyvrb" /><a
  7455. id="x1-103072r36"></a><span
  7456. class="cmr-6">36</span><span
  7457. class="cmtt-8">&#x00A0;</span><span
  7458. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7459. id="x1-103074r37"></a><span
  7460. class="cmr-6">37</span><span
  7461. class="cmtt-8">&#x00A0;</span><span
  7462. class="cmtt-8">&#x00A0;</span><span
  7463. class="cmtt-8">&#x00A0;</span><span
  7464. class="cmtt-8">&#x00A0;</span><span
  7465. class="cmtt-8">&#x00A0;</span><span
  7466. class="cmtt-8">&#x00A0;</span><span
  7467. class="cmtt-8">&#x00A0;</span><span
  7468. class="cmtt-8">&#x00A0;</span><span
  7469. class="cmtt-8">&#x00A0;</span><span
  7470. class="cmtt-8">&#x00A0;</span><span
  7471. class="cmtt-8">&#x00A0;</span><span
  7472. class="cmtt-8">&#x00A0;</span><span
  7473. class="cmtt-8">&#x00A0;</span><span
  7474. class="cmtt-8">&#x00A0;</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;21)</span><span
  7481. class="cmtt-8">&#x00A0;if</span><span
  7482. class="cmtt-8">&#x00A0;(</span><span
  7483. class="cmtt-8">&#x00A0;[highroom]</span><span
  7484. class="cmtt-8">&#x00A0;is</span><span
  7485. class="cmtt-8">&#x00A0;greater</span><span
  7486. class="cmtt-8">&#x00A0;than</span><span
  7487. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7488. class="cmtt-8">&#x00A0;)</span><span
  7489. class="cmtt-8">&#x00A0;</span><span
  7490. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7491. id="x1-103076r38"></a><span
  7492. class="cmr-6">38</span><span
  7493. class="cmtt-8">&#x00A0;</span><span
  7494. class="cmtt-8">&#x00A0;</span>
  7495. <br class="fancyvrb" /><a
  7496. id="x1-103078r39"></a><span
  7497. class="cmr-6">39</span><span
  7498. class="cmtt-8">&#x00A0;</span><span
  7499. class="cmtt-8">&#x00A0;</span><span
  7500. class="cmtt-8">&#x00A0;</span><span
  7501. class="cmtt-8">&#x00A0;</span><span
  7502. class="cmtt-8">&#x00A0;</span><span
  7503. class="cmtt-8">&#x00A0;</span><span
  7504. class="cmtt-8">&#x00A0;</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;</span><span
  7519. class="cmtt-8">&#x00A0;</span><span
  7520. class="cmtt-8">&#x00A0;</span><span
  7521. class="cmtt-8">&#x00A0;</span><span
  7522. class="cmtt-8">&#x00A0;</span><span
  7523. class="cmtt-8">&#x00A0;22)</span><span
  7524. class="cmtt-8">&#x00A0;vector</span><span
  7525. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7526. class="cmtt-8">&#x00A0;element</span><span
  7527. class="cmtt-8">&#x00A0;[i]</span><span
  7528. class="cmtt-8">&#x00A0;=</span><span
  7529. class="cmtt-8">&#x00A0;[val]</span><span
  7530. class="cmtt-8">&#x00A0;-</span><span
  7531. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7532. class="cmtt-8">&#x00A0;+</span><span
  7533. class="cmtt-8">&#x00A0;[predicted]</span>
  7534. <br class="fancyvrb" /><a
  7535. id="x1-103080r40"></a><span
  7536. class="cmr-6">40</span><span
  7537. class="cmtt-8">&#x00A0;</span><span
  7538. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7539. id="x1-103082r41"></a><span
  7540. class="cmr-6">41</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="cmtt-8">&#x00A0;</span><span
  7545. class="cmtt-8">&#x00A0;</span><span
  7546. class="cmtt-8">&#x00A0;</span><span
  7547. class="cmtt-8">&#x00A0;</span><span
  7548. class="cmtt-8">&#x00A0;</span><span
  7549. class="cmsy-8">}</span><span
  7550. class="cmtt-8">&#x00A0;else</span><span
  7551. class="cmtt-8">&#x00A0;[highroom]</span><span
  7552. class="cmtt-8">&#x00A0;is</span><span
  7553. class="cmtt-8">&#x00A0;not</span><span
  7554. class="cmtt-8">&#x00A0;greater</span><span
  7555. class="cmtt-8">&#x00A0;than</span><span
  7556. class="cmtt-8">&#x00A0;[lowroom]</span><span
  7557. class="cmtt-8">&#x00A0;</span><span
  7558. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7559. id="x1-103084r42"></a><span
  7560. class="cmr-6">42</span><span
  7561. class="cmtt-8">&#x00A0;</span><span
  7562. class="cmtt-8">&#x00A0;</span>
  7563. <br class="fancyvrb" /><a
  7564. id="x1-103086r43"></a><span
  7565. class="cmr-6">43</span><span
  7566. class="cmtt-8">&#x00A0;</span><span
  7567. class="cmtt-8">&#x00A0;</span><span
  7568. class="cmtt-8">&#x00A0;</span><span
  7569. class="cmtt-8">&#x00A0;</span><span
  7570. class="cmtt-8">&#x00A0;</span><span
  7571. class="cmtt-8">&#x00A0;</span><span
  7572. class="cmtt-8">&#x00A0;</span><span
  7573. class="cmtt-8">&#x00A0;</span><span
  7574. class="cmtt-8">&#x00A0;</span><span
  7575. class="cmtt-8">&#x00A0;</span><span
  7576. class="cmtt-8">&#x00A0;</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;</span><span
  7591. class="cmtt-8">&#x00A0;23)</span><span
  7592. class="cmtt-8">&#x00A0;vector</span><span
  7593. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7594. class="cmtt-8">&#x00A0;element</span><span
  7595. class="cmtt-8">&#x00A0;[i]</span><span
  7596. class="cmtt-8">&#x00A0;=</span><span
  7597. class="cmtt-8">&#x00A0;[predicted]</span><span
  7598. class="cmtt-8">&#x00A0;-</span><span
  7599. class="cmtt-8">&#x00A0;[val]</span><span
  7600. class="cmtt-8">&#x00A0;+</span><span
  7601. class="cmtt-8">&#x00A0;[highroom]</span><span
  7602. class="cmtt-8">&#x00A0;-</span><span
  7603. class="cmtt-8">&#x00A0;1</span>
  7604. <br class="fancyvrb" /><a
  7605. id="x1-103088r44"></a><span
  7606. class="cmr-6">44</span><span
  7607. class="cmtt-8">&#x00A0;</span><span
  7608. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7609. id="x1-103090r45"></a><span
  7610. class="cmr-6">45</span><span
  7611. class="cmtt-8">&#x00A0;</span><span
  7612. class="cmtt-8">&#x00A0;</span><span
  7613. class="cmtt-8">&#x00A0;</span><span
  7614. class="cmtt-8">&#x00A0;</span><span
  7615. class="cmtt-8">&#x00A0;</span><span
  7616. class="cmtt-8">&#x00A0;</span><span
  7617. class="cmtt-8">&#x00A0;</span><span
  7618. class="cmtt-8">&#x00A0;</span><span
  7619. class="cmtt-8">&#x00A0;</span><span
  7620. class="cmtt-8">&#x00A0;</span><span
  7621. class="cmtt-8">&#x00A0;</span><span
  7622. class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><br class="fancyvrb" /><a
  7636. id="x1-103092r46"></a><span
  7637. class="cmr-6">46</span><span
  7638. class="cmtt-8">&#x00A0;</span><span
  7639. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7640. id="x1-103094r47"></a><span
  7641. class="cmr-6">47</span><span
  7642. class="cmtt-8">&#x00A0;</span><span
  7643. class="cmtt-8">&#x00A0;</span><span
  7644. class="cmtt-8">&#x00A0;</span><span
  7645. class="cmtt-8">&#x00A0;</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;</span><span
  7660. class="cmsy-8">}</span><span
  7661. class="cmtt-8">&#x00A0;else</span><span
  7662. class="cmtt-8">&#x00A0;[val]</span><span
  7663. class="cmtt-8">&#x00A0;is</span><span
  7664. class="cmtt-8">&#x00A0;less</span><span
  7665. class="cmtt-8">&#x00A0;than</span><span
  7666. class="cmtt-8">&#x00A0;[room]</span><span
  7667. class="cmtt-8">&#x00A0;</span><span
  7668. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7669. id="x1-103096r48"></a><span
  7670. class="cmr-6">48</span><span
  7671. class="cmtt-8">&#x00A0;</span><span
  7672. class="cmtt-8">&#x00A0;</span>
  7673. <br class="fancyvrb" /><a
  7674. id="x1-103098r49"></a><span
  7675. class="cmr-6">49</span><span
  7676. class="cmtt-8">&#x00A0;</span><span
  7677. class="cmtt-8">&#x00A0;</span><span
  7678. class="cmtt-8">&#x00A0;</span><span
  7679. class="cmtt-8">&#x00A0;</span><span
  7680. class="cmtt-8">&#x00A0;</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;24)</span><span
  7698. class="cmtt-8">&#x00A0;if</span><span
  7699. class="cmtt-8">&#x00A0;([val]</span><span
  7700. class="cmtt-8">&#x00A0;is</span><span
  7701. class="cmtt-8">&#x00A0;odd)</span><span
  7702. class="cmtt-8">&#x00A0;</span><span
  7703. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7704. id="x1-103100r50"></a><span
  7705. class="cmr-6">50</span><span
  7706. class="cmtt-8">&#x00A0;</span><span
  7707. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7708. id="x1-103102r51"></a><span
  7709. class="cmr-6">51</span><span
  7710. class="cmtt-8">&#x00A0;</span><span
  7711. class="cmtt-8">&#x00A0;</span><span
  7712. class="cmtt-8">&#x00A0;</span><span
  7713. class="cmtt-8">&#x00A0;</span><span
  7714. class="cmtt-8">&#x00A0;</span><span
  7715. class="cmtt-8">&#x00A0;</span><span
  7716. class="cmtt-8">&#x00A0;</span><span
  7717. class="cmtt-8">&#x00A0;</span><span
  7718. class="cmtt-8">&#x00A0;</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;25)</span><span
  7736. class="cmtt-8">&#x00A0;vector</span><span
  7737. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7738. class="cmtt-8">&#x00A0;element</span><span
  7739. class="cmtt-8">&#x00A0;[i]</span><span
  7740. class="cmtt-8">&#x00A0;=</span>
  7741. <br class="fancyvrb" /><a
  7742. id="x1-103104r52"></a><span
  7743. class="cmr-6">52</span><span
  7744. class="cmtt-8">&#x00A0;</span><span
  7745. class="cmtt-8">&#x00A0;</span><span
  7746. class="cmtt-8">&#x00A0;</span><span
  7747. class="cmtt-8">&#x00A0;</span><span
  7748. class="cmtt-8">&#x00A0;</span><span
  7749. class="cmtt-8">&#x00A0;</span><span
  7750. class="cmtt-8">&#x00A0;</span><span
  7751. class="cmtt-8">&#x00A0;</span><span
  7752. class="cmtt-8">&#x00A0;</span><span
  7753. class="cmtt-8">&#x00A0;</span><span
  7754. class="cmtt-8">&#x00A0;</span><span
  7755. class="cmtt-8">&#x00A0;</span><span
  7756. class="cmtt-8">&#x00A0;</span><span
  7757. class="cmtt-8">&#x00A0;</span><span
  7758. class="cmtt-8">&#x00A0;</span><span
  7759. class="cmtt-8">&#x00A0;</span><span
  7760. class="cmtt-8">&#x00A0;</span><span
  7761. class="cmtt-8">&#x00A0;</span><span
  7762. class="cmtt-8">&#x00A0;</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="cmtt-8">&#x00A0;</span><span
  7772. class="cmtt-8">&#x00A0;</span><span
  7773. class="cmtt-8">&#x00A0;[predicted]</span><span
  7774. class="cmtt-8">&#x00A0;-</span><span
  7775. class="cmtt-8">&#x00A0;(([val]</span><span
  7776. class="cmtt-8">&#x00A0;+</span><span
  7777. class="cmtt-8">&#x00A0;1)</span><span
  7778. class="cmtt-8">&#x00A0;divided</span><span
  7779. class="cmtt-8">&#x00A0;by</span><span
  7780. class="cmtt-8">&#x00A0;</span><span
  7781. class="cmtt-8">&#x00A0;2</span><span
  7782. class="cmtt-8">&#x00A0;using</span><span
  7783. class="cmtt-8">&#x00A0;integer</span><span
  7784. class="cmtt-8">&#x00A0;division)</span><br class="fancyvrb" /><a
  7785. id="x1-103106r53"></a><span
  7786. class="cmr-6">53</span><span
  7787. class="cmtt-8">&#x00A0;</span><span
  7788. class="cmtt-8">&#x00A0;</span>
  7789. <br class="fancyvrb" /><a
  7790. id="x1-103108r54"></a><span
  7791. class="cmr-6">54</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;</span><span
  7815. class="cmtt-8">&#x00A0;</span><span
  7816. class="cmsy-8">}</span><span
  7817. class="cmtt-8">&#x00A0;else</span><span
  7818. class="cmtt-8">&#x00A0;[val]</span><span
  7819. class="cmtt-8">&#x00A0;is</span><span
  7820. class="cmtt-8">&#x00A0;even</span><span
  7821. class="cmtt-8">&#x00A0;</span><span
  7822. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7823. id="x1-103110r55"></a><span
  7824. class="cmr-6">55</span><span
  7825. class="cmtt-8">&#x00A0;</span><span
  7826. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7827. id="x1-103112r56"></a><span
  7828. class="cmr-6">56</span><span
  7829. class="cmtt-8">&#x00A0;</span><span
  7830. class="cmtt-8">&#x00A0;</span><span
  7831. class="cmtt-8">&#x00A0;</span><span
  7832. class="cmtt-8">&#x00A0;</span><span
  7833. class="cmtt-8">&#x00A0;</span><span
  7834. class="cmtt-8">&#x00A0;</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;26)</span><span
  7855. class="cmtt-8">&#x00A0;vector</span><span
  7856. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  7857. class="cmtt-8">&#x00A0;element</span><span
  7858. class="cmtt-8">&#x00A0;[i]</span><span
  7859. class="cmtt-8">&#x00A0;=</span>
  7860. <br class="fancyvrb" /><a
  7861. id="x1-103114r57"></a><span
  7862. class="cmr-6">57</span><span
  7863. class="cmtt-8">&#x00A0;</span><span
  7864. class="cmtt-8">&#x00A0;</span><span
  7865. class="cmtt-8">&#x00A0;</span><span
  7866. class="cmtt-8">&#x00A0;</span><span
  7867. class="cmtt-8">&#x00A0;</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="cmtt-8">&#x00A0;</span><span
  7887. class="cmtt-8">&#x00A0;</span><span
  7888. class="cmtt-8">&#x00A0;</span><span
  7889. class="cmtt-8">&#x00A0;</span><span
  7890. class="cmtt-8">&#x00A0;</span><span
  7891. class="cmtt-8">&#x00A0;</span><span
  7892. class="cmtt-8">&#x00A0;[predicted]</span><span
  7893. class="cmtt-8">&#x00A0;+</span><span
  7894. class="cmtt-8">&#x00A0;([val]</span><span
  7895. class="cmtt-8">&#x00A0;/</span><span
  7896. class="cmtt-8">&#x00A0;2</span><span
  7897. class="cmtt-8">&#x00A0;using</span><span
  7898. class="cmtt-8">&#x00A0;integer</span><span
  7899. class="cmtt-8">&#x00A0;division)</span><br class="fancyvrb" /><a
  7900. id="x1-103116r58"></a><span
  7901. class="cmr-6">58</span><span
  7902. class="cmtt-8">&#x00A0;</span><span
  7903. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7904. id="x1-103118r59"></a><span
  7905. class="cmr-6">59</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;</span><span
  7925. class="cmtt-8">&#x00A0;</span><span
  7926. class="cmtt-8">&#x00A0;</span><span
  7927. class="cmtt-8">&#x00A0;</span><span
  7928. class="cmtt-8">&#x00A0;</span><span
  7929. class="cmtt-8">&#x00A0;</span><span
  7930. class="cmsy-8">}</span><br class="fancyvrb" /><a
  7931. id="x1-103120r60"></a><span
  7932. class="cmr-6">60</span><span
  7933. class="cmtt-8">&#x00A0;</span><span
  7934. class="cmtt-8">&#x00A0;</span>
  7935. <br class="fancyvrb" /><a
  7936. id="x1-103122r61"></a><span
  7937. class="cmr-6">61</span><span
  7938. class="cmtt-8">&#x00A0;</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="cmsy-8">}</span><br class="fancyvrb" /><a
  7957. id="x1-103124r62"></a><span
  7958. class="cmr-6">62</span><span
  7959. class="cmtt-8">&#x00A0;</span><span
  7960. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7961. id="x1-103126r63"></a><span
  7962. class="cmr-6">63</span><span
  7963. class="cmtt-8">&#x00A0;</span><span
  7964. class="cmtt-8">&#x00A0;</span><span
  7965. class="cmtt-8">&#x00A0;</span><span
  7966. class="cmtt-8">&#x00A0;</span><span
  7967. class="cmtt-8">&#x00A0;</span><span
  7968. class="cmtt-8">&#x00A0;</span><span
  7969. class="cmtt-8">&#x00A0;</span><span
  7970. class="cmtt-8">&#x00A0;</span><span
  7971. class="cmtt-8">&#x00A0;</span><span
  7972. class="cmtt-8">&#x00A0;</span><span
  7973. class="cmtt-8">&#x00A0;</span><span
  7974. class="cmtt-8">&#x00A0;</span><span
  7975. class="cmsy-8">}</span><span
  7976. class="cmtt-8">&#x00A0;else</span><span
  7977. class="cmtt-8">&#x00A0;[val]</span><span
  7978. class="cmtt-8">&#x00A0;is</span><span
  7979. class="cmtt-8">&#x00A0;zero</span><span
  7980. class="cmtt-8">&#x00A0;</span><span
  7981. class="cmsy-8">{</span><br class="fancyvrb" /><a
  7982. id="x1-103128r64"></a><span
  7983. class="cmr-6">64</span><span
  7984. class="cmtt-8">&#x00A0;</span><span
  7985. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  7986. id="x1-103130r65"></a><span
  7987. class="cmr-6">65</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;27)</span><span
  8002. class="cmtt-8">&#x00A0;vector</span><span
  8003. class="cmtt-8">&#x00A0;[floor1_step2_flag]</span><span
  8004. class="cmtt-8">&#x00A0;element</span><span
  8005. class="cmtt-8">&#x00A0;[i]</span><span
  8006. class="cmtt-8">&#x00A0;=</span><span
  8007. class="cmtt-8">&#x00A0;unset</span>
  8008. <br class="fancyvrb" /><a
  8009. id="x1-103132r66"></a><span
  8010. class="cmr-6">66</span><span
  8011. class="cmtt-8">&#x00A0;</span><span
  8012. class="cmtt-8">&#x00A0;</span><span
  8013. class="cmtt-8">&#x00A0;</span><span
  8014. class="cmtt-8">&#x00A0;</span><span
  8015. class="cmtt-8">&#x00A0;</span><span
  8016. class="cmtt-8">&#x00A0;</span><span
  8017. class="cmtt-8">&#x00A0;</span><span
  8018. class="cmtt-8">&#x00A0;</span><span
  8019. class="cmtt-8">&#x00A0;</span><span
  8020. class="cmtt-8">&#x00A0;</span><span
  8021. class="cmtt-8">&#x00A0;</span><span
  8022. class="cmtt-8">&#x00A0;</span><span
  8023. class="cmtt-8">&#x00A0;</span><span
  8024. class="cmtt-8">&#x00A0;28)</span><span
  8025. class="cmtt-8">&#x00A0;vector</span><span
  8026. class="cmtt-8">&#x00A0;[floor1_final_Y]</span><span
  8027. class="cmtt-8">&#x00A0;element</span><span
  8028. class="cmtt-8">&#x00A0;[i]</span><span
  8029. class="cmtt-8">&#x00A0;=</span><span
  8030. class="cmtt-8">&#x00A0;[predicted]</span><br class="fancyvrb" /><a
  8031. id="x1-103134r67"></a><span
  8032. class="cmr-6">67</span><span
  8033. class="cmtt-8">&#x00A0;</span><span
  8034. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8035. id="x1-103136r68"></a><span
  8036. class="cmr-6">68</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="cmtt-8">&#x00A0;</span><span
  8047. class="cmtt-8">&#x00A0;</span><span
  8048. class="cmtt-8">&#x00A0;</span><span
  8049. class="cmsy-8">}</span><br class="fancyvrb" /><a
  8050. id="x1-103138r69"></a><span
  8051. class="cmr-6">69</span><span
  8052. class="cmtt-8">&#x00A0;</span><span
  8053. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8054. id="x1-103140r70"></a><span
  8055. class="cmr-6">70</span><span
  8056. class="cmtt-8">&#x00A0;</span><span
  8057. class="cmtt-8">&#x00A0;</span><span
  8058. class="cmtt-8">&#x00A0;</span><span
  8059. class="cmtt-8">&#x00A0;</span><span
  8060. class="cmtt-8">&#x00A0;</span><span
  8061. class="cmtt-8">&#x00A0;</span><span
  8062. class="cmtt-8">&#x00A0;</span><span
  8063. class="cmsy-8">}</span><br class="fancyvrb" /><a
  8064. id="x1-103142r71"></a><span
  8065. class="cmr-6">71</span><span
  8066. class="cmtt-8">&#x00A0;</span><span
  8067. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8068. id="x1-103144r72"></a><span
  8069. class="cmr-6">72</span><span
  8070. class="cmtt-8">&#x00A0;</span><span
  8071. class="cmtt-8">&#x00A0;</span><span
  8072. class="cmtt-8">&#x00A0;29)</span><span
  8073. class="cmtt-8">&#x00A0;done</span><br class="fancyvrb" /><a
  8074. id="x1-103146r73"></a><span
  8075. class="cmr-6">73</span><span
  8076. class="cmtt-8">&#x00A0;</span><span
  8077. class="cmtt-8">&#x00A0;</span></div>
  8078. </dd><dt class="description">
  8079. <span
  8080. class="cmssbx-10x-x-120">step 2: curve synthesis</span> </dt><dd
  8081. class="description">
  8082. <!--l. 351--><p class="noindent" >Curve synthesis generates a return vector <span
  8083. class="cmtt-12">[floor] </span>of length <span
  8084. class="cmtt-12">[n] </span>(where <span
  8085. class="cmtt-12">[n] </span>is provided by
  8086. the decode process calling to floor decode). Floor 1 curve synthesis makes use of the
  8087. <span
  8088. class="cmtt-12">[floor1_X_list]</span>, <span
  8089. class="cmtt-12">[floor1_final_Y] </span>and <span
  8090. class="cmtt-12">[floor1_step2_flag] </span>vectors, as well as
  8091. [floor1_multiplier] and [floor1_values] values.
  8092. <!--l. 358--><p class="noindent" >Decode begins by sorting the scalars from vectors <span
  8093. class="cmtt-12">[floor1_X_list]</span>, <span
  8094. class="cmtt-12">[floor1_final_Y] </span>and
  8095. <span
  8096. class="cmtt-12">[floor1_step2_flag] </span>together into new vectors <span
  8097. class="cmtt-12">[floor1_X_list]&#8217;</span>, <span
  8098. class="cmtt-12">[floor1_final_Y]&#8217;</span>
  8099. and <span
  8100. class="cmtt-12">[floor1_step2_flag]&#8217; </span>according to ascending sort order of the values in
  8101. <span
  8102. class="cmtt-12">[floor1_X_list]</span>. That is, sort the values of <span
  8103. class="cmtt-12">[floor1_X_list] </span>and then apply the same
  8104. permutation to elements of the other two vectors so that the X, Y and step2_flag values
  8105. still match.
  8106. <!--l. 368--><p class="noindent" >Then compute the final curve in one pass:
  8107. <!--l. 370--><p class="noindent" >
  8108. <div class="fancyvrb" id="fancyvrb32"><a
  8109. id="x1-103148r1"></a><span
  8110. class="cmr-6">1</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;1)</span><span
  8115. class="cmtt-8">&#x00A0;[hx]</span><span
  8116. class="cmtt-8">&#x00A0;=</span><span
  8117. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  8118. id="x1-103150r2"></a><span
  8119. class="cmr-6">2</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;2)</span><span
  8124. class="cmtt-8">&#x00A0;[lx]</span><span
  8125. class="cmtt-8">&#x00A0;=</span><span
  8126. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  8127. id="x1-103152r3"></a><span
  8128. class="cmr-6">3</span><span
  8129. class="cmtt-8">&#x00A0;</span><span
  8130. class="cmtt-8">&#x00A0;</span><span
  8131. class="cmtt-8">&#x00A0;</span><span
  8132. class="cmtt-8">&#x00A0;3)</span><span
  8133. class="cmtt-8">&#x00A0;[ly]</span><span
  8134. class="cmtt-8">&#x00A0;=</span><span
  8135. class="cmtt-8">&#x00A0;vector</span><span
  8136. class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
  8137. class="cmtt-8">&#x00A0;element</span><span
  8138. class="cmtt-8">&#x00A0;[0]</span><span
  8139. class="cmtt-8">&#x00A0;*</span><span
  8140. class="cmtt-8">&#x00A0;[floor1_multiplier]</span>
  8141. <br class="fancyvrb" /><a
  8142. id="x1-103154r4"></a><span
  8143. class="cmr-6">4</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;4)</span><span
  8148. class="cmtt-8">&#x00A0;iterate</span><span
  8149. class="cmtt-8">&#x00A0;[i]</span><span
  8150. class="cmtt-8">&#x00A0;over</span><span
  8151. class="cmtt-8">&#x00A0;the</span><span
  8152. class="cmtt-8">&#x00A0;range</span><span
  8153. class="cmtt-8">&#x00A0;1</span><span
  8154. class="cmtt-8">&#x00A0;...</span><span
  8155. class="cmtt-8">&#x00A0;[floor1_values]-1</span><span
  8156. class="cmtt-8">&#x00A0;</span><span
  8157. class="cmsy-8">{</span><br class="fancyvrb" /><a
  8158. id="x1-103156r5"></a><span
  8159. class="cmr-6">5</span><span
  8160. class="cmtt-8">&#x00A0;</span><span
  8161. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8162. id="x1-103158r6"></a><span
  8163. class="cmr-6">6</span><span
  8164. class="cmtt-8">&#x00A0;</span><span
  8165. class="cmtt-8">&#x00A0;</span><span
  8166. class="cmtt-8">&#x00A0;</span><span
  8167. class="cmtt-8">&#x00A0;</span><span
  8168. class="cmtt-8">&#x00A0;</span><span
  8169. class="cmtt-8">&#x00A0;</span><span
  8170. class="cmtt-8">&#x00A0;</span><span
  8171. class="cmtt-8">&#x00A0;</span><span
  8172. class="cmtt-8">&#x00A0;5)</span><span
  8173. class="cmtt-8">&#x00A0;if</span><span
  8174. class="cmtt-8">&#x00A0;(</span><span
  8175. class="cmtt-8">&#x00A0;[floor1_step2_flag]&#8217;</span><span
  8176. class="cmtt-8">&#x00A0;element</span><span
  8177. class="cmtt-8">&#x00A0;[i]</span><span
  8178. class="cmtt-8">&#x00A0;is</span><span
  8179. class="cmtt-8">&#x00A0;set</span><span
  8180. class="cmtt-8">&#x00A0;)</span><span
  8181. class="cmtt-8">&#x00A0;</span><span
  8182. class="cmsy-8">{</span><br class="fancyvrb" /><a
  8183. id="x1-103160r7"></a><span
  8184. class="cmr-6">7</span><span
  8185. class="cmtt-8">&#x00A0;</span><span
  8186. class="cmtt-8">&#x00A0;</span>
  8187. <br class="fancyvrb" /><a
  8188. id="x1-103162r8"></a><span
  8189. class="cmr-6">8</span><span
  8190. class="cmtt-8">&#x00A0;</span><span
  8191. class="cmtt-8">&#x00A0;</span><span
  8192. class="cmtt-8">&#x00A0;</span><span
  8193. class="cmtt-8">&#x00A0;</span><span
  8194. class="cmtt-8">&#x00A0;</span><span
  8195. class="cmtt-8">&#x00A0;</span><span
  8196. class="cmtt-8">&#x00A0;</span><span
  8197. class="cmtt-8">&#x00A0;</span><span
  8198. class="cmtt-8">&#x00A0;</span><span
  8199. class="cmtt-8">&#x00A0;</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;6)</span><span
  8205. class="cmtt-8">&#x00A0;[hy]</span><span
  8206. class="cmtt-8">&#x00A0;=</span><span
  8207. class="cmtt-8">&#x00A0;[floor1_final_Y]&#8217;</span><span
  8208. class="cmtt-8">&#x00A0;element</span><span
  8209. class="cmtt-8">&#x00A0;[i]</span><span
  8210. class="cmtt-8">&#x00A0;*</span><span
  8211. class="cmtt-8">&#x00A0;[floor1_multiplier]</span><br class="fancyvrb" /><a
  8212. id="x1-103164r9"></a><span
  8213. class="cmr-6">9</span><span
  8214. class="cmtt-8">&#x00A0;</span><span
  8215. class="cmtt-8">&#x00A0;</span><span
  8216. class="cmtt-8">&#x00A0; </span><span
  8217. class="cmtt-8">&#x00A0;</span><span
  8218. class="cmtt-8">&#x00A0;</span><span
  8219. class="cmtt-8">&#x00A0;</span><span
  8220. class="cmtt-8">&#x00A0;</span><span
  8221. class="cmtt-8">&#x00A0;7)</span><span
  8222. class="cmtt-8">&#x00A0;[hx]</span><span
  8223. class="cmtt-8">&#x00A0;=</span><span
  8224. class="cmtt-8">&#x00A0;[floor1_X_list]&#8217;</span><span
  8225. class="cmtt-8">&#x00A0;element</span><span
  8226. class="cmtt-8">&#x00A0;[i]</span>
  8227. <br class="fancyvrb" /><a
  8228. id="x1-103166r10"></a><span
  8229. class="cmr-6">10</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;</span><span
  8241. class="cmtt-8">&#x00A0;</span><span
  8242. class="cmtt-8">&#x00A0;</span><span
  8243. class="cmtt-8">&#x00A0;</span><span
  8244. class="cmtt-8">&#x00A0;8)</span><span
  8245. class="cmtt-8">&#x00A0;</span><a
  8246. href="#x1-1250009.2.7"><span
  8247. class="cmtt-8">render_line</span></a><span
  8248. class="cmtt-8">(</span><span
  8249. class="cmtt-8">&#x00A0;[lx],</span><span
  8250. class="cmtt-8">&#x00A0;[ly],</span><span
  8251. class="cmtt-8">&#x00A0;[hx],</span><span
  8252. class="cmtt-8">&#x00A0;[hy],</span><span
  8253. class="cmtt-8">&#x00A0;[floor]</span><span
  8254. class="cmtt-8">&#x00A0;)</span><br class="fancyvrb" /><a
  8255. id="x1-103168r11"></a><span
  8256. class="cmr-6">11</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;</span><span
  8264. class="cmtt-8">&#x00A0;</span><span
  8265. class="cmtt-8">&#x00A0;</span><span
  8266. class="cmtt-8">&#x00A0;</span><span
  8267. class="cmtt-8">&#x00A0;</span><span
  8268. class="cmtt-8">&#x00A0;</span><span
  8269. class="cmtt-8">&#x00A0;</span><span
  8270. class="cmtt-8">&#x00A0;</span><span
  8271. class="cmtt-8">&#x00A0;9)</span><span
  8272. class="cmtt-8">&#x00A0;[lx]</span><span
  8273. class="cmtt-8">&#x00A0;=</span><span
  8274. class="cmtt-8">&#x00A0;[hx]</span><br class="fancyvrb" /><a
  8275. id="x1-103170r12"></a><span
  8276. class="cmr-6">12</span><span
  8277. class="cmtt-8">&#x00A0;</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;10)</span><span
  8283. class="cmtt-8">&#x00A0;[ly]</span><span
  8284. class="cmtt-8">&#x00A0;=</span><span
  8285. class="cmtt-8">&#x00A0;[hy]</span>
  8286. <br class="fancyvrb" /><a
  8287. id="x1-103172r13"></a><span
  8288. class="cmr-6">13</span><span
  8289. class="cmtt-8">&#x00A0;</span><span
  8290. class="cmtt-8">&#x00A0;</span><span
  8291. class="cmtt-8">&#x00A0;</span><span
  8292. class="cmtt-8">&#x00A0;</span><span
  8293. class="cmtt-8">&#x00A0;</span><span
  8294. class="cmtt-8">&#x00A0;</span><span
  8295. class="cmtt-8">&#x00A0;</span><span
  8296. class="cmtt-8">&#x00A0;</span><span
  8297. class="cmtt-8">&#x00A0;</span><span
  8298. class="cmtt-8">&#x00A0;</span><span
  8299. class="cmtt-8">&#x00A0;</span><span
  8300. class="cmtt-8">&#x00A0;</span><span
  8301. class="cmsy-8">}</span><br class="fancyvrb" /><a
  8302. id="x1-103174r14"></a><span
  8303. class="cmr-6">14</span><span
  8304. class="cmtt-8">&#x00A0;</span><span
  8305. class="cmtt-8">&#x00A0;</span><span
  8306. class="cmtt-8">&#x00A0;</span><span
  8307. class="cmtt-8">&#x00A0;</span><span
  8308. class="cmtt-8">&#x00A0;</span><span
  8309. class="cmtt-8">&#x00A0;</span><span
  8310. class="cmtt-8">&#x00A0;</span><span
  8311. class="cmsy-8">}</span><br class="fancyvrb" /><a
  8312. id="x1-103176r15"></a><span
  8313. class="cmr-6">15</span><span
  8314. class="cmtt-8">&#x00A0;</span><span
  8315. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8316. id="x1-103178r16"></a><span
  8317. class="cmr-6">16</span><span
  8318. class="cmtt-8">&#x00A0;</span><span
  8319. class="cmtt-8">&#x00A0;</span><span
  8320. class="cmtt-8">&#x00A0;11)</span><span
  8321. class="cmtt-8">&#x00A0;if</span><span
  8322. class="cmtt-8">&#x00A0;(</span><span
  8323. class="cmtt-8">&#x00A0;[hx]</span><span
  8324. class="cmtt-8">&#x00A0;is</span><span
  8325. class="cmtt-8">&#x00A0;less</span><span
  8326. class="cmtt-8">&#x00A0;than</span><span
  8327. class="cmtt-8">&#x00A0;[n]</span><span
  8328. class="cmtt-8">&#x00A0;)</span><span
  8329. class="cmtt-8">&#x00A0;</span><span
  8330. class="cmsy-8">{</span><br class="fancyvrb" /><a
  8331. id="x1-103180r17"></a><span
  8332. class="cmr-6">17</span><span
  8333. class="cmtt-8">&#x00A0;</span><span
  8334. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8335. id="x1-103182r18"></a><span
  8336. class="cmr-6">18</span><span
  8337. class="cmtt-8">&#x00A0;</span><span
  8338. class="cmtt-8">&#x00A0;</span><span
  8339. class="cmtt-8">&#x00A0;</span><span
  8340. class="cmtt-8">&#x00A0;</span><span
  8341. class="cmtt-8">&#x00A0;</span><span
  8342. class="cmtt-8">&#x00A0;</span><span
  8343. class="cmtt-8">&#x00A0;</span><span
  8344. class="cmtt-8">&#x00A0;</span><span
  8345. class="cmtt-8">&#x00A0;</span><span
  8346. class="cmtt-8">&#x00A0;12)</span><span
  8347. class="cmtt-8">&#x00A0;</span><a
  8348. href="#x1-1250009.2.7"><span
  8349. class="cmtt-8">render_line</span></a><span
  8350. class="cmtt-8">(</span><span
  8351. class="cmtt-8">&#x00A0;[hx],</span><span
  8352. class="cmtt-8">&#x00A0;[hy],</span><span
  8353. class="cmtt-8">&#x00A0;[n],</span><span
  8354. class="cmtt-8">&#x00A0;[hy],</span><span
  8355. class="cmtt-8">&#x00A0;[floor]</span><span
  8356. class="cmtt-8">&#x00A0;)</span>
  8357. <br class="fancyvrb" /><a
  8358. id="x1-103184r19"></a><span
  8359. class="cmr-6">19</span><span
  8360. class="cmtt-8">&#x00A0;</span><span
  8361. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8362. id="x1-103186r20"></a><span
  8363. class="cmr-6">20</span><span
  8364. class="cmtt-8">&#x00A0;</span><span
  8365. class="cmtt-8">&#x00A0;</span><span
  8366. class="cmtt-8">&#x00A0;</span><span
  8367. class="cmtt-8">&#x00A0;</span><span
  8368. class="cmtt-8">&#x00A0;</span><span
  8369. class="cmtt-8">&#x00A0;</span><span
  8370. class="cmtt-8">&#x00A0;</span><span
  8371. class="cmsy-8">}</span><br class="fancyvrb" /><a
  8372. id="x1-103188r21"></a><span
  8373. class="cmr-6">21</span><span
  8374. class="cmtt-8">&#x00A0;</span><span
  8375. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8376. id="x1-103190r22"></a><span
  8377. class="cmr-6">22</span><span
  8378. class="cmtt-8">&#x00A0;</span><span
  8379. class="cmtt-8">&#x00A0;</span><span
  8380. class="cmtt-8">&#x00A0;13)</span><span
  8381. class="cmtt-8">&#x00A0;if</span><span
  8382. class="cmtt-8">&#x00A0;(</span><span
  8383. class="cmtt-8">&#x00A0;[hx]</span><span
  8384. class="cmtt-8">&#x00A0;is</span><span
  8385. class="cmtt-8">&#x00A0;greater</span><span
  8386. class="cmtt-8">&#x00A0;than</span><span
  8387. class="cmtt-8">&#x00A0;[n]</span><span
  8388. class="cmtt-8">&#x00A0;)</span><span
  8389. class="cmtt-8">&#x00A0;</span><span
  8390. class="cmsy-8">{</span><br class="fancyvrb" /><a
  8391. id="x1-103192r23"></a><span
  8392. class="cmr-6">23</span><span
  8393. class="cmtt-8">&#x00A0;</span><span
  8394. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8395. id="x1-103194r24"></a><span
  8396. class="cmr-6">24</span><span
  8397. class="cmtt-8">&#x00A0;</span><span
  8398. class="cmtt-8">&#x00A0;</span><span
  8399. class="cmtt-8">&#x00A0;</span><span
  8400. class="cmtt-8">&#x00A0;</span><span
  8401. class="cmtt-8">&#x00A0;</span><span
  8402. class="cmtt-8">&#x00A0;</span><span
  8403. class="cmtt-8">&#x00A0;</span><span
  8404. class="cmtt-8">&#x00A0;</span><span
  8405. class="cmtt-8">&#x00A0;</span><span
  8406. class="cmtt-8">&#x00A0;</span><span
  8407. class="cmtt-8">&#x00A0;</span><span
  8408. class="cmtt-8">&#x00A0;</span><span
  8409. class="cmtt-8">&#x00A0;</span><span
  8410. class="cmtt-8">&#x00A0;14)</span><span
  8411. class="cmtt-8">&#x00A0;truncate</span><span
  8412. class="cmtt-8">&#x00A0;vector</span><span
  8413. class="cmtt-8">&#x00A0;[floor]</span><span
  8414. class="cmtt-8">&#x00A0;to</span><span
  8415. class="cmtt-8">&#x00A0;[n]</span><span
  8416. class="cmtt-8">&#x00A0;elements</span>
  8417. <br class="fancyvrb" /><a
  8418. id="x1-103196r25"></a><span
  8419. class="cmr-6">25</span><span
  8420. class="cmtt-8">&#x00A0;</span><span
  8421. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8422. id="x1-103198r26"></a><span
  8423. class="cmr-6">26</span><span
  8424. class="cmtt-8">&#x00A0;</span><span
  8425. class="cmtt-8">&#x00A0;</span><span
  8426. class="cmtt-8">&#x00A0;</span><span
  8427. class="cmtt-8">&#x00A0;</span><span
  8428. class="cmtt-8">&#x00A0;</span><span
  8429. class="cmtt-8">&#x00A0;</span><span
  8430. class="cmtt-8">&#x00A0;</span><span
  8431. class="cmsy-8">}</span><br class="fancyvrb" /><a
  8432. id="x1-103200r27"></a><span
  8433. class="cmr-6">27</span><span
  8434. class="cmtt-8">&#x00A0;</span><span
  8435. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8436. id="x1-103202r28"></a><span
  8437. class="cmr-6">28</span><span
  8438. class="cmtt-8">&#x00A0;</span><span
  8439. class="cmtt-8">&#x00A0;</span><span
  8440. class="cmtt-8">&#x00A0;15)</span><span
  8441. class="cmtt-8">&#x00A0;for</span><span
  8442. class="cmtt-8">&#x00A0;each</span><span
  8443. class="cmtt-8">&#x00A0;scalar</span><span
  8444. class="cmtt-8">&#x00A0;in</span><span
  8445. class="cmtt-8">&#x00A0;vector</span><span
  8446. class="cmtt-8">&#x00A0;[floor],</span><span
  8447. class="cmtt-8">&#x00A0;perform</span><span
  8448. class="cmtt-8">&#x00A0;a</span><span
  8449. class="cmtt-8">&#x00A0;lookup</span><span
  8450. class="cmtt-8">&#x00A0;substitution</span><span
  8451. class="cmtt-8">&#x00A0;using</span>
  8452. <br class="fancyvrb" /><a
  8453. id="x1-103204r29"></a><span
  8454. class="cmr-6">29</span><span
  8455. class="cmtt-8">&#x00A0;</span><span
  8456. class="cmtt-8">&#x00A0;</span><span
  8457. class="cmtt-8">&#x00A0;</span><span
  8458. class="cmtt-8">&#x00A0;</span><span
  8459. class="cmtt-8">&#x00A0;</span><span
  8460. class="cmtt-8">&#x00A0;</span><span
  8461. class="cmtt-8">&#x00A0;the</span><span
  8462. class="cmtt-8">&#x00A0;scalar</span><span
  8463. class="cmtt-8">&#x00A0;value</span><span
  8464. class="cmtt-8">&#x00A0;from</span><span
  8465. class="cmtt-8">&#x00A0;[floor]</span><span
  8466. class="cmtt-8">&#x00A0;as</span><span
  8467. class="cmtt-8">&#x00A0;an</span><span
  8468. class="cmtt-8">&#x00A0;offset</span><span
  8469. class="cmtt-8">&#x00A0;into</span><span
  8470. class="cmtt-8">&#x00A0;the</span><span
  8471. class="cmtt-8">&#x00A0;vector</span><span
  8472. class="cmtt-8">&#x00A0;</span><a
  8473. href="#x1-12700010.1"><span
  8474. class="cmtt-8">[floor1_inverse_dB_static_table]</span></a><br class="fancyvrb" /><a
  8475. id="x1-103206r30"></a><span
  8476. class="cmr-6">30</span><span
  8477. class="cmtt-8">&#x00A0;</span><span
  8478. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8479. id="x1-103208r31"></a><span
  8480. class="cmr-6">31</span><span
  8481. class="cmtt-8">&#x00A0;</span><span
  8482. class="cmtt-8">&#x00A0;</span><span
  8483. class="cmtt-8">&#x00A0;16)</span><span
  8484. class="cmtt-8">&#x00A0;done</span><br class="fancyvrb" /><a
  8485. id="x1-103210r32"></a><span
  8486. class="cmr-6">32</span><span
  8487. class="cmtt-8">&#x00A0;</span><span
  8488. class="cmtt-8">&#x00A0;</span></div>
  8489. </dd></dl>
  8490. <h3 class="sectionHead"><span class="titlemark">8. </span> <a
  8491. id="x1-1040008"></a>Residue setup and decode</h3>
  8492. <!--l. 6--><p class="noindent" >
  8493. <h4 class="subsectionHead"><span class="titlemark">8.1. </span> <a
  8494. id="x1-1050008.1"></a>Overview</h4>
  8495. <!--l. 8--><p class="noindent" >A residue vector represents the fine detail of the audio spectrum of one channel in an audio frame
  8496. after the encoder subtracts the floor curve and performs any channel coupling. A residue vector
  8497. may represent spectral lines, spectral magnitude, spectral phase or hybrids as mixed by channel
  8498. coupling. The exact semantic content of the vector does not matter to the residue
  8499. abstraction.
  8500. <!--l. 15--><p class="noindent" >Whatever the exact qualities, the Vorbis residue abstraction codes the residue vectors into the
  8501. bitstream packet, and then reconstructs the vectors during decode. Vorbis makes use of three
  8502. different encoding variants (numbered 0, 1 and 2) of the same basic vector encoding
  8503. abstraction.
  8504. <!--l. 23--><p class="noindent" >
  8505. <h4 class="subsectionHead"><span class="titlemark">8.2. </span> <a
  8506. id="x1-1060008.2"></a>Residue format</h4>
  8507. <!--l. 25--><p class="noindent" >Residue format partitions each vector in the vector bundle into chunks, classifies each
  8508. chunk, encodes the chunk classifications and finally encodes the chunks themselves
  8509. using the the specific VQ arrangement defined for each selected classification. The
  8510. exact interleaving and partitioning vary by residue encoding number, however the
  8511. high-level process used to classify and encode the residue vector is the same in all three
  8512. variants.
  8513. <!--l. 33--><p class="noindent" >A set of coded residue vectors are all of the same length. High level coding structure, ignoring for
  8514. the moment exactly how a partition is encoded and simply trusting that it is, is as
  8515. follows:
  8516. <ul class="itemize1">
  8517. <li class="itemize">Each vector is partitioned into multiple equal sized chunks according to configuration
  8518. specified. If we have a vector size of <span
  8519. class="cmti-12">n</span>, a partition size <span
  8520. class="cmti-12">residue</span><span
  8521. class="cmti-12">_partition</span><span
  8522. class="cmti-12">_size</span>,
  8523. and a total of <span
  8524. class="cmti-12">ch </span>residue vectors, the total number of partitioned chunks coded
  8525. is <span
  8526. class="cmti-12">n</span>/<span
  8527. class="cmti-12">residue</span><span
  8528. class="cmti-12">_partition</span><span
  8529. class="cmti-12">_size</span>*<span
  8530. class="cmti-12">ch</span>. It is important to note that the integer division
  8531. truncates. In the below example, we assume an example <span
  8532. class="cmti-12">residue</span><span
  8533. class="cmti-12">_partition</span><span
  8534. class="cmti-12">_size </span>of 8.
  8535. </li>
  8536. <li class="itemize">Each partition in each vector has a classification number that specifies which of
  8537. multiple configured VQ codebook setups are used to decode that partition. The
  8538. classification numbers of each partition can be thought of as forming a vector in
  8539. their own right, as in the illustration below. Just as the residue vectors are coded
  8540. in grouped partitions to increase encoding efficiency, the classification vector is also
  8541. partitioned into chunks. The integer elements of each scalar in a classification chunk
  8542. are built into a single scalar that represents the classification numbers in that chunk.
  8543. In the below example, the classification codeword encodes two classification numbers.
  8544. </li>
  8545. <li class="itemize">The values in a residue vector may be encoded monolithically in a single pass through
  8546. the residue vector, but more often efficient codebook design dictates that each vector
  8547. is encoded as the additive sum of several passes through the residue vector using
  8548. more than one VQ codebook. Thus, each residue value potentially accumulates values
  8549. from multiple decode passes. The classification value associated with a partition is
  8550. the same in each pass, thus the classification codeword is coded only in the first pass.
  8551. </li></ul>
  8552. <div class="center"
  8553. >
  8554. <!--l. 70--><p class="noindent" >
  8555. <!--l. 71--><p class="noindent" ><img
  8556. src="residue-pack.png" alt="PIC"
  8557. >
  8558. <br /> <div class="caption"
  8559. ><span class="id">Figure&#x00A0;11: </span><span
  8560. class="content">illustration of residue vector format</span></div><!--tex4ht:label?: x1-10600111 -->
  8561. </div>
  8562. <!--l. 77--><p class="noindent" >
  8563. <h4 class="subsectionHead"><span class="titlemark">8.3. </span> <a
  8564. id="x1-1070008.3"></a>residue 0</h4>
  8565. <!--l. 79--><p class="noindent" >Residue 0 and 1 differ only in the way the values within a residue partition are interleaved during
  8566. partition encoding (visually treated as a black box&#8211;or cyan box or brown box&#8211;in the above
  8567. figure).
  8568. <!--l. 83--><p class="noindent" >Residue encoding 0 interleaves VQ encoding according to the dimension of the codebook used to
  8569. encode a partition in a specific pass. The dimension of the codebook need not be the same in
  8570. multiple passes, however the partition size must be an even multiple of the codebook
  8571. dimension.
  8572. <!--l. 89--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
  8573. codebook sizes of 8, 4, 2 and 1:
  8574. <!--l. 92--><p class="noindent" >
  8575. <div class="fancyvrb" id="fancyvrb33"><a
  8576. id="x1-107002r1"></a><span
  8577. class="cmr-6">1</span><span
  8578. class="cmtt-8">&#x00A0;</span><span
  8579. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8580. id="x1-107004r2"></a><span
  8581. class="cmr-6">2</span><span
  8582. class="cmtt-8">&#x00A0;</span><span
  8583. class="cmtt-8">&#x00A0;</span><span
  8584. class="cmtt-8">&#x00A0;</span><span
  8585. class="cmtt-8">&#x00A0;</span><span
  8586. class="cmtt-8">&#x00A0;</span><span
  8587. class="cmtt-8">&#x00A0;</span><span
  8588. class="cmtt-8">&#x00A0;</span><span
  8589. class="cmtt-8">&#x00A0;</span><span
  8590. class="cmtt-8">&#x00A0;</span><span
  8591. class="cmtt-8">&#x00A0;</span><span
  8592. class="cmtt-8">&#x00A0;</span><span
  8593. class="cmtt-8">&#x00A0;</span><span
  8594. class="cmtt-8">&#x00A0;</span><span
  8595. class="cmtt-8">&#x00A0;original</span><span
  8596. class="cmtt-8">&#x00A0;residue</span><span
  8597. class="cmtt-8">&#x00A0;vector:</span><span
  8598. class="cmtt-8">&#x00A0;[</span><span
  8599. class="cmtt-8">&#x00A0;0</span><span
  8600. class="cmtt-8">&#x00A0;1</span><span
  8601. class="cmtt-8">&#x00A0;2</span><span
  8602. class="cmtt-8">&#x00A0;3</span><span
  8603. class="cmtt-8">&#x00A0;4</span><span
  8604. class="cmtt-8">&#x00A0;5</span><span
  8605. class="cmtt-8">&#x00A0;6</span><span
  8606. class="cmtt-8">&#x00A0;7</span><span
  8607. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8608. id="x1-107006r3"></a><span
  8609. class="cmr-6">3</span><span
  8610. class="cmtt-8">&#x00A0;</span><span
  8611. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8612. id="x1-107008r4"></a><span
  8613. class="cmr-6">4</span><span
  8614. class="cmtt-8">&#x00A0;</span><span
  8615. class="cmtt-8">&#x00A0;codebook</span><span
  8616. class="cmtt-8">&#x00A0;dimensions</span><span
  8617. class="cmtt-8">&#x00A0;=</span><span
  8618. class="cmtt-8">&#x00A0;8</span><span
  8619. class="cmtt-8">&#x00A0;</span><span
  8620. class="cmtt-8">&#x00A0;encoded</span><span
  8621. class="cmtt-8">&#x00A0;as:</span><span
  8622. class="cmtt-8">&#x00A0;[</span><span
  8623. class="cmtt-8">&#x00A0;0</span><span
  8624. class="cmtt-8">&#x00A0;1</span><span
  8625. class="cmtt-8">&#x00A0;2</span><span
  8626. class="cmtt-8">&#x00A0;3</span><span
  8627. class="cmtt-8">&#x00A0;4</span><span
  8628. class="cmtt-8">&#x00A0;5</span><span
  8629. class="cmtt-8">&#x00A0;6</span><span
  8630. class="cmtt-8">&#x00A0;7</span><span
  8631. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8632. id="x1-107010r5"></a><span
  8633. class="cmr-6">5</span><span
  8634. class="cmtt-8">&#x00A0;</span><span
  8635. class="cmtt-8">&#x00A0;</span>
  8636. <br class="fancyvrb" /><a
  8637. id="x1-107012r6"></a><span
  8638. class="cmr-6">6</span><span
  8639. class="cmtt-8">&#x00A0;</span><span
  8640. class="cmtt-8">&#x00A0;codebook</span><span
  8641. class="cmtt-8">&#x00A0;dimensions</span><span
  8642. class="cmtt-8">&#x00A0;=</span><span
  8643. class="cmtt-8">&#x00A0;4</span><span
  8644. class="cmtt-8">&#x00A0;</span><span
  8645. class="cmtt-8">&#x00A0;encoded</span><span
  8646. class="cmtt-8">&#x00A0;as:</span><span
  8647. class="cmtt-8">&#x00A0;[</span><span
  8648. class="cmtt-8">&#x00A0;0</span><span
  8649. class="cmtt-8">&#x00A0;2</span><span
  8650. class="cmtt-8">&#x00A0;4</span><span
  8651. class="cmtt-8">&#x00A0;6</span><span
  8652. class="cmtt-8">&#x00A0;],</span><span
  8653. class="cmtt-8">&#x00A0;[</span><span
  8654. class="cmtt-8">&#x00A0;1</span><span
  8655. class="cmtt-8">&#x00A0;3</span><span
  8656. class="cmtt-8">&#x00A0;5</span><span
  8657. class="cmtt-8">&#x00A0;7</span><span
  8658. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8659. id="x1-107014r7"></a><span
  8660. class="cmr-6">7</span><span
  8661. class="cmtt-8">&#x00A0;</span><span
  8662. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8663. id="x1-107016r8"></a><span
  8664. class="cmr-6">8</span><span
  8665. class="cmtt-8">&#x00A0;</span><span
  8666. class="cmtt-8">&#x00A0;codebook</span><span
  8667. class="cmtt-8">&#x00A0;dimensions</span><span
  8668. class="cmtt-8">&#x00A0;=</span><span
  8669. class="cmtt-8">&#x00A0;2</span><span
  8670. class="cmtt-8">&#x00A0;</span><span
  8671. class="cmtt-8">&#x00A0;encoded</span><span
  8672. class="cmtt-8">&#x00A0;as:</span><span
  8673. class="cmtt-8">&#x00A0;[</span><span
  8674. class="cmtt-8">&#x00A0;0</span><span
  8675. class="cmtt-8">&#x00A0;4</span><span
  8676. class="cmtt-8">&#x00A0;],</span><span
  8677. class="cmtt-8">&#x00A0;[</span><span
  8678. class="cmtt-8">&#x00A0;1</span><span
  8679. class="cmtt-8">&#x00A0;5</span><span
  8680. class="cmtt-8">&#x00A0;],</span><span
  8681. class="cmtt-8">&#x00A0;[</span><span
  8682. class="cmtt-8">&#x00A0;2</span><span
  8683. class="cmtt-8">&#x00A0;6</span><span
  8684. class="cmtt-8">&#x00A0;],</span><span
  8685. class="cmtt-8">&#x00A0;[</span><span
  8686. class="cmtt-8">&#x00A0;3</span><span
  8687. class="cmtt-8">&#x00A0;7</span><span
  8688. class="cmtt-8">&#x00A0;]</span>
  8689. <br class="fancyvrb" /><a
  8690. id="x1-107018r9"></a><span
  8691. class="cmr-6">9</span><span
  8692. class="cmtt-8">&#x00A0;</span><span
  8693. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8694. id="x1-107020r10"></a><span
  8695. class="cmr-6">10</span><span
  8696. class="cmtt-8">&#x00A0;</span><span
  8697. class="cmtt-8">&#x00A0;codebook</span><span
  8698. class="cmtt-8">&#x00A0;dimensions</span><span
  8699. class="cmtt-8">&#x00A0;=</span><span
  8700. class="cmtt-8">&#x00A0;1</span><span
  8701. class="cmtt-8">&#x00A0;</span><span
  8702. class="cmtt-8">&#x00A0;encoded</span><span
  8703. class="cmtt-8">&#x00A0;as:</span><span
  8704. class="cmtt-8">&#x00A0;[</span><span
  8705. class="cmtt-8">&#x00A0;0</span><span
  8706. class="cmtt-8">&#x00A0;],</span><span
  8707. class="cmtt-8">&#x00A0;[</span><span
  8708. class="cmtt-8">&#x00A0;1</span><span
  8709. class="cmtt-8">&#x00A0;],</span><span
  8710. class="cmtt-8">&#x00A0;[</span><span
  8711. class="cmtt-8">&#x00A0;2</span><span
  8712. class="cmtt-8">&#x00A0;],</span><span
  8713. class="cmtt-8">&#x00A0;[</span><span
  8714. class="cmtt-8">&#x00A0;3</span><span
  8715. class="cmtt-8">&#x00A0;],</span><span
  8716. class="cmtt-8">&#x00A0;[</span><span
  8717. class="cmtt-8">&#x00A0;4</span><span
  8718. class="cmtt-8">&#x00A0;],</span><span
  8719. class="cmtt-8">&#x00A0;[</span><span
  8720. class="cmtt-8">&#x00A0;5</span><span
  8721. class="cmtt-8">&#x00A0;],</span><span
  8722. class="cmtt-8">&#x00A0;[</span><span
  8723. class="cmtt-8">&#x00A0;6</span><span
  8724. class="cmtt-8">&#x00A0;],</span><span
  8725. class="cmtt-8">&#x00A0;[</span><span
  8726. class="cmtt-8">&#x00A0;7</span><span
  8727. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8728. id="x1-107022r11"></a><span
  8729. class="cmr-6">11</span><span
  8730. class="cmtt-8">&#x00A0;</span><span
  8731. class="cmtt-8">&#x00A0;</span></div>
  8732. <!--l. 106--><p class="noindent" >It is worth mentioning at this point that no configurable value in the residue coding setup is
  8733. restricted to a power of two.
  8734. <!--l. 111--><p class="noindent" >
  8735. <h4 class="subsectionHead"><span class="titlemark">8.4. </span> <a
  8736. id="x1-1080008.4"></a>residue 1</h4>
  8737. <!--l. 113--><p class="noindent" >Residue 1 does not interleave VQ encoding. It represents partition vector scalars in order. As
  8738. with residue 0, however, partition length must be an integer multiple of the codebook dimension,
  8739. although dimension may vary from pass to pass.
  8740. <!--l. 118--><p class="noindent" >As an example, assume a partition vector of size eight, to be encoded by residue 0 using
  8741. codebook sizes of 8, 4, 2 and 1:
  8742. <!--l. 121--><p class="noindent" >
  8743. <div class="fancyvrb" id="fancyvrb34"><a
  8744. id="x1-108002r1"></a><span
  8745. class="cmr-6">1</span><span
  8746. class="cmtt-8">&#x00A0;</span><span
  8747. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8748. id="x1-108004r2"></a><span
  8749. class="cmr-6">2</span><span
  8750. class="cmtt-8">&#x00A0;</span><span
  8751. class="cmtt-8">&#x00A0;</span><span
  8752. class="cmtt-8">&#x00A0;</span><span
  8753. class="cmtt-8">&#x00A0;</span><span
  8754. class="cmtt-8">&#x00A0;</span><span
  8755. class="cmtt-8">&#x00A0;</span><span
  8756. class="cmtt-8">&#x00A0;</span><span
  8757. class="cmtt-8">&#x00A0;</span><span
  8758. class="cmtt-8">&#x00A0;</span><span
  8759. class="cmtt-8">&#x00A0;</span><span
  8760. class="cmtt-8">&#x00A0;</span><span
  8761. class="cmtt-8">&#x00A0;</span><span
  8762. class="cmtt-8">&#x00A0;</span><span
  8763. class="cmtt-8">&#x00A0;original</span><span
  8764. class="cmtt-8">&#x00A0;residue</span><span
  8765. class="cmtt-8">&#x00A0;vector:</span><span
  8766. class="cmtt-8">&#x00A0;[</span><span
  8767. class="cmtt-8">&#x00A0;0</span><span
  8768. class="cmtt-8">&#x00A0;1</span><span
  8769. class="cmtt-8">&#x00A0;2</span><span
  8770. class="cmtt-8">&#x00A0;3</span><span
  8771. class="cmtt-8">&#x00A0;4</span><span
  8772. class="cmtt-8">&#x00A0;5</span><span
  8773. class="cmtt-8">&#x00A0;6</span><span
  8774. class="cmtt-8">&#x00A0;7</span><span
  8775. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8776. id="x1-108006r3"></a><span
  8777. class="cmr-6">3</span><span
  8778. class="cmtt-8">&#x00A0;</span><span
  8779. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8780. id="x1-108008r4"></a><span
  8781. class="cmr-6">4</span><span
  8782. class="cmtt-8">&#x00A0;</span><span
  8783. class="cmtt-8">&#x00A0;codebook</span><span
  8784. class="cmtt-8">&#x00A0;dimensions</span><span
  8785. class="cmtt-8">&#x00A0;=</span><span
  8786. class="cmtt-8">&#x00A0;8</span><span
  8787. class="cmtt-8">&#x00A0;</span><span
  8788. class="cmtt-8">&#x00A0;encoded</span><span
  8789. class="cmtt-8">&#x00A0;as:</span><span
  8790. class="cmtt-8">&#x00A0;[</span><span
  8791. class="cmtt-8">&#x00A0;0</span><span
  8792. class="cmtt-8">&#x00A0;1</span><span
  8793. class="cmtt-8">&#x00A0;2</span><span
  8794. class="cmtt-8">&#x00A0;3</span><span
  8795. class="cmtt-8">&#x00A0;4</span><span
  8796. class="cmtt-8">&#x00A0;5</span><span
  8797. class="cmtt-8">&#x00A0;6</span><span
  8798. class="cmtt-8">&#x00A0;7</span><span
  8799. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8800. id="x1-108010r5"></a><span
  8801. class="cmr-6">5</span><span
  8802. class="cmtt-8">&#x00A0;</span><span
  8803. class="cmtt-8">&#x00A0;</span>
  8804. <br class="fancyvrb" /><a
  8805. id="x1-108012r6"></a><span
  8806. class="cmr-6">6</span><span
  8807. class="cmtt-8">&#x00A0;</span><span
  8808. class="cmtt-8">&#x00A0;codebook</span><span
  8809. class="cmtt-8">&#x00A0;dimensions</span><span
  8810. class="cmtt-8">&#x00A0;=</span><span
  8811. class="cmtt-8">&#x00A0;4</span><span
  8812. class="cmtt-8">&#x00A0;</span><span
  8813. class="cmtt-8">&#x00A0;encoded</span><span
  8814. class="cmtt-8">&#x00A0;as:</span><span
  8815. class="cmtt-8">&#x00A0;[</span><span
  8816. class="cmtt-8">&#x00A0;0</span><span
  8817. class="cmtt-8">&#x00A0;1</span><span
  8818. class="cmtt-8">&#x00A0;2</span><span
  8819. class="cmtt-8">&#x00A0;3</span><span
  8820. class="cmtt-8">&#x00A0;],</span><span
  8821. class="cmtt-8">&#x00A0;[</span><span
  8822. class="cmtt-8">&#x00A0;4</span><span
  8823. class="cmtt-8">&#x00A0;5</span><span
  8824. class="cmtt-8">&#x00A0;6</span><span
  8825. class="cmtt-8">&#x00A0;7</span><span
  8826. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8827. id="x1-108014r7"></a><span
  8828. class="cmr-6">7</span><span
  8829. class="cmtt-8">&#x00A0;</span><span
  8830. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8831. id="x1-108016r8"></a><span
  8832. class="cmr-6">8</span><span
  8833. class="cmtt-8">&#x00A0;</span><span
  8834. class="cmtt-8">&#x00A0;codebook</span><span
  8835. class="cmtt-8">&#x00A0;dimensions</span><span
  8836. class="cmtt-8">&#x00A0;=</span><span
  8837. class="cmtt-8">&#x00A0;2</span><span
  8838. class="cmtt-8">&#x00A0;</span><span
  8839. class="cmtt-8">&#x00A0;encoded</span><span
  8840. class="cmtt-8">&#x00A0;as:</span><span
  8841. class="cmtt-8">&#x00A0;[</span><span
  8842. class="cmtt-8">&#x00A0;0</span><span
  8843. class="cmtt-8">&#x00A0;1</span><span
  8844. class="cmtt-8">&#x00A0;],</span><span
  8845. class="cmtt-8">&#x00A0;[</span><span
  8846. class="cmtt-8">&#x00A0;2</span><span
  8847. class="cmtt-8">&#x00A0;3</span><span
  8848. class="cmtt-8">&#x00A0;],</span><span
  8849. class="cmtt-8">&#x00A0;[</span><span
  8850. class="cmtt-8">&#x00A0;4</span><span
  8851. class="cmtt-8">&#x00A0;5</span><span
  8852. class="cmtt-8">&#x00A0;],</span><span
  8853. class="cmtt-8">&#x00A0;[</span><span
  8854. class="cmtt-8">&#x00A0;6</span><span
  8855. class="cmtt-8">&#x00A0;7</span><span
  8856. class="cmtt-8">&#x00A0;]</span>
  8857. <br class="fancyvrb" /><a
  8858. id="x1-108018r9"></a><span
  8859. class="cmr-6">9</span><span
  8860. class="cmtt-8">&#x00A0;</span><span
  8861. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  8862. id="x1-108020r10"></a><span
  8863. class="cmr-6">10</span><span
  8864. class="cmtt-8">&#x00A0;</span><span
  8865. class="cmtt-8">&#x00A0;codebook</span><span
  8866. class="cmtt-8">&#x00A0;dimensions</span><span
  8867. class="cmtt-8">&#x00A0;=</span><span
  8868. class="cmtt-8">&#x00A0;1</span><span
  8869. class="cmtt-8">&#x00A0;</span><span
  8870. class="cmtt-8">&#x00A0;encoded</span><span
  8871. class="cmtt-8">&#x00A0;as:</span><span
  8872. class="cmtt-8">&#x00A0;[</span><span
  8873. class="cmtt-8">&#x00A0;0</span><span
  8874. class="cmtt-8">&#x00A0;],</span><span
  8875. class="cmtt-8">&#x00A0;[</span><span
  8876. class="cmtt-8">&#x00A0;1</span><span
  8877. class="cmtt-8">&#x00A0;],</span><span
  8878. class="cmtt-8">&#x00A0;[</span><span
  8879. class="cmtt-8">&#x00A0;2</span><span
  8880. class="cmtt-8">&#x00A0;],</span><span
  8881. class="cmtt-8">&#x00A0;[</span><span
  8882. class="cmtt-8">&#x00A0;3</span><span
  8883. class="cmtt-8">&#x00A0;],</span><span
  8884. class="cmtt-8">&#x00A0;[</span><span
  8885. class="cmtt-8">&#x00A0;4</span><span
  8886. class="cmtt-8">&#x00A0;],</span><span
  8887. class="cmtt-8">&#x00A0;[</span><span
  8888. class="cmtt-8">&#x00A0;5</span><span
  8889. class="cmtt-8">&#x00A0;],</span><span
  8890. class="cmtt-8">&#x00A0;[</span><span
  8891. class="cmtt-8">&#x00A0;6</span><span
  8892. class="cmtt-8">&#x00A0;],</span><span
  8893. class="cmtt-8">&#x00A0;[</span><span
  8894. class="cmtt-8">&#x00A0;7</span><span
  8895. class="cmtt-8">&#x00A0;]</span><br class="fancyvrb" /><a
  8896. id="x1-108022r11"></a><span
  8897. class="cmr-6">11</span><span
  8898. class="cmtt-8">&#x00A0;</span><span
  8899. class="cmtt-8">&#x00A0;</span></div>
  8900. <!--l. 137--><p class="noindent" >
  8901. <h4 class="subsectionHead"><span class="titlemark">8.5. </span> <a
  8902. id="x1-1090008.5"></a>residue 2</h4>
  8903. <!--l. 139--><p class="noindent" >Residue type two can be thought of as a variant of residue type 1. Rather than encoding multiple
  8904. passed-in vectors as in residue type 1, the <span
  8905. class="cmti-12">ch </span>passed in vectors of length <span
  8906. class="cmti-12">n </span>are first interleaved
  8907. and flattened into a single vector of length <span
  8908. class="cmti-12">ch</span>*<span
  8909. class="cmti-12">n</span>. Encoding then proceeds as in type 1. Decoding
  8910. is as in type 1 with decode interleave reversed. If operating on a single vector to begin with,
  8911. residue type 1 and type 2 are equivalent.
  8912. <div class="center"
  8913. >
  8914. <!--l. 147--><p class="noindent" >
  8915. <!--l. 148--><p class="noindent" ><img
  8916. src="residue2.png" alt="PIC"
  8917. >
  8918. <br /> <div class="caption"
  8919. ><span class="id">Figure&#x00A0;12: </span><span
  8920. class="content">illustration of residue type 2</span></div><!--tex4ht:label?: x1-10900112 -->
  8921. </div>
  8922. <!--l. 153--><p class="noindent" >
  8923. <h4 class="subsectionHead"><span class="titlemark">8.6. </span> <a
  8924. id="x1-1100008.6"></a>Residue decode</h4>
  8925. <!--l. 155--><p class="noindent" >
  8926. <h5 class="subsubsectionHead"><span class="titlemark">8.6.1. </span> <a
  8927. id="x1-1110008.6.1"></a>header decode</h5>
  8928. <!--l. 157--><p class="noindent" >Header decode for all three residue types is identical.
  8929. <div class="fancyvrb" id="fancyvrb35"><a
  8930. id="x1-111002r1"></a><span
  8931. class="cmr-6">1</span><span
  8932. class="cmtt-8">&#x00A0;</span><span
  8933. class="cmtt-8">&#x00A0;</span><span
  8934. class="cmtt-8">&#x00A0;</span><span
  8935. class="cmtt-8">&#x00A0;1)</span><span
  8936. class="cmtt-8">&#x00A0;[residue\_begin]</span><span
  8937. class="cmtt-8">&#x00A0;=</span><span
  8938. class="cmtt-8">&#x00A0;read</span><span
  8939. class="cmtt-8">&#x00A0;24</span><span
  8940. class="cmtt-8">&#x00A0;bits</span><span
  8941. class="cmtt-8">&#x00A0;as</span><span
  8942. class="cmtt-8">&#x00A0;unsigned</span><span
  8943. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  8944. id="x1-111004r2"></a><span
  8945. class="cmr-6">2</span><span
  8946. class="cmtt-8">&#x00A0;</span><span
  8947. class="cmtt-8">&#x00A0;</span><span
  8948. class="cmtt-8">&#x00A0;</span><span
  8949. class="cmtt-8">&#x00A0;2)</span><span
  8950. class="cmtt-8">&#x00A0;[residue\_end]</span><span
  8951. class="cmtt-8">&#x00A0;=</span><span
  8952. class="cmtt-8">&#x00A0;read</span><span
  8953. class="cmtt-8">&#x00A0;24</span><span
  8954. class="cmtt-8">&#x00A0;bits</span><span
  8955. class="cmtt-8">&#x00A0;as</span><span
  8956. class="cmtt-8">&#x00A0;unsigned</span><span
  8957. class="cmtt-8">&#x00A0;integer</span>
  8958. <br class="fancyvrb" /><a
  8959. id="x1-111006r3"></a><span
  8960. class="cmr-6">3</span><span
  8961. class="cmtt-8">&#x00A0;</span><span
  8962. class="cmtt-8">&#x00A0;</span><span
  8963. class="cmtt-8">&#x00A0;</span><span
  8964. class="cmtt-8">&#x00A0;3)</span><span
  8965. class="cmtt-8">&#x00A0;[residue\_partition\_size]</span><span
  8966. class="cmtt-8">&#x00A0;=</span><span
  8967. class="cmtt-8">&#x00A0;read</span><span
  8968. class="cmtt-8">&#x00A0;24</span><span
  8969. class="cmtt-8">&#x00A0;bits</span><span
  8970. class="cmtt-8">&#x00A0;as</span><span
  8971. class="cmtt-8">&#x00A0;unsigned</span><span
  8972. class="cmtt-8">&#x00A0;integer</span><span
  8973. class="cmtt-8">&#x00A0;and</span><span
  8974. class="cmtt-8">&#x00A0;add</span><span
  8975. class="cmtt-8">&#x00A0;one</span>
  8976. <br class="fancyvrb" /><a
  8977. id="x1-111008r4"></a><span
  8978. class="cmr-6">4</span><span
  8979. class="cmtt-8">&#x00A0;</span><span
  8980. class="cmtt-8">&#x00A0;</span><span
  8981. class="cmtt-8">&#x00A0;</span><span
  8982. class="cmtt-8">&#x00A0;4)</span><span
  8983. class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
  8984. class="cmtt-8">&#x00A0;=</span><span
  8985. class="cmtt-8">&#x00A0;read</span><span
  8986. class="cmtt-8">&#x00A0;6</span><span
  8987. class="cmtt-8">&#x00A0;bits</span><span
  8988. class="cmtt-8">&#x00A0;as</span><span
  8989. class="cmtt-8">&#x00A0;unsigned</span><span
  8990. class="cmtt-8">&#x00A0;integer</span><span
  8991. class="cmtt-8">&#x00A0;and</span><span
  8992. class="cmtt-8">&#x00A0;add</span><span
  8993. class="cmtt-8">&#x00A0;one</span><br class="fancyvrb" /><a
  8994. id="x1-111010r5"></a><span
  8995. class="cmr-6">5</span><span
  8996. class="cmtt-8">&#x00A0;</span><span
  8997. class="cmtt-8">&#x00A0;</span><span
  8998. class="cmtt-8">&#x00A0;</span><span
  8999. class="cmtt-8">&#x00A0;5)</span><span
  9000. class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
  9001. class="cmtt-8">&#x00A0;=</span><span
  9002. class="cmtt-8">&#x00A0;read</span><span
  9003. class="cmtt-8">&#x00A0;8</span><span
  9004. class="cmtt-8">&#x00A0;bits</span><span
  9005. class="cmtt-8">&#x00A0;as</span><span
  9006. class="cmtt-8">&#x00A0;unsigned</span><span
  9007. class="cmtt-8">&#x00A0;integer</span></div>
  9008. <!--l. 166--><p class="noindent" ><span
  9009. class="cmtt-12">[residue_begin] </span>and <span
  9010. class="cmtt-12">[residue_end] </span>select the specific sub-portion of each vector that is
  9011. actually coded; it implements akin to a bandpass where, for coding purposes, the vector
  9012. effectively begins at element <span
  9013. class="cmtt-12">[residue_begin] </span>and ends at <span
  9014. class="cmtt-12">[residue_end]</span>. Preceding and
  9015. following values in the unpacked vectors are zeroed. Note that for residue type 2, these
  9016. values as well as <span
  9017. class="cmtt-12">[residue_partition_size]</span>apply to the interleaved vector, not the
  9018. individual vectors before interleave. <span
  9019. class="cmtt-12">[residue_partition_size] </span>is as explained above,
  9020. <span
  9021. class="cmtt-12">[residue_classifications] </span>is the number of possible classification to which a partition can
  9022. belong and <span
  9023. class="cmtt-12">[residue_classbook] </span>is the codebook number used to code classification
  9024. codewords. The number of dimensions in book <span
  9025. class="cmtt-12">[residue_classbook] </span>determines how
  9026. many classification values are grouped into a single classification codeword. Note that
  9027. the number of entries and dimensions in book <span
  9028. class="cmtt-12">[residue_classbook]</span>, along with
  9029. <span
  9030. class="cmtt-12">[residue_classifications]</span>, overdetermines to possible number of classification
  9031. codewords. If <span
  9032. class="cmtt-12">[residue_classifications]</span>&#x02C6;<span
  9033. class="cmtt-12">[residue_classbook]</span>.dimensions exceeds
  9034. <span
  9035. class="cmtt-12">[residue_classbook]</span>.entries, the bitstream should be regarded to be undecodable.
  9036. <!--l. 190--><p class="noindent" >Next we read a bitmap pattern that specifies which partition classes code values in which
  9037. passes.
  9038. <!--l. 193--><p class="noindent" >
  9039. <div class="fancyvrb" id="fancyvrb36"><a
  9040. id="x1-111012r1"></a><span
  9041. class="cmr-6">1</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;1)</span><span
  9046. class="cmtt-8">&#x00A0;iterate</span><span
  9047. class="cmtt-8">&#x00A0;[i]</span><span
  9048. class="cmtt-8">&#x00A0;over</span><span
  9049. class="cmtt-8">&#x00A0;the</span><span
  9050. class="cmtt-8">&#x00A0;range</span><span
  9051. class="cmtt-8">&#x00A0;0</span><span
  9052. class="cmtt-8">&#x00A0;...</span><span
  9053. class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
  9054. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  9055. id="x1-111014r2"></a><span
  9056. class="cmr-6">2</span><span
  9057. class="cmtt-8">&#x00A0;</span><span
  9058. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9059. id="x1-111016r3"></a><span
  9060. class="cmr-6">3</span><span
  9061. class="cmtt-8">&#x00A0;</span><span
  9062. class="cmtt-8">&#x00A0;</span><span
  9063. class="cmtt-8">&#x00A0;</span><span
  9064. class="cmtt-8">&#x00A0;</span><span
  9065. class="cmtt-8">&#x00A0;</span><span
  9066. class="cmtt-8">&#x00A0;</span><span
  9067. class="cmtt-8">&#x00A0;</span><span
  9068. class="cmtt-8">&#x00A0;</span><span
  9069. class="cmtt-8">&#x00A0;2)</span><span
  9070. class="cmtt-8">&#x00A0;[high\_bits]</span><span
  9071. class="cmtt-8">&#x00A0;=</span><span
  9072. class="cmtt-8">&#x00A0;0</span>
  9073. <br class="fancyvrb" /><a
  9074. id="x1-111018r4"></a><span
  9075. class="cmr-6">4</span><span
  9076. class="cmtt-8">&#x00A0;</span><span
  9077. class="cmtt-8">&#x00A0;</span><span
  9078. class="cmtt-8">&#x00A0;</span><span
  9079. class="cmtt-8">&#x00A0;</span><span
  9080. class="cmtt-8">&#x00A0;</span><span
  9081. class="cmtt-8">&#x00A0;</span><span
  9082. class="cmtt-8">&#x00A0;</span><span
  9083. class="cmtt-8">&#x00A0;</span><span
  9084. class="cmtt-8">&#x00A0;3)</span><span
  9085. class="cmtt-8">&#x00A0;[low\_bits]</span><span
  9086. class="cmtt-8">&#x00A0;=</span><span
  9087. class="cmtt-8">&#x00A0;read</span><span
  9088. class="cmtt-8">&#x00A0;3</span><span
  9089. class="cmtt-8">&#x00A0;bits</span><span
  9090. class="cmtt-8">&#x00A0;as</span><span
  9091. class="cmtt-8">&#x00A0;unsigned</span><span
  9092. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  9093. id="x1-111020r5"></a><span
  9094. class="cmr-6">5</span><span
  9095. class="cmtt-8">&#x00A0;</span><span
  9096. class="cmtt-8">&#x00A0;</span><span
  9097. class="cmtt-8">&#x00A0;</span><span
  9098. class="cmtt-8">&#x00A0;</span><span
  9099. class="cmtt-8">&#x00A0;</span><span
  9100. class="cmtt-8">&#x00A0;</span><span
  9101. class="cmtt-8">&#x00A0;</span><span
  9102. class="cmtt-8">&#x00A0;</span><span
  9103. class="cmtt-8">&#x00A0;4)</span><span
  9104. class="cmtt-8">&#x00A0;[bitflag]</span><span
  9105. class="cmtt-8">&#x00A0;=</span><span
  9106. class="cmtt-8">&#x00A0;read</span><span
  9107. class="cmtt-8">&#x00A0;one</span><span
  9108. class="cmtt-8">&#x00A0;bit</span><span
  9109. class="cmtt-8">&#x00A0;as</span><span
  9110. class="cmtt-8">&#x00A0;boolean</span>
  9111. <br class="fancyvrb" /><a
  9112. id="x1-111022r6"></a><span
  9113. class="cmr-6">6</span><span
  9114. class="cmtt-8">&#x00A0;</span><span
  9115. class="cmtt-8">&#x00A0;</span><span
  9116. class="cmtt-8">&#x00A0;</span><span
  9117. class="cmtt-8">&#x00A0;</span><span
  9118. class="cmtt-8">&#x00A0;</span><span
  9119. class="cmtt-8">&#x00A0;</span><span
  9120. class="cmtt-8">&#x00A0;</span><span
  9121. class="cmtt-8">&#x00A0;</span><span
  9122. class="cmtt-8">&#x00A0;5)</span><span
  9123. class="cmtt-8">&#x00A0;if</span><span
  9124. class="cmtt-8">&#x00A0;(</span><span
  9125. class="cmtt-8">&#x00A0;[bitflag]</span><span
  9126. class="cmtt-8">&#x00A0;is</span><span
  9127. class="cmtt-8">&#x00A0;set</span><span
  9128. class="cmtt-8">&#x00A0;)</span><span
  9129. class="cmtt-8">&#x00A0;then</span><span
  9130. class="cmtt-8">&#x00A0;[high\_bits]</span><span
  9131. class="cmtt-8">&#x00A0;=</span><span
  9132. class="cmtt-8">&#x00A0;read</span><span
  9133. class="cmtt-8">&#x00A0;five</span><span
  9134. class="cmtt-8">&#x00A0;bits</span><span
  9135. class="cmtt-8">&#x00A0;as</span><span
  9136. class="cmtt-8">&#x00A0;unsigned</span><span
  9137. class="cmtt-8">&#x00A0;integer</span>
  9138. <br class="fancyvrb" /><a
  9139. id="x1-111024r7"></a><span
  9140. class="cmr-6">7</span><span
  9141. class="cmtt-8">&#x00A0;</span><span
  9142. class="cmtt-8">&#x00A0;</span><span
  9143. class="cmtt-8">&#x00A0;</span><span
  9144. class="cmtt-8">&#x00A0;</span><span
  9145. class="cmtt-8">&#x00A0;</span><span
  9146. class="cmtt-8">&#x00A0;</span><span
  9147. class="cmtt-8">&#x00A0;</span><span
  9148. class="cmtt-8">&#x00A0;</span><span
  9149. class="cmtt-8">&#x00A0;6)</span><span
  9150. class="cmtt-8">&#x00A0;vector</span><span
  9151. class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
  9152. class="cmtt-8">&#x00A0;element</span><span
  9153. class="cmtt-8">&#x00A0;[i]</span><span
  9154. class="cmtt-8">&#x00A0;=</span><span
  9155. class="cmtt-8">&#x00A0;[high\_bits]</span><span
  9156. class="cmtt-8">&#x00A0;*</span><span
  9157. class="cmtt-8">&#x00A0;8</span><span
  9158. class="cmtt-8">&#x00A0;+</span><span
  9159. class="cmtt-8">&#x00A0;[low\_bits]</span><br class="fancyvrb" /><a
  9160. id="x1-111026r8"></a><span
  9161. class="cmr-6">8</span><span
  9162. class="cmtt-8">&#x00A0;</span><span
  9163. class="cmtt-8">&#x00A0;</span><span
  9164. class="cmtt-8">&#x00A0;</span><span
  9165. class="cmtt-8">&#x00A0;</span><span
  9166. class="cmtt-8">&#x00A0;</span><span
  9167. class="cmtt-8">&#x00A0;</span><span
  9168. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  9169. id="x1-111028r9"></a><span
  9170. class="cmr-6">9</span><span
  9171. class="cmtt-8">&#x00A0;</span><span
  9172. class="cmtt-8">&#x00A0;</span><span
  9173. class="cmtt-8">&#x00A0;</span><span
  9174. class="cmtt-8">&#x00A0;7)</span><span
  9175. class="cmtt-8">&#x00A0;done</span></div>
  9176. <!--l. 205--><p class="noindent" >Finally, we read in a list of book numbers, each corresponding to specific bit set in the cascade
  9177. bitmap. We loop over the possible codebook classifications and the maximum possible number of
  9178. encoding stages (8 in Vorbis I, as constrained by the elements of the cascade bitmap being eight
  9179. bits):
  9180. <!--l. 211--><p class="noindent" >
  9181. <div class="fancyvrb" id="fancyvrb37"><a
  9182. id="x1-111030r1"></a><span
  9183. class="cmr-6">1</span><span
  9184. class="cmtt-8">&#x00A0;</span><span
  9185. class="cmtt-8">&#x00A0;</span><span
  9186. class="cmtt-8">&#x00A0;</span><span
  9187. class="cmtt-8">&#x00A0;1)</span><span
  9188. class="cmtt-8">&#x00A0;iterate</span><span
  9189. class="cmtt-8">&#x00A0;[i]</span><span
  9190. class="cmtt-8">&#x00A0;over</span><span
  9191. class="cmtt-8">&#x00A0;the</span><span
  9192. class="cmtt-8">&#x00A0;range</span><span
  9193. class="cmtt-8">&#x00A0;0</span><span
  9194. class="cmtt-8">&#x00A0;...</span><span
  9195. class="cmtt-8">&#x00A0;[residue\_classifications]-1</span><span
  9196. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  9197. id="x1-111032r2"></a><span
  9198. class="cmr-6">2</span><span
  9199. class="cmtt-8">&#x00A0;</span><span
  9200. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9201. id="x1-111034r3"></a><span
  9202. class="cmr-6">3</span><span
  9203. class="cmtt-8">&#x00A0;</span><span
  9204. class="cmtt-8">&#x00A0;</span><span
  9205. class="cmtt-8">&#x00A0;</span><span
  9206. class="cmtt-8">&#x00A0;</span><span
  9207. class="cmtt-8">&#x00A0;</span><span
  9208. class="cmtt-8">&#x00A0;</span><span
  9209. class="cmtt-8">&#x00A0;</span><span
  9210. class="cmtt-8">&#x00A0;</span><span
  9211. class="cmtt-8">&#x00A0;2)</span><span
  9212. class="cmtt-8">&#x00A0;iterate</span><span
  9213. class="cmtt-8">&#x00A0;[j]</span><span
  9214. class="cmtt-8">&#x00A0;over</span><span
  9215. class="cmtt-8">&#x00A0;the</span><span
  9216. class="cmtt-8">&#x00A0;range</span><span
  9217. class="cmtt-8">&#x00A0;0</span><span
  9218. class="cmtt-8">&#x00A0;...</span><span
  9219. class="cmtt-8">&#x00A0;7</span><span
  9220. class="cmtt-8">&#x00A0;{</span>
  9221. <br class="fancyvrb" /><a
  9222. id="x1-111036r4"></a><span
  9223. class="cmr-6">4</span><span
  9224. class="cmtt-8">&#x00A0;</span><span
  9225. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9226. id="x1-111038r5"></a><span
  9227. class="cmr-6">5</span><span
  9228. class="cmtt-8">&#x00A0;</span><span
  9229. class="cmtt-8">&#x00A0;</span><span
  9230. class="cmtt-8">&#x00A0;</span><span
  9231. class="cmtt-8">&#x00A0;</span><span
  9232. class="cmtt-8">&#x00A0;</span><span
  9233. class="cmtt-8">&#x00A0;</span><span
  9234. class="cmtt-8">&#x00A0;</span><span
  9235. class="cmtt-8">&#x00A0;</span><span
  9236. class="cmtt-8">&#x00A0;</span><span
  9237. class="cmtt-8">&#x00A0;</span><span
  9238. class="cmtt-8">&#x00A0;</span><span
  9239. class="cmtt-8">&#x00A0;</span><span
  9240. class="cmtt-8">&#x00A0;</span><span
  9241. class="cmtt-8">&#x00A0;3)</span><span
  9242. class="cmtt-8">&#x00A0;if</span><span
  9243. class="cmtt-8">&#x00A0;(</span><span
  9244. class="cmtt-8">&#x00A0;vector</span><span
  9245. class="cmtt-8">&#x00A0;[residue\_cascade]</span><span
  9246. class="cmtt-8">&#x00A0;element</span><span
  9247. class="cmtt-8">&#x00A0;[i]</span><span
  9248. class="cmtt-8">&#x00A0;bit</span><span
  9249. class="cmtt-8">&#x00A0;[j]</span><span
  9250. class="cmtt-8">&#x00A0;is</span><span
  9251. class="cmtt-8">&#x00A0;set</span><span
  9252. class="cmtt-8">&#x00A0;)</span><span
  9253. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  9254. id="x1-111040r6"></a><span
  9255. class="cmr-6">6</span><span
  9256. class="cmtt-8">&#x00A0;</span><span
  9257. class="cmtt-8">&#x00A0;</span>
  9258. <br class="fancyvrb" /><a
  9259. id="x1-111042r7"></a><span
  9260. class="cmr-6">7</span><span
  9261. class="cmtt-8">&#x00A0;</span><span
  9262. class="cmtt-8">&#x00A0;</span><span
  9263. class="cmtt-8">&#x00A0;</span><span
  9264. class="cmtt-8">&#x00A0;</span><span
  9265. class="cmtt-8">&#x00A0;</span><span
  9266. class="cmtt-8">&#x00A0;</span><span
  9267. class="cmtt-8">&#x00A0;</span><span
  9268. class="cmtt-8">&#x00A0;</span><span
  9269. class="cmtt-8">&#x00A0;</span><span
  9270. class="cmtt-8">&#x00A0;</span><span
  9271. class="cmtt-8">&#x00A0;</span><span
  9272. class="cmtt-8">&#x00A0;</span><span
  9273. class="cmtt-8">&#x00A0;</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;</span><span
  9278. class="cmtt-8">&#x00A0;</span><span
  9279. class="cmtt-8">&#x00A0;4)</span><span
  9280. class="cmtt-8">&#x00A0;array</span><span
  9281. class="cmtt-8">&#x00A0;[residue\_books]</span><span
  9282. class="cmtt-8">&#x00A0;element</span><span
  9283. class="cmtt-8">&#x00A0;[i][j]</span><span
  9284. class="cmtt-8">&#x00A0;=</span><span
  9285. class="cmtt-8">&#x00A0;read</span><span
  9286. class="cmtt-8">&#x00A0;8</span><span
  9287. class="cmtt-8">&#x00A0;bits</span><span
  9288. class="cmtt-8">&#x00A0;as</span><span
  9289. class="cmtt-8">&#x00A0;unsigned</span><span
  9290. class="cmtt-8">&#x00A0;integer</span><br class="fancyvrb" /><a
  9291. id="x1-111044r8"></a><span
  9292. class="cmr-6">8</span><span
  9293. class="cmtt-8">&#x00A0;</span><span
  9294. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9295. id="x1-111046r9"></a><span
  9296. class="cmr-6">9</span><span
  9297. class="cmtt-8">&#x00A0;</span><span
  9298. class="cmtt-8">&#x00A0;</span><span
  9299. class="cmtt-8">&#x00A0;</span><span
  9300. class="cmtt-8">&#x00A0;</span><span
  9301. class="cmtt-8">&#x00A0;</span><span
  9302. class="cmtt-8">&#x00A0;</span><span
  9303. class="cmtt-8">&#x00A0;</span><span
  9304. class="cmtt-8">&#x00A0;</span><span
  9305. class="cmtt-8">&#x00A0;</span><span
  9306. class="cmtt-8">&#x00A0;</span><span
  9307. class="cmtt-8">&#x00A0;</span><span
  9308. class="cmtt-8">&#x00A0;</span><span
  9309. class="cmtt-8">&#x00A0;</span><span
  9310. class="cmtt-8">&#x00A0;</span><span
  9311. class="cmtt-8">&#x00A0;</span><span
  9312. class="cmtt-8">&#x00A0;</span><span
  9313. class="cmtt-8">&#x00A0;}</span><span
  9314. class="cmtt-8">&#x00A0;else</span><span
  9315. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  9316. id="x1-111048r10"></a><span
  9317. class="cmr-6">10</span><span
  9318. class="cmtt-8">&#x00A0;</span><span
  9319. class="cmtt-8">&#x00A0;</span>
  9320. <br class="fancyvrb" /><a
  9321. id="x1-111050r11"></a><span
  9322. class="cmr-6">11</span><span
  9323. class="cmtt-8">&#x00A0;</span><span
  9324. class="cmtt-8">&#x00A0;</span><span
  9325. class="cmtt-8">&#x00A0;</span><span
  9326. class="cmtt-8">&#x00A0;</span><span
  9327. class="cmtt-8">&#x00A0;</span><span
  9328. class="cmtt-8">&#x00A0;</span><span
  9329. class="cmtt-8">&#x00A0;</span><span
  9330. class="cmtt-8">&#x00A0;</span><span
  9331. class="cmtt-8">&#x00A0;</span><span
  9332. class="cmtt-8">&#x00A0;</span><span
  9333. class="cmtt-8">&#x00A0;</span><span
  9334. class="cmtt-8">&#x00A0;</span><span
  9335. class="cmtt-8">&#x00A0;</span><span
  9336. class="cmtt-8">&#x00A0;</span><span
  9337. class="cmtt-8">&#x00A0;</span><span
  9338. class="cmtt-8">&#x00A0;</span><span
  9339. class="cmtt-8">&#x00A0;</span><span
  9340. class="cmtt-8">&#x00A0;</span><span
  9341. class="cmtt-8">&#x00A0;5)</span><span
  9342. class="cmtt-8">&#x00A0;array</span><span
  9343. class="cmtt-8">&#x00A0;[residue\_books]</span><span
  9344. class="cmtt-8">&#x00A0;element</span><span
  9345. class="cmtt-8">&#x00A0;[i][j]</span><span
  9346. class="cmtt-8">&#x00A0;=</span><span
  9347. class="cmtt-8">&#x00A0;unused</span><br class="fancyvrb" /><a
  9348. id="x1-111052r12"></a><span
  9349. class="cmr-6">12</span><span
  9350. class="cmtt-8">&#x00A0;</span><span
  9351. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9352. id="x1-111054r13"></a><span
  9353. class="cmr-6">13</span><span
  9354. class="cmtt-8">&#x00A0;</span><span
  9355. class="cmtt-8">&#x00A0;</span><span
  9356. class="cmtt-8">&#x00A0;</span><span
  9357. class="cmtt-8">&#x00A0;</span><span
  9358. class="cmtt-8">&#x00A0;</span><span
  9359. class="cmtt-8">&#x00A0;</span><span
  9360. class="cmtt-8">&#x00A0;</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;</span><span
  9370. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  9371. id="x1-111056r14"></a><span
  9372. class="cmr-6">14</span><span
  9373. class="cmtt-8">&#x00A0;</span><span
  9374. class="cmtt-8">&#x00A0;</span><span
  9375. class="cmtt-8">&#x00A0;</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;}</span><br class="fancyvrb" /><a
  9385. id="x1-111058r15"></a><span
  9386. class="cmr-6">15</span><span
  9387. class="cmtt-8">&#x00A0;</span><span
  9388. class="cmtt-8">&#x00A0;</span><span
  9389. class="cmtt-8">&#x00A0;</span><span
  9390. class="cmtt-8">&#x00A0;</span><span
  9391. class="cmtt-8">&#x00A0;</span><span
  9392. class="cmtt-8">&#x00A0;</span><span
  9393. class="cmtt-8">&#x00A0;</span><span
  9394. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  9395. id="x1-111060r16"></a><span
  9396. class="cmr-6">16</span><span
  9397. class="cmtt-8">&#x00A0;</span><span
  9398. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9399. id="x1-111062r17"></a><span
  9400. class="cmr-6">17</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;6)</span><span
  9405. class="cmtt-8">&#x00A0;done</span></div>
  9406. <!--l. 231--><p class="noindent" >An end-of-packet condition at any point in header decode renders the stream undecodable.
  9407. In addition, any codebook number greater than the maximum numbered codebook
  9408. set up in this stream also renders the stream undecodable. All codebooks in array
  9409. [residue_books] are required to have a value mapping. The presence of codebook in array
  9410. [residue_books] without a value mapping (maptype equals zero) renders the stream
  9411. undecodable.
  9412. <!--l. 241--><p class="noindent" >
  9413. <h5 class="subsubsectionHead"><span class="titlemark">8.6.2. </span> <a
  9414. id="x1-1120008.6.2"></a>packet decode</h5>
  9415. <!--l. 243--><p class="noindent" >Format 0 and 1 packet decode is identical except for specific partition interleave. Format 2 packet
  9416. decode can be built out of the format 1 decode process. Thus we describe first the decode
  9417. infrastructure identical to all three formats.
  9418. <!--l. 248--><p class="noindent" >In addition to configuration information, the residue decode process is passed the number of
  9419. vectors in the submap bundle and a vector of flags indicating if any of the vectors are not to be
  9420. decoded. If the passed in number of vectors is 3 and vector number 1 is marked &#8217;do not decode&#8217;,
  9421. decode skips vector 1 during the decode loop. However, even &#8217;do not decode&#8217; vectors are
  9422. allocated and zeroed.
  9423. <!--l. 255--><p class="noindent" >Depending on the values of <span
  9424. class="cmtt-12">[residue_begin] </span>and <span
  9425. class="cmtt-12">[residue_end]</span>, it is obvious that the
  9426. encoded portion of a residue vector may be the entire possible residue vector or some other strict
  9427. subset of the actual residue vector size with zero padding at either uncoded end. However, it is
  9428. also possible to set <span
  9429. class="cmtt-12">[residue_begin] </span>and <span
  9430. class="cmtt-12">[residue_end] </span>to specify a range partially or wholly
  9431. beyond the maximum vector size. Before beginning residue decode, limit <span
  9432. class="cmtt-12">[residue_begin]</span>
  9433. and <span
  9434. class="cmtt-12">[residue_end] </span>to the maximum possible vector size as follows. We assume that
  9435. the number of vectors being encoded, <span
  9436. class="cmtt-12">[ch] </span>is provided by the higher level decoding
  9437. process.
  9438. <!--l. 269--><p class="noindent" >
  9439. <div class="fancyvrb" id="fancyvrb38"><a
  9440. id="x1-112002r1"></a><span
  9441. class="cmr-6">1</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;1)</span><span
  9446. class="cmtt-8">&#x00A0;[actual\_size]</span><span
  9447. class="cmtt-8">&#x00A0;=</span><span
  9448. class="cmtt-8">&#x00A0;current</span><span
  9449. class="cmtt-8">&#x00A0;blocksize/2;</span><br class="fancyvrb" /><a
  9450. id="x1-112004r2"></a><span
  9451. class="cmr-6">2</span><span
  9452. class="cmtt-8">&#x00A0;</span><span
  9453. class="cmtt-8">&#x00A0;</span><span
  9454. class="cmtt-8">&#x00A0;</span><span
  9455. class="cmtt-8">&#x00A0;2)</span><span
  9456. class="cmtt-8">&#x00A0;if</span><span
  9457. class="cmtt-8">&#x00A0;residue</span><span
  9458. class="cmtt-8">&#x00A0;encoding</span><span
  9459. class="cmtt-8">&#x00A0;is</span><span
  9460. class="cmtt-8">&#x00A0;format</span><span
  9461. class="cmtt-8">&#x00A0;2</span>
  9462. <br class="fancyvrb" /><a
  9463. id="x1-112006r3"></a><span
  9464. class="cmr-6">3</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><span
  9471. class="cmtt-8">&#x00A0;</span><span
  9472. class="cmtt-8">&#x00A0;</span><span
  9473. class="cmtt-8">&#x00A0;3)</span><span
  9474. class="cmtt-8">&#x00A0;[actual\_size]</span><span
  9475. class="cmtt-8">&#x00A0;=</span><span
  9476. class="cmtt-8">&#x00A0;[actual\_size]</span><span
  9477. class="cmtt-8">&#x00A0;*</span><span
  9478. class="cmtt-8">&#x00A0;[ch];</span><br class="fancyvrb" /><a
  9479. id="x1-112008r4"></a><span
  9480. class="cmr-6">4</span><span
  9481. class="cmtt-8">&#x00A0;</span><span
  9482. class="cmtt-8">&#x00A0;</span><span
  9483. class="cmtt-8">&#x00A0;</span><span
  9484. class="cmtt-8">&#x00A0;4)</span><span
  9485. class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span><span
  9486. class="cmtt-8">&#x00A0;=</span><span
  9487. class="cmtt-8">&#x00A0;minimum</span><span
  9488. class="cmtt-8">&#x00A0;of</span><span
  9489. class="cmtt-8">&#x00A0;([residue\_begin],[actual\_size]);</span>
  9490. <br class="fancyvrb" /><a
  9491. id="x1-112010r5"></a><span
  9492. class="cmr-6">5</span><span
  9493. class="cmtt-8">&#x00A0;</span><span
  9494. class="cmtt-8">&#x00A0;</span><span
  9495. class="cmtt-8">&#x00A0;</span><span
  9496. class="cmtt-8">&#x00A0;5)</span><span
  9497. class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
  9498. class="cmtt-8">&#x00A0;=</span><span
  9499. class="cmtt-8">&#x00A0;minimum</span><span
  9500. class="cmtt-8">&#x00A0;of</span><span
  9501. class="cmtt-8">&#x00A0;([residue\_end],[actual\_size]);</span></div>
  9502. <!--l. 277--><p class="noindent" >The following convenience values are conceptually useful to clarifying the decode process:
  9503. <!--l. 280--><p class="noindent" >
  9504. <div class="fancyvrb" id="fancyvrb39"><a
  9505. id="x1-112012r1"></a><span
  9506. class="cmr-6">1</span><span
  9507. class="cmtt-8">&#x00A0;</span><span
  9508. class="cmtt-8">&#x00A0;</span><span
  9509. class="cmtt-8">&#x00A0;</span><span
  9510. class="cmtt-8">&#x00A0;1)</span><span
  9511. class="cmtt-8">&#x00A0;[classwords\_per\_codeword]</span><span
  9512. class="cmtt-8">&#x00A0;=</span><span
  9513. class="cmtt-8">&#x00A0;[codebook\_dimensions]</span><span
  9514. class="cmtt-8">&#x00A0;value</span><span
  9515. class="cmtt-8">&#x00A0;of</span><span
  9516. class="cmtt-8">&#x00A0;codebook</span><span
  9517. class="cmtt-8">&#x00A0;[residue\_classbook]</span>
  9518. <br class="fancyvrb" /><a
  9519. id="x1-112014r2"></a><span
  9520. class="cmr-6">2</span><span
  9521. class="cmtt-8">&#x00A0;</span><span
  9522. class="cmtt-8">&#x00A0;</span><span
  9523. class="cmtt-8">&#x00A0;</span><span
  9524. class="cmtt-8">&#x00A0;2)</span><span
  9525. class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
  9526. class="cmtt-8">&#x00A0;=</span><span
  9527. class="cmtt-8">&#x00A0;[limit\_residue\_end]</span><span
  9528. class="cmtt-8">&#x00A0;-</span><span
  9529. class="cmtt-8">&#x00A0;[limit\_residue\_begin]</span><br class="fancyvrb" /><a
  9530. id="x1-112016r3"></a><span
  9531. class="cmr-6">3</span><span
  9532. class="cmtt-8">&#x00A0;</span><span
  9533. class="cmtt-8">&#x00A0;</span><span
  9534. class="cmtt-8">&#x00A0;</span><span
  9535. class="cmtt-8">&#x00A0;3)</span><span
  9536. class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
  9537. class="cmtt-8">&#x00A0;=</span><span
  9538. class="cmtt-8">&#x00A0;[n\_to\_read]</span><span
  9539. class="cmtt-8">&#x00A0;/</span><span
  9540. class="cmtt-8">&#x00A0;[residue\_partition\_size]</span></div>
  9541. <!--l. 286--><p class="noindent" >Packet decode proceeds as follows, matching the description offered earlier in the document.
  9542. <div class="fancyvrb" id="fancyvrb40"><a
  9543. id="x1-112018r1"></a><span
  9544. class="cmr-6">1</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;1)</span><span
  9549. class="cmtt-8">&#x00A0;allocate</span><span
  9550. class="cmtt-8">&#x00A0;and</span><span
  9551. class="cmtt-8">&#x00A0;zero</span><span
  9552. class="cmtt-8">&#x00A0;all</span><span
  9553. class="cmtt-8">&#x00A0;vectors</span><span
  9554. class="cmtt-8">&#x00A0;that</span><span
  9555. class="cmtt-8">&#x00A0;will</span><span
  9556. class="cmtt-8">&#x00A0;be</span><span
  9557. class="cmtt-8">&#x00A0;returned.</span><br class="fancyvrb" /><a
  9558. id="x1-112020r2"></a><span
  9559. class="cmr-6">2</span><span
  9560. class="cmtt-8">&#x00A0;</span><span
  9561. class="cmtt-8">&#x00A0;</span><span
  9562. class="cmtt-8">&#x00A0;</span><span
  9563. class="cmtt-8">&#x00A0;2)</span><span
  9564. class="cmtt-8">&#x00A0;if</span><span
  9565. class="cmtt-8">&#x00A0;([n\_to\_read]</span><span
  9566. class="cmtt-8">&#x00A0;is</span><span
  9567. class="cmtt-8">&#x00A0;zero),</span><span
  9568. class="cmtt-8">&#x00A0;stop;</span><span
  9569. class="cmtt-8">&#x00A0;there</span><span
  9570. class="cmtt-8">&#x00A0;is</span><span
  9571. class="cmtt-8">&#x00A0;no</span><span
  9572. class="cmtt-8">&#x00A0;residue</span><span
  9573. class="cmtt-8">&#x00A0;to</span><span
  9574. class="cmtt-8">&#x00A0;decode.</span>
  9575. <br class="fancyvrb" /><a
  9576. id="x1-112022r3"></a><span
  9577. class="cmr-6">3</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;3)</span><span
  9582. class="cmtt-8">&#x00A0;iterate</span><span
  9583. class="cmtt-8">&#x00A0;[pass]</span><span
  9584. class="cmtt-8">&#x00A0;over</span><span
  9585. class="cmtt-8">&#x00A0;the</span><span
  9586. class="cmtt-8">&#x00A0;range</span><span
  9587. class="cmtt-8">&#x00A0;0</span><span
  9588. class="cmtt-8">&#x00A0;...</span><span
  9589. class="cmtt-8">&#x00A0;7</span><span
  9590. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  9591. id="x1-112024r4"></a><span
  9592. class="cmr-6">4</span><span
  9593. class="cmtt-8">&#x00A0;</span><span
  9594. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9595. id="x1-112026r5"></a><span
  9596. class="cmr-6">5</span><span
  9597. class="cmtt-8">&#x00A0;</span><span
  9598. class="cmtt-8">&#x00A0;</span><span
  9599. class="cmtt-8">&#x00A0;</span><span
  9600. class="cmtt-8">&#x00A0;</span><span
  9601. class="cmtt-8">&#x00A0;</span><span
  9602. class="cmtt-8">&#x00A0;</span><span
  9603. class="cmtt-8">&#x00A0;</span><span
  9604. class="cmtt-8">&#x00A0;</span><span
  9605. class="cmtt-8">&#x00A0;4)</span><span
  9606. class="cmtt-8">&#x00A0;[partition\_count]</span><span
  9607. class="cmtt-8">&#x00A0;=</span><span
  9608. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  9609. id="x1-112028r6"></a><span
  9610. class="cmr-6">6</span><span
  9611. class="cmtt-8">&#x00A0;</span><span
  9612. class="cmtt-8">&#x00A0;</span>
  9613. <br class="fancyvrb" /><a
  9614. id="x1-112030r7"></a><span
  9615. class="cmr-6">7</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;5)</span><span
  9625. class="cmtt-8">&#x00A0;while</span><span
  9626. class="cmtt-8">&#x00A0;[partition\_count]</span><span
  9627. class="cmtt-8">&#x00A0;is</span><span
  9628. class="cmtt-8">&#x00A0;less</span><span
  9629. class="cmtt-8">&#x00A0;than</span><span
  9630. class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><br class="fancyvrb" /><a
  9631. id="x1-112032r8"></a><span
  9632. class="cmr-6">8</span><span
  9633. class="cmtt-8">&#x00A0;</span><span
  9634. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9635. id="x1-112034r9"></a><span
  9636. class="cmr-6">9</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;6)</span><span
  9651. class="cmtt-8">&#x00A0;if</span><span
  9652. class="cmtt-8">&#x00A0;([pass]</span><span
  9653. class="cmtt-8">&#x00A0;is</span><span
  9654. class="cmtt-8">&#x00A0;zero)</span><span
  9655. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  9656. id="x1-112036r10"></a><span
  9657. class="cmr-6">10</span><span
  9658. class="cmtt-8">&#x00A0;</span><span
  9659. class="cmtt-8">&#x00A0;</span>
  9660. <br class="fancyvrb" /><a
  9661. id="x1-112038r11"></a><span
  9662. class="cmr-6">11</span><span
  9663. class="cmtt-8">&#x00A0;</span><span
  9664. class="cmtt-8">&#x00A0;</span><span
  9665. class="cmtt-8">&#x00A0;</span><span
  9666. class="cmtt-8">&#x00A0;</span><span
  9667. class="cmtt-8">&#x00A0;</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;7)</span><span
  9682. class="cmtt-8">&#x00A0;iterate</span><span
  9683. class="cmtt-8">&#x00A0;[j]</span><span
  9684. class="cmtt-8">&#x00A0;over</span><span
  9685. class="cmtt-8">&#x00A0;the</span><span
  9686. class="cmtt-8">&#x00A0;range</span><span
  9687. class="cmtt-8">&#x00A0;0</span><span
  9688. class="cmtt-8">&#x00A0;..</span><span
  9689. class="cmtt-8">&#x00A0;[ch]-1</span><span
  9690. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  9691. id="x1-112040r12"></a><span
  9692. class="cmr-6">12</span><span
  9693. class="cmtt-8">&#x00A0;</span><span
  9694. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9695. id="x1-112042r13"></a><span
  9696. class="cmr-6">13</span><span
  9697. class="cmtt-8">&#x00A0;</span><span
  9698. class="cmtt-8">&#x00A0;</span><span
  9699. class="cmtt-8">&#x00A0;</span><span
  9700. class="cmtt-8">&#x00A0;</span><span
  9701. class="cmtt-8">&#x00A0;</span><span
  9702. class="cmtt-8">&#x00A0;</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><span
  9711. class="cmtt-8">&#x00A0;</span><span
  9712. class="cmtt-8">&#x00A0;</span><span
  9713. class="cmtt-8">&#x00A0;</span><span
  9714. class="cmtt-8">&#x00A0;</span><span
  9715. class="cmtt-8">&#x00A0;</span><span
  9716. class="cmtt-8">&#x00A0;</span><span
  9717. class="cmtt-8">&#x00A0;</span><span
  9718. class="cmtt-8">&#x00A0;</span><span
  9719. class="cmtt-8">&#x00A0;</span><span
  9720. class="cmtt-8">&#x00A0;8)</span><span
  9721. class="cmtt-8">&#x00A0;if</span><span
  9722. class="cmtt-8">&#x00A0;vector</span><span
  9723. class="cmtt-8">&#x00A0;[j]</span><span
  9724. class="cmtt-8">&#x00A0;is</span><span
  9725. class="cmtt-8">&#x00A0;not</span><span
  9726. class="cmtt-8">&#x00A0;marked</span><span
  9727. class="cmtt-8">&#x00A0;&#8217;do</span><span
  9728. class="cmtt-8">&#x00A0;not</span><span
  9729. class="cmtt-8">&#x00A0;decode&#8217;</span><span
  9730. class="cmtt-8">&#x00A0;{</span>
  9731. <br class="fancyvrb" /><a
  9732. id="x1-112044r14"></a><span
  9733. class="cmr-6">14</span><span
  9734. class="cmtt-8">&#x00A0;</span><span
  9735. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9736. id="x1-112046r15"></a><span
  9737. class="cmr-6">15</span><span
  9738. class="cmtt-8">&#x00A0;</span><span
  9739. class="cmtt-8">&#x00A0;</span><span
  9740. class="cmtt-8">&#x00A0;</span><span
  9741. class="cmtt-8">&#x00A0;</span><span
  9742. class="cmtt-8">&#x00A0;</span><span
  9743. class="cmtt-8">&#x00A0;</span><span
  9744. class="cmtt-8">&#x00A0;</span><span
  9745. class="cmtt-8">&#x00A0;</span><span
  9746. class="cmtt-8">&#x00A0;</span><span
  9747. class="cmtt-8">&#x00A0;</span><span
  9748. class="cmtt-8">&#x00A0;</span><span
  9749. class="cmtt-8">&#x00A0;</span><span
  9750. class="cmtt-8">&#x00A0;</span><span
  9751. class="cmtt-8">&#x00A0;</span><span
  9752. class="cmtt-8">&#x00A0;</span><span
  9753. class="cmtt-8">&#x00A0;</span><span
  9754. class="cmtt-8">&#x00A0;</span><span
  9755. class="cmtt-8">&#x00A0;</span><span
  9756. class="cmtt-8">&#x00A0;</span><span
  9757. class="cmtt-8">&#x00A0;</span><span
  9758. class="cmtt-8">&#x00A0;</span><span
  9759. class="cmtt-8">&#x00A0;</span><span
  9760. class="cmtt-8">&#x00A0;</span><span
  9761. class="cmtt-8">&#x00A0;</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;</span><span
  9766. class="cmtt-8">&#x00A0;9)</span><span
  9767. class="cmtt-8">&#x00A0;[temp]</span><span
  9768. class="cmtt-8">&#x00A0;=</span><span
  9769. class="cmtt-8">&#x00A0;read</span><span
  9770. class="cmtt-8">&#x00A0;from</span><span
  9771. class="cmtt-8">&#x00A0;packet</span><span
  9772. class="cmtt-8">&#x00A0;using</span><span
  9773. class="cmtt-8">&#x00A0;codebook</span><span
  9774. class="cmtt-8">&#x00A0;[residue\_classbook]</span><span
  9775. class="cmtt-8">&#x00A0;in</span><span
  9776. class="cmtt-8">&#x00A0;scalar</span><span
  9777. class="cmtt-8">&#x00A0;context</span>
  9778. <br class="fancyvrb" /><a
  9779. id="x1-112048r16"></a><span
  9780. class="cmr-6">16</span><span
  9781. class="cmtt-8">&#x00A0;</span><span
  9782. class="cmtt-8">&#x00A0;</span><span
  9783. class="cmtt-8">&#x00A0;</span><span
  9784. class="cmtt-8">&#x00A0;</span><span
  9785. class="cmtt-8">&#x00A0;</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;</span><span
  9795. class="cmtt-8">&#x00A0;</span><span
  9796. class="cmtt-8">&#x00A0;</span><span
  9797. class="cmtt-8">&#x00A0;</span><span
  9798. class="cmtt-8">&#x00A0;</span><span
  9799. class="cmtt-8">&#x00A0;</span><span
  9800. class="cmtt-8">&#x00A0;</span><span
  9801. class="cmtt-8">&#x00A0;</span><span
  9802. class="cmtt-8">&#x00A0;</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;</span><span
  9807. class="cmtt-8">&#x00A0;</span><span
  9808. class="cmtt-8">&#x00A0;10)</span><span
  9809. class="cmtt-8">&#x00A0;iterate</span><span
  9810. class="cmtt-8">&#x00A0;[i]</span><span
  9811. class="cmtt-8">&#x00A0;descending</span><span
  9812. class="cmtt-8">&#x00A0;over</span><span
  9813. class="cmtt-8">&#x00A0;the</span><span
  9814. class="cmtt-8">&#x00A0;range</span><span
  9815. class="cmtt-8">&#x00A0;[classwords\_per\_codeword]-1</span><span
  9816. class="cmtt-8">&#x00A0;...</span><span
  9817. class="cmtt-8">&#x00A0;0</span><span
  9818. class="cmtt-8">&#x00A0;{</span>
  9819. <br class="fancyvrb" /><a
  9820. id="x1-112050r17"></a><span
  9821. class="cmr-6">17</span><span
  9822. class="cmtt-8">&#x00A0;</span><span
  9823. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9824. id="x1-112052r18"></a><span
  9825. class="cmr-6">18</span><span
  9826. class="cmtt-8">&#x00A0;</span><span
  9827. class="cmtt-8">&#x00A0;</span><span
  9828. class="cmtt-8">&#x00A0;</span><span
  9829. class="cmtt-8">&#x00A0;</span><span
  9830. class="cmtt-8">&#x00A0;</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;</span><span
  9835. class="cmtt-8">&#x00A0;</span><span
  9836. class="cmtt-8">&#x00A0;</span><span
  9837. class="cmtt-8">&#x00A0;</span><span
  9838. class="cmtt-8">&#x00A0;</span><span
  9839. class="cmtt-8">&#x00A0;</span><span
  9840. class="cmtt-8">&#x00A0;</span><span
  9841. class="cmtt-8">&#x00A0;</span><span
  9842. class="cmtt-8">&#x00A0;</span><span
  9843. class="cmtt-8">&#x00A0;</span><span
  9844. class="cmtt-8">&#x00A0;</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;</span><span
  9849. class="cmtt-8">&#x00A0;</span><span
  9850. class="cmtt-8">&#x00A0;</span><span
  9851. class="cmtt-8">&#x00A0;</span><span
  9852. class="cmtt-8">&#x00A0;</span><span
  9853. class="cmtt-8">&#x00A0;</span><span
  9854. class="cmtt-8">&#x00A0;</span><span
  9855. class="cmtt-8">&#x00A0;</span><span
  9856. class="cmtt-8">&#x00A0;</span><span
  9857. class="cmtt-8">&#x00A0;</span><span
  9858. class="cmtt-8">&#x00A0;11)</span><span
  9859. class="cmtt-8">&#x00A0;array</span><span
  9860. class="cmtt-8">&#x00A0;[classifications]</span><span
  9861. class="cmtt-8">&#x00A0;element</span><span
  9862. class="cmtt-8">&#x00A0;[j],([i]+[partition\_count])</span><span
  9863. class="cmtt-8">&#x00A0;=</span>
  9864. <br class="fancyvrb" /><a
  9865. id="x1-112054r19"></a><span
  9866. class="cmr-6">19</span><span
  9867. class="cmtt-8">&#x00A0;</span><span
  9868. class="cmtt-8">&#x00A0;</span><span
  9869. class="cmtt-8">&#x00A0;</span><span
  9870. class="cmtt-8">&#x00A0;</span><span
  9871. class="cmtt-8">&#x00A0;</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;</span><span
  9876. class="cmtt-8">&#x00A0;</span><span
  9877. class="cmtt-8">&#x00A0;</span><span
  9878. class="cmtt-8">&#x00A0;</span><span
  9879. class="cmtt-8">&#x00A0;</span><span
  9880. class="cmtt-8">&#x00A0;</span><span
  9881. class="cmtt-8">&#x00A0;</span><span
  9882. class="cmtt-8">&#x00A0;</span><span
  9883. class="cmtt-8">&#x00A0;</span><span
  9884. class="cmtt-8">&#x00A0;</span><span
  9885. class="cmtt-8">&#x00A0;</span><span
  9886. class="cmtt-8">&#x00A0;</span><span
  9887. class="cmtt-8">&#x00A0;</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;</span><span
  9892. class="cmtt-8">&#x00A0;</span><span
  9893. class="cmtt-8">&#x00A0;</span><span
  9894. class="cmtt-8">&#x00A0;</span><span
  9895. class="cmtt-8">&#x00A0;</span><span
  9896. class="cmtt-8">&#x00A0;</span><span
  9897. class="cmtt-8">&#x00A0;</span><span
  9898. class="cmtt-8">&#x00A0;</span><span
  9899. class="cmtt-8">&#x00A0;</span><span
  9900. class="cmtt-8">&#x00A0;</span><span
  9901. class="cmtt-8">&#x00A0;</span><span
  9902. class="cmtt-8">&#x00A0;</span><span
  9903. class="cmtt-8">&#x00A0;[temp]</span><span
  9904. class="cmtt-8">&#x00A0;integer</span><span
  9905. class="cmtt-8">&#x00A0;modulo</span><span
  9906. class="cmtt-8">&#x00A0;[residue\_classifications]</span>
  9907. <br class="fancyvrb" /><a
  9908. id="x1-112056r20"></a><span
  9909. class="cmr-6">20</span><span
  9910. class="cmtt-8">&#x00A0;</span><span
  9911. class="cmtt-8">&#x00A0;</span><span
  9912. class="cmtt-8">&#x00A0;</span><span
  9913. class="cmtt-8">&#x00A0;</span><span
  9914. class="cmtt-8">&#x00A0;</span><span
  9915. class="cmtt-8">&#x00A0;</span><span
  9916. class="cmtt-8">&#x00A0;</span><span
  9917. class="cmtt-8">&#x00A0;</span><span
  9918. class="cmtt-8">&#x00A0;</span><span
  9919. class="cmtt-8">&#x00A0;</span><span
  9920. class="cmtt-8">&#x00A0;</span><span
  9921. class="cmtt-8">&#x00A0;</span><span
  9922. class="cmtt-8">&#x00A0;</span><span
  9923. class="cmtt-8">&#x00A0;</span><span
  9924. class="cmtt-8">&#x00A0;</span><span
  9925. class="cmtt-8">&#x00A0;</span><span
  9926. class="cmtt-8">&#x00A0;</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;</span><span
  9936. class="cmtt-8">&#x00A0;</span><span
  9937. class="cmtt-8">&#x00A0;</span><span
  9938. class="cmtt-8">&#x00A0;</span><span
  9939. class="cmtt-8">&#x00A0;</span><span
  9940. class="cmtt-8">&#x00A0;</span><span
  9941. class="cmtt-8">&#x00A0;</span><span
  9942. class="cmtt-8">&#x00A0;12)</span><span
  9943. class="cmtt-8">&#x00A0;[temp]</span><span
  9944. class="cmtt-8">&#x00A0;=</span><span
  9945. class="cmtt-8">&#x00A0;[temp]</span><span
  9946. class="cmtt-8">&#x00A0;/</span><span
  9947. class="cmtt-8">&#x00A0;[residue\_classifications]</span><span
  9948. class="cmtt-8">&#x00A0;using</span><span
  9949. class="cmtt-8">&#x00A0;integer</span><span
  9950. class="cmtt-8">&#x00A0;division</span><br class="fancyvrb" /><a
  9951. id="x1-112058r21"></a><span
  9952. class="cmr-6">21</span><span
  9953. class="cmtt-8">&#x00A0;</span><span
  9954. class="cmtt-8">&#x00A0;</span>
  9955. <br class="fancyvrb" /><a
  9956. id="x1-112060r22"></a><span
  9957. class="cmr-6">22</span><span
  9958. class="cmtt-8">&#x00A0;</span><span
  9959. class="cmtt-8">&#x00A0;</span><span
  9960. class="cmtt-8">&#x00A0;</span><span
  9961. class="cmtt-8">&#x00A0;</span><span
  9962. class="cmtt-8">&#x00A0;</span><span
  9963. class="cmtt-8">&#x00A0;</span><span
  9964. class="cmtt-8">&#x00A0;</span><span
  9965. class="cmtt-8">&#x00A0;</span><span
  9966. class="cmtt-8">&#x00A0;</span><span
  9967. class="cmtt-8">&#x00A0;</span><span
  9968. class="cmtt-8">&#x00A0;</span><span
  9969. class="cmtt-8">&#x00A0;</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;</span><span
  9984. class="cmtt-8">&#x00A0;</span><span
  9985. class="cmtt-8">&#x00A0;</span><span
  9986. class="cmtt-8">&#x00A0;</span><span
  9987. class="cmtt-8">&#x00A0;</span><span
  9988. class="cmtt-8">&#x00A0;</span><span
  9989. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  9990. id="x1-112062r23"></a><span
  9991. class="cmr-6">23</span><span
  9992. class="cmtt-8">&#x00A0;</span><span
  9993. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  9994. id="x1-112064r24"></a><span
  9995. class="cmr-6">24</span><span
  9996. class="cmtt-8">&#x00A0;</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;</span><span
  10016. class="cmtt-8">&#x00A0;</span><span
  10017. class="cmtt-8">&#x00A0;</span><span
  10018. class="cmtt-8">&#x00A0;</span><span
  10019. class="cmtt-8">&#x00A0;</span><span
  10020. class="cmtt-8">&#x00A0;</span><span
  10021. class="cmtt-8">&#x00A0;</span><span
  10022. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  10023. id="x1-112066r25"></a><span
  10024. class="cmr-6">25</span><span
  10025. class="cmtt-8">&#x00A0;</span><span
  10026. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10027. id="x1-112068r26"></a><span
  10028. class="cmr-6">26</span><span
  10029. class="cmtt-8">&#x00A0;</span><span
  10030. class="cmtt-8">&#x00A0;</span><span
  10031. class="cmtt-8">&#x00A0;</span><span
  10032. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  10051. id="x1-112070r27"></a><span
  10052. class="cmr-6">27</span><span
  10053. class="cmtt-8">&#x00A0;</span><span
  10054. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10055. id="x1-112072r28"></a><span
  10056. class="cmr-6">28</span><span
  10057. class="cmtt-8">&#x00A0;</span><span
  10058. class="cmtt-8">&#x00A0;</span><span
  10059. class="cmtt-8">&#x00A0;</span><span
  10060. class="cmtt-8">&#x00A0;</span><span
  10061. class="cmtt-8">&#x00A0;</span><span
  10062. class="cmtt-8">&#x00A0;</span><span
  10063. class="cmtt-8">&#x00A0;</span><span
  10064. class="cmtt-8">&#x00A0;</span><span
  10065. class="cmtt-8">&#x00A0;</span><span
  10066. class="cmtt-8">&#x00A0;</span><span
  10067. class="cmtt-8">&#x00A0;</span><span
  10068. class="cmtt-8">&#x00A0;</span><span
  10069. class="cmtt-8">&#x00A0;</span><span
  10070. class="cmtt-8">&#x00A0;</span><span
  10071. class="cmtt-8">&#x00A0;</span><span
  10072. class="cmtt-8">&#x00A0;</span><span
  10073. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  10074. id="x1-112074r29"></a><span
  10075. class="cmr-6">29</span><span
  10076. class="cmtt-8">&#x00A0;</span><span
  10077. class="cmtt-8">&#x00A0;</span>
  10078. <br class="fancyvrb" /><a
  10079. id="x1-112076r30"></a><span
  10080. class="cmr-6">30</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;13)</span><span
  10094. class="cmtt-8">&#x00A0;iterate</span><span
  10095. class="cmtt-8">&#x00A0;[i]</span><span
  10096. class="cmtt-8">&#x00A0;over</span><span
  10097. class="cmtt-8">&#x00A0;the</span><span
  10098. class="cmtt-8">&#x00A0;range</span><span
  10099. class="cmtt-8">&#x00A0;0</span><span
  10100. class="cmtt-8">&#x00A0;..</span><span
  10101. class="cmtt-8">&#x00A0;([classwords\_per\_codeword]</span><span
  10102. class="cmtt-8">&#x00A0;-</span><span
  10103. class="cmtt-8">&#x00A0;1)</span><span
  10104. class="cmtt-8">&#x00A0;while</span><span
  10105. class="cmtt-8">&#x00A0;[partition\_count]</span>
  10106. <br class="fancyvrb" /><a
  10107. id="x1-112078r31"></a><span
  10108. class="cmr-6">31</span><span
  10109. class="cmtt-8">&#x00A0;</span><span
  10110. class="cmtt-8">&#x00A0;</span><span
  10111. class="cmtt-8">&#x00A0;</span><span
  10112. class="cmtt-8">&#x00A0;</span><span
  10113. class="cmtt-8">&#x00A0;</span><span
  10114. class="cmtt-8">&#x00A0;</span><span
  10115. class="cmtt-8">&#x00A0;</span><span
  10116. class="cmtt-8">&#x00A0;</span><span
  10117. class="cmtt-8">&#x00A0;</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;is</span><span
  10126. class="cmtt-8">&#x00A0;also</span><span
  10127. class="cmtt-8">&#x00A0;less</span><span
  10128. class="cmtt-8">&#x00A0;than</span><span
  10129. class="cmtt-8">&#x00A0;[partitions\_to\_read]</span><span
  10130. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  10131. id="x1-112080r32"></a><span
  10132. class="cmr-6">32</span><span
  10133. class="cmtt-8">&#x00A0;</span><span
  10134. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10135. id="x1-112082r33"></a><span
  10136. class="cmr-6">33</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;</span><span
  10146. class="cmtt-8">&#x00A0;</span><span
  10147. class="cmtt-8">&#x00A0;</span><span
  10148. class="cmtt-8">&#x00A0;</span><span
  10149. class="cmtt-8">&#x00A0;</span><span
  10150. class="cmtt-8">&#x00A0;</span><span
  10151. class="cmtt-8">&#x00A0;</span><span
  10152. class="cmtt-8">&#x00A0;</span><span
  10153. class="cmtt-8">&#x00A0;</span><span
  10154. class="cmtt-8">&#x00A0;</span><span
  10155. class="cmtt-8">&#x00A0;14)</span><span
  10156. class="cmtt-8">&#x00A0;iterate</span><span
  10157. class="cmtt-8">&#x00A0;[j]</span><span
  10158. class="cmtt-8">&#x00A0;over</span><span
  10159. class="cmtt-8">&#x00A0;the</span><span
  10160. class="cmtt-8">&#x00A0;range</span><span
  10161. class="cmtt-8">&#x00A0;0</span><span
  10162. class="cmtt-8">&#x00A0;..</span><span
  10163. class="cmtt-8">&#x00A0;[ch]-1</span><span
  10164. class="cmtt-8">&#x00A0;{</span>
  10165. <br class="fancyvrb" /><a
  10166. id="x1-112084r34"></a><span
  10167. class="cmr-6">34</span><span
  10168. class="cmtt-8">&#x00A0;</span><span
  10169. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10170. id="x1-112086r35"></a><span
  10171. class="cmr-6">35</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;15)</span><span
  10196. class="cmtt-8">&#x00A0;if</span><span
  10197. class="cmtt-8">&#x00A0;vector</span><span
  10198. class="cmtt-8">&#x00A0;[j]</span><span
  10199. class="cmtt-8">&#x00A0;is</span><span
  10200. class="cmtt-8">&#x00A0;not</span><span
  10201. class="cmtt-8">&#x00A0;marked</span><span
  10202. class="cmtt-8">&#x00A0;&#8217;do</span><span
  10203. class="cmtt-8">&#x00A0;not</span><span
  10204. class="cmtt-8">&#x00A0;decode&#8217;</span><span
  10205. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  10206. id="x1-112088r36"></a><span
  10207. class="cmr-6">36</span><span
  10208. class="cmtt-8">&#x00A0;</span><span
  10209. class="cmtt-8">&#x00A0;</span>
  10210. <br class="fancyvrb" /><a
  10211. id="x1-112090r37"></a><span
  10212. class="cmr-6">37</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;16)</span><span
  10242. class="cmtt-8">&#x00A0;[vqclass]</span><span
  10243. class="cmtt-8">&#x00A0;=</span><span
  10244. class="cmtt-8">&#x00A0;array</span><span
  10245. class="cmtt-8">&#x00A0;[classifications]</span><span
  10246. class="cmtt-8">&#x00A0;element</span><span
  10247. class="cmtt-8">&#x00A0;[j],[partition\_count]</span>
  10248. <br class="fancyvrb" /><a
  10249. id="x1-112092r38"></a><span
  10250. class="cmr-6">38</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;17)</span><span
  10280. class="cmtt-8">&#x00A0;[vqbook]</span><span
  10281. class="cmtt-8">&#x00A0;=</span><span
  10282. class="cmtt-8">&#x00A0;array</span><span
  10283. class="cmtt-8">&#x00A0;[residue\_books]</span><span
  10284. class="cmtt-8">&#x00A0;element</span><span
  10285. class="cmtt-8">&#x00A0;[vqclass],[pass]</span><br class="fancyvrb" /><a
  10286. id="x1-112094r39"></a><span
  10287. class="cmr-6">39</span><span
  10288. class="cmtt-8">&#x00A0;</span><span
  10289. class="cmtt-8">&#x00A0;</span><span
  10290. class="cmtt-8">&#x00A0;</span><span
  10291. class="cmtt-8">&#x00A0;</span><span
  10292. class="cmtt-8">&#x00A0;</span><span
  10293. class="cmtt-8">&#x00A0;</span><span
  10294. class="cmtt-8">&#x00A0;</span><span
  10295. class="cmtt-8">&#x00A0;</span><span
  10296. class="cmtt-8">&#x00A0;</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;18)</span><span
  10317. class="cmtt-8">&#x00A0;if</span><span
  10318. class="cmtt-8">&#x00A0;([vqbook]</span><span
  10319. class="cmtt-8">&#x00A0;is</span><span
  10320. class="cmtt-8">&#x00A0;not</span><span
  10321. class="cmtt-8">&#x00A0;&#8217;unused&#8217;)</span><span
  10322. class="cmtt-8">&#x00A0;{</span>
  10323. <br class="fancyvrb" /><a
  10324. id="x1-112096r40"></a><span
  10325. class="cmr-6">40</span><span
  10326. class="cmtt-8">&#x00A0;</span><span
  10327. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10328. id="x1-112098r41"></a><span
  10329. class="cmr-6">41</span><span
  10330. class="cmtt-8">&#x00A0;</span><span
  10331. class="cmtt-8">&#x00A0;</span><span
  10332. class="cmtt-8">&#x00A0;</span><span
  10333. class="cmtt-8">&#x00A0;</span><span
  10334. class="cmtt-8">&#x00A0;</span><span
  10335. class="cmtt-8">&#x00A0;</span><span
  10336. class="cmtt-8">&#x00A0;</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;19)</span><span
  10364. class="cmtt-8">&#x00A0;decode</span><span
  10365. class="cmtt-8">&#x00A0;partition</span><span
  10366. class="cmtt-8">&#x00A0;into</span><span
  10367. class="cmtt-8">&#x00A0;output</span><span
  10368. class="cmtt-8">&#x00A0;vector</span><span
  10369. class="cmtt-8">&#x00A0;number</span><span
  10370. class="cmtt-8">&#x00A0;[j],</span><span
  10371. class="cmtt-8">&#x00A0;starting</span><span
  10372. class="cmtt-8">&#x00A0;at</span><span
  10373. class="cmtt-8">&#x00A0;scalar</span>
  10374. <br class="fancyvrb" /><a
  10375. id="x1-112100r42"></a><span
  10376. class="cmr-6">42</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><span
  10394. class="cmtt-8">&#x00A0;</span><span
  10395. class="cmtt-8">&#x00A0;</span><span
  10396. class="cmtt-8">&#x00A0;</span><span
  10397. class="cmtt-8">&#x00A0;</span><span
  10398. class="cmtt-8">&#x00A0;</span><span
  10399. class="cmtt-8">&#x00A0;</span><span
  10400. class="cmtt-8">&#x00A0;</span><span
  10401. class="cmtt-8">&#x00A0;</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;offset</span><span
  10415. class="cmtt-8">&#x00A0;[limit\_residue\_begin]+[partition\_count]*[residue\_partition\_size]</span><span
  10416. class="cmtt-8">&#x00A0;using</span>
  10417. <br class="fancyvrb" /><a
  10418. id="x1-112102r43"></a><span
  10419. class="cmr-6">43</span><span
  10420. class="cmtt-8">&#x00A0;</span><span
  10421. class="cmtt-8">&#x00A0;</span><span
  10422. class="cmtt-8">&#x00A0;</span><span
  10423. class="cmtt-8">&#x00A0;</span><span
  10424. class="cmtt-8">&#x00A0;</span><span
  10425. class="cmtt-8">&#x00A0;</span><span
  10426. class="cmtt-8">&#x00A0;</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;</span><span
  10440. class="cmtt-8">&#x00A0;</span><span
  10441. class="cmtt-8">&#x00A0;</span><span
  10442. class="cmtt-8">&#x00A0;</span><span
  10443. class="cmtt-8">&#x00A0;</span><span
  10444. class="cmtt-8">&#x00A0;</span><span
  10445. class="cmtt-8">&#x00A0;</span><span
  10446. class="cmtt-8">&#x00A0;</span><span
  10447. class="cmtt-8">&#x00A0;</span><span
  10448. class="cmtt-8">&#x00A0;</span><span
  10449. class="cmtt-8">&#x00A0;</span><span
  10450. class="cmtt-8">&#x00A0;</span><span
  10451. class="cmtt-8">&#x00A0;</span><span
  10452. class="cmtt-8">&#x00A0;</span><span
  10453. class="cmtt-8">&#x00A0;</span><span
  10454. class="cmtt-8">&#x00A0;</span><span
  10455. class="cmtt-8">&#x00A0;</span><span
  10456. class="cmtt-8">&#x00A0;</span><span
  10457. class="cmtt-8">&#x00A0;codebook</span><span
  10458. class="cmtt-8">&#x00A0;number</span><span
  10459. class="cmtt-8">&#x00A0;[vqbook]</span><span
  10460. class="cmtt-8">&#x00A0;in</span><span
  10461. class="cmtt-8">&#x00A0;VQ</span><span
  10462. class="cmtt-8">&#x00A0;context</span><br class="fancyvrb" /><a
  10463. id="x1-112104r44"></a><span
  10464. class="cmr-6">44</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;</span><span
  10472. class="cmtt-8">&#x00A0;</span><span
  10473. class="cmtt-8">&#x00A0;</span><span
  10474. class="cmtt-8">&#x00A0;</span><span
  10475. class="cmtt-8">&#x00A0;</span><span
  10476. class="cmtt-8">&#x00A0;</span><span
  10477. class="cmtt-8">&#x00A0;</span><span
  10478. class="cmtt-8">&#x00A0;</span><span
  10479. class="cmtt-8">&#x00A0;</span><span
  10480. class="cmtt-8">&#x00A0;</span><span
  10481. class="cmtt-8">&#x00A0;</span><span
  10482. class="cmtt-8">&#x00A0;</span><span
  10483. class="cmtt-8">&#x00A0;</span><span
  10484. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  10493. id="x1-112106r45"></a><span
  10494. class="cmr-6">45</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;</span><span
  10504. class="cmtt-8">&#x00A0;</span><span
  10505. class="cmtt-8">&#x00A0;</span><span
  10506. class="cmtt-8">&#x00A0;</span><span
  10507. class="cmtt-8">&#x00A0;</span><span
  10508. class="cmtt-8">&#x00A0;</span><span
  10509. class="cmtt-8">&#x00A0;</span><span
  10510. class="cmtt-8">&#x00A0;</span><span
  10511. class="cmtt-8">&#x00A0;</span><span
  10512. class="cmtt-8">&#x00A0;</span><span
  10513. class="cmtt-8">&#x00A0;</span><span
  10514. class="cmtt-8">&#x00A0;</span><span
  10515. class="cmtt-8">&#x00A0;</span><span
  10516. class="cmtt-8">&#x00A0;</span><span
  10517. class="cmtt-8">&#x00A0;}</span>
  10518. <br class="fancyvrb" /><a
  10519. id="x1-112108r46"></a><span
  10520. class="cmr-6">46</span><span
  10521. class="cmtt-8">&#x00A0;</span><span
  10522. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10523. id="x1-112110r47"></a><span
  10524. class="cmr-6">47</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;20)</span><span
  10544. class="cmtt-8">&#x00A0;increment</span><span
  10545. class="cmtt-8">&#x00A0;[partition\_count]</span><span
  10546. class="cmtt-8">&#x00A0;by</span><span
  10547. class="cmtt-8">&#x00A0;one</span><br class="fancyvrb" /><a
  10548. id="x1-112112r48"></a><span
  10549. class="cmr-6">48</span><span
  10550. class="cmtt-8">&#x00A0;</span><span
  10551. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10552. id="x1-112114r49"></a><span
  10553. class="cmr-6">49</span><span
  10554. class="cmtt-8">&#x00A0;</span><span
  10555. class="cmtt-8">&#x00A0;</span><span
  10556. class="cmtt-8">&#x00A0;</span><span
  10557. class="cmtt-8">&#x00A0;</span><span
  10558. class="cmtt-8">&#x00A0;</span><span
  10559. class="cmtt-8">&#x00A0;</span><span
  10560. class="cmtt-8">&#x00A0;</span><span
  10561. class="cmtt-8">&#x00A0;</span><span
  10562. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  10571. id="x1-112116r50"></a><span
  10572. class="cmr-6">50</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><br class="fancyvrb" /><a
  10585. id="x1-112118r51"></a><span
  10586. class="cmr-6">51</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;</span><span
  10592. class="cmtt-8">&#x00A0;</span><span
  10593. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  10594. id="x1-112120r52"></a><span
  10595. class="cmr-6">52</span><span
  10596. class="cmtt-8">&#x00A0;</span><span
  10597. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10598. id="x1-112122r53"></a><span
  10599. class="cmr-6">53</span><span
  10600. class="cmtt-8">&#x00A0;</span><span
  10601. class="cmtt-8">&#x00A0;</span><span
  10602. class="cmtt-8">&#x00A0;21)</span><span
  10603. class="cmtt-8">&#x00A0;done</span><br class="fancyvrb" /><a
  10604. id="x1-112124r54"></a><span
  10605. class="cmr-6">54</span><span
  10606. class="cmtt-8">&#x00A0;</span><span
  10607. class="cmtt-8">&#x00A0;</span></div>
  10608. <!--l. 344--><p class="noindent" >An end-of-packet condition during packet decode is to be considered a nominal occurrence.
  10609. Decode returns the result of vector decode up to that point.
  10610. <!--l. 350--><p class="noindent" >
  10611. <h5 class="subsubsectionHead"><span class="titlemark">8.6.3. </span> <a
  10612. id="x1-1130008.6.3"></a>format 0 specifics</h5>
  10613. <!--l. 352--><p class="noindent" >Format zero decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 0&#8217;
  10614. section. The following pseudocode presents the same algorithm. Assume:
  10615. <ul class="itemize1">
  10616. <li class="itemize"><span
  10617. class="cmtt-12">[n] </span>is the value in <span
  10618. class="cmtt-12">[residue_partition_size]</span>
  10619. </li>
  10620. <li class="itemize"><span
  10621. class="cmtt-12">[v] </span>is the residue vector
  10622. </li>
  10623. <li class="itemize"><span
  10624. class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
  10625. <!--l. 363--><p class="noindent" >
  10626. <div class="fancyvrb" id="fancyvrb41"><a
  10627. id="x1-113002r1"></a><span
  10628. class="cmr-6">1</span><span
  10629. class="cmtt-8">&#x00A0;</span><span
  10630. class="cmtt-8">&#x00A0;</span><span
  10631. class="cmtt-8">&#x00A0;1)</span><span
  10632. class="cmtt-8">&#x00A0;[step]</span><span
  10633. class="cmtt-8">&#x00A0;=</span><span
  10634. class="cmtt-8">&#x00A0;[n]</span><span
  10635. class="cmtt-8">&#x00A0;/</span><span
  10636. class="cmtt-8">&#x00A0;[codebook\_dimensions]</span><br class="fancyvrb" /><a
  10637. id="x1-113004r2"></a><span
  10638. class="cmr-6">2</span><span
  10639. class="cmtt-8">&#x00A0;</span><span
  10640. class="cmtt-8">&#x00A0;</span><span
  10641. class="cmtt-8">&#x00A0;2)</span><span
  10642. class="cmtt-8">&#x00A0;iterate</span><span
  10643. class="cmtt-8">&#x00A0;[i]</span><span
  10644. class="cmtt-8">&#x00A0;over</span><span
  10645. class="cmtt-8">&#x00A0;the</span><span
  10646. class="cmtt-8">&#x00A0;range</span><span
  10647. class="cmtt-8">&#x00A0;0</span><span
  10648. class="cmtt-8">&#x00A0;...</span><span
  10649. class="cmtt-8">&#x00A0;[step]-1</span><span
  10650. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  10651. id="x1-113006r3"></a><span
  10652. class="cmr-6">3</span><span
  10653. class="cmtt-8">&#x00A0;</span><span
  10654. class="cmtt-8">&#x00A0;</span>
  10655. <br class="fancyvrb" /><a
  10656. id="x1-113008r4"></a><span
  10657. class="cmr-6">4</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;3)</span><span
  10666. class="cmtt-8">&#x00A0;vector</span><span
  10667. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  10668. class="cmtt-8">&#x00A0;=</span><span
  10669. class="cmtt-8">&#x00A0;read</span><span
  10670. class="cmtt-8">&#x00A0;vector</span><span
  10671. class="cmtt-8">&#x00A0;from</span><span
  10672. class="cmtt-8">&#x00A0;packet</span><span
  10673. class="cmtt-8">&#x00A0;using</span><span
  10674. class="cmtt-8">&#x00A0;current</span><span
  10675. class="cmtt-8">&#x00A0;codebook</span><span
  10676. class="cmtt-8">&#x00A0;in</span><span
  10677. class="cmtt-8">&#x00A0;VQ</span><span
  10678. class="cmtt-8">&#x00A0;context</span>
  10679. <br class="fancyvrb" /><a
  10680. id="x1-113010r5"></a><span
  10681. class="cmr-6">5</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;4)</span><span
  10690. class="cmtt-8">&#x00A0;iterate</span><span
  10691. class="cmtt-8">&#x00A0;[j]</span><span
  10692. class="cmtt-8">&#x00A0;over</span><span
  10693. class="cmtt-8">&#x00A0;the</span><span
  10694. class="cmtt-8">&#x00A0;range</span><span
  10695. class="cmtt-8">&#x00A0;0</span><span
  10696. class="cmtt-8">&#x00A0;...</span><span
  10697. class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
  10698. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  10699. id="x1-113012r6"></a><span
  10700. class="cmr-6">6</span><span
  10701. class="cmtt-8">&#x00A0;</span><span
  10702. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10703. id="x1-113014r7"></a><span
  10704. class="cmr-6">7</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;</span><span
  10716. class="cmtt-8">&#x00A0;</span><span
  10717. class="cmtt-8">&#x00A0;5)</span><span
  10718. class="cmtt-8">&#x00A0;vector</span><span
  10719. class="cmtt-8">&#x00A0;[v]</span><span
  10720. class="cmtt-8">&#x00A0;element</span><span
  10721. class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
  10722. class="cmtt-8">&#x00A0;=</span>
  10723. <br class="fancyvrb" /><a
  10724. id="x1-113016r8"></a><span
  10725. class="cmr-6">8</span><span
  10726. class="cmtt-8">&#x00A0;</span><span
  10727. class="cmtt-8">&#x00A0; </span><span
  10728. class="cmtt-8">&#x00A0;</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;vector</span><span
  10736. class="cmtt-8">&#x00A0;[v]</span><span
  10737. class="cmtt-8">&#x00A0;element</span><span
  10738. class="cmtt-8">&#x00A0;([offset]+[i]+[j]*[step])</span><span
  10739. class="cmtt-8">&#x00A0;+</span><br class="fancyvrb" /><a
  10740. id="x1-113018r9"></a><span
  10741. class="cmr-6">9</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;vector</span><span
  10760. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  10761. class="cmtt-8">&#x00A0;element</span><span
  10762. class="cmtt-8">&#x00A0;[j]</span><br class="fancyvrb" /><a
  10763. id="x1-113020r10"></a><span
  10764. class="cmr-6">10</span><span
  10765. class="cmtt-8">&#x00A0;</span><span
  10766. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10767. id="x1-113022r11"></a><span
  10768. class="cmr-6">11</span><span
  10769. class="cmtt-8">&#x00A0;</span><span
  10770. class="cmtt-8">&#x00A0;</span><span
  10771. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  10780. id="x1-113024r12"></a><span
  10781. class="cmr-6">12</span><span
  10782. class="cmtt-8">&#x00A0;</span><span
  10783. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10784. id="x1-113026r13"></a><span
  10785. class="cmr-6">13</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><br class="fancyvrb" /><a
  10792. id="x1-113028r14"></a><span
  10793. class="cmr-6">14</span><span
  10794. class="cmtt-8">&#x00A0;</span><span
  10795. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10796. id="x1-113030r15"></a><span
  10797. class="cmr-6">15</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;6)</span><span
  10802. class="cmtt-8">&#x00A0;done</span><br class="fancyvrb" /><a
  10803. id="x1-113032r16"></a><span
  10804. class="cmr-6">16</span><span
  10805. class="cmtt-8">&#x00A0;</span><span
  10806. class="cmtt-8">&#x00A0;</span></div>
  10807. <!--l. 384--><p class="noindent" >
  10808. <h5 class="subsubsectionHead"><span class="titlemark">8.6.4. </span> <a
  10809. id="x1-1140008.6.4"></a>format 1 specifics</h5>
  10810. <!--l. 386--><p class="noindent" >Format 1 decodes partitions exactly as described earlier in the &#8217;Residue Format: residue 1&#8217;
  10811. section. The following pseudocode presents the same algorithm. Assume:
  10812. <ul class="itemize1">
  10813. <li class="itemize"><span
  10814. class="cmtt-12">[n] </span>is the value in <span
  10815. class="cmtt-12">[residue_partition_size]</span>
  10816. </li>
  10817. <li class="itemize"><span
  10818. class="cmtt-12">[v] </span>is the residue vector
  10819. </li>
  10820. <li class="itemize"><span
  10821. class="cmtt-12">[offset] </span>is the beginning read offset in [v]</li></ul>
  10822. <!--l. 398--><p class="noindent" >
  10823. <div class="fancyvrb" id="fancyvrb42"><a
  10824. id="x1-114002r1"></a><span
  10825. class="cmr-6">1</span><span
  10826. class="cmtt-8">&#x00A0;</span><span
  10827. class="cmtt-8">&#x00A0;</span><span
  10828. class="cmtt-8">&#x00A0;1)</span><span
  10829. class="cmtt-8">&#x00A0;[i]</span><span
  10830. class="cmtt-8">&#x00A0;=</span><span
  10831. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  10832. id="x1-114004r2"></a><span
  10833. class="cmr-6">2</span><span
  10834. class="cmtt-8">&#x00A0;</span><span
  10835. class="cmtt-8">&#x00A0;</span><span
  10836. class="cmtt-8">&#x00A0;2)</span><span
  10837. class="cmtt-8">&#x00A0;vector</span><span
  10838. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  10839. class="cmtt-8">&#x00A0;=</span><span
  10840. class="cmtt-8">&#x00A0;read</span><span
  10841. class="cmtt-8">&#x00A0;vector</span><span
  10842. class="cmtt-8">&#x00A0;from</span><span
  10843. class="cmtt-8">&#x00A0;packet</span><span
  10844. class="cmtt-8">&#x00A0;using</span><span
  10845. class="cmtt-8">&#x00A0;current</span><span
  10846. class="cmtt-8">&#x00A0;codebook</span><span
  10847. class="cmtt-8">&#x00A0;in</span><span
  10848. class="cmtt-8">&#x00A0;VQ</span><span
  10849. class="cmtt-8">&#x00A0;context</span>
  10850. <br class="fancyvrb" /><a
  10851. id="x1-114006r3"></a><span
  10852. class="cmr-6">3</span><span
  10853. class="cmtt-8">&#x00A0;</span><span
  10854. class="cmtt-8">&#x00A0;</span><span
  10855. class="cmtt-8">&#x00A0;3)</span><span
  10856. class="cmtt-8">&#x00A0;iterate</span><span
  10857. class="cmtt-8">&#x00A0;[j]</span><span
  10858. class="cmtt-8">&#x00A0;over</span><span
  10859. class="cmtt-8">&#x00A0;the</span><span
  10860. class="cmtt-8">&#x00A0;range</span><span
  10861. class="cmtt-8">&#x00A0;0</span><span
  10862. class="cmtt-8">&#x00A0;...</span><span
  10863. class="cmtt-8">&#x00A0;[codebook\_dimensions]-1</span><span
  10864. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  10865. id="x1-114008r4"></a><span
  10866. class="cmr-6">4</span><span
  10867. class="cmtt-8">&#x00A0;</span><span
  10868. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10869. id="x1-114010r5"></a><span
  10870. class="cmr-6">5</span><span
  10871. class="cmtt-8">&#x00A0;</span><span
  10872. class="cmtt-8">&#x00A0;</span><span
  10873. class="cmtt-8">&#x00A0;</span><span
  10874. class="cmtt-8">&#x00A0;</span><span
  10875. class="cmtt-8">&#x00A0;</span><span
  10876. class="cmtt-8">&#x00A0;</span><span
  10877. class="cmtt-8">&#x00A0;</span><span
  10878. class="cmtt-8">&#x00A0;4)</span><span
  10879. class="cmtt-8">&#x00A0;vector</span><span
  10880. class="cmtt-8">&#x00A0;[v]</span><span
  10881. class="cmtt-8">&#x00A0;element</span><span
  10882. class="cmtt-8">&#x00A0;([offset]+[i])</span><span
  10883. class="cmtt-8">&#x00A0;=</span>
  10884. <br class="fancyvrb" /><a
  10885. id="x1-114012r6"></a><span
  10886. class="cmr-6">6</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;vector</span><span
  10891. class="cmtt-8">&#x00A0;[v]</span><span
  10892. class="cmtt-8">&#x00A0;element</span><span
  10893. class="cmtt-8">&#x00A0;([offset]+[i])</span><span
  10894. class="cmtt-8">&#x00A0;+</span><br class="fancyvrb" /><a
  10895. id="x1-114014r7"></a><span
  10896. class="cmr-6">7</span><span
  10897. class="cmtt-8">&#x00A0;</span><span
  10898. class="cmtt-8">&#x00A0;</span><span
  10899. class="cmtt-8">&#x00A0;</span><span
  10900. class="cmtt-8">&#x00A0;</span><span
  10901. class="cmtt-8">&#x00A0;</span><span
  10902. class="cmtt-8">&#x00A0;</span><span
  10903. class="cmtt-8">&#x00A0;</span><span
  10904. class="cmtt-8">&#x00A0;</span><span
  10905. class="cmtt-8">&#x00A0;</span><span
  10906. class="cmtt-8">&#x00A0;</span><span
  10907. class="cmtt-8">&#x00A0;</span><span
  10908. class="cmtt-8">&#x00A0;vector</span><span
  10909. class="cmtt-8">&#x00A0;[entry\_temp]</span><span
  10910. class="cmtt-8">&#x00A0;element</span><span
  10911. class="cmtt-8">&#x00A0;[j]</span><br class="fancyvrb" /><a
  10912. id="x1-114016r8"></a><span
  10913. class="cmr-6">8</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;5)</span><span
  10922. class="cmtt-8">&#x00A0;increment</span><span
  10923. class="cmtt-8">&#x00A0;[i]</span><br class="fancyvrb" /><a
  10924. id="x1-114018r9"></a><span
  10925. class="cmr-6">9</span><span
  10926. class="cmtt-8">&#x00A0;</span><span
  10927. class="cmtt-8">&#x00A0;</span>
  10928. <br class="fancyvrb" /><a
  10929. id="x1-114020r10"></a><span
  10930. class="cmr-6">10</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><br class="fancyvrb" /><a
  10937. id="x1-114022r11"></a><span
  10938. class="cmr-6">11</span><span
  10939. class="cmtt-8">&#x00A0;</span><span
  10940. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  10941. id="x1-114024r12"></a><span
  10942. class="cmr-6">12</span><span
  10943. class="cmtt-8">&#x00A0;</span><span
  10944. class="cmtt-8">&#x00A0;</span><span
  10945. class="cmtt-8">&#x00A0;</span><span
  10946. class="cmtt-8">&#x00A0;6)</span><span
  10947. class="cmtt-8">&#x00A0;if</span><span
  10948. class="cmtt-8">&#x00A0;(</span><span
  10949. class="cmtt-8">&#x00A0;[i]</span><span
  10950. class="cmtt-8">&#x00A0;is</span><span
  10951. class="cmtt-8">&#x00A0;less</span><span
  10952. class="cmtt-8">&#x00A0;than</span><span
  10953. class="cmtt-8">&#x00A0;[n]</span><span
  10954. class="cmtt-8">&#x00A0;)</span><span
  10955. class="cmtt-8">&#x00A0;continue</span><span
  10956. class="cmtt-8">&#x00A0;at</span><span
  10957. class="cmtt-8">&#x00A0;step</span><span
  10958. class="cmtt-8">&#x00A0;2</span><br class="fancyvrb" /><a
  10959. id="x1-114026r13"></a><span
  10960. class="cmr-6">13</span><span
  10961. class="cmtt-8">&#x00A0;</span><span
  10962. class="cmtt-8">&#x00A0;</span><span
  10963. class="cmtt-8">&#x00A0;</span><span
  10964. class="cmtt-8">&#x00A0;7)</span><span
  10965. class="cmtt-8">&#x00A0;done</span></div>
  10966. <!--l. 416--><p class="noindent" >
  10967. <h5 class="subsubsectionHead"><span class="titlemark">8.6.5. </span> <a
  10968. id="x1-1150008.6.5"></a>format 2 specifics</h5>
  10969. <!--l. 418--><p class="noindent" >Format 2 is reducible to format 1. It may be implemented as an additional step prior to and an
  10970. additional post-decode step after a normal format 1 decode.
  10971. <!--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
  10972. &#8217;do not decode&#8217;, no decode occurrs. However, if at least one vector is to be decoded, all
  10973. the vectors are decoded. We then request normal format 1 to decode a single vector
  10974. representing all output channels, rather than a vector for each channel. After decode,
  10975. deinterleave the vector into independent vectors, one for each output channel. That
  10976. is:
  10977. <!--l. 429--><p class="noindent" >
  10978. <dl class="enumerate-enumitem"><dt class="enumerate-enumitem">
  10979. 1. </dt><dd
  10980. class="enumerate-enumitem">If all vectors 0 through <span
  10981. class="cmti-12">ch</span>-1 are marked &#8217;do not decode&#8217;, allocate and clear a single
  10982. vector <span
  10983. class="cmtt-12">[v]</span>of length <span
  10984. class="cmti-12">ch*n </span>and skip step 2 below; proceed directly to the post-decode
  10985. step.
  10986. </dd><dt class="enumerate-enumitem">
  10987. 2. </dt><dd
  10988. class="enumerate-enumitem">Rather than performing format 1 decode to produce <span
  10989. class="cmti-12">ch </span>vectors of length <span
  10990. class="cmti-12">n </span>each, call
  10991. format 1 decode to produce a single vector <span
  10992. class="cmtt-12">[v] </span>of length <span
  10993. class="cmti-12">ch*n</span>.
  10994. </dd><dt class="enumerate-enumitem">
  10995. 3. </dt><dd
  10996. class="enumerate-enumitem">Post decode: Deinterleave the single vector <span
  10997. class="cmtt-12">[v] </span>returned by format 1 decode as
  10998. described above into <span
  10999. class="cmti-12">ch </span>independent vectors, one for each outputchannel, according
  11000. to:
  11001. <div class="fancyvrb" id="fancyvrb43"><a
  11002. id="x1-115005r1"></a><span
  11003. class="cmr-6">1</span><span
  11004. class="cmtt-8">&#x00A0;</span><span
  11005. class="cmtt-8">&#x00A0;</span><span
  11006. class="cmtt-8">&#x00A0;</span><span
  11007. class="cmtt-8">&#x00A0;1)</span><span
  11008. class="cmtt-8">&#x00A0;iterate</span><span
  11009. class="cmtt-8">&#x00A0;[i]</span><span
  11010. class="cmtt-8">&#x00A0;over</span><span
  11011. class="cmtt-8">&#x00A0;the</span><span
  11012. class="cmtt-8">&#x00A0;range</span><span
  11013. class="cmtt-8">&#x00A0;0</span><span
  11014. class="cmtt-8">&#x00A0;...</span><span
  11015. class="cmtt-8">&#x00A0;[n]-1</span><span
  11016. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11017. id="x1-115007r2"></a><span
  11018. class="cmr-6">2</span><span
  11019. class="cmtt-8">&#x00A0;</span><span
  11020. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11021. id="x1-115009r3"></a><span
  11022. class="cmr-6">3</span><span
  11023. class="cmtt-8">&#x00A0;</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;2)</span><span
  11032. class="cmtt-8">&#x00A0;iterate</span><span
  11033. class="cmtt-8">&#x00A0;[j]</span><span
  11034. class="cmtt-8">&#x00A0;over</span><span
  11035. class="cmtt-8">&#x00A0;the</span><span
  11036. class="cmtt-8">&#x00A0;range</span><span
  11037. class="cmtt-8">&#x00A0;0</span><span
  11038. class="cmtt-8">&#x00A0;...</span><span
  11039. class="cmtt-8">&#x00A0;[ch]-1</span><span
  11040. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11041. id="x1-115011r4"></a><span
  11042. class="cmr-6">4</span><span
  11043. class="cmtt-8">&#x00A0;</span><span
  11044. class="cmtt-8">&#x00A0;</span>
  11045. <br class="fancyvrb" /><a
  11046. id="x1-115013r5"></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;</span><span
  11056. class="cmtt-8">&#x00A0;</span><span
  11057. class="cmtt-8">&#x00A0;</span><span
  11058. class="cmtt-8">&#x00A0;</span><span
  11059. class="cmtt-8">&#x00A0;</span><span
  11060. class="cmtt-8">&#x00A0;</span><span
  11061. class="cmtt-8">&#x00A0;3)</span><span
  11062. class="cmtt-8">&#x00A0;output</span><span
  11063. class="cmtt-8">&#x00A0;vector</span><span
  11064. class="cmtt-8">&#x00A0;number</span><span
  11065. class="cmtt-8">&#x00A0;[j]</span><span
  11066. class="cmtt-8">&#x00A0;element</span><span
  11067. class="cmtt-8">&#x00A0;[i]</span><span
  11068. class="cmtt-8">&#x00A0;=</span><span
  11069. class="cmtt-8">&#x00A0;vector</span><span
  11070. class="cmtt-8">&#x00A0;[v]</span><span
  11071. class="cmtt-8">&#x00A0;element</span><span
  11072. class="cmtt-8">&#x00A0;([i]</span><span
  11073. class="cmtt-8">&#x00A0;*</span><span
  11074. class="cmtt-8">&#x00A0;[ch]</span><span
  11075. class="cmtt-8">&#x00A0;+</span><span
  11076. class="cmtt-8">&#x00A0;[j])</span><br class="fancyvrb" /><a
  11077. id="x1-115015r6"></a><span
  11078. class="cmr-6">6</span><span
  11079. class="cmtt-8">&#x00A0;</span><span
  11080. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11081. id="x1-115017r7"></a><span
  11082. class="cmr-6">7</span><span
  11083. class="cmtt-8">&#x00A0;</span><span
  11084. class="cmtt-8">&#x00A0;</span><span
  11085. class="cmtt-8">&#x00A0;</span><span
  11086. class="cmtt-8">&#x00A0;</span><span
  11087. class="cmtt-8">&#x00A0;</span><span
  11088. class="cmtt-8">&#x00A0;</span><span
  11089. class="cmtt-8">&#x00A0;</span><span
  11090. class="cmtt-8">&#x00A0;</span><span
  11091. class="cmtt-8">&#x00A0;</span><span
  11092. class="cmtt-8">&#x00A0;</span><span
  11093. class="cmtt-8">&#x00A0;</span><span
  11094. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  11095. id="x1-115019r8"></a><span
  11096. class="cmr-6">8</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;}</span><br class="fancyvrb" /><a
  11104. id="x1-115021r9"></a><span
  11105. class="cmr-6">9</span><span
  11106. class="cmtt-8">&#x00A0;</span><span
  11107. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11108. id="x1-115023r10"></a><span
  11109. class="cmr-6">10</span><span
  11110. class="cmtt-8">&#x00A0;</span><span
  11111. class="cmtt-8">&#x00A0;</span><span
  11112. class="cmtt-8">&#x00A0;</span><span
  11113. class="cmtt-8">&#x00A0;4)</span><span
  11114. class="cmtt-8">&#x00A0;done</span></div>
  11115. </dd></dl>
  11116. <h3 class="sectionHead"><span class="titlemark">9. </span> <a
  11117. id="x1-1160009"></a>Helper equations</h3>
  11118. <!--l. 6--><p class="noindent" >
  11119. <h4 class="subsectionHead"><span class="titlemark">9.1. </span> <a
  11120. id="x1-1170009.1"></a>Overview</h4>
  11121. <!--l. 8--><p class="noindent" >The equations below are used in multiple places by the Vorbis codec specification. Rather than
  11122. cluttering up the main specification documents, they are defined here and referenced where
  11123. appropriate.
  11124. <!--l. 13--><p class="noindent" >
  11125. <h4 class="subsectionHead"><span class="titlemark">9.2. </span> <a
  11126. id="x1-1180009.2"></a>Functions</h4>
  11127. <!--l. 15--><p class="noindent" >
  11128. <h5 class="subsubsectionHead"><span class="titlemark">9.2.1. </span> <a
  11129. id="x1-1190009.2.1"></a>ilog</h5>
  11130. <!--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
  11131. two&#8217;s complement integer value <span
  11132. class="cmtt-12">[x]</span>. Values of <span
  11133. class="cmtt-12">[x] </span>less than zero are defined to return
  11134. zero.
  11135. <!--l. 20--><p class="noindent" >
  11136. <div class="fancyvrb" id="fancyvrb44"><a
  11137. id="x1-119002r1"></a><span
  11138. class="cmr-6">1</span><span
  11139. class="cmtt-8">&#x00A0;</span><span
  11140. class="cmtt-8">&#x00A0;</span><span
  11141. class="cmtt-8">&#x00A0;</span><span
  11142. class="cmtt-8">&#x00A0;1)</span><span
  11143. class="cmtt-8">&#x00A0;[return\_value]</span><span
  11144. class="cmtt-8">&#x00A0;=</span><span
  11145. class="cmtt-8">&#x00A0;0;</span><br class="fancyvrb" /><a
  11146. id="x1-119004r2"></a><span
  11147. class="cmr-6">2</span><span
  11148. class="cmtt-8">&#x00A0;</span><span
  11149. class="cmtt-8">&#x00A0;</span><span
  11150. class="cmtt-8">&#x00A0;</span><span
  11151. class="cmtt-8">&#x00A0;2)</span><span
  11152. class="cmtt-8">&#x00A0;if</span><span
  11153. class="cmtt-8">&#x00A0;(</span><span
  11154. class="cmtt-8">&#x00A0;[x]</span><span
  11155. class="cmtt-8">&#x00A0;is</span><span
  11156. class="cmtt-8">&#x00A0;greater</span><span
  11157. class="cmtt-8">&#x00A0;than</span><span
  11158. class="cmtt-8">&#x00A0;zero</span><span
  11159. class="cmtt-8">&#x00A0;)</span><span
  11160. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11161. id="x1-119006r3"></a><span
  11162. class="cmr-6">3</span><span
  11163. class="cmtt-8">&#x00A0;</span><span
  11164. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11165. id="x1-119008r4"></a><span
  11166. class="cmr-6">4</span><span
  11167. class="cmtt-8">&#x00A0;</span><span
  11168. class="cmtt-8">&#x00A0;</span><span
  11169. class="cmtt-8">&#x00A0;</span><span
  11170. class="cmtt-8">&#x00A0;</span><span
  11171. class="cmtt-8">&#x00A0;</span><span
  11172. class="cmtt-8">&#x00A0;</span><span
  11173. class="cmtt-8">&#x00A0;</span><span
  11174. class="cmtt-8">&#x00A0;</span><span
  11175. class="cmtt-8">&#x00A0;3)</span><span
  11176. class="cmtt-8">&#x00A0;increment</span><span
  11177. class="cmtt-8">&#x00A0;[return\_value];</span>
  11178. <br class="fancyvrb" /><a
  11179. id="x1-119010r5"></a><span
  11180. class="cmr-6">5</span><span
  11181. class="cmtt-8">&#x00A0;</span><span
  11182. class="cmtt-8">&#x00A0;</span><span
  11183. class="cmtt-8">&#x00A0;</span><span
  11184. class="cmtt-8">&#x00A0;</span><span
  11185. class="cmtt-8">&#x00A0;</span><span
  11186. class="cmtt-8">&#x00A0;</span><span
  11187. class="cmtt-8">&#x00A0;</span><span
  11188. class="cmtt-8">&#x00A0;</span><span
  11189. class="cmtt-8">&#x00A0;4)</span><span
  11190. class="cmtt-8">&#x00A0;logical</span><span
  11191. class="cmtt-8">&#x00A0;shift</span><span
  11192. class="cmtt-8">&#x00A0;[x]</span><span
  11193. class="cmtt-8">&#x00A0;one</span><span
  11194. class="cmtt-8">&#x00A0;bit</span><span
  11195. class="cmtt-8">&#x00A0;to</span><span
  11196. class="cmtt-8">&#x00A0;the</span><span
  11197. class="cmtt-8">&#x00A0;right,</span><span
  11198. class="cmtt-8">&#x00A0;padding</span><span
  11199. class="cmtt-8">&#x00A0;the</span><span
  11200. class="cmtt-8">&#x00A0;MSb</span><span
  11201. class="cmtt-8">&#x00A0;with</span><span
  11202. class="cmtt-8">&#x00A0;zero</span><br class="fancyvrb" /><a
  11203. id="x1-119012r6"></a><span
  11204. class="cmr-6">6</span><span
  11205. class="cmtt-8">&#x00A0;</span><span
  11206. class="cmtt-8">&#x00A0;</span><span
  11207. class="cmtt-8">&#x00A0;</span><span
  11208. class="cmtt-8">&#x00A0;</span><span
  11209. class="cmtt-8">&#x00A0;</span><span
  11210. class="cmtt-8">&#x00A0;</span><span
  11211. class="cmtt-8">&#x00A0;</span><span
  11212. class="cmtt-8">&#x00A0;</span><span
  11213. class="cmtt-8">&#x00A0;5)</span><span
  11214. class="cmtt-8">&#x00A0;repeat</span><span
  11215. class="cmtt-8">&#x00A0;at</span><span
  11216. class="cmtt-8">&#x00A0;step</span><span
  11217. class="cmtt-8">&#x00A0;2)</span><br class="fancyvrb" /><a
  11218. id="x1-119014r7"></a><span
  11219. class="cmr-6">7</span><span
  11220. class="cmtt-8">&#x00A0;</span><span
  11221. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11222. id="x1-119016r8"></a><span
  11223. class="cmr-6">8</span><span
  11224. class="cmtt-8">&#x00A0;</span><span
  11225. class="cmtt-8">&#x00A0;</span><span
  11226. class="cmtt-8">&#x00A0;</span><span
  11227. class="cmtt-8">&#x00A0;</span><span
  11228. class="cmtt-8">&#x00A0;</span><span
  11229. class="cmtt-8">&#x00A0;</span><span
  11230. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  11231. id="x1-119018r9"></a><span
  11232. class="cmr-6">9</span><span
  11233. class="cmtt-8">&#x00A0;</span><span
  11234. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11235. id="x1-119020r10"></a><span
  11236. class="cmr-6">10</span><span
  11237. class="cmtt-8">&#x00A0;</span><span
  11238. class="cmtt-8">&#x00A0;</span><span
  11239. class="cmtt-8">&#x00A0;</span><span
  11240. class="cmtt-8">&#x00A0;</span><span
  11241. class="cmtt-8">&#x00A0;6)</span><span
  11242. class="cmtt-8">&#x00A0;done</span></div>
  11243. <!--l. 33--><p class="noindent" >Examples:
  11244. <ul class="itemize1">
  11245. <li class="itemize">ilog(0) = 0;
  11246. </li>
  11247. <li class="itemize">ilog(1) = 1;
  11248. </li>
  11249. <li class="itemize">ilog(2) = 2;
  11250. </li>
  11251. <li class="itemize">ilog(3) = 2;
  11252. </li>
  11253. <li class="itemize">ilog(4) = 3;
  11254. </li>
  11255. <li class="itemize">ilog(7) = 3;
  11256. </li>
  11257. <li class="itemize">ilog(negative number) = 0;</li></ul>
  11258. <!--l. 48--><p class="noindent" >
  11259. <h5 class="subsubsectionHead"><span class="titlemark">9.2.2. </span> <a
  11260. id="x1-1200009.2.2"></a>float32_unpack</h5>
  11261. <!--l. 50--><p class="noindent" >&#8221;float32_unpack(x)&#8221; is intended to translate the packed binary representation of a Vorbis
  11262. codebook float value into the representation used by the decoder for floating point numbers. For
  11263. purposes of this example, we will unpack a Vorbis float32 into a host-native floating point
  11264. number.
  11265. <!--l. 56--><p class="noindent" >
  11266. <div class="fancyvrb" id="fancyvrb45"><a
  11267. id="x1-120002r1"></a><span
  11268. class="cmr-6">1</span><span
  11269. class="cmtt-8">&#x00A0;</span><span
  11270. class="cmtt-8">&#x00A0;</span><span
  11271. class="cmtt-8">&#x00A0;</span><span
  11272. class="cmtt-8">&#x00A0;1)</span><span
  11273. class="cmtt-8">&#x00A0;[mantissa]</span><span
  11274. class="cmtt-8">&#x00A0;=</span><span
  11275. class="cmtt-8">&#x00A0;[x]</span><span
  11276. class="cmtt-8">&#x00A0;bitwise</span><span
  11277. class="cmtt-8">&#x00A0;AND</span><span
  11278. class="cmtt-8">&#x00A0;0x1fffff</span><span
  11279. class="cmtt-8">&#x00A0;(unsigned</span><span
  11280. class="cmtt-8">&#x00A0;result)</span><br class="fancyvrb" /><a
  11281. id="x1-120004r2"></a><span
  11282. class="cmr-6">2</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;2)</span><span
  11287. class="cmtt-8">&#x00A0;[sign]</span><span
  11288. class="cmtt-8">&#x00A0;=</span><span
  11289. class="cmtt-8">&#x00A0;[x]</span><span
  11290. class="cmtt-8">&#x00A0;bitwise</span><span
  11291. class="cmtt-8">&#x00A0;AND</span><span
  11292. class="cmtt-8">&#x00A0;0x80000000</span><span
  11293. class="cmtt-8">&#x00A0;(unsigned</span><span
  11294. class="cmtt-8">&#x00A0;result)</span>
  11295. <br class="fancyvrb" /><a
  11296. id="x1-120006r3"></a><span
  11297. class="cmr-6">3</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;3)</span><span
  11302. class="cmtt-8">&#x00A0;[exponent]</span><span
  11303. class="cmtt-8">&#x00A0;=</span><span
  11304. class="cmtt-8">&#x00A0;(</span><span
  11305. class="cmtt-8">&#x00A0;[x]</span><span
  11306. class="cmtt-8">&#x00A0;bitwise</span><span
  11307. class="cmtt-8">&#x00A0;AND</span><span
  11308. class="cmtt-8">&#x00A0;0x7fe00000)</span><span
  11309. class="cmtt-8">&#x00A0;shifted</span><span
  11310. class="cmtt-8">&#x00A0;right</span><span
  11311. class="cmtt-8">&#x00A0;21</span><span
  11312. class="cmtt-8">&#x00A0;bits</span><span
  11313. class="cmtt-8">&#x00A0;(unsigned</span><span
  11314. class="cmtt-8">&#x00A0;result)</span>
  11315. <br class="fancyvrb" /><a
  11316. id="x1-120008r4"></a><span
  11317. class="cmr-6">4</span><span
  11318. class="cmtt-8">&#x00A0;</span><span
  11319. class="cmtt-8">&#x00A0;</span><span
  11320. class="cmtt-8">&#x00A0;</span><span
  11321. class="cmtt-8">&#x00A0;4)</span><span
  11322. class="cmtt-8">&#x00A0;if</span><span
  11323. class="cmtt-8">&#x00A0;(</span><span
  11324. class="cmtt-8">&#x00A0;[sign]</span><span
  11325. class="cmtt-8">&#x00A0;is</span><span
  11326. class="cmtt-8">&#x00A0;nonzero</span><span
  11327. class="cmtt-8">&#x00A0;)</span><span
  11328. class="cmtt-8">&#x00A0;then</span><span
  11329. class="cmtt-8">&#x00A0;negate</span><span
  11330. class="cmtt-8">&#x00A0;[mantissa]</span><br class="fancyvrb" /><a
  11331. id="x1-120010r5"></a><span
  11332. class="cmr-6">5</span><span
  11333. class="cmtt-8">&#x00A0;</span><span
  11334. class="cmtt-8">&#x00A0;</span><span
  11335. class="cmtt-8">&#x00A0;</span><span
  11336. class="cmtt-8">&#x00A0;5)</span><span
  11337. class="cmtt-8">&#x00A0;return</span><span
  11338. class="cmtt-8">&#x00A0;[mantissa]</span><span
  11339. class="cmtt-8">&#x00A0;*</span><span
  11340. class="cmtt-8">&#x00A0;(</span><span
  11341. class="cmtt-8">&#x00A0;2</span><span
  11342. class="cmtt-8">&#x00A0;^</span><span
  11343. class="cmtt-8">&#x00A0;(</span><span
  11344. class="cmtt-8">&#x00A0;[exponent]</span><span
  11345. class="cmtt-8">&#x00A0;-</span><span
  11346. class="cmtt-8">&#x00A0;788</span><span
  11347. class="cmtt-8">&#x00A0;)</span><span
  11348. class="cmtt-8">&#x00A0;)</span></div>
  11349. <!--l. 66--><p class="noindent" >
  11350. <h5 class="subsubsectionHead"><span class="titlemark">9.2.3. </span> <a
  11351. id="x1-1210009.2.3"></a>lookup1_values</h5>
  11352. <!--l. 68--><p class="noindent" >&#8221;lookup1_values(codebook_entries,codebook_dimensions)&#8221; is used to compute the
  11353. correct length of the value index for a codebook VQ lookup table of lookup type 1.
  11354. The values on this list are permuted to construct the VQ vector lookup table of size
  11355. <span
  11356. class="cmtt-12">[codebook_entries]</span>.
  11357. <!--l. 74--><p class="noindent" >The return value for this function is defined to be &#8217;the greatest integer value for which
  11358. <span
  11359. class="cmtt-12">[return_value] </span>to the power of <span
  11360. class="cmtt-12">[codebook_dimensions] </span>is less than or equal to
  11361. <span
  11362. class="cmtt-12">[codebook_entries]</span>&#8217;.
  11363. <!--l. 81--><p class="noindent" >
  11364. <h5 class="subsubsectionHead"><span class="titlemark">9.2.4. </span> <a
  11365. id="x1-1220009.2.4"></a>low_neighbor</h5>
  11366. <!--l. 83--><p class="noindent" >&#8221;low_neighbor(v,x)&#8221; finds the position <span
  11367. class="cmtt-12">n </span>in vector <span
  11368. class="cmtt-12">[v] </span>of the greatest value scalar element for
  11369. which <span
  11370. class="cmtt-12">n </span>is less than <span
  11371. class="cmtt-12">[x] </span>and vector <span
  11372. class="cmtt-12">[v] </span>element <span
  11373. class="cmtt-12">n </span>is less than vector <span
  11374. class="cmtt-12">[v] </span>element
  11375. <span
  11376. class="cmtt-12">[x]</span>.
  11377. <!--l. 88--><p class="noindent" >
  11378. <h5 class="subsubsectionHead"><span class="titlemark">9.2.5. </span> <a
  11379. id="x1-1230009.2.5"></a>high_neighbor</h5>
  11380. <!--l. 90--><p class="noindent" >&#8221;high_neighbor(v,x)&#8221; finds the position <span
  11381. class="cmtt-12">n </span>in vector [v] of the lowest value scalar element for
  11382. which <span
  11383. class="cmtt-12">n </span>is less than <span
  11384. class="cmtt-12">[x] </span>and vector <span
  11385. class="cmtt-12">[v] </span>element <span
  11386. class="cmtt-12">n </span>is greater than vector <span
  11387. class="cmtt-12">[v] </span>element
  11388. <span
  11389. class="cmtt-12">[x]</span>.
  11390. <!--l. 97--><p class="noindent" >
  11391. <h5 class="subsubsectionHead"><span class="titlemark">9.2.6. </span> <a
  11392. id="x1-1240009.2.6"></a>render_point</h5>
  11393. <!--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
  11394. x0, x1, y0 and y1. This function uses an integer algorithm to solve for the point directly without
  11395. calculating intervening values along the line.
  11396. <!--l. 104--><p class="noindent" >
  11397. <div class="fancyvrb" id="fancyvrb46"><a
  11398. id="x1-124002r1"></a><span
  11399. class="cmr-6">1</span><span
  11400. class="cmtt-8">&#x00A0;</span><span
  11401. class="cmtt-8">&#x00A0;</span><span
  11402. class="cmtt-8">&#x00A0;</span><span
  11403. class="cmtt-8">&#x00A0;1)</span><span
  11404. class="cmtt-8">&#x00A0;</span><span
  11405. class="cmtt-8">&#x00A0;[dy]</span><span
  11406. class="cmtt-8">&#x00A0;=</span><span
  11407. class="cmtt-8">&#x00A0;[y1]</span><span
  11408. class="cmtt-8">&#x00A0;-</span><span
  11409. class="cmtt-8">&#x00A0;[y0]</span><br class="fancyvrb" /><a
  11410. id="x1-124004r2"></a><span
  11411. class="cmr-6">2</span><span
  11412. class="cmtt-8">&#x00A0;</span><span
  11413. class="cmtt-8">&#x00A0;</span><span
  11414. class="cmtt-8">&#x00A0;</span><span
  11415. class="cmtt-8">&#x00A0;2)</span><span
  11416. class="cmtt-8">&#x00A0;[adx]</span><span
  11417. class="cmtt-8">&#x00A0;=</span><span
  11418. class="cmtt-8">&#x00A0;[x1]</span><span
  11419. class="cmtt-8">&#x00A0;-</span><span
  11420. class="cmtt-8">&#x00A0;[x0]</span><br class="fancyvrb" /><a
  11421. id="x1-124006r3"></a><span
  11422. class="cmr-6">3</span><span
  11423. class="cmtt-8">&#x00A0;</span><span
  11424. class="cmtt-8">&#x00A0;</span><span
  11425. class="cmtt-8">&#x00A0;</span><span
  11426. class="cmtt-8">&#x00A0;3)</span><span
  11427. class="cmtt-8">&#x00A0;[ady]</span><span
  11428. class="cmtt-8">&#x00A0;=</span><span
  11429. class="cmtt-8">&#x00A0;absolute</span><span
  11430. class="cmtt-8">&#x00A0;value</span><span
  11431. class="cmtt-8">&#x00A0;of</span><span
  11432. class="cmtt-8">&#x00A0;[dy]</span><br class="fancyvrb" /><a
  11433. id="x1-124008r4"></a><span
  11434. class="cmr-6">4</span><span
  11435. class="cmtt-8">&#x00A0;</span><span
  11436. class="cmtt-8">&#x00A0;</span><span
  11437. class="cmtt-8">&#x00A0;</span><span
  11438. class="cmtt-8">&#x00A0;4)</span><span
  11439. class="cmtt-8">&#x00A0;[err]</span><span
  11440. class="cmtt-8">&#x00A0;=</span><span
  11441. class="cmtt-8">&#x00A0;[ady]</span><span
  11442. class="cmtt-8">&#x00A0;*</span><span
  11443. class="cmtt-8">&#x00A0;([X]</span><span
  11444. class="cmtt-8">&#x00A0;-</span><span
  11445. class="cmtt-8">&#x00A0;[x0])</span>
  11446. <br class="fancyvrb" /><a
  11447. id="x1-124010r5"></a><span
  11448. class="cmr-6">5</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;5)</span><span
  11453. class="cmtt-8">&#x00A0;[off]</span><span
  11454. class="cmtt-8">&#x00A0;=</span><span
  11455. class="cmtt-8">&#x00A0;[err]</span><span
  11456. class="cmtt-8">&#x00A0;/</span><span
  11457. class="cmtt-8">&#x00A0;[adx]</span><span
  11458. class="cmtt-8">&#x00A0;using</span><span
  11459. class="cmtt-8">&#x00A0;integer</span><span
  11460. class="cmtt-8">&#x00A0;division</span><br class="fancyvrb" /><a
  11461. id="x1-124012r6"></a><span
  11462. class="cmr-6">6</span><span
  11463. class="cmtt-8">&#x00A0;</span><span
  11464. class="cmtt-8">&#x00A0;</span><span
  11465. class="cmtt-8">&#x00A0;</span><span
  11466. class="cmtt-8">&#x00A0;6)</span><span
  11467. class="cmtt-8">&#x00A0;if</span><span
  11468. class="cmtt-8">&#x00A0;(</span><span
  11469. class="cmtt-8">&#x00A0;[dy]</span><span
  11470. class="cmtt-8">&#x00A0;is</span><span
  11471. class="cmtt-8">&#x00A0;less</span><span
  11472. class="cmtt-8">&#x00A0;than</span><span
  11473. class="cmtt-8">&#x00A0;zero</span><span
  11474. class="cmtt-8">&#x00A0;)</span><span
  11475. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11476. id="x1-124014r7"></a><span
  11477. class="cmr-6">7</span><span
  11478. class="cmtt-8">&#x00A0;</span><span
  11479. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11480. id="x1-124016r8"></a><span
  11481. class="cmr-6">8</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><span
  11489. class="cmtt-8">&#x00A0;</span><span
  11490. class="cmtt-8">&#x00A0;7)</span><span
  11491. class="cmtt-8">&#x00A0;[Y]</span><span
  11492. class="cmtt-8">&#x00A0;=</span><span
  11493. class="cmtt-8">&#x00A0;[y0]</span><span
  11494. class="cmtt-8">&#x00A0;-</span><span
  11495. class="cmtt-8">&#x00A0;[off]</span>
  11496. <br class="fancyvrb" /><a
  11497. id="x1-124018r9"></a><span
  11498. class="cmr-6">9</span><span
  11499. class="cmtt-8">&#x00A0;</span><span
  11500. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11501. id="x1-124020r10"></a><span
  11502. class="cmr-6">10</span><span
  11503. class="cmtt-8">&#x00A0;</span><span
  11504. class="cmtt-8">&#x00A0;</span><span
  11505. class="cmtt-8">&#x00A0;</span><span
  11506. class="cmtt-8">&#x00A0;</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;else</span><span
  11511. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11512. id="x1-124022r11"></a><span
  11513. class="cmr-6">11</span><span
  11514. class="cmtt-8">&#x00A0;</span><span
  11515. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11516. id="x1-124024r12"></a><span
  11517. class="cmr-6">12</span><span
  11518. class="cmtt-8">&#x00A0;</span><span
  11519. class="cmtt-8">&#x00A0;</span><span
  11520. class="cmtt-8">&#x00A0;</span><span
  11521. class="cmtt-8">&#x00A0;</span><span
  11522. class="cmtt-8">&#x00A0;</span><span
  11523. class="cmtt-8">&#x00A0;</span><span
  11524. class="cmtt-8">&#x00A0;</span><span
  11525. class="cmtt-8">&#x00A0;</span><span
  11526. class="cmtt-8">&#x00A0;8)</span><span
  11527. class="cmtt-8">&#x00A0;[Y]</span><span
  11528. class="cmtt-8">&#x00A0;=</span><span
  11529. class="cmtt-8">&#x00A0;[y0]</span><span
  11530. class="cmtt-8">&#x00A0;+</span><span
  11531. class="cmtt-8">&#x00A0;[off]</span><br class="fancyvrb" /><a
  11532. id="x1-124026r13"></a><span
  11533. class="cmr-6">13</span><span
  11534. class="cmtt-8">&#x00A0;</span><span
  11535. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11536. id="x1-124028r14"></a><span
  11537. class="cmr-6">14</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;</span><span
  11542. class="cmtt-8">&#x00A0;</span><span
  11543. class="cmtt-8">&#x00A0;</span><span
  11544. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  11545. id="x1-124030r15"></a><span
  11546. class="cmr-6">15</span><span
  11547. class="cmtt-8">&#x00A0;</span><span
  11548. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11549. id="x1-124032r16"></a><span
  11550. class="cmr-6">16</span><span
  11551. class="cmtt-8">&#x00A0;</span><span
  11552. class="cmtt-8">&#x00A0;</span><span
  11553. class="cmtt-8">&#x00A0;</span><span
  11554. class="cmtt-8">&#x00A0;9)</span><span
  11555. class="cmtt-8">&#x00A0;done</span></div>
  11556. <!--l. 125--><p class="noindent" >
  11557. <h5 class="subsubsectionHead"><span class="titlemark">9.2.7. </span> <a
  11558. id="x1-1250009.2.7"></a>render_line</h5>
  11559. <!--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;
  11560. to construct an integer floor curve for contiguous piecewise line segments. Note that it has not
  11561. been relevant elsewhere, but here we must define integer division as rounding division of both
  11562. positive and negative numbers toward zero.
  11563. <!--l. 134--><p class="noindent" >
  11564. <div class="fancyvrb" id="fancyvrb47"><a
  11565. id="x1-125002r1"></a><span
  11566. class="cmr-6">1</span><span
  11567. class="cmtt-8">&#x00A0;</span><span
  11568. class="cmtt-8">&#x00A0;</span><span
  11569. class="cmtt-8">&#x00A0;</span><span
  11570. class="cmtt-8">&#x00A0;1)</span><span
  11571. class="cmtt-8">&#x00A0;</span><span
  11572. class="cmtt-8">&#x00A0;</span><span
  11573. class="cmtt-8">&#x00A0;[dy]</span><span
  11574. class="cmtt-8">&#x00A0;=</span><span
  11575. class="cmtt-8">&#x00A0;[y1]</span><span
  11576. class="cmtt-8">&#x00A0;-</span><span
  11577. class="cmtt-8">&#x00A0;[y0]</span><br class="fancyvrb" /><a
  11578. id="x1-125004r2"></a><span
  11579. class="cmr-6">2</span><span
  11580. class="cmtt-8">&#x00A0;</span><span
  11581. class="cmtt-8">&#x00A0;</span><span
  11582. class="cmtt-8">&#x00A0;</span><span
  11583. class="cmtt-8">&#x00A0;2)</span><span
  11584. class="cmtt-8">&#x00A0;</span><span
  11585. class="cmtt-8">&#x00A0;[adx]</span><span
  11586. class="cmtt-8">&#x00A0;=</span><span
  11587. class="cmtt-8">&#x00A0;[x1]</span><span
  11588. class="cmtt-8">&#x00A0;-</span><span
  11589. class="cmtt-8">&#x00A0;[x0]</span><br class="fancyvrb" /><a
  11590. id="x1-125006r3"></a><span
  11591. class="cmr-6">3</span><span
  11592. class="cmtt-8">&#x00A0;</span><span
  11593. class="cmtt-8">&#x00A0;</span><span
  11594. class="cmtt-8">&#x00A0;</span><span
  11595. class="cmtt-8">&#x00A0;3)</span><span
  11596. class="cmtt-8">&#x00A0;</span><span
  11597. class="cmtt-8">&#x00A0;[ady]</span><span
  11598. class="cmtt-8">&#x00A0;=</span><span
  11599. class="cmtt-8">&#x00A0;absolute</span><span
  11600. class="cmtt-8">&#x00A0;value</span><span
  11601. class="cmtt-8">&#x00A0;of</span><span
  11602. class="cmtt-8">&#x00A0;[dy]</span><br class="fancyvrb" /><a
  11603. id="x1-125008r4"></a><span
  11604. class="cmr-6">4</span><span
  11605. class="cmtt-8">&#x00A0;</span><span
  11606. class="cmtt-8">&#x00A0;</span><span
  11607. class="cmtt-8">&#x00A0;</span><span
  11608. class="cmtt-8">&#x00A0;4)</span><span
  11609. class="cmtt-8">&#x00A0;[base]</span><span
  11610. class="cmtt-8">&#x00A0;=</span><span
  11611. class="cmtt-8">&#x00A0;[dy]</span><span
  11612. class="cmtt-8">&#x00A0;/</span><span
  11613. class="cmtt-8">&#x00A0;[adx]</span><span
  11614. class="cmtt-8">&#x00A0;using</span><span
  11615. class="cmtt-8">&#x00A0;integer</span><span
  11616. class="cmtt-8">&#x00A0;division</span>
  11617. <br class="fancyvrb" /><a
  11618. id="x1-125010r5"></a><span
  11619. class="cmr-6">5</span><span
  11620. class="cmtt-8">&#x00A0;</span><span
  11621. class="cmtt-8">&#x00A0;</span><span
  11622. class="cmtt-8">&#x00A0;</span><span
  11623. class="cmtt-8">&#x00A0;5)</span><span
  11624. class="cmtt-8">&#x00A0;</span><span
  11625. class="cmtt-8">&#x00A0;</span><span
  11626. class="cmtt-8">&#x00A0;</span><span
  11627. class="cmtt-8">&#x00A0;[x]</span><span
  11628. class="cmtt-8">&#x00A0;=</span><span
  11629. class="cmtt-8">&#x00A0;[x0]</span><br class="fancyvrb" /><a
  11630. id="x1-125012r6"></a><span
  11631. class="cmr-6">6</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;6)</span><span
  11636. class="cmtt-8">&#x00A0;</span><span
  11637. class="cmtt-8">&#x00A0;</span><span
  11638. class="cmtt-8">&#x00A0;</span><span
  11639. class="cmtt-8">&#x00A0;[y]</span><span
  11640. class="cmtt-8">&#x00A0;=</span><span
  11641. class="cmtt-8">&#x00A0;[y0]</span><br class="fancyvrb" /><a
  11642. id="x1-125014r7"></a><span
  11643. class="cmr-6">7</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;7)</span><span
  11648. class="cmtt-8">&#x00A0;</span><span
  11649. class="cmtt-8">&#x00A0;[err]</span><span
  11650. class="cmtt-8">&#x00A0;=</span><span
  11651. class="cmtt-8">&#x00A0;0</span><br class="fancyvrb" /><a
  11652. id="x1-125016r8"></a><span
  11653. class="cmr-6">8</span><span
  11654. class="cmtt-8">&#x00A0;</span><span
  11655. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11656. id="x1-125018r9"></a><span
  11657. class="cmr-6">9</span><span
  11658. class="cmtt-8">&#x00A0;</span><span
  11659. class="cmtt-8">&#x00A0;</span><span
  11660. class="cmtt-8">&#x00A0;</span><span
  11661. class="cmtt-8">&#x00A0;8)</span><span
  11662. class="cmtt-8">&#x00A0;if</span><span
  11663. class="cmtt-8">&#x00A0;(</span><span
  11664. class="cmtt-8">&#x00A0;[dy]</span><span
  11665. class="cmtt-8">&#x00A0;is</span><span
  11666. class="cmtt-8">&#x00A0;less</span><span
  11667. class="cmtt-8">&#x00A0;than</span><span
  11668. class="cmtt-8">&#x00A0;0</span><span
  11669. class="cmtt-8">&#x00A0;)</span><span
  11670. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11671. id="x1-125020r10"></a><span
  11672. class="cmr-6">10</span><span
  11673. class="cmtt-8">&#x00A0;</span><span
  11674. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11675. id="x1-125022r11"></a><span
  11676. class="cmr-6">11</span><span
  11677. class="cmtt-8">&#x00A0;</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;</span><span
  11682. class="cmtt-8">&#x00A0;</span><span
  11683. class="cmtt-8">&#x00A0;</span><span
  11684. class="cmtt-8">&#x00A0;</span><span
  11685. class="cmtt-8">&#x00A0;</span><span
  11686. class="cmtt-8">&#x00A0;9)</span><span
  11687. class="cmtt-8">&#x00A0;[sy]</span><span
  11688. class="cmtt-8">&#x00A0;=</span><span
  11689. class="cmtt-8">&#x00A0;[base]</span><span
  11690. class="cmtt-8">&#x00A0;-</span><span
  11691. class="cmtt-8">&#x00A0;1</span>
  11692. <br class="fancyvrb" /><a
  11693. id="x1-125024r12"></a><span
  11694. class="cmr-6">12</span><span
  11695. class="cmtt-8">&#x00A0;</span><span
  11696. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11697. id="x1-125026r13"></a><span
  11698. class="cmr-6">13</span><span
  11699. class="cmtt-8">&#x00A0;</span><span
  11700. class="cmtt-8">&#x00A0;</span><span
  11701. class="cmtt-8">&#x00A0;</span><span
  11702. class="cmtt-8">&#x00A0;</span><span
  11703. class="cmtt-8">&#x00A0;</span><span
  11704. class="cmtt-8">&#x00A0;</span><span
  11705. class="cmtt-8">&#x00A0;}</span><span
  11706. class="cmtt-8">&#x00A0;else</span><span
  11707. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11708. id="x1-125028r14"></a><span
  11709. class="cmr-6">14</span><span
  11710. class="cmtt-8">&#x00A0;</span><span
  11711. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11712. id="x1-125030r15"></a><span
  11713. class="cmr-6">15</span><span
  11714. class="cmtt-8">&#x00A0;</span><span
  11715. class="cmtt-8">&#x00A0;</span><span
  11716. class="cmtt-8">&#x00A0;</span><span
  11717. class="cmtt-8">&#x00A0;</span><span
  11718. class="cmtt-8">&#x00A0;</span><span
  11719. class="cmtt-8">&#x00A0;</span><span
  11720. class="cmtt-8">&#x00A0;</span><span
  11721. class="cmtt-8">&#x00A0;</span><span
  11722. class="cmtt-8">&#x00A0;10)</span><span
  11723. class="cmtt-8">&#x00A0;[sy]</span><span
  11724. class="cmtt-8">&#x00A0;=</span><span
  11725. class="cmtt-8">&#x00A0;[base]</span><span
  11726. class="cmtt-8">&#x00A0;+</span><span
  11727. class="cmtt-8">&#x00A0;1</span><br class="fancyvrb" /><a
  11728. id="x1-125032r16"></a><span
  11729. class="cmr-6">16</span><span
  11730. class="cmtt-8">&#x00A0;</span><span
  11731. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11732. id="x1-125034r17"></a><span
  11733. class="cmr-6">17</span><span
  11734. class="cmtt-8">&#x00A0;</span><span
  11735. class="cmtt-8">&#x00A0;</span><span
  11736. class="cmtt-8">&#x00A0;</span><span
  11737. class="cmtt-8">&#x00A0;</span><span
  11738. class="cmtt-8">&#x00A0;</span><span
  11739. class="cmtt-8">&#x00A0;</span><span
  11740. class="cmtt-8">&#x00A0;}</span><br class="fancyvrb" /><a
  11741. id="x1-125036r18"></a><span
  11742. class="cmr-6">18</span><span
  11743. class="cmtt-8">&#x00A0;</span><span
  11744. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11745. id="x1-125038r19"></a><span
  11746. class="cmr-6">19</span><span
  11747. class="cmtt-8">&#x00A0;</span><span
  11748. class="cmtt-8">&#x00A0;</span><span
  11749. class="cmtt-8">&#x00A0;11)</span><span
  11750. class="cmtt-8">&#x00A0;[ady]</span><span
  11751. class="cmtt-8">&#x00A0;=</span><span
  11752. class="cmtt-8">&#x00A0;[ady]</span><span
  11753. class="cmtt-8">&#x00A0;-</span><span
  11754. class="cmtt-8">&#x00A0;(absolute</span><span
  11755. class="cmtt-8">&#x00A0;value</span><span
  11756. class="cmtt-8">&#x00A0;of</span><span
  11757. class="cmtt-8">&#x00A0;[base])</span><span
  11758. class="cmtt-8">&#x00A0;*</span><span
  11759. class="cmtt-8">&#x00A0;[adx]</span>
  11760. <br class="fancyvrb" /><a
  11761. id="x1-125040r20"></a><span
  11762. class="cmr-6">20</span><span
  11763. class="cmtt-8">&#x00A0;</span><span
  11764. class="cmtt-8">&#x00A0;</span><span
  11765. class="cmtt-8">&#x00A0;12)</span><span
  11766. class="cmtt-8">&#x00A0;vector</span><span
  11767. class="cmtt-8">&#x00A0;[v]</span><span
  11768. class="cmtt-8">&#x00A0;element</span><span
  11769. class="cmtt-8">&#x00A0;[x]</span><span
  11770. class="cmtt-8">&#x00A0;=</span><span
  11771. class="cmtt-8">&#x00A0;[y]</span><br class="fancyvrb" /><a
  11772. id="x1-125042r21"></a><span
  11773. class="cmr-6">21</span><span
  11774. class="cmtt-8">&#x00A0;</span><span
  11775. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11776. id="x1-125044r22"></a><span
  11777. class="cmr-6">22</span><span
  11778. class="cmtt-8">&#x00A0;</span><span
  11779. class="cmtt-8">&#x00A0;</span><span
  11780. class="cmtt-8">&#x00A0;13)</span><span
  11781. class="cmtt-8">&#x00A0;iterate</span><span
  11782. class="cmtt-8">&#x00A0;[x]</span><span
  11783. class="cmtt-8">&#x00A0;over</span><span
  11784. class="cmtt-8">&#x00A0;the</span><span
  11785. class="cmtt-8">&#x00A0;range</span><span
  11786. class="cmtt-8">&#x00A0;[x0]+1</span><span
  11787. class="cmtt-8">&#x00A0;...</span><span
  11788. class="cmtt-8">&#x00A0;[x1]-1</span><span
  11789. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11790. id="x1-125046r23"></a><span
  11791. class="cmr-6">23</span><span
  11792. class="cmtt-8">&#x00A0;</span><span
  11793. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11794. id="x1-125048r24"></a><span
  11795. class="cmr-6">24</span><span
  11796. class="cmtt-8">&#x00A0;</span><span
  11797. class="cmtt-8">&#x00A0;</span><span
  11798. class="cmtt-8">&#x00A0;</span><span
  11799. class="cmtt-8">&#x00A0;</span><span
  11800. class="cmtt-8">&#x00A0;</span><span
  11801. class="cmtt-8">&#x00A0;</span><span
  11802. class="cmtt-8">&#x00A0;</span><span
  11803. class="cmtt-8">&#x00A0;</span><span
  11804. class="cmtt-8">&#x00A0;14)</span><span
  11805. class="cmtt-8">&#x00A0;[err]</span><span
  11806. class="cmtt-8">&#x00A0;=</span><span
  11807. class="cmtt-8">&#x00A0;[err]</span><span
  11808. class="cmtt-8">&#x00A0;+</span><span
  11809. class="cmtt-8">&#x00A0;[ady];</span>
  11810. <br class="fancyvrb" /><a
  11811. id="x1-125050r25"></a><span
  11812. class="cmr-6">25</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;</span><span
  11817. class="cmtt-8">&#x00A0;</span><span
  11818. class="cmtt-8">&#x00A0;</span><span
  11819. class="cmtt-8">&#x00A0;</span><span
  11820. class="cmtt-8">&#x00A0;</span><span
  11821. class="cmtt-8">&#x00A0;15)</span><span
  11822. class="cmtt-8">&#x00A0;if</span><span
  11823. class="cmtt-8">&#x00A0;(</span><span
  11824. class="cmtt-8">&#x00A0;[err]</span><span
  11825. class="cmtt-8">&#x00A0;&#x003E;=</span><span
  11826. class="cmtt-8">&#x00A0;[adx]</span><span
  11827. class="cmtt-8">&#x00A0;)</span><span
  11828. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11829. id="x1-125052r26"></a><span
  11830. class="cmr-6">26</span><span
  11831. class="cmtt-8">&#x00A0;</span><span
  11832. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11833. id="x1-125054r27"></a><span
  11834. class="cmr-6">27</span><span
  11835. class="cmtt-8">&#x00A0;</span><span
  11836. class="cmtt-8">&#x00A0;</span><span
  11837. class="cmtt-8">&#x00A0;</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;</span><span
  11842. class="cmtt-8">&#x00A0;</span><span
  11843. class="cmtt-8">&#x00A0;</span><span
  11844. class="cmtt-8">&#x00A0;</span><span
  11845. class="cmtt-8">&#x00A0;</span><span
  11846. class="cmtt-8">&#x00A0;</span><span
  11847. class="cmtt-8">&#x00A0;</span><span
  11848. class="cmtt-8">&#x00A0;</span><span
  11849. class="cmtt-8">&#x00A0;16)</span><span
  11850. class="cmtt-8">&#x00A0;[err]</span><span
  11851. class="cmtt-8">&#x00A0;=</span><span
  11852. class="cmtt-8">&#x00A0;[err]</span><span
  11853. class="cmtt-8">&#x00A0;-</span><span
  11854. class="cmtt-8">&#x00A0;[adx]</span><br class="fancyvrb" /><a
  11855. id="x1-125056r28"></a><span
  11856. class="cmr-6">28</span><span
  11857. class="cmtt-8">&#x00A0;</span><span
  11858. class="cmtt-8">&#x00A0;</span><span
  11859. class="cmtt-8">&#x00A0;</span><span
  11860. class="cmtt-8">&#x00A0;</span><span
  11861. class="cmtt-8">&#x00A0;</span><span
  11862. class="cmtt-8">&#x00A0;</span><span
  11863. class="cmtt-8">&#x00A0;</span><span
  11864. class="cmtt-8">&#x00A0;</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;</span><span
  11869. class="cmtt-8">&#x00A0;</span><span
  11870. class="cmtt-8">&#x00A0;</span><span
  11871. class="cmtt-8">&#x00A0;17)</span><span
  11872. class="cmtt-8">&#x00A0;</span><span
  11873. class="cmtt-8">&#x00A0;</span><span
  11874. class="cmtt-8">&#x00A0;[y]</span><span
  11875. class="cmtt-8">&#x00A0;=</span><span
  11876. class="cmtt-8">&#x00A0;[y]</span><span
  11877. class="cmtt-8">&#x00A0;+</span><span
  11878. class="cmtt-8">&#x00A0;[sy]</span><br class="fancyvrb" /><a
  11879. id="x1-125058r29"></a><span
  11880. class="cmr-6">29</span><span
  11881. class="cmtt-8">&#x00A0;</span><span
  11882. class="cmtt-8">&#x00A0;</span>
  11883. <br class="fancyvrb" /><a
  11884. id="x1-125060r30"></a><span
  11885. class="cmr-6">30</span><span
  11886. class="cmtt-8">&#x00A0;</span><span
  11887. class="cmtt-8">&#x00A0;</span><span
  11888. class="cmtt-8">&#x00A0;</span><span
  11889. class="cmtt-8">&#x00A0;</span><span
  11890. class="cmtt-8">&#x00A0;</span><span
  11891. class="cmtt-8">&#x00A0;</span><span
  11892. class="cmtt-8">&#x00A0;</span><span
  11893. class="cmtt-8">&#x00A0;</span><span
  11894. class="cmtt-8">&#x00A0;</span><span
  11895. class="cmtt-8">&#x00A0;</span><span
  11896. class="cmtt-8">&#x00A0;</span><span
  11897. class="cmtt-8">&#x00A0;</span><span
  11898. class="cmtt-8">&#x00A0;}</span><span
  11899. class="cmtt-8">&#x00A0;else</span><span
  11900. class="cmtt-8">&#x00A0;{</span><br class="fancyvrb" /><a
  11901. id="x1-125062r31"></a><span
  11902. class="cmr-6">31</span><span
  11903. class="cmtt-8">&#x00A0;</span><span
  11904. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11905. id="x1-125064r32"></a><span
  11906. class="cmr-6">32</span><span
  11907. class="cmtt-8">&#x00A0;</span><span
  11908. class="cmtt-8">&#x00A0;</span><span
  11909. class="cmtt-8">&#x00A0;</span><span
  11910. class="cmtt-8">&#x00A0;</span><span
  11911. class="cmtt-8">&#x00A0;</span><span
  11912. class="cmtt-8">&#x00A0;</span><span
  11913. class="cmtt-8">&#x00A0;</span><span
  11914. class="cmtt-8">&#x00A0;</span><span
  11915. class="cmtt-8">&#x00A0;</span><span
  11916. class="cmtt-8">&#x00A0;</span><span
  11917. class="cmtt-8">&#x00A0;</span><span
  11918. class="cmtt-8">&#x00A0;</span><span
  11919. class="cmtt-8">&#x00A0;</span><span
  11920. class="cmtt-8">&#x00A0;</span><span
  11921. class="cmtt-8">&#x00A0;18)</span><span
  11922. class="cmtt-8">&#x00A0;[y]</span><span
  11923. class="cmtt-8">&#x00A0;=</span><span
  11924. class="cmtt-8">&#x00A0;[y]</span><span
  11925. class="cmtt-8">&#x00A0;+</span><span
  11926. class="cmtt-8">&#x00A0;[base]</span><br class="fancyvrb" /><a
  11927. id="x1-125066r33"></a><span
  11928. class="cmr-6">33</span><span
  11929. class="cmtt-8">&#x00A0;</span><span
  11930. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11931. id="x1-125068r34"></a><span
  11932. class="cmr-6">34</span><span
  11933. class="cmtt-8">&#x00A0;</span><span
  11934. class="cmtt-8">&#x00A0;</span><span
  11935. class="cmtt-8">&#x00A0;</span><span
  11936. class="cmtt-8">&#x00A0;</span><span
  11937. class="cmtt-8">&#x00A0;</span><span
  11938. class="cmtt-8">&#x00A0;</span><span
  11939. class="cmtt-8">&#x00A0;</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><br class="fancyvrb" /><a
  11946. id="x1-125070r35"></a><span
  11947. class="cmr-6">35</span><span
  11948. class="cmtt-8">&#x00A0;</span><span
  11949. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11950. id="x1-125072r36"></a><span
  11951. class="cmr-6">36</span><span
  11952. class="cmtt-8">&#x00A0;</span><span
  11953. class="cmtt-8">&#x00A0;</span><span
  11954. class="cmtt-8">&#x00A0;</span><span
  11955. class="cmtt-8">&#x00A0;</span><span
  11956. class="cmtt-8">&#x00A0;</span><span
  11957. class="cmtt-8">&#x00A0;</span><span
  11958. class="cmtt-8">&#x00A0;</span><span
  11959. class="cmtt-8">&#x00A0;</span><span
  11960. class="cmtt-8">&#x00A0;19)</span><span
  11961. class="cmtt-8">&#x00A0;vector</span><span
  11962. class="cmtt-8">&#x00A0;[v]</span><span
  11963. class="cmtt-8">&#x00A0;element</span><span
  11964. class="cmtt-8">&#x00A0;[x]</span><span
  11965. class="cmtt-8">&#x00A0;=</span><span
  11966. class="cmtt-8">&#x00A0;[y]</span><br class="fancyvrb" /><a
  11967. id="x1-125074r37"></a><span
  11968. class="cmr-6">37</span><span
  11969. class="cmtt-8">&#x00A0;</span><span
  11970. class="cmtt-8">&#x00A0;</span><br class="fancyvrb" /><a
  11971. id="x1-125076r38"></a><span
  11972. class="cmr-6">38</span><span
  11973. class="cmtt-8">&#x00A0;</span><span
  11974. class="cmtt-8">&#x00A0;</span><span
  11975. class="cmtt-8">&#x00A0;</span><span
  11976. class="cmtt-8">&#x00A0;</span><span
  11977. class="cmtt-8">&#x00A0;</span><span
  11978. class="cmtt-8">&#x00A0;</span><span
  11979. class="cmtt-8">&#x00A0;}</span></div>
  11980. <h3 class="sectionHead"><span class="titlemark">10. </span> <a
  11981. id="x1-12600010"></a>Tables</h3>
  11982. <!--l. 6--><p class="noindent" >
  11983. <h4 class="subsectionHead"><span class="titlemark">10.1. </span> <a
  11984. id="x1-12700010.1"></a>floor1_inverse_dB_table</h4>
  11985. <!--l. 8--><p class="noindent" >The vector <span
  11986. class="cmtt-12">[floor1_inverse_dB_table] </span>is a 256 element static lookup table consisting of the
  11987. following values (read left to right then top to bottom):
  11988. <!--l. 12--><p class="noindent" >
  11989. <div class="fancyvrb" id="fancyvrb48"><a
  11990. id="x1-127002r1"></a><span
  11991. class="cmr-6">1</span><span
  11992. class="cmtt-8">&#x00A0;</span><span
  11993. class="cmtt-8">&#x00A0;</span><span
  11994. class="cmtt-8">&#x00A0;</span><span
  11995. class="cmtt-8">&#x00A0;1.0649863e-07,</span><span
  11996. class="cmtt-8">&#x00A0;1.1341951e-07,</span><span
  11997. class="cmtt-8">&#x00A0;1.2079015e-07,</span><span
  11998. class="cmtt-8">&#x00A0;1.2863978e-07,</span><br class="fancyvrb" /><a
  11999. id="x1-127004r2"></a><span
  12000. class="cmr-6">2</span><span
  12001. class="cmtt-8">&#x00A0;</span><span
  12002. class="cmtt-8">&#x00A0;</span><span
  12003. class="cmtt-8">&#x00A0;</span><span
  12004. class="cmtt-8">&#x00A0;1.3699951e-07,</span><span
  12005. class="cmtt-8">&#x00A0;1.4590251e-07,</span><span
  12006. class="cmtt-8">&#x00A0;1.5538408e-07,</span><span
  12007. class="cmtt-8">&#x00A0;1.6548181e-07,</span>
  12008. <br class="fancyvrb" /><a
  12009. id="x1-127006r3"></a><span
  12010. class="cmr-6">3</span><span
  12011. class="cmtt-8">&#x00A0;</span><span
  12012. class="cmtt-8">&#x00A0;</span><span
  12013. class="cmtt-8">&#x00A0;</span><span
  12014. class="cmtt-8">&#x00A0;1.7623575e-07,</span><span
  12015. class="cmtt-8">&#x00A0;1.8768855e-07,</span><span
  12016. class="cmtt-8">&#x00A0;1.9988561e-07,</span><span
  12017. class="cmtt-8">&#x00A0;2.1287530e-07,</span><br class="fancyvrb" /><a
  12018. id="x1-127008r4"></a><span
  12019. class="cmr-6">4</span><span
  12020. class="cmtt-8">&#x00A0;</span><span
  12021. class="cmtt-8">&#x00A0;</span><span
  12022. class="cmtt-8">&#x00A0;</span><span
  12023. class="cmtt-8">&#x00A0;2.2670913e-07,</span><span
  12024. class="cmtt-8">&#x00A0;2.4144197e-07,</span><span
  12025. class="cmtt-8">&#x00A0;2.5713223e-07,</span><span
  12026. class="cmtt-8">&#x00A0;2.7384213e-07,</span>
  12027. <br class="fancyvrb" /><a
  12028. id="x1-127010r5"></a><span
  12029. class="cmr-6">5</span><span
  12030. class="cmtt-8">&#x00A0;</span><span
  12031. class="cmtt-8">&#x00A0;</span><span
  12032. class="cmtt-8">&#x00A0;</span><span
  12033. class="cmtt-8">&#x00A0;2.9163793e-07,</span><span
  12034. class="cmtt-8">&#x00A0;3.1059021e-07,</span><span
  12035. class="cmtt-8">&#x00A0;3.3077411e-07,</span><span
  12036. class="cmtt-8">&#x00A0;3.5226968e-07,</span><br class="fancyvrb" /><a
  12037. id="x1-127012r6"></a><span
  12038. class="cmr-6">6</span><span
  12039. class="cmtt-8">&#x00A0;</span><span
  12040. class="cmtt-8">&#x00A0;</span><span
  12041. class="cmtt-8">&#x00A0;</span><span
  12042. class="cmtt-8">&#x00A0;3.7516214e-07,</span><span
  12043. class="cmtt-8">&#x00A0;3.9954229e-07,</span><span
  12044. class="cmtt-8">&#x00A0;4.2550680e-07,</span><span
  12045. class="cmtt-8">&#x00A0;4.5315863e-07,</span>
  12046. <br class="fancyvrb" /><a
  12047. id="x1-127014r7"></a><span
  12048. class="cmr-6">7</span><span
  12049. class="cmtt-8">&#x00A0;</span><span
  12050. class="cmtt-8">&#x00A0;</span><span
  12051. class="cmtt-8">&#x00A0;</span><span
  12052. class="cmtt-8">&#x00A0;4.8260743e-07,</span><span
  12053. class="cmtt-8">&#x00A0;5.1396998e-07,</span><span
  12054. class="cmtt-8">&#x00A0;5.4737065e-07,</span><span
  12055. class="cmtt-8">&#x00A0;5.8294187e-07,</span><br class="fancyvrb" /><a
  12056. id="x1-127016r8"></a><span
  12057. class="cmr-6">8</span><span
  12058. class="cmtt-8">&#x00A0;</span><span
  12059. class="cmtt-8">&#x00A0;</span><span
  12060. class="cmtt-8">&#x00A0;</span><span
  12061. class="cmtt-8">&#x00A0;6.2082472e-07,</span><span
  12062. class="cmtt-8">&#x00A0;6.6116941e-07,</span><span
  12063. class="cmtt-8">&#x00A0;7.0413592e-07,</span><span
  12064. class="cmtt-8">&#x00A0;7.4989464e-07,</span>
  12065. <br class="fancyvrb" /><a
  12066. id="x1-127018r9"></a><span
  12067. class="cmr-6">9</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;7.9862701e-07,</span><span
  12072. class="cmtt-8">&#x00A0;8.5052630e-07,</span><span
  12073. class="cmtt-8">&#x00A0;9.0579828e-07,</span><span
  12074. class="cmtt-8">&#x00A0;9.6466216e-07,</span><br class="fancyvrb" /><a
  12075. id="x1-127020r10"></a><span
  12076. class="cmr-6">10</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;1.0273513e-06,</span><span
  12081. class="cmtt-8">&#x00A0;1.0941144e-06,</span><span
  12082. class="cmtt-8">&#x00A0;1.1652161e-06,</span><span
  12083. class="cmtt-8">&#x00A0;1.2409384e-06,</span>
  12084. <br class="fancyvrb" /><a
  12085. id="x1-127022r11"></a><span
  12086. class="cmr-6">11</span><span
  12087. class="cmtt-8">&#x00A0;</span><span
  12088. class="cmtt-8">&#x00A0;</span><span
  12089. class="cmtt-8">&#x00A0;</span><span
  12090. class="cmtt-8">&#x00A0;1.3215816e-06,</span><span
  12091. class="cmtt-8">&#x00A0;1.4074654e-06,</span><span
  12092. class="cmtt-8">&#x00A0;1.4989305e-06,</span><span
  12093. class="cmtt-8">&#x00A0;1.5963394e-06,</span><br class="fancyvrb" /><a
  12094. id="x1-127024r12"></a><span
  12095. class="cmr-6">12</span><span
  12096. class="cmtt-8">&#x00A0;</span><span
  12097. class="cmtt-8">&#x00A0;</span><span
  12098. class="cmtt-8">&#x00A0;</span><span
  12099. class="cmtt-8">&#x00A0;1.7000785e-06,</span><span
  12100. class="cmtt-8">&#x00A0;1.8105592e-06,</span><span
  12101. class="cmtt-8">&#x00A0;1.9282195e-06,</span><span
  12102. class="cmtt-8">&#x00A0;2.0535261e-06,</span>
  12103. <br class="fancyvrb" /><a
  12104. id="x1-127026r13"></a><span
  12105. class="cmr-6">13</span><span
  12106. class="cmtt-8">&#x00A0;</span><span
  12107. class="cmtt-8">&#x00A0;</span><span
  12108. class="cmtt-8">&#x00A0;</span><span
  12109. class="cmtt-8">&#x00A0;2.1869758e-06,</span><span
  12110. class="cmtt-8">&#x00A0;2.3290978e-06,</span><span
  12111. class="cmtt-8">&#x00A0;2.4804557e-06,</span><span
  12112. class="cmtt-8">&#x00A0;2.6416497e-06,</span><br class="fancyvrb" /><a
  12113. id="x1-127028r14"></a><span
  12114. class="cmr-6">14</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;2.8133190e-06,</span><span
  12119. class="cmtt-8">&#x00A0;2.9961443e-06,</span><span
  12120. class="cmtt-8">&#x00A0;3.1908506e-06,</span><span
  12121. class="cmtt-8">&#x00A0;3.3982101e-06,</span>
  12122. <br class="fancyvrb" /><a
  12123. id="x1-127030r15"></a><span
  12124. class="cmr-6">15</span><span
  12125. class="cmtt-8">&#x00A0;</span><span
  12126. class="cmtt-8">&#x00A0;</span><span
  12127. class="cmtt-8">&#x00A0;</span><span
  12128. class="cmtt-8">&#x00A0;3.6190449e-06,</span><span
  12129. class="cmtt-8">&#x00A0;3.8542308e-06,</span><span
  12130. class="cmtt-8">&#x00A0;4.1047004e-06,</span><span
  12131. class="cmtt-8">&#x00A0;4.3714470e-06,</span><br class="fancyvrb" /><a
  12132. id="x1-127032r16"></a><span
  12133. class="cmr-6">16</span><span
  12134. class="cmtt-8">&#x00A0;</span><span
  12135. class="cmtt-8">&#x00A0;</span><span
  12136. class="cmtt-8">&#x00A0;</span><span
  12137. class="cmtt-8">&#x00A0;4.6555282e-06,</span><span
  12138. class="cmtt-8">&#x00A0;4.9580707e-06,</span><span
  12139. class="cmtt-8">&#x00A0;5.2802740e-06,</span><span
  12140. class="cmtt-8">&#x00A0;5.6234160e-06,</span>
  12141. <br class="fancyvrb" /><a
  12142. id="x1-127034r17"></a><span
  12143. class="cmr-6">17</span><span
  12144. class="cmtt-8">&#x00A0;</span><span
  12145. class="cmtt-8">&#x00A0;</span><span
  12146. class="cmtt-8">&#x00A0;</span><span
  12147. class="cmtt-8">&#x00A0;5.9888572e-06,</span><span
  12148. class="cmtt-8">&#x00A0;6.3780469e-06,</span><span
  12149. class="cmtt-8">&#x00A0;6.7925283e-06,</span><span
  12150. class="cmtt-8">&#x00A0;7.2339451e-06,</span><br class="fancyvrb" /><a
  12151. id="x1-127036r18"></a><span
  12152. class="cmr-6">18</span><span
  12153. class="cmtt-8">&#x00A0;</span><span
  12154. class="cmtt-8">&#x00A0;</span><span
  12155. class="cmtt-8">&#x00A0;</span><span
  12156. class="cmtt-8">&#x00A0;7.7040476e-06,</span><span
  12157. class="cmtt-8">&#x00A0;8.2047000e-06,</span><span
  12158. class="cmtt-8">&#x00A0;8.7378876e-06,</span><span
  12159. class="cmtt-8">&#x00A0;9.3057248e-06,</span>
  12160. <br class="fancyvrb" /><a
  12161. id="x1-127038r19"></a><span
  12162. class="cmr-6">19</span><span
  12163. class="cmtt-8">&#x00A0;</span><span
  12164. class="cmtt-8">&#x00A0;</span><span
  12165. class="cmtt-8">&#x00A0;</span><span
  12166. class="cmtt-8">&#x00A0;9.9104632e-06,</span><span
  12167. class="cmtt-8">&#x00A0;1.0554501e-05,</span><span
  12168. class="cmtt-8">&#x00A0;1.1240392e-05,</span><span
  12169. class="cmtt-8">&#x00A0;1.1970856e-05,</span><br class="fancyvrb" /><a
  12170. id="x1-127040r20"></a><span
  12171. class="cmr-6">20</span><span
  12172. class="cmtt-8">&#x00A0;</span><span
  12173. class="cmtt-8">&#x00A0;</span><span
  12174. class="cmtt-8">&#x00A0;</span><span
  12175. class="cmtt-8">&#x00A0;1.2748789e-05,</span><span
  12176. class="cmtt-8">&#x00A0;1.3577278e-05,</span><span
  12177. class="cmtt-8">&#x00A0;1.4459606e-05,</span><span
  12178. class="cmtt-8">&#x00A0;1.5399272e-05,</span>
  12179. <br class="fancyvrb" /><a
  12180. id="x1-127042r21"></a><span
  12181. class="cmr-6">21</span><span
  12182. class="cmtt-8">&#x00A0;</span><span
  12183. class="cmtt-8">&#x00A0;</span><span
  12184. class="cmtt-8">&#x00A0;</span><span
  12185. class="cmtt-8">&#x00A0;1.6400004e-05,</span><span
  12186. class="cmtt-8">&#x00A0;1.7465768e-05,</span><span
  12187. class="cmtt-8">&#x00A0;1.8600792e-05,</span><span
  12188. class="cmtt-8">&#x00A0;1.9809576e-05,</span><br class="fancyvrb" /><a
  12189. id="x1-127044r22"></a><span
  12190. class="cmr-6">22</span><span
  12191. class="cmtt-8">&#x00A0;</span><span
  12192. class="cmtt-8">&#x00A0;</span><span
  12193. class="cmtt-8">&#x00A0;</span><span
  12194. class="cmtt-8">&#x00A0;2.1096914e-05,</span><span
  12195. class="cmtt-8">&#x00A0;2.2467911e-05,</span><span
  12196. class="cmtt-8">&#x00A0;2.3928002e-05,</span><span
  12197. class="cmtt-8">&#x00A0;2.5482978e-05,</span>
  12198. <br class="fancyvrb" /><a
  12199. id="x1-127046r23"></a><span
  12200. class="cmr-6">23</span><span
  12201. class="cmtt-8">&#x00A0;</span><span
  12202. class="cmtt-8">&#x00A0;</span><span
  12203. class="cmtt-8">&#x00A0;</span><span
  12204. class="cmtt-8">&#x00A0;2.7139006e-05,</span><span
  12205. class="cmtt-8">&#x00A0;2.8902651e-05,</span><span
  12206. class="cmtt-8">&#x00A0;3.0780908e-05,</span><span
  12207. class="cmtt-8">&#x00A0;3.2781225e-05,</span><br class="fancyvrb" /><a
  12208. id="x1-127048r24"></a><span
  12209. class="cmr-6">24</span><span
  12210. class="cmtt-8">&#x00A0;</span><span
  12211. class="cmtt-8">&#x00A0;</span><span
  12212. class="cmtt-8">&#x00A0;</span><span
  12213. class="cmtt-8">&#x00A0;3.4911534e-05,</span><span
  12214. class="cmtt-8">&#x00A0;3.7180282e-05,</span><span
  12215. class="cmtt-8">&#x00A0;3.9596466e-05,</span><span
  12216. class="cmtt-8">&#x00A0;4.2169667e-05,</span>
  12217. <br class="fancyvrb" /><a
  12218. id="x1-127050r25"></a><span
  12219. class="cmr-6">25</span><span
  12220. class="cmtt-8">&#x00A0;</span><span
  12221. class="cmtt-8">&#x00A0;</span><span
  12222. class="cmtt-8">&#x00A0;</span><span
  12223. class="cmtt-8">&#x00A0;4.4910090e-05,</span><span
  12224. class="cmtt-8">&#x00A0;4.7828601e-05,</span><span
  12225. class="cmtt-8">&#x00A0;5.0936773e-05,</span><span
  12226. class="cmtt-8">&#x00A0;5.4246931e-05,</span><br class="fancyvrb" /><a
  12227. id="x1-127052r26"></a><span
  12228. class="cmr-6">26</span><span
  12229. class="cmtt-8">&#x00A0;</span><span
  12230. class="cmtt-8">&#x00A0;</span><span
  12231. class="cmtt-8">&#x00A0;</span><span
  12232. class="cmtt-8">&#x00A0;5.7772202e-05,</span><span
  12233. class="cmtt-8">&#x00A0;6.1526565e-05,</span><span
  12234. class="cmtt-8">&#x00A0;6.5524908e-05,</span><span
  12235. class="cmtt-8">&#x00A0;6.9783085e-05,</span>
  12236. <br class="fancyvrb" /><a
  12237. id="x1-127054r27"></a><span
  12238. class="cmr-6">27</span><span
  12239. class="cmtt-8">&#x00A0;</span><span
  12240. class="cmtt-8">&#x00A0;</span><span
  12241. class="cmtt-8">&#x00A0;</span><span
  12242. class="cmtt-8">&#x00A0;7.4317983e-05,</span><span
  12243. class="cmtt-8">&#x00A0;7.9147585e-05,</span><span
  12244. class="cmtt-8">&#x00A0;8.4291040e-05,</span><span
  12245. class="cmtt-8">&#x00A0;8.9768747e-05,</span><br class="fancyvrb" /><a
  12246. id="x1-127056r28"></a><span
  12247. class="cmr-6">28</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;9.5602426e-05,</span><span
  12252. class="cmtt-8">&#x00A0;0.00010181521,</span><span
  12253. class="cmtt-8">&#x00A0;0.00010843174,</span><span
  12254. class="cmtt-8">&#x00A0;0.00011547824,</span>
  12255. <br class="fancyvrb" /><a
  12256. id="x1-127058r29"></a><span
  12257. class="cmr-6">29</span><span
  12258. class="cmtt-8">&#x00A0;</span><span
  12259. class="cmtt-8">&#x00A0;</span><span
  12260. class="cmtt-8">&#x00A0;</span><span
  12261. class="cmtt-8">&#x00A0;0.00012298267,</span><span
  12262. class="cmtt-8">&#x00A0;0.00013097477,</span><span
  12263. class="cmtt-8">&#x00A0;0.00013948625,</span><span
  12264. class="cmtt-8">&#x00A0;0.00014855085,</span><br class="fancyvrb" /><a
  12265. id="x1-127060r30"></a><span
  12266. class="cmr-6">30</span><span
  12267. class="cmtt-8">&#x00A0;</span><span
  12268. class="cmtt-8">&#x00A0;</span><span
  12269. class="cmtt-8">&#x00A0;</span><span
  12270. class="cmtt-8">&#x00A0;0.00015820453,</span><span
  12271. class="cmtt-8">&#x00A0;0.00016848555,</span><span
  12272. class="cmtt-8">&#x00A0;0.00017943469,</span><span
  12273. class="cmtt-8">&#x00A0;0.00019109536,</span>
  12274. <br class="fancyvrb" /><a
  12275. id="x1-127062r31"></a><span
  12276. class="cmr-6">31</span><span
  12277. class="cmtt-8">&#x00A0;</span><span
  12278. class="cmtt-8">&#x00A0;</span><span
  12279. class="cmtt-8">&#x00A0;</span><span
  12280. class="cmtt-8">&#x00A0;0.00020351382,</span><span
  12281. class="cmtt-8">&#x00A0;0.00021673929,</span><span
  12282. class="cmtt-8">&#x00A0;0.00023082423,</span><span
  12283. class="cmtt-8">&#x00A0;0.00024582449,</span><br class="fancyvrb" /><a
  12284. id="x1-127064r32"></a><span
  12285. class="cmr-6">32</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;0.00026179955,</span><span
  12290. class="cmtt-8">&#x00A0;0.00027881276,</span><span
  12291. class="cmtt-8">&#x00A0;0.00029693158,</span><span
  12292. class="cmtt-8">&#x00A0;0.00031622787,</span>
  12293. <br class="fancyvrb" /><a
  12294. id="x1-127066r33"></a><span
  12295. class="cmr-6">33</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;0.00033677814,</span><span
  12300. class="cmtt-8">&#x00A0;0.00035866388,</span><span
  12301. class="cmtt-8">&#x00A0;0.00038197188,</span><span
  12302. class="cmtt-8">&#x00A0;0.00040679456,</span><br class="fancyvrb" /><a
  12303. id="x1-127068r34"></a><span
  12304. class="cmr-6">34</span><span
  12305. class="cmtt-8">&#x00A0;</span><span
  12306. class="cmtt-8">&#x00A0;</span><span
  12307. class="cmtt-8">&#x00A0;</span><span
  12308. class="cmtt-8">&#x00A0;0.00043323036,</span><span
  12309. class="cmtt-8">&#x00A0;0.00046138411,</span><span
  12310. class="cmtt-8">&#x00A0;0.00049136745,</span><span
  12311. class="cmtt-8">&#x00A0;0.00052329927,</span>
  12312. <br class="fancyvrb" /><a
  12313. id="x1-127070r35"></a><span
  12314. class="cmr-6">35</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;0.00055730621,</span><span
  12319. class="cmtt-8">&#x00A0;0.00059352311,</span><span
  12320. class="cmtt-8">&#x00A0;0.00063209358,</span><span
  12321. class="cmtt-8">&#x00A0;0.00067317058,</span><br class="fancyvrb" /><a
  12322. id="x1-127072r36"></a><span
  12323. class="cmr-6">36</span><span
  12324. class="cmtt-8">&#x00A0;</span><span
  12325. class="cmtt-8">&#x00A0;</span><span
  12326. class="cmtt-8">&#x00A0;</span><span
  12327. class="cmtt-8">&#x00A0;0.00071691700,</span><span
  12328. class="cmtt-8">&#x00A0;0.00076350630,</span><span
  12329. class="cmtt-8">&#x00A0;0.00081312324,</span><span
  12330. class="cmtt-8">&#x00A0;0.00086596457,</span>
  12331. <br class="fancyvrb" /><a
  12332. id="x1-127074r37"></a><span
  12333. class="cmr-6">37</span><span
  12334. class="cmtt-8">&#x00A0;</span><span
  12335. class="cmtt-8">&#x00A0;</span><span
  12336. class="cmtt-8">&#x00A0;</span><span
  12337. class="cmtt-8">&#x00A0;0.00092223983,</span><span
  12338. class="cmtt-8">&#x00A0;0.00098217216,</span><span
  12339. class="cmtt-8">&#x00A0;0.0010459992,</span><span
  12340. class="cmtt-8">&#x00A0;</span><span
  12341. class="cmtt-8">&#x00A0;0.0011139742,</span><br class="fancyvrb" /><a
  12342. id="x1-127076r38"></a><span
  12343. class="cmr-6">38</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;0.0011863665,</span><span
  12348. class="cmtt-8">&#x00A0;</span><span
  12349. class="cmtt-8">&#x00A0;0.0012634633,</span><span
  12350. class="cmtt-8">&#x00A0;</span><span
  12351. class="cmtt-8">&#x00A0;0.0013455702,</span><span
  12352. class="cmtt-8">&#x00A0;</span><span
  12353. class="cmtt-8">&#x00A0;0.0014330129,</span>
  12354. <br class="fancyvrb" /><a
  12355. id="x1-127078r39"></a><span
  12356. class="cmr-6">39</span><span
  12357. class="cmtt-8">&#x00A0;</span><span
  12358. class="cmtt-8">&#x00A0;</span><span
  12359. class="cmtt-8">&#x00A0;</span><span
  12360. class="cmtt-8">&#x00A0;0.0015261382,</span><span
  12361. class="cmtt-8">&#x00A0;</span><span
  12362. class="cmtt-8">&#x00A0;0.0016253153,</span><span
  12363. class="cmtt-8">&#x00A0;</span><span
  12364. class="cmtt-8">&#x00A0;0.0017309374,</span><span
  12365. class="cmtt-8">&#x00A0;</span><span
  12366. class="cmtt-8">&#x00A0;0.0018434235,</span><br class="fancyvrb" /><a
  12367. id="x1-127080r40"></a><span
  12368. class="cmr-6">40</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;0.0019632195,</span><span
  12373. class="cmtt-8">&#x00A0;</span><span
  12374. class="cmtt-8">&#x00A0;0.0020908006,</span><span
  12375. class="cmtt-8">&#x00A0;</span><span
  12376. class="cmtt-8">&#x00A0;0.0022266726,</span><span
  12377. class="cmtt-8">&#x00A0;</span><span
  12378. class="cmtt-8">&#x00A0;0.0023713743,</span>
  12379. <br class="fancyvrb" /><a
  12380. id="x1-127082r41"></a><span
  12381. class="cmr-6">41</span><span
  12382. class="cmtt-8">&#x00A0;</span><span
  12383. class="cmtt-8">&#x00A0;</span><span
  12384. class="cmtt-8">&#x00A0;</span><span
  12385. class="cmtt-8">&#x00A0;0.0025254795,</span><span
  12386. class="cmtt-8">&#x00A0;</span><span
  12387. class="cmtt-8">&#x00A0;0.0026895994,</span><span
  12388. class="cmtt-8">&#x00A0;</span><span
  12389. class="cmtt-8">&#x00A0;0.0028643847,</span><span
  12390. class="cmtt-8">&#x00A0;</span><span
  12391. class="cmtt-8">&#x00A0;0.0030505286,</span><br class="fancyvrb" /><a
  12392. id="x1-127084r42"></a><span
  12393. class="cmr-6">42</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;0.0032487691,</span><span
  12398. class="cmtt-8">&#x00A0;</span><span
  12399. class="cmtt-8">&#x00A0;0.0034598925,</span><span
  12400. class="cmtt-8">&#x00A0;</span><span
  12401. class="cmtt-8">&#x00A0;0.0036847358,</span><span
  12402. class="cmtt-8">&#x00A0;</span><span
  12403. class="cmtt-8">&#x00A0;0.0039241906,</span>
  12404. <br class="fancyvrb" /><a
  12405. id="x1-127086r43"></a><span
  12406. class="cmr-6">43</span><span
  12407. class="cmtt-8">&#x00A0;</span><span
  12408. class="cmtt-8">&#x00A0;</span><span
  12409. class="cmtt-8">&#x00A0;</span><span
  12410. class="cmtt-8">&#x00A0;0.0041792066,</span><span
  12411. class="cmtt-8">&#x00A0;</span><span
  12412. class="cmtt-8">&#x00A0;0.0044507950,</span><span
  12413. class="cmtt-8">&#x00A0;</span><span
  12414. class="cmtt-8">&#x00A0;0.0047400328,</span><span
  12415. class="cmtt-8">&#x00A0;</span><span
  12416. class="cmtt-8">&#x00A0;0.0050480668,</span><br class="fancyvrb" /><a
  12417. id="x1-127088r44"></a><span
  12418. class="cmr-6">44</span><span
  12419. class="cmtt-8">&#x00A0;</span><span
  12420. class="cmtt-8">&#x00A0;</span><span
  12421. class="cmtt-8">&#x00A0;</span><span
  12422. class="cmtt-8">&#x00A0;0.0053761186,</span><span
  12423. class="cmtt-8">&#x00A0;</span><span
  12424. class="cmtt-8">&#x00A0;0.0057254891,</span><span
  12425. class="cmtt-8">&#x00A0;</span><span
  12426. class="cmtt-8">&#x00A0;0.0060975636,</span><span
  12427. class="cmtt-8">&#x00A0;</span><span
  12428. class="cmtt-8">&#x00A0;0.0064938176,</span>
  12429. <br class="fancyvrb" /><a
  12430. id="x1-127090r45"></a><span
  12431. class="cmr-6">45</span><span
  12432. class="cmtt-8">&#x00A0;</span><span
  12433. class="cmtt-8">&#x00A0;</span><span
  12434. class="cmtt-8">&#x00A0;</span><span
  12435. class="cmtt-8">&#x00A0;0.0069158225,</span><span
  12436. class="cmtt-8">&#x00A0;</span><span
  12437. class="cmtt-8">&#x00A0;0.0073652516,</span><span
  12438. class="cmtt-8">&#x00A0;</span><span
  12439. class="cmtt-8">&#x00A0;0.0078438871,</span><span
  12440. class="cmtt-8">&#x00A0;</span><span
  12441. class="cmtt-8">&#x00A0;0.0083536271,</span><br class="fancyvrb" /><a
  12442. id="x1-127092r46"></a><span
  12443. class="cmr-6">46</span><span
  12444. class="cmtt-8">&#x00A0;</span><span
  12445. class="cmtt-8">&#x00A0;</span><span
  12446. class="cmtt-8">&#x00A0;</span><span
  12447. class="cmtt-8">&#x00A0;0.0088964928,</span><span
  12448. class="cmtt-8">&#x00A0;</span><span
  12449. class="cmtt-8">&#x00A0;0.009474637,</span><span
  12450. class="cmtt-8">&#x00A0;</span><span
  12451. class="cmtt-8">&#x00A0;</span><span
  12452. class="cmtt-8">&#x00A0;0.010090352,</span><span
  12453. class="cmtt-8">&#x00A0;</span><span
  12454. class="cmtt-8">&#x00A0;</span><span
  12455. class="cmtt-8">&#x00A0;0.010746080,</span>
  12456. <br class="fancyvrb" /><a
  12457. id="x1-127094r47"></a><span
  12458. class="cmr-6">47</span><span
  12459. class="cmtt-8">&#x00A0;</span><span
  12460. class="cmtt-8">&#x00A0;</span><span
  12461. class="cmtt-8">&#x00A0;</span><span
  12462. class="cmtt-8">&#x00A0;0.011444421,</span><span
  12463. class="cmtt-8">&#x00A0;</span><span
  12464. class="cmtt-8">&#x00A0;</span><span
  12465. class="cmtt-8">&#x00A0;0.012188144,</span><span
  12466. class="cmtt-8">&#x00A0;</span><span
  12467. class="cmtt-8">&#x00A0;</span><span
  12468. class="cmtt-8">&#x00A0;0.012980198,</span><span
  12469. class="cmtt-8">&#x00A0;</span><span
  12470. class="cmtt-8">&#x00A0;</span><span
  12471. class="cmtt-8">&#x00A0;0.013823725,</span><br class="fancyvrb" /><a
  12472. id="x1-127096r48"></a><span
  12473. class="cmr-6">48</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;0.014722068,</span><span
  12478. class="cmtt-8">&#x00A0;</span><span
  12479. class="cmtt-8">&#x00A0;</span><span
  12480. class="cmtt-8">&#x00A0;0.015678791,</span><span
  12481. class="cmtt-8">&#x00A0;</span><span
  12482. class="cmtt-8">&#x00A0;</span><span
  12483. class="cmtt-8">&#x00A0;0.016697687,</span><span
  12484. class="cmtt-8">&#x00A0;</span><span
  12485. class="cmtt-8">&#x00A0;</span><span
  12486. class="cmtt-8">&#x00A0;0.017782797,</span>
  12487. <br class="fancyvrb" /><a
  12488. id="x1-127098r49"></a><span
  12489. class="cmr-6">49</span><span
  12490. class="cmtt-8">&#x00A0;</span><span
  12491. class="cmtt-8">&#x00A0;</span><span
  12492. class="cmtt-8">&#x00A0;</span><span
  12493. class="cmtt-8">&#x00A0;0.018938423,</span><span
  12494. class="cmtt-8">&#x00A0;</span><span
  12495. class="cmtt-8">&#x00A0;</span><span
  12496. class="cmtt-8">&#x00A0;0.020169149,</span><span
  12497. class="cmtt-8">&#x00A0;</span><span
  12498. class="cmtt-8">&#x00A0;</span><span
  12499. class="cmtt-8">&#x00A0;0.021479854,</span><span
  12500. class="cmtt-8">&#x00A0;</span><span
  12501. class="cmtt-8">&#x00A0;</span><span
  12502. class="cmtt-8">&#x00A0;0.022875735,</span><br class="fancyvrb" /><a
  12503. id="x1-127100r50"></a><span
  12504. class="cmr-6">50</span><span
  12505. class="cmtt-8">&#x00A0;</span><span
  12506. class="cmtt-8">&#x00A0;</span><span
  12507. class="cmtt-8">&#x00A0;</span><span
  12508. class="cmtt-8">&#x00A0;0.024362330,</span><span
  12509. class="cmtt-8">&#x00A0;</span><span
  12510. class="cmtt-8">&#x00A0;</span><span
  12511. class="cmtt-8">&#x00A0;0.025945531,</span><span
  12512. class="cmtt-8">&#x00A0;</span><span
  12513. class="cmtt-8">&#x00A0;</span><span
  12514. class="cmtt-8">&#x00A0;0.027631618,</span><span
  12515. class="cmtt-8">&#x00A0;</span><span
  12516. class="cmtt-8">&#x00A0;</span><span
  12517. class="cmtt-8">&#x00A0;0.029427276,</span>
  12518. <br class="fancyvrb" /><a
  12519. id="x1-127102r51"></a><span
  12520. class="cmr-6">51</span><span
  12521. class="cmtt-8">&#x00A0;</span><span
  12522. class="cmtt-8">&#x00A0;</span><span
  12523. class="cmtt-8">&#x00A0;</span><span
  12524. class="cmtt-8">&#x00A0;0.031339626,</span><span
  12525. class="cmtt-8">&#x00A0;</span><span
  12526. class="cmtt-8">&#x00A0;</span><span
  12527. class="cmtt-8">&#x00A0;0.033376252,</span><span
  12528. class="cmtt-8">&#x00A0;</span><span
  12529. class="cmtt-8">&#x00A0;</span><span
  12530. class="cmtt-8">&#x00A0;0.035545228,</span><span
  12531. class="cmtt-8">&#x00A0;</span><span
  12532. class="cmtt-8">&#x00A0;</span><span
  12533. class="cmtt-8">&#x00A0;0.037855157,</span><br class="fancyvrb" /><a
  12534. id="x1-127104r52"></a><span
  12535. class="cmr-6">52</span><span
  12536. class="cmtt-8">&#x00A0;</span><span
  12537. class="cmtt-8">&#x00A0;</span><span
  12538. class="cmtt-8">&#x00A0;</span><span
  12539. class="cmtt-8">&#x00A0;0.040315199,</span><span
  12540. class="cmtt-8">&#x00A0;</span><span
  12541. class="cmtt-8">&#x00A0;</span><span
  12542. class="cmtt-8">&#x00A0;0.042935108,</span><span
  12543. class="cmtt-8">&#x00A0;</span><span
  12544. class="cmtt-8">&#x00A0;</span><span
  12545. class="cmtt-8">&#x00A0;0.045725273,</span><span
  12546. class="cmtt-8">&#x00A0;</span><span
  12547. class="cmtt-8">&#x00A0;</span><span
  12548. class="cmtt-8">&#x00A0;0.048696758,</span>
  12549. <br class="fancyvrb" /><a
  12550. id="x1-127106r53"></a><span
  12551. class="cmr-6">53</span><span
  12552. class="cmtt-8">&#x00A0;</span><span
  12553. class="cmtt-8">&#x00A0;</span><span
  12554. class="cmtt-8">&#x00A0;</span><span
  12555. class="cmtt-8">&#x00A0;0.051861348,</span><span
  12556. class="cmtt-8">&#x00A0;</span><span
  12557. class="cmtt-8">&#x00A0;</span><span
  12558. class="cmtt-8">&#x00A0;0.055231591,</span><span
  12559. class="cmtt-8">&#x00A0;</span><span
  12560. class="cmtt-8">&#x00A0;</span><span
  12561. class="cmtt-8">&#x00A0;0.058820850,</span><span
  12562. class="cmtt-8">&#x00A0;</span><span
  12563. class="cmtt-8">&#x00A0;</span><span
  12564. class="cmtt-8">&#x00A0;0.062643361,</span><br class="fancyvrb" /><a
  12565. id="x1-127108r54"></a><span
  12566. class="cmr-6">54</span><span
  12567. class="cmtt-8">&#x00A0;</span><span
  12568. class="cmtt-8">&#x00A0;</span><span
  12569. class="cmtt-8">&#x00A0;</span><span
  12570. class="cmtt-8">&#x00A0;0.066714279,</span><span
  12571. class="cmtt-8">&#x00A0;</span><span
  12572. class="cmtt-8">&#x00A0;</span><span
  12573. class="cmtt-8">&#x00A0;0.071049749,</span><span
  12574. class="cmtt-8">&#x00A0;</span><span
  12575. class="cmtt-8">&#x00A0;</span><span
  12576. class="cmtt-8">&#x00A0;0.075666962,</span><span
  12577. class="cmtt-8">&#x00A0;</span><span
  12578. class="cmtt-8">&#x00A0;</span><span
  12579. class="cmtt-8">&#x00A0;0.080584227,</span>
  12580. <br class="fancyvrb" /><a
  12581. id="x1-127110r55"></a><span
  12582. class="cmr-6">55</span><span
  12583. class="cmtt-8">&#x00A0;</span><span
  12584. class="cmtt-8">&#x00A0;</span><span
  12585. class="cmtt-8">&#x00A0;</span><span
  12586. class="cmtt-8">&#x00A0;0.085821044,</span><span
  12587. class="cmtt-8">&#x00A0;</span><span
  12588. class="cmtt-8">&#x00A0;</span><span
  12589. class="cmtt-8">&#x00A0;0.091398179,</span><span
  12590. class="cmtt-8">&#x00A0;</span><span
  12591. class="cmtt-8">&#x00A0;</span><span
  12592. class="cmtt-8">&#x00A0;0.097337747,</span><span
  12593. class="cmtt-8">&#x00A0;</span><span
  12594. class="cmtt-8">&#x00A0;</span><span
  12595. class="cmtt-8">&#x00A0;0.10366330,</span><br class="fancyvrb" /><a
  12596. id="x1-127112r56"></a><span
  12597. class="cmr-6">56</span><span
  12598. class="cmtt-8">&#x00A0;</span><span
  12599. class="cmtt-8">&#x00A0;</span><span
  12600. class="cmtt-8">&#x00A0;</span><span
  12601. class="cmtt-8">&#x00A0;0.11039993,</span><span
  12602. class="cmtt-8">&#x00A0;</span><span
  12603. class="cmtt-8">&#x00A0;</span><span
  12604. class="cmtt-8">&#x00A0;</span><span
  12605. class="cmtt-8">&#x00A0;0.11757434,</span><span
  12606. class="cmtt-8">&#x00A0;</span><span
  12607. class="cmtt-8">&#x00A0;</span><span
  12608. class="cmtt-8">&#x00A0;</span><span
  12609. class="cmtt-8">&#x00A0;0.12521498,</span><span
  12610. class="cmtt-8">&#x00A0;</span><span
  12611. class="cmtt-8">&#x00A0;</span><span
  12612. class="cmtt-8">&#x00A0;</span><span
  12613. class="cmtt-8">&#x00A0;0.13335215,</span>
  12614. <br class="fancyvrb" /><a
  12615. id="x1-127114r57"></a><span
  12616. class="cmr-6">57</span><span
  12617. class="cmtt-8">&#x00A0;</span><span
  12618. class="cmtt-8">&#x00A0;</span><span
  12619. class="cmtt-8">&#x00A0;</span><span
  12620. class="cmtt-8">&#x00A0;0.14201813,</span><span
  12621. class="cmtt-8">&#x00A0;</span><span
  12622. class="cmtt-8">&#x00A0;</span><span
  12623. class="cmtt-8">&#x00A0;</span><span
  12624. class="cmtt-8">&#x00A0;0.15124727,</span><span
  12625. class="cmtt-8">&#x00A0;</span><span
  12626. class="cmtt-8">&#x00A0;</span><span
  12627. class="cmtt-8">&#x00A0;</span><span
  12628. class="cmtt-8">&#x00A0;0.16107617,</span><span
  12629. class="cmtt-8">&#x00A0;</span><span
  12630. class="cmtt-8">&#x00A0;</span><span
  12631. class="cmtt-8">&#x00A0;</span><span
  12632. class="cmtt-8">&#x00A0;0.17154380,</span><br class="fancyvrb" /><a
  12633. id="x1-127116r58"></a><span
  12634. class="cmr-6">58</span><span
  12635. class="cmtt-8">&#x00A0;</span><span
  12636. class="cmtt-8">&#x00A0;</span><span
  12637. class="cmtt-8">&#x00A0;</span><span
  12638. class="cmtt-8">&#x00A0;0.18269168,</span><span
  12639. class="cmtt-8">&#x00A0;</span><span
  12640. class="cmtt-8">&#x00A0;</span><span
  12641. class="cmtt-8">&#x00A0;</span><span
  12642. class="cmtt-8">&#x00A0;0.19456402,</span><span
  12643. class="cmtt-8">&#x00A0;</span><span
  12644. class="cmtt-8">&#x00A0;</span><span
  12645. class="cmtt-8">&#x00A0;</span><span
  12646. class="cmtt-8">&#x00A0;0.20720788,</span><span
  12647. class="cmtt-8">&#x00A0;</span><span
  12648. class="cmtt-8">&#x00A0;</span><span
  12649. class="cmtt-8">&#x00A0;</span><span
  12650. class="cmtt-8">&#x00A0;0.22067342,</span>
  12651. <br class="fancyvrb" /><a
  12652. id="x1-127118r59"></a><span
  12653. class="cmr-6">59</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;0.23501402,</span><span
  12658. class="cmtt-8">&#x00A0;</span><span
  12659. class="cmtt-8">&#x00A0;</span><span
  12660. class="cmtt-8">&#x00A0;</span><span
  12661. class="cmtt-8">&#x00A0;0.25028656,</span><span
  12662. class="cmtt-8">&#x00A0;</span><span
  12663. class="cmtt-8">&#x00A0;</span><span
  12664. class="cmtt-8">&#x00A0;</span><span
  12665. class="cmtt-8">&#x00A0;0.26655159,</span><span
  12666. class="cmtt-8">&#x00A0;</span><span
  12667. class="cmtt-8">&#x00A0;</span><span
  12668. class="cmtt-8">&#x00A0;</span><span
  12669. class="cmtt-8">&#x00A0;0.28387361,</span><br class="fancyvrb" /><a
  12670. id="x1-127120r60"></a><span
  12671. class="cmr-6">60</span><span
  12672. class="cmtt-8">&#x00A0;</span><span
  12673. class="cmtt-8">&#x00A0;</span><span
  12674. class="cmtt-8">&#x00A0;</span><span
  12675. class="cmtt-8">&#x00A0;0.30232132,</span><span
  12676. class="cmtt-8">&#x00A0;</span><span
  12677. class="cmtt-8">&#x00A0;</span><span
  12678. class="cmtt-8">&#x00A0;</span><span
  12679. class="cmtt-8">&#x00A0;0.32196786,</span><span
  12680. class="cmtt-8">&#x00A0;</span><span
  12681. class="cmtt-8">&#x00A0;</span><span
  12682. class="cmtt-8">&#x00A0;</span><span
  12683. class="cmtt-8">&#x00A0;0.34289114,</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;0.36517414,</span>
  12688. <br class="fancyvrb" /><a
  12689. id="x1-127122r61"></a><span
  12690. class="cmr-6">61</span><span
  12691. class="cmtt-8">&#x00A0;</span><span
  12692. class="cmtt-8">&#x00A0;</span><span
  12693. class="cmtt-8">&#x00A0;</span><span
  12694. class="cmtt-8">&#x00A0;0.38890521,</span><span
  12695. class="cmtt-8">&#x00A0;</span><span
  12696. class="cmtt-8">&#x00A0;</span><span
  12697. class="cmtt-8">&#x00A0;</span><span
  12698. class="cmtt-8">&#x00A0;0.41417847,</span><span
  12699. class="cmtt-8">&#x00A0;</span><span
  12700. class="cmtt-8">&#x00A0;</span><span
  12701. class="cmtt-8">&#x00A0;</span><span
  12702. class="cmtt-8">&#x00A0;0.44109412,</span><span
  12703. class="cmtt-8">&#x00A0;</span><span
  12704. class="cmtt-8">&#x00A0;</span><span
  12705. class="cmtt-8">&#x00A0;</span><span
  12706. class="cmtt-8">&#x00A0;0.46975890,</span><br class="fancyvrb" /><a
  12707. id="x1-127124r62"></a><span
  12708. class="cmr-6">62</span><span
  12709. class="cmtt-8">&#x00A0;</span><span
  12710. class="cmtt-8">&#x00A0;</span><span
  12711. class="cmtt-8">&#x00A0;</span><span
  12712. class="cmtt-8">&#x00A0;0.50028648,</span><span
  12713. class="cmtt-8">&#x00A0;</span><span
  12714. class="cmtt-8">&#x00A0;</span><span
  12715. class="cmtt-8">&#x00A0;</span><span
  12716. class="cmtt-8">&#x00A0;0.53279791,</span><span
  12717. class="cmtt-8">&#x00A0;</span><span
  12718. class="cmtt-8">&#x00A0;</span><span
  12719. class="cmtt-8">&#x00A0;</span><span
  12720. class="cmtt-8">&#x00A0;0.56742212,</span><span
  12721. class="cmtt-8">&#x00A0;</span><span
  12722. class="cmtt-8">&#x00A0;</span><span
  12723. class="cmtt-8">&#x00A0;</span><span
  12724. class="cmtt-8">&#x00A0;0.60429640,</span>
  12725. <br class="fancyvrb" /><a
  12726. id="x1-127126r63"></a><span
  12727. class="cmr-6">63</span><span
  12728. class="cmtt-8">&#x00A0;</span><span
  12729. class="cmtt-8">&#x00A0;</span><span
  12730. class="cmtt-8">&#x00A0;</span><span
  12731. class="cmtt-8">&#x00A0;0.64356699,</span><span
  12732. class="cmtt-8">&#x00A0;</span><span
  12733. class="cmtt-8">&#x00A0;</span><span
  12734. class="cmtt-8">&#x00A0;</span><span
  12735. class="cmtt-8">&#x00A0;0.68538959,</span><span
  12736. class="cmtt-8">&#x00A0;</span><span
  12737. class="cmtt-8">&#x00A0;</span><span
  12738. class="cmtt-8">&#x00A0;</span><span
  12739. class="cmtt-8">&#x00A0;0.72993007,</span><span
  12740. class="cmtt-8">&#x00A0;</span><span
  12741. class="cmtt-8">&#x00A0;</span><span
  12742. class="cmtt-8">&#x00A0;</span><span
  12743. class="cmtt-8">&#x00A0;0.77736504,</span><br class="fancyvrb" /><a
  12744. id="x1-127128r64"></a><span
  12745. class="cmr-6">64</span><span
  12746. class="cmtt-8">&#x00A0;</span><span
  12747. class="cmtt-8">&#x00A0;</span><span
  12748. class="cmtt-8">&#x00A0;</span><span
  12749. class="cmtt-8">&#x00A0;0.82788260,</span><span
  12750. class="cmtt-8">&#x00A0;</span><span
  12751. class="cmtt-8">&#x00A0;</span><span
  12752. class="cmtt-8">&#x00A0;</span><span
  12753. class="cmtt-8">&#x00A0;0.88168307,</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.9389798,</span><span
  12758. class="cmtt-8">&#x00A0;</span><span
  12759. class="cmtt-8">&#x00A0;</span><span
  12760. class="cmtt-8">&#x00A0;</span><span
  12761. class="cmtt-8">&#x00A0;</span><span
  12762. class="cmtt-8">&#x00A0;1.</span></div>
  12763. <h3 class="sectionHead"><span class="titlemark">A. </span> <a
  12764. id="x1-128000A"></a>Embedding Vorbis into an Ogg stream</h3>
  12765. <!--l. 6--><p class="noindent" >
  12766. <h4 class="subsectionHead"><span class="titlemark">A.1. </span> <a
  12767. id="x1-129000A.1"></a>Overview</h4>
  12768. <!--l. 8--><p class="noindent" >This document describes using Ogg logical and physical transport streams to encapsulate Vorbis
  12769. compressed audio packet data into file form.
  12770. <!--l. 12--><p class="noindent" >The <a
  12771. href="#x1-20001">section&#x00A0;1</a>, &#8220;<a
  12772. href="#x1-20001">Introduction and Description<!--tex4ht:ref: vorbis:spec:intro --></a>&#8221; provides an overview of the construction of Vorbis
  12773. audio packets.
  12774. <!--l. 15--><p class="noindent" >The <a
  12775. href="oggstream.html" >Ogg bitstream overview</a> and <a
  12776. href="framing.html" >Ogg logical bitstream and framing spec</a> provide detailed
  12777. descriptions of Ogg transport streams. This specification document assumes a working
  12778. knowledge of the concepts covered in these named backround documents. Please read them
  12779. first.
  12780. <!--l. 22--><p class="noindent" >
  12781. <h5 class="subsubsectionHead"><span class="titlemark">A.1.1. </span> <a
  12782. id="x1-130000A.1.1"></a>Restrictions</h5>
  12783. <!--l. 24--><p class="noindent" >The Ogg/Vorbis I specification currently dictates that Ogg/Vorbis streams use Ogg transport
  12784. streams in degenerate, unmultiplexed form only. That is:
  12785. <ul class="itemize1">
  12786. <li class="itemize">A meta-headerless Ogg file encapsulates the Vorbis I packets
  12787. </li>
  12788. <li class="itemize">The Ogg stream may be chained, i.e., contain multiple, contigous logical streams
  12789. (links).
  12790. </li>
  12791. <li class="itemize">The Ogg stream must be unmultiplexed (only one stream, a Vorbis audio stream,
  12792. per link)
  12793. </li></ul>
  12794. <!--l. 41--><p class="noindent" >This is not to say that it is not currently possible to multiplex Vorbis with other media
  12795. types into a multi-stream Ogg file. At the time this document was written, Ogg was
  12796. becoming a popular container for low-bitrate movies consisting of DivX video and Vorbis
  12797. audio. However, a &#8217;Vorbis I audio file&#8217; is taken to imply Vorbis audio existing alone
  12798. within a degenerate Ogg stream. A compliant &#8217;Vorbis audio player&#8217; is not required to
  12799. implement Ogg support beyond the specific support of Vorbis within a degenrate Ogg
  12800. stream (naturally, application authors are encouraged to support full multiplexed Ogg
  12801. handling).
  12802. <!--l. 55--><p class="noindent" >
  12803. <h5 class="subsubsectionHead"><span class="titlemark">A.1.2. </span> <a
  12804. id="x1-131000A.1.2"></a>MIME type</h5>
  12805. <!--l. 57--><p class="noindent" >The MIME type of Ogg files depend on the context. Specifically, complex multimedia and
  12806. applications should use <span
  12807. class="cmtt-12">application/ogg</span>, while visual media should use <span
  12808. class="cmtt-12">video/ogg</span>, and audio
  12809. <span
  12810. class="cmtt-12">audio/ogg</span>. Vorbis data encapsulated in Ogg may appear in any of those types. RTP
  12811. encapsulated Vorbis should use <span
  12812. class="cmtt-12">audio/vorbis </span>+ <span
  12813. class="cmtt-12">audio/vorbis-config</span>.
  12814. <!--l. 65--><p class="noindent" >
  12815. <h4 class="subsectionHead"><span class="titlemark">A.2. </span> <a
  12816. id="x1-132000A.2"></a>Encapsulation</h4>
  12817. <!--l. 67--><p class="noindent" >Ogg encapsulation of a Vorbis packet stream is straightforward.
  12818. <ul class="itemize1">
  12819. <li class="itemize">The first Vorbis packet (the identification header), which uniquely identifies a stream
  12820. as Vorbis audio, is placed alone in the first page of the logical Ogg stream. This
  12821. results in a first Ogg page of exactly 58 bytes at the very beginning of the logical
  12822. stream.
  12823. </li>
  12824. <li class="itemize">This first page is marked &#8217;beginning of stream&#8217; in the page flags.
  12825. </li>
  12826. <li class="itemize">The second and third vorbis packets (comment and setup headers) may span one or
  12827. more pages beginning on the second page of the logical stream. However many pages
  12828. they span, the third header packet finishes the page on which it ends. The next (first
  12829. audio) packet must begin on a fresh page.
  12830. </li>
  12831. <li class="itemize">The granule position of these first pages containing only headers is zero.
  12832. </li>
  12833. <li class="itemize">The first audio packet of the logical stream begins a fresh Ogg page.
  12834. </li>
  12835. <li class="itemize">Packets are placed into ogg pages in order until the end of stream.
  12836. </li>
  12837. <li class="itemize">The last page is marked &#8217;end of stream&#8217; in the page flags.
  12838. </li>
  12839. <li class="itemize">Vorbis packets may span page boundaries.
  12840. </li>
  12841. <li class="itemize">The granule position of pages containing Vorbis audio is in units of PCM audio
  12842. samples (per channel; a stereo stream&#8217;s granule position does not increment at twice
  12843. the speed of a mono stream).
  12844. </li>
  12845. <li class="itemize">The granule position of a page represents the end PCM sample position of the last
  12846. packet <span
  12847. class="cmti-12">completed </span>on that page. The &#8217;last PCM sample&#8217; is the last complete sample
  12848. returned by decode, not an internal sample awaiting lapping with a subsequent block.
  12849. A page that is entirely spanned by a single packet (that completes on a subsequent
  12850. page) has no granule position, and the granule position is set to &#8217;-1&#8217;.
  12851. <!--l. 126--><p class="noindent" >Note that the last decoded (fully lapped) PCM sample from a packet is not
  12852. necessarily the middle sample from that block. If, eg, the current Vorbis packet
  12853. encodes a &#8221;long block&#8221; and the next Vorbis packet encodes a &#8221;short block&#8221;, the last
  12854. decodable sample from the current packet be at position (3*long_block_length/4) -
  12855. (short_block_length/4).
  12856. </li>
  12857. <li class="itemize">The granule (PCM) position of the first page need not indicate that the stream
  12858. started at position zero. Although the granule position belongs to the last completed
  12859. packet on the page and a valid granule position must be positive, by inference it may
  12860. indicate that the PCM position of the beginning of audio is positive or negative.
  12861. <ul class="itemize2">
  12862. <li class="itemize">A positive starting value simply indicates that this stream begins at some
  12863. positive time offset, potentially within a larger program. This is a common case
  12864. when connecting to the middle of broadcast stream.
  12865. </li>
  12866. <li class="itemize">A negative value indicates that output samples preceeding time zero should be
  12867. discarded during decoding; this technique is used to allow sample-granularity
  12868. editing of the stream start time of already-encoded Vorbis streams. The number
  12869. of samples to be discarded must not exceed the overlap-add span of the first two
  12870. audio packets.
  12871. </li></ul>
  12872. <!--l. 161--><p class="noindent" >In both of these cases in which the initial audio PCM starting offset is nonzero, the
  12873. second finished audio packet must flush the page on which it appears and the
  12874. third packet begin a fresh page. This allows the decoder to always be able to
  12875. perform PCM position adjustments before needing to return any PCM data from
  12876. synthesis, resulting in correct positioning information without any aditional seeking
  12877. logic.
  12878. <!--l. 170--><p class="noindent" ><span class="likesubparagraphHead"><a
  12879. id="x1-133000A.2"></a><span
  12880. class="cmbx-12">Note:</span></span> Failure to do so should, at worst, cause a decoder implementation to return
  12881. incorrect positioning information for seeking operations at the very beginning of the
  12882. stream.
  12883. </li>
  12884. <li class="itemize">A granule position on the final page in a stream that indicates less audio data than the
  12885. final packet would normally return is used to end the stream on other than even frame
  12886. boundaries. The difference between the actual available data returned and the
  12887. declared amount indicates how many trailing samples to discard from the decoding
  12888. process.
  12889. </li></ul>
  12890. <h3 class="sectionHead"><span class="titlemark">B. </span> <a
  12891. id="x1-134000B"></a>Vorbis encapsulation in RTP</h3>
  12892. <!--l. 8--><p class="noindent" >Please consult RFC 5215 <span
  12893. class="cmti-12">&#8220;RTP Payload Format for Vorbis Encoded Audio&#8221; </span>for description of
  12894. how to embed Vorbis audio in an RTP stream.
  12895. <h3 class="likesectionHead"><a
  12896. id="x1-135000B"></a>Colophon</h3>
  12897. <!--l. 6--><p class="noindent" ><img
  12898. src="fish_xiph_org.png" alt="PIC"
  12899. >
  12900. <!--l. 9--><p class="noindent" >Ogg is a <a
  12901. href="http://www.xiph.org/" >Xiph.Org Foundation</a> effort to protect essential tenets of Internet multimedia from
  12902. corporate hostage-taking; Open Source is the net&#8217;s greatest tool to keep everyone honest. See
  12903. <a
  12904. href="http://www.xiph.org/about.html" >About the Xiph.Org Foundation</a> for details.
  12905. <!--l. 16--><p class="noindent" >Ogg Vorbis is the first Ogg audio CODEC. Anyone may freely use and distribute the Ogg and
  12906. Vorbis specification, whether in a private, public or corporate capacity. However, the Xiph.Org
  12907. Foundation and the Ogg project (xiph.org) reserve the right to set the Ogg Vorbis specification
  12908. and certify specification compliance.
  12909. <!--l. 22--><p class="noindent" >Xiph.Org&#8217;s Vorbis software CODEC implementation is distributed under a BSD-like license. This
  12910. does not restrict third parties from distributing independent implementations of Vorbis software
  12911. under other licenses.
  12912. <!--l. 27--><p class="noindent" >Ogg, Vorbis, Xiph.Org Foundation and their logos are trademarks (tm) of the <a
  12913. href="http://www.xiph.org/" >Xiph.Org
  12914. Foundation</a>. These pages are copyright (C) 1994-2015 Xiph.Org Foundation. All rights
  12915. reserved.
  12916. <!--l. 32--><p class="noindent" >This document is set using <span class="LATEX">L<span class="A">A</span><span class="TEX">T<span
  12917. class="E">E</span>X</span></span>.
  12918. <h3 class="likesectionHead"><a
  12919. id="x1-136000B"></a>References</h3>
  12920. <!--l. 133--><p class="noindent" >
  12921. <div class="thebibliography">
  12922. <p class="bibitem" ><span class="biblabel">
  12923. [1]<span class="bibsp">&#x00A0;&#x00A0;&#x00A0;</span></span><a
  12924. id="XSporer/Brandenburg/Edler"></a>T.&#x00A0;Sporer, K.&#x00A0;Brandenburg and
  12925. B.&#x00A0;Edler, The use of multirate filter banks for coding of high quality digital audio,
  12926. <a
  12927. href="http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps" class="url" ><span
  12928. class="cmtt-12">http://www.iocon.com/resource/docs/ps/eusipco_corrected.ps</span></a>.
  12929. </p>
  12930. </div>
  12931. </body></html>