[PATCH 4/5] strmbase: Move strmbase_renderer.csRenderLock into the strmbase_filter structure.

Zebediah Figura z.figura12 at gmail.com
Mon Jan 18 21:57:20 CST 2021


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/quartz/videorenderer.c | 16 ++++++++--------
 dlls/quartz/vmr9.c          | 10 +++++-----
 dlls/strmbase/filter.c      |  6 ++++++
 dlls/strmbase/renderer.c    | 19 +++++++------------
 include/wine/strmbase.h     |  2 +-
 5 files changed, 27 insertions(+), 26 deletions(-)

diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index 2ad479a6301..a925340a676 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -112,9 +112,9 @@ static HRESULT WINAPI VideoRenderer_DoRenderSample(struct strmbase_renderer *ifa
         filter->current_sample = pSample;
 
         SetEvent(filter->renderer.state_event);
-        LeaveCriticalSection(&filter->renderer.csRenderLock);
+        LeaveCriticalSection(&filter->renderer.filter.stream_cs);
         WaitForMultipleObjects(2, events, FALSE, INFINITE);
-        EnterCriticalSection(&filter->renderer.csRenderLock);
+        EnterCriticalSection(&filter->renderer.filter.stream_cs);
 
         filter->current_sample = NULL;
     }
@@ -258,33 +258,33 @@ static HRESULT video_renderer_get_current_image(struct video_window *iface, LONG
     size_t image_size;
     BYTE *sample_data;
 
-    EnterCriticalSection(&filter->renderer.csRenderLock);
+    EnterCriticalSection(&filter->renderer.filter.stream_cs);
 
     bih = get_bitmap_header(&filter->renderer.sink.pin.mt);
     image_size = bih->biWidth * bih->biHeight * bih->biBitCount / 8;
 
     if (!image)
     {
-        LeaveCriticalSection(&filter->renderer.csRenderLock);
+        LeaveCriticalSection(&filter->renderer.filter.stream_cs);
         *size = sizeof(BITMAPINFOHEADER) + image_size;
         return S_OK;
     }
 
     if (filter->renderer.filter.state != State_Paused)
     {
-        LeaveCriticalSection(&filter->renderer.csRenderLock);
+        LeaveCriticalSection(&filter->renderer.filter.stream_cs);
         return VFW_E_NOT_PAUSED;
     }
 
     if (!filter->current_sample)
     {
-        LeaveCriticalSection(&filter->renderer.csRenderLock);
+        LeaveCriticalSection(&filter->renderer.filter.stream_cs);
         return E_UNEXPECTED;
     }
 
     if (*size < sizeof(BITMAPINFOHEADER) + image_size)
     {
-        LeaveCriticalSection(&filter->renderer.csRenderLock);
+        LeaveCriticalSection(&filter->renderer.filter.stream_cs);
         return E_OUTOFMEMORY;
     }
 
@@ -292,7 +292,7 @@ static HRESULT video_renderer_get_current_image(struct video_window *iface, LONG
     IMediaSample_GetPointer(filter->current_sample, &sample_data);
     memcpy((char *)image + sizeof(BITMAPINFOHEADER), sample_data, image_size);
 
-    LeaveCriticalSection(&filter->renderer.csRenderLock);
+    LeaveCriticalSection(&filter->renderer.filter.stream_cs);
     return S_OK;
 }
 
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index 37bb09b399b..57b219a6d26 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -317,9 +317,9 @@ static HRESULT WINAPI VMR9_DoRenderSample(struct strmbase_renderer *iface, IMedi
     if (filter->renderer.filter.state == State_Paused)
     {
         SetEvent(filter->renderer.state_event);
-        LeaveCriticalSection(&filter->renderer.csRenderLock);
+        LeaveCriticalSection(&filter->renderer.filter.stream_cs);
         WaitForMultipleObjects(2, events, FALSE, INFINITE);
-        EnterCriticalSection(&filter->renderer.csRenderLock);
+        EnterCriticalSection(&filter->renderer.filter.stream_cs);
     }
 
     return hr;
@@ -687,7 +687,7 @@ static HRESULT vmr_get_current_image(struct video_window *iface, LONG *size, LON
     char *dst;
     HRESULT hr;
 
-    EnterCriticalSection(&filter->renderer.csRenderLock);
+    EnterCriticalSection(&filter->renderer.filter.stream_cs);
     device = filter->allocator_d3d9_dev;
 
     bih = *get_bitmap_header(&filter->renderer.sink.pin.mt);
@@ -696,7 +696,7 @@ static HRESULT vmr_get_current_image(struct video_window *iface, LONG *size, LON
     if (!image)
     {
         *size = sizeof(BITMAPINFOHEADER) + bih.biSizeImage;
-        LeaveCriticalSection(&filter->renderer.csRenderLock);
+        LeaveCriticalSection(&filter->renderer.filter.stream_cs);
         return S_OK;
     }
 
@@ -732,7 +732,7 @@ static HRESULT vmr_get_current_image(struct video_window *iface, LONG *size, LON
 out:
     if (surface) IDirect3DSurface9_Release(surface);
     if (rt) IDirect3DSurface9_Release(rt);
-    LeaveCriticalSection(&filter->renderer.csRenderLock);
+    LeaveCriticalSection(&filter->renderer.filter.stream_cs);
     return hr;
 }
 
diff --git a/dlls/strmbase/filter.c b/dlls/strmbase/filter.c
index 4f2fe5967d7..93593e4c189 100644
--- a/dlls/strmbase/filter.c
+++ b/dlls/strmbase/filter.c
@@ -527,6 +527,9 @@ void strmbase_filter_init(struct strmbase_filter *filter, IUnknown *outer,
     InitializeCriticalSection(&filter->filter_cs);
     if (filter->filter_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
         filter->filter_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": strmbase_filter.filter_cs");
+    InitializeCriticalSection(&filter->stream_cs);
+    if (filter->stream_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
+        filter->stream_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": strmbase_filter.stream_cs");
     filter->clsid = *clsid;
     filter->pin_version = 1;
     filter->ops = ops;
@@ -541,4 +544,7 @@ void strmbase_filter_cleanup(struct strmbase_filter *filter)
     if (filter->filter_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
         filter->filter_cs.DebugInfo->Spare[0] = 0;
     DeleteCriticalSection(&filter->filter_cs);
+    if (filter->stream_cs.DebugInfo != (RTL_CRITICAL_SECTION_DEBUG *)-1)
+        filter->stream_cs.DebugInfo->Spare[0] = 0;
+    DeleteCriticalSection(&filter->stream_cs);
 }
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index 24d209703ca..b63129e0e87 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -192,7 +192,7 @@ static HRESULT WINAPI BaseRenderer_Receive(struct strmbase_sink *pin, IMediaSamp
         DeleteMediaType(mt);
     }
 
-    EnterCriticalSection(&filter->csRenderLock);
+    EnterCriticalSection(&filter->filter.stream_cs);
 
     if (filter->filter.clock && SUCCEEDED(IMediaSample_GetTime(sample, &start, &stop)))
     {
@@ -229,7 +229,7 @@ static HRESULT WINAPI BaseRenderer_Receive(struct strmbase_sink *pin, IMediaSamp
 
             if (ret == 1)
             {
-                LeaveCriticalSection(&filter->csRenderLock);
+                LeaveCriticalSection(&filter->filter.stream_cs);
                 TRACE("Flush signaled; discarding current sample.\n");
                 return S_OK;
             }
@@ -245,7 +245,7 @@ static HRESULT WINAPI BaseRenderer_Receive(struct strmbase_sink *pin, IMediaSamp
 
     QualityControlRender_DoQOS(&filter->qc);
 
-    LeaveCriticalSection(&filter->csRenderLock);
+    LeaveCriticalSection(&filter->filter.stream_cs);
 
     return hr;
 }
@@ -273,7 +273,7 @@ static HRESULT sink_eos(struct strmbase_sink *iface)
     IFilterGraph *graph = filter->filter.graph;
     IMediaEventSink *event_sink;
 
-    EnterCriticalSection(&filter->csRenderLock);
+    EnterCriticalSection(&filter->filter.stream_cs);
 
     filter->eos = TRUE;
 
@@ -287,7 +287,7 @@ static HRESULT sink_eos(struct strmbase_sink *iface)
     strmbase_passthrough_eos(&filter->passthrough);
     SetEvent(filter->state_event);
 
-    LeaveCriticalSection(&filter->csRenderLock);
+    LeaveCriticalSection(&filter->filter.stream_cs);
     return S_OK;
 }
 
@@ -304,14 +304,14 @@ static HRESULT sink_end_flush(struct strmbase_sink *iface)
 {
     struct strmbase_renderer *filter = impl_from_IPin(&iface->pin.IPin_iface);
 
-    EnterCriticalSection(&filter->csRenderLock);
+    EnterCriticalSection(&filter->filter.stream_cs);
 
     filter->eos = FALSE;
     QualityControlRender_Start(&filter->qc, filter->stream_start);
     strmbase_passthrough_invalidate_time(&filter->passthrough);
     ResetEvent(filter->flush_event);
 
-    LeaveCriticalSection(&filter->csRenderLock);
+    LeaveCriticalSection(&filter->filter.stream_cs);
     return S_OK;
 }
 
@@ -336,9 +336,6 @@ void strmbase_renderer_cleanup(struct strmbase_renderer *filter)
 
     strmbase_passthrough_cleanup(&filter->passthrough);
 
-    filter->csRenderLock.DebugInfo->Spare[0] = 0;
-    DeleteCriticalSection(&filter->csRenderLock);
-
     CloseHandle(filter->state_event);
     CloseHandle(filter->advise_event);
     CloseHandle(filter->flush_event);
@@ -358,8 +355,6 @@ void strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer,
 
     strmbase_sink_init(&filter->sink, &filter->filter, sink_name, &sink_ops, NULL);
 
-    InitializeCriticalSection(&filter->csRenderLock);
-    filter->csRenderLock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__": strmbase_renderer.csRenderLock");
     filter->state_event = CreateEventW(NULL, TRUE, TRUE, NULL);
     filter->advise_event = CreateEventW(NULL, FALSE, FALSE, NULL);
     filter->flush_event = CreateEventW(NULL, TRUE, TRUE, NULL);
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index c56a8d96037..4bb9d898a1a 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -127,6 +127,7 @@ struct strmbase_filter
     IUnknown *outer_unk;
     LONG refcount;
     CRITICAL_SECTION filter_cs;
+    CRITICAL_SECTION stream_cs;
 
     FILTER_STATE state;
     IReferenceClock *clock;
@@ -295,7 +296,6 @@ struct strmbase_renderer
 
     struct strmbase_sink sink;
 
-    CRITICAL_SECTION csRenderLock;
     /* Signaled when the filter has completed a state change. The filter waits
      * for this event in IBaseFilter::GetState(). */
     HANDLE state_event;
-- 
2.30.0




More information about the wine-devel mailing list