Module: wine Branch: master Commit: cfbcd014c67e440d5a6c239cdd8333823604c7da URL: https://gitlab.winehq.org/wine/wine/-/commit/cfbcd014c67e440d5a6c239cdd83338...
Author: Ziqing Hui zhui@codeweavers.com Date: Mon May 15 11:41:15 2023 +0800
mfreadwrite/tests: Add tests for MP4 sink writer.
---
dlls/mfreadwrite/tests/mfplat.c | 82 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-)
diff --git a/dlls/mfreadwrite/tests/mfplat.c b/dlls/mfreadwrite/tests/mfplat.c index 41b2a033a59..3b54aa4ff4c 100644 --- a/dlls/mfreadwrite/tests/mfplat.c +++ b/dlls/mfreadwrite/tests/mfplat.c @@ -1415,7 +1415,7 @@ done: DestroyWindow(window); }
-static void test_sink_writer(void) +static void test_sink_writer_create(void) { IMFSinkWriter *writer; HRESULT hr; @@ -1437,6 +1437,83 @@ static void test_sink_writer(void) ok(!writer, "Unexpected pointer %p.\n", writer); }
+static void test_sink_writer_mp4(void) +{ + WCHAR tmp_file[MAX_PATH]; + IMFSinkWriter *writer; + IMFByteStream *stream; + IMFAttributes *attr; + IMFMediaSink *sink; + HRESULT hr; + + GetTempPathW(ARRAY_SIZE(tmp_file), tmp_file); + wcscat(tmp_file, L"tmp.mp4"); + + hr = MFCreateAttributes(&attr, 1); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFAttributes_SetGUID(attr, &MF_TRANSCODE_CONTAINERTYPE, &MFTranscodeContainerType_MPEG4); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFCreateTempFile(MF_ACCESSMODE_READWRITE, MF_OPENMODE_DELETE_IF_EXIST, MF_FILEFLAGS_NONE, &stream); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + /* Test MFCreateSinkWriterFromURL. */ + writer = (void *)0xdeadbeef; + hr = MFCreateSinkWriterFromURL(NULL, NULL, attr, &writer); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + ok(!writer, "Unexpected pointer %p.\n", writer); + + writer = (void *)0xdeadbeef; + hr = MFCreateSinkWriterFromURL(NULL, stream, NULL, &writer); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + ok(!writer, "Unexpected pointer %p.\n", writer); + + hr = MFCreateSinkWriterFromURL(NULL, stream, attr, &writer); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr == S_OK) + IMFSinkWriter_Release(writer); + + hr = MFCreateSinkWriterFromURL(tmp_file, NULL, NULL, &writer); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr == S_OK) + IMFSinkWriter_Release(writer); + + hr = MFCreateSinkWriterFromURL(tmp_file, NULL, attr, &writer); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr == S_OK) + IMFSinkWriter_Release(writer); + + hr = MFCreateSinkWriterFromURL(tmp_file, stream, NULL, &writer); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr == S_OK) + IMFSinkWriter_Release(writer); + + hr = MFCreateSinkWriterFromURL(tmp_file, stream, attr, &writer); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (hr != S_OK) + { + IMFByteStream_Release(stream); + IMFAttributes_Release(attr); + return; + } + + /* Test GetServiceForStream. */ + sink = (void *)0xdeadbeef; + hr = IMFSinkWriter_GetServiceForStream(writer, MF_SINK_WRITER_MEDIASINK, + &GUID_NULL, &IID_IMFMediaSink, (void **)&sink); + ok(hr == MF_E_UNSUPPORTED_SERVICE, "Unexpected hr %#lx.\n", hr); + ok(!sink, "Unexpected pointer %p.\n", sink); + + DeleteFileW(tmp_file); + IMFSinkWriter_Release(writer); + IMFByteStream_Release(stream); + IMFAttributes_Release(attr); +} + START_TEST(mfplat) { HRESULT hr; @@ -1451,7 +1528,8 @@ START_TEST(mfplat) test_source_reader("test.mp4", true); test_source_reader_from_media_source(); test_reader_d3d9(); - test_sink_writer(); + test_sink_writer_create(); + test_sink_writer_mp4();
hr = MFShutdown(); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);