[PATCH v3 4/4] quartz/tests/filtergraph: Add a test mp3 file.

Zebediah Figura z.figura12 at gmail.com
Thu Feb 28 00:13:01 CST 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/quartz/tests/filtergraph.c |  64 +++++++++++++++++++-------------
 dlls/quartz/tests/rsrc.rc       |   6 +++
 dlls/quartz/tests/test.mp3      | Bin 0 -> 2349 bytes
 3 files changed, 45 insertions(+), 25 deletions(-)
 create mode 100644 dlls/quartz/tests/test.mp3

diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
index 897ba3af94..88d964c883 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -41,6 +41,7 @@ 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 const WCHAR mp3file[] = {'t','e','s','t','.','m','p','3',0};
 
 static WCHAR *load_resource(const WCHAR *name)
 {
@@ -530,57 +531,63 @@ todo_wine
     IMediaFilter_Release(filter);
 }
 
-static void rungraph(IFilterGraph2 *graph)
+static void rungraph(IFilterGraph2 *graph, BOOL video)
 {
-    test_basic_video(graph);
+    if (video)
+        test_basic_video(graph);
     test_media_seeking(graph);
     test_state_change(graph);
     test_media_event(graph);
 }
 
-static HRESULT test_graph_builder_connect_file(WCHAR *filename)
+static HRESULT test_graph_builder_connect_file(WCHAR *filename, BOOL audio, BOOL video)
 {
     static const WCHAR outputW[] = {'O','u','t','p','u','t',0};
-    static const WCHAR inW[] = {'I','n',0};
-    IBaseFilter *source_filter, *video_filter;
+    IBaseFilter *source_filter, *renderer;
     IPin *pin_in, *pin_out;
     IFilterGraph2 *graph;
-    IVideoWindow *window;
+    IEnumPins *enumpins;
     HRESULT hr;
 
+    if (video)
+        hr = CoCreateInstance(&CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER,
+                &IID_IBaseFilter, (void **)&renderer);
+    else
+        hr = CoCreateInstance(&CLSID_AudioRender, NULL, CLSCTX_INPROC_SERVER,
+                &IID_IBaseFilter, (void **)&renderer);
+    if (hr == VFW_E_NO_AUDIO_HARDWARE)
+        return VFW_E_CANNOT_CONNECT;
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+
     graph = create_graph();
 
-    hr = CoCreateInstance(&CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, &IID_IVideoWindow, (void **)&window);
-    ok(hr == S_OK, "Failed to create VideoRenderer: %#x\n", hr);
+    IBaseFilter_EnumPins(renderer, &enumpins);
+    IEnumPins_Next(enumpins, 1, &pin_in, NULL);
+    IEnumPins_Release(enumpins);
 
     hr = IFilterGraph2_AddSourceFilter(graph, filename, NULL, &source_filter);
     ok(hr == S_OK, "AddSourceFilter failed: %#x\n", hr);
 
-    hr = IVideoWindow_QueryInterface(window, &IID_IBaseFilter, (void **)&video_filter);
-    ok(hr == S_OK, "QueryInterface(IBaseFilter) failed: %#x\n", hr);
-    hr = IFilterGraph2_AddFilter(graph, video_filter, NULL);
+    hr = IFilterGraph2_AddFilter(graph, renderer, NULL);
     ok(hr == S_OK, "AddFilter failed: %#x\n", hr);
 
     hr = IBaseFilter_FindPin(source_filter, outputW, &pin_out);
     ok(hr == S_OK, "FindPin failed: %#x\n", hr);
-    hr = IBaseFilter_FindPin(video_filter, inW, &pin_in);
-    ok(hr == S_OK, "FindPin failed: %#x\n", hr);
     hr = IFilterGraph2_Connect(graph, pin_out, pin_in);
 
     if (SUCCEEDED(hr))
-        rungraph(graph);
+        rungraph(graph, video);
 
     IPin_Release(pin_in);
     IPin_Release(pin_out);
     IBaseFilter_Release(source_filter);
-    IBaseFilter_Release(video_filter);
-    IVideoWindow_Release(window);
+    IBaseFilter_Release(renderer);
     IFilterGraph2_Release(graph);
 
     return hr;
 }
 
