[PATCH v7 0/1] MR1522: mfmediaengine: Volume change.
-- v7: mfmediaengine: Pass volume changes to media session. https://gitlab.winehq.org/wine/wine/-/merge_requests/1522
From: Bernhard Kölbl <besentv(a)gmail.com> --- dlls/mfmediaengine/main.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index b2ddc376db8..8f9cb24e74f 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -835,6 +835,24 @@ static void media_engine_get_frame_size(struct media_engine *engine, IMFTopology IMFMediaType_Release(media_type); } +static HRESULT media_engine_apply_volume(struct media_engine *engine) +{ + IMFSimpleAudioVolume *sa_volume; + HRESULT hr; + + if (!engine->session) + return E_FAIL; + + if (FAILED(hr = MFGetService((IUnknown *)engine->session, &MR_POLICY_VOLUME_SERVICE, &IID_IMFSimpleAudioVolume, (void **)&sa_volume))) + return hr; + + hr = IMFSimpleAudioVolume_SetMasterVolume(sa_volume, (float)engine->volume); + + IMFSimpleAudioVolume_Release(sa_volume); + + return hr; +} + static HRESULT WINAPI media_engine_callback_QueryInterface(IMFAsyncCallback *iface, REFIID riid, void **obj) { if (IsEqualIID(riid, &IID_IMFAsyncCallback) || @@ -918,6 +936,8 @@ static HRESULT WINAPI media_engine_session_events_Invoke(IMFAsyncCallback *iface EnterCriticalSection(&engine->cs); + media_engine_apply_volume(engine); + engine->ready_state = MF_MEDIA_ENGINE_READY_HAVE_METADATA; media_engine_get_frame_size(engine, topology); @@ -1288,6 +1308,7 @@ static HRESULT WINAPI media_engine_load_handler_Invoke(IMFAsyncCallback *iface, if (SUCCEEDED(hr)) { engine->network_state = MF_MEDIA_ENGINE_NETWORK_IDLE; + if (start_playback) media_engine_start_playback(engine); } @@ -2009,6 +2030,7 @@ static HRESULT WINAPI media_engine_SetVolume(IMFMediaEngineEx *iface, double vol else if (volume != engine->volume) { engine->volume = volume; + media_engine_apply_volume(engine); IMFMediaEngineNotify_EventNotify(engine->callback, MF_MEDIA_ENGINE_EVENT_VOLUMECHANGE, 0, 0); } LeaveCriticalSection(&engine->cs); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1522
On Mon Nov 28 10:00:12 2022 +0000, Bernhard Kölbl wrote:
changed this line in [version 6 of the diff](/wine/wine/-/merge_requests/1522/diffs?diff_id=21324&start_sha=ba8938c95ac225ef2b6f555a90d5ec33fff8307b#238bb11c24dbacb840d4252cb92aa8ea2d26e240_1271_1270) The more you know.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/1522#note_17631
On Sun Nov 27 09:41:56 2022 +0000, Nikolay Sivov wrote:
I think it's too early to set the volume here. You'll have to wait until topology-set event. I moved it to the topo resolve event function.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/1522#note_17632
participants (1)
-
Bernhard Kölbl