From: Bernhard Kölbl besentv@gmail.com
Otherwise video playback in MfMediaEngine won't have any sound and will get stuck at the end of playback. --- dlls/mf/sar.c | 4 ++++ dlls/mfmediaengine/tests/mfmediaengine.c | 8 +------- 2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/dlls/mf/sar.c b/dlls/mf/sar.c index 84824f954dd..01e0b7af944 100644 --- a/dlls/mf/sar.c +++ b/dlls/mf/sar.c @@ -1688,6 +1688,7 @@ static HRESULT WINAPI audio_renderer_stream_type_handler_SetCurrentMediaType(IMF audio_renderer_preroll(renderer); } } + else WARN("Failed to create audio client, hr %#lx.\n", hr); } else hr = MF_E_INVALIDMEDIATYPE; @@ -1947,6 +1948,9 @@ static HRESULT sar_create_object(IMFAttributes *attributes, void *user_context, if (FAILED(hr = audio_renderer_collect_supported_types(renderer))) goto failed;
+ if (FAILED(hr = audio_renderer_create_audio_client(renderer))) + goto failed; + *obj = (IUnknown *)&renderer->IMFMediaSink_iface;
return S_OK; diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index 4f3bc2920cd..34e62c76cd5 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -1289,12 +1289,6 @@ static void test_playback_on_d3d_device(void) }
current_time = IMFMediaEngine_GetCurrentTime(engine); - /* Workaround for a current bug in Wine, where video playback isn't properly finishing. Break in this case. */ - if (current_time > 4.3) - { - todo_wine ok(0, "Forcefully breaking out of video loop, because video playback is partially broken.\n"); - break; - } ok(current_time < 4.3 && current_time > 0.0, "IMFMediaEngine_GetCurrentTime returned %lf.\n", current_time);
hr = IMFMediaEngine_OnVideoStreamTick(engine, &presentation_time); @@ -1333,7 +1327,7 @@ static void test_playback_on_d3d_device(void) }
hr = IMFMediaEngine_OnVideoStreamTick(engine, &presentation_time); - todo_wine ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr); + ok(hr == S_FALSE, "Unexpected hr %#lx.\n", hr);
done: /* Release MF */