Module: wine Branch: master Commit: 84b66e153d2ca78ce65126568c99b554bc3ac029 URL: https://source.winehq.org/git/wine.git/?a=commit;h=84b66e153d2ca78ce65126568...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Jan 27 17:37:01 2021 +0300
mfmediaengine: Return full presentation range in GetBuffered().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mfmediaengine/main.c | 17 ++++++++++++++--- dlls/mfmediaengine/tests/mfmediaengine.c | 14 ++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index 0573ea844c1..6f6811ff9ea 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -1152,11 +1152,22 @@ static HRESULT WINAPI media_engine_SetPreload(IMFMediaEngine *iface, MF_MEDIA_EN return S_OK; }
-static HRESULT WINAPI media_engine_GetBuffered(IMFMediaEngine *iface, IMFMediaTimeRange **buffered) +static HRESULT WINAPI media_engine_GetBuffered(IMFMediaEngine *iface, IMFMediaTimeRange **range) { - FIXME("(%p, %p): stub.\n", iface, buffered); + struct media_engine *engine = impl_from_IMFMediaEngine(iface); + HRESULT hr;
- return E_NOTIMPL; + TRACE("%p, %p.\n", iface, range); + + if (FAILED(hr = create_time_range(range))) + return hr; + + EnterCriticalSection(&engine->cs); + if (!isnan(engine->duration)) + hr = IMFMediaTimeRange_AddRange(*range, 0.0, engine->duration); + LeaveCriticalSection(&engine->cs); + + return hr; }
static HRESULT WINAPI media_engine_Load(IMFMediaEngine *iface) diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index 1cc88420568..66984595d3b 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -391,13 +391,27 @@ static void test_Play(void) { struct media_engine_notify notify_impl = {{&media_engine_notify_vtbl}, 1}; IMFMediaEngineNotify *callback = ¬ify_impl.IMFMediaEngineNotify_iface; + IMFMediaTimeRange *range, *range1; IMFMediaEngine *media_engine; LONGLONG pts; + DWORD count; HRESULT hr; BOOL ret;
media_engine = create_media_engine(callback);
+ hr = IMFMediaEngine_GetBuffered(media_engine, &range); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFMediaEngine_GetBuffered(media_engine, &range1); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(range != range1, "Unexpected pointer.\n"); + + count = IMFMediaTimeRange_GetLength(range); + ok(!count, "Unexpected count %u.\n", count); + + IMFMediaTimeRange_Release(range); + IMFMediaTimeRange_Release(range1); + ret = IMFMediaEngine_IsPaused(media_engine); ok(ret, "Unexpected state %d.\n", ret);