/* ĠCopyright Ġ( c ) Ġ 2 0 0 6 - 2 0 1 1 ĠSk ype ĠLimited . ĠAll ĠRights ĠReserved ĊĠĠ ĠPort ed Ġto ĠJava Ġby ĠLog an ĠSt rom berg ĊĊĠĠ ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout ĊĠĠ Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions ĊĠĠ Ġare Ġmet : ĊĊĠĠ Ġ- ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright ĊĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . ĊĊĠĠ Ġ- ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright ĊĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe ĊĠĠ Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . ĊĊĠĠ Ġ- ĠNeither Ġthe Ġname Ġof ĠInternet ĠSociety , ĠI ET F Ġor ĠI ET F ĠTrust , Ġnor Ġthe ĊĠĠ Ġnames Ġof Ġspecific Ġcontributors , Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote ĊĠĠ Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten ĊĠĠ Ġpermission . ĊĊĠĠ ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS ĊĠĠ Ġ`` AS ĠIS '' ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĊĠĠ ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĊĠĠ ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĊĠĠ ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĊĠĠ ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĊĠĠ ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĊĠĠ ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĊĠĠ ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĊĠĠ ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĊĠĠ ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġcom . so y wiz . kor au . format . org . con cent us Ċ Ċ internal Ġobject ĠRes idual Energy Ġ{ ĊĊĠĠĠ Ġ/* ĠCalculates Ġresidual Ġ energies Ġof Ġinput Ġsub frames Ġwhere Ġall Ġsub frames Ġhave ĠLPC _ order ĠĠ Ġ*/ ĊĠĠĠ Ġ/* Ġof Ġpreceding Ġsamples ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsil k _ residual _ energy ( ĊĠĠĠĠĠĠĠ Ġn rg s : ĠInt Array , Ġ/* ĠO ĠĠĠ ĠRes idual Ġenergy Ġper Ġsub frame Ġ Ġ[ MAX _ NB _ SUB FR ] ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġn rg s Q : ĠInt Array , Ġ/* ĠO ĠĠĠ ĠQ Ġvalue Ġper Ġsub frame ĠĠ Ġ[ MAX _ NB _ SUB FR ] ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġx : ĠShort Array , Ġ/* ĠI ĠĠĠ ĠInput Ġsignal ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġa _ Q 1 2 : ĠArray < Short Array >, Ġ/* ĠI ĠĠĠ ĠAR Ġcoef s Ġfor Ġeach Ġframe Ġhalf Ġ[ 2 ][ MAX _ LPC _ ORDER ] ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġg ains : ĠInt Array , Ġ/* ĠI ĠĠĠ ĠQuant ization Ġg ains Ġ[ Sil k Constants . MAX _ NB _ SUB FR ] ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġsub fr _ length : ĠInt , Ġ/* ĠI ĠĠĠ ĠSub frame Ġlength ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġnb _ sub fr : ĠInt , Ġ/* ĠI ĠĠĠ ĠNumber Ġof Ġsub frames ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠLPC _ order : ĠInt Ġ/* ĠI ĠĠĠ ĠLPC Ġorder ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ Ġ*/ ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġj : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġl z 1 : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġl z 2 : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġr shift Ġ= ĠBox ed Value Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġenergy Ġ= ĠBox ed Value Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġvar ĠLPC _ res _ ptr : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠLPC _ res : ĠShort Array ĊĠĠĠĠĠĠĠ Ġvar Ġx _ ptr : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġtmp 3 2 : ĠInt ĊĊĠĠĠĠĠĠĠ Ġx _ ptr Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġoffset Ġ= ĠLPC _ order Ġ+ Ġsub fr _ length ĊĊĠĠĠĠĠĠĠ Ġ/* ĠFilter Ġinput Ġto Ġcreate Ġthe ĠLPC Ġresidual Ġfor Ġeach Ġframe Ġhalf , Ġand Ġmeasure Ġsub frame Ġ energies Ġ*/ ĊĠĠĠĠĠĠĠ ĠLPC _ res Ġ= ĠShort Array (( Sil k Constants . MAX _ NB _ SUB FR Ġshr Ġ 1 ) Ġ* Ġoffset ) ĊĠĠĠĠĠĠĠ ĠIn lines . Op us Assert (( nb _ sub fr Ġshr Ġ 1 ) Ġ* Ġ( Sil k Constants . MAX _ NB _ SUB FR Ġshr Ġ 1 ) Ġ== Ġnb _ sub fr ) ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġnb _ sub fr Ġshr Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCalculate Ġhalf Ġframe ĠLPC Ġresidual Ġsignal Ġincluding Ġpreceding Ġsamples Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilters . sil k _ LPC _ analysis _ filter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLPC _ res , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx _ ptr , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa _ Q 1 2 [ i ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Sil k Constants . MAX _ NB _ SUB FR Ġshr Ġ 1 ) Ġ* Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLPC _ order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠPoint Ġto Ġfirst Ġsub frame Ġof Ġthe Ġjust Ġcalculated ĠLPC Ġresidual Ġsignal Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLPC _ res _ ptr Ġ= ĠLPC _ order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< ĠSil k Constants . MAX _ NB _ SUB FR Ġshr Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠMeasure Ġsub frame Ġenergy Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSum S qr Shift . sil k _ sum _ sqr _ shift ( energy , Ġr shift , ĠLPC _ res , ĠLPC _ res _ ptr , Ġsub fr _ length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn rg s [ i Ġ* Ġ( Sil k Constants . MAX _ NB _ SUB FR Ġshr Ġ 1 ) Ġ+ Ġj ] Ġ= Ġenergy . Val ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSet ĠQ Ġvalues Ġfor Ġthe Ġmeasured Ġenergy Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn rg s Q [ i Ġ* Ġ( Sil k Constants . MAX _ NB _ SUB FR Ġshr Ġ 1 ) Ġ+ Ġj ] Ġ= Ġ 0 Ġ- Ġr shift . Val ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠMove Ġto Ġnext Ġsub frame Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLPC _ res _ ptr Ġ+= Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠMove Ġto Ġnext Ġframe Ġhalf Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx _ ptr Ġ+= Ġ( Sil k Constants . MAX _ NB _ SUB FR Ġshr Ġ 1 ) Ġ* Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠApply Ġthe Ġsquared Ġsub frame Ġg ains Ġ*/ ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġnb _ sub fr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠFull y Ġup scale Ġg ains Ġand Ġ energies Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl z 1 Ġ= ĠIn lines . sil k _ CL Z 3 2 ( n rg s [ i ]) Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl z 2 Ġ= ĠIn lines . sil k _ CL Z 3 2 ( g ains [ i ]) Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp 3 2 Ġ= ĠIn lines . sil k _ L SHIFT 3 2 ( g ains [ i ], Ġl z 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠFind Ġsquared Ġg ains Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp 3 2 Ġ= ĠIn lines . sil k _ S MM UL ( tmp 3 2 , Ġtmp 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠQ ( Ġ 2 Ġ* Ġl z 2 Ġ- Ġ 3 2 Ġ) */ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠScale Ġ energies Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn rg s [ i ] Ġ= ĠIn lines . sil k _ S MM UL ( tmp 3 2 , ĠIn lines . sil k _ L SHIFT 3 2 ( n rg s [ i ], Ġl z 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠQ ( Ġn rg s Q [ Ġi Ġ] Ġ+ Ġl z 1 Ġ+ Ġ 2 Ġ* Ġl z 2 Ġ- Ġ 3 2 Ġ- Ġ 3 2 Ġ) */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn rg s Q [ i ] Ġ+= Ġl z 1 Ġ+ Ġ 2 Ġ* Ġl z 2 Ġ- Ġ 3 2 Ġ- Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠRes idual Ġenergy : Ġn rg Ġ= Ġw xx Ġ- Ġ 2 Ġ* Ġw Xx Ġ* Ġc Ġ+ Ġc ' Ġ* Ġw XX Ġ* Ġc Ġ*/ ĊĠĠĠ Ġfun Ġsil k _ residual _ energy 1 6 _ co var ( ĊĠĠĠĠĠĠĠ Ġc : ĠShort Array , Ġ/* ĠI ĠĠĠ ĠPrediction Ġvector ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġc _ ptr : ĠInt , ĊĠĠĠĠĠĠĠ Ġw XX : ĠInt Array , Ġ/* ĠI ĠĠĠ ĠCorre lation Ġmatrix ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġw XX _ ptr : ĠInt , ĊĠĠĠĠĠĠĠ Ġw Xx : ĠInt Array , Ġ/* ĠI ĠĠĠ ĠCorre lation Ġvector ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġw xx : ĠInt , Ġ/* ĠI ĠĠĠ ĠSignal Ġenergy ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠD : ĠInt , Ġ/* ĠI ĠĠĠ ĠDimension ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġc Q : ĠInt Ġ/* ĠI ĠĠĠ ĠQ Ġvalue Ġfor Ġc Ġvector Ġ 0 Ġ- Ġ 1 5 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġj : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġl shifts : ĠInt ĊĠĠĠĠĠĠĠ Ġvar ĠQ x tra : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġc _ max : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġw _ max : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġtmp : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġtmp 2 : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġn rg : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġcn Ġ= ĠInt Array ( D ) Ġ// Sil k Constants . MAX _ MATRIX _ SIZE ĊĠĠĠĠĠĠĠ Ġvar Ġp Row : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/* ĠS afety Ġchecks Ġ*/ ĊĠĠĠĠĠĠĠ ĠIn lines . Op us Assert ( D Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠIn lines . Op us Assert ( D Ġ<= Ġ 1 6 ) ĊĠĠĠĠĠĠĠ ĠIn lines . Op us Assert ( c Q Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠIn lines . Op us Assert ( c Q Ġ< Ġ 1 6 ) ĊĊĠĠĠĠĠĠĠ Ġl shifts Ġ= Ġ 1 6 Ġ- Ġc Q ĊĠĠĠĠĠĠĠ ĠQ x tra Ġ= Ġl shifts ĊĊĠĠĠĠĠĠĠ Ġc _ max Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġc _ ptr ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġc _ ptr Ġ+ ĠD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc _ max Ġ= ĠIn lines . sil k _ max _ 3 2 ( c _ max , ĠIn lines . sil k _ abs ( c [ i ]. toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠQ x tra Ġ= ĠIn lines . sil k _ min _ int ( Qx tra , ĠIn lines . sil k _ CL Z 3 2 ( c _ max ) Ġ- Ġ 1 7 ) ĊĊĠĠĠĠĠĠĠ Ġw _ max Ġ= ĠIn lines . sil k _ max _ 3 2 ( w XX [ w XX _ ptr ], Ġw XX [ w XX _ ptr Ġ+ ĠD Ġ* ĠD Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠ ĠQ x tra Ġ= ĠIn lines . sil k _ min _ int ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ x tra , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn lines . sil k _ CL Z 3 2 ( In lines . sil k _ MUL ( D , ĠIn lines . sil k _ R SHIFT ( In lines . sil k _ SM UL WB ( w _ max , Ġc _ max ), Ġ 4 ))) Ġ- Ġ 5 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠQ x tra Ġ= ĠIn lines . sil k _ max _ int ( Qx tra , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< ĠD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcn [ i ] Ġ= ĠIn lines . sil k _ L SHIFT ( c [ c _ ptr Ġ+ Ġi ]. toInt (), ĠQ x tra ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn lines . Op us Assert ( In lines . sil k _ abs ( cn [ i ]) Ġ<= ĠShort . MAX _ VALUE Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġthat ĠIn lines . sil k _ S ML AW B Ġcan Ġbe Ġused Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġl shifts Ġ-= ĠQ x tra ĊĊĠĠĠĠĠĠĠ Ġ/* ĠCompute Ġw xx Ġ- Ġ 2 Ġ* Ġw Xx Ġ* Ġc Ġ*/ ĊĠĠĠĠĠĠĠ Ġtmp Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< ĠD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= ĠIn lines . sil k _ S ML AW B ( tmp , Ġw Xx [ i ], Ġcn [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn rg Ġ= ĠIn lines . sil k _ R SHIFT ( w xx , Ġ 1 Ġ+ Ġl shifts ) Ġ- Ġtmp ĊĠĠĠĠĠĠĠ Ġ/* ĠQ : Ġ- l shifts Ġ- Ġ 1 Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ/* ĠAdd Ġc ' Ġ* Ġw XX Ġ* Ġc , Ġassuming Ġw XX Ġis Ġsymmetric Ġ*/ ĊĠĠĠĠĠĠĠ Ġtmp 2 Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< ĠD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp Row Ġ= Ġw XX _ ptr Ġ+ Ġi Ġ* ĠD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ= Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< ĠD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= ĠIn lines . sil k _ S ML AW B ( tmp , Ġw XX [ p Row Ġ+ Ġj ], Ġcn [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= ĠIn lines . sil k _ S ML AW B ( tmp , ĠIn lines . sil k _ R SHIFT ( w XX [ p Row Ġ+ Ġi ], Ġ 1 ), Ġcn [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp 2 Ġ= ĠIn lines . sil k _ S ML AW B ( tmp 2 , Ġtmp , Ġcn [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn rg Ġ= ĠIn lines . sil k _ ADD _ L SHIFT 3 2 ( n rg , Ġtmp 2 , Ġl shifts ) ĊĠĠĠĠĠĠĠ Ġ/* ĠQ : Ġ- l shifts Ġ- Ġ 1 Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ/* ĠKeep Ġone Ġbit Ġfree Ġalways , Ġbecause Ġwe Ġadd Ġthem Ġfor ĠL SF Ġinterpolation Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( n rg Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn rg Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( n rg Ġ> ĠIn lines . sil k _ R SHIFT ( Int . MAX _ VALUE , Ġl shifts Ġ+ Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn rg Ġ= ĠInt . MAX _ VALUE Ġshr Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn rg Ġ= ĠIn lines . sil k _ L SHIFT ( n rg , Ġl shifts Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠQ 0 Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġn rg ĊĊĠĠĠ Ġ} Ċ } Ċ