[PATCH] wmvcore/tests: Add a test for mp3 GetOutputProps
Matthew Harm Bekkema
id at mbekkema.name
Sun Apr 12 01:33:39 CDT 2020
Signed-off-by: Matthew Harm Bekkema <id at mbekkema.name>
---
dlls/wmvcore/tests/Makefile.in | 3 +
dlls/wmvcore/tests/rsrc.rc | 23 +++++++
dlls/wmvcore/tests/test.mp3 | Bin 0 -> 24494 bytes
dlls/wmvcore/tests/wmvcore.c | 113 +++++++++++++++++++++++++++++++++
4 files changed, 139 insertions(+)
create mode 100644 dlls/wmvcore/tests/rsrc.rc
create mode 100644 dlls/wmvcore/tests/test.mp3
diff --git a/dlls/wmvcore/tests/Makefile.in b/dlls/wmvcore/tests/Makefile.in
index 8054ddd..856e02d 100644
--- a/dlls/wmvcore/tests/Makefile.in
+++ b/dlls/wmvcore/tests/Makefile.in
@@ -3,3 +3,6 @@ IMPORTS = ole32 wmvcore
C_SRCS = \
wmvcore.c
+
+RC_SRCS = \
+ rsrc.rc
diff --git a/dlls/wmvcore/tests/rsrc.rc b/dlls/wmvcore/tests/rsrc.rc
new file mode 100644
index 0000000..517cb22
--- /dev/null
+++ b/dlls/wmvcore/tests/rsrc.rc
@@ -0,0 +1,23 @@
+/*
+ * Resource file for wmvcore tests.
+ *
+ * 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"
+
+/* ffmpeg -f lavfi -i anullsrc -t 3 -acodec libmp3lame -b:a 64k dlls/wmvcore/tests/test.mp3 */
+/* @makedep: test.mp3 */
+test.mp3 RCDATA "test.mp3"
diff --git a/dlls/wmvcore/tests/test.mp3 b/dlls/wmvcore/tests/test.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5328ce2425e41393626cf01a5423d828471f469f
GIT binary patch
literal 24494
zcmeI&Z)BBG9Ki8kYcgZ5UPLk(l~gu&w$+$PYU$>dtMx32Rd!t_wHM3GB+Vp|>O~?m
zdo$A#y+{)2#f)U8H%T&jkwlWrGIM2}Xa5>^ryQqW?sI(~*L}|Od;EURdCuoN&zqAt
zP*W`7vE_JkbCWs8MAjzHc4g}JRMpp1RmbD=cNhNVvZ)nUt2YxDG9BiQDI*s}PWQ^X
zlG3u+`VAX5m2a-twtdI0%6RSW`i926`wt#EoIIKePMkc|dM2G|KX<;Pv#Y!3(&fIZ
z*RJ2VdHc at Yd;J50L&NtUJbd){$<t at gUyP2ud^JAt`pw&S?<YTe{Pg+D*KbolW at fWL
z!=9Kvx0yayuk5dEEt(GRh5cwr?5td9|Nb}QNlWazNV|!Zh?G@`tTDeKb7`8jS44`F
z`;IgPK at gtiABSn@?J<`<mTvjWc$PXJnE{P3prtv>!*fWE8Op<nS?&@u6n at 2)A4eWG
zm?389KeL1!<RItw1Xx3?AwNOR*^q;rGaA1H$U)9ekaITVAm at z6F9C9p^AqHp4LQg;
zqw!0C9OV22IcGx-a?WV{5+DaTKS9pfkb|5v8ova{6%e^dY{m*4$VFv9sr1OLKkxrr
zT&0m1ki!H;XG0^q%ltkRy4jE`pwAF51>MDBsm>Z=4OwVtg&_wyEnAklkb|6shE^DI
zkkhhdsS7#CS!ig5AqP1vTb8<zgPetiRv2=S)3Rl$3pvPHXlR8Y2RSWUmb#FGoP~x~
z7;=!)vSq0YImlUPXoVffMPhdu`~O%%T5H8p*I@~<cggY$b;HaMF9ls;In^Ntxf~R_
d0mwm4S6EJU$U!a#g>JxwoNiD4QT2iw&@UK&&2s<%
literal 0
HcmV?d00001
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c
index 2b5a455..273af70 100644
--- a/dlls/wmvcore/tests/wmvcore.c
+++ b/dlls/wmvcore/tests/wmvcore.c
@@ -1,6 +1,7 @@
/*
* Copyright 2017 Alistair Leslie-Hughes
* Copyright 2019 Vijay Kiran Kamuju
+ * Copyright 2020 Matthew Harm Bekkema
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -23,8 +24,38 @@
#include "wine/test.h"
+DEFINE_GUID(WMMEDIATYPE_Audio, 0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
+DEFINE_GUID(WMMEDIASUBTYPE_PCM, 0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);
+DEFINE_GUID(WMFORMAT_WaveFormatEx, 0x05589f81,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a);
+
HRESULT WINAPI WMCreateWriterPriv(IWMWriter **writer);
+static const WCHAR mp3file[] = {'t','e','s','t','.','m','p','3',0};
+static inline WCHAR *load_resource(const WCHAR *name)
+{
+ static WCHAR pathW[MAX_PATH];
+ DWORD written;
+ HANDLE file;
+ HRSRC res;
+ void *ptr;
+
+ GetTempPathW(ARRAY_SIZE(pathW), 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_wmwriter_interfaces(void)
{
HRESULT hr;
@@ -355,6 +386,87 @@ static void test_iscontentprotected(void)
ok(drm == FALSE, "got %0dx\n", drm);
}
+static void test_wmsyncreader_mp3_props(void)
+{
+ const WCHAR *filename;
+ HRESULT hr;
+ IWMSyncReader *reader;
+ IWMOutputMediaProps *output_props = NULL;
+ DWORD type_size = 0;
+ WM_MEDIA_TYPE *type;
+ WAVEFORMATEX *format;
+ ULONG ref;
+
+ hr = WMCreateSyncReader( NULL, 0, &reader );
+ ok(hr == S_OK, "WMCreateSyncReader failed 0x%08x\n", hr);
+ if(FAILED(hr))
+ {
+ win_skip("Failed to create IWMSyncReader\n");
+ return;
+ }
+
+ filename = load_resource(mp3file);
+ hr = IWMSyncReader_Open(reader, filename);
+ todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr);
+
+ hr = IWMSyncReader_GetOutputProps(reader, 0, &output_props);
+ todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr);
+ if(FAILED(hr))
+ {
+ todo_wine win_skip("Failed to get IWMOutputMediaProps\n");
+ goto cleanup_reader;
+ }
+
+ hr = IWMOutputMediaProps_GetMediaType(output_props, NULL, &type_size);
+ todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr);
+
+ type = malloc(type_size);
+
+ hr = IWMOutputMediaProps_GetMediaType(output_props, type, &type_size);
+ todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr);
+ if(FAILED(hr))
+ {
+ todo_wine win_skip("Failed to get WM_MEDIA_TYPE\n");
+ goto cleanup_type;
+ }
+
+ todo_wine ok(IsEqualGUID(&type->majortype, &WMMEDIATYPE_Audio),
+ "Incorrect media majortype %s\n", debugstr_guid(&type->majortype));
+ todo_wine ok(IsEqualGUID(&type->subtype, &WMMEDIASUBTYPE_PCM),
+ "Incorrect media subtype %s\n", debugstr_guid(&type->subtype));
+ todo_wine ok(IsEqualGUID(&type->formattype, &WMFORMAT_WaveFormatEx),
+ "Incorrect media formattype %s\n", debugstr_guid(&type->formattype));
+
+ format = (WAVEFORMATEX*)type->pbFormat;
+
+ todo_wine ok(format->wFormatTag == WAVE_FORMAT_PCM, "Incorrect wFormatTag %u\n",
+ format->wFormatTag);
+ todo_wine ok(format->nChannels == 2, "Incorrect nChannels %u\n", format->nChannels);
+ todo_wine ok(format->nSamplesPerSec == 44100, "Incorrect nSamplesPerSec %u\n",
+ format->nSamplesPerSec);
+ todo_wine ok(format->nAvgBytesPerSec == format->nSamplesPerSec * format->nBlockAlign,
+ "Incorrect nAvgBytesPerSec %u != %u * %u\n",
+ format->nAvgBytesPerSec, format->nSamplesPerSec, format->nBlockAlign);
+ todo_wine ok(format->nBlockAlign == format->nChannels * format->wBitsPerSample / 8,
+ "Incorrect nBlockAlign %u != %u * %u / 8\n",
+ format->nBlockAlign, format->nChannels, format->wBitsPerSample);
+ todo_wine ok(format->wBitsPerSample == 16,
+ "Incorrect wBitesPerSample %u\n", format->wBitsPerSample);
+
+cleanup_type:
+ free(type);
+
+ ref = IWMOutputMediaProps_Release(output_props);
+ ok(ref == 0, "Got unexpected refcount %d.\n", ref);
+
+cleanup_reader:
+ hr = IWMSyncReader_Close(reader);
+ todo_wine ok(hr == S_OK, "Failed 0x%08x\n", hr);
+
+ DeleteFileW(filename);
+ IWMSyncReader_Release(reader);
+}
+
START_TEST(wmvcore)
{
HRESULT hr;
@@ -371,6 +483,7 @@ START_TEST(wmvcore)
test_WMCreateWriterPriv();
test_urlextension();
test_iscontentprotected();
+ test_wmsyncreader_mp3_props();
CoUninitialize();
}
More information about the wine-devel
mailing list