This MR adds tests that examine the values of the samples output by the byte stream handlers.
It is marked as draft as it is dependent on the fixes included within MR !7569.
I've also renamed the tests as they previously exclusively tested the sample output timestamps. The tests now also look at the number of buffers included in a sample and total size of the buffers within a sample.
-- v4: mfplat/tests: Add tests for MP3 Byte Stream Output. mfplat/tests: Add tests for Byte Stream Output.
From: Brendan McGrath bmcgrath@codeweavers.com
--- dlls/mfplat/tests/mfplat.c | 312 +++++++++++++++++++++++++++++++++++++ 1 file changed, 312 insertions(+)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 1cb60d168e1..107a795753b 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -86,6 +86,9 @@ DEFINE_GUID(DUMMY_GUID2, 0x12345678,0x1234,0x1234,0x22,0x22,0x22,0x22,0x22,0x22, DEFINE_GUID(DUMMY_GUID3, 0x12345678,0x1234,0x1234,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23);
extern const CLSID CLSID_FileSchemePlugin; +extern const CLSID CLSID_AsfByteStreamPlugin; +extern const CLSID CLSID_MPEG4ByteStreamHandlerPlugin; +extern const CLSID CLSID_AVIByteStreamPlugin;
DEFINE_MEDIATYPE_GUID(MEDIASUBTYPE_Base,0); DEFINE_GUID(MEDIASUBTYPE_ABGR32,D3DFMT_A8B8G8R8,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); @@ -13606,6 +13609,314 @@ static void test_undefined_queue_id(void) ok(hr == S_OK, "Failed to shut down, hr %#lx.\n", hr); }
+static void test_ByteStreamOutput(void) +{ + #define TIME (1 << 0) + #define DURATION_VALUE (1 << 1) + #define DURATION_HR (1 << 2) + #define DTS_VALUE (1 << 3) + #define DTS_HR (1 << 4) + #define BUFFER_COUNT (1 << 5) + #define LENGTH (1 << 6) + #define DURATION (DURATION_VALUE | DURATION_HR) + #define DTS (DTS_VALUE | DTS_HR) + + static const WCHAR asf_mime_type[] = L"video/x-ms-wmv"; + static const WCHAR mp4_mime_type[] = L"video/mp4"; + static const WCHAR avi_mime_type[] = L"video/avi"; + + struct timestamps + { + LONGLONG time; + HRESULT duration_hr; + LONGLONG duration; + HRESULT dts_hr; + UINT64 dts; + DWORD buffer_count; + DWORD length; + UINT8 todo; + }; + static const struct + { + const char *name; + const WCHAR *resource; + const WCHAR *mime_type; + const CLSID *class_id; + DWORD timeout; + struct timestamps expected[5]; + } + tests[] = + { + { + "asf/wmv1", + L"test-wmv1.wmv", + asf_mime_type, + &CLSID_AsfByteStreamPlugin, + 1000, + { + { 0, MF_E_NO_SAMPLE_DURATION, 0, MF_E_ATTRIBUTENOTFOUND, 0, 2, 9013, DURATION | BUFFER_COUNT | LENGTH }, + { 330000, MF_E_NO_SAMPLE_DURATION, 0, MF_E_ATTRIBUTENOTFOUND, 0, 3, 6687, DURATION | BUFFER_COUNT | LENGTH }, + { 660000, MF_E_NO_SAMPLE_DURATION, 0, MF_E_ATTRIBUTENOTFOUND, 0, 2, 6541, DURATION | BUFFER_COUNT | LENGTH }, + { 1000000, MF_E_NO_SAMPLE_DURATION, 0, MF_E_ATTRIBUTENOTFOUND, 0, 3, 6365, DURATION | BUFFER_COUNT | LENGTH }, + { 1330000, MF_E_NO_SAMPLE_DURATION, 0, MF_E_ATTRIBUTENOTFOUND, 0, 2, 5105, DURATION | BUFFER_COUNT | LENGTH }, + }, + }, + { + "mp4/h-264", + L"test-h264.mp4", + mp4_mime_type, + &CLSID_MPEG4ByteStreamHandlerPlugin, + 2000, /* Wine requires over one second to create MPEG4 byte stream handler, Windows is much faster */ + { + { 1333332, S_OK, 333334, S_OK , 666666, 11, 5479, TIME | DURATION_VALUE | DTS | BUFFER_COUNT | LENGTH }, + { 2666665, S_OK, 333333, S_OK , 999999, 4, 3668, TIME | DTS | BUFFER_COUNT | LENGTH }, + { 1999998, S_OK, 333334, S_OK , 1333332, 4, 3756, TIME | DURATION_VALUE | DTS | BUFFER_COUNT | LENGTH }, + { 1666666, S_OK, 333332, MF_E_ATTRIBUTENOTFOUND, 0, 4, 3630, DURATION_VALUE | BUFFER_COUNT | LENGTH }, + { 2333332, S_OK, 333333, S_OK , 1999999, 4, 3635, TIME | DTS | BUFFER_COUNT | LENGTH }, + }, + }, + { + "mp4/mpeg4", + L"test.mp4", + mp4_mime_type, + &CLSID_MPEG4ByteStreamHandlerPlugin, + 2000, /* Wine requires over one second to create MPEG4 byte stream handler, Windows is much faster */ + { + { 0, S_OK, 400000, MF_E_ATTRIBUTENOTFOUND, 0, 1, 82, LENGTH }, + { 400000, S_OK, 400000, MF_E_ATTRIBUTENOTFOUND, 0, 1, 61, LENGTH }, + { 800000, S_OK, 400000, MF_E_ATTRIBUTENOTFOUND, 0, 1, 86, LENGTH }, + { 1200000, S_OK, 400000, MF_E_ATTRIBUTENOTFOUND, 0, 1, 68, LENGTH }, + { 1600000, S_OK, 400000, MF_E_ATTRIBUTENOTFOUND, 0, 1, 68, LENGTH }, + }, + }, + { + "avi/i420", + L"test-i420.avi", + avi_mime_type, + &CLSID_AVIByteStreamPlugin, + 1000, + { + { 0, S_OK, 333333, MF_E_ATTRIBUTENOTFOUND, 0, 1, 1152 }, + { 333333, S_OK, 333333, MF_E_ATTRIBUTENOTFOUND, 0, 1, 1152 }, + { 666666, S_OK, 333333, MF_E_ATTRIBUTENOTFOUND, 0, 1, 1152 }, + { 1000000, S_OK, 333333, MF_E_ATTRIBUTENOTFOUND, 0, 1, 1152 }, + { 1333333, S_OK, 333333, MF_E_ATTRIBUTENOTFOUND, 0, 1, 1152 }, + }, + }, + }; + + IMFByteStreamHandler *byte_stream_handler; + const struct timestamps *expected; + struct test_callback *callback; + IMFPresentationDescriptor *pd; + IMFByteStream *byte_stream; + MF_OBJECT_TYPE object_type; + DWORD buffer_count, length; + IMFAttributes *attributes; + LONGLONG time, duration; + IMFMediaSource *source; + IMFMediaStream *stream; + IMFMediaEvent *event; + MediaEventType met; + PROPVARIANT value; + IMFSample *sample; + WCHAR *filename; + HRESULT hr; + UINT64 dts; + ULONG ret; + INT i, j; + + hr = MFStartup(MF_VERSION, MFSTARTUP_FULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + for (i = 0; i < ARRAYSIZE(tests); i++) + { + winetest_push_context("%s timestamps", tests[i].name); + + filename = load_resource(tests[i].resource); + + hr = MFCreateFile(MF_ACCESSMODE_READ, MF_OPENMODE_FAIL_IF_NOT_EXIST, MF_FILEFLAGS_NONE, filename, &byte_stream); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFByteStream_QueryInterface(byte_stream, &IID_IMFAttributes, (void**)&attributes); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFAttributes_SetString(attributes, &MF_BYTESTREAM_CONTENT_TYPE, tests[i].mime_type); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ret = IMFAttributes_Release(attributes); + ok(ret == 1, "Unexpected reference count %ld\n", ret); + + hr = CoCreateInstance(tests[i].class_id, NULL, CLSCTX_INPROC_SERVER, + &IID_IMFByteStreamHandler, (void**)&byte_stream_handler); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + callback = create_test_callback(&test_async_callback_result_vtbl); + + hr = IMFByteStreamHandler_BeginCreateObject(byte_stream_handler, byte_stream, + filename, MF_RESOLUTION_MEDIASOURCE, NULL, NULL, &callback->IMFAsyncCallback_iface, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + /* we don't test the reference count here as it fluctuates with time + * and implementation which are details we don't need/want to test + */ + IMFByteStream_Release(byte_stream); + + if (WaitForSingleObject(callback->event, tests[i].timeout) == WAIT_TIMEOUT) + { + ok(0, "timeout\n"); + IMFAsyncCallback_Release(&callback->IMFAsyncCallback_iface); + IMFByteStreamHandler_Release(byte_stream_handler); + goto next_test; + } + + hr = IMFByteStreamHandler_EndCreateObject(byte_stream_handler, callback->result, + &object_type, (IUnknown**)&source); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(object_type == MF_OBJECT_MEDIASOURCE, "Unexpected object_type %d\n", object_type); + + Sleep(10); /* To ensure reference count is 0, we sleep */ + ret = IMFAsyncResult_Release(callback->result); + ok(ret == 0, "Unexpected reference count %ld\n", ret); + + ret = IMFAsyncCallback_Release(&callback->IMFAsyncCallback_iface); + ok(ret == 0, "Unexpected reference count %ld\n", ret); + + ret = IMFByteStreamHandler_Release(byte_stream_handler); + ok(ret == 0, "Unexpected reference count %ld\n", ret); + + hr = IMFMediaSource_CreatePresentationDescriptor(source, &pd); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + PropVariantInit(&value); + hr = IMFMediaSource_Start(source, pd, NULL, &value); + + hr = IMFMediaSource_GetEvent(source, 0, &event); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFMediaEvent_GetType(event, &met); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(met == MENewStream, "Got unexpected event %ld\n", met); + + hr = IMFMediaEvent_GetValue(event, &value); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(value.vt == VT_UNKNOWN, "Unexpected value type %d\n", value.vt); + + IMFMediaEvent_Release(event); + + hr = IUnknown_QueryInterface(value.punkVal, &IID_IMFMediaStream, (void**)&stream); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = PropVariantClear(&value); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFMediaStream_GetEvent(stream, 0, &event); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFMediaEvent_GetType(event, &met); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(met == MEStreamStarted, "Got unexpected event %ld\n", met); + + IMFMediaEvent_Release(event); + + hr = IMFMediaSource_GetEvent(source, 0, &event); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFMediaEvent_GetType(event, &met); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(met == MESourceStarted, "Got unexpected event %ld\n", met); + + IMFMediaEvent_Release(event); + + for (j = 0; j < ARRAYSIZE(tests[i].expected); j++) + { + winetest_push_context("sample %d", j); + + expected = tests[i].expected + j; + + /* Request a media sample */ + hr = IMFMediaStream_RequestSample(stream, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFMediaStream_GetEvent(stream, 0, &event); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFMediaEvent_GetType(event, &met); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(met == MEMediaSample, "Got unexpected event %ld\n", met); + + if (met == MEMediaSample) + { + hr = IMFMediaEvent_GetValue(event, &value); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(value.vt == VT_UNKNOWN, "Unexpected value type %d\n", value.vt); + + hr = IUnknown_QueryInterface(value.punkVal, &IID_IMFSample, (void**)&sample); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = PropVariantClear(&value); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + time = -1; + hr = IMFSample_GetSampleTime(sample, &time); + ok(hr == S_OK, "Got unexpected hr %#lx when requesting sample time, expected S_OK.\n", hr); + todo_wine_if(expected->todo & TIME) + ok(time == expected->time, "Unexpected sample time %I64d, expected %I64d\n", time, expected->time); + + duration = -1; + hr = IMFSample_GetSampleDuration(sample, &duration); + todo_wine_if(expected->todo & DURATION_HR) + ok(hr == expected->duration_hr, + "Got hr %#lx when requesting sample duration, expected %#lx.\n", hr, expected->duration_hr); + if (expected->duration_hr == S_OK) + todo_wine_if(expected->todo & DURATION_VALUE) + ok(duration == expected->duration, + "Unexpected sample duration %I64d, expected %I64d\n", duration, expected->duration); + dts = -1; + hr = IMFSample_GetUINT64(sample, &MFSampleExtension_DecodeTimestamp, &dts); + todo_wine_if(expected->todo & DTS_HR) + ok(hr == expected->dts_hr, + "Got unexpected hr %#lx when requesting DTS, expected %#lx.\n", hr, expected->dts_hr); + if (expected->dts_hr == S_OK) + todo_wine_if(expected->todo & DTS_VALUE) + ok(dts == expected->dts, "Unexpected sample dts %I64d, expected %I64d\n", dts, expected->dts); + + hr = IMFSample_GetBufferCount(sample, &buffer_count); + ok(hr == S_OK, "Got unexpected hr %#lx when requesting buffer count, expected S_OK.\n", hr); + todo_wine_if(expected->todo & BUFFER_COUNT) + ok(buffer_count == expected->buffer_count, "Unexpected buffer count %ld, expected %ld\n", buffer_count, expected->buffer_count); + hr = IMFSample_GetTotalLength(sample, &length); + ok(hr == S_OK, "Got unexpected hr %#lx when requesting total length, expected S_OK.\n", hr); + todo_wine_if(expected->todo & LENGTH) + ok(length == expected->length, "Unexpected buffer length %ld, expected %ld\n", length, expected->length); + + IMFSample_Release(sample); + } + + IMFMediaEvent_Release(event); + + winetest_pop_context(); + } + + IMFMediaStream_Release(stream); + + hr = IMFMediaSource_Shutdown(source); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ret = IMFMediaSource_Release(source); + ok(ret == 0, "Unexpected reference count %ld\n", ret); + +next_test: + ret = DeleteFileW(filename); + ok(ret, "Failed to delete %s, error %lu.\n", debugstr_w(filename), GetLastError()); + + winetest_pop_context(); + } + + hr = MFShutdown(); + ok(hr == S_OK, "Failed to shut down, hr %#lx.\n", hr); +} + START_TEST(mfplat) { char **argv; @@ -13709,6 +14020,7 @@ START_TEST(mfplat) test_MFInitMediaTypeFromAMMediaType(); test_MFCreatePathFromURL(); test_2dbuffer_copy(); + test_ByteStreamOutput();
CoUninitialize(); }
From: Brendan McGrath bmcgrath@codeweavers.com
--- dlls/mfplat/tests/mfplat.c | 18 +++++++++++++++++- dlls/mfplat/tests/resource.rc | 4 ++++ dlls/mfplat/tests/test-mp3.mp3 | Bin 0 -> 47455 bytes 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 dlls/mfplat/tests/test-mp3.mp3
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 107a795753b..e3f90c65080 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -89,6 +89,7 @@ extern const CLSID CLSID_FileSchemePlugin; extern const CLSID CLSID_AsfByteStreamPlugin; extern const CLSID CLSID_MPEG4ByteStreamHandlerPlugin; extern const CLSID CLSID_AVIByteStreamPlugin; +extern const CLSID CLSID_MP3ByteStreamPlugin;
DEFINE_MEDIATYPE_GUID(MEDIASUBTYPE_Base,0); DEFINE_GUID(MEDIASUBTYPE_ABGR32,D3DFMT_A8B8G8R8,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70); @@ -13624,6 +13625,7 @@ static void test_ByteStreamOutput(void) static const WCHAR asf_mime_type[] = L"video/x-ms-wmv"; static const WCHAR mp4_mime_type[] = L"video/mp4"; static const WCHAR avi_mime_type[] = L"video/avi"; + static const WCHAR mp3_mime_type[] = L"audio/mp3";
struct timestamps { @@ -13703,6 +13705,20 @@ static void test_ByteStreamOutput(void) { 1333333, S_OK, 333333, MF_E_ATTRIBUTENOTFOUND, 0, 1, 1152 }, }, }, + { + "mp3", + L"test-mp3.mp3", + mp3_mime_type, + &CLSID_MP3ByteStreamPlugin, + 1000, + { + { 0, S_OK, 18808128, MF_E_ATTRIBUTENOTFOUND, 0, 1, 8141, DURATION_VALUE | LENGTH }, + { 18808128, S_OK, 20375472, MF_E_ATTRIBUTENOTFOUND, 0, 1, 8112, TIME | DURATION_VALUE | LENGTH }, + { 39183600, S_OK, 20375472, MF_E_ATTRIBUTENOTFOUND, 0, 1, 8112, TIME | DURATION_VALUE | LENGTH }, + { 59559072, S_OK, 20375472, MF_E_ATTRIBUTENOTFOUND, 0, 1, 8112, TIME | DURATION_VALUE | LENGTH }, + { 79934544, S_OK, 20375472, MF_E_ATTRIBUTENOTFOUND, 0, 1, 8112, TIME | DURATION_VALUE | LENGTH }, + }, + }, };
IMFByteStreamHandler *byte_stream_handler; @@ -13904,7 +13920,7 @@ static void test_ByteStreamOutput(void) ok(hr == S_OK, "Got hr %#lx.\n", hr);
ret = IMFMediaSource_Release(source); - ok(ret == 0, "Unexpected reference count %ld\n", ret); + ok(ret <= 1, "Unexpected reference count %ld\n", ret);
next_test: ret = DeleteFileW(filename); diff --git a/dlls/mfplat/tests/resource.rc b/dlls/mfplat/tests/resource.rc index 6029716ca1b..53a6e06f4f4 100644 --- a/dlls/mfplat/tests/resource.rc +++ b/dlls/mfplat/tests/resource.rc @@ -46,3 +46,7 @@ test-mp3.mp4 RCDATA test-mp3.mp4 /* gst-launch-1.0 videotestsrc num-buffers=5 ! video/x-raw,format=I420,width=32,height=24 ! avimux ! filesink location=test-i420.avi */ /* @makedep: test-i420.avi */ test-i420.avi RCDATA test-i420.avi + +/* gst-launch-1.0 audiotestsrc num-buffers=500 ! audioconvert ! lamemp3enc ! filesink location=test-mp3.mp3 */ +/* @makedep: test-mp3.mp3 */ +test-mp3.mp3 RCDATA test-mp3.mp3 diff --git a/dlls/mfplat/tests/test-mp3.mp3 b/dlls/mfplat/tests/test-mp3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ff2032ec392165c9c50415c6eaf364d0791dc0cb GIT binary patch literal 47455 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 MJuNT(zkHp)0sf<-wEzGB
literal 0 HcmV?d00001
Given MR !7569 has been merged, this one no longer needs to be in draft.