/* Ġ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 Ċ Ċ import Ġcom . so y wiz . k mem .* Ċ Ċ /* Ċ Ġ* ĠMatrix Ġof Ġres ampling Ġmethods Ġused : Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFs _ out Ġ( k Hz ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĠĠĠĠĠĠ 1 2 ĠĠĠĠĠ 1 6 ĠĠĠĠĠ 2 4 ĠĠĠĠĠ 4 8 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĠĠĠĠĠĠĠ ĠC ĠĠĠĠĠ ĠU F ĠĠĠĠ ĠU ĠĠĠĠĠ ĠU F ĠĠĠĠ ĠU F Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĠĠĠĠĠĠĠ ĠAF ĠĠĠĠ ĠC ĠĠĠĠĠ ĠU F ĠĠĠĠ ĠU ĠĠĠĠĠ ĠU F Ċ Ġ* ĠFs _ in Ġ( k Hz ) ĠĠ 1 6 ĠĠĠĠĠĠĠ ĠD ĠĠĠĠĠ ĠAF ĠĠĠĠ ĠC ĠĠĠĠĠ ĠU F ĠĠĠĠ ĠU F Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 ĠĠĠĠĠĠĠ ĠAF ĠĠĠĠ ĠD ĠĠĠĠĠ ĠAF ĠĠĠĠ ĠC ĠĠĠĠĠ ĠU Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 8 ĠĠĠĠĠĠĠ ĠAF ĠĠĠĠ ĠAF ĠĠĠĠ ĠAF ĠĠĠĠ ĠD ĠĠĠĠĠ ĠC Ċ Ġ* Ċ Ġ* ĠC ĠĠ Ġ. ĠCopy Ġ( no Ġres ampling ) Ċ Ġ* ĠD ĠĠ Ġ. ĠAll pass - based Ġ 2 x Ġdown sampling Ċ Ġ* ĠU ĠĠ Ġ. ĠAll pass - based Ġ 2 x Ġup sampling Ċ Ġ* ĠU F Ġ Ġ. ĠAll pass - based Ġ 2 x Ġup sampling Ġfollowed Ġby ĠFIR Ġinterpolation Ċ Ġ* ĠAF Ġ Ġ. ĠAR 2 Ġfilter Ġfollowed Ġby ĠFIR Ġinterpolation Ċ Ġ*/ Ċ internal Ġobject ĠRes ampler Ġ{ ĊĊ ĉ private Ġval ĠUSE _ sil k _ res ampler _ copy Ġ= Ġ 0 Ċ ĉ private Ġval ĠUSE _ sil k _ res ampler _ private _ up 2 _ HQ _ wrapper Ġ= Ġ 1 Ċ ĉ private Ġval ĠUSE _ sil k _ res ampler _ private _ I IR _ FI R Ġ= Ġ 2 Ċ ĉ private Ġval ĠUSE _ sil k _ res ampler _ private _ down _ FI R Ġ= Ġ 3 ĊĊ ĉ private Ġval ĠORDER _ FI R Ġ= Ġ 4 ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠSimple Ġway Ġto Ġmake Ġ[ 8 0 0 0 , Ġ 1 2 0 0 0 , Ġ 1 6 0 0 0 , Ġ 2 4 0 0 0 , Ġ 4 8 0 0 0 ] Ġto Ġ[ 0 , Ġ 1 , Ġ 2 , Ġ 3 , Ġ 4 ] Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" R "></ param > Ċ ĉ /// Ġ< returns ></ returns > Ċ ĉ private Ġfun Ġrate ID ( R : ĠInt ): ĠInt Ġ{ Ċĉ ĉ return Ġ(( R Ġshr Ġ 1 2 ) Ġ- Ġif Ġ( R Ġ> Ġ 1 6 0 0 0 ) Ġ 1 Ġelse Ġ 0 Ġshr Ġif Ġ( R Ġ> Ġ 2 4 0 0 0 ) Ġ 1 Ġelse Ġ 0 ) Ġ- Ġ 1 Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠInitialize / reset Ġthe Ġres ampler Ġstate Ġfor Ġa Ġgiven Ġpair Ġof Ġinput / output Ġsampling Ġrates Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠRes ampler Ġstate </ param > Ċ ĉ /// Ġ< param Ġname =" Fs _ Hz _ in "> I ĠĠĠ ĠInput Ġsampling Ġrate Ġ( Hz )</ param > Ċ ĉ /// Ġ< param Ġname =" Fs _ Hz _ out "> I ĠĠĠ ĠOutput Ġsampling Ġrate Ġ( Hz )</ param > Ċ ĉ /// Ġ< param Ġname =" for Enc "> I ĠĠĠ ĠIf Ġ 1 : Ġencoder ; Ġif Ġ 0 : Ġdecoder </ param > Ċ ĉ /// Ġ< returns ></ returns > Ċ ĉ fun Ġsil k _ res ampler _ init ( Ċĉ ĉ S : ĠSil k Res ampler State , Ċĉ ĉ Fs _ Hz _ in : ĠInt , Ċĉ ĉ Fs _ Hz _ out : ĠInt , Ċĉ ĉ for Enc : ĠInt Ċ ĉ ): ĠInt Ġ{ Ċĉ ĉ var Ġup 2 x : ĠInt ĊĊĉ ĉ /* ĠClear Ġstate Ġ*/ Ċĉ ĉ S . Reset () ĊĊĉ ĉ /* ĠInput Ġchecking Ġ*/ Ċĉ ĉ if Ġ( for Enc Ġ!= Ġ 0 ) Ġ{ Ċĉĉ ĉ if Ġ( Fs _ Hz _ in Ġ!= Ġ 8 0 0 0 Ġ&& ĠFs _ Hz _ in Ġ!= Ġ 1 2 0 0 0 Ġ&& ĠFs _ Hz _ in Ġ!= Ġ 1 6 0 0 0 Ġ&& ĠFs _ Hz _ in Ġ!= Ġ 2 4 0 0 0 Ġ&& ĠFs _ Hz _ in Ġ!= Ġ 4 8 0 0 0 Ġ|| ĠFs _ Hz _ out Ġ!= Ġ 8 0 0 0 Ġ&& ĠFs _ Hz _ out Ġ!= Ġ 1 2 0 0 0 Ġ&& ĠFs _ Hz _ out Ġ!= Ġ 1 6 0 0 0 ) Ġ{ Ċĉĉĉ ĉ In lines . Op us Assert ( false ) Ċĉĉĉ ĉ return Ġ- 1 Ċĉĉ ĉ } Ċĉĉ ĉ S . input Delay Ġ= ĠSil k Tables . delay _ matrix _ enc [ rate ID ( Fs _ Hz _ in )][ rate ID ( Fs _ Hz _ out )]. toInt () Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ if Ġ( Fs _ Hz _ in Ġ!= Ġ 8 0 0 0 Ġ&& ĠFs _ Hz _ in Ġ!= Ġ 1 2 0 0 0 Ġ&& ĠFs _ Hz _ in Ġ!= Ġ 1 6 0 0 0 Ġ|| ĠFs _ Hz _ out Ġ!= Ġ 8 0 0 0 Ġ&& ĠFs _ Hz _ out Ġ!= Ġ 1 2 0 0 0 Ġ&& ĠFs _ Hz _ out Ġ!= Ġ 1 6 0 0 0 Ġ&& ĠFs _ Hz _ out Ġ!= Ġ 2 4 0 0 0 Ġ&& ĠFs _ Hz _ out Ġ!= Ġ 4 8 0 0 0 ) Ġ{ Ċĉĉĉ ĉ In lines . Op us Assert ( false ) Ċĉĉĉ ĉ return Ġ- 1 Ċĉĉ ĉ } Ċĉĉ ĉ S . input Delay Ġ= ĠSil k Tables . delay _ matrix _ dec [ rate ID ( Fs _ Hz _ in )][ rate ID ( Fs _ Hz _ out )]. toInt () Ċĉ ĉ } ĊĊĉ ĉ S . Fs _ in _ k Hz Ġ= ĠIn lines . sil k _ DIV 3 2 _ 1 6 ( Fs _ Hz _ in , Ġ 1 0 0 0 ) Ċĉ ĉ S . Fs _ out _ k Hz Ġ= ĠIn lines . sil k _ DIV 3 2 _ 1 6 ( Fs _ Hz _ out , Ġ 1 0 0 0 ) ĊĊĉ ĉ /* ĠNumber Ġof Ġsamples Ġprocessed Ġper Ġbatch Ġ*/ Ċĉ ĉ S . batch Size Ġ= ĠS . Fs _ in _ k Hz Ġ* ĠSil k Constants . RE SAMPLER _ MAX _ BATCH _ SIZE _ MS ĊĊĉ ĉ /* ĠFind Ġres ampler Ġwith Ġthe Ġright Ġsampling Ġratio Ġ*/ Ċĉ ĉ up 2 x Ġ= Ġ 0 Ċĉ ĉ if Ġ( Fs _ Hz _ out Ġ> ĠFs _ Hz _ in ) Ġ{ Ċĉĉ ĉ /* ĠU ps ample Ġ*/ Ċĉĉ ĉ if Ġ( Fs _ Hz _ out Ġ== ĠIn lines . sil k _ MUL ( Fs _ Hz _ in , Ġ 2 )) Ġ{ Ċĉĉĉ ĉ /* ĠFs _ out Ġ: ĠFs _ in Ġ= Ġ 2 Ġ: Ġ 1 Ġ*/ Ċĉĉĉ ĉ /* ĠSpecial Ġcase : Ġdirectly Ġuse Ġ 2 x Ġup sampler Ġ*/ Ċĉĉĉ ĉ S . res ampler _ function Ġ= ĠUSE _ sil k _ res ampler _ private _ up 2 _ HQ _ wrapper Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ /* ĠDefault Ġres ampler Ġ*/ Ċĉĉĉ ĉ S . res ampler _ function Ġ= ĠUSE _ sil k _ res ampler _ private _ I IR _ FI R Ċĉĉĉ ĉ up 2 x Ġ= Ġ 1 Ċĉĉ ĉ } Ċĉ ĉ } Ġelse Ġif Ġ( Fs _ Hz _ out Ġ< ĠFs _ Hz _ in ) Ġ{ Ċĉĉ ĉ /* ĠDown sample Ġ*/ Ċĉĉ ĉ S . res ampler _ function Ġ= ĠUSE _ sil k _ res ampler _ private _ down _ FI R Ċĉĉ ĉ if Ġ( In lines . sil k _ MUL ( Fs _ Hz _ out , Ġ 4 ) Ġ== ĠIn lines . sil k _ MUL ( Fs _ Hz _ in , Ġ 3 )) Ġ{ Ċĉĉĉ ĉ /* ĠFs _ out Ġ: ĠFs _ in Ġ= Ġ 3 Ġ: Ġ 4 Ġ*/ Ċĉĉĉ ĉ S . FI R _ Fr acs Ġ= Ġ 3 Ċĉĉĉ ĉ S . FI R _ Order Ġ= ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 0 Ċĉĉĉ ĉ S . Coef s Ġ= ĠSil k Tables . sil k _ Res ampler _ 3 _ 4 _ CO E FS Ċĉĉ ĉ } Ġelse Ġif Ġ( In lines . sil k _ MUL ( Fs _ Hz _ out , Ġ 3 ) Ġ== ĠIn lines . sil k _ MUL ( Fs _ Hz _ in , Ġ 2 )) Ġ{ Ċĉĉĉ ĉ /* ĠFs _ out Ġ: ĠFs _ in Ġ= Ġ 2 Ġ: Ġ 3 Ġ*/ Ċĉĉĉ ĉ S . FI R _ Fr acs Ġ= Ġ 2 Ċĉĉĉ ĉ S . FI R _ Order Ġ= ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 0 Ċĉĉĉ ĉ S . Coef s Ġ= ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS Ċĉĉ ĉ } Ġelse Ġif Ġ( In lines . sil k _ MUL ( Fs _ Hz _ out , Ġ 2 ) Ġ== ĠFs _ Hz _ in ) Ġ{ Ċĉĉĉ ĉ /* ĠFs _ out Ġ: ĠFs _ in Ġ= Ġ 1 Ġ: Ġ 2 Ġ*/ Ċĉĉĉ ĉ S . FI R _ Fr acs Ġ= Ġ 1 Ċĉĉĉ ĉ S . FI R _ Order Ġ= ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 1 Ċĉĉĉ ĉ S . Coef s Ġ= ĠSil k Tables . sil k _ Res ampler _ 1 _ 2 _ CO E FS Ċĉĉ ĉ } Ġelse Ġif Ġ( In lines . sil k _ MUL ( Fs _ Hz _ out , Ġ 3 ) Ġ== ĠFs _ Hz _ in ) Ġ{ Ċĉĉĉ ĉ /* ĠFs _ out Ġ: ĠFs _ in Ġ= Ġ 1 Ġ: Ġ 3 Ġ*/ Ċĉĉĉ ĉ S . FI R _ Fr acs Ġ= Ġ 1 Ċĉĉĉ ĉ S . FI R _ Order Ġ= ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 2 Ċĉĉĉ ĉ S . Coef s Ġ= ĠSil k Tables . sil k _ Res ampler _ 1 _ 3 _ CO E FS Ċĉĉ ĉ } Ġelse Ġif Ġ( In lines . sil k _ MUL ( Fs _ Hz _ out , Ġ 4 ) Ġ== ĠFs _ Hz _ in ) Ġ{ Ċĉĉĉ ĉ /* ĠFs _ out Ġ: ĠFs _ in Ġ= Ġ 1 Ġ: Ġ 4 Ġ*/ Ċĉĉĉ ĉ S . FI R _ Fr acs Ġ= Ġ 1 Ċĉĉĉ ĉ S . FI R _ Order Ġ= ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 2 Ċĉĉĉ ĉ S . Coef s Ġ= ĠSil k Tables . sil k _ Res ampler _ 1 _ 4 _ CO E FS Ċĉĉ ĉ } Ġelse Ġif Ġ( In lines . sil k _ MUL ( Fs _ Hz _ out , Ġ 6 ) Ġ== ĠFs _ Hz _ in ) Ġ{ Ċĉĉĉ ĉ /* ĠFs _ out Ġ: ĠFs _ in Ġ= Ġ 1 Ġ: Ġ 6 Ġ*/ Ċĉĉĉ ĉ S . FI R _ Fr acs Ġ= Ġ 1 Ċĉĉĉ ĉ S . FI R _ Order Ġ= ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 2 Ċĉĉĉ ĉ S . Coef s Ġ= ĠSil k Tables . sil k _ Res ampler _ 1 _ 6 _ CO E FS Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ /* ĠNone Ġavailable Ġ*/ Ċĉĉĉ ĉ In lines . Op us Assert ( false ) Ċĉĉĉ ĉ return Ġ- 1 Ċĉĉ ĉ } Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ /* ĠInput Ġand Ġoutput Ġsampling Ġrates Ġare Ġequal : Ġcopy Ġ*/ Ċĉĉ ĉ S . res ampler _ function Ġ= ĠUSE _ sil k _ res ampler _ copy Ċĉ ĉ } ĊĊĉ ĉ /* ĠR atio Ġof Ġinput / output Ġsamples Ġ*/ Ċĉ ĉ S . inv Ratio _ Q 1 6 Ġ= Ċĉĉĉ ĉ In lines . sil k _ L SHIFT 3 2 ( In lines . sil k _ DIV 3 2 ( In lines . sil k _ L SHIFT 3 2 ( Fs _ Hz _ in , Ġ 1 4 Ġ+ Ġup 2 x ), ĠFs _ Hz _ out ), Ġ 2 ) ĊĊĉ ĉ /* ĠMake Ġsure Ġthe Ġratio Ġis Ġrounded Ġup Ġ*/ Ċĉ ĉ while Ġ( In lines . sil k _ SM UL WW ( S . inv Ratio _ Q 1 6 , ĠFs _ Hz _ out ) Ġ< ĠIn lines . sil k _ L SHIFT 3 2 ( Fs _ Hz _ in , Ġup 2 x )) Ġ{ Ċĉĉ ĉ S . inv Ratio _ Q 1 6 ++ Ċĉ ĉ } ĊĊĉ ĉ return Ġ 0 Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠRes ampler : Ġconvert Ġfrom Ġone Ġsampling Ġrate Ġto Ġanother Ċ ĉ /// ĠInput Ġand Ġoutput Ġsampling Ġrate Ġare Ġat Ġmost Ġ 4 8 0 0 0 ĠHz Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠRes ampler Ġstate </ param > Ċ ĉ /// Ġ< param Ġname =" output "> O ĠĠĠ ĠOutput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" input "> I ĠĠĠ ĠInput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" in Len "> I ĠĠĠ ĠNumber Ġof Ġinput Ġsamples </ param > Ċ ĉ /// Ġ< returns ></ returns > Ċ ĉ fun Ġsil k _ res ampler ( Ċĉ ĉ S : ĠSil k Res ampler State , Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ output _ ptr : ĠInt , Ċĉ ĉ input : ĠShort Array , Ċĉ ĉ input _ ptr : ĠInt , Ċĉ ĉ in Len : ĠInt Ċ ĉ ): ĠInt Ġ{ Ċĉ ĉ val Ġn Samples : ĠInt ĊĊĉ ĉ /* ĠNeed Ġat Ġleast Ġ 1 Ġms Ġof Ġinput Ġdata Ġ*/ Ċĉ ĉ In lines . Op us Assert ( in Len Ġ>= ĠS . Fs _ in _ k Hz ) Ċĉ ĉ /* ĠDelay Ġcan 't Ġexceed Ġthe Ġ 1 Ġms Ġof Ġbuffer ing Ġ*/ Ċĉ ĉ In lines . Op us Assert ( S . input Delay Ġ<= ĠS . Fs _ in _ k Hz ) ĊĊĉ ĉ n Samples Ġ= ĠS . Fs _ in _ k Hz Ġ- ĠS . input Delay ĊĊĉ ĉ val Ġdelay Buf Ptr Ġ= ĠS . delay Buf ĊĊĉ ĉ /* ĠCopy Ġto Ġdelay Ġbuffer Ġ*/ Ċĉ ĉ arraycopy ( input , Ġinput _ ptr , Ġdelay Buf Ptr , ĠS . input Delay , Ġn Samples ) ĊĊĉ ĉ when Ġ( S . res ampler _ function ) Ġ{ Ċĉĉ ĉ USE _ sil k _ res ampler _ private _ up 2 _ HQ _ wrapper Ġ-> Ġ{ Ċĉĉĉ ĉ sil k _ res ampler _ private _ up 2 _ HQ ( S . s I IR , Ġoutput , Ġoutput _ ptr , Ġdelay Buf Ptr , Ġ 0 , ĠS . Fs _ in _ k Hz ) Ċĉĉĉ ĉ sil k _ res ampler _ private _ up 2 _ HQ ( Ċĉĉĉĉ ĉ S . s I IR , Ċĉĉĉĉ ĉ output , Ċĉĉĉĉ ĉ output _ ptr Ġ+ ĠS . Fs _ out _ k Hz , Ċĉĉĉĉ ĉ input , Ċĉĉĉĉ ĉ input _ ptr Ġ+ Ġn Samples , Ċĉĉĉĉ ĉ in Len Ġ- ĠS . Fs _ in _ k Hz Ċĉĉĉ ĉ ) Ċĉĉ ĉ } Ċĉĉ ĉ USE _ sil k _ res ampler _ private _ I IR _ FI R Ġ-> Ġ{ Ċĉĉĉ ĉ sil k _ res ampler _ private _ I IR _ FI R ( S , Ġoutput , Ġoutput _ ptr , Ġdelay Buf Ptr , Ġ 0 , ĠS . Fs _ in _ k Hz ) Ċĉĉĉ ĉ sil k _ res ampler _ private _ I IR _ FI R ( Ċĉĉĉĉ ĉ S , Ċĉĉĉĉ ĉ output , Ċĉĉĉĉ ĉ output _ ptr Ġ+ ĠS . Fs _ out _ k Hz , Ċĉĉĉĉ ĉ input , Ċĉĉĉĉ ĉ input _ ptr Ġ+ Ġn Samples , Ċĉĉĉĉ ĉ in Len Ġ- ĠS . Fs _ in _ k Hz Ċĉĉĉ ĉ ) Ċĉĉ ĉ } Ċĉĉ ĉ USE _ sil k _ res ampler _ private _ down _ FI R Ġ-> Ġ{ Ċĉĉĉ ĉ sil k _ res ampler _ private _ down _ FI R ( S , Ġoutput , Ġoutput _ ptr , Ġdelay Buf Ptr , Ġ 0 , ĠS . Fs _ in _ k Hz ) Ċĉĉĉ ĉ sil k _ res ampler _ private _ down _ FI R ( Ċĉĉĉĉ ĉ S , Ċĉĉĉĉ ĉ output , Ċĉĉĉĉ ĉ output _ ptr Ġ+ ĠS . Fs _ out _ k Hz , Ċĉĉĉĉ ĉ input , Ċĉĉĉĉ ĉ input _ ptr Ġ+ Ġn Samples , Ċĉĉĉĉ ĉ in Len Ġ- ĠS . Fs _ in _ k Hz Ċĉĉĉ ĉ ) Ċĉĉ ĉ } Ċĉĉ ĉ else Ġ-> Ġ{ Ċĉĉĉ ĉ arraycopy ( delay Buf Ptr , Ġ 0 , Ġoutput , Ġoutput _ ptr , ĠS . Fs _ in _ k Hz ) Ċĉĉĉ ĉ arraycopy ( input , Ġinput _ ptr Ġ+ Ġn Samples , Ġoutput , Ġoutput _ ptr Ġ+ ĠS . Fs _ out _ k Hz , Ġin Len Ġ- ĠS . Fs _ in _ k Hz ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /* ĠCopy Ġto Ġdelay Ġbuffer Ġ*/ Ċĉ ĉ arraycopy ( input , Ġinput _ ptr Ġ+ Ġin Len Ġ- ĠS . input Delay , Ġdelay Buf Ptr , Ġ 0 , ĠS . input Delay ) ĊĊĉ ĉ return ĠSil k Error . SIL K _ NO _ ERROR Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠDown sample Ġby Ġa Ġfactor Ġ 2 Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠState Ġvector Ġ[ Ġ 2 Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" output "> O ĠĠĠ ĠOutput Ġsignal Ġ[ Ġfloor ( len / 2 ) Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" input "> I ĠĠĠ ĠInput Ġsignal Ġ[ Ġlen Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" in Len "> I ĠĠĠ ĠNumber Ġof Ġinput Ġsamples </ param > Ċ ĉ fun Ġsil k _ res ampler _ down 2 ( Ċĉ ĉ S : ĠInt Array , Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ input : ĠShort Array , Ċĉ ĉ in Len : ĠInt Ċ ĉ ) Ġ{ Ċĉ ĉ var Ġk : ĠInt Ċĉ ĉ val Ġlen 2 Ġ= ĠIn lines . sil k _ R SHIFT 3 2 ( in Len , Ġ 1 ) Ċĉ ĉ var Ġin 3 2 : ĠInt Ċĉ ĉ var Ġout 3 2 : ĠInt Ċĉ ĉ var ĠY : ĠInt Ċĉ ĉ var ĠX : ĠInt ĊĊĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ down 2 _ 0 Ġ> Ġ 0 ) Ċĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ down 2 _ 1 Ġ< Ġ 0 ) ĊĊĉ ĉ /* ĠInternal Ġvariables Ġand Ġstate Ġare Ġin ĠQ 1 0 Ġformat Ġ*/ Ċĉ ĉ k Ġ= Ġ 0 Ċĉ ĉ while Ġ( k Ġ< Ġlen 2 ) Ġ{ Ċĉĉ ĉ /* ĠConvert Ġto ĠQ 1 0 Ġ*/ Ċĉĉ ĉ in 3 2 Ġ= ĠIn lines . sil k _ L SHIFT ( input [ 2 Ġ* Ġk ]. toInt (), Ġ 1 0 ) ĊĊĉĉ ĉ /* ĠAll - pass Ġsection Ġfor Ġeven Ġinput Ġsample Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( in 3 2 , ĠS [ 0 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ S ML AW B ( Y , ĠY , ĠSil k Tables . sil k _ res ampler _ down 2 _ 1 . toInt ()) Ċĉĉ ĉ out 3 2 Ġ= ĠIn lines . sil k _ ADD 3 2 ( S [ 0 ], ĠX ) Ċĉĉ ĉ S [ 0 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( in 3 2 , ĠX ) ĊĊĉĉ ĉ /* ĠConvert Ġto ĠQ 1 0 Ġ*/ Ċĉĉ ĉ in 3 2 Ġ= ĠIn lines . sil k _ L SHIFT ( input [ 2 Ġ* Ġk Ġ+ Ġ 1 ]. toInt (), Ġ 1 0 ) ĊĊĉĉ ĉ /* ĠAll - pass Ġsection Ġfor Ġodd Ġinput Ġsample , Ġand Ġadd Ġto Ġoutput Ġof Ġprevious Ġsection Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( in 3 2 , ĠS [ 1 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ SM UL WB ( Y , ĠSil k Tables . sil k _ res ampler _ down 2 _ 0 . toInt ()) Ċĉĉ ĉ out 3 2 Ġ= ĠIn lines . sil k _ ADD 3 2 ( out 3 2 , ĠS [ 1 ]) Ċĉĉ ĉ out 3 2 Ġ= ĠIn lines . sil k _ ADD 3 2 ( out 3 2 , ĠX ) Ċĉĉ ĉ S [ 1 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( in 3 2 , ĠX ) ĊĊĉĉ ĉ /* ĠAdd , Ġconvert Ġback Ġto Ġint 1 6 Ġand Ġstore Ġto Ġoutput Ġ*/ Ċĉĉ ĉ output [ k ] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( out 3 2 , Ġ 1 1 )). to Short () Ċĉĉ ĉ k ++ Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠDown sample Ġby Ġa Ġfactor Ġ 2 / 3 , Ġlow Ġquality Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠState Ġvector Ġ[ Ġ 6 Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" output "> O ĠĠĠ ĠOutput Ġsignal Ġ[ Ġfloor ( 2 * in Len / 3 ) Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" input "> I ĠĠĠ ĠInput Ġsignal Ġ[ Ġin Len Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" in Len "> I ĠĠĠ ĠNumber Ġof Ġinput Ġsamples </ param > Ċ ĉ fun Ġsil k _ res ampler _ down 2 _ 3 ( Ċĉ ĉ S : ĠInt Array , Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ input : ĠShort Array , Ċĉ ĉ in Len : ĠInt Ċ ĉ ) Ġ{ Ċĉ ĉ var Ġin Len Ġ= Ġin Len Ċĉ ĉ var Ġn Samples In : ĠInt Ċĉ ĉ var Ġcounter : ĠInt Ċĉ ĉ var Ġres _ Q 6 : ĠInt Ċĉ ĉ val Ġbuf Ġ= ĠInt Array ( Sil k Constants . RE SAMPLER _ MAX _ BATCH _ SIZE _ IN Ġ+ ĠORDER _ FI R ) Ċĉ ĉ var Ġbuf _ ptr : ĠInt Ċĉ ĉ var Ġinput _ ptr Ġ= Ġ 0 Ċĉ ĉ var Ġoutput _ ptr Ġ= Ġ 0 ĊĊĉ ĉ /* ĠCopy Ġbuffered Ġsamples Ġto Ġstart Ġof Ġbuffer Ġ*/ Ċĉ ĉ arraycopy ( S , Ġ 0 , Ġbuf , Ġ 0 , ĠORDER _ FI R ) ĊĊĉ ĉ /* ĠIterate Ġover Ġblocks Ġof Ġframe Size In Ġinput Ġsamples Ġ*/ Ċĉ ĉ while Ġ( true ) Ġ{ Ċĉĉ ĉ n Samples In Ġ= ĠIn lines . sil k _ min ( in Len , ĠSil k Constants . RE SAMPLER _ MAX _ BATCH _ SIZE _ IN ) ĊĊĉĉ ĉ /* ĠSecond - order ĠAR Ġfilter Ġ( output Ġin ĠQ 8 ) Ġ*/ Ċĉĉ ĉ sil k _ res ampler _ private _ AR 2 ( Ċĉĉĉ ĉ S , ĠORDER _ FI R , Ġbuf , ĠORDER _ FI R , Ġinput , Ġinput _ ptr , Ċĉĉĉ ĉ Sil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q , Ġn Samples In Ċĉĉ ĉ ) ĊĊĉĉ ĉ /* ĠInterpol ate Ġfiltered Ġsignal Ġ*/ Ċĉĉ ĉ buf _ ptr Ġ= Ġ 0 Ċĉĉ ĉ counter Ġ= Ġn Samples In Ċĉĉ ĉ while Ġ( counter Ġ> Ġ 2 ) Ġ{ Ċĉĉĉ ĉ /* ĠInner Ġproduct Ġ*/ Ċĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ SM UL WB ( buf [ buf _ ptr ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 2 ]. toInt ()) Ċĉĉĉ ĉ res _ Q 6 Ġ= Ċĉĉĉĉĉ ĉ In lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 3 ]. toInt ()) Ċĉĉĉ ĉ res _ Q 6 Ġ= Ċĉĉĉĉĉ ĉ In lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 2 ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 5 ]. toInt ()) Ċĉĉĉ ĉ res _ Q 6 Ġ= Ċĉĉĉĉĉ ĉ In lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 3 ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 4 ]. toInt ()) ĊĊĉĉĉ ĉ /* ĠScale Ġdown , Ġs atur ate Ġand Ġstore Ġin Ġoutput Ġarray Ġ*/ Ċĉĉĉ ĉ output [ output _ ptr ++] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( res _ Q 6 , Ġ 6 )). to Short () ĊĊĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ SM UL WB ( buf [ buf _ ptr Ġ+ Ġ 1 ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 4 ]. toInt ()) Ċĉĉĉ ĉ res _ Q 6 Ġ= Ċĉĉĉĉĉ ĉ In lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 2 ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 5 ]. toInt ()) Ċĉĉĉ ĉ res _ Q 6 Ġ= Ċĉĉĉĉĉ ĉ In lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 3 ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 3 ]. toInt ()) Ċĉĉĉ ĉ res _ Q 6 Ġ= Ċĉĉĉĉĉ ĉ In lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 4 ], ĠSil k Tables . sil k _ Res ampler _ 2 _ 3 _ CO E FS _ L Q [ 2 ]. toInt ()) ĊĊĉĉĉ ĉ /* ĠScale Ġdown , Ġs atur ate Ġand Ġstore Ġin Ġoutput Ġarray Ġ*/ Ċĉĉĉ ĉ output [ output _ ptr ++] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( res _ Q 6 , Ġ 6 )). to Short () ĊĊĉĉĉ ĉ buf _ ptr Ġ+= Ġ 3 Ċĉĉĉ ĉ counter Ġ-= Ġ 3 Ċĉĉ ĉ } ĊĊĉĉ ĉ input _ ptr Ġ+= Ġn Samples In Ċĉĉ ĉ in Len Ġ-= Ġn Samples In ĊĊĉĉ ĉ if Ġ( in Len Ġ> Ġ 0 ) Ġ{ Ċĉĉĉ ĉ /* ĠMore Ġiterations Ġto Ġdo ; Ġcopy Ġlast Ġpart Ġof Ġfiltered Ġsignal Ġto Ġbeginning Ġof Ġbuffer Ġ*/ Ċĉĉĉ ĉ arraycopy ( buf , Ġn Samples In , Ġbuf , Ġ 0 , ĠORDER _ FI R ) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ break Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /* ĠCopy Ġlast Ġpart Ġof Ġfiltered Ġsignal Ġto Ġthe Ġstate Ġfor Ġthe Ġnext Ġcall Ġ*/ Ċĉ ĉ arraycopy ( buf , Ġn Samples In , ĠS , Ġ 0 , ĠORDER _ FI R ) Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠSecond Ġorder ĠAR Ġfilter Ġwith Ġsingle Ġdelay Ġelements Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠState Ġvector Ġ[ Ġ 2 Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" out _ Q 8 "> O ĠĠĠ ĠOutput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" input "> I ĠĠĠ ĠInput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" A _ Q 1 4 "> I ĠĠĠ ĠAR Ġcoefficients , ĠQ 1 4 </ param > Ċ ĉ /// Ġ< param Ġname =" len "> I ĠĠĠ ĠSignal Ġlength </ param > Ċ ĉ fun Ġsil k _ res ampler _ private _ AR 2 ( Ċĉ ĉ S : ĠInt Array , Ċĉ ĉ S _ ptr : ĠInt , Ċĉ ĉ out _ Q 8 : ĠInt Array , Ċĉ ĉ out _ Q 8 _ ptr : ĠInt , Ċĉ ĉ input : ĠShort Array , Ċĉ ĉ input _ ptr : ĠInt , Ċĉ ĉ A _ Q 1 4 : ĠShort Array ?, Ċĉ ĉ len : ĠInt Ċ ĉ ) Ġ{ Ċĉ ĉ var Ġk : ĠInt Ċĉ ĉ var Ġout 3 2 : ĠInt ĊĊĉ ĉ k Ġ= Ġ 0 Ċĉ ĉ while Ġ( k Ġ< Ġlen ) Ġ{ Ċĉĉ ĉ out 3 2 Ġ= ĠIn lines . sil k _ ADD _ L SHIFT 3 2 ( S [ S _ ptr ], Ġinput [ input _ ptr Ġ+ Ġk ]. toInt (), Ġ 8 ) Ċĉĉ ĉ out _ Q 8 [ out _ Q 8 _ ptr Ġ+ Ġk ] Ġ= Ġout 3 2 Ċĉĉ ĉ out 3 2 Ġ= ĠIn lines . sil k _ L SHIFT ( out 3 2 , Ġ 2 ) Ċĉĉ ĉ S [ S _ ptr ] Ġ= ĠIn lines . sil k _ S ML AW B ( S [ S _ ptr Ġ+ Ġ 1 ], Ġout 3 2 , ĠA _ Q 1 4 ! ![ 0 ]. toInt ()) Ċĉĉ ĉ S [ S _ ptr Ġ+ Ġ 1 ] Ġ= ĠIn lines . sil k _ SM UL WB ( out 3 2 , ĠA _ Q 1 4 [ 1 ]. toInt ()) Ċĉĉ ĉ k ++ Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġsil k _ res ampler _ private _ down _ FI R _ INTER POL ( Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ output _ ptr : ĠInt , Ċĉ ĉ buf : ĠInt Array , Ċĉ ĉ FI R _ Coef s : ĠShort Array ?, Ċĉ ĉ FI R _ Coef s _ ptr : ĠInt , Ċĉ ĉ FI R _ Order : ĠInt , Ċĉ ĉ FI R _ Fr acs : ĠInt , Ċĉ ĉ max _ index _ Q 1 6 : ĠInt , Ċĉ ĉ index _ increment _ Q 1 6 : ĠInt Ċ ĉ ): ĠInt Ġ{ Ċĉ ĉ var Ġoutput _ ptr Ġ= Ġoutput _ ptr Ċĉ ĉ var Ġindex _ Q 1 6 : ĠInt Ċĉ ĉ var Ġres _ Q 6 : ĠInt Ċĉ ĉ var Ġbuf _ ptr : ĠInt Ċĉ ĉ var Ġinterpol _ ind : ĠInt Ċĉ ĉ var Ġinterpol _ ptr : ĠInt ĊĊĉ ĉ when Ġ( FI R _ Order ) Ġ{ Ċĉĉ ĉ Sil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 0 Ġ-> Ġ{ Ċĉĉĉ ĉ index _ Q 1 6 Ġ= Ġ 0 Ċĉĉĉ ĉ while Ġ( index _ Q 1 6 Ġ< Ġmax _ index _ Q 1 6 ) Ġ{ Ċĉĉĉĉ ĉ /* ĠInteger Ġpart Ġgives Ġpointer Ġto Ġbuffered Ġinput Ġ*/ Ċĉĉĉĉ ĉ buf _ ptr Ġ= ĠIn lines . sil k _ R SHIFT ( index _ Q 1 6 , Ġ 1 6 ) ĊĊĉĉĉĉ ĉ /* ĠFraction al Ġpart Ġgives Ġinterpolation Ġcoefficients Ġ*/ Ċĉĉĉĉ ĉ interpol _ ind Ġ= ĠIn lines . sil k _ SM UL WB ( index _ Q 1 6 Ġand Ġ 0 xFFFF , ĠFIR _ Fr acs ) ĊĊĉĉĉĉ ĉ /* ĠInner Ġproduct Ġ*/ Ċĉĉĉĉ ĉ interpol _ ptr Ġ= ĠFIR _ Coef s _ ptr Ġ+ ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 0 Ġ/ Ġ 2 Ġ* Ġinterpol _ ind Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ SM UL WB ( buf [ buf _ ptr Ġ+ Ġ 0 ], ĠFIR _ Coef s ! ![ interpol _ ptr Ġ+ Ġ 0 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 1 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 2 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 2 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 3 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 3 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 4 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 4 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 5 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 5 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 6 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 6 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 7 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 7 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 8 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 8 ]. toInt ()) Ċĉĉĉĉ ĉ interpol _ ptr Ġ= ĠFIR _ Coef s _ ptr Ġ+ ĠSil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 0 Ġ/ Ġ 2 Ġ* Ċĉĉĉĉĉĉ ĉ ( FI R _ Fr acs Ġ- Ġ 1 Ġ- Ġinterpol _ ind ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 7 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 0 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 6 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 1 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 5 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 2 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 4 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 3 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 3 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 4 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 2 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 5 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 1 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 6 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 1 0 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 7 ]. toInt ()) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( res _ Q 6 , Ġbuf [ buf _ ptr Ġ+ Ġ 9 ], ĠFIR _ Coef s [ interpol _ ptr Ġ+ Ġ 8 ]. toInt ()) ĊĊĉĉĉĉ ĉ /* ĠScale Ġdown , Ġs atur ate Ġand Ġstore Ġin Ġoutput Ġarray Ġ*/ Ċĉĉĉĉ ĉ output [ output _ ptr ++] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( res _ Q 6 , Ġ 6 )). to Short () Ċĉĉĉĉ ĉ index _ Q 1 6 Ġ+= Ġindex _ increment _ Q 1 6 Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ Sil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 1 Ġ-> Ġ{ Ċĉĉĉ ĉ index _ Q 1 6 Ġ= Ġ 0 Ċĉĉĉ ĉ while Ġ( index _ Q 1 6 Ġ< Ġmax _ index _ Q 1 6 ) Ġ{ Ċĉĉĉĉ ĉ /* ĠInteger Ġpart Ġgives Ġpointer Ġto Ġbuffered Ġinput Ġ*/ Ċĉĉĉĉ ĉ buf _ ptr Ġ= ĠIn lines . sil k _ R SHIFT ( index _ Q 1 6 , Ġ 1 6 ) ĊĊĉĉĉĉ ĉ /* ĠInner Ġproduct Ġ*/ Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ SM UL WB ( Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 0 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 3 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s ! ![ FI R _ Coef s _ ptr Ġ+ Ġ 0 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 2 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 2 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 1 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 2 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 3 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 0 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 3 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 4 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 9 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 4 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 5 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 8 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 5 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 6 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 7 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 6 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 7 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 6 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 7 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 8 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 5 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 8 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 9 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 4 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 9 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 0 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 3 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 0 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 1 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 2 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 1 ]. toInt () Ċĉĉĉĉ ĉ ) ĊĊĉĉĉĉ ĉ /* ĠScale Ġdown , Ġs atur ate Ġand Ġstore Ġin Ġoutput Ġarray Ġ*/ Ċĉĉĉĉ ĉ output [ output _ ptr ++] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( res _ Q 6 , Ġ 6 )). to Short () Ċĉĉĉĉ ĉ index _ Q 1 6 Ġ+= Ġindex _ increment _ Q 1 6 Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ Sil k Constants . RE SAMPLER _ DOWN _ ORDER _ FI R 2 Ġ-> Ġ{ Ċĉĉĉ ĉ index _ Q 1 6 Ġ= Ġ 0 Ċĉĉĉ ĉ while Ġ( index _ Q 1 6 Ġ< Ġmax _ index _ Q 1 6 ) Ġ{ Ċĉĉĉĉ ĉ /* ĠInteger Ġpart Ġgives Ġpointer Ġto Ġbuffered Ġinput Ġ*/ Ċĉĉĉĉ ĉ buf _ ptr Ġ= ĠIn lines . sil k _ R SHIFT ( index _ Q 1 6 , Ġ 1 6 ) ĊĊĉĉĉĉ ĉ /* ĠInner Ġproduct Ġ*/ Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ SM UL WB ( Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 0 ], Ġbuf [ buf _ ptr Ġ+ Ġ 3 5 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s ! ![ FI R _ Coef s _ ptr Ġ+ Ġ 0 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 ], Ġbuf [ buf _ ptr Ġ+ Ġ 3 4 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 2 ], Ġbuf [ buf _ ptr Ġ+ Ġ 3 3 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 2 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 3 ], Ġbuf [ buf _ ptr Ġ+ Ġ 3 2 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 3 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 4 ], Ġbuf [ buf _ ptr Ġ+ Ġ 3 1 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 4 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 5 ], Ġbuf [ buf _ ptr Ġ+ Ġ 3 0 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 5 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 6 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 9 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 6 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 7 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 8 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 7 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 8 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 7 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 8 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 9 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 6 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 9 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 0 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 5 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 0 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 1 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 4 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 1 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 2 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 3 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 2 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 3 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 2 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 3 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 4 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 1 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 4 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 5 ], Ġbuf [ buf _ ptr Ġ+ Ġ 2 0 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 5 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 6 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 9 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 6 ]. toInt () Ċĉĉĉĉ ĉ ) Ċĉĉĉĉ ĉ res _ Q 6 Ġ= ĠIn lines . sil k _ S ML AW B ( Ċĉĉĉĉĉ ĉ res _ Q 6 , Ċĉĉĉĉĉ ĉ In lines . sil k _ ADD 3 2 ( buf [ buf _ ptr Ġ+ Ġ 1 7 ], Ġbuf [ buf _ ptr Ġ+ Ġ 1 8 ]), Ċĉĉĉĉĉ ĉ FI R _ Coef s [ FI R _ Coef s _ ptr Ġ+ Ġ 1 7 ]. toInt () Ċĉĉĉĉ ĉ ) ĊĊĉĉĉĉ ĉ /* ĠScale Ġdown , Ġs atur ate Ġand Ġstore Ġin Ġoutput Ġarray Ġ*/ Ċĉĉĉĉ ĉ output [ output _ ptr ++] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( res _ Q 6 , Ġ 6 )). to Short () Ċĉĉĉĉ ĉ index _ Q 1 6 Ġ+= Ġindex _ increment _ Q 1 6 Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ else Ġ-> ĠIn lines . Op us Assert ( false ) Ċĉ ĉ } ĊĊĉ ĉ return Ġoutput _ ptr Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠRes ample Ġwith Ġa Ġ 2 nd Ġorder ĠAR Ġfilter Ġfollowed Ġby ĠFIR Ġinterpolation Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠRes ampler Ġstate </ param > Ċ ĉ /// Ġ< param Ġname =" output "> O ĠĠĠ ĠOutput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" input "> I ĠĠĠ ĠInput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" in Len "> I ĠĠĠ ĠNumber Ġof Ġinput Ġsamples </ param > Ċ ĉ fun Ġsil k _ res ampler _ private _ down _ FI R ( Ċĉ ĉ S : ĠSil k Res ampler State , Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ output _ ptr : ĠInt , Ċĉ ĉ input : ĠShort Array , Ċĉ ĉ input _ ptr : ĠInt , Ċĉ ĉ in Len : ĠInt Ċ ĉ ) Ġ{ Ċĉ ĉ var Ġoutput _ ptr Ġ= Ġoutput _ ptr Ċĉ ĉ var Ġinput _ ptr Ġ= Ġinput _ ptr Ċĉ ĉ var Ġin Len Ġ= Ġin Len Ċĉ ĉ var Ġn Samples In : ĠInt Ċĉ ĉ var Ġmax _ index _ Q 1 6 : ĠInt Ċĉ ĉ val Ġindex _ increment _ Q 1 6 : ĠInt Ċĉ ĉ val Ġbuf Ġ= ĠInt Array ( S . batch Size Ġ+ ĠS . FI R _ Order ) ĊĊĉ ĉ /* ĠCopy Ġbuffered Ġsamples Ġto Ġstart Ġof Ġbuffer Ġ*/ Ċĉ ĉ arraycopy ( S . s FI R _ i 3 2 , Ġ 0 , Ġbuf , Ġ 0 , ĠS . FI R _ Order ) ĊĊĉ ĉ /* ĠIterate Ġover Ġblocks Ġof Ġframe Size In Ġinput Ġsamples Ġ*/ Ċĉ ĉ index _ increment _ Q 1 6 Ġ= ĠS . inv Ratio _ Q 1 6 Ċĉ ĉ while Ġ( true ) Ġ{ Ċĉĉ ĉ n Samples In Ġ= ĠIn lines . sil k _ min ( in Len , ĠS . batch Size ) ĊĊĉĉ ĉ /* ĠSecond - order ĠAR Ġfilter Ġ( output Ġin ĠQ 8 ) Ġ*/ Ċĉĉ ĉ sil k _ res ampler _ private _ AR 2 ( S . s I IR , Ġ 0 , Ġbuf , ĠS . FI R _ Order , Ġinput , Ġinput _ ptr , ĠS . Coef s , Ġn Samples In ) ĊĊĉĉ ĉ max _ index _ Q 1 6 Ġ= ĠIn lines . sil k _ L SHIFT 3 2 ( n Samples In , Ġ 1 6 ) ĊĊĉĉ ĉ /* ĠInterpol ate Ġfiltered Ġsignal Ġ*/ Ċĉĉ ĉ output _ ptr Ġ= Ġsil k _ res ampler _ private _ down _ FI R _ INTER POL ( Ċĉĉĉ ĉ output , Ġoutput _ ptr , Ġbuf , ĠS . Coef s , Ġ 2 , ĠS . FI R _ Order , Ċĉĉĉ ĉ S . FI R _ Fr acs , Ġmax _ index _ Q 1 6 , Ġindex _ increment _ Q 1 6 Ċĉĉ ĉ ) ĊĊĉĉ ĉ input _ ptr Ġ+= Ġn Samples In Ċĉĉ ĉ in Len Ġ-= Ġn Samples In ĊĊĉĉ ĉ if Ġ( in Len Ġ> Ġ 1 ) Ġ{ Ċĉĉĉ ĉ /* ĠMore Ġiterations Ġto Ġdo ; Ġcopy Ġlast Ġpart Ġof Ġfiltered Ġsignal Ġto Ġbeginning Ġof Ġbuffer Ġ*/ Ċĉĉĉ ĉ arraycopy ( buf , Ġn Samples In , Ġbuf , Ġ 0 , ĠS . FI R _ Order ) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ break Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /* ĠCopy Ġlast Ġpart Ġof Ġfiltered Ġsignal Ġto Ġthe Ġstate Ġfor Ġthe Ġnext Ġcall Ġ*/ Ċĉ ĉ arraycopy ( buf , Ġn Samples In , ĠS . s FI R _ i 3 2 , Ġ 0 , ĠS . FI R _ Order ) Ċ ĉ } ĊĊ ĉ fun Ġsil k _ res ampler _ private _ I IR _ FI R _ INTER POL ( Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ output _ ptr : ĠInt , Ċĉ ĉ buf : ĠShort Array , Ċĉ ĉ max _ index _ Q 1 6 : ĠInt , Ċĉ ĉ index _ increment _ Q 1 6 : ĠInt Ċ ĉ ): ĠInt Ġ{ Ċĉ ĉ var Ġoutput _ ptr Ġ= Ġoutput _ ptr Ċĉ ĉ var Ġindex _ Q 1 6 : ĠInt Ċĉ ĉ var Ġres _ Q 1 5 : ĠInt Ċĉ ĉ var Ġbuf _ ptr : ĠInt Ċĉ ĉ var Ġtable _ index : ĠInt ĊĊĉ ĉ /* ĠInterpol ate Ġup sampled Ġsignal Ġand Ġstore Ġin Ġoutput Ġarray Ġ*/ Ċĉ ĉ index _ Q 1 6 Ġ= Ġ 0 Ċĉ ĉ while Ġ( index _ Q 1 6 Ġ< Ġmax _ index _ Q 1 6 ) Ġ{ Ċĉĉ ĉ table _ index Ġ= ĠIn lines . sil k _ SM UL WB ( index _ Q 1 6 Ġand Ġ 0 xFFFF , Ġ 1 2 ) Ċĉĉ ĉ buf _ ptr Ġ= Ġindex _ Q 1 6 Ġshr Ġ 1 6 ĊĊĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ SM UL BB ( Ċĉĉĉ ĉ buf [ buf _ ptr ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ table _ index ][ 0 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ S ML ABB ( Ċĉĉĉ ĉ res _ Q 1 5 , Ċĉĉĉ ĉ buf [ buf _ ptr Ġ+ Ġ 1 ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ table _ index ][ 1 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ S ML ABB ( Ċĉĉĉ ĉ res _ Q 1 5 , Ċĉĉĉ ĉ buf [ buf _ ptr Ġ+ Ġ 2 ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ table _ index ][ 2 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ S ML ABB ( Ċĉĉĉ ĉ res _ Q 1 5 , Ċĉĉĉ ĉ buf [ buf _ ptr Ġ+ Ġ 3 ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ table _ index ][ 3 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ S ML ABB ( Ċĉĉĉ ĉ res _ Q 1 5 , Ċĉĉĉ ĉ buf [ buf _ ptr Ġ+ Ġ 4 ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ 1 1 Ġ- Ġtable _ index ][ 3 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ S ML ABB ( Ċĉĉĉ ĉ res _ Q 1 5 , Ċĉĉĉ ĉ buf [ buf _ ptr Ġ+ Ġ 5 ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ 1 1 Ġ- Ġtable _ index ][ 2 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ S ML ABB ( Ċĉĉĉ ĉ res _ Q 1 5 , Ċĉĉĉ ĉ buf [ buf _ ptr Ġ+ Ġ 6 ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ 1 1 Ġ- Ġtable _ index ][ 1 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ res _ Q 1 5 Ġ= ĠIn lines . sil k _ S ML ABB ( Ċĉĉĉ ĉ res _ Q 1 5 , Ċĉĉĉ ĉ buf [ buf _ ptr Ġ+ Ġ 7 ]. toInt (), Ċĉĉĉ ĉ Sil k Tables . sil k _ res ampler _ frac _ FI R _ 1 2 [ 1 1 Ġ- Ġtable _ index ][ 0 ]. toInt () Ċĉĉ ĉ ) Ċĉĉ ĉ output [ output _ ptr ++] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( res _ Q 1 5 , Ġ 1 5 )). to Short () Ċĉĉ ĉ index _ Q 1 6 Ġ+= Ġindex _ increment _ Q 1 6 Ċĉ ĉ } Ċĉ ĉ return Ġoutput _ ptr Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠU ps ample Ġusing Ġa Ġcombination Ġof Ġall pass - based Ġ 2 x Ġup sampling Ġand ĠFIR Ġinterpolation Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠRes ampler Ġstate </ param > Ċ ĉ /// Ġ< param Ġname =" output "> O ĠĠĠ ĠOutput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" input "> I ĠĠĠ ĠInput Ġsignal </ param > Ċ ĉ /// Ġ< param Ġname =" in Len "> I ĠĠĠ ĠNumber Ġof Ġinput Ġsamples </ param > Ċ ĉ fun Ġsil k _ res ampler _ private _ I IR _ FI R ( Ċĉ ĉ S : ĠSil k Res ampler State , Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ output _ ptr : ĠInt , Ċĉ ĉ input : ĠShort Array , Ċĉ ĉ input _ ptr : ĠInt , Ċĉ ĉ in Len : ĠInt Ċ ĉ ) Ġ{ Ċĉ ĉ var Ġoutput _ ptr Ġ= Ġoutput _ ptr Ċĉ ĉ var Ġinput _ ptr Ġ= Ġinput _ ptr Ċĉ ĉ var Ġin Len Ġ= Ġin Len Ċĉ ĉ var Ġn Samples In : ĠInt Ċĉ ĉ var Ġmax _ index _ Q 1 6 : ĠInt Ċĉ ĉ val Ġindex _ increment _ Q 1 6 : ĠInt ĊĊĉ ĉ val Ġbuf Ġ= ĠShort Array ( 2 Ġ* ĠS . batch Size Ġ+ ĠSil k Constants . RE SAMPLER _ ORDER _ FI R _ 1 2 ) ĊĊĉ ĉ /* ĠCopy Ġbuffered Ġsamples Ġto Ġstart Ġof Ġbuffer Ġ*/ Ċĉ ĉ arraycopy ( S . s FI R _ i 1 6 , Ġ 0 , Ġbuf , Ġ 0 , ĠSil k Constants . RE SAMPLER _ ORDER _ FI R _ 1 2 ) ĊĊĉ ĉ /* ĠIterate Ġover Ġblocks Ġof Ġframe Size In Ġinput Ġsamples Ġ*/ Ċĉ ĉ index _ increment _ Q 1 6 Ġ= ĠS . inv Ratio _ Q 1 6 Ċĉ ĉ while Ġ( true ) Ġ{ Ċĉĉ ĉ n Samples In Ġ= ĠIn lines . sil k _ min ( in Len , ĠS . batch Size ) ĊĊĉĉ ĉ /* ĠU ps ample Ġ 2 x Ġ*/ Ċĉĉ ĉ sil k _ res ampler _ private _ up 2 _ HQ ( Ċĉĉĉ ĉ S . s I IR , Ċĉĉĉ ĉ buf , Ċĉĉĉ ĉ Sil k Constants . RE SAMPLER _ ORDER _ FI R _ 1 2 , Ċĉĉĉ ĉ input , Ċĉĉĉ ĉ input _ ptr , Ċĉĉĉ ĉ n Samples In Ċĉĉ ĉ ) ĊĊĉĉ ĉ max _ index _ Q 1 6 Ġ= ĠIn lines . sil k _ L SHIFT 3 2 ( n Samples In , Ġ 1 6 Ġ+ Ġ 1 ) Ċĉĉ ĉ /* Ġ+ Ġ 1 Ġbecause Ġ 2 x Ġup sampling Ġ*/ Ċĉĉ ĉ output _ ptr Ġ= Ċĉĉĉĉ ĉ sil k _ res ampler _ private _ I IR _ FI R _ INTER POL ( output , Ġoutput _ ptr , Ġbuf , Ġmax _ index _ Q 1 6 , Ġindex _ increment _ Q 1 6 ) Ċĉĉ ĉ input _ ptr Ġ+= Ġn Samples In Ċĉĉ ĉ in Len Ġ-= Ġn Samples In ĊĊĉĉ ĉ if Ġ( in Len Ġ> Ġ 0 ) Ġ{ Ċĉĉĉ ĉ /* ĠMore Ġiterations Ġto Ġdo ; Ġcopy Ġlast Ġpart Ġof Ġfiltered Ġsignal Ġto Ġbeginning Ġof Ġbuffer Ġ*/ Ċĉĉĉ ĉ arraycopy ( buf , Ġn Samples In Ġshl Ġ 1 , Ġbuf , Ġ 0 , ĠSil k Constants . RE SAMPLER _ ORDER _ FI R _ 1 2 ) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ break Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ /* ĠCopy Ġlast Ġpart Ġof Ġfiltered Ġsignal Ġto Ġthe Ġstate Ġfor Ġthe Ġnext Ġcall Ġ*/ Ċĉ ĉ arraycopy ( buf , Ġn Samples In Ġshl Ġ 1 , ĠS . s FI R _ i 1 6 , Ġ 0 , ĠSil k Constants . RE SAMPLER _ ORDER _ FI R _ 1 2 ) Ċ ĉ } ĊĊ ĉ /// Ġ< summary > Ċ ĉ /// ĠU ps ample Ġby Ġa Ġfactor Ġ 2 , Ġhigh Ġquality Ċ ĉ /// ĠUses Ġ 2 nd Ġorder Ġall pass Ġfilters Ġfor Ġthe Ġ 2 x Ġup sampling , Ġfollowed Ġby Ġa Ċ ĉ /// Ġnot ch Ġfilter Ġjust Ġabove ĠN y qu ist . Ċ ĉ /// Ġ</ summary > Ċ ĉ /// Ġ< param Ġname =" S "> I / O Ġ ĠRes ampler Ġstate Ġ[ Ġ 6 Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" output "> O ĠĠĠ ĠOutput Ġsignal Ġ[ Ġ 2 Ġ* Ġlen Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" input "> I ĠĠĠ ĠInput Ġsignal Ġ[ Ġlen Ġ]</ param > Ċ ĉ /// Ġ< param Ġname =" len "> I ĠĠĠ ĠNumber Ġof Ġinput Ġsamples </ param > Ċ ĉ fun Ġsil k _ res ampler _ private _ up 2 _ HQ ( Ċĉ ĉ S : ĠInt Array , Ċĉ ĉ output : ĠShort Array , Ċĉ ĉ output _ ptr : ĠInt , Ċĉ ĉ input : ĠShort Array , Ċĉ ĉ input _ ptr : ĠInt , Ċĉ ĉ len : ĠInt Ċ ĉ ) Ġ{ Ċĉ ĉ var Ġk : ĠInt Ċĉ ĉ var Ġin 3 2 : ĠInt Ċĉ ĉ var Ġout 3 2 _ 1 : ĠInt Ċĉ ĉ var Ġout 3 2 _ 2 : ĠInt Ċĉ ĉ var ĠY : ĠInt Ċĉ ĉ var ĠX : ĠInt ĊĊĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ up 2 _ hq _ 0 [ 0 ] Ġ> Ġ 0 ) Ċĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ up 2 _ hq _ 0 [ 1 ] Ġ> Ġ 0 ) Ċĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ up 2 _ hq _ 0 [ 2 ] Ġ< Ġ 0 ) Ċĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ up 2 _ hq _ 1 [ 0 ] Ġ> Ġ 0 ) Ċĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ up 2 _ hq _ 1 [ 1 ] Ġ> Ġ 0 ) Ċĉ ĉ In lines . Op us Assert ( Sil k Tables . sil k _ res ampler _ up 2 _ hq _ 1 [ 2 ] Ġ< Ġ 0 ) ĊĊĉ ĉ /* ĠInternal Ġvariables Ġand Ġstate Ġare Ġin ĠQ 1 0 Ġformat Ġ*/ Ċĉ ĉ k Ġ= Ġ 0 Ċĉ ĉ while Ġ( k Ġ< Ġlen ) Ġ{ Ċĉĉ ĉ /* ĠConvert Ġto ĠQ 1 0 Ġ*/ Ċĉĉ ĉ in 3 2 Ġ= ĠIn lines . sil k _ L SHIFT ( input [ input _ ptr Ġ+ Ġk ]. toInt (), Ġ 1 0 ) ĊĊĉĉ ĉ /* ĠFirst Ġall - pass Ġsection Ġfor Ġeven Ġoutput Ġsample Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( in 3 2 , ĠS [ 0 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ SM UL WB ( Y , ĠSil k Tables . sil k _ res ampler _ up 2 _ hq _ 0 [ 0 ]. toInt ()) Ċĉĉ ĉ out 3 2 _ 1 Ġ= ĠIn lines . sil k _ ADD 3 2 ( S [ 0 ], ĠX ) Ċĉĉ ĉ S [ 0 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( in 3 2 , ĠX ) ĊĊĉĉ ĉ /* ĠSecond Ġall - pass Ġsection Ġfor Ġeven Ġoutput Ġsample Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( out 3 2 _ 1 , ĠS [ 1 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ SM UL WB ( Y , ĠSil k Tables . sil k _ res ampler _ up 2 _ hq _ 0 [ 1 ]. toInt ()) Ċĉĉ ĉ out 3 2 _ 2 Ġ= ĠIn lines . sil k _ ADD 3 2 ( S [ 1 ], ĠX ) Ċĉĉ ĉ S [ 1 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( out 3 2 _ 1 , ĠX ) ĊĊĉĉ ĉ /* ĠThird Ġall - pass Ġsection Ġfor Ġeven Ġoutput Ġsample Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( out 3 2 _ 2 , ĠS [ 2 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ S ML AW B ( Y , ĠY , ĠSil k Tables . sil k _ res ampler _ up 2 _ hq _ 0 [ 2 ]. toInt ()) Ċĉĉ ĉ out 3 2 _ 1 Ġ= ĠIn lines . sil k _ ADD 3 2 ( S [ 2 ], ĠX ) Ċĉĉ ĉ S [ 2 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( out 3 2 _ 2 , ĠX ) ĊĊĉĉ ĉ /* ĠApply Ġgain Ġin ĠQ 1 5 , Ġconvert Ġback Ġto Ġint 1 6 Ġand Ġstore Ġto Ġoutput Ġ*/ Ċĉĉ ĉ output [ output _ ptr Ġ+ Ġ 2 Ġ* Ġk ] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( out 3 2 _ 1 , Ġ 1 0 )). to Short () ĊĊĉĉ ĉ /* ĠFirst Ġall - pass Ġsection Ġfor Ġodd Ġoutput Ġsample Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( in 3 2 , ĠS [ 3 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ SM UL WB ( Y , ĠSil k Tables . sil k _ res ampler _ up 2 _ hq _ 1 [ 0 ]. toInt ()) Ċĉĉ ĉ out 3 2 _ 1 Ġ= ĠIn lines . sil k _ ADD 3 2 ( S [ 3 ], ĠX ) Ċĉĉ ĉ S [ 3 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( in 3 2 , ĠX ) ĊĊĉĉ ĉ /* ĠSecond Ġall - pass Ġsection Ġfor Ġodd Ġoutput Ġsample Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( out 3 2 _ 1 , ĠS [ 4 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ SM UL WB ( Y , ĠSil k Tables . sil k _ res ampler _ up 2 _ hq _ 1 [ 1 ]. toInt ()) Ċĉĉ ĉ out 3 2 _ 2 Ġ= ĠIn lines . sil k _ ADD 3 2 ( S [ 4 ], ĠX ) Ċĉĉ ĉ S [ 4 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( out 3 2 _ 1 , ĠX ) ĊĊĉĉ ĉ /* ĠThird Ġall - pass Ġsection Ġfor Ġodd Ġoutput Ġsample Ġ*/ Ċĉĉ ĉ Y Ġ= ĠIn lines . sil k _ SUB 3 2 ( out 3 2 _ 2 , ĠS [ 5 ]) Ċĉĉ ĉ X Ġ= ĠIn lines . sil k _ S ML AW B ( Y , ĠY , ĠSil k Tables . sil k _ res ampler _ up 2 _ hq _ 1 [ 2 ]. toInt ()) Ċĉĉ ĉ out 3 2 _ 1 Ġ= ĠIn lines . sil k _ ADD 3 2 ( S [ 5 ], ĠX ) Ċĉĉ ĉ S [ 5 ] Ġ= ĠIn lines . sil k _ ADD 3 2 ( out 3 2 _ 2 , ĠX ) ĊĊĉĉ ĉ /* ĠApply Ġgain Ġin ĠQ 1 5 , Ġconvert Ġback Ġto Ġint 1 6 Ġand Ġstore Ġto Ġoutput Ġ*/ Ċĉĉ ĉ output [ output _ ptr Ġ+ Ġ 2 Ġ* Ġk Ġ+ Ġ 1 ] Ġ= ĠIn lines . sil k _ SAT 1 6 ( In lines . sil k _ R SHIFT _ ROUND ( out 3 2 _ 1 , Ġ 1 0 )). to Short () Ċĉĉ ĉ k ++ Ċĉ ĉ } Ċ ĉ } Ċ } Ċ