mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
avauddec: Ensure finish_subframe() and finish_frame() are paired
audiodecoder baseclass implementation is expecting that finish_subframe() is followed by finish_frame() in order clear its internal state related to subframe. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/90>
This commit is contained in:
parent
6ea6f1545b
commit
7388b14423
1 changed files with 18 additions and 7 deletions
|
@ -611,10 +611,14 @@ gst_ffmpegauddec_drain (GstFFMpegAudDec * ffmpegdec)
|
||||||
} while (got_frame);
|
} while (got_frame);
|
||||||
avcodec_flush_buffers (ffmpegdec->context);
|
avcodec_flush_buffers (ffmpegdec->context);
|
||||||
|
|
||||||
if (got_any_frames && ret == GST_FLOW_OK)
|
if (got_any_frames) {
|
||||||
ret =
|
GstFlowReturn new_ret =
|
||||||
gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec), NULL, 1);
|
gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec), NULL, 1);
|
||||||
|
|
||||||
|
if (ret == GST_FLOW_OK)
|
||||||
|
ret = new_ret;
|
||||||
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -723,12 +727,19 @@ gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf)
|
||||||
}
|
}
|
||||||
} while (got_frame);
|
} while (got_frame);
|
||||||
|
|
||||||
/* Only override the flow return value if previously did have a GST_FLOW_OK.
|
if (is_header || got_any_frames) {
|
||||||
* Failure to do this would result in skipping downstream issues caught in
|
/* Even if previous return wasn't GST_FLOW_OK, we need to call
|
||||||
* earlier steps. */
|
* _finish_frame() since baseclass is expecting that _finish_frame()
|
||||||
if (ret == GST_FLOW_OK && (is_header || got_any_frames)) {
|
* is followed by _finish_subframe()
|
||||||
ret =
|
*/
|
||||||
|
GstFlowReturn new_ret =
|
||||||
gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec), NULL, 1);
|
gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec), NULL, 1);
|
||||||
|
|
||||||
|
/* Only override the flow return value if previously did have a GST_FLOW_OK.
|
||||||
|
* Failure to do this would result in skipping downstream issues caught in
|
||||||
|
* earlier steps. */
|
||||||
|
if (ret == GST_FLOW_OK)
|
||||||
|
ret = new_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
unmap:
|
unmap:
|
||||||
|
|
Loading…
Reference in a new issue