Zebediah Figura : strmbase: Move run_event to the strmbase_renderer structure.

Alexandre Julliard julliard at winehq.org
Thu Mar 11 15:59:34 CST 2021


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

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Wed Mar 10 19:23:35 2021 -0600

strmbase: Move run_event to the strmbase_renderer structure.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/qedit/nullrenderer.c   |  9 +++------
 dlls/quartz/videorenderer.c | 11 +++--------
 dlls/quartz/vmr9.c          | 11 +++--------
 dlls/strmbase/renderer.c    |  2 ++
 include/wine/strmbase.h     |  3 +++
 5 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/dlls/qedit/nullrenderer.c b/dlls/qedit/nullrenderer.c
index 97e3cdbb202..85493da02f1 100644
--- a/dlls/qedit/nullrenderer.c
+++ b/dlls/qedit/nullrenderer.c
@@ -29,7 +29,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(qedit);
 struct null_renderer
 {
     struct strmbase_renderer renderer;
-    HANDLE run_event;
 };
 
 static struct null_renderer *impl_from_strmbase_renderer(struct strmbase_renderer *iface)
@@ -43,7 +42,7 @@ static HRESULT WINAPI NullRenderer_DoRenderSample(struct strmbase_renderer *ifac
 
     if (filter->renderer.filter.state == State_Paused)
     {
-        const HANDLE events[2] = {filter->run_event, filter->renderer.flush_event};
+        const HANDLE events[2] = {filter->renderer.run_event, filter->renderer.flush_event};
 
         SetEvent(filter->renderer.state_event);
         WaitForMultipleObjects(2, events, FALSE, INFINITE);
@@ -62,7 +61,6 @@ static void null_renderer_destroy(struct strmbase_renderer *iface)
 {
     struct null_renderer *filter = impl_from_strmbase_renderer(iface);
 
-    CloseHandle(filter->run_event);
     strmbase_renderer_cleanup(&filter->renderer);
     free(filter);
 }
@@ -70,13 +68,13 @@ static void null_renderer_destroy(struct strmbase_renderer *iface)
 static void null_renderer_start_stream(struct strmbase_renderer *iface)
 {
     struct null_renderer *filter = impl_from_strmbase_renderer(iface);
-    SetEvent(filter->run_event);
+    SetEvent(filter->renderer.run_event);
 }
 
 static void null_renderer_stop_stream(struct strmbase_renderer *iface)
 {
     struct null_renderer *filter = impl_from_strmbase_renderer(iface);
-    ResetEvent(filter->run_event);
+    ResetEvent(filter->renderer.run_event);
 }
 
 static const struct strmbase_renderer_ops renderer_ops =
@@ -96,7 +94,6 @@ HRESULT null_renderer_create(IUnknown *outer, IUnknown **out)
         return E_OUTOFMEMORY;
 
     strmbase_renderer_init(&object->renderer, outer, &CLSID_NullRenderer, L"In", &renderer_ops);
-    object->run_event = CreateEventW(NULL, TRUE, FALSE, NULL);
 
     TRACE("Created null renderer %p.\n", object);
     *out = &object->renderer.filter.IUnknown_inner;
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index ed5774bf484..1da5ad02d7a 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -48,8 +48,6 @@ struct video_renderer
     LONG FullScreenMode;
 
     DWORD saved_style;
-
-    HANDLE run_event;
 };
 
 static inline struct video_renderer *impl_from_video_window(struct video_window *iface)
@@ -106,7 +104,7 @@ static HRESULT WINAPI VideoRenderer_DoRenderSample(struct strmbase_renderer *ifa
 
     if (filter->renderer.filter.state == State_Paused)
     {
-        const HANDLE events[2] = {filter->run_event, filter->renderer.flush_event};
+        const HANDLE events[2] = {filter->renderer.run_event, filter->renderer.flush_event};
 
         SetEvent(filter->renderer.state_event);
         LeaveCriticalSection(&filter->renderer.filter.stream_cs);
@@ -140,7 +138,6 @@ static void video_renderer_destroy(struct strmbase_renderer *iface)
     struct video_renderer *filter = impl_from_strmbase_renderer(iface);
 
     video_window_cleanup(&filter->window);
-    CloseHandle(filter->run_event);
     strmbase_renderer_cleanup(&filter->renderer);
     free(filter);
 
@@ -179,7 +176,7 @@ static void video_renderer_start_stream(struct strmbase_renderer *iface)
 {
     struct video_renderer *filter = impl_from_strmbase_renderer(iface);
 
-    SetEvent(filter->run_event);
+    SetEvent(filter->renderer.run_event);
 }
 
 static void video_renderer_stop_stream(struct strmbase_renderer *iface)
@@ -192,7 +189,7 @@ static void video_renderer_stop_stream(struct strmbase_renderer *iface)
         /* Black it out */
         RedrawWindow(This->window.hwnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE);
 
-    ResetEvent(This->run_event);
+    ResetEvent(This->renderer.run_event);
 }
 
 static void video_renderer_init_stream(struct strmbase_renderer *iface)
@@ -519,8 +516,6 @@ HRESULT video_renderer_create(IUnknown *outer, IUnknown **out)
         return hr;
     }
 
-    object->run_event = CreateEventW(NULL, TRUE, FALSE, NULL);
-
     TRACE("Created video renderer %p.\n", object);
     *out = &object->renderer.filter.IUnknown_inner;
     return S_OK;
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index c748e674081..7e0edc57f61 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -108,8 +108,6 @@ struct quartz_vmr
     LONG VideoWidth;
     LONG VideoHeight;
     VMR9AspectRatioMode aspect_mode;
-
-    HANDLE run_event;
 };
 
 static inline BOOL is_vmr9(const struct quartz_vmr *filter)
