Instead of silent data. This shows some difference in the FFmpeg decoded data, with the data delayed by half a buffer, explaining the additional data we decode.
The audiodata.bin resource has been generated with:
gst-launch-1.0 audiomixer name=mix ! \ audio/x-raw,format=F32LE,rate=22050,channels=2 ! \ filesink location=dlls/winegstreamer/tests/audiodata.bin \ audiotestsrc freq=400 volume=0.2 num-buffers=1 \ samplesperbuffer=22050 ! mix. \ audiotestsrc freq=600 volume=0.2 num-buffers=1 \ samplesperbuffer=22050 timestamp-offset=20000000 ! mix.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/mf/tests/audiodata.bin | Bin 0 -> 179928 bytes dlls/mf/tests/mf.c | 175 +++++++++++++++++++++++------------ dlls/mf/tests/resource.rc | 10 +- dlls/mf/tests/wmadata.bin | Bin 49071 -> 0 bytes dlls/mf/tests/wmadecdata.bin | Bin 0 -> 28672 bytes dlls/mf/tests/wmaencdata.bin | Bin 0 -> 4461 bytes 6 files changed, 123 insertions(+), 62 deletions(-) create mode 100644 dlls/mf/tests/audiodata.bin delete mode 100644 dlls/mf/tests/wmadata.bin create mode 100644 dlls/mf/tests/wmadecdata.bin create mode 100644 dlls/mf/tests/wmaencdata.bin
diff --git a/dlls/mf/tests/audiodata.bin b/dlls/mf/tests/audiodata.bin new file mode 100644 index 0000000000000000000000000000000000000000..5bf3fa1575ce8b980ef68a5c83b70a1b8e4760f2 GIT binary patch literal 179928 zcmeI*f2>qxe#h}=6)G*1j%ekwx;n7Xy@1M41+IAK>``I4Dv`?{nyV!1WLN7L4H+~F zZiqQVV;~qa8`$=eu<2km9TS9Eg9UNsctC5$bkkhZbiHY87!%xFx7p;{7`e?x+xPc; z=k~w;*FQfduZ*BvX3le-Gv{-@&yNtF9S){=TRAs+pd50ic*XRmuJWBInDIq!YH1Wq zag8f%jDo4(**C%~X6|)owno8B+~eXOMZpaI(AC%R|6_cmt6dufGcw;b{<9oR@=q>1 zRt~u*ctyC<CEJIC3Eyw$lDVB=8WmSL+6kuiq3iv=6HM`s)7<_gX)x12aHU(*U<M+W zY)*rz+~XQs(_n`Big)vKu;(rp-<}3DUUJRvr@=I??z@~<^giQ#AbH14ywVA#vdJYM zw}S~A-*tb-XGG&BjteGUaD|iQV8Wy;eOnG@e<8{Z6r*6qZ*mhuv<I4ZxS1`q7h1HN z>C$GV#J`&v+RT(<*IOS2Gql=`eJ={8`ll|wR1T&-;fjCHd4{mtCD+lOh!f63gfIAf z<|{rcD);mGG5yzW^js&H;umiEk7y^1FLv=?aJ<p|OE)u|26JYUo1$$@LVKBNUz6W6 zqx^rS%AYX>evYZGaO2nT_h53aYyGwpaw)Hf54&tzCzxc4c0)MJXF_&xI2SMDGb7pS zvNt%7QTP|v_%GTOdlp8y_<H&a=H2M_Z=gNVq8-dAZDuO8k(q6`{rtOW^54uL?QBXz zZi1g@N;kOV&!S*@e<<hb|4O@|cH9;A@%|77UGg{dH-wk@eCFTztSH_?`ylzbE4KMH z;)^bulLpiHbGLsv{SISm-6Va+Ox@+Gw2c|1y-dAtkbY>2o8A60KL^Pzu1G&N^#M0; zUK&jDAG|O0-gm7dv>(C_m;5*FhOnUTaXurmYiK7_cDdSX92bOtcGF*Ry~Nl8`T?rf z^{wI+L)KT&{Gn^mmrS6IOt#fc^6zG3#1-$1f~no+#%|{4BP@0GE4h9m4lemO&MUNj z<?1idj;P$?k`uHW!kM$V>>t}97jfRA@Uol!2l^dq7hG}~#}4CHx$ZLh8G376b7LCJ zJlf6lM%)1HWm<jXw3(Tr-Ase)tLbsAHQhm%e3!ouLx1ApY0e)^cU|Fcd7p^?s&788 zNH)@bIX>q`t}XM+?yq=7;cwk^m-a$D?S}q@_CfMp*BzuUp?9lmM6?&CHoNhAB0dLw zkajZzeZ3L>f6TkfH8;}U=<$7Ny35@7Rs4A*m$}*n&L>R&gDbqu`$QJ?{Uhff!kLY^ z<OH7+m0LQw`b!<!nREG9F8Mc(1>(SU5%nuwSekO~(AREuwcAq8E&9rxZe%3o+@lZP z>$0u%R|I}-8b5N)AJX0!TJNf>=%?m7H@1MEkLj;yFNA+~wbwYGP}$|OYdG%^9;d&V z1$;&%|LwvK`WIS9T<?9ZPe}g5&6~$@Mt#5)e?Wgha*Nwv<~oQX?PdmPGgGI%%xGWr zZu%*vXg4!?yBk|ef5ZOeuJPxb2gv5Q_#)>IifxztocD#|Judt^pU1p>doKAK+6`fl z&y2!8S3AyeLH%D{?+;v`ko;MiE8UQCtxmaSyV4N9#^4>UxrO$?e%i=%x4H`dZbtcU zrWL#W8~Fb)kDq7a>)oD(+`pjlU)(pL@GmZVgLXo)*Tu^?w~!s=`hjqk&xd4+c0;y} z^A_=8*Gg$W^IJDLm*b1^Yg}~&#~+2ibk$*gjnPf6N!yqz?PZd_DQh#F;r}x;{29~b z=a~2}-1uVt9!&p{D}F)yVDy}u{%iUjD)+na6>Vm|;Bz5P+PUO9K0m^4SN!`9_cgTH zgo`h6Tu}YfG&lA=`T>SkyB__;lxPPtLw_<Q+Q`hdTZ?};Gqjm$-r**OXn%~~<OYgd zU$MX7O5b+4@8i8qy244?4-+rA#!a*<!r#$mW+R^u$;Y%CDx3KHn0Un{@07VWrO$ol z8kckao2y;(`?L$jOD?A0m_2v7B5h-aXfM;~tI!8cve^xAZ8asXw`Q6?Z1yj4#Xsif zp!a*;2WlU>%2D1g8Woq!<^3XjpSDA?o&JV!C7&7D6Me^cMe<Ls@t+(QjLhfyhuXDn zd?m*j^>uFWhx9kZw3(UUyUd)SznK|pGt@`=xUSYw*yxIUUz(|<ZhR3xAC>R8=});{ zV)Rts0bWtO&BbRq4>9{srOM|=?{imN$#KH|9d7T7Q84kiJKBtb8GhSMb?85+op-<H z)fC=ymD98n!g06hmr*eFgKlys{TR(VU6=1PQ>T4QcDD-yoM(vF&_7T-;lekx3u2Ck z$s$*Mfc}F}b=9Z&HOBY2$=zu%)m^UlDE-RZ?`FTxYO85Sv^d6Q^h=H>vbHO6Y)w*f z;Z2UMnd1Hk$xhB8^O*~aIkyns?0V}t?r5xap~!zna=D8;+=C!&>udA<ZI<zOm^b>q z<`s=4oQJ5~?0V}v{CwW)S{Gl>u`-u950D&oVb#0ABrotjQCw2a#n16R(K_i$d{>!x z0p|l|ue&X-nPy~r-%ohO3~g(&XWh&mevOf5T<r<Y8&o;p%+O{x$T?^lSGd-B{(fY9 zmz!|SaIVN_&GpZR><Zc+gB#qyBV6Cme#s3S;n!$1UGEg_jilq^^PESR>U;9NG??yb zS3FMt!||i;%mMl>Dv!A$*JjfVZn{o?#O(b^gLXF)AGzMOQ7~iM+~D(kZX7-2K7B0; zruLRAw&|Z}opS^4bKOHFbIo_?N4W8%8$L!qMO=5I&+&bTaGyJK1K)cH+&h}&XMI2A zJV3aN_m1KbSNI*@2bi~n?|t+*&Ze;4l{nUBkbY%)yIp+`*D)mYK{NEY8+j-VW^7B} zT3#{x^Ao;{Oz)$<U+{`}q;Hb*7-53*7fFftZ9a0@Le3ZTR=Og6Eq5!gsH||wd_Fe< z-(k7Eyqbetcgz$&AK4-9R}e0`-Xh));#ID<j$fm4Yu|ESk<E3X#h)`5_<3giaISJ0 z?*mE2Wv}wSQTW7l=SIQAw3Qjy;AZb<sz0XxAb!%#_OEIBn(5O2OhR8YGY`A5dpYmW z;``Sm1=siu=P9xmT-@Y3gp6lNrbQc=QSMbt!Zp$iKIpppIREj%VK?XXG??XYxl`|^ z!PL&V<?r+RXl3r|vuQBZldjj`Ji-UBxap_TV0wHvni}_<CV7+hg75{$ILGn*f^*?b zjw@;lqg;>g8#Dcs`{0#`pUv+zT$TP~u0HEp^e?lVzGiCY+^KgXJ_o-?|1@)6cOM+) z=b^jL4L%rgY&f>7-RPw<$Bk>+FI>iXXW}O3GcxYCOyf5$De&3QD!H+H=_i<Z*d;sp z@8~}3rs->D<QW$~nR0G$EPvd$l~)YVcTIeQ>(1rRqwop+9NDWbsc>9T;aXtAdXBHT zK;JMejx(~koG+*>@3TIJ-Z~erD$`f^_eCyT<j)~H<iZp`%N%^y?d9(<oO33b&-*}S zg)7p}a(u@X(Oc=Vg}iShAMs~Q$%P4iHsVQ+wHe|4phr98xGwjQeCy^diMSTgN7nXj z;T0nfxuM7TzC!Y}tJBv^Z?_xVMZ2T)h%0R8z6d?~ubKV%h2PQ7Q9R-T*8-FLl=p3Z z#%Dpe;LgxqCfw&npX1&Haor6cOS$f+d=I$hJ1O4_d`Hp0%m97OwCI1P*mgDgr}^|X zcl1!ocM*O1c{jF=^A5dh-2~TV)418$vo14TCl8?;IR8;x?<$Y+J%uv|-0`Ck-=+Mw z<F0#}{~u4j=cdkce~Gv+>2RFUJLMWp?hi0<#I;|F_^#*QIo@V)gUhbq{sYAm9ADGF zzX{iHULo7T`GVGY*SLcF0}OKSZiY6y>JIu1YEQV?{xw5iGa3EQ%+MFj$WQvV^NQB6 zn|&@EFQC0py2yPbS|?rn9N#CHy}wCb;2c0$#rccm@Nh1^#5ruP=R8KX*3I5mR&J*M zp~2@h;cME*ywSIeSJUQx)og3$;!d0UPX5lzIqwjPuEBkznZ2)!X?GJAyW}(ejM?eJ z6!)s;P5urfCC+J-4!Dfx9%l4Q*IE>DpUt(E>!c}ijW)ge`yS;LRr-{f-0jBcbEZl^ zG@<IM5AbVbk&BmdE+KqV&dr_=@fwaF!T{GDWOs8up#GujUd440O}=Z)ByDTz2i>M$ zrsNv>;&E3wO+Q27J@@PLDY=Mqrf;glJtl_Vc1O7%HSxIH`(jG&O37ia$T?_wpL6U{ zsXFC2+F^I99Cw)h2IV;JgXmYvaa?CD%PGex$0^4t$0^4t#~mWeD97blPB~6FPC3qN zajM6W{dq=WW}lm=9>;T&9X#9I>{O3aJ<e)!s>i7wXEiz1<LC>j$EhBtdYtNUs>i7w zr+QpIwo>CNshewDWj>}-<0=_vpmCKNSE+H88du4fN{y>zJi@nbcHE=JReDWM<0=`$ zrE!%SSE+H8njfe6ahe~;91NQyr}=Tr8+eF07hC$68>jhk%o$*AoaV=I&qOUw^|(%6 zi&H(0IRKg;m(P*Y{5a-GF-K1G<1|0c=E!M&9P=Qx&WW#a@+jkX?sr<}#ODHQofEBd z5?I$j>zpwES?io=ofFnL(K;urX`ppZ^0iL1&WYAJv9(UL&WYAJ(K;urvB#P;M(b6w zW=@eY9a^ta>s21|wJNn<C2KUXCR&a)6183>Yq4!`TCbAlZmb`s^(vV^$5<b&SIPBZ zC2P$sbXu=c>s8vCm0GV->s8vCm0GWoV=&Iz3r(ke2l$>~?*Z*Q!1^RBSSxneY2N|X zhh5M8RB+mNfctFLh1I?TTrb#rK>H4)`Q8KCcR>3N*xm!$cfj`^(7pq#FVEfs+IK+v z4rt#2-*Z6w4lt+U0jK@rcs|L#I@&)@`^VWHa@s$R@xtq&{p0dI<ZSOaqy6Kwf1K?h zr~Tu~+CNVF$K`v+Y5zFpqiX-Sd=EM8AIH9rr&$k=XDvqifb$Ge>zrtv6RmTS?*(pa zoM@es;d~Ep?E{`_A8_phu6@AS3tanvYaej!1MYi(Yaejm16=!nQ=5C*jqgdd@4)q) ze9r;xJHVK~Q_l7P*FNCP%d|bfwGX)O0ls%QgoC#`);Q5RC&OCjMC+XJ%z^R2TIWRT zoLrl-=Cal~(K;tw4;H)RGirEdrwdaX`QF5ve3v3Aaesl*0hhJQ%uiyB`IpYdRBBwM z##Lrf8jQwOc0%Q5A5*Dul|H7j{ZbkRj<`lMWzAycxHC6I!D#<DzF+3^9Q<RxZ;WL) z<+zZ&!1pZTChJ=x`?#HJvEGasz2uVBJO{zxgRZ-eF?#smu$%LG8q9LWY#Ggu<G$rm znPccO&N&mS9;bSo>T%)8_f(HlJx=ww{X5cNtQMzwoa%9!AE)_onjhDn8>jhk`P{gf zhkb6G=EwQmxDQ^5v=6xU0oVLE&5zUkxK2C7(EPZL=Ew0&#pcFoejN4W&z#MT)BLzd z^W!u>PV?g~FjjLtbwAkLIL(jK{5aL)7{@$iW0~n2W^db32M*9a;EZ3p&|wTknhW=( z!HhoV;(8j)@G*DeN$oqJeFuEcfyNT<J-_Dr#=OzDj91e>>$bH+fMq!4IL~nP4?FCK z#`qF6+2h7cvd4?5A9S{Noc52?{&9`9^flPtaoRsF%J+^NTp96P%(c!l{s`F)7p~#j zgW?kQs5U2Db_L^VF}T4EJi<6i*qBO<tJHdx`C65#$EhC2UZp)uKjo|zr+S>$tL*W7 z%_QHtc}sj>fU&jIuFV!V@(|A=p?$zLKTh-Gc($PVamsN!mE)A-qEOwz_u^(}8BRG) z`+z6kcDScvo~QN!XH9ta@VvokAMlh6#{5>EjcOlo-veCxfODN-4{+@Ru6o?SBN5MU zxrf-`v=6xU0oOj@z6ZGW0cY&Om(1&j?E$WRz{y@Kob~}vL*+5%qOu3L_5r6By35%f z;MxbAYXy6NYaei}bCRr%SPzD}IBT3}ofF2MTx47YvO_K(Q>k&4+IN6CIkwix)Oi>4 zYLbrYouZzOM$-)(A-AFZl2eYOuFSZT%FWKkRBBu$=g?9YzTw(~;t3b8VJ$C&0mgD8 zyPNN8*qBO<tJM6sWGD0DjONFM?Aa*H>~SN{_#C;~6Hzc$i&H(0XNS+bqlcnkK7GyA z-r_i+*mkXRtj~)9)<HLw%r)Pkwv8K4y5VCHb0xTTu?M);IpLaZV=6VSQsXKaQ>k&4 zX&7Mqxv@RKwGTM=z8Y7__e{$7jyrlN<$H){a?iW5ZD}yQYn}ETVE@x+QtoS9_AK){ zFvHv_GxC$Z?YyEj?5ZnLo`KWn7P!*IPB5*L&ep2bdX?PkaGlovajDj;tTGQ6+CPrx z3v0PHT;F$zd8|kdyReGq5J+AibE3%e8xue0S|^#GhSEhBFNnAXk-b!p3ug{^El%~g zG?bW&XjG45-;Z0d+^HU?eFp{~^je(iapa{%PW3pSe^>ZjIhf)Rr+vUxk5i6Qj?=ya zWVZ)A!zsskhEtB?*|YYKV{J3`i@VQh|2W2-tnj_#w0|5qqu?69VH^&$e_Rx<K1=PJ zdbe3l?c3DOxl`{(?1jhgQ7bodUUwfHX5AEY_c_aO%5gjsT;-JGs0TB5YjzzK<v8xy zkJDF9JMACWQ9W+8a-4FUa-8-7C$~`>(t4HDPBpHQ^$+@EDmAWB<0>_-GE}$vm`aVS zq&CQY>^Y6A)VRv?9qk{deFro@j`^qs=BOI&AICUF&5z6H#%X?BJ2aSgY$mv0FuiMe zE{m~kPV?iKf3Y^@IknSzm5jIgq@1r+sr4#T_6BgaR;AXfWDd^5&ep2bdX*imS6OGi z6|{d`r1dI!Ua56XnEUfU6l|?ZtyjtO{Bd`b^?}Ur+ir^WgG`O=W`5nL9LK(jQ)fNH zDaR?tJ<k4`P>$n%^XW9-1AORl=6*lq#<q~(3>i*2j`57II?Hg%ajdD(aLRG4lTf0M z-0PI%I-$rs)Z%)leFv1|Y|TooSIIMC<+wb<DaS=&?~6`3j_=P!+IK+foUnG#@iZJi z>THb@t#guw0&8&@t#d+6U>$3l*cvBV=Y%<8)Xy;Ib**!v`Ei;bSJ=)tCD`0J&5w)t z9(6W1PV?imUS(?$^N>+vZk*A2m1(d!a>bRd_c`|$s8n6(|5K@!`8~4x=dQ^9%Vz%$ zryQ4ZK6!>yj?;RTmf@7+I{!QFvB#R_Mmdgo>8m`$DaWO(@8Oi=Shs<-PPEPm_ZRDw z<CNo=Yx7vdvrnfSNBwjG&p);A0Q)ktCc1JQV;@uMXHM&!Xq^+SbK+~9Xq^+rL~ETB zt#k4$Yf<iWGY?1kS|?-oMvT$p8EDCAy-MmN4dzs^|Dv(ADz#o^CnObDxs2z)2<sUq zZZ6#JTI}bIY%b%0QCZ%1E3dE&ryS?CIMw5n<FtPqHGu<ME85O7oN^qQo(!iP#~zH4 zvpom2?*R1y<_#FzbHHf-II<mk4>X#tcZzxvl8%ed(~mIK_vCwNFx}Hm^|%iE9H|}` zE^-fx-Xi)JtQMzw9Qy`7=v0r>z5{udQ;uUV&4}^lPW3p|<7_W*<v8WIDegIk-*!j2 zA2rHx9D}9Gag8OcnG37MsUD|#-0(5hBZBI2)B{#(-vQO*n0K*|n%kXj`l*O@FUef5 zIIG2}9>+N8Pk3H~>{X|F9Chop*y2VWidds5V!bApJWZV&^*ye)oAU^k;gsW;tFzwO zm`aVSRF1P+oa%APam5p?PlfP}vka#k$9jm$aUr{cngDaQjP{RHj>{H$hEtC7F_o6( zG_F!PPW#6Vhj@fJd(i%I%=>P$7QkEX)7R2qjvjJ@&+~nXv2Ct*ZOVQ*DSPL1at)pv zoA5Z}YcX9f=emLUp-_%vU1rt+vs#?$ah~Cn<CNo+;~3Yq3~%&(%`24SsL3kFg&UdM zV^ohT2jw{KrI;IMRF6|VuKHu@0b8Bz0j_<(mE$bKDaWy1Bzu6H2KNwVkaYsh&}LU< z?Lbp|!i_vbKEuo&mp#k<2WHsM(Tx10j|`_A$6m^%a!&O)=I&@*WnPO@Jx)2UNc}O_ zug_YBQ;zctryR$+3)JG2<CNo)H@Sa+jj7bQO69nCl3JWmJubA)d4^MtQ;rMUxTi$i zamnSZZ-h{E4c1sNv+FLz)L>0m?2^ygA-9uPgsF}0&EXKB97q1QwHL^6%5grXQaMgJ zPB|_L1Mf5EAal)kqF_{y<2&Oc<+y3)>loGJl;h$j$!}JRQ$5ZzoN`>A;gsXrA=|+` zP^ccK92W-O4cXnC52%0Wx>u#aH1Bki)LKpbpxgAzG?>7?RHky;6<8zB{F>}$EW;_s z-5%mK<bP;fCH+m~D!mqGH96Je@+_wuXV3gR!zsskhEtB?d{8|uD97=gIl(>&P(6<E zwC^)li&~s=oN`=fpA9+H<AQQrMCNpb_t+~1mD4U9kI1PJnbp+~vaS;*nR9QNtRH5& zSGoF!WwJ11qV9HKfa@=m<ET@&VHr+2PC1TRoa%9QfA(%J&v43d%-M)?s>cn7@P%@m zWjN(H<+w^lodA~Ml;g@FT*Em5)#H@o;x(KP)Z&!ml;gsiTo=p~{Q}8O?jg))E-dC; zL4338t!Iuk8f#rB^52nM?&1z(_z|}CS%y=N<J!ydfW}oS$HkNMH|03S%dx-2lTJB~ zbK(obbwW8V&v43dcAZc?PC2g3eS=eu<NCM^s>e|yQjV)phcl|j@m--D$2v{a12AK2 zoFikcJTt>w9W#5MS$l%>2Gt#IXfylqU~r{tToJKuRK&RTaxU9JeHO}b9FudN;Z%>a z`!m(!l;cvyPcknbp5Ztzl;iUC^i+>)Gv3;+6UuSQamsPwjbYY0hh;eBxIDut$9aZR zj^qBpGMrI8PB|{5?4i@ig~vH3(4Y=$CO&e#YuU#NW82)|^W;|?J>))pEn*)Z`qx{o z*k&&tScX%MW3DW<IMw5L20|@PIZipQ%bMqAnsw04?7Ha6amsPccYI8xa-4FUavZgQ zZ#WN5ILmO#amsN?iRZvjj-%GL-D`2G$0^74cC%kB>fBSB<Y_nbIQ#Kn<RLe<h5cpC zS~qV=8cgyn{R+L0`hLMH;*mb(IQ9Zlj;k$9*-t<@PC1V2!%EhgTj-LH$Zv*Poa%AP zakKaB8dpgjPW3qDxVPD37*idmah1w(t>J!#Q;rK=YH>#OIOVv?a_%YTy3nF7Yc4Pj z)U4<G6qU=$xujAKCVSNtJ}C#&oy+=9h;MKM8yHiIJi{r+<rz*n&TDb1$I;i6<HGQ< zl>KL%)#6l-V=PO*{-PYG9H)AmXE^1!PADC4s>d<TPdP3W*R!W8l;hGcxXUw~>T#ao zEXyg!rD6G7X*l(+tDU2chUKiEXIh!N`fM6ZmHSZBYq$?yNrRbw%JtaK$EY4hEpn%F zoYmq~k4y6mryR!|1)g=8j5+p3Igb4Hbw9(Y9{0cJgT_^=9%orjIZipQ@|b5h<v7o9 z%5j}wwK&z|(lF<BXBkd8E()WU%DL7rSicF`$Lv{;xXFA^WG|5Y(fEx^3gk4jN^b04 z#vfzmVP_dmInFbja-4G9z$1)TfN~t;JZw%r>vNhs!zst*bK_KxQ#~$g^F0gI;~3ku z!ZV!eamsO}N77&{!zsrp$9-^^`WcktxTkzD3dw4x99Is#Mch|jq&9%;kPB0+Cut5c z=Gg3QyN`KAGM{IrsH||sTRS1Qo>!<Imxj2m9H$&d|6)HY%W%qZ)M6tSFJ)c=EW;_s zDaR?t(H|CghEtAX{y4Qb)#E(FDaUb-$^B(c^*H6YeV*Zz<5&}Jm9q?|92c>clPmm= zd9WxRae?`=CiyAZ)%=Y7ig3Z5xgiZE+~-E0OM|ftryS?CIMw5n<EjsEj|%0uDC~Wa zd-id6w8?ttu(@%XAE$bpWjN(H<+#H3G#J(6s0pl7j_dAYt`<~}i#QI-alLiqHYmqM zTqmQ@W6qXQj*G(aqs&`7?z*SxFL?4jH^rXBChkjESI_iLxd!*5X5ffxzZ3<ddYtNU zq3Rh<InFbjavXCK7P-+cJHe<P$F)`UxNznG&qbknoN`>e$}^mDoM$-YIL~m(ah~Cn z<2=JD$3=W+I?Hg%aXkOLNKF8(lP-RaeRWV=;*uAr$s(*`%rTO~!@2kpb85}?JR?E2 z*4da!jjL3S+rJ|U#xk68oN`?2B=hl6y67y!DaUz+Q;zctr+S=n+~9-Ei-hWN5w%F= zxXP`J?SkrY5n~mU<0_9uJo8kJtFA~H$CPpp<&@)C_vuUSF&DAc0&2`7HpM$#?|$m9 z=22JOMMlHqZa2Os3a0wBvs#?$ah~Cn<5<snwNpJ#Ij(y;W&DRbel+DdqH<hsL(2Fd z<v6RwsUGJUPC3pqoN}CJIORCcaLRF>;gsV%!zss6J8V14aLRFH`f<1S#gzJ4N-fP5 zS90Hp-se0kMy2XP|DQ^gYb|=8yW&dnFI11?xY@o$%5l{9J;SLU=NZnjoN`>s+z!uh z%5k3Il;f1+=DZ%UHm7o2WjXg1M)f$>?NyE|uIIiIs>d<5Ygjq1bbxVPP>y45*|$^H z9C6BV<k+Pt>(aRD1N0Sys;fTDuQ9&IP3}&q$?|)<T<=ltNzMJvGMsW8W3I_?%5jVn zJMC1D>#(j`C(m%oac$Pz<M|j=k7NHbo_T3prE*+0x1ZsZ<MIrr9OoHMInFbja-3&4 z<v7o9{~tLnp3i+cM#;uzy6Y<6;n@k2@4Dg|`XU<a!(i$ouC<l%teCjR&AW>=m{4Em zy33d&fRXvGcA*?hcC0Vr70GtyZJHCz=R~8z{-<dD%JqKF{SxX|rn%`Kq`}l~bIE4z zBQSZd8`_!%)A*5#Zzt!Wy2>@K=JzrERVSCc!@9nx>~e|iRbzYBEEvu;Zekxrv{)C| zgh@AV9-kKjMVH*d@j~+sH^^}@U5=5d-t9^;&*(6=w(onqBAest6Xjr%pZ8tIE5ggn zb2VS_-cZ=beKkhUx!xZ*P8eTIUd6<XZiZ(-rn$u>92-;Nc$v{nZvO`AxR@Qky=P$> zOzXF_1F|>zw()8XvS)3M{eKQ(TiLzAD_XyGdlp9g96tLBw|@gQUyN>Ym3ukgkZ_Dl zbBmi9j(FdkTQ|D##f*bS?+?_EF?!Aw_OWg=!dJAHd6~V3kX%Q*nxDJ+1m_U4Iplqe zeXnmVuPDW?dN;=aU5=3%yvH@~;P@fA#SIiw+Me3fJQpTAoEsdgBd&21=P|+p+6xJL z{hG=y?sbs7<EFo&-=T3e{R`DqF1|hDyyf?P<c2slW|CuNlFhDmTSQ-o=o7AfCH)V* z-*cSM`ju-`_&boC;C-0wyeDK4$HW|SHP*K_BlFW-cNxb4^>uFEU3^|la9m7_V`S<h zuEFyZQ(WVc?{d6Q`Hq|J((f>Oz{TtdWoG};bxGGHU6=ftr0bHdOS)gu{gUpNbied} H+%NqPHAu^@
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 6f6213b1e26..d6eddef01df 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -5738,9 +5738,42 @@ static void check_sample_(int line, IMFSample *sample, const void *expect_buf, H ok_(__FILE__, line)(ret == 1, "Release returned %lu\n", ret); }
+#define check_sample_pcm16(a, b, c, d) check_sample_pcm16_(__LINE__, a, b, c, d) +static void check_sample_pcm16_(int line, IMFSample *sample, const BYTE *expect_buf, HANDLE output_file, BOOL todo) +{ + IMFMediaBuffer *media_buffer; + DWORD i, length; + BYTE *buffer; + HRESULT hr; + ULONG ret; + + hr = IMFSample_ConvertToContiguousBuffer(sample, &media_buffer); + ok_(__FILE__, line)(hr == S_OK, "ConvertToContiguousBuffer returned %#lx\n", hr); + hr = IMFMediaBuffer_Lock(media_buffer, &buffer, NULL, &length); + ok_(__FILE__, line)(hr == S_OK, "Lock returned %#lx\n", hr); + + /* check that buffer values are close enough, there's some differences in + * the output of audio DSP between 32bit and 64bit implementation + */ + for (i = 0; i < length; i += 2) + { + DWORD expect = *(INT16 *)(expect_buf + i), value = *(INT16 *)(buffer + i); + if (expect - value + 512 > 1024) break; + } + + todo_wine_if(todo) + ok_(__FILE__, line)(i == length, "unexpected buffer data\n"); + + if (output_file) WriteFile(output_file, buffer, length, &length, NULL); + hr = IMFMediaBuffer_Unlock(media_buffer); + ok_(__FILE__, line)(hr == S_OK, "Unlock returned %#lx\n", hr); + ret = IMFMediaBuffer_Release(media_buffer); + ok_(__FILE__, line)(ret == 1, "Release returned %lu\n", ret); +} + static const BYTE wma_codec_data[10] = {0, 0x44, 0, 0, 0x17, 0, 0, 0, 0, 0}; -static const BYTE wma_decoded_data[0x4000] = {0}; -static const ULONG wma_block_size = 1487; +static const ULONG wmaenc_block_size = 1487; +static const ULONG wmadec_block_size = 0x2000;
static void test_wma_encoder(void) { @@ -5789,19 +5822,19 @@ static void test_wma_encoder(void) ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 4003), - ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wma_block_size), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wmaenc_block_size), ATTR_BLOB(MF_MT_USER_DATA, wma_codec_data, sizeof(wma_codec_data)), {0}, };
MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Audio, MFAudioFormat_WMAudioV8}; MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Audio, MFAudioFormat_Float}; + ULONG audio_data_len, wmaenc_data_len; + const BYTE *audio_data, *wmaenc_data; MFT_OUTPUT_STREAM_INFO output_info; MFT_INPUT_STREAM_INFO input_info; MFT_OUTPUT_DATA_BUFFER output; - const BYTE *wma_encoded_data; WCHAR output_path[MAX_PATH]; - ULONG wma_encoded_data_len; IMFMediaType *media_type; IMFTransform *transform; DWORD status, length; @@ -5847,39 +5880,42 @@ static void test_wma_encoder(void) hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info); ok(hr == S_OK, "GetOutputStreamInfo returned %#lx\n", hr); ok(output_info.dwFlags == 0, "got dwFlags %#lx\n", output_info.dwFlags); - ok(output_info.cbSize == wma_block_size, "got cbSize %#lx\n", output_info.cbSize); + ok(output_info.cbSize == wmaenc_block_size, "got cbSize %#lx\n", output_info.cbSize); ok(output_info.cbAlignment == 1, "got cbAlignment %#lx\n", output_info.cbAlignment);
- i = 0; - sample = create_sample(wma_decoded_data, sizeof(wma_decoded_data)); - while (SUCCEEDED(hr = IMFTransform_ProcessInput(transform, 0, sample, 0))) - { - ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); - i += sizeof(wma_decoded_data); - } - ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); - ok(i == 0x204000, "ProcessInput consumed %#lx bytes\n", i); + resource = FindResourceW(NULL, L"audiodata.bin", (const WCHAR *)RT_RCDATA); + ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); + audio_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + audio_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(audio_data_len == 179928, "got length %lu\n", audio_data_len);
+ sample = create_sample(audio_data, audio_data_len); + hr = IMFSample_SetSampleTime(sample, 0); + ok(hr == S_OK, "SetSampleTime returned %#lx\n", hr); + hr = IMFSample_SetSampleDuration(sample, 10000000); + ok(hr == S_OK, "SetSampleDuration returned %#lx\n", hr); + hr = IMFTransform_ProcessInput(transform, 0, sample, 0); + ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); hr = IMFTransform_ProcessMessage(transform, MFT_MESSAGE_COMMAND_DRAIN, 0); ok(hr == S_OK, "ProcessMessage returned %#lx\n", hr); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); + IMFSample_Release(sample);
status = 0xdeadbeef; sample = create_sample(NULL, output_info.cbSize); memset(&output, 0, sizeof(output)); output.pSample = sample;
- /* check wmadata.bin against current encoder output */ - resource = FindResourceW(NULL, L"wmadata.bin", (const WCHAR *)RT_RCDATA); + resource = FindResourceW(NULL, L"wmaencdata.bin", (const WCHAR *)RT_RCDATA); ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); - wma_encoded_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); - wma_encoded_data_len = SizeofResource(GetModuleHandleW(NULL), resource); - ok(wma_encoded_data_len % wma_block_size == 0, "got wma encoded length %lu\n", wma_encoded_data_len); + wmaenc_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + wmaenc_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(wmaenc_data_len % wmaenc_block_size == 0, "got length %lu\n", wmaenc_data_len);
/* and generate a new one as well in a temporary directory */ GetTempPathW(ARRAY_SIZE(output_path), output_path); - lstrcatW(output_path, L"wmadata.bin"); + lstrcatW(output_path, L"wmaencdata.bin"); output_file = CreateFileW(output_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); ok(output_file != INVALID_HANDLE_VALUE, "CreateFileW failed, error %lu\n", GetLastError());
@@ -5890,14 +5926,14 @@ static void test_wma_encoder(void) ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); ok(output.pSample == sample, "got pSample %p\n", output.pSample); ok(output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || - broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|5)) /* win7 */, + broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7)) /* win7 */, "got dwStatus %#lx\n", output.dwStatus); ok(status == 0, "got status %#lx\n", status); - ok(wma_encoded_data_len > i * wma_block_size, "got %lu blocks\n", i); hr = IMFSample_GetTotalLength(sample, &length); ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); - ok(length == wma_block_size, "got length %lu\n", length); - check_sample(sample, wma_encoded_data + i * wma_block_size, output_file); + ok(length == wmaenc_block_size, "got length %lu\n", length); + ok(wmaenc_data_len > i * wmaenc_block_size, "got %lu blocks\n", i); + check_sample(sample, wmaenc_data + i * wmaenc_block_size, output_file); winetest_pop_context(); i++; } @@ -6019,7 +6055,7 @@ static void test_wma_decoder(void) ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudioV8), ATTR_BLOB(MF_MT_USER_DATA, wma_codec_data, sizeof(wma_codec_data)), - ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wma_block_size), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wmaenc_block_size), ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), {0}, @@ -6027,26 +6063,28 @@ static void test_wma_decoder(void) static const struct attribute_desc output_type_desc[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float), - ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 176400), - ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 32), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 88200), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16), ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), - ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 8), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 4), {0}, };
MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Audio, MFAudioFormat_WMAudioV8}; MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Audio, MFAudioFormat_Float}; + ULONG wmadec_data_len, wmaenc_data_len; + const BYTE *wmadec_data, *wmaenc_data; MFT_OUTPUT_STREAM_INFO output_info; MFT_OUTPUT_DATA_BUFFER outputs[2]; MFT_INPUT_STREAM_INFO input_info; MFT_OUTPUT_DATA_BUFFER output; - const BYTE *wma_encoded_data; - ULONG wma_encoded_data_len; + WCHAR output_path[MAX_PATH]; IMFMediaType *media_type; IMFTransform *transform; DWORD status, length; + HANDLE output_file; IMFSample *sample; HRSRC resource; GUID class_id; @@ -6166,7 +6204,7 @@ static void test_wma_decoder(void) ok(hr == S_OK, "GetInputStreamInfo returned %#lx\n", hr); ok(input_info.hnsMaxLatency == 0, "got hnsMaxLatency %s\n", wine_dbgstr_longlong(input_info.hnsMaxLatency)); ok(input_info.dwFlags == 0, "got dwFlags %#lx\n", input_info.dwFlags); - ok(input_info.cbSize == wma_block_size, "got cbSize %lu\n", input_info.cbSize); + ok(input_info.cbSize == wmaenc_block_size, "got cbSize %lu\n", input_info.cbSize); ok(input_info.cbMaxLookahead == 0, "got cbMaxLookahead %#lx\n", input_info.cbMaxLookahead); ok(input_info.cbAlignment == 1, "got cbAlignment %#lx\n", input_info.cbAlignment);
@@ -6201,27 +6239,26 @@ static void test_wma_decoder(void) hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info); ok(hr == S_OK, "GetOutputStreamInfo returned %#lx\n", hr); ok(output_info.dwFlags == 0, "got dwFlags %#lx\n", output_info.dwFlags); - ok(output_info.cbSize == sizeof(wma_decoded_data), "got cbSize %#lx\n", output_info.cbSize); + ok(output_info.cbSize == wmadec_block_size, "got cbSize %#lx\n", output_info.cbSize); ok(output_info.cbAlignment == 1, "got cbAlignment %#lx\n", output_info.cbAlignment);
- /* resource is generated using test_wma_encoder output file */ - resource = FindResourceW(NULL, L"wmadata.bin", (const WCHAR *)RT_RCDATA); + resource = FindResourceW(NULL, L"wmaencdata.bin", (const WCHAR *)RT_RCDATA); ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); - wma_encoded_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); - wma_encoded_data_len = SizeofResource(GetModuleHandleW(NULL), resource); - ok(wma_encoded_data_len % wma_block_size == 0, "got wma encoded length %lu\n", wma_encoded_data_len); + wmaenc_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + wmaenc_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(wmaenc_data_len % wmaenc_block_size == 0, "got length %lu\n", wmaenc_data_len);
- sample = create_sample(wma_encoded_data, wma_block_size / 2); + sample = create_sample(wmaenc_data, wmaenc_block_size / 2); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret); - sample = create_sample(wma_encoded_data, wma_block_size + 1); + sample = create_sample(wmaenc_data, wmaenc_block_size + 1); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret); - sample = create_sample(wma_encoded_data, wma_block_size); + sample = create_sample(wmaenc_data, wmaenc_block_size); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); @@ -6245,7 +6282,7 @@ static void test_wma_decoder(void) ok(!output.pEvents, "got pEvents %p\n", output.pEvents); ok(status == 0, "got status %#lx\n", status);
- sample = create_sample(wma_encoded_data, wma_block_size); + sample = create_sample(wmaenc_data, wmaenc_block_size); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); ret = IMFSample_Release(sample); @@ -6263,7 +6300,7 @@ static void test_wma_decoder(void)
status = 0xdeadbeef; memset(&output, 0, sizeof(output)); - output_info.cbSize = sizeof(wma_decoded_data); + output_info.cbSize = wmadec_block_size; sample = create_sample(NULL, output_info.cbSize); outputs[0].pSample = sample; sample = create_sample(NULL, output_info.cbSize); @@ -6273,18 +6310,30 @@ static void test_wma_decoder(void) IMFSample_Release(outputs[0].pSample); IMFSample_Release(outputs[1].pSample);
+ resource = FindResourceW(NULL, L"wmadecdata.bin", (const WCHAR *)RT_RCDATA); + ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); + wmadec_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + wmadec_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(wmadec_data_len == wmadec_block_size * 7 / 2, "got length %lu\n", wmadec_data_len); + + /* and generate a new one as well in a temporary directory */ + GetTempPathW(ARRAY_SIZE(output_path), output_path); + lstrcatW(output_path, L"wmadecdata.bin"); + output_file = CreateFileW(output_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); + ok(output_file != INVALID_HANDLE_VALUE, "CreateFileW failed, error %lu\n", GetLastError()); + status = 0xdeadbeef; - output_info.cbSize = sizeof(wma_decoded_data); + output_info.cbSize = wmadec_block_size; sample = create_sample(NULL, output_info.cbSize); memset(&output, 0, sizeof(output)); output.pSample = sample; hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); - ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); - ok(output.pSample == sample, "got pSample %p\n", output.pSample);
- i = 0; - while (hr == S_OK) + for (i = 0; i < 4; ++i) { + winetest_push_context("%lu", i); + + ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); ok(output.pSample == sample, "got pSample %p\n", output.pSample); ok(output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || output.dwStatus == 0 || broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7) || output.dwStatus == 7) /* Win7 */, @@ -6295,20 +6344,21 @@ static void test_wma_decoder(void) if (output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7))) { - ok(length == sizeof(wma_decoded_data), "got length %lu\n", length); - check_sample(sample, wma_decoded_data, NULL); - i += sizeof(wma_decoded_data); + ok(length == wmadec_block_size, "got length %lu\n", length); + check_sample_pcm16(sample, wmadec_data, output_file, TRUE); + wmadec_data += wmadec_block_size; + wmadec_data_len -= wmadec_block_size; } else { /* FFmpeg doesn't seem to decode WMA buffers in the same way as native */ todo_wine - ok(length == sizeof(wma_decoded_data) / 2, "got length %lu\n", length); - if (length == sizeof(wma_decoded_data) / 2) - { - check_sample(sample, wma_decoded_data, NULL); - i += sizeof(wma_decoded_data) / 2; - } + ok(length == wmadec_block_size / 2, "got length %lu\n", length); + + if (length == wmadec_block_size / 2) + check_sample_pcm16(sample, wmadec_data, output_file, FALSE); + wmadec_data += length; + wmadec_data_len -= length; } ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret); @@ -6318,9 +6368,14 @@ static void test_wma_decoder(void) memset(&output, 0, sizeof(output)); output.pSample = sample; hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); + + winetest_pop_context(); } todo_wine - ok(i == 0xe000, "ProcessOutput produced %#lx bytes\n", i); + ok(wmadec_data_len == 0, "missing %#lx bytes\n", wmadec_data_len); + + trace("created %s\n", debugstr_w(output_path)); + CloseHandle(output_file);
ok(hr == MF_E_TRANSFORM_NEED_MORE_INPUT, "ProcessOutput returned %#lx\n", hr); ok(output.pSample == sample, "got pSample %p\n", output.pSample); @@ -6346,7 +6401,7 @@ static void test_wma_decoder(void) ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret);
- sample = create_sample(wma_encoded_data, wma_block_size); + sample = create_sample(wmaenc_data, wmaenc_block_size); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr);
diff --git a/dlls/mf/tests/resource.rc b/dlls/mf/tests/resource.rc index 5a2bf913672..483ff53ca94 100644 --- a/dlls/mf/tests/resource.rc +++ b/dlls/mf/tests/resource.rc @@ -20,8 +20,14 @@
#include "windef.h"
-/* @makedep: wmadata.bin */ -wmadata.bin RCDATA wmadata.bin +/* @makedep: audiodata.bin */ +audiodata.bin RCDATA audiodata.bin + +/* @makedep: wmaencdata.bin */ +wmaencdata.bin RCDATA wmaencdata.bin + +/* @makedep: wmadecdata.bin */ +wmadecdata.bin RCDATA wmadecdata.bin
/* @makedep: h264data.bin */ h264data.bin RCDATA h264data.bin diff --git a/dlls/mf/tests/wmadata.bin b/dlls/mf/tests/wmadata.bin deleted file mode 100644 index 6c70c14ce3208f5c711effe156ac484c706686cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001
literal 49071 zcmeI%v1tQA5CzZ!Co(v2sMN-RN>FHQ2Zt+A0S?rGRe*vkK_#dJm7ofYN{~8G=;V@t zY2d@#Y&QD5fzQG|4#V$leA<6a-|s)KZ=Zi3&-<6f;1D1{fIybOau^hN*2<(MK!89e zuu|t8i#q}Y2&4(D)p^>=<Rw6WKqoM&^Nz(G0RjZl1U7S>`wC6loV)}G5GVp$uk+$z zAV7dXsK8F0hi*=60t5&Yfk~Yg4+8-L1VRN4>O6FFViO=hpa>l2I`<V?SPTRR5J(d^ zd7Y=NOkM&62y_Bxb>6YKBS3&an!rV!r>#t00t5(j0#|k3vA82ZfIynSeXes~p=q0w zmjD3*MPT7|UOWs02oMMrSgP~T&52Eb0D&T~Qs>3PK!5;&P=U2N58a&D1PBl)0^?lg zzCsI&fdBylX#yLs^R$)8OMn1@PGGCfI~I2Y2oOjU*s1fhmB~wh0D(?mQs*6uI|2j< zqzN46I`<WtwmEqT5Fk(lj$Y@*!$5!lflz^yIuG5P*aQd=C<147UOWs02oMMrxTy2c w&52Eb0D&TKo$K6JXkjrBAV45Z;O=#vwlaAM5FpSAJgD=I#T@|x1kwcl0V8@&#Q*>R
diff --git a/dlls/mf/tests/wmadecdata.bin b/dlls/mf/tests/wmadecdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..4e339804f1f908f4b73c61ef275da893022da2b6 GIT binary patch literal 28672 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 LkTD^6zrp_iCe*Mb
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/wmaencdata.bin b/dlls/mf/tests/wmaencdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..5cb4e42c6e8d3317a4743e8e06aeade5e5aa1983 GIT binary patch literal 4461 zcmeHLeN<CN7M~Xql7N~Jf(W7sF<?+JxQ!(WLI^}5Y$Qen3n&z|3aB&|m1Sdi#;^)i z3^WQ2NC-^;(X^pOu&59eMWyngf^7jwQ4b<*#m1Bm1@^^O*Y2J@XaDN{<IKD__szX? z=e;{KzkA={0km&0becTmFrTx9Mi0K*nl9KcNRGZe0uNCjy<Ykrw-Xoqz#YdW0vvcF z#kT{W6@z=H9HUMjFuBLu%Z6m!%tNJ@sj}%N8IJlNg&F-mL(;$Suu$(aMrWadua;>` z54HAA;`520#bOz?Vqv0I19dkrB-zypIX@H?R*~fiJ^^7c-4GU^7a!*18qccI6~^Zo zZ$rAHi@JTgZBlzvpPv5w;z!YU-NG-1=Y^3-at%u)m$m1&^?5%P*Jp5aNqw<1)V=c- z+PuKvfWM`{^Jm&t<|z%eR7I(u7_0QhECLH*p-3jzFhZ%-#31wz<YEM&i9sF6bq@KA zN*wi|7)@LiLJYzP5r*cscG_?ddTt|{xC{Bz3&bG%MzjOcBkCpP)I{XTaPDc;oRGQk z2M^1Z5v2~#mO1<Ee5WhsYSFK4>h$|L?4nKDEQb#~7u=~d?A>SxH~dAlyCyBzxPyZ= z3QRVa)@9b^wL3;QZT{Pk#5Mu=W8}bR$Bj6>Pzi@ln~Q=X0#K0eCKN<Tas8;fxvlKn zP?kP6m*#gWvP9cX(V>*>nRUYK#Qxg&{7X?LCV)&!I5x5m?v3GT`c>OT@xvrGWIi%F zZ5jwPZ_e5*N=Qi9RWKG!Fme`jw|YLUU_UkgeAi9Pz8ITD!~+FsJ6Sa+e@E2@zj@ge z5_M~D@!2%I1dL951f+4L1qFDfI&%3pac~QV0G|Z5(@&>VXiG@*)8-K%P<!a;vM=HS zEX{677JYaak>i7hJW!u-q(U#|Ay=cg=-1DTe1Q3YY1|KEMhaQ0D>JpDyru}K2X=Gb zWC+Ni>*eI8re+vktA^oKeMJ!qf1%A~neVop&tdnA)AQ&YI$DWV+6kbsXgmu$*pCl? z92n?3aAufn0K=|C(8wIb(>R{;n5jMGe#S_|#L-mj&B=A*GB^*)ItGEu^N$KPt(X`> z^jS{l(YZpo4#($`l<urjxt4k>o0Q9q?E31vra<@%Ai$r2=~Zompny)**H8X+*pUi` z$!w@r?EC||>4}l!eY@3j_>HadmV9f0Kgj~K07$%Hd18*fpEKY2bS`Z+i4(@rw$HqE zAWXu(Iis)X7~}wa@7W{+r?NQ#`#6;x)q!1V+_vi`KPqJMAlhtjdw!HDL%<+|C_$s{ z`J+(*_gI$nu@Swv*;&8wS}q#Jwd2}F+B+xcd0Ek10j^eGCrv#v?81hIoeZGyT}jOv z?~1tkwjGWc(C07#@`JGvEy<}u5&G%{G^*!Ce~RnhS4f`U6nA|Q{WUEFpRI#Da5|Q7 zVw|Y#2)0zy@`v7A`S){~6etQ1pyTlD%|AVJr=x_FBFzY#hro*x#=@64Sm#22ZeA9W z>JqB0o9@1mGjH&|VB0bE-g84y)>kF36_5kNABgg=NsnvAWj&PR<w27+Up~UF=(>O| zLcGBgGz9GTshE$$I09zF`pc$HiLDGsFxS944~@y;>u$+OkWZ-nku6*)HBvpf4FR8K z1bm8@+9C$|oP9q^pA<$90tzcW3cVP37UoNMf^FB+A0t6)fy8zg>^`C`-LwAN8|Ne7 z?_t8w*vO6_?-ZOI#bNx@aA?U`6Jim>zE{)6EV0S@O=tJfLTJkN?6q7k0Zy8KEv7t+ zth3ms{B*7C_~|{H2U=ozY14*58UX<5Jd;QHL#HHi``PD>i_;&P*a{m2<!xl!AhEbX zgAYZ+p`?0b`tq$)DCw8J^b~9T#zw@=ZmSnR$RbXd2ZmBks2em%$LrXqYCFcIH97Rj zM=#V3ygF5L?Q+R?!%~}XK>(^71f*YS_@3g*v(0Tv{>L$B88R<)WM*4|Q@I17(2Y02 zuZr}1BY7k1=k6JY^9RR@ce})Vx^aNSblrVX^8BvrZxb_H#__=Mw+D|S4nR?(#11et zx8ALKVcQD)(F(9JAXSf6&^3gvUT-yOcy<MXt_DcIWLJ!I3{Ra^pl+f-;B*SRIO;)& z|DUw4-VXED0{;gK%zp{z<|nV<9EWkoxI0D8XfYu1m@Y}Kv&@|8E+26C%DBadHEyBW zpug|2!f#}Izb9UT-3#2p`Nqd-m-`C}3e*rNXF}ju1N%gjf8sY5^Utq>Py+(!Yq*IT z%fju}yMKaQUvJ)&(pWia#|CNBpMknKuTo^oqEs30@x;z1Zz5z`3`4QAW)#y!LcAkr z>Rm>xM?p~m;y`48+M~;g1NQfbn;k#ClS^ZisTgJX*K{oR@i_OL2xO0X7w&F)YWG6` zY84=-%{T+x&{Yhy+;z=(?by&H>J)-FW-vDe>ewZ4M;}<S#5V$l*Ewg22S`Z7OJTaE zU!2@;jnl;GUz4aXf^&S-S}sM2E|YsJ-FHr@%$uf18AT?n@xu}<`cuAeMrHn;<#D!s zkP%QIPuT7@vrF-!WY)>%ek=^HuPqW-eMUyQHP-Fy$#USaI(V#?5UjHh`t&rbPpYSj zCXy{<rccdXY193I6@xQ8Cr_N>qmo>O)iwPK%Ws<e+HFi;M4Qq2-YenHs0vR{j|?PU zB_J-Ntthm6bx3e)P0Gp6p-AK}C3uulal`w1qv*DI7w@9~D(E&Zu<%)o`Ce{{Idv4b z4w{-j$*ghhSy_2CW~Fdu$CZdV_Hh?<x9*X?fabyEjQOU(P8a^pOZW0yuWP#VTU!iO zd*>*sf6UY!mQ)c=Dn=U!A3qI}GMHCvbAyoRm6(WQWlyKca)Uxkv_cV4#PGts$^v&= zh3w6&q-y_|-Cv3Ru|}d}g<Shzn12+tKGCTP85fUK|EB%r^Y1K$j6+BLR{r%yFFPRu z$QtE%0WC^lt*jpRbwN0<c?fA8<dwpgGTPsDzE=J}62Yzc>r;Fs;^h3rVY}Uew^BYn zG36XHchE()tAF;Ts92ZbfJOR-3$|*uvypGIF|IDbG<j`}ty}3mwL+FqJ&<N+T`C*E zK#SV@!|q4^5r(iU#XakfoE@(f2ZYv^Lk(?v>VC*j-m2k5uNrjW&B9YkMmwd&%QF%u zihZ{_5uaxtyXAfPaDAwb+1GGC!X<{>9*4an9M7Rvt0<XY)`pKfYhcOS<1kw9H9QC{ z`sv1ZQk5u_<riN)GZO-5Hs;mDsgkNta5ZJo0+%pt1G8%>k0YlY;2KLhz4(c&GhCs8 zOv`rQaY<Dyl}Oo%v4=P%RKSh&7}IJCDhz~7h&aSj36^d>Ot!-~QLlTkR7tW0XsVD= z!A(-?yu2#y7TBSP4rq^rM5ZfOeYY^R2EQ|>vF6(!Np;axzhv_$7cj8_MDYv+kYYnp zr#7@11j8F2_XpbExSBfI@3Fbdx3JOEW<p#ddTvHQ2Z|4D8M$(GRQF5o`H}I7Zv9Zi zqoowR_-V}Oxh{3P!ZFyQJF7ce{^V3hX?{y`cydIa=pbJ6{9$byLL3SnLE2K(?YWGy zLr>K8W%80s+jZuVwnsW!JFileSE-U7Dj;_V$Qt)79&0U+5$YpET2&+&-2-o}W(k!Z zcy3UVBf{khL*z&w4Z}SX&tvdO_FOA72svfw;J=pK&PNU%sMTbomoV54p&6mx2&tsc Sw4N#Oaqn9@p`Br?_xL9hNbigQ
literal 0 HcmV?d00001