From 86c3d7293b721f99bd5e67c18fcbc926b23c85f1 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Thu, 9 Nov 2017 19:09:53 -0600 Subject: [PATCH] quartz/tests: Add test AVI and MPG files. 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 Signed-off-by: Alexandre Julliard --- 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 ebded4b72f6..2ff1b475bd3 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 874036d5dbe..23167b59b86 100644 --- a/dlls/quartz/tests/avisplitter.c +++ b/dlls/quartz/tests/avisplitter.c @@ -270,8 +270,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; +} static void test_filter_graph(void) { @@ -286,11 +310,14 @@ static void test_filter_graph(void) DWORD readbytes; FILTER_STATE state; - file = CreateFileW(wfile, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, + WCHAR *filename = load_resource(avifile); + + 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; } @@ -301,7 +328,8 @@ static void test_filter_graph(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; } @@ -331,10 +359,10 @@ static void test_filter_graph(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; } @@ -509,6 +537,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 f9c95ae29a5..e66dc40a3a8 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 00000000000..9bea5be3707 --- /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(Z!U{kPvX7C0hXG_3NIg363ib1r0NM?cGB8LqXsZGNE{>vQ-$;|Rpaixw^FYHn$5C@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*NeZ_i6&00a#FP{j z0}~?xoP~vjc>@}%Yl4yZe;!0XKUBZCI7mMs`NkG^m8c~Xz1bncD13|4alG1 zYHVExyxwRibw#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@uvmWT?2Y|}MPRVr;tbII!lL^6jtSYOmbSL@_8h*ntEjlJu)2Qg&ULlb-j>PTt@ZUuN$GXX zJu@fwR+d%Q*EcpMB&62Yw@jYe3v@fk1BpO>L(AkTy-@dOrc@XLCyN+B*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 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