@@ -211,7 +209,7 @@ static inline struct quartz_vmr *impl_from_IBaseFilter(IBaseFilter *iface)
 static HRESULT WINAPI VMR9_DoRenderSample(struct strmbase_renderer *iface, IMediaSample *sample)
 {
     struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
-    const HANDLE events[2] = {filter->run_event, filter->renderer.flush_event};
+    const HANDLE events[2] = {filter->renderer.run_event, filter->renderer.flush_event};
     unsigned int data_size, width, depth, src_pitch;
     const BITMAPINFOHEADER *bitmap_header;
     REFERENCE_TIME start_time, end_time;
@@ -486,7 +484,7 @@ static void vmr_start_stream(struct strmbase_renderer *iface)
     struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
 
     IVMRImagePresenter9_StartPresenting(filter->presenter, filter->cookie);
-    SetEvent(filter->run_event);
+    SetEvent(filter->renderer.run_event);
 }
 
 static void vmr_stop_stream(struct strmbase_renderer *iface)
@@ -497,7 +495,7 @@ static void vmr_stop_stream(struct strmbase_renderer *iface)
 
     if (This->renderer.filter.state == State_Running)
         IVMRImagePresenter9_StopPresenting(This->presenter, This->cookie);
-    ResetEvent(This->run_event);
+    ResetEvent(This->renderer.run_event);
 }
 
 static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
@@ -585,7 +583,6 @@ static void vmr_destroy(struct strmbase_renderer *iface)
         filter->allocator_d3d9_dev = NULL;
     }
 
-    CloseHandle(filter->run_event);
     FreeLibrary(filter->hD3d9);
     strmbase_renderer_cleanup(&filter->renderer);
     if (!filter->IVMRSurfaceAllocatorNotify9_refcount)
@@ -2610,8 +2607,6 @@ static HRESULT vmr_create(IUnknown *outer, IUnknown **out, const CLSID *clsid)
         return hr;
     }
 
-    object->run_event = CreateEventW(NULL, TRUE, FALSE, NULL);
-
     object->mixing_prefs = MixerPref9_NoDecimation | MixerPref9_ARAdjustXorY
             | MixerPref9_BiLinearFiltering | MixerPref9_RenderTargetRGB;
 
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index b384ea991d9..0978f7305c8 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -554,6 +554,7 @@ void strmbase_renderer_cleanup(struct strmbase_renderer *filter)
 
     CloseHandle(filter->state_event);
     CloseHandle(filter->advise_event);
+    CloseHandle(filter->run_event);
     CloseHandle(filter->flush_event);
     strmbase_filter_cleanup(&filter->filter);
 }
@@ -573,5 +574,6 @@ void strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer,
 
     filter->state_event = CreateEventW(NULL, TRUE, TRUE, NULL);
     filter->advise_event = CreateEventW(NULL, FALSE, FALSE, NULL);
+    filter->run_event = CreateEventW(NULL, TRUE, FALSE, NULL);
     filter->flush_event = CreateEventW(NULL, TRUE, TRUE, NULL);
 }
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index e902790ecb1..76caf103dee 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -286,6 +286,9 @@ struct strmbase_renderer
     /* Signaled when the sample presentation time occurs. The streaming thread
      * waits for this event in Receive() if applicable. */
     HANDLE advise_event;
+    /* Signaled when the filter is running. The streaming thread waits for this
+     * event in Receive() while paused. */
+    HANDLE run_event;
     /* Signaled when a flush or state change occurs, i.e. anything that needs
      * to immediately unblock the streaming thread. */
     HANDLE flush_event;




More information about the wine-cvs mailing list