-static void test_render_run(const WCHAR *file)
+static void test_render_run(const WCHAR *file, BOOL audio, BOOL video)
 {
     IFilterGraph2 *graph;
     HANDLE h;
@@ -608,19 +615,25 @@ static void test_render_run(const WCHAR *file)
         refs = IFilterGraph2_Release(graph);
         ok(!refs, "Graph has %u references\n", refs);
 
-        hr = test_graph_builder_connect_file(filename);
+        hr = test_graph_builder_connect_file(filename, audio, video);
         ok(hr == VFW_E_CANNOT_CONNECT, "got %#x\n", hr);
     }
     else
     {
-        ok(hr == S_OK || hr == VFW_S_AUDIO_NOT_RENDERED, "RenderFile failed: %x\n", hr);
-        rungraph(graph);
+        if (audio)
+            ok(hr == S_OK || hr == VFW_S_AUDIO_NOT_RENDERED, "Got hr %#x.\n", hr);
+        else
+            ok(hr == S_OK, "Got hr %#x.\n", hr);
+        rungraph(graph, video);
 
         refs = IFilterGraph2_Release(graph);
         ok(!refs, "Graph has %u references\n", refs);
 
-        hr = test_graph_builder_connect_file(filename);
-        ok(hr == S_OK || hr == VFW_S_PARTIAL_RENDER, "got %#x\n", hr);
+        hr = test_graph_builder_connect_file(filename, audio, video);
+        if (audio && video)
+            todo_wine ok(hr == VFW_S_PARTIAL_RENDER, "Got hr %#x.\n", hr);
+        else
+            ok(hr == S_OK, "Got hr %#x.\n", hr);
     }
 
     /* check reference leaks */
@@ -737,7 +750,7 @@ todo_wine
     ok(SUCCEEDED(hr), "RenderFile failed: %x\n", hr);
 
     if (SUCCEEDED(hr))
-        rungraph(graph);
+        rungraph(graph, TRUE);
 
     return 0;
 }
@@ -3199,8 +3212,9 @@ START_TEST(filtergraph)
     CoInitializeEx(NULL, COINIT_MULTITHREADED);
 
     test_interfaces();
-    test_render_run(avifile);
-    test_render_run(mpegfile);
+    test_render_run(avifile, FALSE, TRUE);
+    test_render_run(mpegfile, TRUE, TRUE);
+    test_render_run(mp3file, TRUE, FALSE);
     test_enum_filters();
     test_graph_builder_render();
     test_graph_builder_connect();
diff --git a/dlls/quartz/tests/rsrc.rc b/dlls/quartz/tests/rsrc.rc
index 9bea5be370..282cb1f7f2 100644
--- a/dlls/quartz/tests/rsrc.rc
+++ b/dlls/quartz/tests/rsrc.rc
@@ -20,8 +20,14 @@
 
 #include "windef.h"
 
+/* ffmpeg -f lavfi -i smptebars -t 1 -r 1 -f avi -vcodec rawvideo -pix_fmt yuv420p -vf scale=32x24 test.avi */
 /* @makedep: test.avi */
 test.avi RCDATA "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 */
 /* @makedep: test.mpg */
 test.mpg RCDATA "test.mpg"
