[PATCH v4 2/2] quartz/tests: Add test AVI and MPG files.

Zebediah Figura z.figura12 at gmail.com
Mon Nov 6 21:17:12 CST 2017


Generated with ffmpeg using the following commands:

ffmpeg -f lavfi -i smptebars -t 1 -r 1 -f avi -vcodec rawvideo -pix_fmt yuv420p -vf scale=32x24 test.avi

ffmpeg -f lavfi -i smptebars -f lavfi -i "sine=frequency=1000" -t 0.04 -r 25 -f mpeg -vcodec mpeg1video -vf scale=32x24 -acodec mp2 test.mpg

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
v2: also open files in avisplitter.c
v3: delete files when done
v4: ...and if skipped

 dlls/quartz/tests/Makefile.in   |   3 +++
 dlls/quartz/tests/avisplitter.c |  44 ++++++++++++++++++++++++++++++------
 dlls/quartz/tests/filtergraph.c |  48 +++++++++++++++++++++++++++++++++++-----
 dlls/quartz/tests/rsrc.rc       |  27 ++++++++++++++++++++++
 dlls/quartz/tests/test.avi      | Bin 0 -> 6938 bytes
 dlls/quartz/tests/test.mpg      | Bin 0 -> 6144 bytes
 6 files changed, 110 insertions(+), 12 deletions(-)
 create mode 100644 dlls/quartz/tests/rsrc.rc
 create mode 100644 dlls/quartz/tests/test.avi
 create mode 100644 dlls/quartz/tests/test.mpg

diff --git a/dlls/quartz/tests/Makefile.in b/dlls/quartz/tests/Makefile.in
index ebded4b..2ff1b47 100644
--- a/dlls/quartz/tests/Makefile.in
+++ b/dlls/quartz/tests/Makefile.in
@@ -13,3 +13,6 @@ C_SRCS = \
 	videorenderer.c
 
 IDL_SRCS = fil_data.idl
+
+RC_SRCS = \
+	rsrc.rc
diff --git a/dlls/quartz/tests/avisplitter.c b/dlls/quartz/tests/avisplitter.c
index 32d30c9..1264e71 100644
--- a/dlls/quartz/tests/avisplitter.c
+++ b/dlls/quartz/tests/avisplitter.c
@@ -300,8 +300,32 @@ static void test_filesourcefilter(void)
     }
 }
 
-static const WCHAR wfile[] = {'t','e','s','t','.','a','v','i',0};
-static const char afile[] = "test.avi";
+static const WCHAR avifile[] = {'t','e','s','t','.','a','v','i',0};
+
+static WCHAR *load_resource(const WCHAR *name)
+{
+    static WCHAR pathW[MAX_PATH];
+    DWORD written;
+    HANDLE file;
+    HRSRC res;
+    void *ptr;
+
+    GetTempPathW(sizeof(pathW)/sizeof(WCHAR), pathW);
+    lstrcatW(pathW, name);
+
+    file = CreateFileW(pathW, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(file != INVALID_HANDLE_VALUE, "file creation failed, at %s, error %d\n", wine_dbgstr_w(pathW),
+        GetLastError());
+
+    res = FindResourceW(NULL, name, (LPCWSTR)RT_RCDATA);
+    ok( res != 0, "couldn't find resource\n" );
+    ptr = LockResource( LoadResource( GetModuleHandleA(NULL), res ));
+    WriteFile( file, ptr, SizeofResource( GetModuleHandleA(NULL), res ), &written, NULL );
+    ok( written == SizeofResource( GetModuleHandleA(NULL), res ), "couldn't write resource\n" );
+    CloseHandle( file );
+
+    return pathW;
+}
 
 /* This test doesn't use the quartz filtergraph because it makes it impossible
  * to be certain that a thread is really one owned by the avi splitter.
@@ -324,6 +348,8 @@ static void test_threads(void)
     DWORD readbytes;
     FILTER_STATE state;
 
+    WCHAR *filename = load_resource(avifile);
+
     /* We need another way of counting threads on NT4. Skip these tests (for now) */
     if (!pCreateToolhelp32Snapshot || !pThread32First || !pThread32Next)
     {
@@ -334,11 +360,12 @@ static void test_threads(void)
     /* Before doing anything (the thread count at the start differs per OS) */
     baselevel = count_threads();
 
-    file = CreateFileW(wfile, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
+    file = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
         NULL, OPEN_EXISTING, 0, NULL);
     if (file == INVALID_HANDLE_VALUE)
     {
-        skip("Could not read test file \"%s\", skipping test\n", afile);
+        skip("Could not read test file \"%s\", skipping test\n", wine_dbgstr_w(filename));
+        DeleteFileW(filename);
         return;
     }
 
@@ -349,7 +376,8 @@ static void test_threads(void)
     if (strncmp(buffer, "RIFF", 4) || strcmp(buffer + 8, "AVI "))
     {
         skip("%s is not an avi riff file, not doing the avi splitter test\n",
-            afile);
+            wine_dbgstr_w(filename));
+        DeleteFileW(filename);
         return;
     }
 
@@ -379,10 +407,10 @@ static void test_threads(void)
     if (hr != S_OK)
         goto fail;
 
-    hr = IFileSourceFilter_Load(pfile, wfile, NULL);
+    hr = IFileSourceFilter_Load(pfile, filename, NULL);
     if (hr != S_OK)
     {
-        trace("Could not load file\n");
+        trace("Could not load file: %08x\n", hr);
         goto fail;
     }
 
@@ -569,6 +597,8 @@ fail:
         IBaseFilter_Release(pavi);
     if (pfile)
         IFileSourceFilter_Release(pfile);
+
+    DeleteFileW(filename);
 }
 
 START_TEST(avisplitter)
diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
index f9c95ae..e66dc40 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -42,6 +42,31 @@ typedef struct TestFilterImpl
 static const WCHAR avifile[] = {'t','e','s','t','.','a','v','i',0};
 static const WCHAR mpegfile[] = {'t','e','s','t','.','m','p','g',0};
 
+static WCHAR *load_resource(const WCHAR *name)
+{
+    static WCHAR pathW[MAX_PATH];
+    DWORD written;
+    HANDLE file;
+    HRSRC res;
+    void *ptr;
+
+    GetTempPathW(sizeof(pathW)/sizeof(WCHAR), pathW);
+    lstrcatW(pathW, name);
+
+    file = CreateFileW(pathW, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(file != INVALID_HANDLE_VALUE, "file creation failed, at %s, error %d\n", wine_dbgstr_w(pathW),
+        GetLastError());
+
+    res = FindResourceW(NULL, name, (LPCWSTR)RT_RCDATA);
+    ok( res != 0, "couldn't find resource\n" );
+    ptr = LockResource( LoadResource( GetModuleHandleA(NULL), res ));
+    WriteFile( file, ptr, SizeofResource( GetModuleHandleA(NULL), res ), &written, NULL );
+    ok( written == SizeofResource( GetModuleHandleA(NULL), res ), "couldn't write resource\n" );
+    CloseHandle( file );
+
+    return pathW;
+}
+
 static IGraphBuilder *pgraph;
 
 static int createfiltergraph(void)
@@ -355,26 +380,39 @@ static void test_render_run(const WCHAR *file)
     HANDLE h;
     HRESULT hr;
 
-    h = CreateFileW(file, 0, 0, NULL, OPEN_EXISTING, 0, NULL);
+    WCHAR *filename = load_resource(file);
+
+    h = CreateFileW(filename, 0, 0, NULL, OPEN_EXISTING, 0, NULL);
     if (h == INVALID_HANDLE_VALUE) {
         skip("Could not read test file %s, skipping test\n", wine_dbgstr_w(file));
+        DeleteFileW(filename);
         return;
     }
     CloseHandle(h);
 
     if (!createfiltergraph())
+    {
+        DeleteFileW(filename);
         return;
+    }
 
-    hr = IGraphBuilder_RenderFile(pgraph, file, NULL);
-    ok(hr == S_OK, "RenderFile returned: %x\n", hr);
-    rungraph();
+    hr = IGraphBuilder_RenderFile(pgraph, filename, NULL);
+    if (hr == VFW_E_CANNOT_RENDER)
+        skip("%s: codec not supported; skipping test\n", wine_dbgstr_w(file));
+    else
+    {
+        ok(hr == S_OK || hr == VFW_S_AUDIO_NOT_RENDERED, "RenderFile failed: %x\n", hr);
+        rungraph();
+    }
 
     releasefiltergraph();
 
     /* check reference leaks */
-    h = CreateFileW(file, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
+    h = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
     ok(h != INVALID_HANDLE_VALUE, "CreateFile failed: err=%d\n", GetLastError());
     CloseHandle(h);
+
+    DeleteFileW(filename);
 }
 
 static DWORD WINAPI call_RenderFile_multithread(LPVOID lParam)
diff --git a/dlls/quartz/tests/rsrc.rc b/dlls/quartz/tests/rsrc.rc
new file mode 100644
index 0000000..9bea5be
--- /dev/null
+++ b/dlls/quartz/tests/rsrc.rc
@@ -0,0 +1,27 @@
+/*
+ * Resource file for quartz tests.
+ *
+ * Copyright 2017 Zebediah Figura
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "windef.h"
+
+/* @makedep: test.avi */
+test.avi RCDATA "test.avi"
+
+/* @makedep: test.mpg */
+test.mpg RCDATA "test.mpg"
diff --git a/dlls/quartz/tests/test.avi b/dlls/quartz/tests/test.avi
new file mode 100644
index 0000000000000000000000000000000000000000..bec304de1d89a5353af4949270ca47a38d636290
GIT binary patch
literal 6938
zcmWIYbaNAuW?*m(^HlKh3=XjnVqnNfDauJK%gnG~U|?`?;%8Wq2xI_(04D<jBZLX1
z1sD{7d<m!+G6gd0fdB(TaY<1Q5QEJs%S<WuG%+$jRtGW<*~|tO28RDY08^s?G##iv
zO#>(Z!U{kPvX7C0hXG_3NIg363ib1r0NM?cGB8L<MprY+9}R)g5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c-XTy{P*mW8<VDc<g8~qP#ub=>qXsZGNE{>v<AZ2)
z02*sx0V>Q-$;|<xj34L<Mi3t~<|764ucx1zzh|&p2p^E`lUSB!YNlsmpl4`c$N&nh
zAIu{tNJhOn8Umvs01p9B3DE-_md(vC%LI+ef<|w*0>Rpaixw^FYHn$5C at d^2P6!SO
z33hgJayC;`R#pbfFIc#6VP{iIOMO8>VNrZga7d7oqocE_f|8Qb79dyyk#7dc7l7o0
zLGn(c@^lEF?Le?@(c;C6LGf2#SXfjX9~cxA2#OyQIeB^cl|Zm?>eOk|TI%W>sxmS%
zv*N<S!b9zCZSBl;bRj at pMp{bBBP=w^OHxu&G@`AssZw54j6Z18>eZ_i6&00a#FP{j
z0}~?xoP~vjc>@}%Yl<ZWgt+}TtXj3o90&{}@7%g|@5M}YJxxt*DG{I{5**wDqSCTJ
zU<m}qi67s;d;4vHlD3YHo-{8XA0ICpmw=ckFA!J&fpPrX*RNlHnXjy)qoXU$Cm<le
z&kmFq12O~%$%D;Lc>4yZe;!0XKUBZCI7mMs`NkG^m8c~Xz1<fa=!>bncD13|4alG1
z<u-qRZ%oZq5MMcRaX*OP6J2xl3aR}1CKsiM#r>YHVExyxwRibw#VwoU>otFGZ(Qy9
zb0<$vE}pP;O+)R}dA&6a?d=N}&1`J!U9)OVLsMg8V}1SXIWrpTI#;io4~#ybK;xXb
zVE)>9^$lRq*w{5WT|>{(V#TR*H}@A6H#BrkO4HD at uvmWT?2Y|}MPR<VuDSX0lV at -2
zBafe|s%>Vr;tbII!lL^6jtSYOmbSL at _8h*ntEjlJu)2Qg&ULlb-j>PTt at ZUuN$GXX
zJu at fwR+d%Q*EcpMB&62Yw at jYe3v@fk1BpO>L(AkTy- at dOrc@XLCyN+B<q?Pm%^HEq
FB>*m=8Sel9

literal 0
HcmV?d00001

diff --git a/dlls/quartz/tests/test.mpg b/dlls/quartz/tests/test.mpg
new file mode 100644
index 0000000000000000000000000000000000000000..7fe379aa3fcdee192f654a6612308532c81b1d8d
GIT binary patch
literal 6144
zcmeHK`Bzj|w!Sq0#Uurk0U=2hEl4RUiil{yDj`wOdSXns7zGMcKp&<V^f?8&#o!Q!
z#*wL&0z at H3Edvph!CQ<1#VC=|fE0*K0VxKd#(Q^Pd#(PV|Ae;|=ia@~xA(d~ocpbP
zzI_gYP|6$-3PQ=veTX2Ga>R at TbO-3`8<I*nWTua5?SRlCy-8S1MQp7B`fN%36k#BI
zaz+pfP?IyodRAnC#O*dYUwRYS?MG=}oFp=n>_jH>8pBf at uh5@P*`y)6{~_HFh-4h6
z243+Up<CwgT|(#^`JMb9m2{>hAzdK-9DB`7Hu2{Fq>;!(OX#cig)YV?DGvwv)`-BD
zvWL+-%Qs;OmV|EB_0je=iI!;$n2K?$WTHM+)s<u at a=1V>Jh*s<ndmwuJhsP^BNy>L
zyheH`O>ef?Amk#c*3;6&9Sl2;Nfq*dX~t)Z)*}a~N0AJ=WA#D9^V}>Xo|YHIaW`~g
zg*aLJn!1$nWby+{#DPNdqxf+SGDTLRuaG^|cuJwMG?Y at v;->r$^4P at M*pHh37xmwr
z$hEs%9#HLHwux%XY?s<6 at fr-I>3=RdMnR~B%sP>A6}y4P-^MVnOgYQ)L3UqRmBONg
zE^J(4)@*3~@|?fGPoGeXEOxLqKIp%6!7gr5d8E(g$s0#J%QYqxB%cyPdu+}RMS2W5
zOK2Rs9BS>mgXWEe#!F&WG=5`~%#!*?v?9A0Mu>qlv5 at vy+HM%SD8 at FQ-ryHz+P92W
z#H_WcFIdgUT67J<@8Zo!JR`Jk17)WpJwV#AVOlD<MA at -#@A`1ojhUU<mwroqhsT>-
zkrswA4Eyh%O%ydJ{d8#5$>Ar)k;i1EAe83 at H5M>G<{6l0V4i__2L7KiKnl6kNK1Bj
z;Z?x<YR8)^WzB5>`UZq1T0{QR%lx_rZ!dm4z96{mU>xdwr|XOGm)?=B!I7<pou6NJ
zetEm#<s-IEYK~@sijdkNOmk5;pjRvb&EX=Vb6PY&qmfz+=poe60*x^Tz8{^)aq3$X
zDqxFyLBZ=|ak!jI3bsP5VE49tQF?1Um-kLMpy;>bG=|x+#R^`pqE}VYZQ$LLe|_DQ
z^!C`~-9)dyikGj6O|2CWn>u?p*V1C!ew|Ld?PqMC%lZtx>IBb>^0hJet+6T!u)qck
zKQKC24H{yQ=qCo7hY!3}d=6j25-_p0Fa7Mn95G9b5JS&OI?KGL3rF~;LxO$7Tm>6s
z+v~5(T2d{~WF$Oip7l1G`_=XdV at iE?X->3ntnX at 9m3(Cw>*V#75~5%d)lw}A!%w|a
zO-AAtAEgcvT50n-5YIa6<CH-)Upl2up3^9&(~r1su}ZRJc$A4Y$Jf4F+-(qf8WFC!
z(!a688(|)?T--xHmg8KfdOAWLYmQo>S7&t<fAtC5m{i4k0vNAuPi0<pP#Ic{RiGsb
z9+XG>0S2{Ly}*0f*9Xf`DOQ1%x&H7Zo%h=5PjP=RH`q%><8JGu#C7_rz1z+aXgWSE
z^{;tuQ95F=Uyv7*6|JbhVU?T~5}p=*lZUf$G2Y^qu at Bc`dNIz^x8bgOS8%k7+jeKc
z)NuK!9l0Kd<PXo8jG7;9NOi7geN-PZ_kufVyA502{99M6qUvKjC~#hVpj&~x=CrWr
zQFs<_I(E^%GuPff_uqc#qL&oLVGJe?W&4Nt2asq0{zTuS at 8M(c at eAvef3UnVgEIY#
z1)ksf#GaqH>GN6T&e{&$=_=3TL*HB;p9n9mXdu`>ejs>*xO>Hm46J4hu72N!!@Zlg
zxyx at 36v;Bfn^$iER|tgZt(oCif-|H;G^_&`aE9j9)%UT4iQa6ls4h#6y?a=7RQKQa
zKHPuv at q7Nlh0%2t9iWW7^f244YFY;YAAvn$o)yqVpwR;^aOpt@<ZMV9dyp1(F>7C&
z8>YduD6X4L+nW`NX at TIWLCe+(@kYmAYu~56dg7BZ)i1kHc|@{zpN8{Gz%tc0KH0g>
zhZvu8V*>Bn7p|#C(P11?wGfe%w1_>Wfu^pbP2bDMZ*4WSXDvOucsYid!W(FTf#pA+
zT_64mWbg{4h&42Wsx4Akw8=SjqgTnpe*}FOaZxU`d$VY3*3Kl8;4K#{S3f*u at 1E;K
zdxQ=XfDQu)^-a!(C$ZG-kA}rRi#jv++BJS-yva at GCi}HPL9`KV5S}hr9iGl6*hBzf
zLE09OxhCKz?r^`&^?h3b#6R67K}Bg%p9Rf5?=ixg*6|H)IOaMr<YH|lc?zVWN&<af
zPWir5i?WM-Vp<F{e#i_;n|kA_eBs_8Ta3=4Q>e<lDeR(Z2xie~bcQ$0n*#lnZFTn7
z0#cU_w0;;4DGe!3x2-Gs`gZR{`@pRS#B?97=cbwy!^GCaDgsq#0L8)V&ay)m@)_7K
zC~zC{uWl{+u1>!G-r=}7Sq<EQ>(FVoM(`&51;{~6MpsEwU?E%uww1+$UaxyCYsXyV
z26wOh2Kc+$@rp`WIVo~D13^RxLT9=p`mX!w(rDEG{<F7WrrP{ba at 3t}?p&*PQF_o|
zxBt<m_$Aevk4={&6?@jc%zk>S`D%);`_8VOk}V26Bx_du%N!vTkLq*u|2JTxN7*lC
z2^1uAIIuf4py<Xy4?0xMu*{AEg2V)>J=_WUseV)|)CdU-XA@%m)X*8z1=j8j3`@`U
zFSWD9$7)oo`pv2BSf0lZr{sBh>=zw at NtE_JCzoRvH3^987=fY%N__$ntpZF5-2iYl
zvz^1_xRAITYW)_D6{IrZB{aeijKB=&O7F9rQ)xdiIiGjBy?#^BYS)snAxg_XwEZ~v
zrg-uua4|NDqm8GmcU;z^vKbs>cWZzMP|Xs&VGXbe_+&&@L?R*v9@!ykQsUmpAEXk2
zL^K%}kWzG@@v{Ai>Fw?<ZdnocJ&bP~nr?{jicgCw at _jPmxpoZD2^_>a&8GLIaBdVA
zpBq#YAemAl;<hOQQ>j4%T2RXz8I*e`Ku0pA8K_COw4(AR5jyBGK((l5pdokThY^`$
zr(0}c-FLnrLDhYUHqBo((jHORxF$!ZNeZ}SsH=%**XqPSjwXC{s at G<13;Nn%?T~~l
z)Mxj0c{UeGpco|ZJ9kyTi`=Wz|IE+zsc;j1fu3t&fBVjCmuJbzF3)?Jon}ii^OeFL
zrGxr+_g%^8hiau7lo}da?~<Z8-fPkC4c&U-k4m%cL)gS&YqRwiqEK{-z_o&v2^t<L
zpcs+6NwVj}<Vdz)g?o!oFVTyMjQu9}ah;@Eured`(5*IikM;uxhK|>{nudlX?duHQ
zkM1^0IPa**yFQ^QpG0YsA=q1-cdEyu%s46JX=CK(VLg^Qqk3KTv4%#f=Lq24uS{$^
z3ceom>PYj2L9`!LIcEGV*!D!(-1o6*n at W-e{UtX~|HY~*Z+DwEqi}F!yu80kb<49C
zKlXN2voorZeCq!cxdn3$RY-MN*21_mD|EZOkF5x(Qe&a~%y0 at -NUEq26z*{HQ%{HT
zSqrAOvf&5>z%$2VC&kaNo7TyX2#RD_f?edvuY$cFAFJeed011D=ORkw<tvv55R-~0
z9DRtLxvG9)<YafFANAaky at spv3AtUTl<xYb{YKaF9a&06ukR(++owyvrV*}sww at Os
zp1!kFqT{J~`W4^KbdUWWpbI36=OF!$8k_9UvTYY!^c)6zBID1zKm67muNzG$zdN44
zE~<{(HB>2)dgwgr4|t4hlh+yPhd5lvXVK}LCt>A*1#AzYc@?i0`$N%Dk|VH-mGJt6
zgP2~+mN+GiqJ7YZwX0T`pSnT3!Uc#>4eFhu^QOtl=ah}nGdMNIoANk<jty5+P)=YI
zHAxtWtE49kXioG92&SeG6}mKC8exy*XbByG6LTj%RH!YC!3s=)_QJr}D3wa+$wyUr
zIErjZO6Ws?+`T&TB~T?!N}bvSRRNlclUrIx{Kt`zdXY2vrK+ct^lAg6Pk5L#P#xX!
uDI at -b)oy{GywSh&m1Fz)q&$<ibi*&^Z|S5s&X0Kp<{6l0V4i{hX5e27ns$Z&

literal 0
HcmV?d00001

-- 
2.7.4




More information about the wine-patches mailing list