summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYeongjin Jeong <yeongjin.jeong@navercorp.com>2019-04-29 15:22:52 +0900
committerTim-Philipp Müller <tim@centricular.com>2020-09-25 00:47:28 +0100
commitbaa4914caeb4ae4bd77be54c917137f2f8b80736 (patch)
tree28d6450a116b12b23839599afe2246af586e57ea
parent32c4386c8587b1007b6367bc0ddd2a675c3a1d93 (diff)
downloadgst-libav-baa4914caeb4ae4bd77be54c917137f2f8b80736.tar.gz
avauddec: Ensure drain even if codec has not delay capabilities
There are decoders that need to be drained if they work on multi-threads, even if AV_CODEC_CAP_DELAY is not set. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/91>
-rw-r--r--ext/libav/gstavauddec.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/ext/libav/gstavauddec.c b/ext/libav/gstavauddec.c
index f400d86..45eda1c 100644
--- a/ext/libav/gstavauddec.c
+++ b/ext/libav/gstavauddec.c
@@ -597,29 +597,20 @@ no_codec:
static void
gst_ffmpegauddec_drain (GstFFMpegAudDec * ffmpegdec)
{
- GstFFMpegAudDecClass *oclass;
gboolean got_any_frames = FALSE;
+ gboolean got_frame;
- oclass = (GstFFMpegAudDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
-
- if (oclass->in_plugin->capabilities & AV_CODEC_CAP_DELAY) {
- gboolean got_frame;
-
- GST_LOG_OBJECT (ffmpegdec,
- "codec has delay capabilities, calling until libav has drained everything");
-
- if (avcodec_send_packet (ffmpegdec->context, NULL))
- goto send_packet_failed;
+ if (avcodec_send_packet (ffmpegdec->context, NULL))
+ goto send_packet_failed;
- do {
- GstFlowReturn ret;
+ do {
+ GstFlowReturn ret;
- got_frame = gst_ffmpegauddec_frame (ffmpegdec, &ret);
- if (got_frame)
- got_any_frames = TRUE;
- } while (got_frame);
- avcodec_flush_buffers (ffmpegdec->context);
- }
+ got_frame = gst_ffmpegauddec_frame (ffmpegdec, &ret);
+ if (got_frame)
+ got_any_frames = TRUE;
+ } while (got_frame);
+ avcodec_flush_buffers (ffmpegdec->context);
if (got_any_frames)
gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec), NULL, 1);