baseaudiosink: arrange for running clock when rendering eos
Commit ba2e500bd992d8ad7db0da923801964964835967 ensured to provide a running clock when EOS had finished rendering. However, other measures are needed (and were in place before) to ensure a running clock when EOS still needs rendering (i.e. waiting). So, specifically, re-introduce eos_rendering removed in aforementioned commit, this time as a public variable so subclasses can be aware of the situation. Fixes (part of) #645961. API: GstBaseAudioSink:eos_rendering
This commit is contained in:
parent
bb081770c8
commit
e73f293ee5
@ -836,6 +836,10 @@ gst_base_audio_sink_drain (GstBaseAudioSink * sink)
|
|||||||
if (!sink->ringbuffer->spec.rate)
|
if (!sink->ringbuffer->spec.rate)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
/* if PLAYING is interrupted,
|
||||||
|
* arrange to have clock running when going to PLAYING again */
|
||||||
|
g_atomic_int_set (&sink->abidata.ABI.eos_rendering, 1);
|
||||||
|
|
||||||
/* need to start playback before we can drain, but only when
|
/* need to start playback before we can drain, but only when
|
||||||
* we have successfully negotiated a format and thus acquired the
|
* we have successfully negotiated a format and thus acquired the
|
||||||
* ringbuffer. */
|
* ringbuffer. */
|
||||||
@ -853,6 +857,7 @@ gst_base_audio_sink_drain (GstBaseAudioSink * sink)
|
|||||||
|
|
||||||
GST_DEBUG_OBJECT (sink, "drained audio");
|
GST_DEBUG_OBJECT (sink, "drained audio");
|
||||||
}
|
}
|
||||||
|
g_atomic_int_set (&sink->abidata.ABI.eos_rendering, 0);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1906,7 +1911,8 @@ gst_base_audio_sink_change_state (GstElement * element,
|
|||||||
GST_OBJECT_UNLOCK (sink);
|
GST_OBJECT_UNLOCK (sink);
|
||||||
|
|
||||||
gst_ring_buffer_may_start (sink->ringbuffer, TRUE);
|
gst_ring_buffer_may_start (sink->ringbuffer, TRUE);
|
||||||
if (GST_BASE_SINK_CAST (sink)->pad_mode == GST_ACTIVATE_PULL || eos) {
|
if (GST_BASE_SINK_CAST (sink)->pad_mode == GST_ACTIVATE_PULL ||
|
||||||
|
g_atomic_int_get (&sink->abidata.ABI.eos_rendering) || eos) {
|
||||||
/* we always start the ringbuffer in pull mode immediatly */
|
/* we always start the ringbuffer in pull mode immediatly */
|
||||||
/* sync rendering on eos needs running clock,
|
/* sync rendering on eos needs running clock,
|
||||||
* and others need running clock when finished rendering eos */
|
* and others need running clock when finished rendering eos */
|
||||||
|
@ -127,7 +127,14 @@ struct _GstBaseAudioSink {
|
|||||||
/*< private >*/
|
/*< private >*/
|
||||||
GstBaseAudioSinkPrivate *priv;
|
GstBaseAudioSinkPrivate *priv;
|
||||||
|
|
||||||
gpointer _gst_reserved[GST_PADDING - 1];
|
union {
|
||||||
|
struct {
|
||||||
|
/*< protected >*/
|
||||||
|
/* with g_atomic_; currently rendering eos */
|
||||||
|
gboolean eos_rendering;
|
||||||
|
} ABI;
|
||||||
|
gpointer _gst_reserved[GST_PADDING - 1];
|
||||||
|
} abidata;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user