From d4fb83773bf9d86797116d0de092812e11c53b4c Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 14 Jan 2004 08:24:08 +0000 Subject: [PATCH] add stride --- stepmania/Program/resample.dll | Bin 5120 -> 5120 bytes .../src/libresample/include/libresample.h | 10 +++ stepmania/src/libresample/resample.def | 1 + stepmania/src/libresample/resample.lib | Bin 2826 -> 3072 bytes stepmania/src/libresample/src/resample.c | 63 +++++++++++++----- 5 files changed, 58 insertions(+), 16 deletions(-) diff --git a/stepmania/Program/resample.dll b/stepmania/Program/resample.dll index 9f6e3eac584e9a73193729cd7591aa83c3ab8182..3586300a142ac4c02f23b7737ff3b0af07b21a7d 100644 GIT binary patch delta 1933 zcmXYye^k=<8pl8UMnEA&{H>IjBnV8=Q0M%bXk?}+4(g}~AsUKz|#SI}r%vcH#p$L6vJ)#8ZYnJhbdR9+7FW&?}8xa5?24Fn^KIhOW z2&DV|&Q#3bQ0DrAD8_3KNI-|gK7s9%BSJpQ5yKj5@q*);jF)r`$?-l7187?7N_fbWyuqAs z)8N>UCY0)a5;px{z2LvO{%%^{60hZyjoyE%Rp2$zTM?1bEEnWbnBvO`DZ)z~tW16b z()?z6>S|TfU~PC?E&q!SIUBXy7SY1)F0fySwDp{WemxJ>+`Veb>$bJkB%kXKrXJv< zY^-Gi&Z|-)LXFSAbD*qxS!zwc2S>Fj2UMnio-MnSR#L>eTO7)$xL;BB!|qp3{zP zQVNP$6R5FmTh9=E-lHB8*RODB^4pIqzvYK;-%Xe!@3l1j;m_Z@qJnE=O}(}7_3M*I z!B0)S{J7kUit|CyC`ZcbB#$%0U={AX&fyhr2Jjwsq zT2};V)^a*xOXEV@U!f_ag(!(T$ClzYwb10RvIX5OT+#BT8t+--7r(iqlsm!dk&MJI z&hrcHeyl#Zbs0Gv_C32jgulg~aA44D4SisJfN4}PNAXtJ+)t8n0;!_F{P|ySfoCBh zR~_8kth`ljW=iff@IwP-Sv=m)?xJW0gU&pG{pJBTi^1Wey6&CrX{!njXb= zddUuPwj>7`Q2j~4YCKkHJ_ z(^Hg7{qGmb?fw>0p1NqTVlP_d4BJB;1_9>S!-hklq&004I@H3gK(XK1(n6q6Zqi;a zlrMj}rp22gG)Z>VslXjmP{xC=sTuKD`%>hURe2xD1i(q^E;PDBx0DD%Mc2uJzEG~? zKB@=ugb*=R5L^xWWx%n=xD5;4^;oX&3xoII3f?&uJh?wHmTH{OuEh^v%ruLB@V+r) zniO2|%(MNa%-iHOVR9R*s~+nRuAdDgX}jYe&|nN2+24h``l?=xkx3=aaTs5HaX9hO z=U>KA$?Uj*vCDM=6Y1ut*xfd*2!FX1Wm+dd%9ref*>y1GwOE47-^(kr-v8Xu%nM$Oi0b{f=1Wx0OE$#rVg@$@W{<$=4GnMh5=+C!f(Bj{qM(|Lq~ z5NeFdomzG7E`wTGl;NsU8up|pwOV84y)79!M8Rrus{DvpqC4Ij16C)UW`dg+!P~4 z$qWP)16pe{?s=ENQ^=Vb4O7371cO?{pJktjHZA|axZT1d&Udr^=7GOwdeenD1G73ROd>^rhpl`=^EPguUzH^oR&QDLxjI2iSiv< z@}tvf$wof6kUaMlzTNe0%D?phAY6+5KV2?=%*C9G8Gir{dI3Q30pKhZ0J=*RE)XBO zVlIMQY;=+8Lh9meCnP`tG{9IKo+`%wZmd-o>J2)T+Gs2^!Uj!|`fZ{D0Fq1E6I=^5 F{}+FF0+av% delta 1857 zcmXYyc~Fyg8pnTcE+7dZm~f*62oOksECz^x@`9M61PBR-T;U9tfv_O~6-sb}>_RGX zsI{f-NUJ-di^EY+3*9O#21FEPs~|ywS_@JRyDK1|@5bpqGoR<0XTJ0N^*mLKDn`RR z=IYRPaN}?GPzQz2)F-+cngMOp9k)P7U&ZjxOX3V@IR01yD+3c$a+F#91C z@we^+*fVHVQ>qVrlLT|k=AWMJy=mVx!is0G(kB_?`?{NO=_l<-u%AX)f_jMgM7z3+=F8o7-A_1;q2lF@#j<&rEpt4Zt=MIuQ%$dAK644tuqf)mF=^el*3AUylUM8qRdjC8*GaqEU(w1rvpUJh@&vDlQ(Nl59Aa(`betNEsL<%G zG?kp*wY8PnAdQ%Xeu#c2k39>T&i6fTFLW@i&^w^dIY)8my5!q8Wo1)dQwkrV6<$?1 z9cji;CcVyNPPN}`$$QyEE2Vo}Jya8@+Zu+on7TW=`W6-mm(m`8SbwNzPP&|&Hml!< zfSyy8;Udv`bwRY!`?B><_LnQm`(|Q@bfIaOppp~?ixPz4XbPQrP-bkXxA?%g*< zbSiy!7>}aO{MC!Y5?&*G_B(G{g-_=1W&5;Fym?M5X7)&*l4h)a~l@f56Jb- zAdAxe-BM(plT%iCa_I|2mT)j<{*pi(s{KnG)^28aKwdv&)5CxELt36HH7{~YJw;w)VV}wC$MWTmcd*M}q9F)Y_CJ^&+oj^8Kmd1?I-J8W&V+zV-JsvicVMqMowb z)nmVU7~!F!33d&@(l~C@c2r^9Iu4IoN{)=>93^AoQK8g@TC`@+jCDNHJ8pi0e9(FZ z*p7dv{yCqTq$Jm=3fJ3C(NiAuOx`wO=$tTf>lYdE)ort>EctahKG)1zJMaB$uckhP z<{fG5%ql>H*C#?NJgivv_Xf_+lugU(APHR5L>1TLHGmiUrE>v@(=$o5z*kk{^_7BqN1}FPbPb8G?~|0q<0OKk;9at zysAMk*M4m=fjASzcDRR5F#&`Qn2V1VfH5+@i(0ZcRo>DWQ)#TlT9)wr*<+00#`kLp>a~t6 z3nk@=(&X>>Hqw_m*CqQ@YH7=ZTfGV_26f?t0Gpswm#@Z)kcR=rs$aG*5N_m-?xB)C z+hd_L?SG6_sRzcnrh>TM1&!^oL%Zw}X*?k8!CfXNw` zE971jg20f}H$PJ@Daj}-mP!I>(MkwGMis@h47ohx7)@3xk>^NdWsdk^)Pcr*&cE!b z!wblx2!b>Rk!)3|TQh4M;~YB)wpgBDq{uNYTc0i}+$GC0O3P8mq_})pCU!RK z0l|T3K7;`upTn`PuMs^UIT9e;B71yicejx9`CGCX_Q>dc3@{S7Nv8;pJWwbj98Wp6 zR_tihe>6IX8{T^XUOGPjKf)%kykaEXQ?HIHZjl<$p%ELp;B+r}c7`H2BjO$ny>})s z`&-z{l^n|+^m9?Wv2R67*3Wzu=|>)LgR9EV&4$|PY07_L4By9KGzj@4G5BVU*$c>~ zSw_BsdC`F&-7zQ!sF}FqZ*d=&{y6oz7y!r+vH$0Wp}uE8ZveIhpn(Da*$RLTszKNg o*A0E#p8=p4@H7x;;G+TxpaG`&KRdGUARPdrp;s8#9D};@KUE&{)Bpeg diff --git a/stepmania/src/libresample/include/libresample.h b/stepmania/src/libresample/include/libresample.h index ca08e044f0..ac04f0b544 100644 --- a/stepmania/src/libresample/include/libresample.h +++ b/stepmania/src/libresample/include/libresample.h @@ -35,6 +35,16 @@ int resample_process(void *handle, float *outBuffer, int outBufferLen); +int resample_process_stride(void *handle, + double factor, + float *inBuffer, + int inBufferLen, + int lastFlag, + int *inBufferUsed, + float *outBuffer, + int outBufferLen, + int BufferStride); + void resample_close(void *handle); #ifdef __cplusplus diff --git a/stepmania/src/libresample/resample.def b/stepmania/src/libresample/resample.def index 9b08d99aa4..d600e0dcc2 100644 --- a/stepmania/src/libresample/resample.def +++ b/stepmania/src/libresample/resample.def @@ -3,4 +3,5 @@ EXPORTS resample_dup resample_get_filter_width resample_process + resample_process_stride resample_close diff --git a/stepmania/src/libresample/resample.lib b/stepmania/src/libresample/resample.lib index 52493b8620a6ad35309dae9625bb3064d07273b4..6a4ba6c5a70047d35121425a62f13710f900e5fc 100644 GIT binary patch delta 598 zcmZ{h&n`nj7{$;1e`hL6G}Tl@BUo5S+te)^kw`4W0*Rd{;VvXa(<>4dh-Ej__X3`v z36{hIT+(<08{#GWn{jWsU6|x#X1?EilQVN_$&=K1pH;{@c_*KvODj2F$YnFZSmOZV zfOZdy59PBrR&Z%(ym zH9~sn*o+&J+|q+JK-cD5gpLF~zBQ~ws!8f#i625kY_bg;w!j4|{(>hq8l3)QGrvWV z9j)^4ntlFvS^}RZV$#!q_!}KIb!$EJ&O2$2wY_R~d?L&~Bg6mt0_GLjHzN8B@sIz7 MhgPU#o8>aT0ftMD7XSbN delta 409 zcmZpW=n|VC&2DUJY+z(zJXwK5%*EKmOaTHCxEL51co`U&?HCx?{1_P6+ZY(Q^dOki zi-7@*w*hG&=9&e;9CsKPIPOfYWeb>iWzS@5W`W5!7$uR-_ck^~n9l*Uz>b-L!H$sfZg1`Wte2)ui%r_*}APFySs6-OC F1^{vKUtjImp; @@ -182,18 +197,19 @@ int resample_process(void *handle, float LpScl = hp->LpScl; UWORD Nwing = hp->Nwing; BOOL interpFilt = FALSE; /* TRUE means interpolate filter coeffs */ - int outSampleCount; + int inSampleCount, outSampleCount; UWORD Nout, Ncreep, Nreuse; int Nx; int i, len; #if DEBUG - fprintf(stderr, "resample_process: in=%d, out=%d lastFlag=%d\n", - inBufferLen, outBufferLen, lastFlag); + fprintf(stderr, "resample_process: in=%d, out=%d stride=%d lastFlag=%d\n", + inBufferLen, outBufferLen, lastFlag, 1); #endif /* Initialize inBufferUsed and outSampleCount to 0 */ *inBufferUsed = 0; + inSampleCount = 0; outSampleCount = 0; if (factor < hp->minFactor || factor > hp->maxFactor) { @@ -208,11 +224,16 @@ int resample_process(void *handle, /* Start by copying any samples still in the Y buffer to the output buffer */ - if (hp->Yp && (outBufferLen-outSampleCount)>0) { - len = MIN(outBufferLen-outSampleCount, hp->Yp); + if (hp->Yp && outBufferLen>0) { + len = MIN(outBufferLen/BufferStride, hp->Yp); // in samples for(i=0; iY[i]; - outSampleCount += len; + { + *outBuffer = hp->Y[i]; + outBuffer += BufferStride; + } + + outSampleCount += len*BufferStride; + outBufferLen -= len*BufferStride; for(i=0; iYp-len; i++) hp->Y[i] = hp->Y[i+len]; hp->Yp -= len; @@ -240,16 +261,20 @@ int resample_process(void *handle, /* Copy as many samples as we can from the input buffer into X */ len = hp->XSize - hp->Xread; - if (len >= (inBufferLen - (*inBufferUsed))) - len = (inBufferLen - (*inBufferUsed)); + if (len >= inBufferLen/BufferStride) + len = inBufferLen/BufferStride; for(i=0; iX[hp->Xread + i] = inBuffer[(*inBufferUsed) + i]; + { + hp->X[hp->Xread + i] = *inBuffer; + inBuffer += BufferStride; + } - *inBufferUsed += len; + inSampleCount += len*BufferStride; + inBufferLen -= len*BufferStride; hp->Xread += len; - if (lastFlag && (*inBufferUsed == inBufferLen)) { + if (lastFlag && (inSampleCount == inBufferLen)) { /* If these are the last samples, zero-pad the end of the input buffer and make sure we process all the way to the end */ @@ -316,11 +341,16 @@ int resample_process(void *handle, hp->Yp = Nout; /* Copy as many samples as possible to the output buffer */ - if (hp->Yp && (outBufferLen-outSampleCount)>0) { - len = MIN(outBufferLen-outSampleCount, hp->Yp); + if (hp->Yp && outBufferLen>0) { + len = MIN(outBufferLen/BufferStride, hp->Yp); for(i=0; iY[i]; - outSampleCount += len; + { + *outBuffer = hp->Y[i]; + outBuffer += BufferStride; + } + outSampleCount += len*BufferStride; + outBufferLen -= len*BufferStride; + for(i=0; iYp-len; i++) hp->Y[i] = hp->Y[i+len]; hp->Yp -= len; @@ -332,6 +362,7 @@ int resample_process(void *handle, break; } + *inBufferUsed = inSampleCount; return outSampleCount; }