[PATCH 2/2] mfmediaengine: Return full presentation range in GetBuffered().
Nikolay Sivov
nsivov at codeweavers.com
Wed Jan 27 08:37:01 CST 2021
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
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);
--
2.29.2
More information about the wine-devel
mailing list