mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-29 19:50:40 +00:00
audiodecoder: Error out earlier in a few places if something goes wrong
This commit is contained in:
parent
a69d6ddb74
commit
eb68a2d5a7
1 changed files with 15 additions and 5 deletions
|
@ -772,8 +772,11 @@ again:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inbuf) {
|
if (inbuf) {
|
||||||
buf = inbuf;
|
if (ret == GST_FLOW_OK) {
|
||||||
goto again;
|
buf = inbuf;
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
gst_buffer_unref (inbuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1050,7 +1053,6 @@ gst_audio_decoder_push_buffers (GstAudioDecoder * dec, gboolean force)
|
||||||
GST_DEBUG_OBJECT (dec, "available: %d", av);
|
GST_DEBUG_OBJECT (dec, "available: %d", av);
|
||||||
|
|
||||||
while (ret == GST_FLOW_OK) {
|
while (ret == GST_FLOW_OK) {
|
||||||
|
|
||||||
flush = 0;
|
flush = 0;
|
||||||
ctx->eos = force;
|
ctx->eos = force;
|
||||||
|
|
||||||
|
@ -1150,15 +1152,21 @@ gst_audio_decoder_drain (GstAudioDecoder * dec)
|
||||||
if (dec->priv->drained && !dec->priv->gather)
|
if (dec->priv->drained && !dec->priv->gather)
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
else {
|
else {
|
||||||
|
GstFlowReturn ret2;
|
||||||
|
|
||||||
/* dispatch reverse pending buffers */
|
/* dispatch reverse pending buffers */
|
||||||
/* chain eventually calls upon drain as well, but by that time
|
/* chain eventually calls upon drain as well, but by that time
|
||||||
* gather list should be clear, so ok ... */
|
* gather list should be clear, so ok ... */
|
||||||
if (dec->output_segment.rate < 0.0 && dec->priv->gather)
|
if (dec->output_segment.rate < 0.0 && dec->priv->gather)
|
||||||
gst_audio_decoder_chain_reverse (dec, NULL);
|
gst_audio_decoder_chain_reverse (dec, NULL);
|
||||||
/* have subclass give all it can */
|
/* have subclass give all it can, if this fails we
|
||||||
ret = gst_audio_decoder_push_buffers (dec, TRUE);
|
* still want the subclass to output everything it
|
||||||
|
* can but we will return the error from here */
|
||||||
|
ret2 = gst_audio_decoder_push_buffers (dec, TRUE);
|
||||||
/* ensure all output sent */
|
/* ensure all output sent */
|
||||||
ret = gst_audio_decoder_output (dec, NULL);
|
ret = gst_audio_decoder_output (dec, NULL);
|
||||||
|
if (ret2 != GST_FLOW_OK)
|
||||||
|
ret = ret2;
|
||||||
/* everything should be away now */
|
/* everything should be away now */
|
||||||
if (dec->priv->frames.length) {
|
if (dec->priv->frames.length) {
|
||||||
/* not fatal/impossible though if subclass/codec eats stuff */
|
/* not fatal/impossible though if subclass/codec eats stuff */
|
||||||
|
@ -1334,6 +1342,8 @@ gst_audio_decoder_flush_decode (GstAudioDecoder * dec)
|
||||||
/* decode buffer, resulting data prepended to output queue */
|
/* decode buffer, resulting data prepended to output queue */
|
||||||
gst_buffer_ref (buf);
|
gst_buffer_ref (buf);
|
||||||
res = gst_audio_decoder_chain_forward (dec, buf);
|
res = gst_audio_decoder_chain_forward (dec, buf);
|
||||||
|
if (res != GST_FLOW_OK)
|
||||||
|
return res;
|
||||||
|
|
||||||
/* if we generated output, we can discard the buffer, else we
|
/* if we generated output, we can discard the buffer, else we
|
||||||
* keep it in the queue */
|
* keep it in the queue */
|
||||||
|
|
Loading…
Reference in a new issue