Zebediah Figura : strmbase: Make the "current_*" fields of struct strmbase_renderer into local variables.
Alexandre Julliard
julliard at winehq.org
Wed Mar 10 14:58:45 CST 2021
Module: wine
Branch: master
Commit: 0d07d1ec6128c4f3b7613e4dd71032080c843047
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0d07d1ec6128c4f3b7613e4dd71032080c843047
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Tue Mar 9 16:19:57 2021 -0600
strmbase: Make the "current_*" fields of struct strmbase_renderer into local variables.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/strmbase/renderer.c | 57 +++++++++++++-----------------------------------
include/wine/strmbase.h | 1 -
2 files changed, 15 insertions(+), 43 deletions(-)
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index b3641ddee6d..47017f5ced5 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -63,18 +63,12 @@ static void reset_qos(struct strmbase_renderer *filter)
filter->avg_rate = -1.0;
}
-static void perform_qos(struct strmbase_renderer *filter)
+static void perform_qos(struct strmbase_renderer *filter,
+ const REFERENCE_TIME start, const REFERENCE_TIME stop, REFERENCE_TIME jitter)
{
- REFERENCE_TIME start, stop, jitter, pt, entered, left, duration;
+ REFERENCE_TIME pt, entered, left, duration;
double rate;
- if (!filter->filter.clock || filter->current_rstart < 0)
- return;
-
- start = filter->current_rstart;
- stop = filter->current_rstop;
- jitter = filter->current_jitter;
-
if (jitter < 0)
{
/* This is the time the buffer entered the sink. */
@@ -155,16 +149,16 @@ static void perform_qos(struct strmbase_renderer *filter)
Quality q;
/* If we have a valid rate, start sending QoS messages. */
- if (filter->current_jitter < 0)
+ if (jitter < 0)
{
/* Make sure we never go below 0 when adding the jitter to the
* timestamp. */
- if (filter->current_rstart < -filter->current_jitter)
- filter->current_jitter = -filter->current_rstart;
+ if (start < -jitter)
+ jitter = -start;
}
else
{
- filter->current_jitter += (filter->current_rstop - filter->current_rstart);
+ jitter += stop - start;
}
q.Type = (jitter > 0 ? Famine : Flood);
@@ -173,8 +167,8 @@ static void perform_qos(struct strmbase_renderer *filter)
q.Proportion = 200;
else if (q.Proportion > 5000)
q.Proportion = 5000;
- q.Late = filter->current_jitter;
- q.TimeStamp = filter->current_rstart;
+ q.Late = jitter;
+ q.TimeStamp = start;
IQualityControl_Notify(&filter->IQualityControl_iface, &filter->filter.IBaseFilter_iface, q);
}
@@ -182,27 +176,6 @@ static void perform_qos(struct strmbase_renderer *filter)
filter->last_left = left;
}
-static void begin_render(struct strmbase_renderer *filter,
- REFERENCE_TIME start, REFERENCE_TIME stop)
-{
- filter->current_rstart = start;
- filter->current_rstop = max(stop, start);
-
- if (start >= 0)
- {
- REFERENCE_TIME now;
- IReferenceClock_GetTime(filter->filter.clock, &now);
- filter->current_jitter = (now - filter->stream_start) - start;
- }
- else
- {
- filter->current_jitter = 0;
- }
-
- TRACE("start %s, stop %s, jitter %s.\n",
- debugstr_time(start), debugstr_time(stop), debugstr_time(filter->current_jitter));
-}
-
static inline struct strmbase_renderer *impl_from_strmbase_filter(struct strmbase_filter *iface)
{
return CONTAINING_RECORD(iface, struct strmbase_renderer, filter);
@@ -384,14 +357,16 @@ static HRESULT WINAPI BaseRenderer_Receive(struct strmbase_sink *pin, IMediaSamp
if (need_wait)
{
- REFERENCE_TIME now;
+ REFERENCE_TIME now, jitter;
DWORD_PTR cookie;
IReferenceClock_GetTime(filter->filter.clock, &now);
- begin_render(filter, start, stop);
+ /* "jitter" describes how early (negative) or late (positive) this
+ * buffer arrived, relative to its PTS. */
+ jitter = (now - filter->stream_start) - start;
- if (now - filter->stream_start - start <= -10000)
+ if (jitter <= -10000) /* if we are early by at least 1 ms */
{
HANDLE handles[2] = {filter->advise_event, filter->flush_event};
DWORD ret;
@@ -412,7 +387,7 @@ static HRESULT WINAPI BaseRenderer_Receive(struct strmbase_sink *pin, IMediaSamp
if (state == State_Running)
hr = filter->pFuncsTable->pfnDoRenderSample(filter, sample);
- perform_qos(filter);
+ perform_qos(filter, start, stop, jitter);
}
else
{
@@ -588,8 +563,6 @@ void strmbase_renderer_init(struct strmbase_renderer *filter, IUnknown *outer,
ISeekingPassThru_Init(&filter->passthrough.ISeekingPassThru_iface, TRUE, &filter->sink.pin.IPin_iface);
filter->IQualityControl_iface.lpVtbl = &quality_control_vtbl;
- filter->current_rstart = filter->current_rstop = -1;
-
filter->pFuncsTable = ops;
strmbase_sink_init(&filter->sink, &filter->filter, sink_name, &sink_ops, NULL);
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index cad5ebe0a42..4b5ecc86721 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -293,7 +293,6 @@ struct strmbase_renderer
IQualityControl *qc_sink;
REFERENCE_TIME last_left, avg_duration, avg_pt;
- REFERENCE_TIME current_jitter, current_rstart, current_rstop;
double avg_rate;
const struct strmbase_renderer_ops *pFuncsTable;
More information about the wine-cvs
mailing list