diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index 0c082a87f5f..7053a3afea3 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -59,6 +59,7 @@ enum media_engine_flags { /* MF_MEDIA_ENGINE_CREATEFLAGS_MASK is 0x1f. */ FLAGS_ENGINE_SHUT_DOWN = 0x20, + FLAGS_ENGINE_AUTO_PLAY = 0x40, }; struct media_engine @@ -74,6 +75,14 @@ struct media_engine CRITICAL_SECTION cs; }; +static void media_engine_set_flag(struct media_engine *engine, unsigned int mask, BOOL value) +{ + if (value) + engine->flags |= mask; + else + engine->flags &= ~mask; +} + static inline struct media_engine *impl_from_IMFMediaEngine(IMFMediaEngine *iface) { return CONTAINING_RECORD(iface, struct media_engine, IMFMediaEngine_iface); @@ -306,16 +315,29 @@ static BOOL WINAPI media_engine_IsEnded(IMFMediaEngine *iface) static BOOL WINAPI media_engine_GetAutoPlay(IMFMediaEngine *iface) { - FIXME("(%p): stub.\n", iface); + struct media_engine *engine = impl_from_IMFMediaEngine(iface); + BOOL value; - return FALSE; + TRACE("%p.\n", iface); + + EnterCriticalSection(&engine->cs); + value = !!(engine->flags & FLAGS_ENGINE_AUTO_PLAY); + LeaveCriticalSection(&engine->cs); + + return value; } static HRESULT WINAPI media_engine_SetAutoPlay(IMFMediaEngine *iface, BOOL autoplay) { + struct media_engine *engine = impl_from_IMFMediaEngine(iface); + FIXME("(%p, %d): stub.\n", iface, autoplay); - return E_NOTIMPL; + EnterCriticalSection(&engine->cs); + media_engine_set_flag(engine, FLAGS_ENGINE_AUTO_PLAY, autoplay); + LeaveCriticalSection(&engine->cs); + + return S_OK; } static BOOL WINAPI media_engine_GetLoop(IMFMediaEngine *iface) diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index d3c15566a43..8f6c4ca75bb 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -338,7 +338,6 @@ todo_wine ok(!state, "Unexpected state.\n"); hr = IMFMediaEngine_SetAutoPlay(media_engine, TRUE); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr); state = IMFMediaEngine_GetAutoPlay(media_engine);