mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 19:55:32 +00:00
baseaudiosink: arrange for running clock when rendering eos
Commit ba2e500bd9
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
2 changed files with 15 additions and 2 deletions
|
@ -836,6 +836,10 @@ gst_base_audio_sink_drain (GstBaseAudioSink * sink)
|
|||
if (!sink->ringbuffer->spec.rate)
|
||||
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
|
||||
* we have successfully negotiated a format and thus acquired the
|
||||
* ringbuffer. */
|
||||
|
@ -853,6 +857,7 @@ gst_base_audio_sink_drain (GstBaseAudioSink * sink)
|
|||
|
||||
GST_DEBUG_OBJECT (sink, "drained audio");
|
||||
}
|
||||
g_atomic_int_set (&sink->abidata.ABI.eos_rendering, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1906,7 +1911,8 @@ gst_base_audio_sink_change_state (GstElement * element,
|
|||
GST_OBJECT_UNLOCK (sink);
|
||||
|
||||
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 */
|
||||
/* sync rendering on eos needs running clock,
|
||||
* and others need running clock when finished rendering eos */
|
||||
|
|
|
@ -127,7 +127,14 @@ struct _GstBaseAudioSink {
|
|||
/*< private >*/
|
||||
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…
Reference in a new issue