[PATCH 0/1] MR2816: mf/tests: Add tests for MPEG4 media sink.
Before win10 1809(including win7,win8,win10 1507): * mpeg4 media sink is fixed stream. * sink_empty cannot be created. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816
From: Ziqing Hui <zhui(a)codeweavers.com> --- dlls/mf/tests/mf.c | 297 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index e8d7252aa3f..5744c4d9637 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -6704,6 +6704,302 @@ static void test_MFRequireProtectedEnvironment(void) ok(ref == 0, "Release returned %ld\n", ref); } +static void test_mpeg4_media_sink(void) +{ + IMFMediaSink *sink, *sink2, *sink_audio, *sink_video, *sink_empty = NULL; + IMFByteStream *bytestream, *bytestream_audio, *bytestream_video, *bytestream_empty; + DWORD id, count, flags, width = 16, height = 16, fps = 10; + IMFMediaType *audio_type, *video_type, *media_type; + IMFMediaTypeHandler *type_handler = NULL; + IMFPresentationClock *clock; + IMFStreamSink *stream_sink; + HRESULT hr; + GUID guid; + + /* Test sink creation. */ + hr = MFCreateMediaType(&audio_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFCreateMediaType(&video_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaType_SetGUID(audio_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetGUID(audio_type, &MF_MT_SUBTYPE, &MFAudioFormat_PCM); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetUINT32(audio_type, &MF_MT_AUDIO_NUM_CHANNELS, 2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetUINT32(audio_type, &MF_MT_AUDIO_SAMPLES_PER_SECOND, 48000); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetUINT32(audio_type, &MF_MT_AUDIO_BITS_PER_SAMPLE, 8); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaType_SetGUID(video_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetGUID(video_type, &MF_MT_SUBTYPE, &MFVideoFormat_RGB24); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, ((UINT64)width << 32) | height); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_RATE, ((UINT64)fps << 32) | 1); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFCreateTempFile(MF_ACCESSMODE_WRITE, MF_OPENMODE_DELETE_IF_EXIST, 0, &bytestream_audio); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFCreateTempFile(MF_ACCESSMODE_WRITE, MF_OPENMODE_DELETE_IF_EXIST, 0, &bytestream_video); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFCreateTempFile(MF_ACCESSMODE_WRITE, MF_OPENMODE_DELETE_IF_EXIST, 0, &bytestream_empty); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = MFCreateTempFile(MF_ACCESSMODE_WRITE, MF_OPENMODE_DELETE_IF_EXIST, 0, &bytestream); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFCreateMPEG4MediaSink(NULL, NULL, NULL, NULL); + todo_wine + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + + sink = (void *)0xdeadbeef; + hr = MFCreateMPEG4MediaSink(NULL, NULL, NULL, &sink); + todo_wine + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + ok(sink == (void *)0xdeadbeef, "Unexpected pointer %p.\n", sink); + sink = NULL; + + hr = MFCreateMPEG4MediaSink(bytestream_empty, NULL, NULL, &sink_empty); + todo_wine + ok(hr == S_OK || broken(hr == E_INVALIDARG), "Unexpected hr %#lx.\n", hr); + + hr = MFCreateMPEG4MediaSink(bytestream_audio, NULL, audio_type, &sink_audio); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFCreateMPEG4MediaSink(bytestream_video, video_type, NULL, &sink_video); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFCreateMPEG4MediaSink(bytestream, video_type, audio_type, &sink); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + if (!sink) + { + IMFByteStream_Release(bytestream); + IMFByteStream_Release(bytestream_empty); + IMFByteStream_Release(bytestream_video); + IMFByteStream_Release(bytestream_audio); + IMFMediaType_Release(video_type); + IMFMediaType_Release(audio_type); + return; + } + + /* Test sink. */ + hr = IMFMediaSink_GetCharacteristics(sink, &flags); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(flags == MEDIASINK_RATELESS || broken(flags == (MEDIASINK_RATELESS | MEDIASINK_FIXED_STREAMS)), + "Unexpected flags %#lx.\n", flags); + + check_interface(sink, &IID_IMFMediaEventGenerator, TRUE); + check_interface(sink, &IID_IMFFinalizableMediaSink, TRUE); + check_interface(sink, &IID_IMFClockStateSink, TRUE); + check_interface(sink, &IID_IMFGetService, TRUE); + + /* Test sink stream count. */ + hr = IMFMediaSink_GetStreamSinkCount(sink, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaSink_GetStreamSinkCount(sink, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(count == 2, "Unexpected count %lu.\n", count); + + hr = IMFMediaSink_GetStreamSinkCount(sink_audio, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(count == 1, "Unexpected count %lu.\n", count); + + hr = IMFMediaSink_GetStreamSinkCount(sink_video, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(count == 1, "Unexpected count %lu.\n", count); + + if (sink_empty) + { + hr = IMFMediaSink_GetStreamSinkCount(sink_empty, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(count == 0, "Unexpected count %lu.\n", count); + } + + /* Test GetStreamSinkByIndex. */ + hr = IMFMediaSink_GetStreamSinkByIndex(sink_video, 0, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFStreamSink_GetIdentifier(stream_sink, &id); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(id == 1, "Unexpected id %lu.\n", id); + IMFStreamSink_Release(stream_sink); + + hr = IMFMediaSink_GetStreamSinkByIndex(sink_audio, 0, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFStreamSink_GetIdentifier(stream_sink, &id); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(id == 2, "Unexpected id %lu.\n", id); + IMFStreamSink_Release(stream_sink); + + stream_sink = (void *)0xdeadbeef; + hr = IMFMediaSink_GetStreamSinkByIndex(sink_audio, 1, &stream_sink); + ok(hr == MF_E_INVALIDINDEX, "Unexpected hr %#lx.\n", hr); + ok(stream_sink == (void *)0xdeadbeef, "Unexpected pointer %p.\n", stream_sink); + + stream_sink = (void *)0xdeadbeef; + hr = IMFMediaSink_GetStreamSinkByIndex(sink_video, 1, &stream_sink); + ok(hr == MF_E_INVALIDINDEX, "Unexpected hr %#lx.\n", hr); + ok(stream_sink == (void *)0xdeadbeef, "Unexpected pointer %p.\n", stream_sink); + + /* Test GetStreamSinkById. */ + hr = IMFMediaSink_GetStreamSinkById(sink, 1, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + hr = IMFMediaSink_GetStreamSinkById(sink, 2, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + hr = IMFMediaSink_GetStreamSinkById(sink_video, 1, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_GetStreamSinkById(sink_audio, 2, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + IMFStreamSink_Release(stream_sink); + + stream_sink = (void *)0xdeadbeef; + hr = IMFMediaSink_GetStreamSinkById(sink_video, 2, &stream_sink); + ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#lx.\n", hr); + ok(stream_sink == (void *)0xdeadbeef, "Unexpected pointer %p.\n", stream_sink); + + stream_sink = (void *)0xdeadbeef; + hr = IMFMediaSink_GetStreamSinkById(sink_audio, 1, &stream_sink); + ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#lx.\n", hr); + ok(stream_sink == (void *)0xdeadbeef, "Unexpected pointer %p.\n", stream_sink); + + /* Test adding and removing stream sink. */ + if (!(flags & MEDIASINK_FIXED_STREAMS)) + { + hr = IMFMediaSink_AddStreamSink(sink, 123, video_type, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + hr = IMFMediaSink_GetStreamSinkByIndex(sink, 2, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFStreamSink_GetIdentifier(stream_sink, &id); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(id == 123, "Unexpected id %lu.\n", id); + IMFStreamSink_Release(stream_sink); + + stream_sink = (void *)0xdeadbeef; + hr = IMFMediaSink_AddStreamSink(sink, 1, audio_type, &stream_sink); + ok(hr == MF_E_STREAMSINK_EXISTS, "Unexpected hr %#lx.\n", hr); + ok(!stream_sink, "Unexpected pointer %p.\n", stream_sink); + + hr = IMFMediaSink_RemoveStreamSink(sink, 1); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_AddStreamSink(sink, 1, audio_type, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + hr = IMFMediaSink_GetStreamSinkByIndex(sink, 2, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFStreamSink_GetIdentifier(stream_sink, &id); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(id == 1, "Unexpected id %lu.\n", id); + IMFStreamSink_Release(stream_sink); + + hr = IMFMediaSink_RemoveStreamSink(sink, 123); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_RemoveStreamSink(sink, 123); + ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#lx.\n", hr); + } + + /* Test PresentationClock. */ + hr = MFCreatePresentationClock(&clock); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_SetPresentationClock(sink, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_SetPresentationClock(sink, clock); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFPresentationClock_Release(clock); + + /* Test stream. */ + hr = IMFMediaSink_GetStreamSinkByIndex(sink_audio, 0, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFStreamSink_GetMediaSink(stream_sink, &sink2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFMediaSink_Release(sink2); + + check_interface(stream_sink, &IID_IMFMediaEventGenerator, TRUE); + check_interface(stream_sink, &IID_IMFMediaTypeHandler, TRUE); + + hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, &type_handler); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaTypeHandler_GetMajorType(type_handler, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaTypeHandler_GetMajorType(type_handler, &guid); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(IsEqualGUID(&guid, &MFMediaType_Audio), "Unexpected major type.\n"); + + hr = IMFMediaTypeHandler_GetMediaTypeCount(type_handler, &count); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(count == 1, "Unexpected count %lu.\n", count); + + hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, &media_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + if (SUCCEEDED(hr)) + { + hr = IMFMediaType_SetUINT32(media_type, &MF_MT_AUDIO_NUM_CHANNELS, 1); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaTypeHandler_SetCurrentMediaType(type_handler, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaTypeHandler_SetCurrentMediaType(type_handler, media_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + IMFMediaType_Release(media_type); + } + + /* Test shutdown state. */ + hr = IMFMediaSink_Shutdown(sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_Shutdown(sink); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); + + hr = IMFStreamSink_GetMediaSink(stream_sink, &sink2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFMediaSink_Release(sink2); + + hr = IMFStreamSink_GetIdentifier(stream_sink, &id); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaTypeHandler_GetMajorType(type_handler, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaTypeHandler_GetMajorType(type_handler, &guid); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + IMFStreamSink_Release(stream_sink); + + hr = IMFMediaSink_AddStreamSink(sink, 0, audio_type, &stream_sink); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_GetStreamSinkByIndex(sink, 0, &stream_sink); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_GetStreamSinkById(sink, 0, &stream_sink); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_GetCharacteristics(sink, &flags); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); + + IMFMediaTypeHandler_Release(type_handler); + IMFMediaSink_Release(sink); + IMFMediaSink_Release(sink_video); + IMFMediaSink_Release(sink_audio); + if (sink_empty) + IMFMediaSink_Release(sink_empty); + IMFByteStream_Release(bytestream); + IMFByteStream_Release(bytestream_empty); + IMFByteStream_Release(bytestream_video); + IMFByteStream_Release(bytestream_audio); + IMFMediaType_Release(video_type); + IMFMediaType_Release(audio_type); +} + START_TEST(mf) { init_functions(); @@ -6737,4 +7033,5 @@ START_TEST(mf) test_MFGetSupportedSchemes(); test_MFGetTopoNodeCurrentType(); test_MFRequireProtectedEnvironment(); + test_mpeg4_media_sink(); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/2816
Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=132692 Your paranoid android. === w7u_2qxl (32 bit report) === mf: mf.c:2353: Test failed: WaitForSingleObject returned 258 mf.c:2353: Test failed: Unexpected hr 0xd36d8. mf.c:4970: Test failed: WaitForSingleObject returned 0x102 0130:mf: unhandled exception c0000094 at 0042E1DB === debian11 (32 bit zh:CN report) === mf: mf.c:5005: Test failed: WaitForSingleObject returned 258 mf.c:5005: Test failed: Unexpected hr 0xd36d8. Unhandled exception: page fault on execute access to 0x00000000 in 32-bit code (0x00000000).
On Mon May 15 03:37:19 2023 +0000, **** wrote:
Marvin replied on the mailing list: ``` Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=132692 Your paranoid android. === w7u_2qxl (32 bit report) === mf: mf.c:2353: Test failed: WaitForSingleObject returned 258 mf.c:2353: Test failed: Unexpected hr 0xd36d8. mf.c:4970: Test failed: WaitForSingleObject returned 0x102 0130:mf: unhandled exception c0000094 at 0042E1DB === debian11 (32 bit zh:CN report) === mf: mf.c:5005: Test failed: WaitForSingleObject returned 258 mf.c:5005: Test failed: Unexpected hr 0xd36d8. Unhandled exception: page fault on execute access to 0x00000000 in 32-bit code (0x00000000). ``` I think the test failure is not related to this patch.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32736
Nikolay Sivov (@nsivov) commented about dlls/mf/tests/mf.c:
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFCreateMPEG4MediaSink(bytestream, video_type, audio_type, &sink); + todo_wine + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + if (!sink) + { + IMFByteStream_Release(bytestream); + IMFByteStream_Release(bytestream_empty); + IMFByteStream_Release(bytestream_video); + IMFByteStream_Release(bytestream_audio); + IMFMediaType_Release(video_type); + IMFMediaType_Release(audio_type); + return; + } This will leak some objects.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32755
Nikolay Sivov (@nsivov) commented about dlls/mf/tests/mf.c:
+ if (!sink) + { + IMFByteStream_Release(bytestream); + IMFByteStream_Release(bytestream_empty); + IMFByteStream_Release(bytestream_video); + IMFByteStream_Release(bytestream_audio); + IMFMediaType_Release(video_type); + IMFMediaType_Release(audio_type); + return; + } + + /* Test sink. */ + hr = IMFMediaSink_GetCharacteristics(sink, &flags); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(flags == MEDIASINK_RATELESS || broken(flags == (MEDIASINK_RATELESS | MEDIASINK_FIXED_STREAMS)), + "Unexpected flags %#lx.\n", flags); Why is that broken() ?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32756
Nikolay Sivov (@nsivov) commented about dlls/mf/tests/mf.c:
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = MFCreateMPEG4MediaSink(NULL, NULL, NULL, NULL); + todo_wine + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + + sink = (void *)0xdeadbeef; + hr = MFCreateMPEG4MediaSink(NULL, NULL, NULL, &sink); + todo_wine + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + ok(sink == (void *)0xdeadbeef, "Unexpected pointer %p.\n", sink); + sink = NULL; + + hr = MFCreateMPEG4MediaSink(bytestream_empty, NULL, NULL, &sink_empty); + todo_wine + ok(hr == S_OK || broken(hr == E_INVALIDARG), "Unexpected hr %#lx.\n", hr); When does it fail? If it's current win10+ behaviour to expect media types, just keep this broken, no need to test it further.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32754
Nikolay Sivov (@nsivov) commented about dlls/mf/tests/mf.c:
+ + hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, &media_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + if (SUCCEEDED(hr)) + { + hr = IMFMediaType_SetUINT32(media_type, &MF_MT_AUDIO_NUM_CHANNELS, 1); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaTypeHandler_SetCurrentMediaType(type_handler, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaTypeHandler_SetCurrentMediaType(type_handler, media_type); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + IMFMediaType_Release(media_type); + } This might as well be unconditional.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32758
Nikolay Sivov (@nsivov) commented about dlls/mf/tests/mf.c:
+ ok(hr == MF_E_INVALIDINDEX, "Unexpected hr %#lx.\n", hr); + ok(stream_sink == (void *)0xdeadbeef, "Unexpected pointer %p.\n", stream_sink); + + /* Test GetStreamSinkById. */ + hr = IMFMediaSink_GetStreamSinkById(sink, 1, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + hr = IMFMediaSink_GetStreamSinkById(sink, 2, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + hr = IMFMediaSink_GetStreamSinkById(sink_video, 1, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSink_GetStreamSinkById(sink_audio, 2, &stream_sink); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFStreamSink_Release(stream_sink); + IMFStreamSink_Release(stream_sink); You'll need to release before it's overwritten again.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32757
On Mon May 15 13:16:16 2023 +0000, Nikolay Sivov wrote:
When does it fail? If it's current win10+ behaviour to expect media types, just keep this broken, no need to test it further. Ah, I see you mentioned that. I'd guess "sink_empty" and non-fixed streams case are related.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32759
On Mon May 15 13:19:43 2023 +0000, Nikolay Sivov wrote:
Ah, I see you mentioned that. I'd guess "sink_empty" and non-fixed streams case are related. yep, empty and fixed streams are related.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2816#note_32952
participants (4)
-
Marvin -
Nikolay Sivov (@nsivov) -
Ziqing Hui -
Ziqing Hui (@zhui)