Zebediah Figura : quartz: Move the current sample tracking back to strmbase.
Alexandre Julliard
julliard at winehq.org
Thu Mar 11 15:59:34 CST 2021
Module: wine
Branch: master
Commit: bcfa8f413b24579bda0538fe5e5119c257665d4a
URL: https://source.winehq.org/git/wine.git/?a=commit;h=bcfa8f413b24579bda0538fe5e5119c257665d4a
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Wed Mar 10 19:23:34 2021 -0600
quartz: Move the current sample tracking back to strmbase.
Only the video renderer uses this, but we'd like to deduplicate the
wait-on-preroll behaviour.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/quartz/videorenderer.c | 9 ++-------
dlls/strmbase/renderer.c | 4 ++++
include/wine/strmbase.h | 2 ++
3 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index a925340a676..ed5774bf484 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -50,7 +50,6 @@ struct video_renderer
DWORD saved_style;
HANDLE run_event;
- IMediaSample *current_sample;
};
static inline struct video_renderer *impl_from_video_window(struct video_window *iface)
@@ -109,14 +108,10 @@ static HRESULT WINAPI VideoRenderer_DoRenderSample(struct strmbase_renderer *ifa
{
const HANDLE events[2] = {filter->run_event, filter->renderer.flush_event};
- filter->current_sample = pSample;
-
SetEvent(filter->renderer.state_event);
LeaveCriticalSection(&filter->renderer.filter.stream_cs);
WaitForMultipleObjects(2, events, FALSE, INFINITE);
EnterCriticalSection(&filter->renderer.filter.stream_cs);
-
- filter->current_sample = NULL;
}
return S_OK;
@@ -276,7 +271,7 @@ static HRESULT video_renderer_get_current_image(struct video_window *iface, LONG
return VFW_E_NOT_PAUSED;
}
- if (!filter->current_sample)
+ if (!filter->renderer.current_sample)
{
LeaveCriticalSection(&filter->renderer.filter.stream_cs);
return E_UNEXPECTED;
@@ -289,7 +284,7 @@ static HRESULT video_renderer_get_current_image(struct video_window *iface, LONG
}
memcpy(image, bih, sizeof(BITMAPINFOHEADER));
- IMediaSample_GetPointer(filter->current_sample, &sample_data);
+ IMediaSample_GetPointer(filter->renderer.current_sample, &sample_data);
memcpy((char *)image + sizeof(BITMAPINFOHEADER), sample_data, image_size);
LeaveCriticalSection(&filter->renderer.filter.stream_cs);
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index 47017f5ced5..b384ea991d9 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -353,7 +353,11 @@ static HRESULT WINAPI BaseRenderer_Receive(struct strmbase_sink *pin, IMediaSamp
}
if (state == State_Paused)
+ {
+ filter->current_sample = sample;
hr = filter->pFuncsTable->pfnDoRenderSample(filter, sample);
+ filter->current_sample = NULL;
+ }
if (need_wait)
{
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 4b5ecc86721..e902790ecb1 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -291,6 +291,8 @@ struct strmbase_renderer
HANDLE flush_event;
REFERENCE_TIME stream_start;
+ IMediaSample *current_sample;
+
IQualityControl *qc_sink;
REFERENCE_TIME last_left, avg_duration, avg_pt;
double avg_rate;
More information about the wine-cvs
mailing list