+
+/* ffmpeg -f lavfi -i "sine=frequency=500" -t 0.5 -ar 48000 -b:a 32k -f mp3 -acodec mp3 test.mp3 */
+/* @makedep: test.mp3 */
+test.mp3 RCDATA "test.mp3"
diff --git a/dlls/quartz/tests/test.mp3 b/dlls/quartz/tests/test.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..78d8dd2af62027147a3f169a8306b601ab37c3b6
GIT binary patch
literal 2349
zcmb7_dsGuw8o+Nd0Yab%kpL211E`?kG4iV5Yk-7;KpQIo1%VJyIHnYi<s}c9 at Mu{)
zx=;-$76lYxv4m#?K}(8K5xNDX7+zI$wT73~<>6T{uycv_Y<JJ;IsX2bxpVHFU%vb0
z`|fyi94G){;lFPmm$<J20Pzh^JnZCb>xkNJMYpcZsxQln{__8NR1dvBKO9Spi1&aI
z0NMbs2)00+2r$SV0zO1Qa0HS-fJ5>KB#=@_HGvEwC+LO at 5R5@42<9Nm1n`%MAR~w%
zol*Gkjt%by+Mvkye)+qnxA)~m!`lE*bQyvE;W&Cax9XNN4**h)3kJxMcSp#?ob`IG
z?`Otv78R_mOaHgWH|tfTIFjyHg`0NNqY)ml4Y at HKXW2JZyT_JE9^b9o+D at mx%y;@%
zB|oa7#xnx?$zo2t*_L%<fR%=X52Qxtg1#N7m=>Ys?}#qxoYrFLkie&O4oi0}@V@<9
z&;(WXz(9nX3^v~r6ofVJuP751pPfq!RqZ^#I#^Wcj!^*V$YY}x(#aDsM$oS*ruZ`T
zdPX?dF+|8e7Tu-ISVSK%N*iNEz*^DPR}(MWk$BR at k~Tp7d!#Ncs5 at IA{poh!m!j(_
zb15lGh9%#W&o{N}VD})#GDU;D<EC9b%{^>L)qH3T^y}bADN~<K__MQw70Jr3`$eaJ
zO=ZVn+`sbdqPga{z{|+rg7$RE&i&NrmEBjPYFcHMXP?Yg3oy4Yc{a%_E0|Tpiq=jW
zox at l7bB`9;;jVM{TlEp>H^3=YOa}XoCzgo_4-omu!-874J}hD3f;E*boiuO{PTl{j
zYrAsN`&x7R!%#Wd0 at U#G3Nd+w%pDDk5=MJCjowU=_A9tfX0(C5AoxS6fmf*sT~n3~
z{YE5 at Sth-w#}kW(@ke(FuiModTFP>X4elzAU-R0wg+^)EGZ{@vpgzL|Ee)6A*3281
z1xqpldV>?<l}RBEB<yRK;9Pvm<G-ZonvQh#IV5h5ZVafEE<^u1qJEegONY$`;;hJc
zrk8Ig{o3le{&JSM;C_KXCy;u6R(B-kGL79UwEB3yj{J{|dowYwRoh8e!}W^KfsU2u
z9fUGp^+tDoQ+C3SwV_v=REEoZelnHvbujds17wQ1#z(OMOG6 at OnV7G|XQVH(kIK=5
zqLcEd!MxSOw-aL8RE|pf8p)^z`M^d-6KGwTKd`q&cTuOWrn`N)rd3+$(PS$*OQRHY
zk8((X)R{5CgNM*>1t^r?<8NYed~L<&>wUPzvh<`SD at ol&X^A$ylVx+zyZ}Qtd~n7f
z=V*w~$|qK|PN7=w{3zpoKowUCB7_ZP=2&kk{W8lUxmJ;5+yCIqR#$!Kw}JVwC>?ee
zBqG9dMEz6`Y}41V9^OAjeoh at 66I@WN7hkx|yU^dIYR=e`t~YZv4s-jz(rVtaR69S>
zTB6t28jFx at n!QZ{zrz{&9dP6ZQ%`3&8>D5e<Y$|SW%J+Uy~4trM*hUYZ%dN?$x3cA
zjZ!~4=}X$Tl9?DL-dk6r9W#w5)h_JZytq_?mwHDwGy{z at 77^mily3NbwC5c3yW)sa
zU7zV{|7d&l^v?K<flpCjJRD~`nf=KN&2-r`S>yN=SNr%MwvnU%KOLgpM%#<YE7$5y
z90bsh;mAvM{@=#`L+5uVD0!-L^*(NU{lcESUfwhQtt4Lh6<+GI?x!X>W7|j8h{g~1
zi2s(>SMualn?gmKRW19KVg at B~jB113EhejE5^B!zDL*Rod*a9#)0j=vPZF}yzYp7r
z=0eUTw(dGroeMyjmrj)WV3-^dxP=rA=FwH(eiSg$-mgr$exweQ3<-?p;TDnUY6F^T
zFf_;YS=d11^gw^vFY(atha>q!{)zK}h#%I^`4Qgs4$Ifbt`TJ&DXh(~>A=x*fr{hv
z_EwU+3*+}#nETy7lvAR4_O(}u7AdL)hV)|lI8O8NH@{Jb+KIN%p`Q<k{2Q}xZNl&@
zVI)(@>$tg{e%Y)@dMIV?Sdpl_gj!xLi7C#s`vgHAw!SFT%=_n^{bG)B#-*!9ZH*Q7
z39Rn?D}mx%)(1bUwd_OUoRqyn<vyuD^ao`kPu2cZL^zc4G*@qXK<|l(@xEzO{#h!e
z;1`SE+eO_OMVqrEuTp2yz55?kx^sBuRPsQ_W<!LG4Y`>FT80PFM>?PFzf-%QC0c_1
zaKHg?>jx1si1T^5qD!v_9${P{&$q7fWZWGr*6&f++rjOOKR8vL|8eePjEovmE@@*e
zXuPin($|S5kpj$2G;wbfDGv_2=!H0TfmPPfe^^Xe%hUyrgt$0MXhP&C$^>Ioyku=?
z%@HtB6pb at GDRC^Uoyw#Lt)FWN-WY=yzPCs(m5Tc3xtDImzWI!n-L9EeVk^I*!CML`
z{CT6H+ZlTY&mKi>Xbbd<0L4+=zeN5^i2mj28)Y-(m7O0Nr^$TX{J0LbE-toCE1&cC
zy+D7g_?D7s*h8HEr?Q at rZ=f3QEBTZ4(EkOlg^S#;H{w8?^Em4Qi}WY!-*@Ui<!$R8

literal 0
HcmV?d00001

-- 
2.20.1




More information about the wine-devel mailing list