Nikolay Sivov : mf: Avoid unnecessary prerolling calls in SAR.

Alexandre Julliard julliard at winehq.org
Wed May 13 16:29:55 CDT 2020


Module: wine
Branch: master
Commit: bd1bfd2c8aaa270e86948a3bec0566382c09f0c2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=bd1bfd2c8aaa270e86948a3bec0566382c09f0c2

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed May 13 16:42:07 2020 +0300

mf: Avoid unnecessary prerolling calls in SAR.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mf/sar.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/dlls/mf/sar.c b/dlls/mf/sar.c
index d5dc0b4f38..66fdf471ad 100644
--- a/dlls/mf/sar.c
+++ b/dlls/mf/sar.c
@@ -41,6 +41,7 @@ enum stream_state
 enum audio_renderer_flags
 {
     SAR_SHUT_DOWN = 0x1,
+    SAR_PREROLLED = 0x2,
 };
 
 struct audio_renderer
@@ -179,6 +180,7 @@ static void audio_renderer_release_audio_client(struct audio_renderer *renderer)
     if (renderer->audio_volume)
         ISimpleAudioVolume_Release(renderer->audio_volume);
     renderer->audio_volume = NULL;
+    renderer->flags &= ~SAR_PREROLLED;
 }
 
 static ULONG WINAPI audio_renderer_sink_Release(IMFMediaSink *iface)
@@ -409,10 +411,14 @@ static const IMFMediaSinkVtbl audio_renderer_sink_vtbl =
 
 static void audio_renderer_preroll(struct audio_renderer *renderer)
 {
-    int i;
+    unsigned int i;
+
+    if (renderer->flags & SAR_PREROLLED)
+        return;
 
     for (i = 0; i < 2; ++i)
         IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkRequestSample, &GUID_NULL, S_OK, NULL);
+    renderer->flags |= SAR_PREROLLED;
 }
 
 static HRESULT WINAPI audio_renderer_preroll_QueryInterface(IMFMediaSinkPreroll *iface, REFIID riid, void **obj)
@@ -586,6 +592,7 @@ static HRESULT WINAPI audio_renderer_clock_sink_OnClockStop(IMFClockStateSink *i
             else
                 WARN("Failed to stop audio client, hr %#x.\n", hr);
             renderer->state = STREAM_STATE_STOPPED;
+            renderer->flags &= ~SAR_PREROLLED;
         }
     }
     else




More information about the wine-cvs mailing list